From fb3102c06b925c73eb101ddab317fd3f035c310f Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 27 Aug 2022 10:10:34 +0900 Subject: [PATCH] dependency updates and compatibility fixes --- .github/workflows/main.yml | 2 +- app/build.gradle | 36 +++++++++---------- app/src/main/AndroidManifest.xml | 6 ++-- .../activities/SettingsActivity.java | 9 +++++ .../gramophone/dialogs/SleepTimerDialog.java | 6 ++-- .../gramophone/service/MusicService.java | 2 +- .../notifications/DownloadNotification.java | 4 +-- .../PlayingNotificationMarshmallow.java | 4 +-- .../PlayingNotificationNougat.java | 6 ++-- .../service/playback/LocalPlayer.java | 1 + .../gramophone/util/PreferenceUtil.java | 8 ++--- .../views/widgets/BaseAppWidget.java | 6 ++-- app/src/main/res/xml/pref_lock_screen.xml | 4 +-- app/src/main/res/xml/pref_notification.xml | 4 +-- build.gradle | 4 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- 16 files changed, 57 insertions(+), 47 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6ce4ef5a..f4a44bca 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,7 +27,7 @@ jobs: KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} with: arguments: assemble - gradle-version: 7.0.2 + gradle-version: 7.3.3 - name: Move run: mv app/build/outputs/apk/release/*.apk gelli-release-${version}.apk env: diff --git a/app/build.gradle b/app/build.gradle index 009d944e..f17296b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,11 +2,11 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { - compileSdkVersion 30 + compileSdkVersion 32 defaultConfig { minSdkVersion 19 - targetSdkVersion 30 + targetSdkVersion 32 versionCode 16 versionName '1.3.3' @@ -44,7 +44,7 @@ android { viewBinding true } - lintOptions { + lint { disable 'MissingTranslation' abortOnError false } @@ -52,33 +52,33 @@ android { compileOptions { coreLibraryDesugaringEnabled true - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 } } dependencies { - implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.21' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1' implementation 'com.github.jellyfin.jellyfin-apiclient-java:android:0.7.3' implementation 'com.github.woltapp:blurhash:f41a23cc50' - implementation 'com.google.android.exoplayer:exoplayer:2.12.2' - implementation 'com.google.android.material:material:1.4.0' + implementation 'com.google.android.exoplayer:exoplayer:2.14.2' + implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.core:core-ktx:1.6.0' - implementation 'androidx.media:media:1.4.1' - implementation 'androidx.fragment:fragment-ktx:1.3.6' + implementation 'androidx.core:core-ktx:1.8.0' + implementation 'androidx.media:media:1.6.0' + implementation 'androidx.fragment:fragment-ktx:1.5.2' implementation 'androidx.legacy:legacy-support-v13:1.0.0' - implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'androidx.appcompat:appcompat:1.5.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.palette:palette-ktx:1.0.0' - implementation 'androidx.annotation:annotation:1.2.0' + implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.percentlayout:percentlayout:1.0.0' - implementation 'androidx.preference:preference-ktx:1.1.1' - implementation 'androidx.constraintlayout:constraintlayout:2.1.0' + implementation 'androidx.preference:preference-ktx:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'com.github.kabouzeid:RecyclerView-FastScroll:1.0.16-kmod' implementation 'com.github.kabouzeid:SeekArc:1.2-kmod' @@ -101,8 +101,8 @@ dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' - annotationProcessor 'androidx.room:room-compiler:2.3.0' - implementation 'androidx.room:room-runtime:2.3.0' + annotationProcessor 'androidx.room:room-compiler:2.4.3' + implementation 'androidx.room:room-runtime:2.4.3' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' implementation 'com.github.bumptech.glide:annotations:4.12.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2566d5da..7466207f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,7 +30,7 @@ - + @@ -70,7 +70,7 @@ - + @@ -83,7 +83,7 @@ android:name="com.lge.support.SPLIT_WINDOW" android:value="true" /> - + diff --git a/app/src/main/java/com/dkanada/gramophone/activities/SettingsActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/SettingsActivity.java index 5fb50cb9..3743eb68 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/SettingsActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/SettingsActivity.java @@ -95,9 +95,18 @@ private void invalidateSettings() { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) { downloadLocationPreference.setEnabled(false); + + // stock Android 11 removed the album cover on lock screens + // supported on LineageOS so we might want to add a check at some point showAlbumCoverPreference.setEnabled(false); } + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) { + // custom notification layouts were removed entirely in Android 12 + classicNotification.setEnabled(false); + coloredNotification.setEnabled(false); + } + categoryPreference.setOnPreferenceClickListener(preference -> { CategoryPreferenceDialog.create().show(getParentFragmentManager(), CategoryPreferenceDialog.TAG); return false; diff --git a/app/src/main/java/com/dkanada/gramophone/dialogs/SleepTimerDialog.java b/app/src/main/java/com/dkanada/gramophone/dialogs/SleepTimerDialog.java index 5157eb4a..f22f8d36 100644 --- a/app/src/main/java/com/dkanada/gramophone/dialogs/SleepTimerDialog.java +++ b/app/src/main/java/com/dkanada/gramophone/dialogs/SleepTimerDialog.java @@ -55,7 +55,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { final int minutes = seekArcProgress; - PendingIntent pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT); + PendingIntent pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE); final long nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000; PreferenceUtil.getInstance(getActivity()).setNextSleepTimerElapsedRealtime(nextSleepTimerElapsedTime); @@ -65,7 +65,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { Toast.makeText(getActivity(), requireActivity().getResources().getString(R.string.sleep_timer_set, minutes), Toast.LENGTH_SHORT).show(); }) .onNeutral((dialog, which) -> { - final PendingIntent previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE); + final PendingIntent previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE | PendingIntent.FLAG_IMMUTABLE); if (previous != null) { AlarmManager am = (AlarmManager) requireActivity().getSystemService(Context.ALARM_SERVICE); am.cancel(previous); @@ -80,7 +80,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { } }) .showListener(dialog -> { - if (makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE) != null) { + if (makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE | PendingIntent.FLAG_IMMUTABLE) != null) { timerUpdater.start(); } }) diff --git a/app/src/main/java/com/dkanada/gramophone/service/MusicService.java b/app/src/main/java/com/dkanada/gramophone/service/MusicService.java index 987db7f6..3dc3472d 100644 --- a/app/src/main/java/com/dkanada/gramophone/service/MusicService.java +++ b/app/src/main/java/com/dkanada/gramophone/service/MusicService.java @@ -269,7 +269,7 @@ private void initMediaSession() { Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); mediaButtonIntent.setComponent(mediaButtonReceiverComponentName); - PendingIntent mediaButtonReceiverPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent, 0); + PendingIntent mediaButtonReceiverPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent, PendingIntent.FLAG_IMMUTABLE); mediaSession = new MediaSessionCompat(this, getResources().getString(R.string.app_name), mediaButtonReceiverComponentName, mediaButtonReceiverPendingIntent); mediaSession.setCallback(new MediaSessionCompat.Callback() { diff --git a/app/src/main/java/com/dkanada/gramophone/service/notifications/DownloadNotification.java b/app/src/main/java/com/dkanada/gramophone/service/notifications/DownloadNotification.java index 09aa4355..6190ed17 100644 --- a/app/src/main/java/com/dkanada/gramophone/service/notifications/DownloadNotification.java +++ b/app/src/main/java/com/dkanada/gramophone/service/notifications/DownloadNotification.java @@ -53,10 +53,10 @@ public synchronized void update(int current, int maximum) { this.maximum += maximum; Intent action = new Intent(context, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - PendingIntent clickIntent = PendingIntent.getActivity(context, 0, action, 0); + PendingIntent clickIntent = PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE); Intent cancel = new Intent(context, DownloadService.class).setAction(DownloadService.ACTION_CANCEL); - PendingIntent pendingCancel = PendingIntent.getService(context, 0, cancel, 0); + PendingIntent pendingCancel = PendingIntent.getService(context, 0, cancel, PendingIntent.FLAG_IMMUTABLE); NotificationCompat.InboxStyle style = new NotificationCompat.InboxStyle(); for (Song item : songs.stream().limit(5).collect(Collectors.toList())) { diff --git a/app/src/main/java/com/dkanada/gramophone/service/notifications/PlayingNotificationMarshmallow.java b/app/src/main/java/com/dkanada/gramophone/service/notifications/PlayingNotificationMarshmallow.java index 494ffc80..e41f1737 100644 --- a/app/src/main/java/com/dkanada/gramophone/service/notifications/PlayingNotificationMarshmallow.java +++ b/app/src/main/java/com/dkanada/gramophone/service/notifications/PlayingNotificationMarshmallow.java @@ -66,7 +66,7 @@ public synchronized void update() { Intent action = new Intent(service, MainActivity.class); action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - final PendingIntent clickIntent = PendingIntent.getActivity(service, 0, action, 0); + final PendingIntent clickIntent = PendingIntent.getActivity(service, 0, action, PendingIntent.FLAG_IMMUTABLE); final PendingIntent deleteIntent = buildPendingIntent(service, MusicService.ACTION_QUIT, null); final Notification notification = new NotificationCompat.Builder(service, NOTIFICATION_CHANNEL_ID) @@ -185,6 +185,6 @@ private PendingIntent buildPendingIntent(Context context, final String action, f Intent intent = new Intent(action); intent.setComponent(serviceName); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); - return PendingIntent.getService(context, 0, intent, 0); + return PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE); } } diff --git a/app/src/main/java/com/dkanada/gramophone/service/notifications/PlayingNotificationNougat.java b/app/src/main/java/com/dkanada/gramophone/service/notifications/PlayingNotificationNougat.java index 3ce80842..2484d1fc 100644 --- a/app/src/main/java/com/dkanada/gramophone/service/notifications/PlayingNotificationNougat.java +++ b/app/src/main/java/com/dkanada/gramophone/service/notifications/PlayingNotificationNougat.java @@ -41,12 +41,12 @@ public synchronized void update() { Intent action = new Intent(service, MainActivity.class); action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - final PendingIntent clickIntent = PendingIntent.getActivity(service, 0, action, 0); + final PendingIntent clickIntent = PendingIntent.getActivity(service, 0, action, PendingIntent.FLAG_IMMUTABLE); final ComponentName serviceName = new ComponentName(service, MusicService.class); Intent intent = new Intent(MusicService.ACTION_QUIT); intent.setComponent(serviceName); - final PendingIntent deleteIntent = PendingIntent.getService(service, 0, intent, 0); + final PendingIntent deleteIntent = PendingIntent.getService(service, 0, intent, PendingIntent.FLAG_IMMUTABLE); final int bigNotificationImageSize = service.getResources().getDimensionPixelSize(R.dimen.notification_big_image_size); service.runOnUiThread(() -> CustomGlideRequest.Builder @@ -114,6 +114,6 @@ private PendingIntent retrievePlaybackAction(final String action) { Intent intent = new Intent(action); intent.setComponent(serviceName); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); - return PendingIntent.getService(service, 0, intent, 0); + return PendingIntent.getService(service, 0, intent, PendingIntent.FLAG_IMMUTABLE); } } diff --git a/app/src/main/java/com/dkanada/gramophone/service/playback/LocalPlayer.java b/app/src/main/java/com/dkanada/gramophone/service/playback/LocalPlayer.java index 20b093f7..0628dfe0 100644 --- a/app/src/main/java/com/dkanada/gramophone/service/playback/LocalPlayer.java +++ b/app/src/main/java/com/dkanada/gramophone/service/playback/LocalPlayer.java @@ -101,6 +101,7 @@ public LocalPlayer(Context context) { .build(); exoPlayer.addListener(eventListener); + exoPlayer.setThrowsWhenUsingWrongThread(false); exoPlayer.prepare(); long cacheSize = PreferenceUtil.getInstance(context).getMediaCacheSize(); diff --git a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java index 13c851dc..9cc69f73 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java @@ -227,11 +227,11 @@ public void setNowPlayingScreen(NowPlayingScreen nowPlayingScreen) { } public final boolean getColoredNotification() { - return mPreferences.getBoolean(COLORED_NOTIFICATION, true); + return mPreferences.getBoolean(COLORED_NOTIFICATION, false); } public final boolean getClassicNotification() { - return mPreferences.getBoolean(CLASSIC_NOTIFICATION, Build.VERSION.SDK_INT <= Build.VERSION_CODES.O); + return mPreferences.getBoolean(CLASSIC_NOTIFICATION, false); } public final boolean getColoredShortcuts() { @@ -255,11 +255,11 @@ public final boolean getRememberQueue() { } public final boolean getShowAlbumCover() { - return mPreferences.getBoolean(SHOW_ALBUM_COVER, true); + return mPreferences.getBoolean(SHOW_ALBUM_COVER, false); } public final boolean getBlurAlbumCover() { - return mPreferences.getBoolean(BLUR_ALBUM_COVER, true); + return mPreferences.getBoolean(BLUR_ALBUM_COVER, false); } public final SortOrder getAlbumSortOrder() { diff --git a/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java b/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java index 38246f75..0ee69929 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java +++ b/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java @@ -83,7 +83,7 @@ protected void linkButtons(Context context, RemoteViews views, Integer... clicka ComponentName serviceName = new ComponentName(context, MusicService.class); Intent action = new Intent(context, MainActivity.class); - PendingIntent open = PendingIntent.getActivity(context, 0, action, 0); + PendingIntent open = PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE); for (int id : clickableViews) { views.setOnClickPendingIntent(id, open); @@ -104,9 +104,9 @@ protected PendingIntent buildPendingIntent(Context context, final String action, intent.setComponent(serviceName); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - return PendingIntent.getForegroundService(context, 0, intent, 0); + return PendingIntent.getForegroundService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE); } else { - return PendingIntent.getService(context, 0, intent, 0); + return PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE); } } diff --git a/app/src/main/res/xml/pref_lock_screen.xml b/app/src/main/res/xml/pref_lock_screen.xml index da3cd4d0..ac997472 100644 --- a/app/src/main/res/xml/pref_lock_screen.xml +++ b/app/src/main/res/xml/pref_lock_screen.xml @@ -5,14 +5,14 @@ diff --git a/build.gradle b/build.gradle index 26f16dfd..9beafa9d 100644 --- a/build.gradle +++ b/build.gradle @@ -5,9 +5,9 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.0.0' + classpath 'com.android.tools.build:gradle:7.2.2' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' - classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21' + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3fd6a25c..3d6dcd61 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip