summaryrefslogtreecommitdiff
path: root/Settings/src/com/android/tv/settings/device/apps/specialaccess/TurnScreenOn.java
diff options
context:
space:
mode:
Diffstat (limited to 'Settings/src/com/android/tv/settings/device/apps/specialaccess/TurnScreenOn.java')
-rw-r--r--Settings/src/com/android/tv/settings/device/apps/specialaccess/TurnScreenOn.java88
1 files changed, 33 insertions, 55 deletions
diff --git a/Settings/src/com/android/tv/settings/device/apps/specialaccess/TurnScreenOn.java b/Settings/src/com/android/tv/settings/device/apps/specialaccess/TurnScreenOn.java
index de6d40f3b..1cf6cb6ac 100644
--- a/Settings/src/com/android/tv/settings/device/apps/specialaccess/TurnScreenOn.java
+++ b/Settings/src/com/android/tv/settings/device/apps/specialaccess/TurnScreenOn.java
@@ -20,6 +20,7 @@ import android.Manifest;
import android.app.ActivityManager;
import android.app.AppOpsManager;
import android.app.tvsettings.TvSettingsEnums;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserHandle;
@@ -29,53 +30,28 @@ import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
-import androidx.preference.SwitchPreference;
import androidx.preference.TwoStatePreference;
import com.android.settingslib.applications.ApplicationsState;
import com.android.tv.settings.R;
-import com.android.tv.settings.SettingsPreferenceFragment;
+import com.android.tv.settings.widget.SwitchWithSoundPreference;
/**
* Fragment for managing which apps are allowed to turn the screen on
*/
@Keep
-public class TurnScreenOn extends SettingsPreferenceFragment
- implements ManageApplicationsController.Callback {
+public class TurnScreenOn extends ManageAppOp {
private static final String TAG = TurnScreenOn.class.getSimpleName();
private static final boolean DEBUG = false;
- private ManageApplicationsController mManageApplicationsController;
- private AppOpsManager mAppOpsManager;
-
- private final ApplicationsState.AppFilter mFilter = new ApplicationsState.CompoundFilter(
- new ApplicationsState.CompoundFilter(
- ApplicationsState.FILTER_WITHOUT_DISABLED_UNTIL_USED,
- ApplicationsState.FILTER_ALL_ENABLED),
- new ApplicationsState.AppFilter() {
- @Override
- public void init() {
- }
-
- @Override
- public boolean filterApp(ApplicationsState.AppEntry info) {
- info.extraInfo = mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_TURN_SCREEN_ON,
- info.info.uid, info.info.packageName) == AppOpsManager.MODE_ALLOWED;
- return !ManageAppOp.shouldIgnorePackage(
- getContext(),
- info.info.packageName, /* customizedIgnoredPackagesArray= */ 0)
- && !info.info.isPrivilegedApp()
- && ActivityManager.getCurrentUser() == UserHandle.getUserId(
- info.info.uid)
- && checkPackageHasWakeLockPermission(info.info.packageName);
- }
- });
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mAppOpsManager = getContext().getSystemService(AppOpsManager.class);
- mManageApplicationsController = new ManageApplicationsController(getContext(), this,
- getLifecycle(), mFilter, ApplicationsState.ALPHA_COMPARATOR);
+ public int getAppOpsOpCode() {
+ return AppOpsManager.OP_TURN_SCREEN_ON;
+ }
+
+ @Override
+ public String getPermission() {
+ return Manifest.permission.TURN_SCREEN_ON;
}
@Override
@@ -86,37 +62,26 @@ public class TurnScreenOn extends SettingsPreferenceFragment
@Override
public void onResume() {
super.onResume();
- mManageApplicationsController.updateAppList();
+ updateAppList();
}
- private boolean checkPackageHasWakeLockPermission(String packageName) {
- return getContext().getPackageManager().checkPermission(Manifest.permission.WAKE_LOCK,
- packageName) == PackageManager.PERMISSION_GRANTED;
+ private boolean hasTurnScreenOnPermission(ApplicationInfo appInfo) {
+ return getContext().getPackageManager().checkPermission(Manifest.permission.TURN_SCREEN_ON,
+ appInfo.packageName) == PackageManager.PERMISSION_GRANTED;
}
@NonNull
@Override
public Preference bindPreference(@NonNull Preference preference,
ApplicationsState.AppEntry entry) {
- final TwoStatePreference switchPref = (SwitchPreference) preference;
+ final TwoStatePreference switchPref = (SwitchWithSoundPreference) preference;
switchPref.setTitle(entry.label);
- switchPref.setKey(entry.info.packageName);
+ switchPref.setKey("package:" + entry.info.uid + ":" + entry.info.packageName);
switchPref.setIcon(entry.icon);
- switchPref.setChecked((Boolean) entry.extraInfo);
+ switchPref.setChecked(((PermissionState) entry.extraInfo).isAllowed());
switchPref.setOnPreferenceChangeListener((pref, newValue) -> {
- int newMode =
- (Boolean) newValue ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_ERRORED;
- if (DEBUG) {
- Log.d(TAG, "setting OP_TURN_SCREEN_ON to " + newMode
- + ", uid=" + entry.info.uid
- + ", packageName=" + entry.info.packageName
- + ", userId=" + UserHandle.getUserId(entry.info.uid)
- + ", currentUser=" + ActivityManager.getCurrentUser());
- }
- mAppOpsManager.setMode(AppOpsManager.OP_TURN_SCREEN_ON,
- entry.info.uid,
- entry.info.packageName,
- newMode);
+ findEntriesUsingPackageName(entry.info.packageName)
+ .forEach(packageEntry -> setTurnScreenOnMode(packageEntry, (Boolean) newValue));
return true;
});
switchPref.setSummaryOn(R.string.app_permission_summary_allowed);
@@ -124,10 +89,23 @@ public class TurnScreenOn extends SettingsPreferenceFragment
return switchPref;
}
+ private void setTurnScreenOnMode(ApplicationsState.AppEntry entry, boolean newValue) {
+ int newMode = newValue ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_ERRORED;
+ if (DEBUG) {
+ Log.d(TAG, "setting OP_TURN_SCREEN_ON to " + newMode
+ + ", uid=" + entry.info.uid
+ + ", packageName=" + entry.info.packageName
+ + ", userId=" + UserHandle.getUserId(entry.info.uid)
+ + ", currentUser=" + ActivityManager.getCurrentUser());
+ }
+ getContext().getSystemService(AppOpsManager.class).setMode(getAppOpsOpCode(),
+ entry.info.uid, entry.info.packageName, newMode);
+ }
+
@NonNull
@Override
public Preference createAppPreference() {
- return new SwitchPreference(getPreferenceManager().getContext());
+ return new SwitchWithSoundPreference(getPreferenceManager().getContext());
}
@NonNull