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

Commit 56f4a672 authored by Amith Yamasani's avatar Amith Yamasani Committed by Android Git Automerger
Browse files

am 539d2b56: am 7fdaa397: Merge "Save preferred activity info with user id." into jb-mr1-dev

* commit '539d2b56':
  Save preferred activity info with user id.
parents 3e59f3fc 539d2b56
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