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 'c283140f63c0bbe7b102177f076db0a42ebfc7b9': Fix issue #7295951: Mako asks which Launcher to use at every re-boot
This commit is contained in:
@@ -1300,27 +1300,6 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
? (UPDATE_PERMISSIONS_REPLACE_PKG|UPDATE_PERMISSIONS_REPLACE_ALL)
|
||||
: 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
|
||||
mSettings.writeLPr();
|
||||
|
||||
@@ -2504,9 +2483,11 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
intent = intent.getSelector();
|
||||
}
|
||||
if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
|
||||
List<PreferredActivity> prefs =
|
||||
mSettings.mPreferredActivities.queryIntent(intent, resolvedType,
|
||||
(flags & PackageManager.MATCH_DEFAULT_ONLY) != 0, userId);
|
||||
PreferredIntentResolver pir = mSettings.mPreferredActivities.get(userId);
|
||||
List<PreferredActivity> prefs = pir != null
|
||||
? pir.queryIntent(intent, resolvedType,
|
||||
(flags & PackageManager.MATCH_DEFAULT_ONLY) != 0, userId)
|
||||
: null;
|
||||
if (prefs != null && prefs.size() > 0) {
|
||||
// First figure out how good the original match set is.
|
||||
// We will only allow preferred activities that came
|
||||
@@ -2537,9 +2518,6 @@ 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;
|
||||
}
|
||||
@@ -2560,7 +2538,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
// it from the preferred activities list, and skip it.
|
||||
Slog.w(TAG, "Removing dangling preferred activity: "
|
||||
+ pa.mPref.mComponent);
|
||||
mSettings.mPreferredActivities.removeFilter(pa);
|
||||
pir.removeFilter(pa);
|
||||
continue;
|
||||
}
|
||||
for (int j=0; j<N; j++) {
|
||||
@@ -2580,7 +2558,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
if (!pa.mPref.sameSet(query, priority)) {
|
||||
Slog.i(TAG, "Result set changed, dropping preferred activity for "
|
||||
+ intent + " type " + resolvedType);
|
||||
mSettings.mPreferredActivities.removeFilter(pa);
|
||||
pir.removeFilter(pa);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -8682,9 +8660,9 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
|
||||
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, userId));
|
||||
scheduleWriteSettingsLocked();
|
||||
mSettings.editPreferredActivitiesLPw(userId).addFilter(
|
||||
new PreferredActivity(filter, match, set, activity));
|
||||
mSettings.writePackageRestrictionsLPr(userId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8722,25 +8700,27 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
|
||||
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>();
|
||||
PreferredIntentResolver pir = mSettings.mPreferredActivities.get(callingUserId);
|
||||
if (pir != null) {
|
||||
Iterator<PreferredActivity> it = pir.filterIterator();
|
||||
String action = filter.getAction(0);
|
||||
String category = filter.getCategory(0);
|
||||
while (it.hasNext()) {
|
||||
PreferredActivity pa = it.next();
|
||||
if (pa.getAction(0).equals(action) && pa.getCategory(0).equals(category)) {
|
||||
if (removed == null) {
|
||||
removed = new ArrayList<PreferredActivity>();
|
||||
}
|
||||
removed.add(pa);
|
||||
Log.i(TAG, "Removing preferred activity " + pa.mPref.mComponent + ":");
|
||||
filter.dump(new LogPrinter(Log.INFO, TAG), " ");
|
||||
}
|
||||
removed.add(pa);
|
||||
Log.i(TAG, "Removing preferred activity " + pa.mPref.mComponent + ":");
|
||||
filter.dump(new LogPrinter(Log.INFO, TAG), " ");
|
||||
}
|
||||
}
|
||||
if (removed != null) {
|
||||
for (int i=0; i<removed.size(); i++) {
|
||||
PreferredActivity pa = removed.get(i);
|
||||
mSettings.mPreferredActivities.removeFilter(pa);
|
||||
if (removed != null) {
|
||||
for (int i=0; i<removed.size(); i++) {
|
||||
PreferredActivity pa = removed.get(i);
|
||||
pir.removeFilter(pa);
|
||||
}
|
||||
}
|
||||
}
|
||||
addPreferredActivity(filter, match, set, activity, callingUserId);
|
||||
@@ -8776,27 +8756,33 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
/** 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) {
|
||||
boolean changed = false;
|
||||
for (int i=0; i<mSettings.mPreferredActivities.size(); i++) {
|
||||
final int thisUserId = mSettings.mPreferredActivities.keyAt(i);
|
||||
PreferredIntentResolver pir = mSettings.mPreferredActivities.valueAt(i);
|
||||
if (userId != UserHandle.USER_ALL && userId != thisUserId) {
|
||||
continue;
|
||||
}
|
||||
if (pa.mPref.mComponent.getPackageName().equals(packageName)) {
|
||||
if (removed == null) {
|
||||
removed = new ArrayList<PreferredActivity>();
|
||||
Iterator<PreferredActivity> it = pir.filterIterator();
|
||||
while (it.hasNext()) {
|
||||
PreferredActivity pa = it.next();
|
||||
if (pa.mPref.mComponent.getPackageName().equals(packageName)) {
|
||||
if (removed == null) {
|
||||
removed = new ArrayList<PreferredActivity>();
|
||||
}
|
||||
removed.add(pa);
|
||||
}
|
||||
removed.add(pa);
|
||||
}
|
||||
if (removed != null) {
|
||||
for (int j=0; j<removed.size(); j++) {
|
||||
PreferredActivity pa = removed.get(j);
|
||||
pir.removeFilter(pa);
|
||||
}
|
||||
changed = true;
|
||||
mSettings.writePackageRestrictionsLPr(thisUserId);
|
||||
}
|
||||
}
|
||||
if (removed != null) {
|
||||
for (int i=0; i<removed.size(); i++) {
|
||||
PreferredActivity pa = removed.get(i);
|
||||
mSettings.mPreferredActivities.removeFilter(pa);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return changed;
|
||||
}
|
||||
|
||||
public int getPreferredActivities(List<IntentFilter> outFilters,
|
||||
@@ -8806,19 +8792,19 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
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) {
|
||||
outFilters.add(new IntentFilter(pa));
|
||||
}
|
||||
if (outActivities != null) {
|
||||
outActivities.add(pa.mPref.mComponent);
|
||||
PreferredIntentResolver pir = mSettings.mPreferredActivities.get(userId);
|
||||
if (pir != null) {
|
||||
final Iterator<PreferredActivity> it = pir.filterIterator();
|
||||
while (it.hasNext()) {
|
||||
final PreferredActivity pa = it.next();
|
||||
if (packageName == null
|
||||
|| pa.mPref.mComponent.getPackageName().equals(packageName)) {
|
||||
if (outFilters != null) {
|
||||
outFilters.add(new IntentFilter(pa));
|
||||
}
|
||||
if (outActivities != null) {
|
||||
outActivities.add(pa.mPref.mComponent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9041,6 +9027,39 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
if (DEBUG_SETTINGS) {
|
||||
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() {
|
||||
@@ -9281,11 +9300,16 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_PREFERRED)) {
|
||||
if (mSettings.mPreferredActivities.dump(pw,
|
||||
dumpState.getTitlePrinted() ? "\nPreferred Activities:"
|
||||
: "Preferred Activities:", " ",
|
||||
packageName, dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) {
|
||||
dumpState.setTitlePrinted(true);
|
||||
for (int i=0; i<mSettings.mPreferredActivities.size(); i++) {
|
||||
PreferredIntentResolver pir = mSettings.mPreferredActivities.valueAt(i);
|
||||
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))) {
|
||||
dumpState.setTitlePrinted(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9299,7 +9323,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
serializer.startDocument(null, true);
|
||||
serializer.setFeature(
|
||||
"http://xmlpull.org/v1/doc/features.html#indent-output", true);
|
||||
mSettings.writePreferredActivitiesLPr(serializer);
|
||||
mSettings.writePreferredActivitiesLPr(serializer, 0);
|
||||
serializer.endDocument();
|
||||
serializer.flush();
|
||||
} catch (IllegalArgumentException e) {
|
||||
@@ -10045,11 +10069,6 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
|
||||
/** Called by UserManagerService */
|
||||
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));
|
||||
mSettings.removeUserLPr(userHandle);
|
||||
if (mInstaller != null) {
|
||||
@@ -10063,17 +10082,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
/** Called by UserManagerService */
|
||||
void createNewUserLILPw(int userHandle, File path) {
|
||||
if (mInstaller != null) {
|
||||
path.mkdir();
|
||||
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);
|
||||
mSettings.createNewUserLILPw(mInstaller, userHandle, path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,32 +36,17 @@ class PreferredActivity extends IntentFilter implements PreferredComponent.Callb
|
||||
static final String ATTR_USER_ID = "userId";
|
||||
|
||||
final PreferredComponent mPref;
|
||||
final int mUserId;
|
||||
|
||||
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);
|
||||
mUserId = userId;
|
||||
mPref = new PreferredComponent(this, match, set, activity);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
public void writeToXml(XmlSerializer serializer) throws IOException {
|
||||
serializer.attribute(null, ATTR_USER_ID, Integer.toString(mUserId));
|
||||
mPref.writeToXml(serializer);
|
||||
serializer.startTag(null, "filter");
|
||||
super.writeToXml(serializer);
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
@@ -70,6 +70,8 @@ import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import libcore.io.IoUtils;
|
||||
|
||||
@@ -123,22 +125,9 @@ final class Settings {
|
||||
|
||||
// The user's preferred activities associated with particular intent
|
||||
// filters.
|
||||
final IntentResolver<PreferredActivity, PreferredActivity> mPreferredActivities =
|
||||
new 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);
|
||||
}
|
||||
};
|
||||
final SparseArray<PreferredIntentResolver> mPreferredActivities =
|
||||
new SparseArray<PreferredIntentResolver>();
|
||||
|
||||
final HashMap<String, SharedUserSetting> mSharedUsers =
|
||||
new HashMap<String, SharedUserSetting>();
|
||||
private final ArrayList<Object> mUserIds = new ArrayList<Object>();
|
||||
@@ -745,6 +734,15 @@ final class Settings {
|
||||
}
|
||||
}
|
||||
|
||||
PreferredIntentResolver editPreferredActivitiesLPw(int userId) {
|
||||
PreferredIntentResolver pir = mPreferredActivities.get(userId);
|
||||
if (pir == null) {
|
||||
pir = new PreferredIntentResolver();
|
||||
mPreferredActivities.put(userId, pir);
|
||||
}
|
||||
return pir;
|
||||
}
|
||||
|
||||
private File getUserPackagesStateFile(int userId) {
|
||||
return new File(Environment.getUserSystemDirectory(userId), "package-restrictions.xml");
|
||||
}
|
||||
@@ -775,6 +773,35 @@ final class Settings {
|
||||
}
|
||||
}
|
||||
|
||||
private void readPreferredActivitiesLPw(XmlPullParser parser, int userId)
|
||||
throws XmlPullParserException, IOException {
|
||||
int outerDepth = parser.getDepth();
|
||||
int type;
|
||||
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
|
||||
&& (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
|
||||
if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String tagName = parser.getName();
|
||||
if (tagName.equals(TAG_ITEM)) {
|
||||
PreferredActivity pa = new PreferredActivity(parser);
|
||||
if (pa.mPref.getParseError() == null) {
|
||||
editPreferredActivitiesLPw(userId).addFilter(pa);
|
||||
} else {
|
||||
PackageManagerService.reportSettingsProblem(Log.WARN,
|
||||
"Error in package manager settings: <preferred-activity> "
|
||||
+ pa.mPref.getParseError() + " at "
|
||||
+ parser.getPositionDescription());
|
||||
}
|
||||
} else {
|
||||
PackageManagerService.reportSettingsProblem(Log.WARN,
|
||||
"Unknown element under <preferred-activities>: " + parser.getName());
|
||||
XmlUtils.skipCurrentTag(parser);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void readPackageRestrictionsLPr(int userId) {
|
||||
if (DEBUG_MU) {
|
||||
Log.i(TAG, "Reading package restrictions for user=" + userId);
|
||||
@@ -893,6 +920,8 @@ final class Settings {
|
||||
|
||||
ps.setUserState(userId, enabled, installed, stopped, notLaunched,
|
||||
enabledComponents, disabledComponents);
|
||||
} else if (tagName.equals("preferred-activities")) {
|
||||
readPreferredActivitiesLPw(parser, userId);
|
||||
} else {
|
||||
Slog.w(PackageManagerService.TAG, "Unknown element under <stopped-packages>: "
|
||||
+ parser.getName());
|
||||
@@ -942,6 +971,20 @@ final class Settings {
|
||||
return components;
|
||||
}
|
||||
|
||||
void writePreferredActivitiesLPr(XmlSerializer serializer, int userId)
|
||||
throws IllegalArgumentException, IllegalStateException, IOException {
|
||||
serializer.startTag(null, "preferred-activities");
|
||||
PreferredIntentResolver pir = mPreferredActivities.get(userId);
|
||||
if (pir != null) {
|
||||
for (final PreferredActivity pa : pir.filterSet()) {
|
||||
serializer.startTag(null, TAG_ITEM);
|
||||
pa.writeToXml(serializer);
|
||||
serializer.endTag(null, TAG_ITEM);
|
||||
}
|
||||
}
|
||||
serializer.endTag(null, "preferred-activities");
|
||||
}
|
||||
|
||||
void writePackageRestrictionsLPr(int userId) {
|
||||
if (DEBUG_MU) {
|
||||
Log.i(TAG, "Writing package restrictions for user=" + userId);
|
||||
@@ -1028,6 +1071,8 @@ final class Settings {
|
||||
}
|
||||
}
|
||||
|
||||
writePreferredActivitiesLPr(serializer, userId);
|
||||
|
||||
serializer.endTag(null, TAG_PACKAGE_RESTRICTIONS);
|
||||
|
||||
serializer.endDocument();
|
||||
@@ -1237,8 +1282,6 @@ final class Settings {
|
||||
writeDisabledSysPackageLPr(serializer, pkg);
|
||||
}
|
||||
|
||||
writePreferredActivitiesLPr(serializer);
|
||||
|
||||
for (final SharedUserSetting usr : mSharedUsers.values()) {
|
||||
serializer.startTag(null, "shared-user");
|
||||
serializer.attribute(null, ATTR_NAME, usr.name);
|
||||
@@ -1366,17 +1409,6 @@ final class Settings {
|
||||
//Debug.stopMethodTracing();
|
||||
}
|
||||
|
||||
void writePreferredActivitiesLPr(XmlSerializer serializer)
|
||||
throws IllegalArgumentException, IllegalStateException, IOException {
|
||||
serializer.startTag(null, "preferred-activities");
|
||||
for (final PreferredActivity pa : mPreferredActivities.filterSet()) {
|
||||
serializer.startTag(null, TAG_ITEM);
|
||||
pa.writeToXml(serializer);
|
||||
serializer.endTag(null, TAG_ITEM);
|
||||
}
|
||||
serializer.endTag(null, "preferred-activities");
|
||||
}
|
||||
|
||||
void writeDisabledSysPackageLPr(XmlSerializer serializer, final PackageSetting pkg)
|
||||
throws java.io.IOException {
|
||||
serializer.startTag(null, "updated-package");
|
||||
@@ -1554,7 +1586,7 @@ final class Settings {
|
||||
mReadMessages.append("No settings file found\n");
|
||||
PackageManagerService.reportSettingsProblem(Log.INFO,
|
||||
"No settings file; creating initial state");
|
||||
readDefaultPreferredAppsLPw();
|
||||
readDefaultPreferredAppsLPw(0);
|
||||
return false;
|
||||
}
|
||||
str = new FileInputStream(mSettingsFilename);
|
||||
@@ -1596,7 +1628,9 @@ final class Settings {
|
||||
} else if (tagName.equals("preferred-packages")) {
|
||||
// no longer used.
|
||||
} else if (tagName.equals("preferred-activities")) {
|
||||
readPreferredActivitiesLPw(parser);
|
||||
// Upgrading from old single-user implementation;
|
||||
// these are the preferred activities for user 0.
|
||||
readPreferredActivitiesLPw(parser, 0);
|
||||
} else if (tagName.equals("updated-package")) {
|
||||
readDisabledSysPackageLPw(parser);
|
||||
} else if (tagName.equals("cleaning-package")) {
|
||||
@@ -1733,7 +1767,7 @@ final class Settings {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void readDefaultPreferredAppsLPw() {
|
||||
private void readDefaultPreferredAppsLPw(int userId) {
|
||||
// Read preferred apps from .../etc/preferred-apps directory.
|
||||
File preferredDir = new File(Environment.getRootDirectory(), "etc/preferred-apps");
|
||||
if (!preferredDir.exists() || !preferredDir.isDirectory()) {
|
||||
@@ -1776,7 +1810,7 @@ final class Settings {
|
||||
+ " does not start with 'preferred-activities'");
|
||||
continue;
|
||||
}
|
||||
readPreferredActivitiesLPw(parser);
|
||||
readPreferredActivitiesLPw(parser, userId);
|
||||
} catch (XmlPullParserException e) {
|
||||
Slog.w(TAG, "Error reading apps file " + f, e);
|
||||
} catch (IOException e) {
|
||||
@@ -2291,36 +2325,27 @@ final class Settings {
|
||||
}
|
||||
}
|
||||
|
||||
private void readPreferredActivitiesLPw(XmlPullParser parser) throws XmlPullParserException,
|
||||
IOException {
|
||||
int outerDepth = parser.getDepth();
|
||||
int type;
|
||||
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
|
||||
&& (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
|
||||
if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String tagName = parser.getName();
|
||||
if (tagName.equals(TAG_ITEM)) {
|
||||
PreferredActivity pa = new PreferredActivity(parser);
|
||||
if (pa.mPref.getParseError() == null) {
|
||||
mPreferredActivities.addFilter(pa);
|
||||
} else {
|
||||
PackageManagerService.reportSettingsProblem(Log.WARN,
|
||||
"Error in package manager settings: <preferred-activity> "
|
||||
+ pa.mPref.getParseError() + " at "
|
||||
+ parser.getPositionDescription());
|
||||
}
|
||||
} else {
|
||||
PackageManagerService.reportSettingsProblem(Log.WARN,
|
||||
"Unknown element under <preferred-activities>: " + parser.getName());
|
||||
XmlUtils.skipCurrentTag(parser);
|
||||
}
|
||||
void createNewUserLILPw(Installer installer, int userHandle, File path) {
|
||||
path.mkdir();
|
||||
FileUtils.setPermissions(path.toString(), FileUtils.S_IRWXU | FileUtils.S_IRWXG
|
||||
| FileUtils.S_IXOTH, -1, -1);
|
||||
for (PackageSetting ps : 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.
|
||||
installer.createUserData(ps.name,
|
||||
UserHandle.getUid(userHandle, ps.appId), userHandle);
|
||||
}
|
||||
readDefaultPreferredAppsLPw(userHandle);
|
||||
writePackageRestrictionsLPr(userHandle);
|
||||
}
|
||||
|
||||
void removeUserLPr(int userId) {
|
||||
Set<Entry<String, PackageSetting>> entries = mPackages.entrySet();
|
||||
for (Entry<String, PackageSetting> entry : entries) {
|
||||
entry.getValue().removeUser(userId);
|
||||
}
|
||||
mPreferredActivities.remove(userId);
|
||||
File file = getUserPackagesStateFile(userId);
|
||||
file.delete();
|
||||
file = getUserPackagesStateBackupFile(userId);
|
||||
|
||||
Reference in New Issue
Block a user