Merge "Dismissing popup if the underlying icon no longer supports it" into ub-launcher3-master
diff --git a/res/layout/search_result_settings_row.xml b/res/layout/search_result_settings_row.xml
index 05f7561..22c08bf 100644
--- a/res/layout/search_result_settings_row.xml
+++ b/res/layout/search_result_settings_row.xml
@@ -44,6 +44,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/search_line_spacing"
+ android:maxLines="1"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/search_hero_title_size" />
diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
index 5b42681..d049352 100644
--- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
+++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
@@ -184,8 +184,7 @@
|| viewType == VIEW_TYPE_SEARCH_THUMBNAIL
|| viewType == VIEW_TYPE_SEARCH_ICON_ROW
|| viewType == VIEW_TYPE_SEARCH_ICON
- || viewType == VIEW_TYPE_SEARCH_SUGGEST
- || viewType == VIEW_TYPE_SEARCH_WIDGET_LIVE;
+ || viewType == VIEW_TYPE_SEARCH_SUGGEST;
}
}
diff --git a/src/com/android/launcher3/allapps/AllAppsSectionDecorator.java b/src/com/android/launcher3/allapps/AllAppsSectionDecorator.java
index 3c81811..1d31975 100644
--- a/src/com/android/launcher3/allapps/AllAppsSectionDecorator.java
+++ b/src/com/android/launcher3/allapps/AllAppsSectionDecorator.java
@@ -98,7 +98,8 @@
mAppsView.getActiveRecyclerView().getLayoutManager();
if (layoutManager.findFirstVisibleItemPosition() <= index
&& index < parent.getChildCount()) {
- decorationHandler.onFocusDraw(c, parent.getChildAt(index));
+ RecyclerView.ViewHolder vh = parent.findViewHolderForAdapterPosition(index);
+ if (vh != null) decorationHandler.onFocusDraw(c, vh.itemView);
}
}
decorationHandler.reset();
diff --git a/src/com/android/launcher3/views/SearchResultWidget.java b/src/com/android/launcher3/views/SearchResultWidget.java
index 65131be..7d53955 100644
--- a/src/com/android/launcher3/views/SearchResultWidget.java
+++ b/src/com/android/launcher3/views/SearchResultWidget.java
@@ -18,18 +18,25 @@
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetProviderInfo;
import android.content.Context;
+import android.graphics.Rect;
import android.util.AttributeSet;
+import android.view.GestureDetector;
import android.view.MotionEvent;
+import android.view.View;
import android.widget.RelativeLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.launcher3.AppWidgetResizeFrame;
+import com.android.launcher3.CheckLongPressHelper;
+import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.allapps.search.AllAppsSearchBarController;
import com.android.launcher3.allapps.search.SearchEventTracker;
import com.android.launcher3.allapps.search.SearchWidgetInfoContainer;
+import com.android.launcher3.dragndrop.DraggableView;
+import com.android.launcher3.touch.ItemLongClickListener;
import com.android.launcher3.widget.PendingAddWidgetInfo;
import com.android.systemui.plugins.shared.SearchTarget;
import com.android.systemui.plugins.shared.SearchTargetEvent;
@@ -39,14 +46,19 @@
* provider
*/
public class SearchResultWidget extends RelativeLayout implements
- AllAppsSearchBarController.SearchTargetHandler {
+ AllAppsSearchBarController.SearchTargetHandler, DraggableView, View.OnLongClickListener {
private static final String TAG = "SearchResultWidget";
public static final String TARGET_TYPE_WIDGET_LIVE = "widget";
+ private final Rect mWidgetOffset = new Rect();
+
private final Launcher mLauncher;
+ private final CheckLongPressHelper mLongPressHelper;
+ private final GestureDetector mClickDetector;
private final AppWidgetHostView mHostView;
+ private final float mScaleToFit;
private SearchTarget mSearchTarget;
private AppWidgetProviderInfo mProviderInfo;
@@ -65,8 +77,18 @@
public SearchResultWidget(@NonNull Context context, @Nullable AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
- mHostView = new AppWidgetHostView(context);
mLauncher = Launcher.getLauncher(context);
+ mHostView = new AppWidgetHostView(context);
+ DeviceProfile grid = mLauncher.getDeviceProfile();
+ mScaleToFit = Math.min(grid.appWidgetScale.x, grid.appWidgetScale.y);
+
+ // detect tap event on widget container for search target event reporting
+ mClickDetector = new GestureDetector(context,
+ new ClickListener(() -> handleSelection(SearchTargetEvent.CHILD_SELECT)));
+
+ mLongPressHelper = new CheckLongPressHelper(this);
+ mLongPressHelper.setLongPressTimeoutFactor(1);
+ setOnLongClickListener(this);
}
@Override
@@ -106,8 +128,7 @@
AppWidgetResizeFrame.updateWidgetSizeRanges(mHostView, mLauncher, info.spanX,
info.spanY);
mHostView.requestLayout();
-
-
+ setTag(info);
}
/**
@@ -127,9 +148,55 @@
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
- if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+ mLongPressHelper.onTouchEvent(ev);
+ mClickDetector.onTouchEvent(ev);
+ if (ev.getAction() == MotionEvent.ACTION_UP && !mLongPressHelper.hasPerformedLongPress()) {
handleSelection(SearchTargetEvent.CHILD_SELECT);
}
return super.onInterceptTouchEvent(ev);
}
+
+
+ @Override
+ public void cancelLongPress() {
+ super.cancelLongPress();
+ mLongPressHelper.cancelLongPress();
+ }
+
+ @Override
+ public int getViewType() {
+ return DraggableView.DRAGGABLE_WIDGET;
+ }
+
+ @Override
+ public void getSourceVisualDragBounds(Rect bounds) {
+ mHostView.getHitRect(mWidgetOffset);
+ int width = (int) (mHostView.getMeasuredWidth() * mScaleToFit);
+ int height = (int) (mHostView.getMeasuredHeight() * mScaleToFit);
+ bounds.set(mWidgetOffset.left,
+ mWidgetOffset.top,
+ width + mWidgetOffset.left,
+ height + mWidgetOffset.top);
+ }
+
+ @Override
+ public boolean onLongClick(View view) {
+ ItemLongClickListener.INSTANCE_ALL_APPS.onLongClick(view);
+ handleSelection(SearchTargetEvent.LONG_PRESS);
+ return false;
+ }
+
+ static class ClickListener extends GestureDetector.SimpleOnGestureListener {
+ private final Runnable mCb;
+
+ ClickListener(Runnable cb) {
+ mCb = cb;
+ }
+
+ @Override
+ public boolean onSingleTapConfirmed(MotionEvent e) {
+ mCb.run();
+ return super.onSingleTapConfirmed(e);
+ }
+ }
}