Updating all apps to match spec
Change-Id: Ie351fdea2e3b05ca911e6533f0c5d00c17e0847c
This commit is contained in:
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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] -->
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user