diff --git a/app/build.gradle b/app/build.gradle index 1cc7eb2..bf01bc2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.github.axet.audiorecorder" minSdkVersion 9 targetSdkVersion 23 // 24+ file:// unable to open - versionCode 277 - versionName "3.2.19" + versionCode 278 + versionName "3.2.20" } signingConfigs { release { @@ -57,5 +57,5 @@ android { dependencies { testImplementation 'junit:junit:4.12' - implementation 'com.github.axet:android-audio-library:1.0.118' // implementation project(':android-audio-library') + implementation 'com.github.axet:android-audio-library:1.0.121' // implementation project(':android-audio-library') } diff --git a/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java b/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java index fc5a030..efddbdf 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java +++ b/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java @@ -104,12 +104,12 @@ public class MainActivity extends AppCompatThemeActivity { receiver = new ScreenReceiver() { @Override - public void onReceive(Context context, Intent intent) { + public void onScreenOff() { boolean p = storage.recordingPending(); boolean c = shared.getBoolean(MainApplication.PREFERENCE_CONTROLS, false); if (!p && !c) return; - super.onReceive(context, intent); + super.onScreenOff(); } }; receiver.registerReceiver(this); diff --git a/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java b/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java index c20059d..eca84e9 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java +++ b/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java @@ -727,17 +727,19 @@ public class RecordingActivity extends AppCompatThemeActivity { final SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(this); - TreeMap map = new TreeMap<>(); - map.put(getString(R.string.source_mic), MediaRecorder.AudioSource.MIC); - map.put(getString(R.string.source_default), MediaRecorder.AudioSource.DEFAULT); - if (Sound.isUnprocessedSupported(this)) - map.put(getString(R.string.source_raw), MediaRecorder.AudioSource.UNPROCESSED); - else - map.put(getString(R.string.source_raw), MediaRecorder.AudioSource.VOICE_RECOGNITION); - map.put(getString(R.string.source_bluetooth), MediaRecorder.AudioSource.MIC); + int user; + + if (shared.getString(MainApplication.PREFERENCE_SOURCE, getString(R.string.source_mic)).equals(getString(R.string.source_raw))) { + if (Sound.isUnprocessedSupported(this)) + user = MediaRecorder.AudioSource.UNPROCESSED; + else + user = MediaRecorder.AudioSource.VOICE_RECOGNITION; + } else { + user = MediaRecorder.AudioSource.MIC; + } int[] ss = new int[]{ - map.get(shared.getString(MainApplication.PREFERENCE_SOURCE, getString(R.string.source_mic))), + user, MediaRecorder.AudioSource.MIC, MediaRecorder.AudioSource.DEFAULT }; diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java b/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java index a52bace..dcedce1 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java +++ b/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java @@ -3,8 +3,10 @@ package com.github.axet.audiorecorder.app; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; +import android.support.v4.app.NotificationManagerCompat; import android.support.v7.preference.PreferenceManager; +import com.github.axet.androidlibrary.widgets.NotificationChannelCompat; import com.github.axet.audiolibrary.encoders.FormatFLAC; import com.github.axet.audiolibrary.encoders.FormatM4A; import com.github.axet.audiolibrary.encoders.FormatOGG; @@ -19,10 +21,18 @@ public class MainApplication extends com.github.axet.audiolibrary.app.MainApplic public static final String PREFERENCE_VERSION = "version"; + public NotificationChannelCompat channelStatus; + public int getUserTheme() { return getTheme(this, R.style.RecThemeLight, R.style.RecThemeDark); } + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + channelStatus = new NotificationChannelCompat(this, "status", "Status", NotificationManagerCompat.IMPORTANCE_LOW); + } + @Override public void onCreate() { super.onCreate(); diff --git a/app/src/main/java/com/github/axet/audiorecorder/services/RecordingService.java b/app/src/main/java/com/github/axet/audiorecorder/services/RecordingService.java index d74aefc..11e2559 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/services/RecordingService.java +++ b/app/src/main/java/com/github/axet/audiorecorder/services/RecordingService.java @@ -1,14 +1,11 @@ package com.github.axet.audiorecorder.services; import android.app.Notification; -import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; -import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; @@ -16,12 +13,15 @@ import android.os.IBinder; import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.support.v4.app.NotificationCompat; +import android.support.v4.app.NotificationManagerCompat; import android.util.Log; import android.view.View; +import android.widget.ImageView; import android.widget.RemoteViews; -import com.github.axet.androidlibrary.widgets.OptimizationPreferenceCompat; import com.github.axet.androidlibrary.widgets.ProximityShader; +import com.github.axet.androidlibrary.widgets.RemoteViewsCompat; +import com.github.axet.androidlibrary.widgets.ThemeUtils; import com.github.axet.audiolibrary.app.Storage; import com.github.axet.audiorecorder.R; import com.github.axet.audiorecorder.activities.MainActivity; @@ -48,6 +48,7 @@ public class RecordingService extends Service { public static String RECORD_BUTTON = RecordingService.class.getCanonicalName() + ".RECORD_BUTTON"; Storage storage; // for storage path + Notification notification; public static void startIfEnabled(Context context) { SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(context); @@ -107,14 +108,20 @@ public class RecordingService extends Service { public RecordingService() { } + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + } + @Override public void onCreate() { + setTheme(MainApplication.getTheme(this, R.style.RecThemeLight, R.style.RecThemeDark)); super.onCreate(); Log.d(TAG, "onCreate"); storage = new Storage(this); - startForeground(NOTIFICATION_RECORDING_ICON, build(new Intent())); + showNotificationAlarm(true, new Intent()); } @Override @@ -158,9 +165,6 @@ public class RecordingService extends Service { public void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestory"); - - stopForeground(false); - showNotificationAlarm(false, null); } @@ -181,9 +185,10 @@ public class RecordingService extends Service { new Intent(this, RecordingService.class).setAction(RECORD_BUTTON), PendingIntent.FLAG_UPDATE_CURRENT); - RemoteViews view = new RemoteViews(getPackageName(), MainApplication.getTheme(getBaseContext(), - R.layout.notifictaion_recording_light, - R.layout.notifictaion_recording_dark)); + RemoteViews view = new RemoteViews(getPackageName(), MainApplication.getTheme(this, R.layout.notifictaion_recording_light, R.layout.notifictaion_recording_dark)); + + RemoteViewsCompat.setImageViewTint(view, R.id.icon_circle, ThemeUtils.getThemeColor(this, R.attr.colorButtonNormal)); // android:tint="?attr/colorButtonNormal" not working API16 + RemoteViewsCompat.applyTheme(this, view); String title; String text; @@ -216,14 +221,14 @@ public class RecordingService extends Service { view.setTextViewText(R.id.notification_text, text); view.setOnClickPendingIntent(R.id.notification_pause, pe); view.setImageViewResource(R.id.notification_pause, !recording ? R.drawable.ic_play_arrow_black_24dp : R.drawable.ic_pause_black_24dp); - if (Build.VERSION.SDK_INT >= 15) - view.setContentDescription(R.id.notification_pause, getString(!recording ? R.string.record_button : R.string.pause_button)); + RemoteViewsCompat.setContentDescription(view, R.id.notification_pause, getString(!recording ? R.string.record_button : R.string.pause_button)); NotificationCompat.Builder builder = new NotificationCompat.Builder(this) .setOngoing(true) .setContentTitle(title) .setContentText(text) .setTicker(title) + .setWhen(notification == null ? System.currentTimeMillis() : notification.when) .setSmallIcon(R.drawable.ic_mic) .setContent(view); @@ -234,16 +239,24 @@ public class RecordingService extends Service { if (Build.VERSION.SDK_INT >= 21) builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC); - return builder.build(); + Notification n = builder.build(); + ((MainApplication) getApplication()).channelStatus.apply(n); + return n; } - // alarm dismiss button public void showNotificationAlarm(boolean show, Intent intent) { - NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); + NotificationManagerCompat nm = NotificationManagerCompat.from(this); if (!show) { - notificationManager.cancel(NOTIFICATION_RECORDING_ICON); + stopForeground(false); + nm.cancel(NOTIFICATION_RECORDING_ICON); + notification = null; } else { - notificationManager.notify(NOTIFICATION_RECORDING_ICON, build(intent)); + Notification n = build(intent); + if (notification == null) + startForeground(NOTIFICATION_RECORDING_ICON, n); + else + nm.notify(NOTIFICATION_RECORDING_ICON, n); + notification = n; } } diff --git a/app/src/main/res/raw-id/about.html b/app/src/main/res/raw-id/about.html new file mode 100644 index 0000000..e029f37 --- /dev/null +++ b/app/src/main/res/raw-id/about.html @@ -0,0 +1,24 @@ + + + + + + + +

