Merge cherrypicks of ['googleplex-android-review.googlesource.com/31152812', 'googleplex-android-review.googlesource.com/31117685'] into 25Q1-release.

Change-Id: I476252fbbc577755928b3505b52da28e3be5caa8
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index 1d77482..02237b8 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -20,6 +20,7 @@
 
 import android.Manifest;
 import android.app.Activity;
+import android.app.ActivityManager;
 import android.app.Dialog;
 import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
@@ -34,6 +35,7 @@
 import android.hardware.usb.IUsbManager;
 import android.os.Bundle;
 import android.os.IBinder;
+import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -176,20 +178,19 @@
         if (!(activity instanceof SettingsActivity)) {
             return false;
         }
-        final String callingPackageName =
-                ((SettingsActivity) activity).getInitialCallingPackage();
-
-        if (TextUtils.isEmpty(callingPackageName)) {
-            Log.w(TAG, "Not able to get calling package name for permission check");
+        try {
+            int callerUid = ActivityManager.getService().getLaunchedFromUid(
+                    activity.getActivityToken());
+            if (ActivityManager.checkUidPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+                    callerUid) != PackageManager.PERMISSION_GRANTED) {
+                Log.w(TAG, "Uid " + callerUid + " does not have required permission "
+                        + Manifest.permission.INTERACT_ACROSS_USERS_FULL);
+                return false;
+            }
+            return true;
+        } catch (RemoteException e) {
             return false;
         }
-        if (mPm.checkPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL, callingPackageName)
-                != PackageManager.PERMISSION_GRANTED) {
-            Log.w(TAG, "Package " + callingPackageName + " does not have required permission "
-                    + Manifest.permission.INTERACT_ACROSS_USERS_FULL);
-            return false;
-        }
-        return true;
     }
 
     protected void setIntentAndFinish(boolean appChanged) {
diff --git a/src/com/android/settings/notification/NotificationAccessConfirmationActivity.java b/src/com/android/settings/notification/NotificationAccessConfirmationActivity.java
index 1adeb64..8448a8e 100644
--- a/src/com/android/settings/notification/NotificationAccessConfirmationActivity.java
+++ b/src/com/android/settings/notification/NotificationAccessConfirmationActivity.java
@@ -41,7 +41,6 @@
 import android.service.notification.NotificationListenerService;
 import android.text.TextUtils;
 import android.util.Slog;
-import android.view.WindowManager;
 import android.view.accessibility.AccessibilityEvent;
 import android.widget.Toast;
 
@@ -161,20 +160,6 @@
         getWindow().setCloseOnTouchOutside(false); 
     }
 
-    @Override
-    public void onResume() {
-        super.onResume();
-        getWindow().addFlags(
-                WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-    }
-
-    @Override
-    public void onPause() {
-        getWindow().clearFlags(
-                WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-        super.onPause();
-    }
-
     private void onAllow() {
         mNm.setNotificationListenerAccessGranted(mComponentName, true);
 
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationAccessConfirmationActivityTest.java b/tests/robotests/src/com/android/settings/notification/NotificationAccessConfirmationActivityTest.java
index 0a95361..8ae242f 100644
--- a/tests/robotests/src/com/android/settings/notification/NotificationAccessConfirmationActivityTest.java
+++ b/tests/robotests/src/com/android/settings/notification/NotificationAccessConfirmationActivityTest.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.notification;
 
+import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+
 import static com.android.internal.notification.NotificationAccessConfirmationActivityContract.EXTRA_COMPONENT_NAME;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -43,6 +45,19 @@
 public class NotificationAccessConfirmationActivityTest {
 
     @Test
+    public void onCreate_setsWindowFlags() {
+        ComponentName cn = new ComponentName("com.example", "com.example.SomeService");
+        installPackage(cn.getPackageName(), "Example");
+
+        NotificationAccessConfirmationActivity activity = startActivityWithIntent(cn);
+
+        assertThat(activity.getWindow().getAttributes().privateFlags
+                & SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isNotEqualTo(0);
+        assertThat(activity.getWindow().getAttributes().flags
+                & SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isEqualTo(0);
+    }
+
+    @Test
     public void start_withMissingIntentFilter_finishes() {
         ComponentName cn = new ComponentName("com.example", "com.example.SomeService");
         installPackage(cn.getPackageName(), "X");