From d69e8dc44173c33c5425158c027bfe44ddcacf85 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Thu, 7 Feb 2013 00:01:10 -0800 Subject: [PATCH] App ops: add "draw on top" op, improve switch ordering. Change-Id: Ibe490305650f986f3ccf1ea25012272287455f59 --- res/values/arrays.xml | 4 ++- .../settings/applications/AppOpsState.java | 28 +++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 3aed397b6ea..4c3d4b737a1 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -587,8 +587,9 @@ read ICC SMS write ICC SMS modify settings + draw on top - + Location @@ -615,6 +616,7 @@ Receive SMS/MMS Send SMS/MMS Modify settings + Draw on top diff --git a/src/com/android/settings/applications/AppOpsState.java b/src/com/android/settings/applications/AppOpsState.java index 5e7098a39a0..288977d0c1a 100644 --- a/src/com/android/settings/applications/AppOpsState.java +++ b/src/com/android/settings/applications/AppOpsState.java @@ -149,10 +149,12 @@ public class AppOpsState { new int[] { AppOpsManager.OP_VIBRATE, AppOpsManager.OP_POST_NOTIFICATION, AppOpsManager.OP_CALL_PHONE, - AppOpsManager.OP_WRITE_SETTINGS }, + AppOpsManager.OP_WRITE_SETTINGS, + AppOpsManager.OP_SYSTEM_ALERT_WINDOW }, new boolean[] { false, false, true, + true, true } ); @@ -254,10 +256,13 @@ public class AppOpsState { private final ArrayList mSwitchOps = new ArrayList(); private final AppEntry mApp; + private final int mSwitchOrder; - public AppOpEntry(AppOpsManager.PackageOps pkg, AppOpsManager.OpEntry op, AppEntry app) { + public AppOpEntry(AppOpsManager.PackageOps pkg, AppOpsManager.OpEntry op, AppEntry app, + int switchOrder) { mPkgOps = pkg; mApp = app; + mSwitchOrder = switchOrder; mApp.addOp(this, op); mOps.add(op); mSwitchOps.add(op); @@ -293,6 +298,10 @@ public class AppOpsState { return mApp; } + public int getSwitchOrder() { + return mSwitchOrder; + } + public AppOpsManager.PackageOps getPackageOps() { return mPkgOps; } @@ -366,6 +375,9 @@ public class AppOpsState { private final Collator sCollator = Collator.getInstance(); @Override public int compare(AppOpEntry object1, AppOpEntry object2) { + if (object1.getSwitchOrder() != object2.getSwitchOrder()) { + return object1.getSwitchOrder() < object2.getSwitchOrder() ? -1 : 1; + } if (object1.isRunning() != object2.isRunning()) { // Currently running ops go first. return object1.isRunning() ? -1 : 1; @@ -380,7 +392,7 @@ public class AppOpsState { }; private void addOp(List entries, AppOpsManager.PackageOps pkgOps, - AppEntry appEntry, AppOpsManager.OpEntry opEntry, boolean allowMerge) { + AppEntry appEntry, AppOpsManager.OpEntry opEntry, boolean allowMerge, int switchOrder) { if (allowMerge && entries.size() > 0) { AppOpEntry last = entries.get(entries.size()-1); if (last.getAppEntry() == appEntry) { @@ -399,7 +411,7 @@ public class AppOpsState { entry.addOp(opEntry); return; } - entry = new AppOpEntry(pkgOps, opEntry, appEntry); + entry = new AppOpEntry(pkgOps, opEntry, appEntry, switchOrder); if (DEBUG) Log.d(TAG, "Add op " + opEntry.getOp() + " to package " + pkgOps.getPackageName() + ": making new " + entry); entries.add(entry); @@ -438,12 +450,14 @@ public class AppOpsState { final ArrayList perms = new ArrayList(); final ArrayList permOps = new ArrayList(); + final int[] opToOrder = new int[AppOpsManager._NUM_OP]; for (int i=0; i