Fixing fallback recents not getting proper insets on configuration change
> Using common code for Launcher and recents for insets dispatching
> Fixing recents auto closing when there is no running task
Bug: 158750568
Bug: 159133601
Change-Id: Iee25c603a77a1ac546ada1840f3afaf5797b8802
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index ec32e62..7fc64ea 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -260,7 +260,6 @@
@Thunk
Workspace mWorkspace;
- private View mLauncherView;
@Thunk
DragLayer mDragLayer;
private DragController mDragController;
@@ -363,6 +362,7 @@
LauncherAppState app = LauncherAppState.getInstance(this);
mOldConfig = new Configuration(getResources().getConfiguration());
mModel = app.getModel();
+
mRotationHelper = new RotationHelper(this);
InvariantDeviceProfile idp = app.getInvariantDeviceProfile();
initDeviceProfile(idp);
@@ -382,8 +382,7 @@
appWidgetId -> getWorkspace().removeWidget(appWidgetId));
mAppWidgetHost.startListening();
- mLauncherView = LayoutInflater.from(this).inflate(R.layout.launcher, null);
-
+ inflateRootView(R.layout.launcher);
setupViews();
mPopupDataProvider = new PopupDataProvider(this::updateNotificationDots);
@@ -420,7 +419,7 @@
// For handling default keys
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
- setContentView(mLauncherView);
+ setContentView(getRootView());
getRootView().dispatchInsets();
// Listen for broadcasts
@@ -520,12 +519,6 @@
}
@Override
- public void reapplyUi(boolean cancelCurrentAnimation) {
- getRootView().dispatchInsets();
- super.reapplyUi(cancelCurrentAnimation);
- }
-
- @Override
public void onIdpChanged(int changeFlags, InvariantDeviceProfile idp) {
onIdpChanged(idp);
}
@@ -581,11 +574,6 @@
return mStateManager;
}
- @Override
- public <T extends View> T findViewById(int id) {
- return mLauncherView.findViewById(id);
- }
-
private LauncherCallbacks mLauncherCallbacks;
/**
@@ -1118,10 +1106,6 @@
mHotseat = findViewById(R.id.hotseat);
mHotseat.setWorkspace(mWorkspace);
- mLauncherView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
-
// Setup the drag layer
mDragLayer.setup(mDragController, mWorkspace);
@@ -1335,11 +1319,6 @@
}
@Override
- public LauncherRootView getRootView() {
- return (LauncherRootView) mLauncherView;
- }
-
- @Override
public DragLayer getDragLayer() {
return mDragLayer;
}
diff --git a/src/com/android/launcher3/LauncherRootView.java b/src/com/android/launcher3/LauncherRootView.java
index 6951ff2..51504ce 100644
--- a/src/com/android/launcher3/LauncherRootView.java
+++ b/src/com/android/launcher3/LauncherRootView.java
@@ -10,6 +10,8 @@
import android.view.ViewDebug;
import android.view.WindowInsets;
+import com.android.launcher3.statemanager.StatefulActivity;
+
import java.util.Collections;
import java.util.List;
@@ -17,7 +19,7 @@
private final Rect mTempRect = new Rect();
- private final Launcher mLauncher;
+ private final StatefulActivity mActivity;
@ViewDebug.ExportedProperty(category = "launcher")
private static final List<Rect> SYSTEM_GESTURE_EXCLUSION_RECT =
@@ -31,17 +33,17 @@
public LauncherRootView(Context context, AttributeSet attrs) {
super(context, attrs);
- mLauncher = Launcher.getLauncher(context);
+ mActivity = StatefulActivity.fromContext(context);
}
private void handleSystemWindowInsets(Rect insets) {
// Update device profile before notifying th children.
- mLauncher.getDeviceProfile().updateInsets(insets);
+ mActivity.getDeviceProfile().updateInsets(insets);
boolean resetState = !insets.equals(mInsets);
setInsets(insets);
if (resetState) {
- mLauncher.getStateManager().reapplyState(true /* cancelCurrentAnimation */);
+ mActivity.getStateManager().reapplyState(true /* cancelCurrentAnimation */);
}
}
@@ -63,7 +65,7 @@
}
public void dispatchInsets() {
- mLauncher.getDeviceProfile().updateInsets(mInsets);
+ mActivity.getDeviceProfile().updateInsets(mInsets);
super.setInsets(mInsets);
}
diff --git a/src/com/android/launcher3/statemanager/StatefulActivity.java b/src/com/android/launcher3/statemanager/StatefulActivity.java
index 0a1607c..dbe5f42 100644
--- a/src/com/android/launcher3/statemanager/StatefulActivity.java
+++ b/src/com/android/launcher3/statemanager/StatefulActivity.java
@@ -18,10 +18,13 @@
import static com.android.launcher3.LauncherState.FLAG_NON_INTERACTIVE;
import android.os.Handler;
+import android.view.LayoutInflater;
+import android.view.View;
import androidx.annotation.CallSuper;
import com.android.launcher3.BaseDraggingActivity;
+import com.android.launcher3.LauncherRootView;
import com.android.launcher3.Utilities;
import com.android.launcher3.statemanager.StateManager.AtomicAnimationFactory;
import com.android.launcher3.statemanager.StateManager.StateHandler;
@@ -38,6 +41,8 @@
private final Runnable mHandleDeferredResume = this::handleDeferredResume;
private boolean mDeferredResumePending;
+ private LauncherRootView mRootView;
+
/**
* Create handlers to control the property changes for this activity
*/
@@ -55,6 +60,23 @@
*/
public abstract StateManager<STATE_TYPE> getStateManager();
+ protected void inflateRootView(int layoutId) {
+ mRootView = (LauncherRootView) LayoutInflater.from(this).inflate(layoutId, null);
+ mRootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
+ }
+
+ @Override
+ public final LauncherRootView getRootView() {
+ return mRootView;
+ }
+
+ @Override
+ public <T extends View> T findViewById(int id) {
+ return mRootView.findViewById(id);
+ }
+
/**
* Called when transition to the state starts
*/
@@ -87,6 +109,7 @@
* the transition if requested.
*/
public void reapplyUi(boolean cancelCurrentAnimation) {
+ getRootView().dispatchInsets();
getStateManager().reapplyState(cancelCurrentAnimation);
}