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

Commit 008409a2 authored by Billy Lau's avatar Billy Lau Committed by Android (Google) Code Review
Browse files

Merge "Bug: 21589105 Rescoping SYSTEM_ALERT_WINDOW..." into mnc-dev

parents f6586cbd 060275ff
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -773,7 +773,7 @@ public class AppOpsManager {
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_DEFAULT, // OP_SYSTEM_ALERT_WINDOW
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
            AppOpsManager.MODE_ALLOWED,
+20 −7
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

@@ -1875,21 +1876,33 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        if (permission != null) {
            if (permission == android.Manifest.permission.SYSTEM_ALERT_WINDOW) {
                final int callingUid = Binder.getCallingUid();
                // check if this is a system uid first before bothering with
                // obtaining package name
                // system processes will be automatically allowed privilege to draw
                if (callingUid == Process.SYSTEM_UID) {
                    return WindowManagerGlobal.ADD_OKAY;
                }

                // check if user has enabled this operation. SecurityException will be thrown if
                // this app has not been allowed by the user
                final int mode = mAppOpsManager.checkOp(outAppOp[0], callingUid,
                        attrs.packageName);
                if (mode == AppOpsManager.MODE_DEFAULT) {
                switch (mode) {
                    case AppOpsManager.MODE_ALLOWED:
                    case AppOpsManager.MODE_IGNORED:
                        // although we return ADD_OKAY for MODE_IGNORED, the added window will
                        // actually be hidden in WindowManagerService
                        return WindowManagerGlobal.ADD_OKAY;
                    case AppOpsManager.MODE_ERRORED:
                        return WindowManagerGlobal.ADD_PERMISSION_DENIED;
                    default:
                        // in the default mode, we will make a decision here based on
                        // checkCallingPermission()
                        if (mContext.checkCallingPermission(permission) !=
                                PackageManager.PERMISSION_GRANTED) {
                            return WindowManagerGlobal.ADD_PERMISSION_DENIED;
                        } else {
                            return WindowManagerGlobal.ADD_OKAY;
                        }
                }
                return WindowManagerGlobal.ADD_OKAY;
            }

            if (mContext.checkCallingOrSelfPermission(permission)
+6 −3
Original line number Diff line number Diff line
@@ -2543,8 +2543,10 @@ public class WindowManagerService extends IWindowManager.Stub
            win.attach();
            mWindowMap.put(client.asBinder(), win);
            if (win.mAppOp != AppOpsManager.OP_NONE) {
                if (mAppOps.startOpNoThrow(win.mAppOp, win.getOwningUid(), win.getOwningPackage())
                        != AppOpsManager.MODE_ALLOWED) {
                int startOpResult = mAppOps.startOpNoThrow(win.mAppOp, win.getOwningUid(),
                        win.getOwningPackage());
                if ((startOpResult != AppOpsManager.MODE_ALLOWED) &&
                        (startOpResult != AppOpsManager.MODE_DEFAULT)) {
                    win.setAppOpVisibilityLw(false);
                }
            }
@@ -2899,7 +2901,8 @@ public class WindowManagerService extends IWindowManager.Stub
                    if (win.mAppOp != AppOpsManager.OP_NONE) {
                        final int mode = mAppOps.checkOpNoThrow(win.mAppOp, win.getOwningUid(),
                                win.getOwningPackage());
                        win.setAppOpVisibilityLw(mode == AppOpsManager.MODE_ALLOWED);
                        win.setAppOpVisibilityLw(mode == AppOpsManager.MODE_ALLOWED ||
                                mode == AppOpsManager.MODE_DEFAULT);
                    }
                }
            }