Merge "Try to reland Ib3ee007bc" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7f801fe0d1
@@ -236,7 +236,7 @@ public class Presentation extends Dialog {
|
|||||||
// to be rare but surprising, so we'll write a log message about it.
|
// to be rare but surprising, so we'll write a log message about it.
|
||||||
if (!isConfigurationStillValid()) {
|
if (!isConfigurationStillValid()) {
|
||||||
Log.i(TAG, "Presentation is being dismissed because the "
|
Log.i(TAG, "Presentation is being dismissed because the "
|
||||||
+ "display metrics have changed since it was created.");
|
+ "display metrics have changed since it was created while onStart.");
|
||||||
mHandler.sendEmptyMessage(MSG_CANCEL);
|
mHandler.sendEmptyMessage(MSG_CANCEL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -296,8 +296,8 @@ public class Presentation extends Dialog {
|
|||||||
// is invalid and the application must recreate the presentation to get
|
// is invalid and the application must recreate the presentation to get
|
||||||
// a new context.
|
// a new context.
|
||||||
if (!isConfigurationStillValid()) {
|
if (!isConfigurationStillValid()) {
|
||||||
Log.i(TAG, "Presentation is being dismissed because the "
|
Log.i(TAG, "Presentation is being dismissed because the display metrics have changed "
|
||||||
+ "display metrics have changed since it was created.");
|
+ "since it was created while handleDisplayChanged.");
|
||||||
cancel();
|
cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1111,7 +1111,6 @@ public class ResourcesManager {
|
|||||||
}
|
}
|
||||||
int displayId = key.mDisplayId;
|
int displayId = key.mDisplayId;
|
||||||
final boolean hasOverrideConfiguration = key.hasOverrideConfiguration();
|
final boolean hasOverrideConfiguration = key.hasOverrideConfiguration();
|
||||||
tmpConfig.setTo(config);
|
|
||||||
|
|
||||||
// Get new DisplayMetrics based on the DisplayAdjustments given to the ResourcesImpl. Update
|
// Get new DisplayMetrics based on the DisplayAdjustments given to the ResourcesImpl. Update
|
||||||
// a copy if the CompatibilityInfo changed, because the ResourcesImpl object will handle the
|
// a copy if the CompatibilityInfo changed, because the ResourcesImpl object will handle the
|
||||||
@@ -1121,17 +1120,15 @@ public class ResourcesManager {
|
|||||||
daj = new DisplayAdjustments(daj);
|
daj = new DisplayAdjustments(daj);
|
||||||
daj.setCompatibilityInfo(compat);
|
daj.setCompatibilityInfo(compat);
|
||||||
}
|
}
|
||||||
if (displayId == Display.DEFAULT_DISPLAY) {
|
tmpConfig.setTo(config);
|
||||||
daj.setConfiguration(config);
|
|
||||||
}
|
|
||||||
DisplayMetrics dm = getDisplayMetrics(displayId, daj);
|
|
||||||
if (displayId != Display.DEFAULT_DISPLAY) {
|
|
||||||
applyNonDefaultDisplayMetricsToConfiguration(dm, tmpConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasOverrideConfiguration) {
|
if (hasOverrideConfiguration) {
|
||||||
tmpConfig.updateFrom(key.mOverrideConfiguration);
|
tmpConfig.updateFrom(key.mOverrideConfiguration);
|
||||||
}
|
}
|
||||||
|
// Only apply for default display
|
||||||
|
if (displayId == Display.DEFAULT_DISPLAY) {
|
||||||
|
daj.setConfiguration(tmpConfig);
|
||||||
|
}
|
||||||
|
DisplayMetrics dm = getDisplayMetrics(displayId, daj);
|
||||||
resourcesImpl.updateConfiguration(tmpConfig, dm, compat);
|
resourcesImpl.updateConfiguration(tmpConfig, dm, compat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,10 @@ import android.app.servertransaction.ResumeActivityItem;
|
|||||||
import android.app.servertransaction.StopActivityItem;
|
import android.app.servertransaction.StopActivityItem;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
import android.util.MergedConfiguration;
|
import android.util.MergedConfiguration;
|
||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -306,6 +309,58 @@ public class ActivityThreadTest {
|
|||||||
assertEquals(400, activity.mConfig.smallestScreenWidthDp);
|
assertEquals(400, activity.mConfig.smallestScreenWidthDp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHandleConfigurationChangedDoesntOverrideActivityConfig() {
|
||||||
|
final TestActivity activity = mActivityTestRule.launchActivity(new Intent());
|
||||||
|
|
||||||
|
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
|
||||||
|
final Configuration oldActivityConfig =
|
||||||
|
new Configuration(activity.getResources().getConfiguration());
|
||||||
|
final DisplayMetrics oldActivityMetrics = new DisplayMetrics();
|
||||||
|
activity.getDisplay().getMetrics(oldActivityMetrics);
|
||||||
|
final Resources oldAppResources = activity.getApplication().getResources();
|
||||||
|
final Configuration oldAppConfig =
|
||||||
|
new Configuration(oldAppResources.getConfiguration());
|
||||||
|
final DisplayMetrics oldApplicationMetrics = new DisplayMetrics();
|
||||||
|
oldApplicationMetrics.setTo(oldAppResources.getDisplayMetrics());
|
||||||
|
assertEquals("Process config must match the top activity config by default",
|
||||||
|
0, oldActivityConfig.diffPublicOnly(oldAppConfig));
|
||||||
|
assertEquals("Process config must match the top activity config by default",
|
||||||
|
oldActivityMetrics, oldApplicationMetrics);
|
||||||
|
|
||||||
|
// Update the application configuration separately from activity config
|
||||||
|
final Configuration newAppConfig = new Configuration(oldAppConfig);
|
||||||
|
newAppConfig.densityDpi += 100;
|
||||||
|
newAppConfig.screenHeightDp += 100;
|
||||||
|
final Rect newBounds = new Rect(newAppConfig.windowConfiguration.getAppBounds());
|
||||||
|
newBounds.bottom += 100;
|
||||||
|
newAppConfig.windowConfiguration.setAppBounds(newBounds);
|
||||||
|
newAppConfig.windowConfiguration.setBounds(newBounds);
|
||||||
|
newAppConfig.seq++;
|
||||||
|
|
||||||
|
final ActivityThread activityThread = activity.getActivityThread();
|
||||||
|
activityThread.handleConfigurationChanged(newAppConfig);
|
||||||
|
|
||||||
|
// Verify that application config update was applied, but didn't change activity config.
|
||||||
|
assertEquals("Activity config must not change if the process config changes",
|
||||||
|
oldActivityConfig, activity.getResources().getConfiguration());
|
||||||
|
|
||||||
|
final DisplayMetrics newActivityMetrics = new DisplayMetrics();
|
||||||
|
activity.getDisplay().getMetrics(newActivityMetrics);
|
||||||
|
assertEquals("Activity display size must not change if the process config changes",
|
||||||
|
oldActivityMetrics, newActivityMetrics);
|
||||||
|
final Resources newAppResources = activity.getApplication().getResources();
|
||||||
|
assertEquals("Application config must be updated",
|
||||||
|
newAppConfig, newAppResources.getConfiguration());
|
||||||
|
final DisplayMetrics newApplicationMetrics = new DisplayMetrics();
|
||||||
|
newApplicationMetrics.setTo(newAppResources.getDisplayMetrics());
|
||||||
|
assertNotEquals("Application display size must be updated after config update",
|
||||||
|
oldApplicationMetrics, newApplicationMetrics);
|
||||||
|
assertNotEquals("Application display size must be updated after config update",
|
||||||
|
newActivityMetrics, newApplicationMetrics);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testResumeAfterNewIntent() {
|
public void testResumeAfterNewIntent() {
|
||||||
final Activity activity = mActivityTestRule.launchActivity(new Intent());
|
final Activity activity = mActivityTestRule.launchActivity(new Intent());
|
||||||
@@ -406,7 +461,10 @@ public class ActivityThreadTest {
|
|||||||
|
|
||||||
private static ClientTransaction newRelaunchResumeTransaction(Activity activity) {
|
private static ClientTransaction newRelaunchResumeTransaction(Activity activity) {
|
||||||
final ClientTransactionItem callbackItem = ActivityRelaunchItem.obtain(null,
|
final ClientTransactionItem callbackItem = ActivityRelaunchItem.obtain(null,
|
||||||
null, 0, new MergedConfiguration(), false /* preserveWindow */);
|
null, 0, new MergedConfiguration(
|
||||||
|
activity.getApplication().getResources().getConfiguration(),
|
||||||
|
new Configuration()),
|
||||||
|
false /* preserveWindow */);
|
||||||
final ResumeActivityItem resumeStateRequest =
|
final ResumeActivityItem resumeStateRequest =
|
||||||
ResumeActivityItem.obtain(true /* isForward */);
|
ResumeActivityItem.obtain(true /* isForward */);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user