diff options
-rw-r--r-- | api/current.txt | 4 | ||||
-rw-r--r-- | api/system-current.txt | 6 | ||||
-rw-r--r-- | core/java/android/app/ActivityManager.java | 4 | ||||
-rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 10 | ||||
-rw-r--r-- | core/java/android/app/IActivityManager.java | 2 | ||||
-rw-r--r-- | core/java/android/view/KeyEvent.java | 22 | ||||
-rw-r--r-- | core/java/android/view/ViewGroup.java | 54 | ||||
-rw-r--r-- | core/res/AndroidManifest.xml | 2 | ||||
-rw-r--r-- | core/res/res/values/attrs.xml | 4 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java | 2 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java | 40 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 7 | ||||
-rw-r--r-- | services/core/java/com/android/server/audio/AudioService.java | 4 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 57 |
14 files changed, 134 insertions, 84 deletions
diff --git a/api/current.txt b/api/current.txt index ac34c59..e295a63 100644 --- a/api/current.txt +++ b/api/current.txt @@ -35140,6 +35140,10 @@ package android.view { field public static final int KEYCODE_MEDIA_PREVIOUS = 88; // 0x58 field public static final int KEYCODE_MEDIA_RECORD = 130; // 0x82 field public static final int KEYCODE_MEDIA_REWIND = 89; // 0x59 + field public static final int KEYCODE_MEDIA_SKIP_BACKWARD = 273; // 0x111 + field public static final int KEYCODE_MEDIA_SKIP_FORWARD = 272; // 0x110 + field public static final int KEYCODE_MEDIA_STEP_BACKWARD = 275; // 0x113 + field public static final int KEYCODE_MEDIA_STEP_FORWARD = 274; // 0x112 field public static final int KEYCODE_MEDIA_STOP = 86; // 0x56 field public static final int KEYCODE_MEDIA_TOP_MENU = 226; // 0xe2 field public static final int KEYCODE_MENU = 82; // 0x52 diff --git a/api/system-current.txt b/api/system-current.txt index 7987803..8b9af5e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -115,7 +115,6 @@ package android { field public static final java.lang.String INTERNET = "android.permission.INTERNET"; field public static final java.lang.String INVOKE_CARRIER_SETUP = "android.permission.INVOKE_CARRIER_SETUP"; field public static final java.lang.String KILL_BACKGROUND_PROCESSES = "android.permission.KILL_BACKGROUND_PROCESSES"; - field public static final java.lang.String KILL_UID = "android.permission.KILL_UID"; field public static final java.lang.String LOCAL_MAC_ADDRESS = "android.permission.LOCAL_MAC_ADDRESS"; field public static final java.lang.String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE"; field public static final java.lang.String LOOP_RADIO = "android.permission.LOOP_RADIO"; @@ -3654,7 +3653,6 @@ package android.app { method public static boolean isRunningInTestHarness(); method public static boolean isUserAMonkey(); method public void killBackgroundProcesses(java.lang.String); - method public void killUid(int, java.lang.String); method public void moveTaskToFront(int, int); method public void moveTaskToFront(int, int, android.os.Bundle); method public deprecated void restartPackage(java.lang.String); @@ -37434,6 +37432,10 @@ package android.view { field public static final int KEYCODE_MEDIA_PREVIOUS = 88; // 0x58 field public static final int KEYCODE_MEDIA_RECORD = 130; // 0x82 field public static final int KEYCODE_MEDIA_REWIND = 89; // 0x59 + field public static final int KEYCODE_MEDIA_SKIP_BACKWARD = 273; // 0x111 + field public static final int KEYCODE_MEDIA_SKIP_FORWARD = 272; // 0x110 + field public static final int KEYCODE_MEDIA_STEP_BACKWARD = 275; // 0x113 + field public static final int KEYCODE_MEDIA_STEP_FORWARD = 274; // 0x112 field public static final int KEYCODE_MEDIA_STOP = 86; // 0x56 field public static final int KEYCODE_MEDIA_TOP_MENU = 226; // 0xe2 field public static final int KEYCODE_MENU = 82; // 0x52 diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 55b2fd9..87c9efc2 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -2430,11 +2430,11 @@ public class ActivityManager { * * @hide */ - @SystemApi @RequiresPermission(Manifest.permission.KILL_UID) public void killUid(int uid, String reason) { try { - ActivityManagerNative.getDefault().killUid(uid, reason); + ActivityManagerNative.getDefault().killUid(UserHandle.getAppId(uid), + UserHandle.getUserId(uid), reason); } catch (RemoteException e) { Log.e(TAG, "Couldn't kill uid:" + uid, e); } diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index e144c29..f6e0735 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -2245,9 +2245,10 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM case KILL_UID_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); - int uid = data.readInt(); + int appId = data.readInt(); + int userId = data.readInt(); String reason = data.readString(); - killUid(uid, reason); + killUid(appId, userId, reason); reply.writeNoException(); return true; } @@ -5479,11 +5480,12 @@ class ActivityManagerProxy implements IActivityManager return res; } - public void killUid(int uid, String reason) throws RemoteException { + public void killUid(int appId, int userId, String reason) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); - data.writeInt(uid); + data.writeInt(appId); + data.writeInt(userId); data.writeString(reason); mRemote.transact(KILL_UID_TRANSACTION, data, reply, 0); reply.readException(); diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 90216af..ef121ce 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -447,7 +447,7 @@ public interface IActivityManager extends IInterface { public boolean showAssistFromActivity(IBinder token, Bundle args) throws RemoteException; - public void killUid(int uid, String reason) throws RemoteException; + public void killUid(int appId, int userId, String reason) throws RemoteException; public void hang(IBinder who, boolean allowRestart) throws RemoteException; diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index f6ce353..a9bf92b 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -747,22 +747,32 @@ public class KeyEvent extends InputEvent implements Parcelable { public static final int KEYCODE_TV_TIMER_PROGRAMMING = 258; /** Key code constant: Help key. */ public static final int KEYCODE_HELP = 259; - /** Key code constant: Navigate to previous key. + /** Key code constant: Navigate to previous key. * Goes backward by one item in an ordered collection of items. */ public static final int KEYCODE_NAVIGATE_PREVIOUS = 260; - /** Key code constant: Navigate to next key. + /** Key code constant: Navigate to next key. * Advances to the next item in an ordered collection of items. */ public static final int KEYCODE_NAVIGATE_NEXT = 261; /** Key code constant: Navigate in key. - * Activates the item that currently has focus or expands to the next level of a navigation + * Activates the item that currently has focus or expands to the next level of a navigation * hierarchy. */ public static final int KEYCODE_NAVIGATE_IN = 262; /** Key code constant: Navigate out key. - * Backs out one level of a navigation hierarchy or collapses the item that currently has + * Backs out one level of a navigation hierarchy or collapses the item that currently has * focus. */ public static final int KEYCODE_NAVIGATE_OUT = 263; - - private static final int LAST_KEYCODE = KEYCODE_NAVIGATE_OUT; + /** Key code constant: Skip forward media key. */ + public static final int KEYCODE_MEDIA_SKIP_FORWARD = 272; + /** Key code constant: Skip backward media key. */ + public static final int KEYCODE_MEDIA_SKIP_BACKWARD = 273; + /** Key code constant: Step forward media key. + * Steps media forward, one frame at a time. */ + public static final int KEYCODE_MEDIA_STEP_FORWARD = 274; + /** Key code constant: Step backward media key. + * Steps media backward, one frame at a time. */ + public static final int KEYCODE_MEDIA_STEP_BACKWARD = 275; + + private static final int LAST_KEYCODE = KEYCODE_MEDIA_STEP_BACKWARD; // NOTE: If you add a new keycode here you must also add it to: // isSystem() diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index fab81a4..52d6cbe 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -43,6 +43,7 @@ import android.util.AttributeSet; import android.util.Log; import android.util.Pools.SynchronizedPool; import android.util.SparseArray; +import android.util.SparseBooleanArray; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.Animation; @@ -2902,13 +2903,58 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final int childrenCount = getChildCount(); if (childrenCount > 0) { structure.setChildCount(childrenCount); - final ArrayList<View> preorderedList = buildOrderedChildList(); - final boolean customOrder = preorderedList == null + ArrayList<View> preorderedList = buildOrderedChildList(); + boolean customOrder = preorderedList == null && isChildrenDrawingOrderEnabled(); final View[] children = mChildren; for (int i=0; i<childrenCount; i++) { - final int childIndex = customOrder - ? getChildDrawingOrder(childrenCount, i) : i; + int childIndex; + try { + childIndex = customOrder ? getChildDrawingOrder(childrenCount, i) : i; + } catch (IndexOutOfBoundsException e) { + childIndex = i; + if (mContext.getApplicationInfo().targetSdkVersion + < Build.VERSION_CODES.M) { + Log.w(TAG, "Bad getChildDrawingOrder while collecting assist @ " + + i + " of " + childrenCount, e); + // At least one app is failing when we call getChildDrawingOrder + // at this point, so deal semi-gracefully with it by falling back + // on the basic order. + customOrder = false; + if (i > 0) { + // If we failed at the first index, there really isn't + // anything to do -- we will just proceed with the simple + // sequence order. + // Otherwise, we failed in the middle, so need to come up + // with an order for the remaining indices and use that. + // Failed at the first one, easy peasy. + int[] permutation = new int[childrenCount]; + SparseBooleanArray usedIndices = new SparseBooleanArray(); + // Go back and collected the indices we have done so far. + for (int j=0; j<i; j++) { + permutation[j] = getChildDrawingOrder(childrenCount, j); + usedIndices.put(permutation[j], true); + } + // Fill in the remaining indices with indices that have not + // yet been used. + int nextIndex = 0; + for (int j=i; j<childrenCount; j++) { + while (usedIndices.get(nextIndex, false)) { + nextIndex++; + } + permutation[j] = nextIndex; + nextIndex++; + } + // Build the final view list. + preorderedList = new ArrayList<>(childrenCount); + for (int j=0; j<childrenCount; j++) { + preorderedList.add(children[permutation[j]]); + } + } + } else { + throw e; + } + } final View child = (preorderedList == null) ? children[childIndex] : preorderedList.get(childIndex); ViewStructure cstructure = structure.newChild(i); diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 1f47ce3..699e113 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2575,7 +2575,7 @@ <permission android:name="android.permission.QUERY_DO_NOT_ASK_CREDENTIALS_ON_BOOT" android:protectionLevel="signature" /> - <!-- @SystemApi Allows applications to kill UIDs. + <!-- Allows applications to kill UIDs. <p>Not for use by third-party applications. @hide --> <permission android:name="android.permission.KILL_UID" diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index b1925ba..67abe8d 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -1806,6 +1806,10 @@ i <enum name="KEYCODE_NAVIGATE_NEXT" value="261" /> <enum name="KEYCODE_NAVIGATE_IN" value="262" /> <enum name="KEYCODE_NAVIGATE_OUT" value="263" /> + <enum name="KEYCODE_MEDIA_SKIP_FORWARD" value="272" /> + <enum name="KEYCODE_MEDIA_SKIP_BACKWARD" value="273" /> + <enum name="KEYCODE_MEDIA_STEP_FORWARD" value="274" /> + <enum name="KEYCODE_MEDIA_STEP_BACKWARD" value="275" /> </attr> <!-- ***************************************************************** --> 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 6c0deb0..efd72a7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -603,7 +603,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, // Lastly, call to the icon policy to install/update all the icons. mIconPolicy = new PhoneStatusBarPolicy(mContext, mCastController, mHotspotController, - mUserInfoController); + mUserInfoController, mBluetoothController); mIconPolicy.setCurrentUserSetup(mUserSetup); mSettingsObserver.onChange(false); // set up diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index 53dae5c..540b9d0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -21,7 +21,6 @@ import android.app.AlarmManager; import android.app.AlarmManager.AlarmClockInfo; import android.app.IUserSwitchObserver; import android.app.StatusBarManager; -import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -41,6 +40,8 @@ import com.android.internal.telephony.IccCardConstants; import com.android.internal.telephony.TelephonyIntents; import com.android.systemui.R; import com.android.systemui.qs.tiles.DndTile; +import com.android.systemui.statusbar.policy.BluetoothController; +import com.android.systemui.statusbar.policy.BluetoothController.Callback; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; @@ -51,7 +52,7 @@ import com.android.systemui.statusbar.policy.UserInfoController; * bar at boot time. It goes through the normal API for icons, even though it probably * strictly doesn't need to. */ -public class PhoneStatusBarPolicy { +public class PhoneStatusBarPolicy implements Callback { private static final String TAG = "PhoneStatusBarPolicy"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @@ -82,12 +83,11 @@ public class PhoneStatusBarPolicy { private int mZen; - private boolean mBluetoothEnabled = false; - private boolean mManagedProfileFocused = false; private boolean mManagedProfileIconVisible = true; private boolean mKeyguardVisible = true; + private BluetoothController mBluetooth; private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @Override @@ -96,10 +96,6 @@ public class PhoneStatusBarPolicy { if (action.equals(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED)) { updateAlarm(); } - else if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED) || - action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) { - updateBluetooth(); - } else if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION) || action.equals(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION)) { updateVolumeZen(); @@ -114,10 +110,12 @@ public class PhoneStatusBarPolicy { }; public PhoneStatusBarPolicy(Context context, CastController cast, HotspotController hotspot, - UserInfoController userInfoController) { + UserInfoController userInfoController, BluetoothController bluetooth) { mContext = context; mCast = cast; mHotspot = hotspot; + mBluetooth = bluetooth; + mBluetooth.addStateChangedCallback(this); mService = (StatusBarManager) context.getSystemService(Context.STATUS_BAR_SERVICE); mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); mUserInfoController = userInfoController; @@ -127,8 +125,6 @@ public class PhoneStatusBarPolicy { filter.addAction(AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED); filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION); filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION); - filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); - filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED); filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED); filter.addAction(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED); mContext.registerReceiver(mIntentReceiver, filter, null, mHandler); @@ -275,23 +271,31 @@ public class PhoneStatusBarPolicy { updateAlarm(); } + @Override + public void onBluetoothDevicesChanged() { + updateBluetooth(); + } + + @Override + public void onBluetoothStateChange(boolean enabled) { + updateBluetooth(); + } + private final void updateBluetooth() { - BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); int iconId = R.drawable.stat_sys_data_bluetooth; String contentDescription = mContext.getString(R.string.accessibility_quick_settings_bluetooth_on); - if (adapter != null) { - mBluetoothEnabled = (adapter.getState() == BluetoothAdapter.STATE_ON); - if (adapter.getConnectionState() == BluetoothAdapter.STATE_CONNECTED) { + boolean bluetoothEnabled = false; + if (mBluetooth != null) { + bluetoothEnabled = mBluetooth.isBluetoothEnabled(); + if (mBluetooth.isBluetoothConnected()) { iconId = R.drawable.stat_sys_data_bluetooth_connected; contentDescription = mContext.getString(R.string.accessibility_bluetooth_connected); } - } else { - mBluetoothEnabled = false; } mService.setIcon(SLOT_BLUETOOTH, iconId, 0, contentDescription); - mService.setIconVisibility(SLOT_BLUETOOTH, mBluetoothEnabled); + mService.setIconVisibility(SLOT_BLUETOOTH, bluetoothEnabled); } private final void updateTTY(Intent intent) { diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 39e3b46..3d523d9 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -5521,7 +5521,7 @@ public final class ActivityManagerService extends ActivityManagerNative // If no package is specified, we call all processes under the // give user id. if (packageName == null) { - if (app.userId != userId) { + if (userId != UserHandle.USER_ALL && app.userId != userId) { continue; } if (appId >= 0 && UserHandle.getAppId(app.uid) != appId) { @@ -11226,13 +11226,12 @@ public final class ActivityManagerService extends ActivityManagerNative } @Override - public void killUid(int uid, String reason) { + public void killUid(int appId, int userId, String reason) { enforceCallingPermission(Manifest.permission.KILL_UID, "killUid"); synchronized (this) { final long identity = Binder.clearCallingIdentity(); try { - killPackageProcessesLocked(null, UserHandle.getAppId(uid), - UserHandle.getUserId(uid), + killPackageProcessesLocked(null, appId, userId, ProcessList.PERSISTENT_PROC_ADJ, false, true, true, true, reason != null ? reason : "kill uid"); } finally { diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index a0ededf..7565e9d 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -5150,7 +5150,9 @@ public class AudioService extends IAudioService.Stub { continue; } try { - ActivityManagerNative.getDefault().killUid(pkg.applicationInfo.uid, + final int uid = pkg.applicationInfo.uid; + ActivityManagerNative.getDefault().killUid(UserHandle.getAppId(uid), + UserHandle.getUserId(uid), "killBackgroundUserProcessesWithAudioRecordPermission"); } catch (RemoteException e) { Log.w(TAG, "Error calling killUid", e); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 473be56..ce40c28 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3469,10 +3469,11 @@ public class PackageManagerService extends IPackageManager.Stub { } case PermissionsState.PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED: { + final int appId = UserHandle.getAppId(pkg.applicationInfo.uid); mHandler.post(new Runnable() { @Override public void run() { - killSettingPackagesForUser(sb, userId, KILL_APP_REASON_GIDS_CHANGED); + killUid(appId, userId, KILL_APP_REASON_GIDS_CHANGED); } }); } break; @@ -3516,7 +3517,7 @@ public class PackageManagerService extends IPackageManager.Stub { enforceCrossUserPermission(Binder.getCallingUid(), userId, true, false, "revokeRuntimePermission"); - final SettingBase sb; + final int appId; synchronized (mPackages) { final PackageParser.Package pkg = mPackages.get(packageName); @@ -3531,7 +3532,7 @@ public class PackageManagerService extends IPackageManager.Stub { enforceDeclaredAsUsedAndRuntimePermission(pkg, bp); - sb = (SettingBase) pkg.mExtras; + SettingBase sb = (SettingBase) pkg.mExtras; if (sb == null) { throw new IllegalArgumentException("Unknown package: " + packageName); } @@ -3553,9 +3554,11 @@ public class PackageManagerService extends IPackageManager.Stub { // Critical, after this call app should never have the permission. mSettings.writeRuntimePermissionsForUserLPr(userId, true); + + appId = UserHandle.getAppId(pkg.applicationInfo.uid); } - killSettingPackagesForUser(sb, userId, KILL_APP_REASON_PERMISSIONS_REVOKED); + killUid(appId, userId, KILL_APP_REASON_PERMISSIONS_REVOKED); } @Override @@ -3859,28 +3862,15 @@ public class PackageManagerService extends IPackageManager.Stub { } } - private void killSettingPackagesForUser(SettingBase sb, int userId, String reason) { + private void killUid(int appId, int userId, String reason) { final long identity = Binder.clearCallingIdentity(); try { - if (sb instanceof SharedUserSetting) { - SharedUserSetting sus = (SharedUserSetting) sb; - final int packageCount = sus.packages.size(); - for (int i = 0; i < packageCount; i++) { - PackageSetting susPs = sus.packages.valueAt(i); - if (userId == UserHandle.USER_ALL) { - killApplication(susPs.pkg.packageName, susPs.appId, reason); - } else { - final int uid = UserHandle.getUid(userId, susPs.appId); - killUid(uid, reason); - } - } - } else if (sb instanceof PackageSetting) { - PackageSetting ps = (PackageSetting) sb; - if (userId == UserHandle.USER_ALL) { - killApplication(ps.pkg.packageName, ps.appId, reason); - } else { - final int uid = UserHandle.getUid(userId, ps.appId); - killUid(uid, reason); + IActivityManager am = ActivityManagerNative.getDefault(); + if (am != null) { + try { + am.killUid(appId, userId, reason); + } catch (RemoteException e) { + /* ignore - same process */ } } } finally { @@ -3888,17 +3878,6 @@ public class PackageManagerService extends IPackageManager.Stub { } } - private static void killUid(int uid, String reason) { - IActivityManager am = ActivityManagerNative.getDefault(); - if (am != null) { - try { - am.killUid(uid, reason); - } catch (RemoteException e) { - /* ignore - same process */ - } - } - } - /** * Compares two sets of signatures. Returns: * <br /> @@ -12821,7 +12800,7 @@ public class PackageManagerService extends IPackageManager.Stub { @Override public void run() { // This has to happen with no lock held. - killSettingPackagesForUser(deletedPs, userIdToKill, + killApplication(deletedPs.name, deletedPs.appId, KILL_APP_REASON_GIDS_CHANGED); } }); @@ -13407,13 +13386,11 @@ public class PackageManagerService extends IPackageManager.Stub { case PERMISSION_OPERATION_SUCCESS_GIDS_CHANGED: { writeRuntimePermissions = true; - // If gids changed for this user, kill all affected packages. + final int appId = ps.appId; mHandler.post(new Runnable() { @Override public void run() { - // This has to happen with no lock held. - killSettingPackagesForUser(ps, userId, - KILL_APP_REASON_GIDS_CHANGED); + killUid(appId, userId, KILL_APP_REASON_GIDS_CHANGED); } }); } break; |