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