From 1a77c3dce1925bdba572341c973e30ca7bb8e693 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 11 Apr 2018 12:47:47 -0700 Subject: [PATCH] Reload the task list when multiwindow mode changes Bug: 73097187 Change-Id: I05d8635f78451600cbb8a9c03515e60d3c32e1ae --- .../android/quickstep/views/RecentsView.java | 11 +++++++++ src/com/android/launcher3/BaseActivity.java | 23 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 74e5959922..d214b13f43 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -79,6 +79,7 @@ import com.android.systemui.shared.system.ActivityManagerWrapper; import com.android.systemui.shared.system.TaskStackChangeListener; import java.util.ArrayList; +import java.util.function.Consumer; /** * A list of recent tasks. @@ -188,6 +189,14 @@ public abstract class RecentsView private boolean mShowEmptyMessage; private Layout mEmptyTextLayout; + private BaseActivity.MultiWindowModeChangedListener mMultiWindowModeChangedListener = + (inMultiWindowMode) -> { + if (!inMultiWindowMode && mOverviewStateEnabled) { + // TODO: Re-enable layout transitions for addition of the unpinned task + reloadIfNeeded(); + } + }; + public RecentsView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setPageSpacing(getResources().getDimensionPixelSize(R.dimen.recents_page_spacing)); @@ -251,6 +260,7 @@ public abstract class RecentsView super.onAttachedToWindow(); updateTaskStackListenerState(); Utilities.getPrefs(getContext()).registerOnSharedPreferenceChangeListener(this); + mActivity.addMultiWindowModeChangedListener(mMultiWindowModeChangedListener); } @Override @@ -258,6 +268,7 @@ public abstract class RecentsView super.onDetachedFromWindow(); updateTaskStackListenerState(); Utilities.getPrefs(getContext()).unregisterOnSharedPreferenceChangeListener(this); + mActivity.removeMultiWindowModeChangedListener(mMultiWindowModeChangedListener); } @Override diff --git a/src/com/android/launcher3/BaseActivity.java b/src/com/android/launcher3/BaseActivity.java index ae631a4466..c15cde5f94 100644 --- a/src/com/android/launcher3/BaseActivity.java +++ b/src/com/android/launcher3/BaseActivity.java @@ -20,6 +20,7 @@ import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; +import android.content.res.Configuration; import android.graphics.Point; import android.view.Display; import android.view.View.AccessibilityDelegate; @@ -33,6 +34,8 @@ import java.util.ArrayList; public abstract class BaseActivity extends Activity { private final ArrayList mDPChangeListeners = new ArrayList<>(); + private final ArrayList mMultiWindowModeChangedListeners = + new ArrayList<>(); protected DeviceProfile mDeviceProfile; protected UserEventDispatcher mUserEventDispatcher; @@ -100,6 +103,14 @@ public abstract class BaseActivity extends Activity { super.onUserLeaveHint(); } + @Override + public void onMultiWindowModeChanged(boolean isInMultiWindowMode, Configuration newConfig) { + super.onMultiWindowModeChanged(isInMultiWindowMode, newConfig); + for (int i = mMultiWindowModeChangedListeners.size() - 1; i >= 0; i--) { + mMultiWindowModeChangedListeners.get(i).onMultiWindowModeChanged(isInMultiWindowMode); + } + } + @Override protected void onStop() { mStarted = false; @@ -129,6 +140,14 @@ public abstract class BaseActivity extends Activity { } } + public void addMultiWindowModeChangedListener(MultiWindowModeChangedListener listener) { + mMultiWindowModeChangedListeners.add(listener); + } + + public void removeMultiWindowModeChangedListener(MultiWindowModeChangedListener listener) { + mMultiWindowModeChangedListeners.remove(listener); + } + /** * Used to set the override visibility state, used only to handle the transition home with the * recents animation. @@ -157,4 +176,8 @@ public abstract class BaseActivity extends Activity { mDeviceProfile = mDeviceProfile.getMultiWindowProfile(this, mwSize); } } + + public interface MultiWindowModeChangedListener { + void onMultiWindowModeChanged(boolean isInMultiWindowMode); + } }