Updating all apps to match spec

Change-Id: Ie351fdea2e3b05ca911e6533f0c5d00c17e0847c
This commit is contained in:
Peter Schiller
2016-06-30 13:52:36 -07:00
parent b1e9e8d662
commit 310a988993
10 changed files with 142 additions and 48 deletions
+1 -9
View File
@@ -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>
+20
View File
@@ -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>
+24
View File
@@ -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>
+32 -23
View File
@@ -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>
+3 -1
View File
@@ -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>
+1 -1
View File
@@ -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&#8230;</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&#8230;</string>
<!-- No-search-results text. [CHAR_LIMIT=50] -->
@@ -32,9 +32,9 @@ public class BaseRecyclerViewFastScrollPopup {
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;
+3 -1
View File
@@ -1370,7 +1370,9 @@ public class Launcher extends Activity
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);
@@ -25,11 +25,14 @@ import android.text.Selection;
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.ArrayList;
import java.util.List;
/**
* A merge algorithm that merges every section indiscriminately.
*/
@@ -66,8 +68,8 @@ final class FullMergeAlgorithm implements AlphabeticalAppsList.MergeAlgorithm {
@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 @@ final class SimpleSectionMergeAlgorithm implements AlphabeticalAppsList.MergeAlg
@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 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
private View mSearchContainer;
private ExtendedEditText mSearchInput;
private ImageView mSearchIcon;
private HeaderElevationController mElevationController;
private SpannableStringBuilder mSearchQueryBuilder = null;
@@ -232,6 +235,7 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
mSearchBarController.setVisibility(View.INVISIBLE);
}
}
/**
* Sets the search bar that shows above the a-z list.
*/
@@ -261,8 +265,8 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
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 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
}
return false;
}
/**
* Focuses the search field and begins an app search.
*/
@@ -305,6 +310,42 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
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 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
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 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
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 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
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 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
(LinearLayout.LayoutParams) mSearchInput.getLayoutParams();
llp.topMargin = insets.top;
mSearchInput.setLayoutParams(llp);
mSearchIcon.setLayoutParams(llp);
lp.height = height;
}
mSearchContainer.getBackground().setAlpha(0);
}
mSearchContainer.setLayoutParams(lp);
}
@@ -408,6 +408,7 @@ public class AllAppsTransitionController implements TouchController, VerticalPul
mAppsView.setVisibility(View.INVISIBLE);
mHotseat.setBackgroundTransparent(false /* transparent */);
mHotseat.setVisibility(View.VISIBLE);
mAppsView.reset();
setProgress(mShiftRange);
}