diff --git a/res/values/strings.xml b/res/values/strings.xml index 54b7f67b338..6c79d60a2c7 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10429,6 +10429,10 @@ Allow this app to show notifications that take up the full screen when the device is locked. Apps may use these to highlight alarms, incoming calls, or other urgent notifications. + Write system preferences + Allow this app to modify system preferences on your behalf + This permission allows an app to modify core system preferences. + Media management apps diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml index d0fe980d82b..f3a5f3216c7 100644 --- a/res/xml/special_access.xml +++ b/res/xml/special_access.xml @@ -106,6 +106,11 @@ android:title="@string/full_screen_intent_title" settings:controller="com.android.settings.spa.app.specialaccess.UseFullScreenIntentPreferenceController" /> + + , recordListFlow: Flow>): + Flow> { + return super.filter(userIdFlow, recordListFlow).map { recordList -> + recordList.filter { app -> + // Only apps that have READ_SYSTEM_PREFERENCES can utilize WRITE_SYSTEM_PREFERENCES. + // This write permission is (currently) non-functionality without the corresponding + // read permission, and the read permission can only be granted via pre-grant or + // role. As such, we don't show apps that are "requesting" this permission without + // holding the read permission, as it would create confusion and not provide them + // any functionality. + with (PackageManagers) { + app.app.hasGrantPermission(Manifest.permission.READ_SYSTEM_PREFERENCES) + } + } + } + } +} \ No newline at end of file diff --git a/src/com/android/settings/spa/app/specialaccess/WriteSystemPreferencesPreferenceController.kt b/src/com/android/settings/spa/app/specialaccess/WriteSystemPreferencesPreferenceController.kt new file mode 100644 index 00000000000..fb808fa8199 --- /dev/null +++ b/src/com/android/settings/spa/app/specialaccess/WriteSystemPreferencesPreferenceController.kt @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2024 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.content.Context +import androidx.preference.Preference +import com.android.settings.core.BasePreferenceController +import com.android.settings.spa.SpaActivity.Companion.startSpaActivity +import com.android.settingslib.flags.Flags + +class WriteSystemPreferencesPreferenceController( + context: Context, key: String +) : BasePreferenceController(context, key) { + override fun getAvailabilityStatus(): Int { + return if (Flags.settingsCatalyst() && Flags.writeSystemPreferencePermissionEnabled()) { + AVAILABLE + } else { + UNSUPPORTED_ON_DEVICE + } + } + + override fun handlePreferenceTreeClick(preference: Preference?): Boolean { + return if (preference?.key == mPreferenceKey) { + mContext.startSpaActivity(WriteSystemPreferencesAppListProvider.getAppListRoute()) + true + } else { + false + } + } +} \ No newline at end of file