Merge "Update DecorContext's Resource cache when calling getResources." into pi-dev
am: 33cb3b7204
Change-Id: I1b7c21f87a196bfe834e00b523d6115400438bc7
This commit is contained in:
@@ -23,6 +23,8 @@ import android.view.ContextThemeWrapper;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowManagerImpl;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
/**
|
||||
* Context for decor views which can be seeded with pure application context and not depend on the
|
||||
* activity, but still provide some of the facilities that Activity has,
|
||||
@@ -35,9 +37,12 @@ class DecorContext extends ContextThemeWrapper {
|
||||
private WindowManager mWindowManager;
|
||||
private Resources mActivityResources;
|
||||
|
||||
public DecorContext(Context context, Resources activityResources) {
|
||||
private WeakReference<Context> mActivityContext;
|
||||
|
||||
public DecorContext(Context context, Context activityContext) {
|
||||
super(context, null);
|
||||
mActivityResources = activityResources;
|
||||
mActivityContext = new WeakReference<>(activityContext);
|
||||
mActivityResources = activityContext.getResources();
|
||||
}
|
||||
|
||||
void setPhoneWindow(PhoneWindow phoneWindow) {
|
||||
@@ -60,6 +65,13 @@ class DecorContext extends ContextThemeWrapper {
|
||||
|
||||
@Override
|
||||
public Resources getResources() {
|
||||
Context activityContext = mActivityContext.get();
|
||||
// Attempt to update the local cached Resources from the activity context. If the activity
|
||||
// is no longer around, return the old cached values.
|
||||
if (activityContext != null) {
|
||||
mActivityResources = activityContext.getResources();
|
||||
}
|
||||
|
||||
return mActivityResources;
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ import java.util.List;
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.app.ActivityManager;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
@@ -55,7 +54,6 @@ import android.graphics.Region;
|
||||
import android.graphics.Shader;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.RemoteException;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
@@ -1843,6 +1841,13 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Resources getResources() {
|
||||
// Make sure the Resources object is propogated from the Context since it can be updated in
|
||||
// the Context object.
|
||||
return getContext().getResources();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
|
||||
@@ -2299,7 +2299,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
|
||||
if (applicationContext == null) {
|
||||
context = getContext();
|
||||
} else {
|
||||
context = new DecorContext(applicationContext, getContext().getResources());
|
||||
context = new DecorContext(applicationContext, getContext());
|
||||
if (mTheme != -1) {
|
||||
context.setTheme(mTheme);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user