Merge "Update DecorContext's Resource cache when calling getResources." into pi-dev

This commit is contained in:
Chavi Weingarten
2018-04-30 20:38:42 +00:00
committed by Android (Google) Code Review
3 changed files with 22 additions and 5 deletions

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);
}