Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f120783 authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Use AppOpsController for AlarmsAndReminders" into main

parents 2f21670d 0c630c34
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -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
@@ -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(
@@ -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
@@ -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,
            ),
        )
    }

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