Merge "Notify split controller about activity configuration change" into sc-v2-dev

This commit is contained in:
Andrii Kulian
2021-07-28 01:52:21 +00:00
committed by Android (Google) Code Review
3 changed files with 53 additions and 0 deletions

View File

@@ -1539,6 +1539,17 @@ public class Activity extends ContextThemeWrapper
getApplication().dispatchActivityPostDestroyed(this);
}
private void dispatchActivityConfigurationChanged() {
getApplication().dispatchActivityConfigurationChanged(this);
Object[] callbacks = collectActivityLifecycleCallbacks();
if (callbacks != null) {
for (int i = 0; i < callbacks.length; i++) {
((Application.ActivityLifecycleCallbacks) callbacks[i])
.onActivityConfigurationChanged(this);
}
}
}
private Object[] collectActivityLifecycleCallbacks() {
Object[] callbacks = null;
synchronized (mActivityLifecycleCallbacks) {
@@ -3028,6 +3039,8 @@ public class Activity extends ContextThemeWrapper
// view changes from above.
mActionBar.onConfigurationChanged(newConfig);
}
dispatchActivityConfigurationChanged();
}
/**

View File

@@ -205,6 +205,13 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 {
*/
default void onActivityPostDestroyed(@NonNull Activity activity) {
}
/**
* Called when the Activity configuration was changed.
* @hide
*/
default void onActivityConfigurationChanged(@NonNull Activity activity) {
}
}
/**
@@ -554,6 +561,16 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 {
}
}
/* package */ void dispatchActivityConfigurationChanged(@NonNull Activity activity) {
Object[] callbacks = collectActivityLifecycleCallbacks();
if (callbacks != null) {
for (int i = 0; i < callbacks.length; i++) {
((ActivityLifecycleCallbacks) callbacks[i]).onActivityConfigurationChanged(
activity);
}
}
}
@UnsupportedAppUsage
private Object[] collectActivityLifecycleCallbacks() {
Object[] callbacks = null;

View File

@@ -212,6 +212,20 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
updateCallbackIfNecessary();
}
private void onActivityConfigurationChanged(@NonNull Activity activity) {
final TaskFragmentContainer currentContainer = getContainerWithActivity(
activity.getActivityToken());
if (currentContainer != null) {
// Changes to activities in controllers are handled in
// onTaskFragmentParentInfoChanged
return;
}
// Check if activity requires a placeholder
launchPlaceholderIfNecessary(activity);
}
/**
* Returns a container that this activity is registered with. An activity can only belong to one
* container, or no container at all.
@@ -545,6 +559,10 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityPostCreated(Activity activity, Bundle savedInstanceState) {
// Calling after Activity#onCreate is complete to allow the app launch something
// first. In case of a configured placeholder activity we want to make sure
// that we don't launch it if an activity itself already requested something to be
@@ -575,5 +593,10 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
@Override
public void onActivityDestroyed(Activity activity) {
}
@Override
public void onActivityConfigurationChanged(Activity activity) {
SplitController.this.onActivityConfigurationChanged(activity);
}
}
}