Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7fdaa397 authored by Amith Yamasani's avatar Amith Yamasani Committed by Android (Google) Code Review
Browse files

Merge "Save preferred activity info with user id." into jb-mr1-dev

parents 029675e5 a3f133af
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -1106,7 +1106,17 @@ final class ApplicationPackageManager extends PackageManager {
    public void addPreferredActivity(IntentFilter filter,
                                     int match, ComponentName[] set, ComponentName activity) {
        try {
            mPM.addPreferredActivity(filter, match, set, activity);
            mPM.addPreferredActivity(filter, match, set, activity, UserHandle.myUserId());
        } catch (RemoteException e) {
            // Should never happen!
        }
    }

    @Override
    public void addPreferredActivity(IntentFilter filter, int match,
            ComponentName[] set, ComponentName activity, int userId) {
        try {
            mPM.addPreferredActivity(filter, match, set, activity, userId);
        } catch (RemoteException e) {
            // Should never happen!
        }
+1 −1
Original line number Diff line number Diff line
@@ -200,7 +200,7 @@ interface IPackageManager {
    List<PackageInfo> getPreferredPackages(int flags);

    void addPreferredActivity(in IntentFilter filter, int match,
            in ComponentName[] set, in ComponentName activity);
            in ComponentName[] set, in ComponentName activity, int userId);

    void replacePreferredActivity(in IntentFilter filter, int match,
            in ComponentName[] set, in ComponentName activity);
+11 −0
Original line number Diff line number Diff line
@@ -2459,6 +2459,17 @@ public abstract class PackageManager {
    public abstract void addPreferredActivity(IntentFilter filter, int match,
            ComponentName[] set, ComponentName activity);

    /**
     * Same as {@link #addPreferredActivity(IntentFilter, int,
            ComponentName[], ComponentName)}, but with a specific userId to apply the preference
            to.
     * @hide
     */
    public void addPreferredActivity(IntentFilter filter, int match,
            ComponentName[] set, ComponentName activity, int userId) {
        throw new RuntimeException("Not implemented. Must override in a subclass.");
    }

    /**
     * @deprecated This is a protected API that should not have been available
     * to third party applications.  It is the platform's responsibility for
+5 −4
Original line number Diff line number Diff line
@@ -150,7 +150,8 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte

            resizeGrid();
        } else if (count == 1) {
            startActivity(mAdapter.intentForPosition(0));
            startActivityAsUser(mAdapter.intentForPosition(0),
                    UserHandle.getUserId(mLaunchedFromUid));
            mPackageMonitor.unregister();
            mRegistered = false;
            finish();
@@ -363,12 +364,12 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
                    if (r.match > bestMatch) bestMatch = r.match;
                }
                getPackageManager().addPreferredActivity(filter, bestMatch, set,
                        intent.getComponent());
                        intent.getComponent(), UserHandle.getUserId(mLaunchedFromUid));
            }
        }

        if (intent != null) {
            startActivity(intent);
            startActivityAsUser(intent, UserHandle.getUserId(mLaunchedFromUid));
        }
    }

@@ -376,7 +377,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
        Intent in = new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
                .setData(Uri.fromParts("package", ri.activityInfo.packageName, null))
                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        startActivity(in);
        startActivityAsUser(in, UserHandle.getUserId(mLaunchedFromUid));
    }

    private final class DisplayResolveInfo {
+26 −11
Original line number Diff line number Diff line
@@ -2422,6 +2422,9 @@ public class PackageManagerService extends IPackageManager.Stub {
                final int M = prefs.size();
                for (int i=0; i<M; i++) {
                    final PreferredActivity pa = prefs.get(i);
                    if (pa.mUserId != userId) {
                        continue;
                    }
                    if (pa.mPref.mMatch != match) {
                        continue;
                    }
@@ -7645,7 +7648,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                            mSettings.updateSharedUserPermsLPw(deletedPs, mGlobalGids);
                        }
                    }
                    clearPackagePreferredActivitiesLPw(deletedPs.name);
                    clearPackagePreferredActivitiesLPw(deletedPs.name, UserHandle.USER_ALL);
                }
            }
            // can downgrade to reader
@@ -8112,26 +8115,28 @@ public class PackageManagerService extends IPackageManager.Stub {
    }
    
    public void addPreferredActivity(IntentFilter filter, int match,
            ComponentName[] set, ComponentName activity) {
            ComponentName[] set, ComponentName activity, int userId) {
        // writer
        int callingUid = Binder.getCallingUid();
        checkValidCaller(callingUid, userId);
        synchronized (mPackages) {
            if (mContext.checkCallingOrSelfPermission(
                    android.Manifest.permission.SET_PREFERRED_APPLICATIONS)
                    != PackageManager.PERMISSION_GRANTED) {
                if (getUidTargetSdkVersionLockedLPr(Binder.getCallingUid())
                if (getUidTargetSdkVersionLockedLPr(callingUid)
                        < Build.VERSION_CODES.FROYO) {
                    Slog.w(TAG, "Ignoring addPreferredActivity() from uid "
                            + Binder.getCallingUid());
                            + callingUid);
                    return;
                }
                mContext.enforceCallingOrSelfPermission(
                        android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
            }

            Slog.i(TAG, "Adding preferred activity " + activity + ":");
            Slog.i(TAG, "Adding preferred activity " + activity + " for user " + userId + " :");
            filter.dump(new LogPrinter(Log.INFO, TAG), "  ");
            mSettings.mPreferredActivities.addFilter(
                    new PreferredActivity(filter, match, set, activity));
                    new PreferredActivity(filter, match, set, activity, userId));
            scheduleWriteSettingsLocked();            
        }
    }
@@ -8168,12 +8173,14 @@ public class PackageManagerService extends IPackageManager.Stub {
                        android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
            }

            final int callingUserId = UserHandle.getCallingUserId();
            ArrayList<PreferredActivity> removed = null;
            Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator();
            String action = filter.getAction(0);
            String category = filter.getCategory(0);
            while (it.hasNext()) {
                PreferredActivity pa = it.next();
                if (pa.mUserId != callingUserId) continue;
                if (pa.getAction(0).equals(action) && pa.getCategory(0).equals(category)) {
                    if (removed == null) {
                        removed = new ArrayList<PreferredActivity>();
@@ -8189,7 +8196,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    mSettings.mPreferredActivities.removeFilter(pa);
                }
            }
            addPreferredActivity(filter, match, set, activity);
            addPreferredActivity(filter, match, set, activity, callingUserId);
        }
    }

@@ -8213,17 +8220,21 @@ public class PackageManagerService extends IPackageManager.Stub {
                }
            }

            if (clearPackagePreferredActivitiesLPw(packageName)) {
            if (clearPackagePreferredActivitiesLPw(packageName, UserHandle.getCallingUserId())) {
                scheduleWriteSettingsLocked();            
            }
        }
    }

    boolean clearPackagePreferredActivitiesLPw(String packageName) {
    /** This method takes a specific user id as well as UserHandle.USER_ALL. */
    boolean clearPackagePreferredActivitiesLPw(String packageName, int userId) {
        ArrayList<PreferredActivity> removed = null;
        Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator();
        while (it.hasNext()) {
            PreferredActivity pa = it.next();
            if (userId != UserHandle.USER_ALL && pa.mUserId != userId) {
                continue;
            }
            if (pa.mPref.mComponent.getPackageName().equals(packageName)) {
                if (removed == null) {
                    removed = new ArrayList<PreferredActivity>();
@@ -8245,11 +8256,15 @@ public class PackageManagerService extends IPackageManager.Stub {
            List<ComponentName> outActivities, String packageName) {

        int num = 0;
        final int userId = UserHandle.getCallingUserId();
        // reader
        synchronized (mPackages) {
            final Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator();
            while (it.hasNext()) {
                final PreferredActivity pa = it.next();
                if (pa.mUserId != userId) {
                    continue;
                }
                if (packageName == null
                        || pa.mPref.mComponent.getPackageName().equals(packageName)) {
                    if (outFilters != null) {
Loading