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

Commit f1817f97 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android Git Automerger
Browse files

am c283140f: am edc3f3f3: am b52b6bf1: Merge "Fix issue #7295951: Mako asks...

am c283140f: am edc3f3f3: am b52b6bf1: Merge "Fix issue #7295951: Mako asks which Launcher to use at every re-boot" into jb-mr1-dev

* commit 'c283140f':
  Fix issue #7295951: Mako asks which Launcher to use at every re-boot
parents 08e255c9 c283140f
Loading
Loading
Loading
Loading
+108 −99
Original line number Original line Diff line number Diff line
@@ -1300,27 +1300,6 @@ public class PackageManagerService extends IPackageManager.Stub {
                            ? (UPDATE_PERMISSIONS_REPLACE_PKG|UPDATE_PERMISSIONS_REPLACE_ALL)
                            ? (UPDATE_PERMISSIONS_REPLACE_PKG|UPDATE_PERMISSIONS_REPLACE_ALL)
                            : 0));
                            : 0));


            // Verify that all of the preferred activity components actually
            // exist.  It is possible for applications to be updated and at
            // that point remove a previously declared activity component that
            // had been set as a preferred activity.  We try to clean this up
            // the next time we encounter that preferred activity, but it is
            // possible for the user flow to never be able to return to that
            // situation so here we do a sanity check to make sure we haven't
            // left any junk around.
            ArrayList<PreferredActivity> removed = new ArrayList<PreferredActivity>();
            for (PreferredActivity pa : mSettings.mPreferredActivities.filterSet()) {
                if (mActivities.mActivities.get(pa.mPref.mComponent) == null) {
                    removed.add(pa);
                }
            }
            for (int i=0; i<removed.size(); i++) {
                PreferredActivity pa = removed.get(i);
                Slog.w(TAG, "Removing dangling preferred activity: "
                        + pa.mPref.mComponent);
                mSettings.mPreferredActivities.removeFilter(pa);
            }

            // can downgrade to reader
            // can downgrade to reader
            mSettings.writeLPr();
            mSettings.writeLPr();


