diff --git a/dependencies.gradle b/dependencies.gradle index 9533dff4..91a1951b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -27,7 +27,7 @@ ext.versions = [ okhttp : "3.10.0", semver : "1.0.0", twitterSerial : "0.1.6", - koin : "2.1.6", + koin : "2.2.2", picasso : "2.71828", junit4 : "4.12", diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/PlaylistsFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/PlaylistsFragment.java index d71abcf8..472e462b 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/PlaylistsFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/PlaylistsFragment.java @@ -252,7 +252,7 @@ public class PlaylistsFragment extends Fragment { @Override public void onClick(DialogInterface dialog, int which) { - new LoadingTask(getActivity(), false, refreshPlaylistsListView) + new LoadingTask(getActivity(), refreshPlaylistsListView, cancellationToken) { @Override protected Void doInBackground() throws Throwable @@ -337,7 +337,7 @@ public class PlaylistsFragment extends Fragment { @Override public void onClick(DialogInterface dialog, int which) { - new LoadingTask(getActivity(), false, refreshPlaylistsListView) + new LoadingTask(getActivity(), refreshPlaylistsListView, cancellationToken) { @Override protected Void doInBackground() throws Throwable diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java index c93f78bc..2c64fbc3 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java @@ -76,7 +76,6 @@ public class SettingsFragment extends PreferenceFragmentCompat private EditTextPreference sharingDefaultDescription; private EditTextPreference sharingDefaultGreeting; private TimeSpanPreference sharingDefaultExpiration; - private PreferenceCategory serversCategory; private Preference resumeOnBluetoothDevice; private Preference pauseOnBluetoothDevice; private CheckBoxPreference debugLogToFile; @@ -133,7 +132,6 @@ public class SettingsFragment extends PreferenceFragmentCompat sharingDefaultDescription = findPreference(Constants.PREFERENCES_KEY_DEFAULT_SHARE_DESCRIPTION); sharingDefaultGreeting = findPreference(Constants.PREFERENCES_KEY_DEFAULT_SHARE_GREETING); sharingDefaultExpiration = findPreference(Constants.PREFERENCES_KEY_DEFAULT_SHARE_EXPIRATION); - serversCategory = findPreference(Constants.PREFERENCES_KEY_SERVERS_KEY); resumeOnBluetoothDevice = findPreference(Constants.PREFERENCES_KEY_RESUME_ON_BLUETOOTH_DEVICE); pauseOnBluetoothDevice = findPreference(Constants.PREFERENCES_KEY_PAUSE_ON_BLUETOOTH_DEVICE); debugLogToFile = findPreference(Constants.PREFERENCES_KEY_DEBUG_LOG_TO_FILE); @@ -236,7 +234,7 @@ public class SettingsFragment extends PreferenceFragmentCompat @Override public void onPermissionRequestFinished(boolean hasPermission) { if (hasPermission) { - FilePickerDialog filePickerDialog = FilePickerDialog.Companion.createFilePickerDialog(getActivity()); + FilePickerDialog filePickerDialog = FilePickerDialog.Companion.createFilePickerDialog(getContext()); filePickerDialog.setDefaultDirectory(FileUtil.getDefaultMusicDirectory(getActivity()).getPath()); filePickerDialog.setInitialDirectory(cacheLocation.getSummary().toString()); filePickerDialog.setOnFileSelectedListener(new OnFileSelectedListener() { diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SharesFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SharesFragment.java index 773a7aa9..8715b27c 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SharesFragment.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SharesFragment.java @@ -231,7 +231,7 @@ public class SharesFragment extends Fragment { @Override public void onClick(DialogInterface dialog, int which) { - new LoadingTask(getActivity(), false, refreshSharesListView) + new LoadingTask(getActivity(), refreshSharesListView, cancellationToken) { @Override protected Void doInBackground() throws Throwable @@ -327,7 +327,7 @@ public class SharesFragment extends Fragment { @Override public void onClick(DialogInterface dialog, int which) { - new LoadingTask(getActivity(), false, refreshSharesListView) + new LoadingTask(getActivity(), refreshSharesListView, cancellationToken) { @Override protected Void doInBackground() throws Throwable diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java index c2ba7fcc..8355208c 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltrasonicAppWidgetProvider.java @@ -40,6 +40,8 @@ public class UltrasonicAppWidgetProvider extends AppWidgetProvider final Resources res = context.getResources(); final RemoteViews views = new RemoteViews(context.getPackageName(), this.layoutId); + views.setTextViewText(R.id.title, null); + views.setTextViewText(R.id.album, null); views.setTextViewText(R.id.artist, res.getText(R.string.widget_initial_text)); linkButtons(context, views, false); @@ -183,8 +185,10 @@ public class UltrasonicAppWidgetProvider extends AppWidgetProvider */ private static void linkButtons(Context context, RemoteViews views, boolean playerActive) { - // TODO: If playerActive = true, display the PlayerFragment automatically - Intent intent = new Intent(context, playerActive ? NavigationActivity.class : NavigationActivity.class); + Intent intent = new Intent(context, NavigationActivity.class).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);; + if (playerActive) + intent.putExtra(Constants.INTENT_EXTRA_NAME_SHOW_PLAYER, true); + intent.setAction("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); PendingIntent pendingIntent = PendingIntent.getActivity(context, 10, intent, PendingIntent.FLAG_UPDATE_CURRENT); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java index f6201b44..39d4a1f9 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/service/MediaPlayerService.java @@ -30,6 +30,7 @@ import org.moire.ultrasonic.provider.UltrasonicAppWidgetProvider4X1; import org.moire.ultrasonic.provider.UltrasonicAppWidgetProvider4X2; import org.moire.ultrasonic.provider.UltrasonicAppWidgetProvider4X3; import org.moire.ultrasonic.provider.UltrasonicAppWidgetProvider4X4; +import org.moire.ultrasonic.util.Constants; import org.moire.ultrasonic.util.FileUtil; import org.moire.ultrasonic.util.NowPlayingEventDistributor; import org.moire.ultrasonic.util.ShufflePlayBuffer; @@ -637,9 +638,10 @@ public class MediaPlayerService extends Service notificationBuilder.setContent(contentView); - // TODO: Navigate automatically to PlayerFragment - Intent notificationIntent = new Intent(this, NavigationActivity.class); - notificationBuilder.setContentIntent(PendingIntent.getActivity(this, 0, notificationIntent, 0)); + Intent notificationIntent = new Intent(this, NavigationActivity.class) + .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + notificationIntent.putExtra(Constants.INTENT_EXTRA_NAME_SHOW_PLAYER, true); + notificationBuilder.setContentIntent(PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT)); if (playerState == PlayerState.PAUSED || playerState == PlayerState.IDLE) { contentView.setImageViewResource(R.id.control_play, R.drawable.media_start_normal_dark); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Constants.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Constants.java index d273da04..aa9638c7 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Constants.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Constants.java @@ -52,13 +52,12 @@ public final class Constants public static final String INTENT_EXTRA_NAME_ALBUM_LIST_OFFSET = "subsonic.albumlistoffset"; public static final String INTENT_EXTRA_NAME_SHUFFLE = "subsonic.shuffle"; public static final String INTENT_EXTRA_NAME_REFRESH = "subsonic.refresh"; - public static final String INTENT_EXTRA_REQUEST_SEARCH = "subsonic.requestsearch"; - public static final String INTENT_EXTRA_NAME_EXIT = "subsonic.exit"; public static final String INTENT_EXTRA_NAME_STARRED = "subsonic.starred"; public static final String INTENT_EXTRA_NAME_RANDOM = "subsonic.random"; public static final String INTENT_EXTRA_NAME_GENRE_NAME = "subsonic.genre"; public static final String INTENT_EXTRA_NAME_IS_ALBUM = "subsonic.isalbum"; public static final String INTENT_EXTRA_NAME_VIDEOS = "subsonic.videos"; + public static final String INTENT_EXTRA_NAME_SHOW_PLAYER = "subsonic.showplayer"; // Names for Intent Actions public static final String CMD_PROCESS_KEYCODE = "org.moire.ultrasonic.CMD_PROCESS_KEYCODE"; diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/LoadingTask.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/LoadingTask.java index d0c9ee63..ff6ce52a 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/LoadingTask.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/LoadingTask.java @@ -11,17 +11,14 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; */ public abstract class LoadingTask extends BackgroundTask { - private final Activity tabActivity; - private final boolean cancellable; - private boolean cancelled; - private SwipeRefreshLayout swipe; + private final SwipeRefreshLayout swipe; + private final CancellationToken cancel; - public LoadingTask(Activity activity, final boolean cancellable, SwipeRefreshLayout swipe) + public LoadingTask(Activity activity, SwipeRefreshLayout swipe, CancellationToken cancel) { super(activity); - tabActivity = activity; - this.cancellable = cancellable; this.swipe = swipe; + this.cancel = cancel; } @Override @@ -37,7 +34,7 @@ public abstract class LoadingTask extends BackgroundTask try { final T result = doInBackground(); - if (isCancelled()) + if (cancel.isCancellationRequested()) { return; } @@ -54,7 +51,7 @@ public abstract class LoadingTask extends BackgroundTask } catch (final Throwable t) { - if (isCancelled()) + if (cancel.isCancellationRequested()) { return; } @@ -73,24 +70,8 @@ public abstract class LoadingTask extends BackgroundTask }.start(); } - @SuppressLint("NewApi") - private boolean isCancelled() - { - // TODO: Implement cancelled - //return Build.VERSION.SDK_INT >= 17 ? tabActivity.isDestroyed() || cancelled : cancelled; - return cancelled; - } - @Override public void updateProgress(final String message) { - getHandler().post(new Runnable() - { - @Override - public void run() - { - // TODO: This seems to be NOOP, can it be removed? - } - }); } } \ No newline at end of file diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/TabActivityBackgroundTask.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/TabActivityBackgroundTask.java index 62cd0248..47268316 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/TabActivityBackgroundTask.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/TabActivityBackgroundTask.java @@ -85,14 +85,5 @@ public abstract class TabActivityBackgroundTask extends BackgroundTask @Override public void updateProgress(final String message) { - // TODO: Remove - getHandler().post(new Runnable() - { - @Override - public void run() - { - //activity.updateProgress(message); - } - }); } } diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java index 837210e1..e83071e5 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/util/Util.java @@ -1019,8 +1019,10 @@ public class Util public static void linkButtons(Context context, RemoteViews views, boolean playerActive) { - // TODO: Navigate automatically to PlayerFragment if playerActive = true - Intent intent = new Intent(context, playerActive ? NavigationActivity.class : NavigationActivity.class); + Intent intent = new Intent(context, NavigationActivity.class).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + if (playerActive) + intent.putExtra(Constants.INTENT_EXTRA_NAME_SHOW_PLAYER, true); + intent.setAction("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt index 89e8cc9f..054976d0 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/NavigationActivity.kt @@ -238,8 +238,15 @@ class NavigationActivity : AppCompatActivity() { // android.intent.action.SEARCH and android.media.action.MEDIA_PLAY_FROM_SEARCH calls here override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) + if (intent == null) return; - val query = intent?.getStringExtra(SearchManager.QUERY) + if (intent.getBooleanExtra(Constants.INTENT_EXTRA_NAME_SHOW_PLAYER, false)) + { + findNavController(R.id.nav_host_fragment).navigate(R.id.playerFragment) + return + } + + val query = intent.getStringExtra(SearchManager.QUERY) if (query != null) { val autoPlay = intent.action == MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt index 44f90750..5ca3310e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt @@ -13,7 +13,7 @@ import org.moire.ultrasonic.di.featureFlagsModule import org.moire.ultrasonic.di.mediaPlayerModule import org.moire.ultrasonic.di.musicServiceModule import org.moire.ultrasonic.log.FileLoggerTree -import org.moire.ultrasonic.log.timberLogger +import org.moire.ultrasonic.log.TimberKoinLogger import org.moire.ultrasonic.util.Util import timber.log.Timber import timber.log.Timber.DebugTree @@ -30,8 +30,7 @@ class UApp : MultiDexApplication() { } startKoin { - // TODO Current version of Koin has a bug, which forces the usage of Level.ERROR - timberLogger(Level.ERROR) + logger(TimberKoinLogger(Level.INFO)) // declare Android context androidContext(this@UApp) // declare modules to use diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/log/TimberKoinLogger.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/log/TimberKoinLogger.kt index ccb3fbb2..9cff9d95 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/log/TimberKoinLogger.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/log/TimberKoinLogger.kt @@ -1,21 +1,10 @@ package org.moire.ultrasonic.log -import org.koin.core.KoinApplication import org.koin.core.logger.Level import org.koin.core.logger.Logger import org.koin.core.logger.MESSAGE import timber.log.Timber -/** - * KoinApplication Extension to use Timber with Koin - */ -fun KoinApplication.timberLogger( - level: Level = Level.INFO -): KoinApplication { - koin._logger = TimberKoinLogger(level) - return this -} - /** * Timber Logger implementation for Koin */ diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicServiceFactory.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicServiceFactory.kt index f5644eb5..02b657eb 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicServiceFactory.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/service/MusicServiceFactory.kt @@ -19,10 +19,10 @@ package org.moire.ultrasonic.service import android.content.Context -import org.koin.core.KoinComponent +import org.koin.core.component.KoinComponent +import org.koin.core.component.get import org.koin.core.context.loadKoinModules import org.koin.core.context.unloadKoinModules -import org.koin.core.get import org.koin.core.qualifier.named import org.moire.ultrasonic.cache.Directories import org.moire.ultrasonic.data.ActiveServerProvider diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt index 43a9d508..61524e28 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/subsonic/DownloadHandler.kt @@ -107,7 +107,6 @@ class DownloadHandler( @Throws(Throwable::class) override fun doInBackground(): List { - // TODO: Handle swipe spinner here instead of the ProgressListener val musicService = getMusicService(activity) val songs: MutableList = LinkedList() val root: MusicDirectory