From 81b4c7bb3c76f5f83848d536b1783e0aa75ace0d Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Mon, 26 Mar 2018 12:10:31 -0700 Subject: Adding a custom view for DragHandle > Separating page indicator and drag handle > Page indicator always draws irrespactive of oriantation > Drag handle is responsible for accessibility interactions > Adding assissibility actions for DragHandle Bug: 72500733 Change-Id: I9030337456964af1bdf77f1c01956452321f9229 --- .../pageindicators/WorkspacePageIndicator.java | 96 ++++++---------------- 1 file changed, 23 insertions(+), 73 deletions(-) (limited to 'src/com/android/launcher3/pageindicators') diff --git a/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java b/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java index 94ae39bb5..4ad7feb90 100644 --- a/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java +++ b/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java @@ -1,9 +1,5 @@ package com.android.launcher3.pageindicators; -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; - -import static com.android.launcher3.LauncherState.ALL_APPS; - import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; @@ -20,9 +16,7 @@ import android.util.AttributeSet; import android.util.Property; import android.view.Gravity; import android.view.View; -import android.view.View.OnClickListener; import android.view.ViewConfiguration; -import android.view.accessibility.AccessibilityManager; import android.widget.FrameLayout; import com.android.launcher3.DeviceProfile; @@ -31,18 +25,13 @@ import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.dynamicui.WallpaperColorInfo; -import com.android.launcher3.userevent.nano.LauncherLogProto.Action; -import com.android.launcher3.userevent.nano.LauncherLogProto.ControlType; /** - * A PageIndicator that briefly shows a fraction of a line when moving between pages in - * portrait mode. In Landscape simply draws the caret drawable bottom-corner aligned in - * the drag-layer. + * A PageIndicator that briefly shows a fraction of a line when moving between pages * * The fraction is 1 / number of pages and the position is based on the progress of the page scroll. */ -public class WorkspacePageIndicator extends View - implements Insettable, OnClickListener, PageIndicator { +public class WorkspacePageIndicator extends View implements Insettable, PageIndicator { private static final int LINE_ANIMATE_DURATION = ViewConfiguration.getScrollBarFadeDuration(); private static final int LINE_FADE_DELAY = ViewConfiguration.getScrollDefaultDelay(); @@ -57,7 +46,6 @@ public class WorkspacePageIndicator extends View private final Handler mDelayedLineFadeHandler = new Handler(Looper.getMainLooper()); private final Launcher mLauncher; - private final AccessibilityManager mAccessibilityManager; private boolean mShouldAutoHide = true; @@ -72,8 +60,6 @@ public class WorkspacePageIndicator extends View private Paint mLinePaint; private final int mLineHeight; - private boolean mIsLandscapeUi; - private static final Property PAINT_ALPHA = new Property(Integer.class, "paint_alpha") { @Override @@ -84,7 +70,7 @@ public class WorkspacePageIndicator extends View @Override public void set(WorkspacePageIndicator obj, Integer alpha) { obj.mLinePaint.setAlpha(alpha); - obj.invalidateIfPortrait(); + obj.invalidate(); } }; @@ -98,7 +84,7 @@ public class WorkspacePageIndicator extends View @Override public void set(WorkspacePageIndicator obj, Float numPages) { obj.mNumPagesFloat = numPages; - obj.invalidateIfPortrait(); + obj.invalidate(); } }; @@ -112,7 +98,7 @@ public class WorkspacePageIndicator extends View @Override public void set(WorkspacePageIndicator obj, Integer totalScroll) { obj.mTotalScroll = totalScroll; - obj.invalidateIfPortrait(); + obj.invalidate(); } }; @@ -139,24 +125,23 @@ public class WorkspacePageIndicator extends View boolean darkText = WallpaperColorInfo.getInstance(context).supportsDarkText(); mActiveAlpha = darkText ? BLACK_ALPHA : WHITE_ALPHA; mLinePaint.setColor(darkText ? Color.BLACK : Color.WHITE); - mAccessibilityManager = (AccessibilityManager) - getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); } @Override protected void onDraw(Canvas canvas) { - if (mTotalScroll == 0 || mNumPagesFloat == 0 || mIsLandscapeUi) { + if (mTotalScroll == 0 || mNumPagesFloat == 0) { return; } // Compute and draw line rect. float progress = Utilities.boundToRange(((float) mCurrentScroll) / mTotalScroll, 0f, 1f); - int availableWidth = canvas.getWidth(); + int availableWidth = getWidth(); int lineWidth = (int) (availableWidth / mNumPagesFloat); int lineLeft = (int) (progress * (availableWidth - lineWidth)); int lineRight = lineLeft + lineWidth; - canvas.drawRoundRect(lineLeft, canvas.getHeight() / 2 - mLineHeight / 2, lineRight, - canvas.getHeight() / 2 + mLineHeight / 2, mLineHeight, mLineHeight, mLinePaint); + + canvas.drawRoundRect(lineLeft, getHeight() / 2 - mLineHeight / 2, lineRight, + getHeight() / 2 + mLineHeight / 2, mLineHeight, mLineHeight, mLinePaint); } @Override @@ -172,7 +157,7 @@ public class WorkspacePageIndicator extends View } else if (mTotalScroll != totalScroll) { animateToTotalScroll(totalScroll); } else { - invalidateIfPortrait(); + invalidate(); } if (mShouldAutoHide) { @@ -191,7 +176,13 @@ public class WorkspacePageIndicator extends View @Override public void setMarkersCount(int numMarkers) { if (Float.compare(numMarkers, mNumPagesFloat) != 0) { - animateToNumPages(numMarkers); + setupAndRunAnimation(ObjectAnimator.ofFloat(this, NUM_PAGES, numMarkers), + NUM_PAGES_ANIMATOR_INDEX); + } else { + if (mAnimators[NUM_PAGES_ANIMATOR_INDEX] != null) { + mAnimators[NUM_PAGES_ANIMATOR_INDEX].cancel(); + mAnimators[NUM_PAGES_ANIMATOR_INDEX] = null; + } } } @@ -219,11 +210,6 @@ public class WorkspacePageIndicator extends View LINE_ALPHA_ANIMATOR_INDEX); } - private void animateToNumPages(int numPages) { - setupAndRunAnimation(ObjectAnimator.ofFloat(this, NUM_PAGES, numPages), - NUM_PAGES_ANIMATOR_INDEX); - } - private void animateToTotalScroll(int totalScroll) { setupAndRunAnimation(ObjectAnimator.ofInt(this, TOTAL_SCROLL, totalScroll), TOTAL_SCROLL_ANIMATOR_INDEX); @@ -254,54 +240,18 @@ public class WorkspacePageIndicator extends View @Override public void setInsets(Rect insets) { DeviceProfile grid = mLauncher.getDeviceProfile(); - mIsLandscapeUi = grid.isVerticalBarLayout(); FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams(); - if (mIsLandscapeUi) { - if (grid.isSeascape()) { - lp.leftMargin = grid.hotseatBarSidePaddingPx; - lp.rightMargin = insets.right; - lp.gravity = Gravity.RIGHT | Gravity.BOTTOM; - } else { - lp.leftMargin = insets.left; - lp.rightMargin = grid.hotseatBarSidePaddingPx; - lp.gravity = Gravity.LEFT | Gravity.BOTTOM; - } - lp.bottomMargin = grid.workspacePadding.bottom; - lp.width = lp.height = getResources() - .getDimensionPixelSize(R.dimen.dynamic_grid_min_page_indicator_size); - - setBackgroundResource(R.drawable.all_apps_handle_landscape); - setOnFocusChangeListener(mLauncher.mFocusHandler); - setOnClickListener(this); - + if (grid.isVerticalBarLayout()) { + Rect padding = grid.workspacePadding; + lp.leftMargin = padding.left + grid.workspaceCellPaddingXPx; + lp.rightMargin = padding.right + grid.workspaceCellPaddingXPx; + lp.bottomMargin = padding.bottom; } else { lp.leftMargin = lp.rightMargin = 0; lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; - lp.height = grid.pageIndicatorSizePx; lp.bottomMargin = grid.hotseatBarSizePx + insets.bottom; - lp.width = MATCH_PARENT; - - setBackgroundResource(0); - setOnFocusChangeListener(null); - setOnClickListener(mAccessibilityManager.isTouchExplorationEnabled() ? this : null); } - setLayoutParams(lp); } - - private void invalidateIfPortrait() { - if (!mIsLandscapeUi) { - invalidate(); - } - } - - @Override - public void onClick(View view) { - if (!mLauncher.isInState(ALL_APPS)) { - mLauncher.getUserEventDispatcher().logActionOnControl( - Action.Touch.TAP, ControlType.ALL_APPS_BUTTON); - mLauncher.getStateManager().goToState(ALL_APPS); - } - } } -- cgit v1.2.3