diff options
Diffstat (limited to 'src/com/android/launcher3/dragndrop/DragLayer.java')
-rw-r--r-- | src/com/android/launcher3/dragndrop/DragLayer.java | 172 |
1 files changed, 53 insertions, 119 deletions
diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java index 016347b17..59d18c23a 100644 --- a/src/com/android/launcher3/dragndrop/DragLayer.java +++ b/src/com/android/launcher3/dragndrop/DragLayer.java @@ -36,9 +36,9 @@ import android.graphics.Region; import android.graphics.drawable.Drawable; import android.os.Build; import android.util.AttributeSet; -import android.util.Log; import android.view.DragEvent; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -49,12 +49,12 @@ import android.view.animation.Interpolator; import android.widget.FrameLayout; import android.widget.TextView; +import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.AppWidgetResizeFrame; import com.android.launcher3.CellLayout; import com.android.launcher3.DropTargetBar; +import com.android.launcher3.ExtendedEditText; import com.android.launcher3.InsettableFrameLayout; -import com.android.launcher3.InstallShortcutReceiver; -import com.android.launcher3.ItemInfo; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAppWidgetHostView; import com.android.launcher3.PinchToOverviewListener; @@ -68,11 +68,9 @@ import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.folder.Folder; import com.android.launcher3.folder.FolderIcon; import com.android.launcher3.keyboard.ViewGroupFocusHelper; -import com.android.launcher3.shortcuts.DeepShortcutsContainer; import com.android.launcher3.util.Thunk; import com.android.launcher3.util.TouchController; -import java.net.URISyntaxException; import java.util.ArrayList; /** @@ -90,11 +88,9 @@ public class DragLayer extends InsettableFrameLayout { @Thunk DragController mDragController; - private int mXDown, mYDown; private Launcher mLauncher; // Variables relating to resizing widgets - private final ArrayList<AppWidgetResizeFrame> mResizeFrames = new ArrayList<>(); private final boolean mIsRtl; private AppWidgetResizeFrame mCurrentResizeFrame; @@ -149,10 +145,12 @@ public class DragLayer extends InsettableFrameLayout { setChildrenDrawingOrderEnabled(true); final Resources res = getResources(); - mLeftHoverDrawable = res.getDrawable(R.drawable.page_hover_left); - mRightHoverDrawable = res.getDrawable(R.drawable.page_hover_right); - mLeftHoverDrawableActive = res.getDrawable(R.drawable.page_hover_left_active); - mRightHoverDrawableActive = res.getDrawable(R.drawable.page_hover_right_active); + if (FeatureFlags.LAUNCHER3_LEGACY_WORKSPACE_DND) { + mLeftHoverDrawable = res.getDrawable(R.drawable.page_hover_left); + mRightHoverDrawable = res.getDrawable(R.drawable.page_hover_right); + mLeftHoverDrawableActive = res.getDrawable(R.drawable.page_hover_left_active); + mRightHoverDrawableActive = res.getDrawable(R.drawable.page_hover_right_active); + } mIsRtl = Utilities.isRtl(res); mFocusIndicatorHelper = new ViewGroupFocusHelper(this); } @@ -183,18 +181,13 @@ public class DragLayer extends InsettableFrameLayout { } public boolean isEventOverPageIndicator(MotionEvent ev) { - getDescendantRectRelativeToSelf(mLauncher.getWorkspace().getPageIndicator(), mHitRect); - return mHitRect.contains((int) ev.getX(), (int) ev.getY()); + return isEventOverView(mLauncher.getWorkspace().getPageIndicator(), ev); } public boolean isEventOverHotseat(MotionEvent ev) { return isEventOverView(mLauncher.getHotseat(), ev); } - private boolean isEventOverFolderTextRegion(Folder folder, MotionEvent ev) { - return isEventOverView(folder.getEditTextRegion(), ev); - } - private boolean isEventOverFolder(Folder folder, MotionEvent ev) { return isEventOverView(folder, ev); } @@ -209,62 +202,27 @@ public class DragLayer extends InsettableFrameLayout { } private boolean handleTouchDown(MotionEvent ev, boolean intercept) { - Rect hitRect = new Rect(); - int x = (int) ev.getX(); - int y = (int) ev.getY(); - - for (AppWidgetResizeFrame child: mResizeFrames) { - child.getHitRect(hitRect); - if (hitRect.contains(x, y)) { - if (child.beginResizeIfPointInRegion(x - child.getLeft(), y - child.getTop())) { - mCurrentResizeFrame = child; - mXDown = x; - mYDown = y; - requestDisallowInterceptTouchEvent(true); + AbstractFloatingView topView = AbstractFloatingView.getTopOpenView(mLauncher); + if (topView != null && intercept) { + ExtendedEditText textView = topView.getActiveTextView(); + if (textView != null) { + if (!isEventOverView(textView, ev)) { + textView.dispatchBackKey(); return true; } - } - } - - // Remove the shortcuts container when touching outside of it. - DeepShortcutsContainer deepShortcutsContainer = mLauncher.getOpenShortcutsContainer(); - if (deepShortcutsContainer != null) { - if (isEventOverView(deepShortcutsContainer, ev)) { - // Let the container handle the event. - return false; - } else { + } else if (!isEventOverView(topView, ev)) { if (isInAccessibleDrag()) { // Do not close the container if in drag and drop. if (!isEventOverDropTargetBar(ev)) { return true; } } else { - mLauncher.closeShortcutsContainer(); + topView.close(true); + // We let touches on the original icon go through so that users can launch // the app with one tap if they don't find a shortcut they want. - return !isEventOverView(deepShortcutsContainer.getDeferredDragIcon(), ev); - } - } - } - - Folder currentFolder = mLauncher.getWorkspace().getOpenFolder(); - if (currentFolder != null && intercept) { - if (currentFolder.isEditingName()) { - if (!isEventOverFolderTextRegion(currentFolder, ev)) { - currentFolder.dismissEditingName(); - return true; - } - } - - if (!isEventOverFolder(currentFolder, ev)) { - if (isInAccessibleDrag()) { - // Do not close the folder if in drag and drop. - if (!isEventOverDropTargetBar(ev)) { - return true; - } - } else { - mLauncher.closeFolder(); - return true; + View extendedTouch = topView.getExtendedTouchView(); + return extendedTouch == null || !isEventOverView(extendedTouch, ev); } } } @@ -289,21 +247,27 @@ public class DragLayer extends InsettableFrameLayout { } mTouchCompleteListener = null; } - clearAllResizeFrames(); - mActiveController = null; - if (mDragController.onInterceptTouchEvent(ev)) { + if (mCurrentResizeFrame != null + && mCurrentResizeFrame.onControllerInterceptTouchEvent(ev)) { + mActiveController = mCurrentResizeFrame; + return true; + } else { + clearResizeFrame(); + } + + if (mDragController.onControllerInterceptTouchEvent(ev)) { mActiveController = mDragController; return true; } - if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP && mAllAppsController.onInterceptTouchEvent(ev)) { + if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP && mAllAppsController.onControllerInterceptTouchEvent(ev)) { mActiveController = mAllAppsController; return true; } - if (mPinchListener != null && mPinchListener.onInterceptTouchEvent(ev)) { + if (mPinchListener != null && mPinchListener.onControllerInterceptTouchEvent(ev)) { // Stop listening for scrolling etc. (onTouchEvent() handles the rest of the pinch.) mActiveController = mPinchListener; return true; @@ -316,7 +280,7 @@ public class DragLayer extends InsettableFrameLayout { if (mLauncher == null || mLauncher.getWorkspace() == null) { return false; } - Folder currentFolder = mLauncher.getWorkspace().getOpenFolder(); + Folder currentFolder = Folder.getOpen(mLauncher); if (currentFolder == null) { return false; } else { @@ -366,7 +330,7 @@ public class DragLayer extends InsettableFrameLayout { @Override public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) { // Shortcuts can appear above folder - View topView = mLauncher.getTopFloatingView(); + View topView = AbstractFloatingView.getTopOpenView(mLauncher); if (topView != null) { if (child == topView) { return super.onRequestSendAccessibilityEvent(child, event); @@ -383,7 +347,7 @@ public class DragLayer extends InsettableFrameLayout { @Override public void addChildrenForAccessibility(ArrayList<View> childrenForAccessibility) { - View topView = mLauncher.getTopFloatingView(); + View topView = AbstractFloatingView.getTopOpenView(mLauncher); if (topView != null) { // Only add the top view as a child for accessibility when it is open childrenForAccessibility.add(topView); @@ -405,12 +369,8 @@ public class DragLayer extends InsettableFrameLayout { @Override public boolean onTouchEvent(MotionEvent ev) { - boolean handled = false; int action = ev.getAction(); - int x = (int) ev.getX(); - int y = (int) ev.getY(); - if (action == MotionEvent.ACTION_DOWN) { if (handleTouchDown(ev, false)) { return true; @@ -422,22 +382,8 @@ public class DragLayer extends InsettableFrameLayout { mTouchCompleteListener = null; } - if (mCurrentResizeFrame != null) { - handled = true; - switch (action) { - case MotionEvent.ACTION_MOVE: - mCurrentResizeFrame.visualizeResizeForDelta(x - mXDown, y - mYDown); - break; - case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_UP: - mCurrentResizeFrame.visualizeResizeForDelta(x - mXDown, y - mYDown); - mCurrentResizeFrame.onTouchUp(); - mCurrentResizeFrame = null; - } - } - if (handled) return true; if (mActiveController != null) { - return mActiveController.onTouchEvent(ev); + return mActiveController.onControllerTouchEvent(ev); } return false; } @@ -534,7 +480,7 @@ public class DragLayer extends InsettableFrameLayout { /** * Inverse of {@link #getDescendantCoordRelativeToSelf(View, int[])}. */ - public float mapCoordInSelfToDescendent(View descendant, int[] coord) { + public float mapCoordInSelfToDescendant(View descendant, int[] coord) { return Utilities.mapCoordInSelfToDescendent(descendant, this, coord); } @@ -556,7 +502,7 @@ public class DragLayer extends InsettableFrameLayout { @Override public boolean dispatchUnhandledMove(View focused, int direction) { // Consume the unhandled move if a container is open, to avoid switching pages underneath. - boolean isContainerOpen = mLauncher.getTopFloatingView() != null; + boolean isContainerOpen = AbstractFloatingView.getTopOpenView(mLauncher) != null; return isContainerOpen || mDragController.dispatchUnhandledMove(focused, direction); } @@ -645,36 +591,24 @@ public class DragLayer extends InsettableFrameLayout { } } - public void clearAllResizeFrames() { - if (mResizeFrames.size() > 0) { - for (AppWidgetResizeFrame frame: mResizeFrames) { - frame.commitResize(); - removeView(frame); - } - mResizeFrames.clear(); + public void clearResizeFrame() { + if (mCurrentResizeFrame != null) { + mCurrentResizeFrame.commitResize(); + removeView(mCurrentResizeFrame); + mCurrentResizeFrame = null; } } - public boolean hasResizeFrames() { - return mResizeFrames.size() > 0; - } - - public boolean isWidgetBeingResized() { - return mCurrentResizeFrame != null; - } - - public void addResizeFrame(ItemInfo itemInfo, LauncherAppWidgetHostView widget, - CellLayout cellLayout) { - AppWidgetResizeFrame resizeFrame = new AppWidgetResizeFrame(getContext(), - widget, cellLayout, this); - - LayoutParams lp = new LayoutParams(-1, -1); - lp.customPosition = true; + public void addResizeFrame(LauncherAppWidgetHostView widget, CellLayout cellLayout) { + clearResizeFrame(); - addView(resizeFrame, lp); - mResizeFrames.add(resizeFrame); + mCurrentResizeFrame = (AppWidgetResizeFrame) LayoutInflater.from(mLauncher) + .inflate(R.layout.app_widget_resize_frame, this, false); + mCurrentResizeFrame.setupForWidget(widget, cellLayout, this); + ((LayoutParams) mCurrentResizeFrame.getLayoutParams()).customPosition = true; - resizeFrame.snapToWidget(false); + addView(mCurrentResizeFrame); + mCurrentResizeFrame.snapToWidget(false); } public void animateViewIntoPosition(DragView dragView, final int[] pos, float alpha, @@ -1077,7 +1011,7 @@ public class DragLayer extends InsettableFrameLayout { @Override protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) { - View topView = mLauncher.getTopFloatingView(); + View topView = AbstractFloatingView.getTopOpenView(mLauncher); if (topView != null) { return topView.requestFocus(direction, previouslyFocusedRect); } else { @@ -1087,7 +1021,7 @@ public class DragLayer extends InsettableFrameLayout { @Override public void addFocusables(ArrayList<View> views, int direction, int focusableMode) { - View topView = mLauncher.getTopFloatingView(); + View topView = AbstractFloatingView.getTopOpenView(mLauncher); if (topView != null) { topView.addFocusables(views, direction); } else { |