mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-09-13 20:17:56 +01:00
committed by
Cody Henthorne
parent
a339a7a1a7
commit
6086781d68
@@ -6,12 +6,16 @@
|
||||
package org.thoughtcrime.securesms.banner.banners
|
||||
|
||||
import android.content.Context
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
import kotlinx.coroutines.flow.map
|
||||
import org.signal.core.ui.compose.DayNightPreviews
|
||||
import org.signal.core.ui.compose.Previews
|
||||
import org.signal.core.util.ServiceUtil
|
||||
@@ -23,7 +27,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.util.PowerManagerCompat
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
||||
|
||||
class DozeBanner(private val context: Context, private val onDismissListener: () -> Unit) : Banner<Unit>() {
|
||||
class DozeBanner(private val context: Context) : Banner<Unit>() {
|
||||
|
||||
override val enabled: Boolean
|
||||
get() = !SignalStore.account.fcmEnabled && !TextSecurePreferences.hasPromptedOptimizeDoze(context) && !ServiceUtil.getPowerManager(context).isIgnoringBatteryOptimizations(context.packageName)
|
||||
@@ -31,20 +35,36 @@ class DozeBanner(private val context: Context, private val onDismissListener: ()
|
||||
override val dataFlow: Flow<Unit>
|
||||
get() = flowOf(Unit)
|
||||
|
||||
private val enabledState = MutableStateFlow(enabled)
|
||||
|
||||
override val stateUpdates: Flow<Unit>
|
||||
get() = enabledState.map { }
|
||||
|
||||
@Composable
|
||||
override fun DisplayBanner(model: Unit, contentPadding: PaddingValues) {
|
||||
val batteryOptLauncher = rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.StartActivityForResult()
|
||||
) { _ ->
|
||||
markAsPrompted()
|
||||
}
|
||||
|
||||
Banner(
|
||||
contentPadding = contentPadding,
|
||||
onDismissListener = {
|
||||
TextSecurePreferences.setPromptedOptimizeDoze(context, true)
|
||||
onDismissListener.invoke()
|
||||
markAsPrompted()
|
||||
},
|
||||
onOkListener = {
|
||||
TextSecurePreferences.setPromptedOptimizeDoze(context, true)
|
||||
PowerManagerCompat.requestIgnoreBatteryOptimizations(context)
|
||||
batteryOptLauncher.launch(
|
||||
PowerManagerCompat.buildRequestIgnoreBatteryOptimizationsIntent(context)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private fun markAsPrompted() {
|
||||
TextSecurePreferences.setPromptedOptimizeDoze(context, true)
|
||||
enabledState.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
||||
+1
-4
@@ -835,10 +835,7 @@ public class ConversationListFragment extends MainFragment implements Conversati
|
||||
new UnauthorizedBanner(requireContext()),
|
||||
new ServiceOutageBanner(requireContext()),
|
||||
new OutdatedBuildBanner(),
|
||||
new DozeBanner(requireContext(), () -> {
|
||||
bannerManager.updateContent(bannerView.get());
|
||||
return Unit.INSTANCE;
|
||||
}),
|
||||
new DozeBanner(requireContext()),
|
||||
new CdsTemporaryErrorBanner(getChildFragmentManager()),
|
||||
new CdsPermanentErrorBanner(getChildFragmentManager()),
|
||||
new UsernameOutOfSyncBanner((usernameSyncState) -> {
|
||||
|
||||
@@ -20,8 +20,12 @@ public class PowerManagerCompat {
|
||||
}
|
||||
|
||||
public static void requestIgnoreBatteryOptimizations(@NonNull Context context) {
|
||||
Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
|
||||
Uri.parse("package:" + context.getPackageName()));
|
||||
context.startActivity(intent);
|
||||
context.startActivity(buildRequestIgnoreBatteryOptimizationsIntent(context));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static Intent buildRequestIgnoreBatteryOptimizationsIntent(@NonNull Context context) {
|
||||
return new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
|
||||
Uri.parse("package:" + context.getPackageName()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user