diff --git a/app/build.gradle b/app/build.gradle index ecde6342..a3ddf53e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -147,6 +147,8 @@ android { } dependencies { + implementation 'com.google.dagger:dagger:2.48' + annotationProcessor 'com.google.dagger:dagger-compiler:2.48' //Core implementation 'androidx.core:core-ktx:1.12.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0a19366e..05675554 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ + diff --git a/app/src/main/java/com/futo/platformplayer/Settings.kt b/app/src/main/java/com/futo/platformplayer/Settings.kt index 6d37c951..ff7a203a 100644 --- a/app/src/main/java/com/futo/platformplayer/Settings.kt +++ b/app/src/main/java/com/futo/platformplayer/Settings.kt @@ -2,8 +2,11 @@ package com.futo.platformplayer import android.content.ActivityNotFoundException import android.content.Context +import android.content.Context.POWER_SERVICE import android.content.Intent import android.net.Uri +import android.os.Build +import android.os.PowerManager import android.webkit.CookieManager import androidx.lifecycle.lifecycleScope import com.futo.platformplayer.activities.MainActivity @@ -35,6 +38,7 @@ import com.futo.platformplayer.views.fields.FormField import com.futo.platformplayer.views.fields.FormFieldButton import com.futo.platformplayer.views.fields.FormFieldWarning import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuItem +import com.stripe.android.customersheet.injection.CustomerSheetViewModelModule_Companion_ContextFactory.context import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -45,6 +49,7 @@ import kotlinx.serialization.json.Json import java.io.File import java.time.OffsetDateTime + @Serializable data class MenuBottomBarSetting(val id: Int, var enabled: Boolean); @@ -58,7 +63,7 @@ class Settings : FragmentedStorageFileJson() { @Transient val onTabsChanged = Event0(); - @FormField(R.string.manage_polycentric_identity, FieldForm.BUTTON, R.string.manage_your_polycentric_identity, -6) + @FormField(R.string.manage_polycentric_identity, FieldForm.BUTTON, R.string.manage_your_polycentric_identity, -7) @FormFieldButton(R.drawable.ic_person) fun managePolycentricIdentity() { SettingsActivity.getActivity()?.let { @@ -74,7 +79,7 @@ class Settings : FragmentedStorageFileJson() { } } - @FormField(R.string.show_faq, FieldForm.BUTTON, R.string.get_answers_to_common_questions, -5) + @FormField(R.string.show_faq, FieldForm.BUTTON, R.string.get_answers_to_common_questions, -6) @FormFieldButton(R.drawable.ic_quiz) fun openFAQ() { try { @@ -84,7 +89,7 @@ class Settings : FragmentedStorageFileJson() { //Ignored } } - @FormField(R.string.show_issues, FieldForm.BUTTON, R.string.a_list_of_user_reported_and_self_reported_issues, -4) + @FormField(R.string.show_issues, FieldForm.BUTTON, R.string.a_list_of_user_reported_and_self_reported_issues, -5) @FormFieldButton(R.drawable.ic_data_alert) fun openIssues() { try { @@ -116,7 +121,7 @@ class Settings : FragmentedStorageFileJson() { } }*/ - @FormField(R.string.manage_tabs, FieldForm.BUTTON, R.string.change_tabs_visible_on_the_home_screen, -3) + @FormField(R.string.manage_tabs, FieldForm.BUTTON, R.string.change_tabs_visible_on_the_home_screen, -4) @FormFieldButton(R.drawable.ic_tabs) fun manageTabs() { try { @@ -130,7 +135,7 @@ class Settings : FragmentedStorageFileJson() { - @FormField(R.string.import_data, FieldForm.BUTTON, R.string.import_data_description, -2) + @FormField(R.string.import_data, FieldForm.BUTTON, R.string.import_data_description, -3) @FormFieldButton(R.drawable.ic_move_up) fun import() { val act = SettingsActivity.getActivity() ?: return; @@ -139,7 +144,7 @@ class Settings : FragmentedStorageFileJson() { act.startActivity(intent); } - @FormField(R.string.link_handling, FieldForm.BUTTON, R.string.allow_grayjay_to_handle_links, -1) + @FormField(R.string.link_handling, FieldForm.BUTTON, R.string.allow_grayjay_to_handle_links, -2) @FormFieldButton(R.drawable.ic_link) fun manageLinks() { try { @@ -149,6 +154,24 @@ class Settings : FragmentedStorageFileJson() { } } + /*@FormField(R.string.disable_battery_optimization, FieldForm.BUTTON, R.string.click_to_go_to_battery_optimization_settings_disabling_battery_optimization_will_prevent_the_os_from_killing_media_sessions, -1) + @FormFieldButton(R.drawable.battery_full_24px) + fun ignoreBatteryOptimization() { + SettingsActivity.getActivity()?.let { + val intent = Intent() + val packageName = it.packageName + val pm = it.getSystemService(POWER_SERVICE) as PowerManager; + if (!pm.isIgnoringBatteryOptimizations(packageName)) { + intent.setAction(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) + intent.setData(Uri.parse("package:$packageName")) + it.startActivity(intent) + UIDialogs.toast(it, "Please ignore battery optimizations for Grayjay") + } else { + UIDialogs.toast(it, "Battery optimizations already disabled for Grayjay") + } + } + }*/ + @FormField(R.string.language, "group", -1, 0) var language = LanguageSettings(); @Serializable diff --git a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt index 518e6792..e12e24af 100644 --- a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt +++ b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt @@ -98,7 +98,7 @@ class MediaPlaybackService : Service() { _mediaSession?.setPlaybackState(PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1f) .build()); - _mediaSession?.setCallback(object: MediaSessionCompat.Callback() { + _mediaSession?.setCallback(object : MediaSessionCompat.Callback() { override fun onSeekTo(pos: Long) { super.onSeekTo(pos) Logger.i(TAG, "Media session callback onSeekTo(pos = $pos)"); @@ -120,7 +120,9 @@ class MediaPlaybackService : Service() { override fun onStop() { super.onStop(); Logger.i(TAG, "Media session callback onStop()"); - MediaControlReceiver.onCloseReceived.emit(); + //MediaControlReceiver.onCloseReceived.emit(); + MediaControlReceiver.onPauseReceived.emit(); + updateMediaSession( null); } override fun onSkipToPrevious() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index beecf75e..a8eef4fb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -768,6 +768,8 @@ Zoom Check to see if an update is available. Scroll to top + Disable Battery Optimization + Click to go to battery optimization settings. Disabling battery optimization will prevent the OS from killing media sessions. Recommendations Subscriptions