diff --git a/app/build.gradle b/app/build.gradle index 2cb90c2..a5f2993 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.142' // implementation project(':android-audio-library') + implementation 'com.github.axet:android-audio-library:1.0.143' // 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 afeb2c0..c150bc5 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 @@ -2,7 +2,6 @@ package com.github.axet.audiorecorder.activities; import android.app.KeyguardManager; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; @@ -24,16 +23,15 @@ import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; -import com.github.axet.androidlibrary.app.SuperUser; import com.github.axet.androidlibrary.services.StorageProvider; import com.github.axet.androidlibrary.widgets.AboutPreferenceCompat; import com.github.axet.androidlibrary.widgets.AppCompatThemeActivity; import com.github.axet.androidlibrary.widgets.ErrorDialog; import com.github.axet.androidlibrary.widgets.SearchView; -import com.github.axet.audiolibrary.app.Recordings; import com.github.axet.audiolibrary.app.Storage; import com.github.axet.audiorecorder.R; import com.github.axet.audiorecorder.app.AudioApplication; +import com.github.axet.audiorecorder.app.Recordings; import com.github.axet.audiorecorder.services.RecordingService; public class MainActivity extends AppCompatThemeActivity { @@ -47,8 +45,6 @@ public class MainActivity extends AppCompatThemeActivity { ListView list; Recordings recordings; Storage storage; - View progressEmpty; - View progressText; ScreenReceiver receiver; @@ -74,9 +70,6 @@ public class MainActivity extends AppCompatThemeActivity { setContentView(R.layout.activity_main); - progressEmpty = findViewById(R.id.progress_empty); - progressText = findViewById(R.id.progress_text); - storage = new Storage(this); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); @@ -93,6 +86,7 @@ public class MainActivity extends AppCompatThemeActivity { }); list = (ListView) findViewById(R.id.list); + list.setEmptyView(findViewById(R.id.empty_list)); recordings = new Recordings(this, list) { @Override public void showDialog(AlertDialog.Builder e) { @@ -102,7 +96,6 @@ public class MainActivity extends AppCompatThemeActivity { } }; list.setAdapter(recordings); - list.setEmptyView(findViewById(R.id.empty_list)); recordings.setToolbar((ViewGroup) findViewById(R.id.recording_toolbar)); RecordingService.startIfPending(this); @@ -213,8 +206,8 @@ public class MainActivity extends AppCompatThemeActivity { @Override public void run() { final int selected = getLastRecording(last); - progressEmpty.setVisibility(View.GONE); - progressText.setVisibility(View.VISIBLE); + recordings.progressEmpty.setVisibility(View.GONE); + recordings.progressText.setVisibility(View.VISIBLE); if (selected != -1) { recordings.select(selected); list.smoothScrollToPosition(selected); @@ -227,8 +220,8 @@ public class MainActivity extends AppCompatThemeActivity { } } }; - progressEmpty.setVisibility(View.VISIBLE); - progressText.setVisibility(View.GONE); + recordings.progressEmpty.setVisibility(View.VISIBLE); + recordings.progressText.setVisibility(View.GONE); recordings.load(!last.isEmpty(), done); diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/Recordings.java b/app/src/main/java/com/github/axet/audiorecorder/app/Recordings.java new file mode 100644 index 0000000..1a4d977 --- /dev/null +++ b/app/src/main/java/com/github/axet/audiorecorder/app/Recordings.java @@ -0,0 +1,55 @@ +package com.github.axet.audiorecorder.app; + +import android.content.Context; +import android.net.Uri; +import android.util.Log; +import android.view.View; +import android.widget.ListView; +import android.widget.TextView; + +import com.github.axet.androidlibrary.widgets.ErrorDialog; +import com.github.axet.audiorecorder.R; + +import java.util.ArrayList; + +public class Recordings extends com.github.axet.audiolibrary.app.Recordings { + public View progressEmpty; + public TextView progressText; + public View refresh; + + public Recordings(Context context, ListView list) { + super(context, list); + View empty = list.getEmptyView(); + progressEmpty = empty.findViewById(R.id.progress_empty); + progressText = (TextView) empty.findViewById(android.R.id.text1); + refresh = empty.findViewById(R.id.refresh); + refresh.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + load(false, null); + } + }); + } + + @Override + public void load(Uri mount, boolean clean, Runnable done) { + refresh.setVisibility(View.GONE); + progressText.setText(R.string.recording_list_is_empty); + if (!Storage.exists(getContext(), mount)) { + clear(); + if (done != null) + done.run(); + return; + } + try { + super.load(mount, clean, done); + } catch (RuntimeException e) { + Log.e(TAG, "load", e); + progressText.setText(ErrorDialog.toMessage(e)); + refresh.setVisibility(View.VISIBLE); + clear(); + if (done != null) + done.run(); + } + } +} 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 00c9bc8..998268c 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 @@ -184,12 +184,19 @@ public class RecordingService extends Service { if (duration != null) { title += " (" + duration + ")"; if (notificationIntent != null && notificationIntent.hasExtra("duration") && notificationIntent.getBooleanExtra("recording", false)) { // speed up - RemoteViews a = new RemoteViews(getPackageName(), notification.contentView.getLayoutId()); - a.setTextViewText(R.id.title, title); - RemoteViewsCompat.mergeRemoteViews(notification.contentView, a); - if (Build.VERSION.SDK_INT >= 16 && notification.bigContentView != null) - RemoteViewsCompat.mergeRemoteViews(notification.bigContentView, a); - return notification; + try { + RemoteViews a = new RemoteViews(getPackageName(), notification.contentView.getLayoutId()); + a.setTextViewText(R.id.title, title); + RemoteViewsCompat.mergeRemoteViews(notification.contentView, a); + if (Build.VERSION.SDK_INT >= 16 && notification.bigContentView != null) { + a = new RemoteViews(getPackageName(), notification.bigContentView.getLayoutId()); + a.setTextViewText(R.id.title, title); + RemoteViewsCompat.mergeRemoteViews(notification.bigContentView, a); + } + return notification; + } catch (RuntimeException e) { + Log.d(TAG, "merge failed", e); + } } } text = ".../" + targetFile; diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 80e9149..26989d9 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -5,9 +5,9 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" + android:paddingBottom="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context=".activities.MainActivity" tools:showIn="@layout/activity_main"> @@ -42,8 +42,15 @@ android:layout_margin="10dp" android:indeterminate="true" /> + +