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");