Loading api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -5262,6 +5262,7 @@ package android.content { method public abstract int checkUriPermission(android.net.Uri, int, int, int); method public abstract int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); method public abstract deprecated void clearWallpaper() throws java.io.IOException; method public abstract android.content.Context createConfigurationContext(android.content.res.Configuration); method public abstract android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract java.lang.String[] databaseList(); method public abstract boolean deleteDatabase(java.lang.String); Loading Loading @@ -5406,6 +5407,7 @@ package android.content { method public int checkUriPermission(android.net.Uri, int, int, int); method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); method public void clearWallpaper() throws java.io.IOException; method public android.content.Context createConfigurationContext(android.content.res.Configuration); method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public java.lang.String[] databaseList(); method public boolean deleteDatabase(java.lang.String); Loading Loading @@ -21148,6 +21150,7 @@ package android.test.mock { method public int checkUriPermission(android.net.Uri, int, int, int); method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); method public void clearWallpaper(); method public android.content.Context createConfigurationContext(android.content.res.Configuration); method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public java.lang.String[] databaseList(); method public boolean deleteDatabase(java.lang.String); Loading Loading @@ -23352,6 +23355,7 @@ package android.view { public class ContextThemeWrapper extends android.content.ContextWrapper { ctor public ContextThemeWrapper(); ctor public ContextThemeWrapper(android.content.Context, int); method public void applyOverrideConfiguration(android.content.res.Configuration); method protected void onApplyThemeResource(android.content.res.Resources.Theme, int, boolean); } core/java/android/app/ActivityThread.java +64 −17 Original line number Diff line number Diff line Loading @@ -1471,13 +1471,25 @@ public final class ActivityThread { private static class ResourcesKey { final private String mResDir; final private Configuration mOverrideConfiguration; final private float mScale; final private int mHash; ResourcesKey(String resDir, float scale) { ResourcesKey(String resDir, Configuration overrideConfiguration, float scale) { mResDir = resDir; if (overrideConfiguration != null) { if (Configuration.EMPTY.equals(overrideConfiguration)) { overrideConfiguration = null; } } mOverrideConfiguration = overrideConfiguration; mScale = scale; mHash = mResDir.hashCode() << 2 + (int) (mScale * 2); int hash = 17; hash = 31 * hash + mResDir.hashCode(); hash = 31 * hash + (mOverrideConfiguration != null ? mOverrideConfiguration.hashCode() : 0); hash = 31 * hash + Float.floatToIntBits(mScale); mHash = hash; } @Override Loading @@ -1491,7 +1503,21 @@ public final class ActivityThread { return false; } ResourcesKey peer = (ResourcesKey) obj; return mResDir.equals(peer.mResDir) && mScale == peer.mScale; if (!mResDir.equals(peer.mResDir)) { return false; } if (mOverrideConfiguration != peer.mOverrideConfiguration) { if (mOverrideConfiguration == null || peer.mOverrideConfiguration == null) { return false; } if (!mOverrideConfiguration.equals(peer.mOverrideConfiguration)) { return false; } } if (mScale != peer.mScale) { return false; } return true; } } Loading Loading @@ -1562,8 +1588,10 @@ public final class ActivityThread { * @param compInfo the compability info. It will use the default compatibility info when it's * null. */ Resources getTopLevelResources(String resDir, CompatibilityInfo compInfo) { ResourcesKey key = new ResourcesKey(resDir, compInfo.applicationScale); Resources getTopLevelResources(String resDir, Configuration overrideConfiguration, CompatibilityInfo compInfo) { ResourcesKey key = new ResourcesKey(resDir, overrideConfiguration, compInfo.applicationScale); Resources r; synchronized (mPackages) { // Resources is app scale dependent. Loading Loading @@ -1595,7 +1623,14 @@ public final class ActivityThread { //Slog.i(TAG, "Resource: key=" + key + ", display metrics=" + metrics); DisplayMetrics metrics = getDisplayMetricsLocked(null, false); r = new Resources(assets, metrics, getConfiguration(), compInfo); Configuration config; if (key.mOverrideConfiguration != null) { config = new Configuration(getConfiguration()); config.updateFrom(key.mOverrideConfiguration); } else { config = getConfiguration(); } r = new Resources(assets, metrics, config, compInfo); if (false) { Slog.i(TAG, "Created app resources " + resDir + " " + r + ": " + r.getConfiguration() + " appScale=" Loading @@ -1621,8 +1656,10 @@ public final class ActivityThread { /** * Creates the top level resources for the given package. */ Resources getTopLevelResources(String resDir, LoadedApk pkgInfo) { return getTopLevelResources(resDir, pkgInfo.mCompatibilityInfo.get()); Resources getTopLevelResources(String resDir, Configuration overrideConfiguration, LoadedApk pkgInfo) { return getTopLevelResources(resDir, overrideConfiguration, pkgInfo.mCompatibilityInfo.get()); } final Handler getHandler() { Loading Loading @@ -3676,17 +3713,27 @@ public final class ActivityThread { ApplicationPackageManager.configurationChanged(); //Slog.i(TAG, "Configuration changed in " + currentPackageName()); Iterator<WeakReference<Resources>> it = mActiveResources.values().iterator(); //Iterator<Map.Entry<String, WeakReference<Resources>>> it = // mActiveResources.entrySet().iterator(); Configuration tmpConfig = null; Iterator<Map.Entry<ResourcesKey, WeakReference<Resources>>> it = mActiveResources.entrySet().iterator(); while (it.hasNext()) { WeakReference<Resources> v = it.next(); Resources r = v.get(); Map.Entry<ResourcesKey, WeakReference<Resources>> entry = it.next(); Resources r = entry.getValue().get(); if (r != null) { if (DEBUG_CONFIGURATION) Slog.v(TAG, "Changing resources " + r + " config to: " + config); Configuration override = entry.getKey().mOverrideConfiguration; if (override != null) { if (tmpConfig == null) { tmpConfig = new Configuration(); } tmpConfig.setTo(config); tmpConfig.updateFrom(override); r.updateConfiguration(tmpConfig, dm, compat); } else { r.updateConfiguration(config, dm, compat); } //Slog.i(TAG, "Updated app resources " + v.getKey() // + " " + r + ": " + r.getConfiguration()); } else { Loading core/java/android/app/ApplicationPackageManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -713,7 +713,7 @@ final class ApplicationPackageManager extends PackageManager { } Resources r = mContext.mMainThread.getTopLevelResources( app.uid == Process.myUid() ? app.sourceDir : app.publicSourceDir, mContext.mPackageInfo); : app.publicSourceDir, null, mContext.mPackageInfo); if (r != null) { return r; } Loading core/java/android/app/ContextImpl.java +14 −8 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; Loading Loading @@ -525,7 +526,7 @@ class ContextImpl extends Context { @Override public AssetManager getAssets() { return mResources.getAssets(); return getResources().getAssets(); } @Override Loading Loading @@ -1590,6 +1591,16 @@ class ContextImpl extends Context { "Application package " + packageName + " not found"); } @Override public Context createConfigurationContext(Configuration overrideConfiguration) { ContextImpl c = new ContextImpl(); c.init(mPackageInfo, null, mMainThread); c.mResources = mMainThread.getTopLevelResources( mPackageInfo.getResDir(), overrideConfiguration, mResources.getCompatibilityInfo()); return c; } @Override public boolean isRestricted() { return mRestricted; Loading Loading @@ -1659,12 +1670,11 @@ class ContextImpl extends Context { " compatiblity info:" + container.getDisplayMetrics()); } mResources = mainThread.getTopLevelResources( mPackageInfo.getResDir(), container.getCompatibilityInfo()); mPackageInfo.getResDir(), null, container.getCompatibilityInfo()); } mMainThread = mainThread; mContentResolver = new ApplicationContentResolver(this, mainThread); setActivityToken(activityToken); mActivityToken = activityToken; } final void init(Resources resources, ActivityThread mainThread) { Loading @@ -1691,10 +1701,6 @@ class ContextImpl extends Context { return mReceiverRestrictedContext = new ReceiverRestrictedContext(getOuterContext()); } final void setActivityToken(IBinder token) { mActivityToken = token; } final void setOuterContext(Context context) { mOuterContext = context; } Loading core/java/android/app/LoadedApk.java +1 −1 Original line number Diff line number Diff line Loading @@ -471,7 +471,7 @@ public final class LoadedApk { public Resources getResources(ActivityThread mainThread) { if (mResources == null) { mResources = mainThread.getTopLevelResources(mResDir, this); mResources = mainThread.getTopLevelResources(mResDir, null, this); } return mResources; } Loading Loading
api/current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -5262,6 +5262,7 @@ package android.content { method public abstract int checkUriPermission(android.net.Uri, int, int, int); method public abstract int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); method public abstract deprecated void clearWallpaper() throws java.io.IOException; method public abstract android.content.Context createConfigurationContext(android.content.res.Configuration); method public abstract android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract java.lang.String[] databaseList(); method public abstract boolean deleteDatabase(java.lang.String); Loading Loading @@ -5406,6 +5407,7 @@ package android.content { method public int checkUriPermission(android.net.Uri, int, int, int); method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); method public void clearWallpaper() throws java.io.IOException; method public android.content.Context createConfigurationContext(android.content.res.Configuration); method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public java.lang.String[] databaseList(); method public boolean deleteDatabase(java.lang.String); Loading Loading @@ -21148,6 +21150,7 @@ package android.test.mock { method public int checkUriPermission(android.net.Uri, int, int, int); method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int); method public void clearWallpaper(); method public android.content.Context createConfigurationContext(android.content.res.Configuration); method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; method public java.lang.String[] databaseList(); method public boolean deleteDatabase(java.lang.String); Loading Loading @@ -23352,6 +23355,7 @@ package android.view { public class ContextThemeWrapper extends android.content.ContextWrapper { ctor public ContextThemeWrapper(); ctor public ContextThemeWrapper(android.content.Context, int); method public void applyOverrideConfiguration(android.content.res.Configuration); method protected void onApplyThemeResource(android.content.res.Resources.Theme, int, boolean); }
core/java/android/app/ActivityThread.java +64 −17 Original line number Diff line number Diff line Loading @@ -1471,13 +1471,25 @@ public final class ActivityThread { private static class ResourcesKey { final private String mResDir; final private Configuration mOverrideConfiguration; final private float mScale; final private int mHash; ResourcesKey(String resDir, float scale) { ResourcesKey(String resDir, Configuration overrideConfiguration, float scale) { mResDir = resDir; if (overrideConfiguration != null) { if (Configuration.EMPTY.equals(overrideConfiguration)) { overrideConfiguration = null; } } mOverrideConfiguration = overrideConfiguration; mScale = scale; mHash = mResDir.hashCode() << 2 + (int) (mScale * 2); int hash = 17; hash = 31 * hash + mResDir.hashCode(); hash = 31 * hash + (mOverrideConfiguration != null ? mOverrideConfiguration.hashCode() : 0); hash = 31 * hash + Float.floatToIntBits(mScale); mHash = hash; } @Override Loading @@ -1491,7 +1503,21 @@ public final class ActivityThread { return false; } ResourcesKey peer = (ResourcesKey) obj; return mResDir.equals(peer.mResDir) && mScale == peer.mScale; if (!mResDir.equals(peer.mResDir)) { return false; } if (mOverrideConfiguration != peer.mOverrideConfiguration) { if (mOverrideConfiguration == null || peer.mOverrideConfiguration == null) { return false; } if (!mOverrideConfiguration.equals(peer.mOverrideConfiguration)) { return false; } } if (mScale != peer.mScale) { return false; } return true; } } Loading Loading @@ -1562,8 +1588,10 @@ public final class ActivityThread { * @param compInfo the compability info. It will use the default compatibility info when it's * null. */ Resources getTopLevelResources(String resDir, CompatibilityInfo compInfo) { ResourcesKey key = new ResourcesKey(resDir, compInfo.applicationScale); Resources getTopLevelResources(String resDir, Configuration overrideConfiguration, CompatibilityInfo compInfo) { ResourcesKey key = new ResourcesKey(resDir, overrideConfiguration, compInfo.applicationScale); Resources r; synchronized (mPackages) { // Resources is app scale dependent. Loading Loading @@ -1595,7 +1623,14 @@ public final class ActivityThread { //Slog.i(TAG, "Resource: key=" + key + ", display metrics=" + metrics); DisplayMetrics metrics = getDisplayMetricsLocked(null, false); r = new Resources(assets, metrics, getConfiguration(), compInfo); Configuration config; if (key.mOverrideConfiguration != null) { config = new Configuration(getConfiguration()); config.updateFrom(key.mOverrideConfiguration); } else { config = getConfiguration(); } r = new Resources(assets, metrics, config, compInfo); if (false) { Slog.i(TAG, "Created app resources " + resDir + " " + r + ": " + r.getConfiguration() + " appScale=" Loading @@ -1621,8 +1656,10 @@ public final class ActivityThread { /** * Creates the top level resources for the given package. */ Resources getTopLevelResources(String resDir, LoadedApk pkgInfo) { return getTopLevelResources(resDir, pkgInfo.mCompatibilityInfo.get()); Resources getTopLevelResources(String resDir, Configuration overrideConfiguration, LoadedApk pkgInfo) { return getTopLevelResources(resDir, overrideConfiguration, pkgInfo.mCompatibilityInfo.get()); } final Handler getHandler() { Loading Loading @@ -3676,17 +3713,27 @@ public final class ActivityThread { ApplicationPackageManager.configurationChanged(); //Slog.i(TAG, "Configuration changed in " + currentPackageName()); Iterator<WeakReference<Resources>> it = mActiveResources.values().iterator(); //Iterator<Map.Entry<String, WeakReference<Resources>>> it = // mActiveResources.entrySet().iterator(); Configuration tmpConfig = null; Iterator<Map.Entry<ResourcesKey, WeakReference<Resources>>> it = mActiveResources.entrySet().iterator(); while (it.hasNext()) { WeakReference<Resources> v = it.next(); Resources r = v.get(); Map.Entry<ResourcesKey, WeakReference<Resources>> entry = it.next(); Resources r = entry.getValue().get(); if (r != null) { if (DEBUG_CONFIGURATION) Slog.v(TAG, "Changing resources " + r + " config to: " + config); Configuration override = entry.getKey().mOverrideConfiguration; if (override != null) { if (tmpConfig == null) { tmpConfig = new Configuration(); } tmpConfig.setTo(config); tmpConfig.updateFrom(override); r.updateConfiguration(tmpConfig, dm, compat); } else { r.updateConfiguration(config, dm, compat); } //Slog.i(TAG, "Updated app resources " + v.getKey() // + " " + r + ": " + r.getConfiguration()); } else { Loading
core/java/android/app/ApplicationPackageManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -713,7 +713,7 @@ final class ApplicationPackageManager extends PackageManager { } Resources r = mContext.mMainThread.getTopLevelResources( app.uid == Process.myUid() ? app.sourceDir : app.publicSourceDir, mContext.mPackageInfo); : app.publicSourceDir, null, mContext.mPackageInfo); if (r != null) { return r; } Loading
core/java/android/app/ContextImpl.java +14 −8 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; Loading Loading @@ -525,7 +526,7 @@ class ContextImpl extends Context { @Override public AssetManager getAssets() { return mResources.getAssets(); return getResources().getAssets(); } @Override Loading Loading @@ -1590,6 +1591,16 @@ class ContextImpl extends Context { "Application package " + packageName + " not found"); } @Override public Context createConfigurationContext(Configuration overrideConfiguration) { ContextImpl c = new ContextImpl(); c.init(mPackageInfo, null, mMainThread); c.mResources = mMainThread.getTopLevelResources( mPackageInfo.getResDir(), overrideConfiguration, mResources.getCompatibilityInfo()); return c; } @Override public boolean isRestricted() { return mRestricted; Loading Loading @@ -1659,12 +1670,11 @@ class ContextImpl extends Context { " compatiblity info:" + container.getDisplayMetrics()); } mResources = mainThread.getTopLevelResources( mPackageInfo.getResDir(), container.getCompatibilityInfo()); mPackageInfo.getResDir(), null, container.getCompatibilityInfo()); } mMainThread = mainThread; mContentResolver = new ApplicationContentResolver(this, mainThread); setActivityToken(activityToken); mActivityToken = activityToken; } final void init(Resources resources, ActivityThread mainThread) { Loading @@ -1691,10 +1701,6 @@ class ContextImpl extends Context { return mReceiverRestrictedContext = new ReceiverRestrictedContext(getOuterContext()); } final void setActivityToken(IBinder token) { mActivityToken = token; } final void setOuterContext(Context context) { mOuterContext = context; } Loading
core/java/android/app/LoadedApk.java +1 −1 Original line number Diff line number Diff line Loading @@ -471,7 +471,7 @@ public final class LoadedApk { public Resources getResources(ActivityThread mainThread) { if (mResources == null) { mResources = mainThread.getTopLevelResources(mResDir, this); mResources = mainThread.getTopLevelResources(mResDir, null, this); } return mResources; } Loading