diff --git a/app/build.gradle b/app/build.gradle
index 9df2ffb..e14be1c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -57,5 +57,5 @@ android {
dependencies {
testImplementation 'junit:junit:4.12'
- implementation 'com.github.axet:android-audio-library:1.0.127' // implementation project(':android-audio-library')
+ implementation 'com.github.axet:android-audio-library:1.0.129' // implementation project(':android-audio-library')
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8527b14..23cd998 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -35,6 +35,7 @@
+
@@ -75,7 +76,6 @@
android:name="com.github.axet.androidlibrary.services.StorageProvider"
android:authorities="com.github.axet.audiorecorder"
android:exported="false"
- android:grantUriPermissions="true">
+ android:grantUriPermissions="true" />
-
-
+
\ No newline at end of file
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 e0aa11c..6ecfde2 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
@@ -131,9 +131,8 @@ public class MainActivity extends AppCompatThemeActivity {
getMenuInflater().inflate(R.menu.menu_main, menu);
KeyguardManager myKM = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
- if (myKM.inKeyguardRestrictedInputMode()) {
+ if (myKM.inKeyguardRestrictedInputMode())
menu.findItem(R.id.action_settings).setVisible(false);
- }
MenuItem item = menu.findItem(R.id.action_show_folder);
Intent intent = StorageProvider.getProvider().openFolderIntent(storage.getStoragePath());
@@ -202,11 +201,6 @@ public class MainActivity extends AppCompatThemeActivity {
final SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(this);
- if (shared.getBoolean(AudioApplication.PREFERENCE_CONTROLS, false))
- showLocked(getWindow());
- else
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
-
invalidateOptionsMenu(); // update storage folder intent
try {
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 5e9b7ba..19642ce 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
@@ -119,10 +119,10 @@ public class RecordingActivity extends AppCompatThemeActivity {
MediaSessionCompat msc;
public static void startActivity(Context context, boolean pause) {
+ Log.d(TAG, "startActivity");
Intent i = new Intent(context, RecordingActivity.class);
- if (pause) {
+ if (pause)
i.setAction(RecordingActivity.START_PAUSE);
- }
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(i);
@@ -277,6 +277,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ Log.d(TAG, "onCreate");
showLocked(getWindow());
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
@@ -540,7 +541,12 @@ public class RecordingActivity extends AppCompatThemeActivity {
void stopRecording() {
if (thread != null) {
- interrupt.set(true);
+ interrupt.set(true); // soft interrupt
+ try {
+ thread.join();
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
thread = null;
}
pitch.stop();
@@ -854,7 +860,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
interrupt = new AtomicBoolean(false);
- thread = new Thread(new Runnable() {
+ thread = new Thread("RecordingThread") {
@Override
public void run() {
if (old != null) {
@@ -977,7 +983,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
}
}
}
- }, "RecordingThread");
+ };
thread.start();
RecordingService.startService(this, Storage.getDocumentName(targetUri), thread != null, encoder != null, duration);
@@ -1104,9 +1110,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
@Override
public void run() { // success
Storage.delete(encoder.in); // delete raw recording
-
last.run();
-
d.cancel();
}
}, new Runnable() {
diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/AudioApplication.java b/app/src/main/java/com/github/axet/audiorecorder/app/AudioApplication.java
index 957478a..20ee121 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/app/AudioApplication.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/app/AudioApplication.java
@@ -8,6 +8,7 @@ import android.content.SharedPreferences;
import android.os.Build;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v7.preference.PreferenceManager;
+import android.util.Log;
import android.view.View;
import com.github.axet.androidlibrary.widgets.NotificationChannelCompat;
@@ -38,6 +39,7 @@ public class AudioApplication extends com.github.axet.audiolibrary.app.MainAppli
@Override
public void onCreate() {
super.onCreate();
+ Log.d(TAG, "onCreate");
channelStatus = new NotificationChannelCompat(this, "status", "Status", NotificationManagerCompat.IMPORTANCE_LOW);
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 4cf69ce..effa8bc 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
@@ -18,7 +18,6 @@ import android.view.View;
import com.github.axet.androidlibrary.widgets.ProximityShader;
import com.github.axet.androidlibrary.widgets.RemoteNotificationCompat;
-import com.github.axet.androidlibrary.widgets.RemoteViewsCompat;
import com.github.axet.audiolibrary.app.Storage;
import com.github.axet.audiorecorder.R;
import com.github.axet.audiorecorder.activities.MainActivity;
@@ -28,12 +27,7 @@ import com.github.axet.audiorecorder.app.AudioApplication;
import java.io.File;
/**
- * RecordingActivity more likly to be removed from memory when paused then service. Notification button
- * does not handle getActvity without unlocking screen. The only option is to have Service.
- *
- * So, lets have it.
- *
- * Maybe later this class will be converted for fully feature recording service with recording thread.
+ * Sometimes RecordingActivity started twice when launched from lockscreen. We need service and move recording into Application object.
*/
public class RecordingService extends Service {
public static final String TAG = RecordingService.class.getSimpleName();
@@ -113,7 +107,7 @@ public class RecordingService extends Service {
storage = new Storage(this);
- showNotificationAlarm(true, new Intent());
+ showNotification(true, new Intent());
}
@Override
@@ -123,7 +117,7 @@ public class RecordingService extends Service {
if (intent != null) {
String a = intent.getAction();
if (a == null) {
- showNotificationAlarm(true, intent);
+ showNotification(true, intent);
} else if (a.equals(PAUSE_BUTTON)) {
Intent i = new Intent(RecordingActivity.PAUSE_BUTTON);
sendBroadcast(i);
@@ -157,7 +151,7 @@ public class RecordingService extends Service {
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestory");
- showNotificationAlarm(false, null);
+ showNotification(false, null);
}
@SuppressLint("RestrictedApi")
@@ -167,10 +161,6 @@ public class RecordingService extends Service {
boolean encoding = intent.getBooleanExtra("encoding", false);
String duration = intent.getStringExtra("duration");
- PendingIntent main = PendingIntent.getService(this, 0,
- new Intent(this, RecordingService.class).setAction(SHOW_ACTIVITY).putExtra("targetFile", targetFile).putExtra("recording", recording),
- PendingIntent.FLAG_UPDATE_CURRENT);
-
PendingIntent pe = PendingIntent.getService(this, 0,
new Intent(this, RecordingService.class).setAction(PAUSE_BUTTON),
PendingIntent.FLAG_UPDATE_CURRENT);
@@ -179,11 +169,12 @@ public class RecordingService extends Service {
new Intent(this, RecordingService.class).setAction(RECORD_BUTTON),
PendingIntent.FLAG_UPDATE_CURRENT);
- RemoteNotificationCompat.Builder builder = new RemoteNotificationCompat.Builder(this, R.layout.notifictaion);
+ RemoteNotificationCompat.Builder builder;
String title;
String text;
if (targetFile == null) {
+ builder = new RemoteNotificationCompat.Low(this, R.layout.notifictaion);
title = getString(R.string.app_name);
Uri f = storage.getStoragePath();
long free = storage.getFree(f);
@@ -191,7 +182,10 @@ public class RecordingService extends Service {
text = AudioApplication.formatFree(this, free, sec);
builder.setViewVisibility(R.id.notification_record, View.VISIBLE);
builder.setViewVisibility(R.id.notification_pause, View.GONE);
+ PendingIntent main = PendingIntent.getActivity(this, 0, new Intent(this, RecordingService.class), PendingIntent.FLAG_UPDATE_CURRENT);
+ builder.setContentIntent(main);
} else {
+ builder = new RemoteNotificationCompat.Builder(this, R.layout.notifictaion);
if (recording)
title = getString(R.string.recording_title);
else
@@ -201,6 +195,12 @@ public class RecordingService extends Service {
text = ".../" + targetFile;
builder.setViewVisibility(R.id.notification_record, View.GONE);
builder.setViewVisibility(R.id.notification_pause, View.VISIBLE);
+ PendingIntent main = PendingIntent.getService(this, 0,
+ new Intent(this, RecordingService.class).setAction(SHOW_ACTIVITY)
+ .putExtra("targetFile", targetFile)
+ .putExtra("recording", recording),
+ PendingIntent.FLAG_UPDATE_CURRENT);
+ builder.setMainIntent(main);
}
if (encoding) {
@@ -218,7 +218,6 @@ public class RecordingService extends Service {
.setImageViewTint(R.id.icon_circle, R.attr.colorButtonNormal)
.setTitle(title)
.setText(text)
- .setMainIntent(main)
.setWhen(notification)
.setOngoing(true)
.setSmallIcon(R.drawable.ic_mic);
@@ -226,7 +225,7 @@ public class RecordingService extends Service {
return builder.build();
}
- public void showNotificationAlarm(boolean show, Intent intent) {
+ public void showNotification(boolean show, Intent intent) {
NotificationManagerCompat nm = NotificationManagerCompat.from(this);
if (!show) {
stopForeground(false);
diff --git a/app/src/main/res/layout/remoteview_header.xml b/app/src/main/res/layout/remoteview_header.xml
new file mode 100644
index 0000000..9abe339
--- /dev/null
+++ b/app/src/main/res/layout/remoteview_header.xml
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+