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:
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -4,9 +4,9 @@
|
|||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user