Change all apps caret target bounding box

b/30400751

1) This also fixes the issue of apps drawer sliding up when page is swiped
horizontally immediately above the hotseat area.

2) Disclaimer: this should be cp'ed to calgary.
Hence, I tried to keep the diff small. Ideally, CaretDrawable animation
handling should move to AllAppsHandleImageView via refactoring in
follow up CL.

Change-Id: I4d808ee2eeca53b40c0b4e4e0e364fef056e26c3
This commit is contained in:
Hyunyoung Song
2016-09-07 14:45:09 -07:00
parent 61bcfba335
commit 016eaeea99
8 changed files with 61 additions and 52 deletions
+2 -4
View File
@@ -56,10 +56,8 @@
<!-- Keep these behind the workspace so that they are not visible when <!-- Keep these behind the workspace so that they are not visible when
we go into AllApps --> we go into AllApps -->
<com.android.launcher3.pageindicators.PageIndicatorLineCaret <include layout="@layout/page_indicator"
android:id="@+id/page_indicator" android:id="@+id/page_indicator" />
android:layout_width="match_parent"
android:layout_height="@dimen/dynamic_grid_page_indicator_height" />
<include <include
android:id="@+id/drop_target_bar" android:id="@+id/drop_target_bar"
+2 -4
View File
@@ -59,10 +59,8 @@
<!-- Keep these behind the workspace so that they are not visible when <!-- Keep these behind the workspace so that they are not visible when
we go into AllApps --> we go into AllApps -->
<com.android.launcher3.pageindicators.PageIndicatorLineCaret <include layout="@layout/page_indicator"
android:id="@+id/page_indicator" android:id="@+id/page_indicator" />
android:layout_width="match_parent"
android:layout_height="@dimen/dynamic_grid_page_indicator_height" />
<include <include
layout="@layout/qsb_container" layout="@layout/qsb_container"
+27
View File
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<com.android.launcher3.pageindicators.PageIndicatorLineCaret
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/dynamic_grid_page_indicator_height">
<ImageView
android:id="@+id/all_apps_handle"
android:layout_width="48dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:scaleType="centerInside"/>
</com.android.launcher3.pageindicators.PageIndicatorLineCaret>
-1
View File
@@ -19,7 +19,6 @@
<dimen name="dynamic_grid_edge_margin">8dp</dimen> <dimen name="dynamic_grid_edge_margin">8dp</dimen>
<dimen name="dynamic_grid_page_indicator_height">28dp</dimen> <dimen name="dynamic_grid_page_indicator_height">28dp</dimen>
<dimen name="dynamic_grid_page_indicator_line_height">1dp</dimen> <dimen name="dynamic_grid_page_indicator_line_height">1dp</dimen>
<dimen name="dynamic_grid_page_indicator_extra_touch_height">12dp</dimen>
<dimen name="dynamic_grid_page_indicator_gutter_width_left_nav_bar">38dp</dimen> <dimen name="dynamic_grid_page_indicator_gutter_width_left_nav_bar">38dp</dimen>
<dimen name="dynamic_grid_page_indicator_gutter_width_right_nav_bar">48dp</dimen> <dimen name="dynamic_grid_page_indicator_gutter_width_right_nav_bar">48dp</dimen>
<dimen name="dynamic_grid_icon_drawable_padding">8dp</dimen> <dimen name="dynamic_grid_icon_drawable_padding">8dp</dimen>
@@ -533,7 +533,6 @@ public class DeviceProfile {
} else { } else {
// Put the page indicators above the hotseat // Put the page indicators above the hotseat
lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
lp.width = LayoutParams.WRAP_CONTENT;
lp.height = pageIndicatorHeightPx; lp.height = pageIndicatorHeightPx;
lp.bottomMargin = hotseatBarHeightPx + mInsets.bottom; lp.bottomMargin = hotseatBarHeightPx + mInsets.bottom;
} }
@@ -37,6 +37,7 @@ public class CaretDrawable extends Drawable {
private Paint mShadowPaint = new Paint(); private Paint mShadowPaint = new Paint();
private Paint mCaretPaint = new Paint(); private Paint mCaretPaint = new Paint();
private Path mPath = new Path(); private Path mPath = new Path();
private final int mCaretSizePx;
public CaretDrawable(Context context) { public CaretDrawable(Context context) {
final Resources res = context.getResources(); final Resources res = context.getResources();
@@ -57,6 +58,18 @@ public class CaretDrawable extends Drawable {
mShadowPaint.setStyle(Paint.Style.STROKE); mShadowPaint.setStyle(Paint.Style.STROKE);
mShadowPaint.setStrokeCap(Paint.Cap.ROUND); mShadowPaint.setStrokeCap(Paint.Cap.ROUND);
mShadowPaint.setStrokeJoin(Paint.Join.ROUND); mShadowPaint.setStrokeJoin(Paint.Join.ROUND);
mCaretSizePx = res.getDimensionPixelSize(R.dimen.all_apps_caret_size);
}
@Override
public int getIntrinsicHeight() {
return mCaretSizePx;
}
@Override
public int getIntrinsicWidth() {
return mCaretSizePx;
} }
@Override @Override
@@ -18,20 +18,21 @@ package com.android.launcher3.pageindicators;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.widget.FrameLayout;
import com.android.launcher3.dynamicui.ExtractedColors; import com.android.launcher3.dynamicui.ExtractedColors;
/** /**
* Base class for a page indicator. * Base class for a page indicator.
*/ */
public abstract class PageIndicator extends View { public abstract class PageIndicator extends FrameLayout {
private CaretDrawable mCaretDrawable; private CaretDrawable mCaretDrawable;
protected int mNumPages = 1; protected int mNumPages = 1;
public PageIndicator(Context context, AttributeSet attrs, int defStyleAttr) { public PageIndicator(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr); super(context, attrs, defStyleAttr);
setWillNotDraw(false);
} }
public void setScroll(int currentScroll, int totalScroll) {} public void setScroll(int currentScroll, int totalScroll) {}
@@ -15,14 +15,13 @@ import android.support.v4.graphics.ColorUtils;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.util.Property; import android.util.Property;
import android.view.View;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import android.widget.ImageView;
import com.android.launcher3.Launcher; import com.android.launcher3.Launcher;
import com.android.launcher3.R; import com.android.launcher3.R;
import com.android.launcher3.Utilities; import com.android.launcher3.Utilities;
import com.android.launcher3.dynamicui.ExtractedColors; import com.android.launcher3.dynamicui.ExtractedColors;
import com.android.launcher3.util.TransformingTouchDelegate;
/** /**
* A PageIndicator that briefly shows a fraction of a line when moving between pages. * A PageIndicator that briefly shows a fraction of a line when moving between pages.
@@ -60,10 +59,7 @@ public class PageIndicatorLineCaret extends PageIndicator {
private Paint mLinePaint; private Paint mLinePaint;
private Launcher mLauncher; private Launcher mLauncher;
private final int mLineHeight; private final int mLineHeight;
private final TransformingTouchDelegate mTouchDelegate; private ImageView mAllAppsHandle;
private final int mTouchExtensionHeight;
private final int mCaretSizePx;
private final int mCaretWorkspaceOffsetPx;
private static final Property<PageIndicatorLineCaret, Integer> PAINT_ALPHA private static final Property<PageIndicatorLineCaret, Integer> PAINT_ALPHA
= new Property<PageIndicatorLineCaret, Integer>(Integer.class, "paint_alpha") { = new Property<PageIndicatorLineCaret, Integer>(Integer.class, "paint_alpha") {
@@ -128,48 +124,26 @@ public class PageIndicatorLineCaret extends PageIndicator {
Resources res = context.getResources(); Resources res = context.getResources();
mLinePaint = new Paint(); mLinePaint = new Paint();
mLinePaint.setAlpha(0); mLinePaint.setAlpha(0);
mCaretSizePx = res.getDimensionPixelSize(R.dimen.all_apps_caret_size);
mCaretWorkspaceOffsetPx = res.getDimensionPixelSize(
R.dimen.all_apps_caret_workspace_offset);
mLauncher = (Launcher) context; mLauncher = (Launcher) context;
setOnTouchListener(mLauncher.getHapticFeedbackTouchListener());
setOnClickListener(mLauncher);
setOnLongClickListener(mLauncher);
setOnFocusChangeListener(mLauncher.mFocusHandler);
setCaretDrawable(new CaretDrawable(context));
mLineHeight = res.getDimensionPixelSize(R.dimen.dynamic_grid_page_indicator_line_height); mLineHeight = res.getDimensionPixelSize(R.dimen.dynamic_grid_page_indicator_line_height);
mTouchExtensionHeight = res.getDimensionPixelSize( setCaretDrawable(new CaretDrawable(context));
R.dimen.dynamic_grid_page_indicator_extra_touch_height);
mTouchDelegate = new TransformingTouchDelegate(this);
} }
@Override @Override
protected void onAttachedToWindow() { protected void onFinishInflate() {
super.onAttachedToWindow(); super.onFinishInflate();
mLauncher.getDragLayer().setTouchDelegate(mTouchDelegate); mAllAppsHandle = (ImageView) findViewById(R.id.all_apps_handle);
} mAllAppsHandle.setImageDrawable(getCaretDrawable());
mAllAppsHandle.setOnTouchListener(mLauncher.getHapticFeedbackTouchListener());
@Override mAllAppsHandle.setOnClickListener(mLauncher);
protected void onLayout(boolean changed, int left, int top, int right, int bottom) { mAllAppsHandle.setOnLongClickListener(mLauncher);
super.onLayout(changed, left, top, right, bottom); mAllAppsHandle.setOnFocusChangeListener(mLauncher.mFocusHandler);
// Top/center align the caret in the page indicator space mLauncher.setAllAppsButton(mAllAppsHandle);
int l = (right - left) / 2 - mCaretSizePx / 2;
getCaretDrawable().setBounds(l, mCaretWorkspaceOffsetPx, l + mCaretSizePx,
mCaretWorkspaceOffsetPx + mCaretSizePx);
// The touch area is expanded below this view by #mTouchExtensionHeight
// which extends to the top of the hotseat.
View parent = mLauncher.getDragLayer();
sTempCoords[0] = sTempCoords[1] = 0;
Utilities.getDescendantCoordRelativeToAncestor(this, parent, sTempCoords, true);
mTouchDelegate.setBounds(sTempCoords[0], sTempCoords[1], sTempCoords[0] + this.getWidth(),
sTempCoords[1] + getHeight() + mTouchExtensionHeight);
} }
@Override @Override
protected void onDraw(Canvas canvas) { protected void onDraw(Canvas canvas) {
getCaretDrawable().draw(canvas);
if (mTotalScroll == 0 || mNumPagesFloat == 0) { if (mTotalScroll == 0 || mNumPagesFloat == 0) {
return; return;
} }