Loading src/com/android/settings/spa/app/specialaccess/AlarmsAndRemindersAppList.kt +10 −4 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ import android.os.PowerExemptionManager import androidx.compose.runtime.Composable import com.android.settings.overlay.FeatureFactory.Companion.featureFactory import com.android.settingslib.R import com.android.settingslib.spa.livedata.observeAsCallback import com.android.settingslib.spa.lifecycle.collectAsCallbackWithLifecycle import com.android.settingslib.spaprivileged.model.app.AppOpsController import com.android.settingslib.spaprivileged.model.app.AppRecord import com.android.settingslib.spaprivileged.model.app.IPackageManagers import com.android.settingslib.spaprivileged.model.app.PackageManagers Loading @@ -47,7 +48,7 @@ data class AlarmsAndRemindersAppRecord( override val app: ApplicationInfo, val isTrumped: Boolean, val isChangeable: Boolean, var controller: AlarmsAndRemindersController, var controller: AppOpsController, ) : AppRecord class AlarmsAndRemindersAppListModel( Loading Loading @@ -82,7 +83,7 @@ class AlarmsAndRemindersAppListModel( @Composable override fun isAllowed(record: AlarmsAndRemindersAppRecord): () -> Boolean? = when { record.isTrumped -> ({ true }) else -> record.controller.isAllowed.observeAsCallback() else -> record.controller.isAllowed.collectAsCallbackWithLifecycle() } override fun isChangeable(record: AlarmsAndRemindersAppRecord) = record.isChangeable Loading Loading @@ -112,7 +113,12 @@ class AlarmsAndRemindersAppListModel( app = app, isTrumped = isTrumped, isChangeable = hasRequestPermission && !isTrumped, controller = AlarmsAndRemindersController(context, app), controller = AppOpsController( context = context, app = app, op = AppOpsManager.OP_SCHEDULE_EXACT_ALARM, setModeByUid = true, ), ) } Loading src/com/android/settings/spa/app/specialaccess/AlarmsAndRemindersController.ktdeleted 100644 → 0 +0 −51 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.spa.app.specialaccess import android.app.AppOpsManager import android.app.AppOpsManager.MODE_ALLOWED import android.app.AppOpsManager.MODE_ERRORED import android.content.Context import android.content.pm.ApplicationInfo import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.android.settingslib.spaprivileged.framework.common.alarmManager import com.android.settingslib.spaprivileged.framework.common.appOpsManager import com.android.settingslib.spaprivileged.model.app.userId class AlarmsAndRemindersController( context: Context, private val app: ApplicationInfo, ) { private val alarmManager = context.alarmManager private val appOpsManager = context.appOpsManager val isAllowed: LiveData<Boolean> get() = _allowed fun setAllowed(allowed: Boolean) { val mode = if (allowed) MODE_ALLOWED else MODE_ERRORED appOpsManager.setUidMode(AppOpsManager.OP_SCHEDULE_EXACT_ALARM, app.uid, mode) _allowed.postValue(allowed) } private val _allowed = object : MutableLiveData<Boolean>() { override fun onActive() { postValue(alarmManager.hasScheduleExactAlarm(app.packageName, app.userId)) } } } Loading
src/com/android/settings/spa/app/specialaccess/AlarmsAndRemindersAppList.kt +10 −4 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ import android.os.PowerExemptionManager import androidx.compose.runtime.Composable import com.android.settings.overlay.FeatureFactory.Companion.featureFactory import com.android.settingslib.R import com.android.settingslib.spa.livedata.observeAsCallback import com.android.settingslib.spa.lifecycle.collectAsCallbackWithLifecycle import com.android.settingslib.spaprivileged.model.app.AppOpsController import com.android.settingslib.spaprivileged.model.app.AppRecord import com.android.settingslib.spaprivileged.model.app.IPackageManagers import com.android.settingslib.spaprivileged.model.app.PackageManagers Loading @@ -47,7 +48,7 @@ data class AlarmsAndRemindersAppRecord( override val app: ApplicationInfo, val isTrumped: Boolean, val isChangeable: Boolean, var controller: AlarmsAndRemindersController, var controller: AppOpsController, ) : AppRecord class AlarmsAndRemindersAppListModel( Loading Loading @@ -82,7 +83,7 @@ class AlarmsAndRemindersAppListModel( @Composable override fun isAllowed(record: AlarmsAndRemindersAppRecord): () -> Boolean? = when { record.isTrumped -> ({ true }) else -> record.controller.isAllowed.observeAsCallback() else -> record.controller.isAllowed.collectAsCallbackWithLifecycle() } override fun isChangeable(record: AlarmsAndRemindersAppRecord) = record.isChangeable Loading Loading @@ -112,7 +113,12 @@ class AlarmsAndRemindersAppListModel( app = app, isTrumped = isTrumped, isChangeable = hasRequestPermission && !isTrumped, controller = AlarmsAndRemindersController(context, app), controller = AppOpsController( context = context, app = app, op = AppOpsManager.OP_SCHEDULE_EXACT_ALARM, setModeByUid = true, ), ) } Loading
src/com/android/settings/spa/app/specialaccess/AlarmsAndRemindersController.ktdeleted 100644 → 0 +0 −51 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.spa.app.specialaccess import android.app.AppOpsManager import android.app.AppOpsManager.MODE_ALLOWED import android.app.AppOpsManager.MODE_ERRORED import android.content.Context import android.content.pm.ApplicationInfo import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.android.settingslib.spaprivileged.framework.common.alarmManager import com.android.settingslib.spaprivileged.framework.common.appOpsManager import com.android.settingslib.spaprivileged.model.app.userId class AlarmsAndRemindersController( context: Context, private val app: ApplicationInfo, ) { private val alarmManager = context.alarmManager private val appOpsManager = context.appOpsManager val isAllowed: LiveData<Boolean> get() = _allowed fun setAllowed(allowed: Boolean) { val mode = if (allowed) MODE_ALLOWED else MODE_ERRORED appOpsManager.setUidMode(AppOpsManager.OP_SCHEDULE_EXACT_ALARM, app.uid, mode) _allowed.postValue(allowed) } private val _allowed = object : MutableLiveData<Boolean>() { override fun onActive() { postValue(alarmManager.hasScheduleExactAlarm(app.packageName, app.userId)) } } }