summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/allapps
diff options
context:
space:
mode:
authorTony Wickham <twickham@google.com>2018-10-12 17:42:51 -0700
committerTony Wickham <twickham@google.com>2018-10-16 17:22:09 -0700
commit5c5c118c48f1201db04456fea218a9ee73b3af7f (patch)
tree84cbcb515968a17e6d5fcfa622b9e2c8342ef515 /src/com/android/launcher3/allapps
parent55ba0dcaaf65ca6a9ce8f973d100b4619724d3b4 (diff)
downloadandroid_packages_apps_Trebuchet-5c5c118c48f1201db04456fea218a9ee73b3af7f.tar.gz
android_packages_apps_Trebuchet-5c5c118c48f1201db04456fea218a9ee73b3af7f.tar.bz2
android_packages_apps_Trebuchet-5c5c118c48f1201db04456fea218a9ee73b3af7f.zip
Add AllAppsRow plugin interface
Bug: 115877296 Change-Id: I750941f220d08ca9ee14067253253f6d81417101
Diffstat (limited to 'src/com/android/launcher3/allapps')
-rw-r--r--src/com/android/launcher3/allapps/FloatingHeaderView.java68
1 files changed, 63 insertions, 5 deletions
diff --git a/src/com/android/launcher3/allapps/FloatingHeaderView.java b/src/com/android/launcher3/allapps/FloatingHeaderView.java
index 5348349f4..90e195b2b 100644
--- a/src/com/android/launcher3/allapps/FloatingHeaderView.java
+++ b/src/com/android/launcher3/allapps/FloatingHeaderView.java
@@ -25,16 +25,22 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Interpolator;
import android.widget.LinearLayout;
-
-import com.android.launcher3.R;
-import com.android.launcher3.anim.PropertySetter;
-
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
+import com.android.launcher3.R;
+import com.android.launcher3.anim.PropertySetter;
+import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
+import com.android.systemui.plugins.AllAppsRow;
+import com.android.systemui.plugins.PluginListener;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public class FloatingHeaderView extends LinearLayout implements
- ValueAnimator.AnimatorUpdateListener {
+ ValueAnimator.AnimatorUpdateListener, PluginListener<AllAppsRow> {
private final Rect mClip = new Rect(0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE);
private final ValueAnimator mAnimator = ValueAnimator.ofInt(0, 0);
@@ -64,6 +70,9 @@ public class FloatingHeaderView extends LinearLayout implements
private AllAppsRecyclerView mMainRV;
private AllAppsRecyclerView mWorkRV;
private AllAppsRecyclerView mCurrentRV;
+ protected final Map<AllAppsRow, View> mPluginRows;
+ // Contains just the values of the above map so we can iterate without extracting a new list.
+ protected final List<View> mPluginRowViews;
private ViewGroup mParent;
private boolean mHeaderCollapsed;
private int mSnappedScrolledY;
@@ -82,6 +91,8 @@ public class FloatingHeaderView extends LinearLayout implements
public FloatingHeaderView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
+ mPluginRows = new HashMap<>();
+ mPluginRowViews = new ArrayList<>();
}
@Override
@@ -90,6 +101,38 @@ public class FloatingHeaderView extends LinearLayout implements
mTabLayout = findViewById(R.id.tabs);
}
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ PluginManagerWrapper.INSTANCE.get(getContext()).addPluginListener(this,
+ AllAppsRow.class, true /* allowMultiple */);
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ PluginManagerWrapper.INSTANCE.get(getContext()).removePluginListener(this);
+ }
+
+ @Override
+ public void onPluginConnected(AllAppsRow allAppsRowPlugin, Context context) {
+ mPluginRows.put(allAppsRowPlugin, null);
+ setupPluginRows();
+ allAppsRowPlugin.setOnHeightUpdatedListener(this::onPluginRowHeightUpdated);
+ }
+
+ protected void onPluginRowHeightUpdated() {
+ }
+
+ @Override
+ public void onPluginDisconnected(AllAppsRow plugin) {
+ View pluginRowView = mPluginRows.get(plugin);
+ removeView(pluginRowView);
+ mPluginRows.remove(plugin);
+ mPluginRowViews.remove(pluginRowView);
+ onPluginRowHeightUpdated();
+ }
+
public void setup(AllAppsContainerView.AdapterHolder[] mAH, boolean tabsHidden) {
mTabsHidden = tabsHidden;
mTabLayout.setVisibility(tabsHidden ? View.GONE : View.VISIBLE);
@@ -97,9 +140,24 @@ public class FloatingHeaderView extends LinearLayout implements
mWorkRV = setupRV(mWorkRV, mAH[AllAppsContainerView.AdapterHolder.WORK].recyclerView);
mParent = (ViewGroup) mMainRV.getParent();
setMainActive(mMainRVActive || mWorkRV == null);
+ setupPluginRows();
reset(false);
}
+ private void setupPluginRows() {
+ for (Map.Entry<AllAppsRow, View> rowPluginEntry : mPluginRows.entrySet()) {
+ if (rowPluginEntry.getValue() == null) {
+ View pluginRow = rowPluginEntry.getKey().setup(this);
+ addView(pluginRow, indexOfChild(mTabLayout));
+ rowPluginEntry.setValue(pluginRow);
+ mPluginRowViews.add(pluginRow);
+ }
+ }
+ for (View plugin : mPluginRowViews) {
+ plugin.setVisibility(mHeaderCollapsed ? GONE : VISIBLE);
+ }
+ }
+
private AllAppsRecyclerView setupRV(AllAppsRecyclerView old, AllAppsRecyclerView updated) {
if (old != updated && updated != null ) {
updated.addOnScrollListener(mOnScrollListener);