mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 03:08:19 +00:00
Tweaking the apps list fast scroller.
- Making the view span the full width so that you can grab the scroller on the edge of the screen. - Offsetting the fast-scoll popup so that you can see it as you scrub. Change-Id: If1b1934bbeac0660d829cfc29c9e588df927c5e5
This commit is contained in:
@@ -14,8 +14,7 @@
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#ffffff" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
||||
<inset xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:drawable="@drawable/apps_list_bg_inset"
|
||||
android:insetLeft="@dimen/apps_container_inset"
|
||||
android:insetRight="@dimen/apps_container_inset" />
|
||||
23
res/drawable/apps_list_bg_inset.xml
Normal file
23
res/drawable/apps_list_bg_inset.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#ffffff" />
|
||||
<corners
|
||||
android:bottomLeftRadius="3dp"
|
||||
android:bottomRightRadius="3dp" />
|
||||
</shape>
|
||||
@@ -18,7 +18,10 @@
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/apps_view_scrollbar_thumb_color" />
|
||||
<size
|
||||
android:width="48dp"
|
||||
android:height="48dp" />
|
||||
<corners android:radius="4dp" />
|
||||
android:width="64dp"
|
||||
android:height="64dp" />
|
||||
<corners
|
||||
android:topLeftRadius="64dp"
|
||||
android:topRightRadius="64dp"
|
||||
android:bottomLeftRadius="64dp" />
|
||||
</shape>
|
||||
@@ -17,5 +17,5 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/apps_view_scrollbar_thumb_color" />
|
||||
<size android:width="4dp"/>
|
||||
<size android:width="@dimen/apps_view_fast_scroll_bar_size" />
|
||||
</shape>
|
||||
20
res/drawable/apps_reveal_bg.xml
Normal file
20
res/drawable/apps_reveal_bg.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<inset xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:drawable="@drawable/apps_reveal_bg_inset"
|
||||
android:insetLeft="@dimen/apps_container_inset"
|
||||
android:insetRight="@dimen/apps_container_inset" />
|
||||
21
res/drawable/apps_reveal_bg_inset.xml
Normal file
21
res/drawable/apps_reveal_bg_inset.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2015 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.
|
||||
-->
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#ffffff" />
|
||||
<corners android:radius="3dp" />
|
||||
</shape>
|
||||
@@ -18,7 +18,6 @@
|
||||
android:id="@+id/apps_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="8dp"
|
||||
android:background="#22000000"
|
||||
android:descendantFocusability="afterDescendants">
|
||||
<include
|
||||
|
||||
@@ -20,12 +20,13 @@
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:elevation="15dp"
|
||||
android:background="@drawable/apps_list_bg"
|
||||
android:visibility="gone">
|
||||
<EditText
|
||||
android:id="@+id/app_search_box"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/apps_container_inset"
|
||||
android:layout_marginRight="@dimen/apps_container_inset"
|
||||
android:padding="16dp"
|
||||
android:hint="@string/apps_view_search_bar_hint"
|
||||
android:maxLines="1"
|
||||
@@ -46,8 +47,10 @@
|
||||
android:paddingTop="12dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:clipToPadding="false"
|
||||
android:fadeScrollbars="false"
|
||||
android:scrollbars="vertical"
|
||||
android:scrollbarThumbVertical="@drawable/apps_list_scrollbar_thumb"
|
||||
android:focusable="true"
|
||||
android:descendantFocusability="afterDescendants" />
|
||||
android:descendantFocusability="afterDescendants"
|
||||
android:background="@drawable/apps_list_bg" />
|
||||
</LinearLayout>
|
||||
@@ -21,5 +21,5 @@
|
||||
android:layout_gravity="center"
|
||||
android:elevation="15dp"
|
||||
android:visibility="invisible"
|
||||
android:background="@drawable/apps_list_bg"
|
||||
android:background="@drawable/apps_reveal_bg"
|
||||
android:focusable="false" />
|
||||
@@ -13,16 +13,26 @@
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!-- The top and bottom paddings are defined in this container, but since we want
|
||||
the list view to span the full width (for touch interception purposes), we
|
||||
will bake the left/right padding into that view's background itself. -->
|
||||
<com.android.launcher3.AppsContainerView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/apps_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="8dp"
|
||||
android:paddingTop="@dimen/apps_container_inset"
|
||||
android:paddingBottom="@dimen/apps_container_inset"
|
||||
android:background="@drawable/apps_customize_bg"
|
||||
android:descendantFocusability="afterDescendants">
|
||||
<include
|
||||
layout="@layout/apps_reveal_view" />
|
||||
layout="@layout/apps_reveal_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center" />
|
||||
<include
|
||||
layout="@layout/apps_list_view" />
|
||||
layout="@layout/apps_list_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center" />
|
||||
</com.android.launcher3.AppsContainerView>
|
||||
@@ -48,12 +48,14 @@
|
||||
|
||||
<!-- Apps view -->
|
||||
<dimen name="apps_container_width">0dp</dimen>
|
||||
<dimen name="apps_container_inset">8dp</dimen>
|
||||
<dimen name="apps_grid_view_start_margin">52dp</dimen>
|
||||
<dimen name="apps_view_row_height">64dp</dimen>
|
||||
<dimen name="apps_view_section_text_size">24sp</dimen>
|
||||
<dimen name="apps_view_fast_scroll_gutter_size">48dp</dimen>
|
||||
<dimen name="apps_view_fast_scroll_bar_size">6dp</dimen>
|
||||
<dimen name="apps_view_fast_scroll_gutter_size">40dp</dimen>
|
||||
<dimen name="apps_view_fast_scroll_popup_size">64dp</dimen>
|
||||
<dimen name="apps_view_fast_scroll_text_size">48dp</dimen>
|
||||
<dimen name="apps_view_fast_scroll_text_size">40dp</dimen>
|
||||
|
||||
<!-- AllApps/Customize/AppsCustomize -->
|
||||
<!-- The height of the tab bar - if this changes, we should update the
|
||||
|
||||
@@ -37,6 +37,8 @@ import java.util.List;
|
||||
public class AppsContainerRecyclerView extends RecyclerView
|
||||
implements RecyclerView.OnItemTouchListener {
|
||||
|
||||
private static final float FAST_SCROLL_OVERLAY_Y_OFFSET_FACTOR = 1.5f;
|
||||
|
||||
private AlphabeticalAppsList mApps;
|
||||
private int mNumAppsPerRow;
|
||||
|
||||
@@ -130,7 +132,7 @@ public class AppsContainerRecyclerView extends RecyclerView
|
||||
} else {
|
||||
x = getWidth() - getPaddingRight() - getScrollBarSize() - bgBounds.width();
|
||||
}
|
||||
int y = mLastY - bgBounds.height() / 2;
|
||||
int y = mLastY - (int) (FAST_SCROLL_OVERLAY_Y_OFFSET_FACTOR * bgBounds.height());
|
||||
y = Math.max(getPaddingTop(), Math.min(y, getHeight() - getPaddingBottom() -
|
||||
bgBounds.height()));
|
||||
canvas.translate(x, y);
|
||||
|
||||
@@ -39,9 +39,9 @@ import java.util.List;
|
||||
/**
|
||||
* The all apps list view container.
|
||||
*/
|
||||
public class AppsContainerView extends FrameLayout implements DragSource, View.OnTouchListener,
|
||||
View.OnLongClickListener, Insettable, TextWatcher, TextView.OnEditorActionListener,
|
||||
LauncherTransitionable {
|
||||
public class AppsContainerView extends FrameLayout implements DragSource, Insettable, TextWatcher,
|
||||
TextView.OnEditorActionListener, LauncherTransitionable, View.OnTouchListener,
|
||||
View.OnLongClickListener {
|
||||
|
||||
private static final boolean ALLOW_SINGLE_APP_LAUNCH = true;
|
||||
|
||||
@@ -188,10 +188,10 @@ public class AppsContainerView extends FrameLayout implements DragSource, View.O
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
if (event.getAction() == MotionEvent.ACTION_DOWN ||
|
||||
event.getAction() == MotionEvent.ACTION_MOVE) {
|
||||
mLastTouchDownPos.set((int) event.getX(), (int) event.getY());
|
||||
public boolean onTouch(View v, MotionEvent ev) {
|
||||
if (ev.getAction() == MotionEvent.ACTION_DOWN ||
|
||||
ev.getAction() == MotionEvent.ACTION_MOVE) {
|
||||
mLastTouchDownPos.set((int) ev.getX(), (int) ev.getY());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -333,7 +333,6 @@ public class AppsContainerView extends FrameLayout implements DragSource, View.O
|
||||
List<AppInfo> appsWithoutSections = mApps.getAppsWithoutSectionBreaks();
|
||||
List<AppInfo> apps = mApps.getApps();
|
||||
if (appsWithoutSections.size() == 1) {
|
||||
mSearchBar.clearFocus();
|
||||
mAppsListView.getChildAt(apps.indexOf(appsWithoutSections.get(0))).performClick();
|
||||
InputMethodManager imm = (InputMethodManager)
|
||||
getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
|
||||
@@ -84,12 +84,13 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
|
||||
mSectionTextPaint.getTextBounds(section, 0, section.length(),
|
||||
mTmpBounds);
|
||||
if (mIsRtl) {
|
||||
c.drawText(section, parent.getWidth() - mStartMargin +
|
||||
(mStartMargin - mTmpBounds.width()) / 2,
|
||||
int left = parent.getWidth() - mPaddingStart - mStartMargin;
|
||||
c.drawText(section, left + (mStartMargin - mTmpBounds.width()) / 2,
|
||||
child.getTop() + (2 * child.getPaddingTop()) +
|
||||
mTmpBounds.height(), mSectionTextPaint);
|
||||
} else {
|
||||
c.drawText(section, (mStartMargin - mTmpBounds.width()) / 2,
|
||||
int left = mPaddingStart;
|
||||
c.drawText(section, left + (mStartMargin - mTmpBounds.width()) / 2,
|
||||
child.getTop() + (2 * child.getPaddingTop()) +
|
||||
mTmpBounds.height(), mSectionTextPaint);
|
||||
}
|
||||
@@ -118,6 +119,7 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
|
||||
private String mEmptySearchText;
|
||||
|
||||
// Section drawing
|
||||
private int mPaddingStart;
|
||||
private int mStartMargin;
|
||||
private Paint mSectionTextPaint;
|
||||
private Rect mTmpBounds = new Rect();
|
||||
@@ -136,6 +138,7 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
|
||||
mIconClickListener = iconClickListener;
|
||||
mIconLongClickListener = iconLongClickListener;
|
||||
mStartMargin = res.getDimensionPixelSize(R.dimen.apps_grid_view_start_margin);
|
||||
mPaddingStart = res.getDimensionPixelSize(R.dimen.apps_container_inset);
|
||||
mSectionTextPaint = new Paint();
|
||||
mSectionTextPaint.setTextSize(res.getDimensionPixelSize(
|
||||
R.dimen.apps_view_section_text_size));
|
||||
|
||||
Reference in New Issue
Block a user