Merge "Use AppOpsController for AlarmsAndReminders" into main

This commit is contained in:
Chaohui Wang
2024-02-05 08:14:25 +00:00
committed by Android (Google) Code Review
2 changed files with 10 additions and 55 deletions

View File

@@ -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,
),
) )
} }

View File

@@ -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))
}
}
}