diff options
| -rw-r--r-- | core/api/current.txt | 3 | ||||
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 5 | ||||
| -rw-r--r-- | core/java/android/app/ApplicationPackageManager.java | 22 | ||||
| -rw-r--r-- | core/java/android/appwidget/AppWidgetProviderInfo.java | 8 | ||||
| -rw-r--r-- | core/java/android/content/pm/LauncherActivityInfo.java | 27 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 17 |
6 files changed, 60 insertions, 22 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index ec712d875323..f85747949d8f 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -8349,6 +8349,7 @@ package android.appwidget { method public android.appwidget.AppWidgetProviderInfo clone(); method public int describeContents(); method public final android.os.UserHandle getProfile(); + method @NonNull public android.content.pm.ActivityInfo getProviderInfo(); method @Nullable public final String loadDescription(@NonNull android.content.Context); method public final android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context, int); method public final String loadLabel(android.content.pm.PackageManager); @@ -11866,6 +11867,7 @@ package android.content.pm { } public class LauncherActivityInfo { + method @NonNull public android.content.pm.ActivityInfo getActivityInfo(); method public android.content.pm.ApplicationInfo getApplicationInfo(); method public android.graphics.drawable.Drawable getBadgedIcon(int); method public android.content.ComponentName getComponentName(); @@ -12238,6 +12240,7 @@ package android.content.pm { method @NonNull public abstract android.content.pm.ActivityInfo getReceiverInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; method @NonNull public abstract android.content.res.Resources getResourcesForActivity(@NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException; method @NonNull public abstract android.content.res.Resources getResourcesForApplication(@NonNull android.content.pm.ApplicationInfo) throws android.content.pm.PackageManager.NameNotFoundException; + method @NonNull public android.content.res.Resources getResourcesForApplication(@NonNull android.content.pm.ApplicationInfo, @Nullable android.content.res.Configuration) throws android.content.pm.PackageManager.NameNotFoundException; method @NonNull public abstract android.content.res.Resources getResourcesForApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; method @NonNull public abstract android.content.pm.ServiceInfo getServiceInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; method @NonNull public abstract java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 9b141b7bc649..1f9cb6430a5d 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -2291,9 +2291,10 @@ public final class ActivityThread extends ClientTransactionHandler { * Resources if one has already been created. */ Resources getTopLevelResources(String resDir, String[] splitResDirs, String[] overlayDirs, - String[] libDirs, LoadedApk pkgInfo) { + String[] libDirs, LoadedApk pkgInfo, Configuration overrideConfig) { return mResourcesManager.getResources(null, resDir, splitResDirs, overlayDirs, libDirs, - null, null, pkgInfo.getCompatibilityInfo(), pkgInfo.getClassLoader(), null); + null, overrideConfig, pkgInfo.getCompatibilityInfo(), pkgInfo.getClassLoader(), + null); } @UnsupportedAppUsage diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 77542bda22a0..7e7f887766e2 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -70,6 +70,7 @@ import android.content.pm.SuspendDialogInfo; import android.content.pm.VerifierDeviceIdentity; import android.content.pm.VersionedPackage; import android.content.pm.dex.ArtManager; +import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.graphics.Bitmap; @@ -1691,20 +1692,29 @@ public class ApplicationPackageManager extends PackageManager { @Override public Resources getResourcesForApplication(@NonNull ApplicationInfo app) throws NameNotFoundException { + return getResourcesForApplication(app, null); + } + + @Override + public Resources getResourcesForApplication(@NonNull ApplicationInfo app, + @Nullable Configuration configuration) throws NameNotFoundException { if (app.packageName.equals("system")) { - return mContext.mMainThread.getSystemUiContext().getResources(); + Context sysuiContext = mContext.mMainThread.getSystemUiContext(); + if (configuration != null) { + sysuiContext = sysuiContext.createConfigurationContext(configuration); + } + return sysuiContext.getResources(); } final boolean sameUid = (app.uid == Process.myUid()); final Resources r = mContext.mMainThread.getTopLevelResources( - sameUid ? app.sourceDir : app.publicSourceDir, - sameUid ? app.splitSourceDirs : app.splitPublicSourceDirs, - app.resourceDirs, app.sharedLibraryFiles, - mContext.mPackageInfo); + sameUid ? app.sourceDir : app.publicSourceDir, + sameUid ? app.splitSourceDirs : app.splitPublicSourceDirs, + app.resourceDirs, app.sharedLibraryFiles, + mContext.mPackageInfo, configuration); if (r != null) { return r; } throw new NameNotFoundException("Unable to open " + app.publicSourceDir); - } @Override diff --git a/core/java/android/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java index 93d96d074db8..e96e22c4764a 100644 --- a/core/java/android/appwidget/AppWidgetProviderInfo.java +++ b/core/java/android/appwidget/AppWidgetProviderInfo.java @@ -406,6 +406,14 @@ public class AppWidgetProviderInfo implements Parcelable { return new UserHandle(UserHandle.getUserId(providerInfo.applicationInfo.uid)); } + /** + * Returns the broadcast receiver that is providing this widget. + */ + @NonNull + public ActivityInfo getProviderInfo() { + return providerInfo; + } + @Override @SuppressWarnings("deprecation") public void writeToParcel(Parcel out, int flags) { diff --git a/core/java/android/content/pm/LauncherActivityInfo.java b/core/java/android/content/pm/LauncherActivityInfo.java index 82d7b6361738..16e720e3794c 100644 --- a/core/java/android/content/pm/LauncherActivityInfo.java +++ b/core/java/android/content/pm/LauncherActivityInfo.java @@ -17,6 +17,7 @@ package android.content.pm; import android.annotation.FloatRange; +import android.annotation.NonNull; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; @@ -32,8 +33,6 @@ import android.util.DisplayMetrics; * and badged icon for the activity. */ public class LauncherActivityInfo { - private static final String TAG = "LauncherActivityInfo"; - private final PackageManager mPm; private UserHandle mUser; private final LauncherActivityInfoInternal mInternal; @@ -81,7 +80,7 @@ public class LauncherActivityInfo { */ public CharSequence getLabel() { // TODO: Go through LauncherAppsService - return mInternal.getActivityInfo().loadLabel(mPm); + return getActivityInfo().loadLabel(mPm); } /** @@ -101,20 +100,20 @@ public class LauncherActivityInfo { */ public Drawable getIcon(int density) { // TODO: Go through LauncherAppsService - final int iconRes = mInternal.getActivityInfo().getIconResource(); + final int iconRes = getActivityInfo().getIconResource(); Drawable icon = null; // Get the preferred density icon from the app's resources if (density != 0 && iconRes != 0) { try { final Resources resources = mPm.getResourcesForApplication( - mInternal.getActivityInfo().applicationInfo); + getActivityInfo().applicationInfo); icon = resources.getDrawableForDensity(iconRes, density); } catch (NameNotFoundException | Resources.NotFoundException exc) { } } // Get the default density icon if (icon == null) { - icon = mInternal.getActivityInfo().loadIcon(mPm); + icon = getActivityInfo().loadIcon(mPm); } return icon; } @@ -126,25 +125,25 @@ public class LauncherActivityInfo { * @hide remove before shipping */ public int getApplicationFlags() { - return mInternal.getActivityInfo().flags; + return getActivityInfo().flags; } /** * Returns the ActivityInfo of the activity. * * @return Activity Info - * @hide */ + @NonNull public ActivityInfo getActivityInfo() { return mInternal.getActivityInfo(); } /** - * Returns the application info for the appliction this activity belongs to. + * Returns the application info for the application this activity belongs to. * @return */ public ApplicationInfo getApplicationInfo() { - return mInternal.getActivityInfo().applicationInfo; + return getActivityInfo().applicationInfo; } /** @@ -155,7 +154,7 @@ public class LauncherActivityInfo { public long getFirstInstallTime() { try { // TODO: Go through LauncherAppsService - return mPm.getPackageInfo(mInternal.getActivityInfo().packageName, + return mPm.getPackageInfo(getActivityInfo().packageName, PackageManager.MATCH_UNINSTALLED_PACKAGES).firstInstallTime; } catch (NameNotFoundException nnfe) { // Sorry, can't find package @@ -164,11 +163,11 @@ public class LauncherActivityInfo { } /** - * Returns the name for the acitivty from android:name in the manifest. - * @return the name from android:name for the acitivity. + * Returns the name for the activity from android:name in the manifest. + * @return the name from android:name for the activity. */ public String getName() { - return mInternal.getActivityInfo().name; + return getActivityInfo().name; } /** diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 68792b2f47de..32bbfe5773ab 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -54,6 +54,7 @@ import android.content.pm.parsing.ParsingPackageUtils; import android.content.pm.parsing.result.ParseInput; import android.content.pm.parsing.result.ParseResult; import android.content.pm.parsing.result.ParseTypeImpl; +import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.graphics.Rect; @@ -6702,6 +6703,22 @@ public abstract class PackageManager { throws NameNotFoundException; /** + * Retrieve the resources for an application for the provided configuration. + * + * @param app Information about the desired application. + * @param configuration Overridden configuration when loading the Resources + * + * @return Returns the application's Resources. + * @throws NameNotFoundException Thrown if the resources for the given + * application could not be loaded (most likely because it was uninstalled). + */ + @NonNull + public Resources getResourcesForApplication(@NonNull ApplicationInfo app, @Nullable + Configuration configuration) throws NameNotFoundException { + throw new UnsupportedOperationException(); + } + + /** * Retrieve the resources associated with an application. Given the full * package name of an application, retrieves the information about it and * calls getResources() to return its application's resources. If the |