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