am e4c3fd72: am f62f4c94: Merge "Bug: 21589105 Rescoping the SYSTEM_ALERT_WINDOW permission to an explicit toggle to be manually enabled in Settings." into mnc-dev

* commit 'e4c3fd725ea8870756428a6580052a34fc676299':
  Bug: 21589105 Rescoping the SYSTEM_ALERT_WINDOW permission to an explicit toggle to be manually enabled in Settings.
This commit is contained in:
Billy Lau
2015-06-30 09:56:15 +00:00
committed by Android Git Automerger
6 changed files with 42 additions and 1 deletions

View File

@@ -26424,6 +26424,7 @@ package android.provider {
field public static final java.lang.String ACTION_LOCATION_SOURCE_SETTINGS = "android.settings.LOCATION_SOURCE_SETTINGS"; field public static final java.lang.String ACTION_LOCATION_SOURCE_SETTINGS = "android.settings.LOCATION_SOURCE_SETTINGS";
field public static final java.lang.String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS = "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS"; field public static final java.lang.String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS = "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS";
field public static final java.lang.String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS"; field public static final java.lang.String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS";
field public static final java.lang.String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.MANAGE_OVERLAY_PERMISSION";
field public static final java.lang.String ACTION_MEMORY_CARD_SETTINGS = "android.settings.MEMORY_CARD_SETTINGS"; field public static final java.lang.String ACTION_MEMORY_CARD_SETTINGS = "android.settings.MEMORY_CARD_SETTINGS";
field public static final java.lang.String ACTION_NETWORK_OPERATOR_SETTINGS = "android.settings.NETWORK_OPERATOR_SETTINGS"; field public static final java.lang.String ACTION_NETWORK_OPERATOR_SETTINGS = "android.settings.NETWORK_OPERATOR_SETTINGS";
field public static final java.lang.String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS"; field public static final java.lang.String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS";

View File

@@ -28485,6 +28485,7 @@ package android.provider {
field public static final java.lang.String ACTION_LOCATION_SOURCE_SETTINGS = "android.settings.LOCATION_SOURCE_SETTINGS"; field public static final java.lang.String ACTION_LOCATION_SOURCE_SETTINGS = "android.settings.LOCATION_SOURCE_SETTINGS";
field public static final java.lang.String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS = "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS"; field public static final java.lang.String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS = "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS";
field public static final java.lang.String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS"; field public static final java.lang.String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS";
field public static final java.lang.String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.MANAGE_OVERLAY_PERMISSION";
field public static final java.lang.String ACTION_MEMORY_CARD_SETTINGS = "android.settings.MEMORY_CARD_SETTINGS"; field public static final java.lang.String ACTION_MEMORY_CARD_SETTINGS = "android.settings.MEMORY_CARD_SETTINGS";
field public static final java.lang.String ACTION_NETWORK_OPERATOR_SETTINGS = "android.settings.NETWORK_OPERATOR_SETTINGS"; field public static final java.lang.String ACTION_NETWORK_OPERATOR_SETTINGS = "android.settings.NETWORK_OPERATOR_SETTINGS";
field public static final java.lang.String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS"; field public static final java.lang.String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS";

View File

@@ -561,6 +561,21 @@ public final class Settings {
public static final String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS = public static final String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS =
"android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS"; "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS";
/**
* Activity Action: Show settings to toggle permission to draw on top of
* other apps.
* <p>
* In some cases, a matching Activity may not exist, so ensure you
* safeguard against this.
* <p>
* Input: Nothing.
* <p>
* Output: Nothing.
*/
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_MANAGE_OVERLAY_PERMISSION =
"android.settings.MANAGE_OVERLAY_PERMISSION";
/** /**
* Activity Action: Show screen of details about a particular application. * Activity Action: Show screen of details about a particular application.
* <p> * <p>

View File

@@ -40,6 +40,7 @@ public class MetricsLogger implements MetricsConstants {
public static final int ACTION_BRIGHTNESS = 218; public static final int ACTION_BRIGHTNESS = 218;
public static final int ACTION_BRIGHTNESS_AUTO = 219; public static final int ACTION_BRIGHTNESS_AUTO = 219;
public static final int BRIGHTNESS_DIALOG = 220; public static final int BRIGHTNESS_DIALOG = 220;
public static final int SYSTEM_ALERT_WINDOW_APPS = 221;
// Temporary constants go here, to await migration to MetricsConstants. // Temporary constants go here, to await migration to MetricsConstants.
public static void visible(Context context, int category) throws IllegalArgumentException { public static void visible(Context context, int category) throws IllegalArgumentException {

View File

@@ -1414,7 +1414,7 @@
<permission android:name="android.permission.SYSTEM_ALERT_WINDOW" <permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
android:label="@string/permlab_systemAlertWindow" android:label="@string/permlab_systemAlertWindow"
android:description="@string/permdesc_systemAlertWindow" android:description="@string/permdesc_systemAlertWindow"
android:protectionLevel="dangerous" /> android:protectionLevel="signature|system|appop" />
<!-- ================================== --> <!-- ================================== -->
<!-- Permissions affecting the system wallpaper --> <!-- Permissions affecting the system wallpaper -->

View File

@@ -51,6 +51,7 @@ import android.media.IAudioService;
import android.media.Ringtone; import android.media.Ringtone;
import android.media.RingtoneManager; import android.media.RingtoneManager;
import android.media.session.MediaSessionLegacyHelper; import android.media.session.MediaSessionLegacyHelper;
import android.os.Binder;
import android.os.Bundle; import android.os.Bundle;
import android.os.Debug; import android.os.Debug;
import android.os.FactoryTest; import android.os.FactoryTest;
@@ -61,6 +62,7 @@ import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.os.Messenger; import android.os.Messenger;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.SystemClock; import android.os.SystemClock;
@@ -267,6 +269,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
SearchManager mSearchManager; SearchManager mSearchManager;
AccessibilityManager mAccessibilityManager; AccessibilityManager mAccessibilityManager;
BurnInProtectionHelper mBurnInProtectionHelper; BurnInProtectionHelper mBurnInProtectionHelper;
AppOpsManager mAppOpsManager;
// Vibrator pattern for haptic feedback of a long press. // Vibrator pattern for haptic feedback of a long press.
long[] mLongPressVibePattern; long[] mLongPressVibePattern;
@@ -1255,6 +1258,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class); mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class); mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class);
mDreamManagerInternal = LocalServices.getService(DreamManagerInternal.class); mDreamManagerInternal = LocalServices.getService(DreamManagerInternal.class);
mAppOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
// Init display burn-in protection // Init display burn-in protection
boolean burnInProtectionEnabled = context.getResources().getBoolean( boolean burnInProtectionEnabled = context.getResources().getBoolean(
@@ -1812,6 +1816,25 @@ public class PhoneWindowManager implements WindowManagerPolicy {
permission = android.Manifest.permission.INTERNAL_SYSTEM_WINDOW; permission = android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;
} }
if (permission != null) { 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
if (callingUid == Process.SYSTEM_UID) {
return WindowManagerGlobal.ADD_OKAY;
}
final int mode = mAppOpsManager.checkOp(outAppOp[0], callingUid,
attrs.packageName);
if (mode == AppOpsManager.MODE_DEFAULT) {
if (mContext.checkCallingPermission(permission) !=
PackageManager.PERMISSION_GRANTED) {
return WindowManagerGlobal.ADD_PERMISSION_DENIED;
}
}
return WindowManagerGlobal.ADD_OKAY;
}
if (mContext.checkCallingOrSelfPermission(permission) if (mContext.checkCallingOrSelfPermission(permission)
!= PackageManager.PERMISSION_GRANTED) { != PackageManager.PERMISSION_GRANTED) {
return WindowManagerGlobal.ADD_PERMISSION_DENIED; return WindowManagerGlobal.ADD_PERMISSION_DENIED;