Tentang

+

+ Android ramah! +

+ +

Perekam Audio dengan folder rekaman kustom, indikator volume rekaman yang bagus, notifikasi rekaman, merekam aktivitas layar kunci.

+ +
+
Lisensi:
+
GPLv3
+
Kode Sumber:
+
https://gitlab.com/axet/android-audio-recorder
+
+ + diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml new file mode 100644 index 0000000..b0eade6 --- /dev/null +++ b/app/src/main/res/values-id/strings.xml @@ -0,0 +1,70 @@ + + Audio Recorder + + + 48 kHz + 44.1 kHz (CD) + 32 kHz + 22 kHz + 16 kHz (bawaan) + 11 kHz + 8 kHz (telepon) + + + + Mik + Belum diproses + Bluetooth + + + + Tema Terang + Tema Gelap + + + + Mono (bawaan) + Stereo + + + Tak ada aplikasi penampil folder yang terpasang + jeda (menahan berdasarkan panggilan) + merekan + encoding + jeda + sunting + Konfirmasi batal + Encoding... + Jeda... + Merekam + Buka Folder Rekaman + Daftar Rekaman Kosong\n\nKlik Rekam untuk Memulai Rekaman + Rekam + Potong + Berhenti + Batal + Jeda + + Jalur Penyimpanan + Rasio Sampel + Encoding + Format file output (.wav, .m4a, ...) + Mode + Saluran rekaman + Nama Format + Jeda Selama ada Panggilan + Berhenti merekam saat menjawab dan lanjutkan saat menutup telepon + Mode Senyap + Masukkan telepon dalam \'mode senyap\' saat rekaman + Kontrol Layar Lockscreen + Perlihatkan kontrol saat telepon dikunci + Tema Aplikasi + Setel tema aplikasi (gelap / terang) + Aplikasi + Rekaman + Encoding on Fly + Mengaktifkan encoding on fly menonaktifkan pengeditan, dan pemulihan kerusakan + jeda (bluetooth terputus) + Cari + Simpan sebagai WAV + diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-sw700dp/dimens.xml similarity index 100% rename from app/src/main/res/values-w820dp/dimens.xml rename to app/src/main/res/values-sw700dp/dimens.xml diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 97c23de..71a8b1f 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -2,8 +2,47 @@ + mic default raw bluetooth + + + 48000 + 44100 + 32000 + 22050 + 16000 + 11025 + 8000 + + + + @string/source_mic + @string/source_raw + @string/source_bluetooth + + + + @string/Theme_Light + @string/Theme_Dark + + + + 1 + 2 + + + + 2017-02-01 09.08.01.wav + 1487926249.wav + 20170528T043902.wav + + + + %s + %T + %I + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c6b3251..c1fbdbd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,60 +11,22 @@ 8 kHz (telephone) - - 48000 - 44100 - 32000 - 22050 - 16000 - 11025 - 8000 - - Mic Unprocessed Bluetooth - - @string/source_mic - @string/source_raw - @string/source_bluetooth - - Theme White Theme Dark - - @string/Theme_Light - @string/Theme_Dark - - Mono (default) Stereo - - 1 - 2 - - - - 2017-02-01 09.08.01.wav - 1487926249.wav - 20170528T043902.wav - - - - %s - %T - %I - - No folder view application installed pause (hold by call) recording