Merge "Use AppOpsController for AlarmsAndReminders" into main
This commit is contained in:
@@ -27,7 +27,8 @@ import android.os.PowerExemptionManager
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
||||||
import com.android.settingslib.R
|
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.AppRecord
|
||||||
import com.android.settingslib.spaprivileged.model.app.IPackageManagers
|
import com.android.settingslib.spaprivileged.model.app.IPackageManagers
|
||||||
import com.android.settingslib.spaprivileged.model.app.PackageManagers
|
import com.android.settingslib.spaprivileged.model.app.PackageManagers
|
||||||
@@ -47,7 +48,7 @@ data class AlarmsAndRemindersAppRecord(
|
|||||||
override val app: ApplicationInfo,
|
override val app: ApplicationInfo,
|
||||||
val isTrumped: Boolean,
|
val isTrumped: Boolean,
|
||||||
val isChangeable: Boolean,
|
val isChangeable: Boolean,
|
||||||
var controller: AlarmsAndRemindersController,
|
var controller: AppOpsController,
|
||||||
) : AppRecord
|
) : AppRecord
|
||||||
|
|
||||||
class AlarmsAndRemindersAppListModel(
|
class AlarmsAndRemindersAppListModel(
|
||||||
@@ -82,7 +83,7 @@ class AlarmsAndRemindersAppListModel(
|
|||||||
@Composable
|
@Composable
|
||||||
override fun isAllowed(record: AlarmsAndRemindersAppRecord): () -> Boolean? = when {
|
override fun isAllowed(record: AlarmsAndRemindersAppRecord): () -> Boolean? = when {
|
||||||
record.isTrumped -> ({ true })
|
record.isTrumped -> ({ true })
|
||||||
else -> record.controller.isAllowed.observeAsCallback()
|
else -> record.controller.isAllowed.collectAsCallbackWithLifecycle()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isChangeable(record: AlarmsAndRemindersAppRecord) = record.isChangeable
|
override fun isChangeable(record: AlarmsAndRemindersAppRecord) = record.isChangeable
|
||||||
@@ -112,7 +113,12 @@ class AlarmsAndRemindersAppListModel(
|
|||||||
app = app,
|
app = app,
|
||||||
isTrumped = isTrumped,
|
isTrumped = isTrumped,
|
||||||
isChangeable = hasRequestPermission && !isTrumped,
|
isChangeable = hasRequestPermission && !isTrumped,
|
||||||
controller = AlarmsAndRemindersController(context, app),
|
controller = AppOpsController(
|
||||||
|
context = context,
|
||||||
|
app = app,
|
||||||
|
op = AppOpsManager.OP_SCHEDULE_EXACT_ALARM,
|
||||||
|
setModeByUid = true,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user