@@ -2504,9 +2483,11 @@ public class PackageManagerService extends IPackageManager.Stub {
                intent = intent.getSelector(); 
                intent = intent.getSelector(); 
            }
            }
            if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
            if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
            List<PreferredActivity> prefs =
            PreferredIntentResolver pir = mSettings.mPreferredActivities.get(userId);
                    mSettings.mPreferredActivities.queryIntent(intent, resolvedType,
            List<PreferredActivity> prefs = pir != null
                            (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0, userId);
                    ? pir.queryIntent(intent, resolvedType,
                            (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0, userId)
                    : null;
            if (prefs != null && prefs.size() > 0) {
            if (prefs != null && prefs.size() > 0) {
                // First figure out how good the original match set is.
                // First figure out how good the original match set is.
                // We will only allow preferred activities that came
                // We will only allow preferred activities that came
@@ -2537,9 +2518,6 @@ public class PackageManagerService extends IPackageManager.Stub {
                final int M = prefs.size();
                final int M = prefs.size();
                for (int i=0; i<M; i++) {
                for (int i=0; i<M; i++) {
                    final PreferredActivity pa = prefs.get(i);
                    final PreferredActivity pa = prefs.get(i);
                    if (pa.mUserId != userId) {
                        continue;
                    }
                    if (pa.mPref.mMatch != match) {
                    if (pa.mPref.mMatch != match) {
                        continue;
                        continue;
                    }
                    }
@@ -2560,7 +2538,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                        // it from the preferred activities list, and skip it.
                        // it from the preferred activities list, and skip it.
                        Slog.w(TAG, "Removing dangling preferred activity: "
                        Slog.w(TAG, "Removing dangling preferred activity: "
                                + pa.mPref.mComponent);
                                + pa.mPref.mComponent);
                        mSettings.mPreferredActivities.removeFilter(pa);
                        pir.removeFilter(pa);
                        continue;
                        continue;
                    }
                    }
                    for (int j=0; j<N; j++) {
                    for (int j=0; j<N; j++) {
@@ -2580,7 +2558,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                        if (!pa.mPref.sameSet(query, priority)) {
                        if (!pa.mPref.sameSet(query, priority)) {
                            Slog.i(TAG, "Result set changed, dropping preferred activity for "
                            Slog.i(TAG, "Result set changed, dropping preferred activity for "
                                    + intent + " type " + resolvedType);
                                    + intent + " type " + resolvedType);
                            mSettings.mPreferredActivities.removeFilter(pa);
                            pir.removeFilter(pa);
                            return null;
                            return null;
                        }
                        }


@@ -8682,9 +8660,9 @@ public class PackageManagerService extends IPackageManager.Stub {


            Slog.i(TAG, "Adding preferred activity " + activity + " for user " + userId + " :");
            Slog.i(TAG, "Adding preferred activity " + activity + " for user " + userId + " :");
            filter.dump(new LogPrinter(Log.INFO, TAG), "  ");
            filter.dump(new LogPrinter(Log.INFO, TAG), "  ");
            mSettings.mPreferredActivities.addFilter(
            mSettings.editPreferredActivitiesLPw(userId).addFilter(
                    new PreferredActivity(filter, match, set, activity, userId));
                    new PreferredActivity(filter, match, set, activity));
            scheduleWriteSettingsLocked();            
            mSettings.writePackageRestrictionsLPr(userId);
        }
        }
    }
    }


@@ -8722,12 +8700,13 @@ public class PackageManagerService extends IPackageManager.Stub {


            final int callingUserId = UserHandle.getCallingUserId();
            final int callingUserId = UserHandle.getCallingUserId();
            ArrayList<PreferredActivity> removed = null;
            ArrayList<PreferredActivity> removed = null;
            Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator();
            PreferredIntentResolver pir = mSettings.mPreferredActivities.get(callingUserId);
            if (pir != null) {
                Iterator<PreferredActivity> it = pir.filterIterator();
                String action = filter.getAction(0);
                String action = filter.getAction(0);
                String category = filter.getCategory(0);
                String category = filter.getCategory(0);
                while (it.hasNext()) {
                while (it.hasNext()) {
                    PreferredActivity pa = it.next();
                    PreferredActivity pa = it.next();
                if (pa.mUserId != callingUserId) continue;
                    if (pa.getAction(0).equals(action) && pa.getCategory(0).equals(category)) {
                    if (pa.getAction(0).equals(action) && pa.getCategory(0).equals(category)) {
                        if (removed == null) {
                        if (removed == null) {
                            removed = new ArrayList<PreferredActivity>();
                            removed = new ArrayList<PreferredActivity>();
@@ -8740,7 +8719,8 @@ public class PackageManagerService extends IPackageManager.Stub {
                if (removed != null) {
                if (removed != null) {
                    for (int i=0; i<removed.size(); i++) {
                    for (int i=0; i<removed.size(); i++) {
                        PreferredActivity pa = removed.get(i);
                        PreferredActivity pa = removed.get(i);
                    mSettings.mPreferredActivities.removeFilter(pa);
                        pir.removeFilter(pa);
                    }
                }
                }
            }
            }
            addPreferredActivity(filter, match, set, activity, callingUserId);
            addPreferredActivity(filter, match, set, activity, callingUserId);
@@ -8776,12 +8756,16 @@ public class PackageManagerService extends IPackageManager.Stub {
    /** This method takes a specific user id as well as UserHandle.USER_ALL. */
    /** This method takes a specific user id as well as UserHandle.USER_ALL. */
    boolean clearPackagePreferredActivitiesLPw(String packageName, int userId) {
    boolean clearPackagePreferredActivitiesLPw(String packageName, int userId) {
        ArrayList<PreferredActivity> removed = null;
        ArrayList<PreferredActivity> removed = null;
        Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator();
        boolean changed = false;
        while (it.hasNext()) {
        for (int i=0; i<mSettings.mPreferredActivities.size(); i++) {
            PreferredActivity pa = it.next();
            final int thisUserId = mSettings.mPreferredActivities.keyAt(i);
            if (userId != UserHandle.USER_ALL && pa.mUserId != userId) {
            PreferredIntentResolver pir = mSettings.mPreferredActivities.valueAt(i);
            if (userId != UserHandle.USER_ALL && userId != thisUserId) {
                continue;
                continue;
            }
            }
            Iterator<PreferredActivity> it = pir.filterIterator();
            while (it.hasNext()) {
                PreferredActivity pa = it.next();
                if (pa.mPref.mComponent.getPackageName().equals(packageName)) {
                if (pa.mPref.mComponent.getPackageName().equals(packageName)) {
                    if (removed == null) {
                    if (removed == null) {
                        removed = new ArrayList<PreferredActivity>();
                        removed = new ArrayList<PreferredActivity>();
@@ -8790,13 +8774,15 @@ public class PackageManagerService extends IPackageManager.Stub {
                }
                }
            }
            }
            if (removed != null) {
            if (removed != null) {
            for (int i=0; i<removed.size(); i++) {
                for (int j=0; j<removed.size(); j++) {
                PreferredActivity pa = removed.get(i);
                    PreferredActivity pa = removed.get(j);
                mSettings.mPreferredActivities.removeFilter(pa);
                    pir.removeFilter(pa);
                }
                }
            return true;
                changed = true;
                mSettings.writePackageRestrictionsLPr(thisUserId);
            }
            }
        return false;
        }
        return changed;
    }
    }


    public int getPreferredActivities(List<IntentFilter> outFilters,
    public int getPreferredActivities(List<IntentFilter> outFilters,
@@ -8806,12 +8792,11 @@ public class PackageManagerService extends IPackageManager.Stub {
        final int userId = UserHandle.getCallingUserId();
        final int userId = UserHandle.getCallingUserId();
        // reader
        // reader
        synchronized (mPackages) {
        synchronized (mPackages) {
            final Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator();
            PreferredIntentResolver pir = mSettings.mPreferredActivities.get(userId);
            if (pir != null) {
                final Iterator<PreferredActivity> it = pir.filterIterator();
                while (it.hasNext()) {
                while (it.hasNext()) {
                    final PreferredActivity pa = it.next();
                    final PreferredActivity pa = it.next();
                if (pa.mUserId != userId) {
                    continue;
                }
                    if (packageName == null
                    if (packageName == null
                            || pa.mPref.mComponent.getPackageName().equals(packageName)) {
                            || pa.mPref.mComponent.getPackageName().equals(packageName)) {
                        if (outFilters != null) {
                        if (outFilters != null) {
@@ -8823,6 +8808,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    }
                    }
                }
                }
            }
            }
        }


        return num;
        return num;
    }
    }
@@ -9041,6 +9027,39 @@ public class PackageManagerService extends IPackageManager.Stub {
        if (DEBUG_SETTINGS) {
        if (DEBUG_SETTINGS) {
            Log.d(TAG, "compatibility mode:" + compatibilityModeEnabled);
            Log.d(TAG, "compatibility mode:" + compatibilityModeEnabled);
        }
        }

        synchronized (mPackages) {
            // Verify that all of the preferred activity components actually
            // exist.  It is possible for applications to be updated and at
            // that point remove a previously declared activity component that
            // had been set as a preferred activity.  We try to clean this up
            // the next time we encounter that preferred activity, but it is
            // possible for the user flow to never be able to return to that
            // situation so here we do a sanity check to make sure we haven't
            // left any junk around.
            ArrayList<PreferredActivity> removed = new ArrayList<PreferredActivity>();
            for (int i=0; i<mSettings.mPreferredActivities.size(); i++) {
                PreferredIntentResolver pir = mSettings.mPreferredActivities.valueAt(i);
                removed.clear();
                for (PreferredActivity pa : pir.filterSet()) {
                    if (mActivities.mActivities.get(pa.mPref.mComponent) == null) {
                        removed.add(pa);
                    }
                }
                if (removed.size() > 0) {
                    for (int j=0; j<removed.size(); j++) {
                        PreferredActivity pa = removed.get(i);
                        RuntimeException here = new RuntimeException("here");
                        here.fillInStackTrace();
                        Slog.w(TAG, "Removing dangling preferred activity: "
                                + pa.mPref.mComponent, here);
                        pir.removeFilter(pa);
                    }
                    mSettings.writePackageRestrictionsLPr(
                            mSettings.mPreferredActivities.keyAt(i));
                }
            }
        }
    }
    }


    public boolean isSafeMode() {
    public boolean isSafeMode() {
@@ -9281,13 +9300,18 @@ public class PackageManagerService extends IPackageManager.Stub {
            }
            }


            if (dumpState.isDumping(DumpState.DUMP_PREFERRED)) {
            if (dumpState.isDumping(DumpState.DUMP_PREFERRED)) {
                if (mSettings.mPreferredActivities.dump(pw,
                for (int i=0; i<mSettings.mPreferredActivities.size(); i++) {
                        dumpState.getTitlePrinted() ? "\nPreferred Activities:"
                    PreferredIntentResolver pir = mSettings.mPreferredActivities.valueAt(i);
                            : "Preferred Activities:", "  ",
                    int user = mSettings.mPreferredActivities.keyAt(i);
                    if (pir.dump(pw,
                            dumpState.getTitlePrinted()
                                ? "\nPreferred Activities User " + user + ":"
                                : "Preferred Activities User " + user + ":", "  ",
                            packageName, dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) {
                            packageName, dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) {
                        dumpState.setTitlePrinted(true);
                        dumpState.setTitlePrinted(true);
                    }
                    }
                }
                }
            }


            if (dumpState.isDumping(DumpState.DUMP_PREFERRED_XML)) {
            if (dumpState.isDumping(DumpState.DUMP_PREFERRED_XML)) {
                pw.flush();
                pw.flush();
@@ -9299,7 +9323,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                    serializer.startDocument(null, true);
                    serializer.startDocument(null, true);
                    serializer.setFeature(
                    serializer.setFeature(
                            "http://xmlpull.org/v1/doc/features.html#indent-output", true);
                            "http://xmlpull.org/v1/doc/features.html#indent-output", true);
                    mSettings.writePreferredActivitiesLPr(serializer);
                    mSettings.writePreferredActivitiesLPr(serializer, 0);
                    serializer.endDocument();
                    serializer.endDocument();
                    serializer.flush();
                    serializer.flush();
                } catch (IllegalArgumentException e) {
                } catch (IllegalArgumentException e) {
@@ -10045,11 +10069,6 @@ public class PackageManagerService extends IPackageManager.Stub {


    /** Called by UserManagerService */
    /** Called by UserManagerService */
    void cleanUpUserLILPw(int userHandle) {
    void cleanUpUserLILPw(int userHandle) {
        // Disable all the packages for the user first
        Set<Entry<String, PackageSetting>> entries = mSettings.mPackages.entrySet();
        for (Entry<String, PackageSetting> entry : entries) {
            entry.getValue().removeUser(userHandle);
        }
        if (mDirtyUsers.remove(userHandle));
        if (mDirtyUsers.remove(userHandle));
        mSettings.removeUserLPr(userHandle);
        mSettings.removeUserLPr(userHandle);
        if (mInstaller != null) {
        if (mInstaller != null) {
@@ -10063,17 +10082,7 @@ public class PackageManagerService extends IPackageManager.Stub {
    /** Called by UserManagerService */
    /** Called by UserManagerService */
    void createNewUserLILPw(int userHandle, File path) {
    void createNewUserLILPw(int userHandle, File path) {
        if (mInstaller != null) {
        if (mInstaller != null) {
            path.mkdir();
            mSettings.createNewUserLILPw(mInstaller, userHandle, path);
            FileUtils.setPermissions(path.toString(), FileUtils.S_IRWXU | FileUtils.S_IRWXG
                    | FileUtils.S_IXOTH, -1, -1);
            for (PackageSetting ps : mSettings.mPackages.values()) {
                // Only system apps are initially installed.
                ps.setInstalled((ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0, userHandle);
                // Need to create a data directory for all apps under this user.
                mInstaller.createUserData(ps.name,
                        UserHandle.getUid(userHandle, ps.appId), userHandle);
            }
            mSettings.writePackageRestrictionsLPr(userHandle);
        }
        }
    }
    }


+0 −15
Original line number Original line Diff line number Diff line
@@ -36,32 +36,17 @@ class PreferredActivity extends IntentFilter implements PreferredComponent.Callb
    static final String ATTR_USER_ID = "userId";
    static final String ATTR_USER_ID = "userId";


    final PreferredComponent mPref;
    final PreferredComponent mPref;
    final int mUserId;


    PreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) {
    PreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) {
        this(filter, match, set, activity, 0);
    }

    PreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity,
            int userId) {
        super(filter);
        super(filter);
        mUserId = userId;
        mPref = new PreferredComponent(this, match, set, activity);
        mPref = new PreferredComponent(this, match, set, activity);
    }
    }


    PreferredActivity(XmlPullParser parser) throws XmlPullParserException, IOException {
    PreferredActivity(XmlPullParser parser) throws XmlPullParserException, IOException {
        String userIdString = parser.getAttributeValue(null, ATTR_USER_ID);
        if (userIdString != null && userIdString.length() > 0) {
            mUserId = Integer.parseInt(userIdString);
        } else {
            // Old format with no userId specified - assume primary user
            mUserId = 0;
        }
        mPref = new PreferredComponent(this, parser);
        mPref = new PreferredComponent(this, parser);
    }
    }


    public void writeToXml(XmlSerializer serializer) throws IOException {
    public void writeToXml(XmlSerializer serializer) throws IOException {
        serializer.attribute(null, ATTR_USER_ID, Integer.toString(mUserId));
        mPref.writeToXml(serializer);
        mPref.writeToXml(serializer);
        serializer.startTag(null, "filter");
        serializer.startTag(null, "filter");
            super.writeToXml(serializer);
            super.writeToXml(serializer);
+38 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2012 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.
 */

package com.android.server.pm;

import java.io.PrintWriter;

import com.android.server.IntentResolver;

public class PreferredIntentResolver
        extends IntentResolver<PreferredActivity, PreferredActivity> {
    @Override
    protected PreferredActivity[] newArray(int size) {
        return new PreferredActivity[size];
    }
    @Override
    protected String packageForFilter(PreferredActivity filter) {
        return filter.mPref.mComponent.getPackageName();
    }
    @Override
    protected void dumpFilter(PrintWriter out, String prefix,
            PreferredActivity filter) {
        filter.mPref.dump(out, prefix, filter);
    }
}
+84 −59

File changed.

Preview size limit exceeded, changes collapsed.