Updating all apps to match spec
Change-Id: Ie351fdea2e3b05ca911e6533f0c5d00c17e0847c
diff --git a/res/drawable/all_apps_search_bg.xml b/res/drawable/all_apps_search_bg.xml
index b0ed9b5..cf63d41 100644
--- a/res/drawable/all_apps_search_bg.xml
+++ b/res/drawable/all_apps_search_bg.xml
@@ -15,14 +15,6 @@
limitations under the License.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/quantum_panel_bg_color" />
- <corners
- android:topLeftRadius="2dp"
- android:topRightRadius="2dp" />
- </shape>
- </item>
<item
android:top="@dimen/all_apps_search_bar_bg_overflow"
android:left="@dimen/all_apps_search_bar_bg_overflow"
@@ -33,7 +25,7 @@
<solid android:color="@android:color/transparent" />
<stroke
android:width="@dimen/all_apps_search_bar_divider_width"
- android:color="#1E000000"/>
+ android:color="?android:attr/colorAccent"/>
</shape>
</item>
</layer-list>
\ No newline at end of file
diff --git a/res/drawable/all_apps_search_hint.xml b/res/drawable/all_apps_search_hint.xml
new file mode 100644
index 0000000..b2ff7a4
--- /dev/null
+++ b/res/drawable/all_apps_search_hint.xml
@@ -0,0 +1,20 @@
+<?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.
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@android:color/transparent" android:state_focused="true" />
+ <item android:color="?android:attr/colorAccent"/>
+</selector>
\ No newline at end of file
diff --git a/res/drawable/ic_allapps_search.xml b/res/drawable/ic_allapps_search.xml
new file mode 100644
index 0000000..2aeb947
--- /dev/null
+++ b/res/drawable/ic_allapps_search.xml
@@ -0,0 +1,24 @@
+<?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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0">
+ <path
+ android:fillColor="?android:attr/colorAccent"
+ android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" />
+</vector>
diff --git a/res/layout/all_apps.xml b/res/layout/all_apps.xml
index 1b843ed..a0b73f0 100644
--- a/res/layout/all_apps.xml
+++ b/res/layout/all_apps.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- 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.
@@ -16,15 +16,14 @@
<!-- 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.allapps.AllAppsContainerView
- xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.launcher3.allapps.AllAppsContainerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res-auto"
android:id="@+id/apps_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="@dimen/container_bounds_inset"
- android:paddingBottom="@dimen/container_bounds_inset"
android:orientation="vertical"
+ android:paddingBottom="@dimen/container_bounds_inset"
+ android:paddingTop="@dimen/container_bounds_inset"
launcher:revealBackground="@drawable/quantum_panel_shape">
<View
@@ -32,60 +31,70 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
- android:focusable="false"
android:elevation="2dp"
+ android:focusable="false"
android:visibility="invisible" />
<com.android.launcher3.allapps.AllAppsRecyclerViewContainerView
+ android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:id="@+id/main_content"
- android:saveEnabled="false"
- android:visibility="gone"
android:layout_gravity="center"
+ android:elevation="15dp"
android:focusable="true"
android:focusableInTouchMode="true"
- android:elevation="15dp" >
+ android:saveEnabled="false"
+ android:visibility="gone">
<!-- DO NOT CHANGE THE ID -->
<com.android.launcher3.allapps.AllAppsRecyclerView
android:id="@+id/apps_list_view"
- android:theme="@style/CustomOverscroll.Light"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal|top"
- android:clipToPadding="false"
- android:focusable="true"
android:layout_marginTop="@dimen/all_apps_search_bar_height"
- android:descendantFocusability="afterDescendants" />
+ android:clipToPadding="false"
+ android:descendantFocusability="afterDescendants"
+ android:focusable="true"
+ android:theme="@style/CustomOverscroll.Light" />
<LinearLayout
android:id="@+id/search_container"
android:layout_width="match_parent"
- android:saveEnabled="false"
android:layout_height="@dimen/all_apps_search_bar_height"
- android:layout_gravity="start|top"
+ android:layout_gravity="center|top"
+ android:paddingLeft="@dimen/container_fastscroll_thumb_max_width"
+ android:paddingRight="@dimen/container_fastscroll_thumb_max_width"
+ android:background="@drawable/all_apps_search_bg"
+ android:gravity="center|bottom"
android:orientation="horizontal"
- android:background="@drawable/all_apps_search_bg" >
+ android:saveEnabled="false">
+
+ <ImageView
+ android:id="@+id/search_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:scaleType="fitCenter"
+ android:layout_marginTop="@dimen/all_apps_search_bar_icon_margin_top"
+ android:paddingEnd="@dimen/all_apps_search_bar_icon_margin_right"
+ android:src="@drawable/ic_allapps_search" />
<com.android.launcher3.ExtendedEditText
android:id="@+id/search_box_input"
- android:layout_width="match_parent"
+ android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:focusableInTouchMode="true"
- android:gravity="fill_horizontal|center_vertical"
+ android:gravity="start|center_vertical"
android:hint="@string/all_apps_search_bar_hint"
- android:inputType="text|textNoSuggestions|textCapWords"
android:imeOptions="actionSearch|flagNoExtractUi"
+ android:inputType="text|textNoSuggestions|textCapWords"
android:maxLines="1"
android:scrollHorizontally="true"
- android:layout_marginLeft="@dimen/container_fastscroll_thumb_max_width"
- android:layout_marginRight="@dimen/container_fastscroll_thumb_max_width"
android:singleLine="true"
android:textColor="#4c4c4c"
- android:textColorHint="#9c9c9c"
+ android:textColorHint="@drawable/all_apps_search_hint"
android:textSize="16sp" />
</LinearLayout>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index c7dd375..c8a05b7 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -64,6 +64,8 @@
<dimen name="all_apps_grid_section_y_offset">8dp</dimen>
<dimen name="all_apps_grid_section_text_size">24sp</dimen>
<dimen name="all_apps_search_bar_height">60dp</dimen>
+ <dimen name="all_apps_search_bar_icon_margin_right">4dp</dimen>
+ <dimen name="all_apps_search_bar_icon_margin_top">1dp</dimen>
<dimen name="all_apps_icon_top_bottom_padding">8dp</dimen>
<dimen name="all_apps_icon_width_gap">24dp</dimen>
<!-- The top padding should account for the existing all_apps_list_top_bottom_padding -->
@@ -76,7 +78,7 @@
<dimen name="all_apps_background_canvas_height">475dp</dimen>
<!-- Search bar in All Apps -->
- <dimen name="all_apps_header_max_elevation">4dp</dimen>
+ <dimen name="all_apps_header_max_elevation">3dp</dimen>
<dimen name="all_apps_header_scroll_to_elevation">16dp</dimen>
<dimen name="all_apps_header_shadow_height">6dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4e5fcff..11760f4 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -47,7 +47,7 @@
<!-- All Apps -->
<!-- Search bar text in the apps view. [CHAR_LIMIT=50] -->
- <string name="all_apps_search_bar_hint">Search Apps…</string>
+ <string name="all_apps_search_bar_hint">Search Apps</string>
<!-- Loading apps text. [CHAR_LIMIT=50] -->
<string name="all_apps_loading_message">Loading Apps…</string>
<!-- No-search-results text. [CHAR_LIMIT=50] -->
diff --git a/src/com/android/launcher3/BaseRecyclerViewFastScrollPopup.java b/src/com/android/launcher3/BaseRecyclerViewFastScrollPopup.java
index da7fa41..37584fe 100644
--- a/src/com/android/launcher3/BaseRecyclerViewFastScrollPopup.java
+++ b/src/com/android/launcher3/BaseRecyclerViewFastScrollPopup.java
@@ -32,9 +32,9 @@
private static final float FAST_SCROLL_OVERLAY_Y_OFFSET_FACTOR = 1.5f;
- private static final int SHADOW_INSET = 6;
+ private static final int SHADOW_INSET = 5;
private static final int SHADOW_SHIFT_Y = 4;
- private static final float SHADOW_ALPHA_MULTIPLIER = 0.6f;
+ private static final float SHADOW_ALPHA_MULTIPLIER = 0.5f;
private Resources mRes;
private BaseRecyclerView mRv;
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 84c29dc..a31c8ae 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1370,7 +1370,9 @@
mDragController.addDropTarget(mWorkspace);
mDropTargetBar.setup(mDragController);
- mAllAppsController.setupViews(mAppsView, mHotseat, mWorkspace);
+ if (FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP) {
+ mAllAppsController.setupViews(mAppsView, mHotseat, mWorkspace);
+ }
if (TestingUtils.MEMORY_DUMP_ENABLED) {
TestingUtils.addWeightWatcher(this);
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
index c3da491..868408f 100644
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
@@ -25,11 +25,14 @@
import android.text.SpannableStringBuilder;
import android.text.method.TextKeyListener;
import android.util.AttributeSet;
+import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import com.android.launcher3.AppInfo;
@@ -58,7 +61,6 @@
import java.util.List;
-
/**
* A merge algorithm that merges every section indiscriminately.
*/
@@ -66,8 +68,8 @@
@Override
public boolean continueMerging(AlphabeticalAppsList.SectionInfo section,
- AlphabeticalAppsList.SectionInfo withSection,
- int sectionAppCount, int numAppsPerRow, int mergeCount) {
+ AlphabeticalAppsList.SectionInfo withSection,
+ int sectionAppCount, int numAppsPerRow, int mergeCount) {
// Don't merge the predicted apps
if (section.firstAppItem.viewType != AllAppsGridAdapter.ICON_VIEW_TYPE) {
return false;
@@ -98,8 +100,8 @@
@Override
public boolean continueMerging(AlphabeticalAppsList.SectionInfo section,
- AlphabeticalAppsList.SectionInfo withSection,
- int sectionAppCount, int numAppsPerRow, int mergeCount) {
+ AlphabeticalAppsList.SectionInfo withSection,
+ int sectionAppCount, int numAppsPerRow, int mergeCount) {
// Don't merge the predicted apps
if (section.firstAppItem.viewType != AllAppsGridAdapter.ICON_VIEW_TYPE) {
return false;
@@ -148,6 +150,7 @@
private View mSearchContainer;
private ExtendedEditText mSearchInput;
+ private ImageView mSearchIcon;
private HeaderElevationController mElevationController;
private SpannableStringBuilder mSearchQueryBuilder = null;
@@ -232,6 +235,7 @@
mSearchBarController.setVisibility(View.INVISIBLE);
}
}
+
/**
* Sets the search bar that shows above the a-z list.
*/
@@ -261,8 +265,8 @@
Utilities.mapCoordInSelfToDescendent(mAppsRecyclerView, this, point);
// if the MotionEvent is inside the thumb, container should not be pulled down.
- if (mAppsRecyclerView.getScrollBar().isNearThumb(point[0], point[1])){
- return false;
+ if (mAppsRecyclerView.getScrollBar().isNearThumb(point[0], point[1])) {
+ return false;
}
// If scroller is at the very top, then it's okay for the container to be pulled down.
if (Float.compare(0f, mAppsRecyclerView.getScrollBar().getThumbOffset().y) == 0) {
@@ -270,6 +274,7 @@
}
return false;
}
+
/**
* Focuses the search field and begins an app search.
*/
@@ -305,6 +310,42 @@
mSearchContainer = findViewById(R.id.search_container);
mSearchInput = (ExtendedEditText) findViewById(R.id.search_box_input);
+ mSearchIcon = (ImageView) findViewById(R.id.search_icon);
+
+ final LinearLayout.LayoutParams searchParams =
+ (LinearLayout.LayoutParams) mSearchInput.getLayoutParams();
+ mSearchInput.setOnFocusChangeListener(new OnFocusChangeListener() {
+ @Override
+ public void onFocusChange(View view, boolean focused) {
+ if (focused) {
+ searchParams.width = LayoutParams.MATCH_PARENT;
+ mSearchInput.setLayoutParams(searchParams);
+ mSearchInput.setGravity(Gravity.FILL_HORIZONTAL | Gravity.CENTER_VERTICAL);
+ mSearchIcon.setVisibility(View.GONE);
+ } else {
+ searchParams.width = LayoutParams.WRAP_CONTENT;
+ mSearchInput.setLayoutParams(searchParams);
+ mSearchInput.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
+ mSearchIcon.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+
+ final OnClickListener searchFocusListener = new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (!mSearchInput.isFocused()) {
+ mSearchInput.requestFocus();
+ final InputMethodManager imm =
+ (InputMethodManager)getContext().getSystemService(
+ Context.INPUT_METHOD_SERVICE);
+ imm.showSoftInput(mSearchInput, 0);
+ }
+ }
+ };
+ mSearchInput.setOnClickListener(searchFocusListener);
+ mSearchContainer.setOnClickListener(searchFocusListener);
+
mElevationController = Utilities.ATLEAST_LOLLIPOP
? new HeaderElevationController.ControllerVL(mSearchContainer)
: new HeaderElevationController.ControllerV16(mSearchContainer);
@@ -379,7 +420,11 @@
if (mNumAppsPerRow > 0) {
int iconSize = availableWidth / mNumAppsPerRow;
int iconSpacing = (iconSize - grid.allAppsIconSizePx) / 2;
- mSearchInput.setPaddingRelative(iconSpacing, 0, iconSpacing, 0);
+ final int thumbMaxWidth =
+ getResources().getDimensionPixelSize(
+ R.dimen.container_fastscroll_thumb_max_width);
+ mSearchContainer.setPaddingRelative(
+ iconSpacing + thumbMaxWidth, 0, iconSpacing + thumbMaxWidth, 0);
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -452,7 +497,6 @@
lp.leftMargin = bgPadding.left;
lp.rightMargin = bgPadding.right;
-
// Clip the view to the left and right edge of the background to
// to prevent shadows from rendering beyond the edges
final Rect newClipBounds = new Rect(
@@ -472,7 +516,7 @@
MarginLayoutParams mlp = (MarginLayoutParams) mAppsRecyclerView.getLayoutParams();
Rect insets = mLauncher.getDragLayer().getInsets();
- getContentView().setPadding(0,0,0, insets.bottom);
+ getContentView().setPadding(0, 0, 0, insets.bottom);
int height = insets.top + grid.hotseatCellHeightPx;
mlp.topMargin = height;
@@ -482,10 +526,10 @@
(LinearLayout.LayoutParams) mSearchInput.getLayoutParams();
llp.topMargin = insets.top;
mSearchInput.setLayoutParams(llp);
+ mSearchIcon.setLayoutParams(llp);
lp.height = height;
}
- mSearchContainer.getBackground().setAlpha(0);
}
mSearchContainer.setLayoutParams(lp);
}
diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
index 8a14a66..ac256b1 100644
--- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
@@ -408,6 +408,7 @@
mAppsView.setVisibility(View.INVISIBLE);
mHotseat.setBackgroundTransparent(false /* transparent */);
mHotseat.setVisibility(View.VISIBLE);
+ mAppsView.reset();
setProgress(mShiftRange);
}