Merge "Allow replacing ResolverActivity via config value" into klp-dev
This commit is contained in:
@@ -1167,6 +1167,11 @@
|
|||||||
<string name="config_chooseTypeAndAccountActivity"
|
<string name="config_chooseTypeAndAccountActivity"
|
||||||
>android/android.accounts.ChooseTypeAndAccountActivity</string>
|
>android/android.accounts.ChooseTypeAndAccountActivity</string>
|
||||||
|
|
||||||
|
<!-- Component name of a custom ResolverActivity (Intent resolver) to be used instead of
|
||||||
|
the default framework version. If left empty, then the framework version will be used.
|
||||||
|
Example: com.google.android.myapp/.resolver.MyResolverActivity -->
|
||||||
|
<string name="config_customResolverActivity"></string>
|
||||||
|
|
||||||
<!-- Apps that are authorized to access shared accounts, overridden by product overlays -->
|
<!-- Apps that are authorized to access shared accounts, overridden by product overlays -->
|
||||||
<string name="config_appsAuthorizedForSharedAccounts">;com.android.settings;</string>
|
<string name="config_appsAuthorizedForSharedAccounts">;com.android.settings;</string>
|
||||||
|
|
||||||
|
|||||||
@@ -823,6 +823,7 @@
|
|||||||
<java-symbol type="string" name="owner_name" />
|
<java-symbol type="string" name="owner_name" />
|
||||||
<java-symbol type="string" name="config_chooseAccountActivity" />
|
<java-symbol type="string" name="config_chooseAccountActivity" />
|
||||||
<java-symbol type="string" name="config_chooseTypeAndAccountActivity" />
|
<java-symbol type="string" name="config_chooseTypeAndAccountActivity" />
|
||||||
|
<java-symbol type="string" name="config_customResolverActivity" />
|
||||||
<java-symbol type="string" name="config_appsAuthorizedForSharedAccounts" />
|
<java-symbol type="string" name="config_appsAuthorizedForSharedAccounts" />
|
||||||
<java-symbol type="string" name="error_message_title" />
|
<java-symbol type="string" name="error_message_title" />
|
||||||
<java-symbol type="string" name="action_bar_home_description_format" />
|
<java-symbol type="string" name="action_bar_home_description_format" />
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ import android.content.pm.ManifestDigest;
|
|||||||
import android.content.pm.VerificationParams;
|
import android.content.pm.VerificationParams;
|
||||||
import android.content.pm.VerifierDeviceIdentity;
|
import android.content.pm.VerifierDeviceIdentity;
|
||||||
import android.content.pm.VerifierInfo;
|
import android.content.pm.VerifierInfo;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
@@ -116,6 +117,7 @@ import android.os.Environment.UserEnvironment;
|
|||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.security.KeyStore;
|
import android.security.KeyStore;
|
||||||
import android.security.SystemKeyStore;
|
import android.security.SystemKeyStore;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.EventLog;
|
import android.util.EventLog;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -158,6 +160,8 @@ import libcore.io.IoUtils;
|
|||||||
import libcore.io.Libcore;
|
import libcore.io.Libcore;
|
||||||
import libcore.io.StructStat;
|
import libcore.io.StructStat;
|
||||||
|
|
||||||
|
import com.android.internal.R;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keep track of all those .apks everywhere.
|
* Keep track of all those .apks everywhere.
|
||||||
*
|
*
|
||||||
@@ -420,6 +424,9 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
final ResolveInfo mResolveInfo = new ResolveInfo();
|
final ResolveInfo mResolveInfo = new ResolveInfo();
|
||||||
ComponentName mResolveComponentName;
|
ComponentName mResolveComponentName;
|
||||||
PackageParser.Package mPlatformPackage;
|
PackageParser.Package mPlatformPackage;
|
||||||
|
ComponentName mCustomResolverComponentName;
|
||||||
|
|
||||||
|
boolean mResolverReplaced = false;
|
||||||
|
|
||||||
// Set of pending broadcasts for aggregating enable/disable of components.
|
// Set of pending broadcasts for aggregating enable/disable of components.
|
||||||
static class PendingPackageBroadcasts {
|
static class PendingPackageBroadcasts {
|
||||||
@@ -1115,6 +1122,15 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
mRestoredSettings = mSettings.readLPw(this, sUserManager.getUsers(false),
|
mRestoredSettings = mSettings.readLPw(this, sUserManager.getUsers(false),
|
||||||
mSdkVersion, mOnlyCore);
|
mSdkVersion, mOnlyCore);
|
||||||
|
|
||||||
|
String customResolverActivity = Resources.getSystem().getString(
|
||||||
|
R.string.config_customResolverActivity);
|
||||||
|
if (TextUtils.isEmpty(customResolverActivity)) {
|
||||||
|
customResolverActivity = null;
|
||||||
|
} else {
|
||||||
|
mCustomResolverComponentName = ComponentName.unflattenFromString(
|
||||||
|
customResolverActivity);
|
||||||
|
}
|
||||||
|
|
||||||
long startTime = SystemClock.uptimeMillis();
|
long startTime = SystemClock.uptimeMillis();
|
||||||
|
|
||||||
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_SYSTEM_SCAN_START,
|
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_PMS_SYSTEM_SCAN_START,
|
||||||
@@ -3979,6 +3995,11 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_PRIVILEGED;
|
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_PRIVILEGED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mCustomResolverComponentName != null &&
|
||||||
|
mCustomResolverComponentName.getPackageName().equals(pkg.packageName)) {
|
||||||
|
setUpCustomResolverActivity(pkg);
|
||||||
|
}
|
||||||
|
|
||||||
if (pkg.packageName.equals("android")) {
|
if (pkg.packageName.equals("android")) {
|
||||||
synchronized (mPackages) {
|
synchronized (mPackages) {
|
||||||
if (mAndroidApplication != null) {
|
if (mAndroidApplication != null) {
|
||||||
@@ -3990,26 +4011,28 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up information for our fall-back user intent resolution
|
// Set up information for our fall-back user intent resolution activity.
|
||||||
// activity.
|
|
||||||
mPlatformPackage = pkg;
|
mPlatformPackage = pkg;
|
||||||
pkg.mVersionCode = mSdkVersion;
|
pkg.mVersionCode = mSdkVersion;
|
||||||
mAndroidApplication = pkg.applicationInfo;
|
mAndroidApplication = pkg.applicationInfo;
|
||||||
mResolveActivity.applicationInfo = mAndroidApplication;
|
|
||||||
mResolveActivity.name = ResolverActivity.class.getName();
|
if (!mResolverReplaced) {
|
||||||
mResolveActivity.packageName = mAndroidApplication.packageName;
|
mResolveActivity.applicationInfo = mAndroidApplication;
|
||||||
mResolveActivity.processName = "system:ui";
|
mResolveActivity.name = ResolverActivity.class.getName();
|
||||||
mResolveActivity.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
|
mResolveActivity.packageName = mAndroidApplication.packageName;
|
||||||
mResolveActivity.flags = ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS;
|
mResolveActivity.processName = "system:ui";
|
||||||
mResolveActivity.theme = com.android.internal.R.style.Theme_Holo_Dialog_Alert;
|
mResolveActivity.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
|
||||||
mResolveActivity.exported = true;
|
mResolveActivity.flags = ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS;
|
||||||
mResolveActivity.enabled = true;
|
mResolveActivity.theme = com.android.internal.R.style.Theme_Holo_Dialog_Alert;
|
||||||
mResolveInfo.activityInfo = mResolveActivity;
|
mResolveActivity.exported = true;
|
||||||
mResolveInfo.priority = 0;
|
mResolveActivity.enabled = true;
|
||||||
mResolveInfo.preferredOrder = 0;
|
mResolveInfo.activityInfo = mResolveActivity;
|
||||||
mResolveInfo.match = 0;
|
mResolveInfo.priority = 0;
|
||||||
mResolveComponentName = new ComponentName(
|
mResolveInfo.preferredOrder = 0;
|
||||||
mAndroidApplication.packageName, mResolveActivity.name);
|
mResolveInfo.match = 0;
|
||||||
|
mResolveComponentName = new ComponentName(
|
||||||
|
mAndroidApplication.packageName, mResolveActivity.name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4874,6 +4897,30 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
return pkg;
|
return pkg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setUpCustomResolverActivity(PackageParser.Package pkg) {
|
||||||
|
synchronized (mPackages) {
|
||||||
|
mResolverReplaced = true;
|
||||||
|
// Set up information for custom user intent resolution activity.
|
||||||
|
mResolveActivity.applicationInfo = pkg.applicationInfo;
|
||||||
|
mResolveActivity.name = mCustomResolverComponentName.getClassName();
|
||||||
|
mResolveActivity.packageName = pkg.applicationInfo.packageName;
|
||||||
|
mResolveActivity.processName = null;
|
||||||
|
mResolveActivity.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
|
||||||
|
mResolveActivity.flags = ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS |
|
||||||
|
ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS;
|
||||||
|
mResolveActivity.theme = 0;
|
||||||
|
mResolveActivity.exported = true;
|
||||||
|
mResolveActivity.enabled = true;
|
||||||
|
mResolveInfo.activityInfo = mResolveActivity;
|
||||||
|
mResolveInfo.priority = 0;
|
||||||
|
mResolveInfo.preferredOrder = 0;
|
||||||
|
mResolveInfo.match = 0;
|
||||||
|
mResolveComponentName = mCustomResolverComponentName;
|
||||||
|
Slog.i(TAG, "Replacing default ResolverActivity with custom activity: " +
|
||||||
|
mResolveComponentName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setInternalAppNativeLibraryPath(PackageParser.Package pkg,
|
private void setInternalAppNativeLibraryPath(PackageParser.Package pkg,
|
||||||
PackageSetting pkgSetting) {
|
PackageSetting pkgSetting) {
|
||||||
final String apkLibPath = getApkName(pkgSetting.codePathString);
|
final String apkLibPath = getApkName(pkgSetting.codePathString);
|
||||||
|
|||||||
Reference in New Issue
Block a user