diff options
13 files changed, 207 insertions, 235 deletions
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 3f9629c81ff4..96757bba510d 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -2216,7 +2216,9 @@ public class DevicePolicyManager { * that uses {@link DeviceAdminInfo#USES_POLICY_RESET_PASSWORD} */ public boolean resetPassword(String password, int flags) { - throwIfParentInstance("resetPassword"); + if (mParentInstance) { + throw new SecurityException("Reset password does not work across profiles."); + } if (mService != null) { try { return mService.resetPassword(password, flags); @@ -2353,7 +2355,6 @@ public class DevicePolicyManager { * that uses {@link DeviceAdminInfo#USES_POLICY_WIPE_DATA} */ public void wipeData(int flags) { - throwIfParentInstance("wipeData"); if (mService != null) { try { mService.wipeData(flags); @@ -2387,7 +2388,6 @@ public class DevicePolicyManager { */ public ComponentName setGlobalProxy(@NonNull ComponentName admin, Proxy proxySpec, List<String> exclusionList ) { - throwIfParentInstance("setGlobalProxy"); if (proxySpec == null) { throw new NullPointerException(); } @@ -2453,7 +2453,6 @@ public class DevicePolicyManager { */ public void setRecommendedGlobalProxy(@NonNull ComponentName admin, @Nullable ProxyInfo proxyInfo) { - throwIfParentInstance("setRecommendedGlobalProxy"); if (mService != null) { try { mService.setRecommendedGlobalProxy(admin, proxyInfo); @@ -2604,7 +2603,6 @@ public class DevicePolicyManager { * {@link DeviceAdminInfo#USES_ENCRYPTED_STORAGE} */ public int setStorageEncryption(@NonNull ComponentName admin, boolean encrypt) { - throwIfParentInstance("setStorageEncryption"); if (mService != null) { try { return mService.setStorageEncryption(admin, encrypt); @@ -2625,7 +2623,6 @@ public class DevicePolicyManager { * @return true if the admin(s) are requesting encryption, false if not. */ public boolean getStorageEncryption(@Nullable ComponentName admin) { - throwIfParentInstance("getStorageEncryption"); if (mService != null) { try { return mService.getStorageEncryption(admin, myUserId()); @@ -2721,7 +2718,6 @@ public class DevicePolicyManager { * owner. */ public boolean installCaCert(@Nullable ComponentName admin, byte[] certBuffer) { - throwIfParentInstance("installCaCert"); if (mService != null) { try { return mService.installCaCert(admin, certBuffer); @@ -2742,7 +2738,6 @@ public class DevicePolicyManager { * owner. */ public void uninstallCaCert(@Nullable ComponentName admin, byte[] certBuffer) { - throwIfParentInstance("uninstallCaCert"); if (mService != null) { try { final String alias = getCaCertAlias(certBuffer); @@ -2768,7 +2763,6 @@ public class DevicePolicyManager { */ public List<byte[]> getInstalledCaCerts(@Nullable ComponentName admin) { List<byte[]> certs = new ArrayList<byte[]>(); - throwIfParentInstance("getInstalledCaCerts"); if (mService != null) { try { mService.enforceCanManageCaCerts(admin); @@ -2797,7 +2791,6 @@ public class DevicePolicyManager { * owner. */ public void uninstallAllUserCaCerts(@Nullable ComponentName admin) { - throwIfParentInstance("uninstallAllUserCaCerts"); if (mService != null) { try { mService.uninstallCaCerts(admin, new TrustedCertificateStore().userAliases() @@ -2818,7 +2811,6 @@ public class DevicePolicyManager { * owner. */ public boolean hasCaCertInstalled(@Nullable ComponentName admin, byte[] certBuffer) { - throwIfParentInstance("hasCaCertInstalled"); if (mService != null) { try { mService.enforceCanManageCaCerts(admin); @@ -2887,7 +2879,6 @@ public class DevicePolicyManager { */ public boolean installKeyPair(@Nullable ComponentName admin, @NonNull PrivateKey privKey, @NonNull Certificate[] certs, @NonNull String alias, boolean requestAccess) { - throwIfParentInstance("installKeyPair"); try { final byte[] pemCert = Credentials.convertToPem(certs[0]); byte[] pemChain = null; @@ -2920,7 +2911,6 @@ public class DevicePolicyManager { * owner. */ public boolean removeKeyPair(@Nullable ComponentName admin, @NonNull String alias) { - throwIfParentInstance("removeKeyPair"); try { return mService.removeKeyPair(admin, alias); } catch (RemoteException e) { @@ -2961,7 +2951,6 @@ public class DevicePolicyManager { */ public void setCertInstallerPackage(@NonNull ComponentName admin, @Nullable String installerPackage) throws SecurityException { - throwIfParentInstance("setCertInstallerPackage"); if (mService != null) { try { mService.setCertInstallerPackage(admin, installerPackage); @@ -2981,7 +2970,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or a profile owner. */ public String getCertInstallerPackage(@NonNull ComponentName admin) throws SecurityException { - throwIfParentInstance("getCertInstallerPackage"); if (mService != null) { try { return mService.getCertInstallerPackage(admin); @@ -3012,7 +3000,6 @@ public class DevicePolicyManager { */ public void setAlwaysOnVpnPackage(@NonNull ComponentName admin, @Nullable String vpnPackage) throws NameNotFoundException, UnsupportedOperationException { - throwIfParentInstance("setAlwaysOnVpnPackage"); if (mService != null) { try { if (!mService.setAlwaysOnVpnPackage(admin, vpnPackage)) { @@ -3034,7 +3021,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or a profile owner. */ public String getAlwaysOnVpnPackage(@NonNull ComponentName admin) { - throwIfParentInstance("getAlwaysOnVpnPackage"); if (mService != null) { try { return mService.getAlwaysOnVpnPackage(admin); @@ -3062,7 +3048,6 @@ public class DevicePolicyManager { * {@link DeviceAdminInfo#USES_POLICY_DISABLE_CAMERA}. */ public void setCameraDisabled(@NonNull ComponentName admin, boolean disabled) { - throwIfParentInstance("setCameraDisabled"); if (mService != null) { try { mService.setCameraDisabled(admin, disabled); @@ -3079,7 +3064,6 @@ public class DevicePolicyManager { * have disabled the camera */ public boolean getCameraDisabled(@Nullable ComponentName admin) { - throwIfParentInstance("getCameraDisabled"); return getCameraDisabled(admin, myUserId()); } @@ -3109,7 +3093,6 @@ public class DevicePolicyManager { * than the one managed by the device owner. */ public boolean requestBugreport(@NonNull ComponentName admin) { - throwIfParentInstance("requestBugreport"); if (mService != null) { try { return mService.requestBugreport(admin); @@ -3148,7 +3131,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void setScreenCaptureDisabled(@NonNull ComponentName admin, boolean disabled) { - throwIfParentInstance("setScreenCaptureDisabled"); if (mService != null) { try { mService.setScreenCaptureDisabled(admin, disabled); @@ -3165,7 +3147,6 @@ public class DevicePolicyManager { * have disabled screen capture. */ public boolean getScreenCaptureDisabled(@Nullable ComponentName admin) { - throwIfParentInstance("getScreenCaptureDisabled"); return getScreenCaptureDisabled(admin, myUserId()); } @@ -3195,7 +3176,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public void setAutoTimeRequired(@NonNull ComponentName admin, boolean required) { - throwIfParentInstance("setAutoTimeRequired"); if (mService != null) { try { mService.setAutoTimeRequired(admin, required); @@ -3209,7 +3189,6 @@ public class DevicePolicyManager { * @return true if auto time is required. */ public boolean getAutoTimeRequired() { - throwIfParentInstance("getAutoTimeRequired"); if (mService != null) { try { return mService.getAutoTimeRequired(); @@ -3236,7 +3215,6 @@ public class DevicePolicyManager { */ public void setForceEphemeralUsers( @NonNull ComponentName admin, boolean forceEphemeralUsers) { - throwIfParentInstance("setForceEphemeralUsers"); if (mService != null) { try { mService.setForceEphemeralUsers(admin, forceEphemeralUsers); @@ -3252,7 +3230,6 @@ public class DevicePolicyManager { * @hide */ public boolean getForceEphemeralUsers(@NonNull ComponentName admin) { - throwIfParentInstance("getForceEphemeralUsers"); if (mService != null) { try { return mService.getForceEphemeralUsers(admin); @@ -3540,7 +3517,6 @@ public class DevicePolicyManager { * @return whether or not the package is registered as the device owner app. */ public boolean isDeviceOwnerApp(String packageName) { - throwIfParentInstance("isDeviceOwnerApp"); return isDeviceOwnerAppOnCallingUser(packageName); } @@ -3638,7 +3614,6 @@ public class DevicePolicyManager { * does not own the current device owner component. */ public void clearDeviceOwnerApp(String packageName) { - throwIfParentInstance("clearDeviceOwnerApp"); if (mService != null) { try { mService.clearDeviceOwner(packageName); @@ -3756,7 +3731,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not an active profile owner. */ public void clearProfileOwner(@NonNull ComponentName admin) { - throwIfParentInstance("clearProfileOwner"); if (mService != null) { try { mService.clearProfileOwner(admin); @@ -3830,7 +3804,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public void setDeviceOwnerLockScreenInfo(@NonNull ComponentName admin, CharSequence info) { - throwIfParentInstance("setDeviceOwnerLockScreenInfo"); if (mService != null) { try { mService.setDeviceOwnerLockScreenInfo(admin, info); @@ -3844,7 +3817,6 @@ public class DevicePolicyManager { * @return The device owner information. If it is not set returns {@code null}. */ public CharSequence getDeviceOwnerLockScreenInfo() { - throwIfParentInstance("getDeviceOwnerLockScreenInfo"); if (mService != null) { try { return mService.getDeviceOwnerLockScreenInfo(); @@ -3876,7 +3848,6 @@ public class DevicePolicyManager { */ public String[] setPackagesSuspended(@NonNull ComponentName admin, String[] packageNames, boolean suspended) { - throwIfParentInstance("setPackagesSuspended"); if (mService != null) { try { return mService.setPackagesSuspended(admin, packageNames, suspended); @@ -3899,7 +3870,6 @@ public class DevicePolicyManager { */ public boolean isPackageSuspended(@NonNull ComponentName admin, String packageName) throws NameNotFoundException { - throwIfParentInstance("isPackageSuspended"); if (mService != null) { try { return mService.isPackageSuspended(admin, packageName); @@ -3921,7 +3891,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a profile owner. */ public void setProfileEnabled(@NonNull ComponentName admin) { - throwIfParentInstance("setProfileEnabled"); if (mService != null) { try { mService.setProfileEnabled(admin); @@ -3943,7 +3912,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void setProfileName(@NonNull ComponentName admin, String profileName) { - throwIfParentInstance("setProfileName"); if (mService != null) { try { mService.setProfileName(admin, profileName); @@ -3962,7 +3930,6 @@ public class DevicePolicyManager { * @return Whether or not the package is registered as the profile owner. */ public boolean isProfileOwnerApp(String packageName) { - throwIfParentInstance("isProfileOwnerApp"); if (mService != null) { try { ComponentName profileOwner = mService.getProfileOwner(myUserId()); @@ -4057,7 +4024,6 @@ public class DevicePolicyManager { */ public void addPersistentPreferredActivity(@NonNull ComponentName admin, IntentFilter filter, @NonNull ComponentName activity) { - throwIfParentInstance("addPersistentPreferredActivity"); if (mService != null) { try { mService.addPersistentPreferredActivity(admin, filter, activity); @@ -4080,7 +4046,6 @@ public class DevicePolicyManager { */ public void clearPackagePersistentPreferredActivities(@NonNull ComponentName admin, String packageName) { - throwIfParentInstance("clearPackagePersistentPreferredActivities"); if (mService != null) { try { mService.clearPackagePersistentPreferredActivities(admin, packageName); @@ -4109,7 +4074,6 @@ public class DevicePolicyManager { */ public void setApplicationRestrictionsManagingPackage(@NonNull ComponentName admin, @Nullable String packageName) throws NameNotFoundException { - throwIfParentInstance("setApplicationRestrictionsManagingPackage"); if (mService != null) { try { if (!mService.setApplicationRestrictionsManagingPackage(admin, packageName)) { @@ -4131,7 +4095,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public String getApplicationRestrictionsManagingPackage(@NonNull ComponentName admin) { - throwIfParentInstance("getApplicationRestrictionsManagingPackage"); if (mService != null) { try { return mService.getApplicationRestrictionsManagingPackage(admin); @@ -4151,7 +4114,6 @@ public class DevicePolicyManager { * that method. */ public boolean isCallerApplicationRestrictionsManagingPackage() { - throwIfParentInstance("isCallerApplicationRestrictionsManagingPackage"); if (mService != null) { try { return mService.isCallerApplicationRestrictionsManagingPackage(); @@ -4197,7 +4159,6 @@ public class DevicePolicyManager { */ public void setApplicationRestrictions(@Nullable ComponentName admin, String packageName, Bundle settings) { - throwIfParentInstance("setApplicationRestrictions"); if (mService != null) { try { mService.setApplicationRestrictions(admin, packageName, settings); @@ -4296,7 +4257,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void setCrossProfileCallerIdDisabled(@NonNull ComponentName admin, boolean disabled) { - throwIfParentInstance("setCrossProfileCallerIdDisabled"); if (mService != null) { try { mService.setCrossProfileCallerIdDisabled(admin, disabled); @@ -4317,7 +4277,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public boolean getCrossProfileCallerIdDisabled(@NonNull ComponentName admin) { - throwIfParentInstance("getCrossProfileCallerIdDisabled"); if (mService != null) { try { return mService.getCrossProfileCallerIdDisabled(admin); @@ -4358,7 +4317,6 @@ public class DevicePolicyManager { */ public void setCrossProfileContactsSearchDisabled(@NonNull ComponentName admin, boolean disabled) { - throwIfParentInstance("setCrossProfileContactsSearchDisabled"); if (mService != null) { try { mService.setCrossProfileContactsSearchDisabled(admin, disabled); @@ -4379,7 +4337,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public boolean getCrossProfileContactsSearchDisabled(@NonNull ComponentName admin) { - throwIfParentInstance("getCrossProfileContactsSearchDisabled"); if (mService != null) { try { return mService.getCrossProfileContactsSearchDisabled(admin); @@ -4450,7 +4407,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void setBluetoothContactSharingDisabled(@NonNull ComponentName admin, boolean disabled) { - throwIfParentInstance("setBluetoothContactSharingDisabled"); if (mService != null) { try { mService.setBluetoothContactSharingDisabled(admin, disabled); @@ -4473,7 +4429,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public boolean getBluetoothContactSharingDisabled(@NonNull ComponentName admin) { - throwIfParentInstance("getBluetoothContactSharingDisabled"); if (mService != null) { try { return mService.getBluetoothContactSharingDisabled(admin); @@ -4517,7 +4472,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void addCrossProfileIntentFilter(@NonNull ComponentName admin, IntentFilter filter, int flags) { - throwIfParentInstance("addCrossProfileIntentFilter"); if (mService != null) { try { mService.addCrossProfileIntentFilter(admin, filter, flags); @@ -4536,7 +4490,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void clearCrossProfileIntentFilters(@NonNull ComponentName admin) { - throwIfParentInstance("clearCrossProfileIntentFilters"); if (mService != null) { try { mService.clearCrossProfileIntentFilters(admin); @@ -4566,7 +4519,6 @@ public class DevicePolicyManager { */ public boolean setPermittedAccessibilityServices(@NonNull ComponentName admin, List<String> packageNames) { - throwIfParentInstance("setPermittedAccessibilityServices"); if (mService != null) { try { return mService.setPermittedAccessibilityServices(admin, packageNames); @@ -4588,7 +4540,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public List<String> getPermittedAccessibilityServices(@NonNull ComponentName admin) { - throwIfParentInstance("getPermittedAccessibilityServices"); if (mService != null) { try { return mService.getPermittedAccessibilityServices(admin); @@ -4666,7 +4617,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public boolean setPermittedInputMethods(@NonNull ComponentName admin, List<String> packageNames) { - throwIfParentInstance("setPermittedInputMethods"); if (mService != null) { try { return mService.setPermittedInputMethods(admin, packageNames); @@ -4689,7 +4639,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public List<String> getPermittedInputMethods(@NonNull ComponentName admin) { - throwIfParentInstance("getPermittedInputMethods"); if (mService != null) { try { return mService.getPermittedInputMethods(admin); @@ -4885,7 +4834,6 @@ public class DevicePolicyManager { public UserHandle createAndManageUser(@NonNull ComponentName admin, @NonNull String name, @NonNull ComponentName profileOwner, @Nullable PersistableBundle adminExtras, int flags) { - throwIfParentInstance("createAndManageUser"); try { return mService.createAndManageUser(admin, name, profileOwner, adminExtras, flags); } catch (RemoteException re) { @@ -4903,7 +4851,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public boolean removeUser(@NonNull ComponentName admin, UserHandle userHandle) { - throwIfParentInstance("removeUser"); try { return mService.removeUser(admin, userHandle); } catch (RemoteException re) { @@ -4921,7 +4868,6 @@ public class DevicePolicyManager { * @see Intent#ACTION_USER_FOREGROUND */ public boolean switchUser(@NonNull ComponentName admin, @Nullable UserHandle userHandle) { - throwIfParentInstance("switchUser"); try { return mService.switchUser(admin, userHandle); } catch (RemoteException re) { @@ -4947,7 +4893,6 @@ public class DevicePolicyManager { * @see {@link #setApplicationRestrictionsManagingPackage} */ public Bundle getApplicationRestrictions(@Nullable ComponentName admin, String packageName) { - throwIfParentInstance("getApplicationRestrictions"); if (mService != null) { try { return mService.getApplicationRestrictions(admin, packageName); @@ -4970,7 +4915,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void addUserRestriction(@NonNull ComponentName admin, String key) { - throwIfParentInstance("addUserRestriction"); if (mService != null) { try { mService.setUserRestriction(admin, key, true); @@ -4992,7 +4936,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void clearUserRestriction(@NonNull ComponentName admin, String key) { - throwIfParentInstance("clearUserRestriction"); if (mService != null) { try { mService.setUserRestriction(admin, key, false); @@ -5014,7 +4957,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public Bundle getUserRestrictions(@NonNull ComponentName admin) { - throwIfParentInstance("getUserRestrictions"); Bundle ret = null; if (mService != null) { try { @@ -5059,7 +5001,6 @@ public class DevicePolicyManager { */ public boolean setApplicationHidden(@NonNull ComponentName admin, String packageName, boolean hidden) { - throwIfParentInstance("setApplicationHidden"); if (mService != null) { try { return mService.setApplicationHidden(admin, packageName, hidden); @@ -5079,7 +5020,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public boolean isApplicationHidden(@NonNull ComponentName admin, String packageName) { - throwIfParentInstance("isApplicationHidden"); if (mService != null) { try { return mService.isApplicationHidden(admin, packageName); @@ -5099,7 +5039,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void enableSystemApp(@NonNull ComponentName admin, String packageName) { - throwIfParentInstance("enableSystemApp"); if (mService != null) { try { mService.enableSystemApp(admin, packageName); @@ -5120,7 +5059,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public int enableSystemApp(@NonNull ComponentName admin, Intent intent) { - throwIfParentInstance("enableSystemApp"); if (mService != null) { try { return mService.enableSystemAppWithIntent(admin, intent); @@ -5153,7 +5091,6 @@ public class DevicePolicyManager { */ public void setAccountManagementDisabled(@NonNull ComponentName admin, String accountType, boolean disabled) { - throwIfParentInstance("setAccountManagementDisabled"); if (mService != null) { try { mService.setAccountManagementDisabled(admin, accountType, disabled); @@ -5174,7 +5111,6 @@ public class DevicePolicyManager { * @see #setAccountManagementDisabled */ public String[] getAccountTypesWithManagementDisabled() { - throwIfParentInstance("getAccountTypesWithManagementDisabled"); return getAccountTypesWithManagementDisabledAsUser(myUserId()); } @@ -5212,7 +5148,6 @@ public class DevicePolicyManager { */ public void setLockTaskPackages(@NonNull ComponentName admin, String[] packages) throws SecurityException { - throwIfParentInstance("setLockTaskPackages"); if (mService != null) { try { mService.setLockTaskPackages(admin, packages); @@ -5229,7 +5164,6 @@ public class DevicePolicyManager { * @hide */ public String[] getLockTaskPackages(@NonNull ComponentName admin) { - throwIfParentInstance("getLockTaskPackages"); if (mService != null) { try { return mService.getLockTaskPackages(admin); @@ -5246,7 +5180,6 @@ public class DevicePolicyManager { * @param pkg The package to check */ public boolean isLockTaskPermitted(String pkg) { - throwIfParentInstance("isLockTaskPermitted"); if (mService != null) { try { return mService.isLockTaskPermitted(pkg); @@ -5295,7 +5228,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public void setGlobalSetting(@NonNull ComponentName admin, String setting, String value) { - throwIfParentInstance("setGlobalSetting"); if (mService != null) { try { mService.setGlobalSetting(admin, setting, value); @@ -5328,7 +5260,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void setSecureSetting(@NonNull ComponentName admin, String setting, String value) { - throwIfParentInstance("setSecureSetting"); if (mService != null) { try { mService.setSecureSetting(admin, setting, value); @@ -5352,7 +5283,6 @@ public class DevicePolicyManager { */ public void setRestrictionsProvider(@NonNull ComponentName admin, @Nullable ComponentName provider) { - throwIfParentInstance("setRestrictionsProvider"); if (mService != null) { try { mService.setRestrictionsProvider(admin, provider); @@ -5370,7 +5300,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void setMasterVolumeMuted(@NonNull ComponentName admin, boolean on) { - throwIfParentInstance("setMasterVolumeMuted"); if (mService != null) { try { mService.setMasterVolumeMuted(admin, on); @@ -5388,7 +5317,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public boolean isMasterVolumeMuted(@NonNull ComponentName admin) { - throwIfParentInstance("isMasterVolumeMuted"); if (mService != null) { try { return mService.isMasterVolumeMuted(admin); @@ -5409,7 +5337,6 @@ public class DevicePolicyManager { */ public void setUninstallBlocked(@NonNull ComponentName admin, String packageName, boolean uninstallBlocked) { - throwIfParentInstance("setUninstallBlocked"); if (mService != null) { try { mService.setUninstallBlocked(admin, packageName, uninstallBlocked); @@ -5435,7 +5362,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public boolean isUninstallBlocked(@Nullable ComponentName admin, String packageName) { - throwIfParentInstance("isUninstallBlocked"); if (mService != null) { try { return mService.isUninstallBlocked(admin, packageName); @@ -5463,7 +5389,6 @@ public class DevicePolicyManager { * @see #getCrossProfileWidgetProviders(android.content.ComponentName) */ public boolean addCrossProfileWidgetProvider(@NonNull ComponentName admin, String packageName) { - throwIfParentInstance("addCrossProfileWidgetProvider"); if (mService != null) { try { return mService.addCrossProfileWidgetProvider(admin, packageName); @@ -5491,7 +5416,6 @@ public class DevicePolicyManager { */ public boolean removeCrossProfileWidgetProvider( @NonNull ComponentName admin, String packageName) { - throwIfParentInstance("removeCrossProfileWidgetProvider"); if (mService != null) { try { return mService.removeCrossProfileWidgetProvider(admin, packageName); @@ -5513,7 +5437,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a profile owner. */ public List<String> getCrossProfileWidgetProviders(@NonNull ComponentName admin) { - throwIfParentInstance("getCrossProfileWidgetProviders"); if (mService != null) { try { List<String> providers = mService.getCrossProfileWidgetProviders(admin); @@ -5535,7 +5458,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void setUserIcon(@NonNull ComponentName admin, Bitmap icon) { - throwIfParentInstance("setUserIcon"); try { mService.setUserIcon(admin, icon); } catch (RemoteException re) { @@ -5555,7 +5477,6 @@ public class DevicePolicyManager { * @see SystemUpdatePolicy */ public void setSystemUpdatePolicy(@NonNull ComponentName admin, SystemUpdatePolicy policy) { - throwIfParentInstance("setSystemUpdatePolicy"); if (mService != null) { try { mService.setSystemUpdatePolicy(admin, policy); @@ -5571,7 +5492,6 @@ public class DevicePolicyManager { * @return The current policy object, or {@code null} if no policy is set. */ public SystemUpdatePolicy getSystemUpdatePolicy() { - throwIfParentInstance("getSystemUpdatePolicy"); if (mService != null) { try { return mService.getSystemUpdatePolicy(); @@ -5597,7 +5517,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public boolean setKeyguardDisabled(@NonNull ComponentName admin, boolean disabled) { - throwIfParentInstance("setKeyguardDisabled"); try { return mService.setKeyguardDisabled(admin, disabled); } catch (RemoteException re) { @@ -5616,7 +5535,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public boolean setStatusBarDisabled(@NonNull ComponentName admin, boolean disabled) { - throwIfParentInstance("setStatusBarDisabled"); try { return mService.setStatusBarDisabled(admin, disabled); } catch (RemoteException re) { @@ -5662,7 +5580,6 @@ public class DevicePolicyManager { * @see #setPermissionGrantState */ public void setPermissionPolicy(@NonNull ComponentName admin, int policy) { - throwIfParentInstance("setPermissionPolicy"); try { mService.setPermissionPolicy(admin, policy); } catch (RemoteException re) { @@ -5677,7 +5594,6 @@ public class DevicePolicyManager { * @return the current policy for future permission requests. */ public int getPermissionPolicy(ComponentName admin) { - throwIfParentInstance("getPermissionPolicy"); try { return mService.getPermissionPolicy(admin); } catch (RemoteException re) { @@ -5714,7 +5630,6 @@ public class DevicePolicyManager { */ public boolean setPermissionGrantState(@NonNull ComponentName admin, String packageName, String permission, int grantState) { - throwIfParentInstance("setPermissionGrantState"); try { return mService.setPermissionGrantState(admin, packageName, permission, grantState); } catch (RemoteException re) { @@ -5743,7 +5658,6 @@ public class DevicePolicyManager { */ public int getPermissionGrantState(@NonNull ComponentName admin, String packageName, String permission) { - throwIfParentInstance("getPermissionGrantState"); try { return mService.getPermissionGrantState(admin, packageName, permission); } catch (RemoteException re) { @@ -5759,7 +5673,6 @@ public class DevicePolicyManager { * @throws IllegalArgumentException if the supplied action is not valid. */ public boolean isProvisioningAllowed(String action) { - throwIfParentInstance("isProvisioningAllowed"); try { return mService.isProvisioningAllowed(action); } catch (RemoteException re) { @@ -5775,7 +5688,6 @@ public class DevicePolicyManager { * @return if this user is a managed profile of another user. */ public boolean isManagedProfile(@NonNull ComponentName admin) { - throwIfParentInstance("isManagedProfile"); try { return mService.isManagedProfile(admin); } catch (RemoteException re) { @@ -5809,7 +5721,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public String getWifiMacAddress(@NonNull ComponentName admin) { - throwIfParentInstance("getWifiMacAddress"); try { return mService.getWifiMacAddress(admin); } catch (RemoteException re) { @@ -5826,7 +5737,6 @@ public class DevicePolicyManager { * @see TelephonyManager#CALL_STATE_IDLE */ public void reboot(@NonNull ComponentName admin) { - throwIfParentInstance("reboot"); try { mService.reboot(admin); } catch (RemoteException re) { @@ -5853,7 +5763,6 @@ public class DevicePolicyManager { */ public void setShortSupportMessage(@NonNull ComponentName admin, @Nullable String message) { - throwIfParentInstance("setShortSupportMessage"); if (mService != null) { try { mService.setShortSupportMessage(admin, message); @@ -5872,7 +5781,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not an active administrator. */ public String getShortSupportMessage(@NonNull ComponentName admin) { - throwIfParentInstance("getShortSupportMessage"); if (mService != null) { try { return mService.getShortSupportMessage(admin); @@ -5899,7 +5807,6 @@ public class DevicePolicyManager { */ public void setLongSupportMessage(@NonNull ComponentName admin, @Nullable String message) { - throwIfParentInstance("setLongSupportMessage"); if (mService != null) { try { mService.setLongSupportMessage(admin, message); @@ -5918,7 +5825,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not an active administrator. */ public String getLongSupportMessage(@NonNull ComponentName admin) { - throwIfParentInstance("getLongSupportMessage"); if (mService != null) { try { return mService.getLongSupportMessage(admin); @@ -6015,7 +5921,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a profile owner. */ public DevicePolicyManager getParentProfileInstance(@NonNull ComponentName admin) { - throwIfParentInstance("getParentProfileInstance"); try { if (!mService.isManagedProfile(admin)) { throw new SecurityException("The current user does not have a parent profile."); @@ -6042,7 +5947,6 @@ public class DevicePolicyManager { * @see #retrieveSecurityLogs */ public void setSecurityLoggingEnabled(@NonNull ComponentName admin, boolean enabled) { - throwIfParentInstance("setSecurityLoggingEnabled"); try { mService.setSecurityLoggingEnabled(admin, enabled); } catch (RemoteException re) { @@ -6061,7 +5965,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public boolean isSecurityLoggingEnabled(@NonNull ComponentName admin) { - throwIfParentInstance("isSecurityLoggingEnabled"); try { return mService.isSecurityLoggingEnabled(admin); } catch (RemoteException re) { @@ -6085,7 +5988,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public List<SecurityEvent> retrieveSecurityLogs(@NonNull ComponentName admin) { - throwIfParentInstance("retrieveSecurityLogs"); try { ParceledListSlice<SecurityEvent> list = mService.retrieveSecurityLogs(admin); if (list != null) { @@ -6131,7 +6033,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a device owner. */ public List<SecurityEvent> retrievePreRebootSecurityLogs(@NonNull ComponentName admin) { - throwIfParentInstance("retrievePreRebootSecurityLogs"); try { ParceledListSlice<SecurityEvent> list = mService.retrievePreRebootSecurityLogs(admin); return list.getList(); @@ -6153,7 +6054,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a profile owner. */ public void setOrganizationColor(@NonNull ComponentName admin, int color) { - throwIfParentInstance("setOrganizationColor"); try { mService.setOrganizationColor(admin, color); } catch (RemoteException re) { @@ -6189,7 +6089,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a profile owner. */ public int getOrganizationColor(@NonNull ComponentName admin) { - throwIfParentInstance("getOrganizationColor"); try { return mService.getOrganizationColor(admin); } catch (RemoteException re) { @@ -6225,7 +6124,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a profile owner. */ public void setOrganizationName(@NonNull ComponentName admin, @Nullable String title) { - throwIfParentInstance("setOrganizationName"); try { mService.setOrganizationName(admin, title); } catch (RemoteException re) { @@ -6242,7 +6140,6 @@ public class DevicePolicyManager { * @throws SecurityException if {@code admin} is not a profile owner. */ public String getOrganizationName(@NonNull ComponentName admin) { - throwIfParentInstance("getOrganizationName"); try { return mService.getOrganizationName(admin); } catch (RemoteException re) { @@ -6368,10 +6265,4 @@ public class DevicePolicyManager { throw re.rethrowFromSystemServer(); } } - - private void throwIfParentInstance(String functionName) { - if (mParentInstance) { - throw new SecurityException(functionName + " cannot be called on the parent instance"); - } - } } diff --git a/core/java/com/android/internal/util/Protocol.java b/core/java/com/android/internal/util/Protocol.java index 5992f7a92e13..b075db881d6d 100644 --- a/core/java/com/android/internal/util/Protocol.java +++ b/core/java/com/android/internal/util/Protocol.java @@ -57,7 +57,7 @@ public class Protocol { public static final int BASE_DATA_CONNECTION = 0x00040000; public static final int BASE_DATA_CONNECTION_AC = 0x00041000; public static final int BASE_DATA_CONNECTION_TRACKER = 0x00042000; - public static final int BASE_DNS_PINGER = 0x00050000; + public static final int BASE_TETHERING = 0x00050000; public static final int BASE_NSD_MANAGER = 0x00060000; public static final int BASE_NETWORK_STATE_TRACKER = 0x00070000; public static final int BASE_CONNECTIVITY_MANAGER = 0x00080000; diff --git a/packages/SystemUI/res/drawable/ksh_key_item_background.xml b/packages/SystemUI/res/drawable/ksh_key_item_background.xml new file mode 100644 index 000000000000..75ff30d25aa7 --- /dev/null +++ b/packages/SystemUI/res/drawable/ksh_key_item_background.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2016 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License + --> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@color/ksh_key_item_background" /> + <corners android:radius="2dp" /> +</shape> diff --git a/packages/SystemUI/res/layout/keyboard_shortcut_app_item.xml b/packages/SystemUI/res/layout/keyboard_shortcut_app_item.xml index 38650208f7d5..63b759b7b276 100644 --- a/packages/SystemUI/res/layout/keyboard_shortcut_app_item.xml +++ b/packages/SystemUI/res/layout/keyboard_shortcut_app_item.xml @@ -15,10 +15,10 @@ ~ limitations under the License --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/keyboard_shortcuts_keyword_wrapper" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" + android:minHeight="48dp" android:paddingStart="24dp" android:paddingEnd="24dp" android:paddingBottom="8dp"> @@ -29,7 +29,8 @@ android:layout_marginEnd="32dp" android:layout_gravity="center_vertical" android:visibility="gone" - android:layout_alignParentStart="true"/> + android:layout_alignParentStart="true" + android:layout_centerVertical="true"/> <TextView android:id="@+id/keyboard_shortcuts_keyword" android:layout_toEndOf="@+id/keyboard_shortcuts_icon" @@ -41,7 +42,8 @@ android:maxLines="5" android:singleLine="false" android:scrollHorizontally="false" - android:layout_alignParentStart="true"/> + android:layout_alignParentStart="true" + android:layout_centerVertical="true"/> <com.android.systemui.statusbar.KeyboardShortcutKeysLayout android:id="@+id/keyboard_shortcuts_item_container" android:layout_toEndOf="@+id/keyboard_shortcuts_keyword" @@ -50,5 +52,6 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:textSize="14sp" - android:scrollHorizontally="false"/> + android:scrollHorizontally="false" + android:layout_centerVertical="true"/> </RelativeLayout> diff --git a/packages/SystemUI/res/layout/keyboard_shortcuts_key_icon_view.xml b/packages/SystemUI/res/layout/keyboard_shortcuts_key_icon_view.xml index 0cecb96fd022..5db678958ce1 100644 --- a/packages/SystemUI/res/layout/keyboard_shortcuts_key_icon_view.xml +++ b/packages/SystemUI/res/layout/keyboard_shortcuts_key_icon_view.xml @@ -21,4 +21,4 @@ android:padding="@dimen/ksh_item_padding" android:layout_marginStart="@dimen/ksh_item_margin_start" android:scaleType="fitXY" - android:background="@color/ksh_key_item_background"/> + android:background="@drawable/ksh_key_item_background"/> diff --git a/packages/SystemUI/res/layout/keyboard_shortcuts_key_view.xml b/packages/SystemUI/res/layout/keyboard_shortcuts_key_view.xml index 1215029bdda0..31a87730a445 100644 --- a/packages/SystemUI/res/layout/keyboard_shortcuts_key_view.xml +++ b/packages/SystemUI/res/layout/keyboard_shortcuts_key_view.xml @@ -19,7 +19,8 @@ android:layout_height="wrap_content" android:padding="@dimen/ksh_item_padding" android:layout_marginStart="@dimen/ksh_item_margin_start" - android:background="@color/ksh_key_item_background" + android:background="@drawable/ksh_key_item_background" android:textColor="@color/ksh_key_item_color" android:singleLine="true" + android:gravity="center" android:textSize="@dimen/ksh_item_text_size"/> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index d9fcf425a287..18fc4196daa0 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -166,11 +166,11 @@ <color name="switch_accent_color">#ff7fcac3</color> <!-- Keyboard shortcuts colors --> - <color name="ksh_system_group_color">#ff00bcd4</color> + <color name="ksh_system_group_color">@color/material_deep_teal_500</color> <color name="ksh_application_group_color">#fff44336</color> <color name="ksh_keyword_color">#d9000000</color> <color name="ksh_key_item_color">@color/material_grey_600</color> - <color name="ksh_key_item_background">#eeeeee</color> + <color name="ksh_key_item_background">@color/material_grey_100</color> <!-- Background color of edit overflow --> <color name="qs_edit_overflow_bg">#455A64</color> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java index 0c079e2d3de4..86c1fca17a88 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyboardShortcuts.java @@ -530,8 +530,15 @@ public final class KeyboardShortcuts { List<KeyboardShortcutGroup> keyboardShortcutGroups) { LayoutInflater inflater = LayoutInflater.from(mContext); final int keyboardShortcutGroupsSize = keyboardShortcutGroups.size(); + TextView shortcutsKeyView = (TextView) inflater.inflate( + R.layout.keyboard_shortcuts_key_view, null, false); + shortcutsKeyView.measure( + View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); + final int shortcutKeyTextItemMinWidth = shortcutsKeyView.getMeasuredHeight(); // Needed to be able to scale the image items to the same height as the text items. - final int shortcutTextItemHeight = getShortcutTextItemHeight(inflater); + final int shortcutKeyIconItemHeightWidth = shortcutsKeyView.getMeasuredHeight() + - shortcutsKeyView.getPaddingTop() + - shortcutsKeyView.getPaddingBottom(); for (int i = 0; i < keyboardShortcutGroupsSize; i++) { KeyboardShortcutGroup group = keyboardShortcutGroups.get(i); TextView categoryTitle = (TextView) inflater.inflate( @@ -582,8 +589,8 @@ public final class KeyboardShortcuts { ImageView shortcutKeyIconView = (ImageView) inflater.inflate( R.layout.keyboard_shortcuts_key_icon_view, shortcutItemsContainer, false); - Bitmap bitmap = Bitmap.createBitmap(shortcutTextItemHeight, - shortcutTextItemHeight, Bitmap.Config.ARGB_8888); + Bitmap bitmap = Bitmap.createBitmap(shortcutKeyIconItemHeightWidth, + shortcutKeyIconItemHeightWidth, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); shortcutRepresentation.drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); @@ -594,6 +601,7 @@ public final class KeyboardShortcuts { TextView shortcutKeyTextView = (TextView) inflater.inflate( R.layout.keyboard_shortcuts_key_view, shortcutItemsContainer, false); + shortcutKeyTextView.setMinimumWidth(shortcutKeyTextItemMinWidth); shortcutKeyTextView.setText(shortcutRepresentation.string); shortcutItemsContainer.addView(shortcutKeyTextView); } @@ -610,16 +618,6 @@ public final class KeyboardShortcuts { } } - private int getShortcutTextItemHeight(LayoutInflater inflater) { - TextView shortcutKeyTextView = (TextView) inflater.inflate( - R.layout.keyboard_shortcuts_key_view, null, false); - shortcutKeyTextView.measure( - View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); - return shortcutKeyTextView.getMeasuredHeight() - - shortcutKeyTextView.getPaddingTop() - - shortcutKeyTextView.getPaddingBottom(); - } - private List<StringOrDrawable> getHumanReadableShortcutKeys(KeyboardShortcutInfo info) { List<StringOrDrawable> shortcutKeys = getHumanReadableModifiers(info); if (shortcutKeys == null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index e52a401937d3..75430ffe2d0a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -3470,7 +3470,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, @Override public void run() { mLeaveOpenOnKeyguardHide = true; - executeRunnableDismissingKeyguard(runnable, null, false, true); + executeRunnableDismissingKeyguard(runnable, null, false, false); } }); } diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 966deb6520f4..ebef21fe5088 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -116,6 +116,7 @@ import com.android.internal.net.VpnInfo; import com.android.internal.net.VpnProfile; import com.android.internal.util.AsyncChannel; import com.android.internal.util.IndentingPrintWriter; +import com.android.internal.util.MessageUtils; import com.android.internal.util.XmlUtils; import com.android.server.am.BatteryStatsService; import com.android.server.connectivity.DataConnectionStats; @@ -224,6 +225,9 @@ public class ConnectivityService extends IConnectivityManager.Stub private static final int ENABLED = 1; private static final int DISABLED = 0; + private static final SparseArray<String> sMagicDecoderRing = MessageUtils.findMessageNames( + new Class[] { AsyncChannel.class, ConnectivityService.class, NetworkAgent.class }); + private enum ReapUnvalidatedNetworks { // Tear down networks that have no chance (e.g. even if validated) of becoming // the highest scoring network satisfying a NetworkRequest. This should be passed when @@ -1900,11 +1904,12 @@ public class ConnectivityService extends IConnectivityManager.Stub } } - private boolean isLiveNetworkAgent(NetworkAgentInfo nai, String msg) { + private boolean isLiveNetworkAgent(NetworkAgentInfo nai, int what) { if (nai.network == null) return false; final NetworkAgentInfo officialNai = getNetworkAgentInfoForNetwork(nai.network); if (officialNai != null && officialNai.equals(nai)) return true; if (officialNai != null || VDBG) { + final String msg = sMagicDecoderRing.get(what, Integer.toString(what)); loge(msg + " - isLiveNetworkAgent found mismatched netId: " + officialNai + " - " + nai); } @@ -1921,10 +1926,10 @@ public class ConnectivityService extends IConnectivityManager.Stub super(looper); } - @Override - public void handleMessage(Message msg) { - NetworkInfo info; + private boolean maybeHandleAsyncChannelMessage(Message msg) { switch (msg.what) { + default: + return false; case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: { handleAsyncChannelHalfConnect(msg); break; @@ -1938,69 +1943,58 @@ public class ConnectivityService extends IConnectivityManager.Stub handleAsyncChannelDisconnected(msg); break; } + } + return true; + } + + private void maybeHandleNetworkAgentMessage(Message msg) { + NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); + if (nai == null) { + if (VDBG) { + final String what = sMagicDecoderRing.get(msg.what, Integer.toString(msg.what)); + log(String.format("%s from unknown NetworkAgent", what)); + } + return; + } + + switch (msg.what) { case NetworkAgent.EVENT_NETWORK_CAPABILITIES_CHANGED: { - NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); - if (nai == null) { - loge("EVENT_NETWORK_CAPABILITIES_CHANGED from unknown NetworkAgent"); - } else { - final NetworkCapabilities networkCapabilities = - (NetworkCapabilities)msg.obj; - if (networkCapabilities.hasCapability(NET_CAPABILITY_CAPTIVE_PORTAL) || - networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)) { - Slog.wtf(TAG, "BUG: " + nai + " has CS-managed capability."); - } - if (nai.created && !nai.networkCapabilities.equalImmutableCapabilities( - networkCapabilities)) { - Slog.wtf(TAG, "BUG: " + nai + " changed immutable capabilities: " - + nai.networkCapabilities + " -> " + networkCapabilities); - } - updateCapabilities(nai, networkCapabilities); + final NetworkCapabilities networkCapabilities = (NetworkCapabilities) msg.obj; + if (networkCapabilities.hasCapability(NET_CAPABILITY_CAPTIVE_PORTAL) || + networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED)) { + Slog.wtf(TAG, "BUG: " + nai + " has CS-managed capability."); + } + if (nai.created && !nai.networkCapabilities.equalImmutableCapabilities( + networkCapabilities)) { + Slog.wtf(TAG, "BUG: " + nai + " changed immutable capabilities: " + + nai.networkCapabilities + " -> " + networkCapabilities); } + updateCapabilities(nai, networkCapabilities); break; } case NetworkAgent.EVENT_NETWORK_PROPERTIES_CHANGED: { - NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); - if (nai == null) { - loge("NetworkAgent not found for EVENT_NETWORK_PROPERTIES_CHANGED"); - } else { - if (VDBG) { - log("Update of LinkProperties for " + nai.name() + - "; created=" + nai.created); - } - LinkProperties oldLp = nai.linkProperties; - synchronized (nai) { - nai.linkProperties = (LinkProperties)msg.obj; - } - if (nai.created) updateLinkProperties(nai, oldLp); + if (VDBG) { + log("Update of LinkProperties for " + nai.name() + + "; created=" + nai.created); + } + LinkProperties oldLp = nai.linkProperties; + synchronized (nai) { + nai.linkProperties = (LinkProperties)msg.obj; } + if (nai.created) updateLinkProperties(nai, oldLp); break; } case NetworkAgent.EVENT_NETWORK_INFO_CHANGED: { - NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); - if (nai == null) { - loge("EVENT_NETWORK_INFO_CHANGED from unknown NetworkAgent"); - break; - } - info = (NetworkInfo) msg.obj; + NetworkInfo info = (NetworkInfo) msg.obj; updateNetworkInfo(nai, info); break; } case NetworkAgent.EVENT_NETWORK_SCORE_CHANGED: { - NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); - if (nai == null) { - loge("EVENT_NETWORK_SCORE_CHANGED from unknown NetworkAgent"); - break; - } Integer score = (Integer) msg.obj; if (score != null) updateNetworkScore(nai, score.intValue()); break; } case NetworkAgent.EVENT_UID_RANGES_ADDED: { - NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); - if (nai == null) { - loge("EVENT_UID_RANGES_ADDED from unknown NetworkAgent"); - break; - } try { mNetd.addVpnUidRanges(nai.network.netId, (UidRange[])msg.obj); } catch (Exception e) { @@ -2010,11 +2004,6 @@ public class ConnectivityService extends IConnectivityManager.Stub break; } case NetworkAgent.EVENT_UID_RANGES_REMOVED: { - NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); - if (nai == null) { - loge("EVENT_UID_RANGES_REMOVED from unknown NetworkAgent"); - break; - } try { mNetd.removeVpnUidRanges(nai.network.netId, (UidRange[])msg.obj); } catch (Exception e) { @@ -2024,11 +2013,6 @@ public class ConnectivityService extends IConnectivityManager.Stub break; } case NetworkAgent.EVENT_SET_EXPLICITLY_SELECTED: { - NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); - if (nai == null) { - loge("EVENT_SET_EXPLICITLY_SELECTED from unknown NetworkAgent"); - break; - } if (nai.created && !nai.networkMisc.explicitlySelected) { loge("ERROR: created network explicitly selected."); } @@ -2037,17 +2021,19 @@ public class ConnectivityService extends IConnectivityManager.Stub break; } case NetworkAgent.EVENT_PACKET_KEEPALIVE: { - NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); - if (nai == null) { - loge("EVENT_PACKET_KEEPALIVE from unknown NetworkAgent"); - break; - } mKeepaliveTracker.handleEventPacketKeepalive(nai, msg); break; } + } + } + + private boolean maybeHandleNetworkMonitorMessage(Message msg) { + switch (msg.what) { + default: + return false; case NetworkMonitor.EVENT_NETWORK_TESTED: { NetworkAgentInfo nai = (NetworkAgentInfo)msg.obj; - if (isLiveNetworkAgent(nai, "EVENT_NETWORK_TESTED")) { + if (isLiveNetworkAgent(nai, msg.what)) { final boolean valid = (msg.arg1 == NetworkMonitor.NETWORK_TEST_RESULT_VALID); if (DBG) log(nai.name() + " validation " + (valid ? " passed" : "failed")); @@ -2070,7 +2056,7 @@ public class ConnectivityService extends IConnectivityManager.Stub } case NetworkMonitor.EVENT_NETWORK_LINGER_COMPLETE: { NetworkAgentInfo nai = (NetworkAgentInfo)msg.obj; - if (isLiveNetworkAgent(nai, "EVENT_NETWORK_LINGER_COMPLETE")) { + if (isLiveNetworkAgent(nai, msg.what)) { handleLingerComplete(nai); } break; @@ -2102,6 +2088,14 @@ public class ConnectivityService extends IConnectivityManager.Stub break; } } + return true; + } + + @Override + public void handleMessage(Message msg) { + if (!maybeHandleAsyncChannelMessage(msg) && !maybeHandleNetworkMonitorMessage(msg)) { + maybeHandleNetworkAgentMessage(msg); + } } } diff --git a/services/core/java/com/android/server/NativeDaemonConnector.java b/services/core/java/com/android/server/NativeDaemonConnector.java index d6dbad87b060..7db9be20e95f 100644 --- a/services/core/java/com/android/server/NativeDaemonConnector.java +++ b/services/core/java/com/android/server/NativeDaemonConnector.java @@ -110,6 +110,14 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo } /** + * Like SystemClock.uptimeMillis, except truncated to an int so it will fit in a message arg. + * Inaccurate across 49.7 days of uptime, but only used for debugging. + */ + private int uptimeMillisInt() { + return (int) SystemClock.uptimeMillis() & Integer.MAX_VALUE; + } + + /** * Yell loudly if someone tries making future {@link #execute(Command)} * calls while holding a lock on the given object. */ @@ -134,7 +142,9 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo @Override public boolean handleMessage(Message msg) { - String event = (String) msg.obj; + final String event = (String) msg.obj; + final int start = uptimeMillisInt(); + final int sent = msg.arg1; try { if (!mCallbacks.onEvent(msg.what, event, NativeDaemonEvent.unescapeArgs(event))) { log(String.format("Unhandled event '%s'", event)); @@ -145,6 +155,13 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo if (mCallbacks.onCheckHoldWakeLock(msg.what) && mWakeLock != null) { mWakeLock.release(); } + final int end = uptimeMillisInt(); + if (start > sent && start - sent > WARN_EXECUTE_DELAY_MS) { + loge(String.format("NDC event {%s} processed too late: %dms", event, start - sent)); + } + if (end > start && end - start > WARN_EXECUTE_DELAY_MS) { + loge(String.format("NDC event {%s} took too long: %dms", event, end - start)); + } } return true; } @@ -214,8 +231,9 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo mWakeLock.acquire(); releaseWl = true; } - if (mCallbackHandler.sendMessage(mCallbackHandler.obtainMessage( - event.getCode(), event.getRawEvent()))) { + Message msg = mCallbackHandler.obtainMessage( + event.getCode(), uptimeMillisInt(), 0, event.getRawEvent()); + if (mCallbackHandler.sendMessage(msg)) { releaseWl = false; } } else { diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 58db9858b0d4..a6dfab042aa0 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -1290,7 +1290,7 @@ public class AudioService extends IAudioService.Stub { // Check if the ringer mode handles this adjustment. If it does we don't // need to adjust the volume further. final int result = checkForRingerModeChange(aliasIndex, direction, step, - streamState.mIsMuted); + streamState.mIsMuted, callingPackage, flags); adjustVolume = (result & FLAG_ADJUST_VOLUME) != 0; // If suppressing a volume adjustment in silent mode, display the UI hint if ((result & AudioManager.FLAG_SHOW_SILENT_HINT) != 0) { @@ -1302,8 +1302,7 @@ public class AudioService extends IAudioService.Stub { } } // If the ringermode is suppressing media, prevent changes - if (streamTypeAlias == AudioSystem.STREAM_MUSIC - && (mRingerModeMutedStreams & (1 << AudioSystem.STREAM_MUSIC)) != 0) { + if (!volumeAdjustmentAllowedByDnd(streamTypeAlias, flags)) { adjustVolume = false; } int oldIndex = mStreamStates[streamType].getIndex(device); @@ -1551,6 +1550,10 @@ public class AudioService extends IAudioService.Stub { throw new SecurityException("Not allowed to change Do Not Disturb state"); } + if (!volumeAdjustmentAllowedByDnd(streamTypeAlias, flags)) { + return; + } + synchronized (mSafeMediaVolumeState) { // reset any pending volume command mPendingVolumeCommand = null; @@ -1601,6 +1604,19 @@ public class AudioService extends IAudioService.Stub { sendVolumeUpdate(streamType, oldIndex, index, flags); } + // No ringer affected streams can be changed in total silence mode except those that + // will cause the device to exit total silence mode. + private boolean volumeAdjustmentAllowedByDnd(int streamTypeAlias, int flags) { + if (mNm.getZenMode() == Settings.Global.ZEN_MODE_NO_INTERRUPTIONS + && isStreamMutedByRingerMode(streamTypeAlias)) { + if (!(((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) || + (streamTypeAlias == getUiSoundsStreamType()))) { + return false; + } + } + return true; + } + /** @see AudioManager#forceVolumeControlStream(int) */ public void forceVolumeControlStream(int streamType, IBinder cb) { synchronized(mForceControlStreamLock) { @@ -3366,7 +3382,8 @@ public class AudioService extends IAudioService.Stub { * adjusting volume. If so, this will set the proper ringer mode and volume * indices on the stream states. */ - private int checkForRingerModeChange(int oldIndex, int direction, int step, boolean isMuted) { + private int checkForRingerModeChange(int oldIndex, int direction, int step, boolean isMuted, + String caller, int flags) { final boolean isTv = mPlatformType == AudioSystem.PLATFORM_TELEVISION; int result = FLAG_ADJUST_VOLUME; int ringerMode = getRingerModeInternal(); @@ -3455,6 +3472,12 @@ public class AudioService extends IAudioService.Stub { break; } + if (isAndroidNPlus(caller) && wouldToggleZenMode(ringerMode) + && !mNm.isNotificationPolicyAccessGrantedForPackage(caller) + && (flags & AudioManager.FLAG_FROM_KEY) == 0) { + throw new SecurityException("Not allowed to change Do Not Disturb state"); + } + setRingerMode(ringerMode, TAG + ".checkForRingerModeChange", false /*external*/); mPrevVolDirection = direction; diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index 2cba93fdab90..79b5978998c4 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -57,12 +57,16 @@ import android.os.UserHandle; import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.TelephonyManager; +import android.text.TextUtils; import android.util.Log; +import android.util.SparseArray; import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.util.IState; import com.android.internal.util.IndentingPrintWriter; +import com.android.internal.util.MessageUtils; +import com.android.internal.util.Protocol; import com.android.internal.util.State; import com.android.internal.util.StateMachine; import com.android.server.IoThread; @@ -95,6 +99,12 @@ public class Tethering extends BaseNetworkObserver { private final static boolean DBG = false; private final static boolean VDBG = false; + private static final Class[] messageClasses = { + Tethering.class, TetherMasterSM.class, TetherInterfaceSM.class + }; + private static final SparseArray<String> sMagicDecoderRing = + MessageUtils.findMessageNames(messageClasses); + // TODO - remove both of these - should be part of interface inspection/selection stuff private String[] mTetherableUsbRegexs; private String[] mTetherableWifiRegexs; @@ -235,6 +245,8 @@ public class Tethering extends BaseNetworkObserver { @Override public void interfaceStatusChanged(String iface, boolean up) { + // Never called directly: only called from interfaceLinkStateChanged. + // See NetlinkHandler.cpp:71. if (VDBG) Log.d(TAG, "interfaceStatusChanged " + iface + ", " + up); boolean found = false; boolean usb = false; @@ -274,7 +286,6 @@ public class Tethering extends BaseNetworkObserver { @Override public void interfaceLinkStateChanged(String iface, boolean up) { - if (VDBG) Log.d(TAG, "interfaceLinkStateChanged " + iface + ", " + up); interfaceStatusChanged(iface, up); } @@ -660,8 +671,11 @@ public class Tethering extends BaseNetworkObserver { erroredList); mContext.sendStickyBroadcastAsUser(broadcast, UserHandle.ALL); if (DBG) { - Log.d(TAG, "sendTetherStateChangedBroadcast " + availableList.size() + ", " + - activeList.size() + ", " + erroredList.size()); + Log.d(TAG, String.format( + "sendTetherStateChangedBroadcast avail=[%s] active=[%s] error=[%s]", + TextUtils.join(",", availableList), + TextUtils.join(",", activeList), + TextUtils.join(",", erroredList))); } if (usbTethered) { @@ -989,31 +1003,39 @@ public class Tethering extends BaseNetworkObserver { return retVal; } + private void maybeLogMessage(State state, int what) { + if (DBG) { + Log.d(TAG, state.getName() + " got " + + sMagicDecoderRing.get(what, Integer.toString(what))); + } + } + class TetherInterfaceSM extends StateMachine { + private static final int BASE_IFACE = Protocol.BASE_TETHERING + 100; // notification from the master SM that it's not in tether mode - static final int CMD_TETHER_MODE_DEAD = 1; + static final int CMD_TETHER_MODE_DEAD = BASE_IFACE + 1; // request from the user that it wants to tether - static final int CMD_TETHER_REQUESTED = 2; + static final int CMD_TETHER_REQUESTED = BASE_IFACE + 2; // request from the user that it wants to untether - static final int CMD_TETHER_UNREQUESTED = 3; + static final int CMD_TETHER_UNREQUESTED = BASE_IFACE + 3; // notification that this interface is down - static final int CMD_INTERFACE_DOWN = 4; + static final int CMD_INTERFACE_DOWN = BASE_IFACE + 4; // notification that this interface is up - static final int CMD_INTERFACE_UP = 5; + static final int CMD_INTERFACE_UP = BASE_IFACE + 5; // notification from the master SM that it had an error turning on cellular dun - static final int CMD_CELL_DUN_ERROR = 6; + static final int CMD_CELL_DUN_ERROR = BASE_IFACE + 6; // notification from the master SM that it had trouble enabling IP Forwarding - static final int CMD_IP_FORWARDING_ENABLE_ERROR = 7; + static final int CMD_IP_FORWARDING_ENABLE_ERROR = BASE_IFACE + 7; // notification from the master SM that it had trouble disabling IP Forwarding - static final int CMD_IP_FORWARDING_DISABLE_ERROR = 8; + static final int CMD_IP_FORWARDING_DISABLE_ERROR = BASE_IFACE + 8; // notification from the master SM that it had trouble starting tethering - static final int CMD_START_TETHERING_ERROR = 9; + static final int CMD_START_TETHERING_ERROR = BASE_IFACE + 9; // notification from the master SM that it had trouble stopping tethering - static final int CMD_STOP_TETHERING_ERROR = 10; + static final int CMD_STOP_TETHERING_ERROR = BASE_IFACE + 10; // notification from the master SM that it had trouble setting the DNS forwarders - static final int CMD_SET_DNS_FORWARDERS_ERROR = 11; + static final int CMD_SET_DNS_FORWARDERS_ERROR = BASE_IFACE + 11; // the upstream connection has changed - static final int CMD_TETHER_CONNECTION_CHANGED = 12; + static final int CMD_TETHER_CONNECTION_CHANGED = BASE_IFACE + 12; private State mDefaultState; @@ -1124,7 +1146,7 @@ public class Tethering extends BaseNetworkObserver { @Override public boolean processMessage(Message message) { - if (DBG) Log.d(TAG, "InitialState.processMessage what=" + message.what); + maybeLogMessage(this, message.what); boolean retValue = true; switch (message.what) { case CMD_TETHER_REQUESTED: @@ -1165,7 +1187,7 @@ public class Tethering extends BaseNetworkObserver { } @Override public boolean processMessage(Message message) { - if (DBG) Log.d(TAG, "StartingState.processMessage what=" + message.what); + maybeLogMessage(this, message.what); boolean retValue = true; switch (message.what) { // maybe a parent class? @@ -1255,7 +1277,7 @@ public class Tethering extends BaseNetworkObserver { @Override public boolean processMessage(Message message) { - if (DBG) Log.d(TAG, "TetheredState.processMessage what=" + message.what); + maybeLogMessage(this, message.what); boolean retValue = true; boolean error = false; switch (message.what) { @@ -1480,18 +1502,19 @@ public class Tethering extends BaseNetworkObserver { } class TetherMasterSM extends StateMachine { + private static final int BASE_MASTER = Protocol.BASE_TETHERING; // an interface SM has requested Tethering - static final int CMD_TETHER_MODE_REQUESTED = 1; + static final int CMD_TETHER_MODE_REQUESTED = BASE_MASTER + 1; // an interface SM has unrequested Tethering - static final int CMD_TETHER_MODE_UNREQUESTED = 2; + static final int CMD_TETHER_MODE_UNREQUESTED = BASE_MASTER + 2; // upstream connection change - do the right thing - static final int CMD_UPSTREAM_CHANGED = 3; + static final int CMD_UPSTREAM_CHANGED = BASE_MASTER + 3; // we don't have a valid upstream conn, check again after a delay - static final int CMD_RETRY_UPSTREAM = 4; + static final int CMD_RETRY_UPSTREAM = BASE_MASTER + 4; // Events from NetworkCallbacks that we process on the master state // machine thread on behalf of the UpstreamNetworkMonitor. - static final int EVENT_UPSTREAM_LINKPROPERTIES_CHANGED = 5; - static final int EVENT_UPSTREAM_LOST = 6; + static final int EVENT_UPSTREAM_LINKPROPERTIES_CHANGED = BASE_MASTER + 5; + static final int EVENT_UPSTREAM_LOST = BASE_MASTER + 6; // This indicates what a timeout event relates to. A state that // sends itself a delayed timeout event and handles incoming timeout events @@ -1748,7 +1771,7 @@ public class Tethering extends BaseNetworkObserver { } protected void notifyTetheredOfNewUpstreamIface(String ifaceName) { - if (DBG) Log.d(TAG, "notifying tethered with iface =" + ifaceName); + if (DBG) Log.d(TAG, "Notifying tethered with upstream=" + ifaceName); mCurrentUpstreamIface = ifaceName; for (TetherInterfaceSM sm : mNotifyList) { sm.sendMessage(TetherInterfaceSM.CMD_TETHER_CONNECTION_CHANGED, @@ -1862,7 +1885,7 @@ public class Tethering extends BaseNetworkObserver { } @Override public boolean processMessage(Message message) { - if (DBG) Log.d(TAG, "MasterInitialState.processMessage what=" + message.what); + maybeLogMessage(this, message.what); boolean retValue = true; switch (message.what) { case CMD_TETHER_MODE_REQUESTED: @@ -1910,7 +1933,7 @@ public class Tethering extends BaseNetworkObserver { } @Override public boolean processMessage(Message message) { - if (DBG) Log.d(TAG, "TetherModeAliveState.processMessage what=" + message.what); + maybeLogMessage(this, message.what); boolean retValue = true; switch (message.what) { case CMD_TETHER_MODE_REQUESTED: |