Merge "Use right starting window resource in multi-window mode." into nyc-dev am: 3eefb4c

am: a2ce89c

* commit 'a2ce89ce0d936cc4e69b6ffcdd645a802533d39c':
  Use right starting window resource in multi-window mode.

Change-Id: I273f66bf97f416607bd893669f3ce58560976f91
This commit is contained in:
TreeHugger Robot
2016-04-19 00:13:39 +00:00
committed by android-build-merger
3 changed files with 33 additions and 11 deletions

View File

@@ -727,6 +727,8 @@ public interface WindowManagerPolicy {
* @param labelRes The resource ID the application would like to use as its name. * @param labelRes The resource ID the application would like to use as its name.
* @param icon The resource ID the application would like to use as its icon. * @param icon The resource ID the application would like to use as its icon.
* @param windowFlags Window layout flags. * @param windowFlags Window layout flags.
* @param overrideConfig override configuration to consider when generating
* context to for resources.
* *
* @return Optionally you can return the View that was used to create the * @return Optionally you can return the View that was used to create the
* window, for easy removal in removeStartingWindow. * window, for easy removal in removeStartingWindow.
@@ -735,7 +737,7 @@ public interface WindowManagerPolicy {
*/ */
public View addStartingWindow(IBinder appToken, String packageName, public View addStartingWindow(IBinder appToken, String packageName,
int theme, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int theme, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel,
int labelRes, int icon, int logo, int windowFlags); int labelRes, int icon, int logo, int windowFlags, Configuration overrideConfig);
/** /**
* Called when the first window of an application has been displayed, while * Called when the first window of an application has been displayed, while

View File

@@ -22,6 +22,7 @@ import static android.app.ActivityManager.StackId.HOME_STACK_ID;
import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE; import static android.content.pm.PackageManager.FEATURE_PICTURE_IN_PICTURE;
import static android.content.pm.PackageManager.FEATURE_TELEVISION; import static android.content.pm.PackageManager.FEATURE_TELEVISION;
import static android.content.pm.PackageManager.FEATURE_WATCH; import static android.content.pm.PackageManager.FEATURE_WATCH;
import static android.content.res.Configuration.EMPTY;
import static android.content.res.Configuration.UI_MODE_TYPE_CAR; import static android.content.res.Configuration.UI_MODE_TYPE_CAR;
import static android.content.res.Configuration.UI_MODE_TYPE_MASK; import static android.content.res.Configuration.UI_MODE_TYPE_MASK;
import static android.view.WindowManager.DOCKED_TOP; import static android.view.WindowManager.DOCKED_TOP;
@@ -63,6 +64,7 @@ import android.content.pm.ResolveInfo;
import android.content.res.CompatibilityInfo; import android.content.res.CompatibilityInfo;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.graphics.Rect; import android.graphics.Rect;
@@ -2535,7 +2537,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
@Override @Override
public View addStartingWindow(IBinder appToken, String packageName, int theme, public View addStartingWindow(IBinder appToken, String packageName, int theme,
CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes, CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes,
int icon, int logo, int windowFlags) { int icon, int logo, int windowFlags, Configuration overrideConfig) {
if (!SHOW_STARTING_ANIMATIONS) { if (!SHOW_STARTING_ANIMATIONS) {
return null; return null;
} }
@@ -2560,10 +2562,28 @@ public class PhoneWindowManager implements WindowManagerPolicy {
} }
} }
PhoneWindow win = new PhoneWindow(context); if (overrideConfig != null && overrideConfig != EMPTY) {
if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "addStartingWindow: creating context based"
+ " on overrideConfig" + overrideConfig + " for starting window");
final Context overrideContext = context.createConfigurationContext(overrideConfig);
overrideContext.setTheme(theme);
final TypedArray typedArray = overrideContext.obtainStyledAttributes(
com.android.internal.R.styleable.Window);
final int resId = typedArray.getResourceId(R.styleable.Window_windowBackground, 0);
if (resId != 0 && overrideContext.getDrawable(resId) != null) {
// We want to use the windowBackground for the override context if it is
// available, otherwise we use the default one to make sure a themed starting
// window is displayed for the app.
if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "addStartingWindow: apply overrideConfig"
+ overrideConfig + " to starting window resId=" + resId);
context = overrideContext;
}
}
final PhoneWindow win = new PhoneWindow(context);
win.setIsStartingWindow(true); win.setIsStartingWindow(true);
Resources r = context.getResources(); final Resources r = context.getResources();
win.setTitle(r.getText(labelRes, nonLocalizedLabel)); win.setTitle(r.getText(labelRes, nonLocalizedLabel));
win.setType( win.setType(
@@ -2616,10 +2636,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
view = win.getDecorView(); view = win.getDecorView();
if (DEBUG_STARTING_WINDOW) Slog.d( if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "Adding starting window for "
TAG, "Adding starting window for " + packageName + packageName + " / " + appToken + ": " + (view.getParent() != null ? view : null));
+ " / " + appToken + ": "
+ (view.getParent() != null ? view : null));
wm.addView(view, params); wm.addView(view, params);

View File

@@ -7902,9 +7902,11 @@ public class WindowManagerService extends IWindowManager.Stub
View view = null; View view = null;
try { try {
view = mPolicy.addStartingWindow( final Configuration overrideConfig = wtoken != null && wtoken.mTask != null
wtoken.token, sd.pkg, sd.theme, sd.compatInfo, ? wtoken.mTask.mOverrideConfig : null;
sd.nonLocalizedLabel, sd.labelRes, sd.icon, sd.logo, sd.windowFlags); view = mPolicy.addStartingWindow(wtoken.token, sd.pkg, sd.theme,
sd.compatInfo, sd.nonLocalizedLabel, sd.labelRes, sd.icon, sd.logo,
sd.windowFlags, overrideConfig);
} catch (Exception e) { } catch (Exception e) {
Slog.w(TAG_WM, "Exception when adding starting window", e); Slog.w(TAG_WM, "Exception when adding starting window", e);
} }