am 5f4e0fdd: Moving all apps code into sub package.

* commit '5f4e0fdd2e4edeb9211e2dcd1c99497f175731f8':
  Moving all apps code into sub package.
This commit is contained in:
Winson Chung 2015-05-22 20:49:28 +00:00 committed by Android Git Automerger
commit db32044824
43 changed files with 292 additions and 322 deletions

View File

@ -16,7 +16,7 @@
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/apps_view_scrollbar_thumb_color" />
<solid android:color="@color/all_apps_scrollbar_thumb_color" />
<size
android:width="64dp"
android:height="64dp" />

View File

@ -16,7 +16,7 @@
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/apps_view_scrollbar_thumb_color" />
<solid android:color="@color/all_apps_scrollbar_thumb_color" />
<size
android:width="64dp"
android:height="64dp" />

View File

@ -16,6 +16,6 @@
-->
<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="@dimen/apps_view_fast_scroll_bar_width" />
<solid android:color="@color/all_apps_scrollbar_thumb_color" />
<size android:width="@dimen/all_apps_fast_scroll_bar_width" />
</shape>

View File

@ -1,23 +0,0 @@
<?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="@color/quantum_panel_bg_color" />
<corners
android:bottomLeftRadius="2dp"
android:bottomRightRadius="2dp" />
</shape>

View File

@ -61,7 +61,7 @@
android:layout_height="match_parent"
android:visibility="invisible" />
<include layout="@layout/apps_view"
<include layout="@layout/all_apps"
android:id="@+id/apps_view"
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@ -71,7 +71,7 @@
android:layout_height="match_parent"
android:visibility="invisible" />
<include layout="@layout/apps_view"
<include layout="@layout/all_apps"
android:id="@+id/apps_view"
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@ -13,21 +13,21 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<com.android.launcher3.AppsContainerView
<com.android.launcher3.allapps.AllAppsContainerView
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="@dimen/apps_container_inset"
android:padding="@dimen/all_apps_container_inset"
android:descendantFocusability="afterDescendants">
<include
layout="@layout/apps_reveal_view"
layout="@layout/all_apps_reveal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
<include
layout="@layout/apps_list_view"
layout="@layout/all_apps_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
</com.android.launcher3.AppsContainerView>
</com.android.launcher3.allapps.AllAppsContainerView>

View File

@ -71,7 +71,7 @@
android:layout_height="match_parent"
android:visibility="invisible" />
<include layout="@layout/apps_view"
<include layout="@layout/all_apps"
android:id="@+id/apps_view"
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@ -16,20 +16,20 @@
<!-- 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
<com.android.launcher3.allapps.AllAppsContainerView
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:descendantFocusability="afterDescendants">
<include
layout="@layout/apps_reveal_view"
layout="@layout/all_apps_reveal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
<include
layout="@layout/apps_list_view"
layout="@layout/all_apps_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
</com.android.launcher3.AppsContainerView>
</com.android.launcher3.allapps.AllAppsContainerView>

View File

@ -14,7 +14,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<com.android.launcher3.AppsRecyclerViewContainer
<com.android.launcher3.allapps.AllAppsRecyclerViewContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/apps_list"
android:layout_width="match_parent"
@ -23,12 +23,12 @@
android:focusableInTouchMode="true"
android:visibility="gone" >
<com.android.launcher3.AppsContainerRecyclerView
<com.android.launcher3.allapps.AllAppsRecyclerView
android:id="@+id/apps_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal|top"
android:layout_marginTop="@dimen/apps_search_bar_height"
android:layout_marginTop="@dimen/all_apps_search_bar_height"
android:clipToPadding="false"
android:descendantFocusability="afterDescendants"
android:focusable="true" />
@ -37,7 +37,7 @@
android:id="@+id/prediction_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/apps_search_bar_height"
android:layout_marginTop="@dimen/all_apps_search_bar_height"
android:orientation="horizontal"
android:descendantFocusability="afterDescendants"
android:focusable="true"
@ -49,8 +49,8 @@
<FrameLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="@dimen/apps_search_bar_height"
android:background="@drawable/apps_search_bg" >
android:layout_height="@dimen/all_apps_search_bar_height"
android:background="@drawable/all_apps_search_bg" >
<LinearLayout
android:id="@+id/app_search_container"
@ -71,14 +71,14 @@
android:paddingTop="13dp"
android:src="@drawable/ic_arrow_back_grey" />
<com.android.launcher3.AppsContainerSearchEditTextView
android:id="@+id/app_search_box"
<com.android.launcher3.allapps.AllAppsSearchEditView
android:id="@+id/apps_search_box"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:focusableInTouchMode="true"
android:gravity="fill_horizontal"
android:hint="@string/apps_view_search_bar_hint"
android:hint="@string/all_apps_search_bar_hint"
android:imeOptions="actionDone|flagNoExtractUi"
android:maxLines="1"
android:paddingBottom="16dp"
@ -98,10 +98,10 @@
android:layout_gravity="end|center_vertical"
android:layout_marginEnd="6dp"
android:layout_marginRight="6dp"
android:contentDescription="@string/apps_view_search_bar_hint"
android:contentDescription="@string/all_apps_search_bar_hint"
android:paddingBottom="13dp"
android:paddingTop="13dp"
android:src="@drawable/ic_search_grey" />
</FrameLayout>
</com.android.launcher3.AppsRecyclerViewContainer>
</com.android.launcher3.allapps.AllAppsRecyclerViewContainerView>

View File

@ -21,7 +21,7 @@
android:gravity="center"
android:paddingTop="24dp"
android:paddingBottom="24dp"
android:paddingRight="@dimen/apps_grid_view_start_margin"
android:paddingRight="@dimen/all_apps_grid_view_start_margin"
android:textSize="16sp"
android:textColor="#4c4c4c"
android:focusable="false" />

View File

@ -21,8 +21,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:paddingTop="@dimen/apps_icon_top_bottom_padding"
android:paddingBottom="@dimen/apps_icon_top_bottom_padding"
android:paddingTop="@dimen/all_apps_icon_top_bottom_padding"
android:paddingBottom="@dimen/all_apps_icon_top_bottom_padding"
android:focusable="true"
android:background="@drawable/focusable_view_bg"
launcher:iconDisplay="all_apps" />

View File

@ -34,7 +34,7 @@
android:focusable="false"
android:visibility="invisible" />
<com.android.launcher3.widget.WidgetsContainerRecyclerView
<com.android.launcher3.widget.WidgetsRecyclerView
android:id="@+id/widgets_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 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.
-->
<resources>
</resources>

View File

@ -17,11 +17,11 @@
<resources>
<dimen name="app_icon_size">64dp</dimen>
<!-- Apps view -->
<dimen name="apps_container_inset">18dp</dimen>
<dimen name="apps_grid_view_start_margin">0dp</dimen>
<dimen name="apps_view_section_text_size">26sp</dimen>
<dimen name="apps_icon_top_bottom_padding">12dp</dimen>
<!-- All Apps -->
<dimen name="all_apps_container_inset">18dp</dimen>
<dimen name="all_apps_grid_view_start_margin">0dp</dimen>
<dimen name="all_apps_grid_section_text_size">26sp</dimen>
<dimen name="all_apps_icon_top_bottom_padding">12dp</dimen>
<!-- Cling -->
<dimen name="cling_migration_logo_height">400dp</dimen>

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
* Copyright (C) 2012 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.
*/
-->
<resources>
</resources>

View File

@ -15,10 +15,6 @@
-->
<resources>
<!-- AppsCustomize -->
<integer name="apps_customize_widget_cell_count_x">4</integer>
<integer name="apps_customize_widget_cell_count_y">2</integer>
<!-- the area at the edge of the screen that makes the workspace go left
or right while you're dragging. -->
<dimen name="scroll_zone">100dip</dimen>

View File

@ -2,7 +2,7 @@
<bool name="config_largeHeap">true</bool>
<bool name="is_large_tablet">true</bool>
<!-- AllApps/Customize/AppsCustomize -->
<!-- All Apps & Widgets -->
<!-- Out of 100, the percent to shrink the workspace during spring loaded mode. -->
<integer name="config_workspaceSpringLoadShrinkPercentage">90</integer>

View File

@ -16,8 +16,10 @@
<resources>
<dimen name="app_icon_size">72dp</dimen>
<dimen name="apps_search_bar_height">54dp</dimen>
<dimen name="apps_icon_top_bottom_padding">16dp</dimen>
<!-- All Apps -->
<dimen name="all_apps_search_bar_height">54dp</dimen>
<dimen name="all_apps_icon_top_bottom_padding">16dp</dimen>
<!-- QSB -->
<dimen name="toolbar_button_vertical_padding">8dip</dimen>

View File

@ -72,16 +72,6 @@
<attr name="maxGap" format="dimension" />
</declare-styleable>
<!-- StrokedTextView specific attributes. -->
<declare-styleable name="StrokedTextView">
<!-- The color of the stroke outline -->
<attr name="strokeColor" format="color" />
<!-- The color of the text -->
<attr name="strokeTextColor" format="color" />
<!-- The width of the stroke -->
<attr name="strokeWidth" format="float" />
</declare-styleable>
<!-- PagedView specific attributes. These attributes are used to customize
a PagedView view in XML files. -->
<declare-styleable name="PagedView">
@ -93,23 +83,6 @@
<attr name="pageIndicator" format="reference" />
</declare-styleable>
<!-- AppsCustomizePagedView specific attributes. These attributes are used to
customize an AppsCustomizePagedView in xml files. -->
<declare-styleable name="AppsCustomizePagedView">
<!-- Max number of cells of applications horizontally -->
<attr name="maxAppCellCountX" format="integer" />
<!-- Max number of cells of applications vertically -->
<attr name="maxAppCellCountY" format="integer" />
<!-- Horizontal spacing between widgets and wallpapers -->
<attr name="widgetCellWidthGap" format="dimension" />
<!-- Vertical spacing between widgets -->
<attr name="widgetCellHeightGap" format="dimension" />
<!-- Number of widgets horizontally -->
<attr name="widgetCountX" format="integer" />
<!-- Number of widgets vertically -->
<attr name="widgetCountY" format="integer" />
</declare-styleable>
<!-- XML attributes used by default_workspace.xml -->
<declare-styleable name="Favorite">
<attr name="className" format="string" />

View File

@ -36,9 +36,9 @@
<color name="outline_color">#FFFFFFFF</color>
<color name="widget_text_panel">#FF374248</color>
<!-- Apps view -->
<color name="apps_view_scrollbar_thumb_color">#009688</color>
<color name="apps_view_section_text_color">#009688</color>
<!-- All Apps -->
<color name="all_apps_scrollbar_thumb_color">#009688</color>
<color name="all_apps_grid_section_text_color">#009688</color>
<!-- Widgets view -->
<color name="widgets_view_section_text_color">#FFFFFF</color>

View File

@ -1,8 +1,5 @@
<resources>
<!-- Dynamic Grid -->
<integer name="config_dynamic_grid_max_long_edge_cell_count">6</integer>
<integer name="config_dynamic_grid_max_short_edge_cell_count">5</integer>
<integer name="config_dynamic_grid_min_edge_cell_count">3</integer>
<!-- Out of 100, the percent of space the overview bar should try and take vertically. -->
<integer name="config_dynamic_grid_overview_icon_zone_percentage">20</integer>
<!-- Out of 100, the percent to shrink the workspace during overview mode. -->
@ -24,21 +21,20 @@
<!-- DragController -->
<integer name="config_flingToDeleteMinVelocity">-1500</integer>
<!-- AllApps/Customize/AppsCustomize -->
<!-- AllApps & Launcher transitions -->
<!-- The alpha of the AppsCustomize bg in spring loaded mode -->
<integer name="config_workspaceScrimAlpha">55</integer>
<integer name="config_workspaceUnshrinkTime">100</integer>
<integer name="config_allAppsTransitionTime">100</integer>
<integer name="config_overviewTransitionTime">250</integer>
<!-- Out of 100, the percent to shrink the workspace during spring loaded mode. -->
<integer name="config_workspaceSpringLoadShrinkPercentage">80</integer>
<!-- Fade/zoom in/out duration & scale in the AllApps transition.
Note: This should be less than the workspaceShrinkTime as they happen together. -->
<integer name="config_appsCustomizeRevealTime">220</integer>
<integer name="config_appsCustomizeWorkspaceShrinkTime">300</integer>
<integer name="config_appsCustomizeItemsAlphaStagger">60</integer>
<!-- Fade/zoom in/out duration & scale in a Launcher overlay transition.
Note: This should be less than the config_overlayTransitionTime as they happen together. -->
<integer name="config_overlayRevealTime">220</integer>
<integer name="config_overlayTransitionTime">300</integer>
<integer name="config_overlayItemsAlphaStagger">60</integer>
<!-- This constant stores the ratio of the all apps button drawable which
is used for internal (baked-in) padding -->

View File

@ -15,13 +15,14 @@
-->
<resources>
<dimen name="app_icon_size">48dp</dimen>
<!-- Dynamic Grid -->
<dimen name="dynamic_grid_edge_margin">6dp</dimen>
<dimen name="dynamic_grid_search_bar_max_width">500dp</dimen>
<dimen name="dynamic_grid_search_bar_height">56dp</dimen>
<dimen name="dynamic_grid_page_indicator_height">20dp</dimen>
<dimen name="dynamic_grid_icon_drawable_padding">4dp</dimen>
<dimen name="dynamic_grid_all_apps_cell_padding">18dp</dimen>
<dimen name="dynamic_grid_workspace_page_spacing">8dp</dimen>
<dimen name="dynamic_grid_overview_min_icon_zone_height">80dp</dimen>
<dimen name="dynamic_grid_overview_max_icon_zone_height">120dp</dimen>
@ -48,48 +49,29 @@
<dimen name="toolbar_button_vertical_padding">4dip</dimen>
<dimen name="toolbar_button_horizontal_padding">12dip</dimen>
<!-- Apps view -->
<dimen name="apps_container_width">0dp</dimen>
<dimen name="apps_container_inset">8dp</dimen>
<dimen name="apps_grid_view_start_margin">56dp</dimen>
<dimen name="apps_grid_section_y_offset">8dp</dimen>
<dimen name="apps_view_section_text_size">24sp</dimen>
<dimen name="apps_view_fast_scroll_bar_width">4dp</dimen>
<dimen name="apps_view_fast_scroll_bar_min_height">64dp</dimen>
<dimen name="apps_view_fast_scroll_scrubber_touch_inset">-16dp</dimen>
<dimen name="apps_view_fast_scroll_popup_size">72dp</dimen>
<dimen name="apps_view_fast_scroll_text_size">48dp</dimen>
<dimen name="apps_search_bar_height">52dp</dimen>
<dimen name="apps_icon_top_bottom_padding">8dp</dimen>
<dimen name="apps_prediction_icon_top_bottom_padding">12dp</dimen>
<!-- All Apps -->
<!-- Note: This needs to match the fixed insets for the search box. -->
<dimen name="container_fixed_bounds_inset">8dp</dimen>
<!-- AllApps/Customize/AppsCustomize -->
<dimen name="app_icon_size">48dp</dimen>
<dimen name="all_apps_container_inset">8dp</dimen>
<dimen name="all_apps_grid_view_start_margin">56dp</dimen>
<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">52dp</dimen>
<dimen name="all_apps_icon_top_bottom_padding">8dp</dimen>
<dimen name="all_apps_icon_left_right_padding">18dp</dimen>
<dimen name="all_apps_prediction_icon_top_bottom_padding">12dp</dimen>
<!-- Drag padding to add to the bottom of drop targets -->
<dimen name="drop_target_drag_padding">14dp</dimen>
<dimen name="drop_target_text_size">14sp</dimen>
<dimen name="all_apps_fast_scroll_bar_width">4dp</dimen>
<dimen name="all_apps_fast_scroll_bar_min_height">64dp</dimen>
<dimen name="all_apps_fast_scroll_scrubber_touch_inset">-16dp</dimen>
<dimen name="all_apps_fast_scroll_popup_size">72dp</dimen>
<dimen name="all_apps_fast_scroll_text_size">48dp</dimen>
<dimen name="all_apps_header_max_elevation">4dp</dimen>
<dimen name="all_apps_header_scroll_to_elevation">16dp</dimen>
<dimen name="all_apps_header_shadow_height">6dp</dimen>
<!-- Dragging -->
<!-- the area at the edge of the screen that makes the workspace go left
or right while you're dragging. -->
<dimen name="scroll_zone">20dp</dimen>
<!-- When dragging an item, how much bigger (fixed dps) the dragged view
should be. If 0, it will not be scaled at all. -->
<dimen name="dragViewScale">12dp</dimen>
<!-- Elevation for the drag view. It should be larger than elevation of all other drag sources
and drop targets like all-apps and folders -->
<dimen name="drag_elevation">30dp</dimen>
<!-- Widget tray -->
<dimen name="widget_container_inset">8dp</dimen>
<dimen name="widget_preview_label_vertical_padding">8dp</dimen>
@ -109,6 +91,23 @@
<dimen name="shortcut_preview_padding_right">0dp</dimen>
<dimen name="shortcut_preview_padding_top">0dp</dimen>
<!-- Dragging -->
<!-- Drag padding to add to the bottom of drop targets -->
<dimen name="drop_target_drag_padding">14dp</dimen>
<dimen name="drop_target_text_size">14sp</dimen>
<!-- the area at the edge of the screen that makes the workspace go left
or right while you're dragging. -->
<dimen name="scroll_zone">20dp</dimen>
<!-- When dragging an item, how much bigger (fixed dps) the dragged view
should be. If 0, it will not be scaled at all. -->
<dimen name="dragViewScale">12dp</dimen>
<!-- Elevation for the drag view. It should be larger than elevation of all other drag sources
and drop targets like all-apps and folders -->
<dimen name="drag_elevation">30dp</dimen>
<!-- Theme -->
<dimen name="quantum_panel_outer_padding">4dp</dimen>

View File

@ -47,20 +47,20 @@
<string name="toggle_weight_watcher">Show Mem</string>
<!-- AppsCustomize pane -->
<!-- Widgets -->
<!-- Message to tell the user to press and hold on a widget to add it [CHAR_LIMIT=50] -->
<string name="long_press_widget_to_add">Touch &amp; hold to pick up a widget.</string>
<!-- The format string for the dimensions of a widget in the drawer -->
<!-- There is a special version of this format string for Farsi -->
<string name="widget_dims_format">%1$d \u00d7 %2$d</string>
<!-- Apps view -->
<!-- All Apps -->
<!-- Search bar text in the apps view. [CHAR_LIMIT=50] -->
<string name="apps_view_search_bar_hint">Search Apps</string>
<string name="all_apps_search_bar_hint">Search Apps</string>
<!-- Loading apps text. [CHAR_LIMIT=50] -->
<string name="loading_apps_message">Loading Apps&#8230;</string>
<string name="all_apps_loading_message">Loading Apps&#8230;</string>
<!-- No-search-results text. [CHAR_LIMIT=50] -->
<string name="apps_view_no_search_results">No Apps found matching \"<xliff:g id="query" example="Android">%1$s</xliff:g>\"</string>
<string name="all_apps_no_search_results">No Apps found matching \"<xliff:g id="query" example="Android">%1$s</xliff:g>\"</string>
<!-- Drag and drop -->
<skip />

View File

@ -38,7 +38,7 @@ public class AppInfo extends ItemInfo {
/**
* The intent used to start the application.
*/
Intent intent;
public Intent intent;
/**
* A bitmap version of the application icon.

View File

@ -26,7 +26,7 @@ import com.android.launcher3.util.Thunk;
* A base {@link RecyclerView}, which will NOT intercept a touch sequence unless the scrolling
* velocity is below a predefined threshold.
*/
public class BaseContainerRecyclerView extends RecyclerView
public class BaseRecyclerView extends RecyclerView
implements RecyclerView.OnItemTouchListener {
private static final int SCROLL_DELTA_THRESHOLD_DP = 4;
@ -35,15 +35,15 @@ public class BaseContainerRecyclerView extends RecyclerView
@Thunk int mDy = 0;
private float mDeltaThreshold;
public BaseContainerRecyclerView(Context context) {
public BaseRecyclerView(Context context) {
this(context, null);
}
public BaseContainerRecyclerView(Context context, AttributeSet attrs) {
public BaseRecyclerView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public BaseContainerRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
public BaseRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mDeltaThreshold = getResources().getDisplayMetrics().density * SCROLL_DELTA_THRESHOLD_DP;

View File

@ -70,7 +70,7 @@ public class DeviceProfile {
public int iconSizePx;
public int iconTextSizePx;
public int iconDrawablePaddingPx;
private final int iconDrawablePaddingOriginalPx;
public int iconDrawablePaddingOriginalPx;
public int cellWidthPx;
public int cellHeightPx;
@ -88,11 +88,8 @@ public class DeviceProfile {
private int hotseatBarHeightPx;
// All apps
private int allAppsCellWidthPx;
public int allAppsCellHeightPx;
private final int allAppsCellPaddingPx;
public int appsViewNumCols;
public int appsViewNumPredictiveCols;
public int allAppsNumCols;
public int allAppsNumPredictiveCols;
public int allAppsButtonVisualSize;
public final int allAppsIconSizePx;
public final int allAppsIconTextSizePx;
@ -129,8 +126,6 @@ public class DeviceProfile {
res.getDimensionPixelSize(R.dimen.dynamic_grid_page_indicator_height);
defaultPageSpacingPx =
res.getDimensionPixelSize(R.dimen.dynamic_grid_workspace_page_spacing);
allAppsCellPaddingPx =
res.getDimensionPixelSize(R.dimen.dynamic_grid_all_apps_cell_padding);
overviewModeMinIconZoneHeightPx =
res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_min_icon_zone_height);
overviewModeMaxIconZoneHeightPx =
@ -143,7 +138,6 @@ public class DeviceProfile {
res.getInteger(R.integer.config_dynamic_grid_overview_icon_zone_percentage) / 100f;
overviewModeScaleFactor =
res.getInteger(R.integer.config_dynamic_grid_overview_scale_percentage) / 100f;
iconDrawablePaddingOriginalPx =
res.getDimensionPixelSize(R.dimen.dynamic_grid_icon_drawable_padding);
@ -230,25 +224,22 @@ public class DeviceProfile {
folderBackgroundOffset = -edgeMarginPx;
folderIconSizePx = iconSizePx + 2 * -folderBackgroundOffset;
// All Apps
allAppsCellWidthPx = allAppsIconSizePx;
allAppsCellHeightPx = allAppsIconSizePx + drawablePadding + allAppsIconTextSizePx;
int appsContainerViewWidthPx = res.getDimensionPixelSize(R.dimen.apps_container_width);
updateAppsViewNumCols(res, appsContainerViewWidthPx);
updateAppsViewNumCols(res, 0);
}
public boolean updateAppsViewNumCols(Resources res, int containerWidth) {
int appsViewLeftMarginPx =
res.getDimensionPixelSize(R.dimen.apps_grid_view_start_margin);
res.getDimensionPixelSize(R.dimen.all_apps_grid_view_start_margin);
int allAppsCellPaddingPx =
res.getDimensionPixelSize(R.dimen.all_apps_icon_left_right_padding);
int availableAppsWidthPx = (containerWidth > 0) ? containerWidth : availableWidthPx;
int numAppsCols = (availableAppsWidthPx - appsViewLeftMarginPx) /
(allAppsCellWidthPx + 2 * allAppsCellPaddingPx);
(allAppsIconSizePx + 2 * allAppsCellPaddingPx);
int numPredictiveAppCols = isPhone ? 4 : numAppsCols;
if ((numAppsCols != appsViewNumCols) ||
(numPredictiveAppCols != appsViewNumPredictiveCols)) {
appsViewNumCols = numAppsCols;
appsViewNumPredictiveCols = numPredictiveAppCols;
if ((numAppsCols != allAppsNumCols) ||
(numPredictiveAppCols != allAppsNumPredictiveCols)) {
allAppsNumCols = numAppsCols;
allAppsNumPredictiveCols = numPredictiveAppCols;
return true;
}
return false;

View File

@ -98,6 +98,7 @@ import android.widget.Toast;
import com.android.launcher3.DropTarget.DragObject;
import com.android.launcher3.PagedView.PageSwitchListener;
import com.android.launcher3.accessibility.LauncherAccessibilityDelegate;
import com.android.launcher3.allapps.AllAppsContainerView;
import com.android.launcher3.compat.AppWidgetManagerCompat;
import com.android.launcher3.compat.LauncherActivityInfoCompat;
import com.android.launcher3.compat.LauncherAppsCompat;
@ -272,7 +273,7 @@ public class Launcher extends Activity
private SearchDropTargetBar mSearchDropTargetBar;
// Main container view for the all apps screen.
@Thunk AppsContainerView mAppsView;
@Thunk AllAppsContainerView mAppsView;
// Main container view and the model for the widget tray screen.
@Thunk WidgetsContainerView mWidgetsView;
@ -1475,7 +1476,7 @@ public class Launcher extends Activity
mDragLayer.findViewById(R.id.search_drop_target_bar);
// Setup Apps
mAppsView = (AppsContainerView) findViewById(R.id.apps_view);
mAppsView = (AllAppsContainerView) findViewById(R.id.apps_view);
if (isAllAppsSearchOverridden()) {
mAppsView.hideHeaderBar();
}
@ -1524,8 +1525,6 @@ public class Launcher extends Activity
* Creates a view representing a shortcut.
*
* @param info The data structure describing the shortcut.
*
* @return A View inflated from R.layout.application.
*/
View createShortcut(ShortcutInfo info) {
return createShortcut((ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentPage()), info);
@ -1540,7 +1539,7 @@ public class Launcher extends Activity
* @return A View inflated from layoutResId.
*/
public View createShortcut(ViewGroup parent, ShortcutInfo info) {
BubbleTextView favorite = (BubbleTextView) mInflater.inflate(R.layout.application,
BubbleTextView favorite = (BubbleTextView) mInflater.inflate(R.layout.app_icon,
parent, false);
favorite.applyFromShortcutInfo(info, mIconCache);
favorite.setCompoundDrawablePadding(mDeviceProfile.iconDrawablePaddingPx);
@ -1875,7 +1874,7 @@ public class Launcher extends Activity
return mDragLayer;
}
public AppsContainerView getAppsView() {
public AllAppsContainerView getAppsView() {
return mAppsView;
}
@ -3347,7 +3346,7 @@ public class Launcher extends Activity
}
}
protected void showWorkspace(boolean animated) {
public void showWorkspace(boolean animated) {
showWorkspace(WorkspaceStateTransitionAnimation.SCROLL_TO_CURRENT_PAGE, animated, null,
true);
}
@ -4813,14 +4812,6 @@ public class Launcher extends Activity
}
}
interface LauncherTransitionable {
View getContent();
void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace);
void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace);
void onLauncherTransitionStep(Launcher l, float t);
void onLauncherTransitionEnd(Launcher l, boolean animated, boolean toWorkspace);
}
interface DebugIntents {
static final String DELETE_DATABASE = "com.android.launcher3.action.DELETE_DATABASE";
static final String MIGRATE_DATABASE = "com.android.launcher3.action.MIGRATE_DATABASE";

View File

@ -23,14 +23,13 @@ import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.animation.TimeInterpolator;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.res.Resources;
import android.os.Build;
import android.util.Log;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import com.android.launcher3.allapps.AllAppsContainerView;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.widget.WidgetsContainerView;
import java.util.HashMap;
@ -129,7 +128,7 @@ public class LauncherStateTransitionAnimation {
* Starts an animation to the apps view.
*/
public void startAnimationToAllApps(final boolean animated) {
final AppsContainerView toView = mLauncher.getAppsView();
final AllAppsContainerView toView = mLauncher.getAppsView();
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
private int[] mAllAppsToPanelDelta;
@ -233,9 +232,9 @@ public class LauncherStateTransitionAnimation {
final boolean hideSearchBar, final PrivateTransitionCallbacks pCb) {
final Resources res = mLauncher.getResources();
final boolean material = Utilities.isLmpOrAbove();
final int revealDuration = res.getInteger(R.integer.config_appsCustomizeRevealTime);
final int revealDuration = res.getInteger(R.integer.config_overlayRevealTime);
final int itemsAlphaStagger =
res.getInteger(R.integer.config_appsCustomizeItemsAlphaStagger);
res.getInteger(R.integer.config_overlayItemsAlphaStagger);
final View allAppsButtonView = mLauncher.getAllAppsButton();
final View fromView = mLauncher.getWorkspace();
@ -428,7 +427,7 @@ public class LauncherStateTransitionAnimation {
private void startAnimationToWorkspaceFromAllApps(final Launcher.State fromState,
final Workspace.State toWorkspaceState, final int toWorkspacePage,
final boolean animated, final Runnable onCompleteRunnable) {
AppsContainerView appsView = mLauncher.getAppsView();
AllAppsContainerView appsView = mLauncher.getAppsView();
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
int[] mAllAppsToPanelDelta;
@ -530,9 +529,9 @@ public class LauncherStateTransitionAnimation {
final PrivateTransitionCallbacks pCb) {
final Resources res = mLauncher.getResources();
final boolean material = Utilities.isLmpOrAbove();
final int revealDuration = res.getInteger(R.integer.config_appsCustomizeRevealTime);
final int revealDuration = res.getInteger(R.integer.config_overlayRevealTime);
final int itemsAlphaStagger =
res.getInteger(R.integer.config_appsCustomizeItemsAlphaStagger);
res.getInteger(R.integer.config_overlayItemsAlphaStagger);
final View allAppsButtonView = mLauncher.getAllAppsButton();
final View toView = mLauncher.getWorkspace();

View File

@ -0,0 +1,30 @@
/*
* 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.
*/
package com.android.launcher3;
import android.view.View;
/**
* An interface to get callbacks during a launcher transition.
*/
public interface LauncherTransitionable {
View getContent();
void onLauncherTransitionPrepare(Launcher l, boolean animated, boolean toWorkspace);
void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace);
void onLauncherTransitionStep(Launcher l, float t);
void onLauncherTransitionEnd(Launcher l, boolean animated, boolean toWorkspace);
}

View File

@ -25,7 +25,6 @@ import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Process;
import android.util.Log;
import android.util.LongSparseArray;
import com.android.launcher3.compat.AppWidgetManagerCompat;
@ -34,7 +33,6 @@ import com.android.launcher3.compat.UserManagerCompat;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.Thunk;
import com.android.launcher3.widget.WidgetCell;
import junit.framework.Assert;
import java.util.ArrayList;
import java.util.Collections;

View File

@ -163,9 +163,9 @@ public class WorkspaceStateTransitionAnimation {
DeviceProfile grid = mLauncher.getDeviceProfile();
Resources res = launcher.getResources();
mAllAppsTransitionTime = res.getInteger(R.integer.config_workspaceUnshrinkTime);
mAllAppsTransitionTime = res.getInteger(R.integer.config_allAppsTransitionTime);
mOverviewTransitionTime = res.getInteger(R.integer.config_overviewTransitionTime);
mOverlayTransitionTime = res.getInteger(R.integer.config_appsCustomizeWorkspaceShrinkTime);
mOverlayTransitionTime = res.getInteger(R.integer.config_overlayTransitionTime);
mSpringLoadedShrinkFactor =
res.getInteger(R.integer.config_workspaceSpringLoadShrinkPercentage) / 100f;
mWorkspaceScrimAlpha = res.getInteger(R.integer.config_workspaceScrimAlpha) / 100f;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3;
package com.android.launcher3.allapps;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
@ -22,6 +22,7 @@ import android.content.Context;
import android.content.res.Resources;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.InsetDrawable;
import android.os.Build;
@ -40,7 +41,24 @@ import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.android.launcher3.AppInfo;
import com.android.launcher3.BaseContainerView;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.CellLayout;
import com.android.launcher3.CheckLongPressHelper;
import com.android.launcher3.DeleteDropTarget;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.DragSource;
import com.android.launcher3.DropTarget;
import com.android.launcher3.Folder;
import com.android.launcher3.Insettable;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherTransitionable;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.Workspace;
import com.android.launcher3.util.Thunk;
import java.util.List;
@ -52,6 +70,7 @@ import java.util.regex.Pattern;
*/
interface HeaderElevationController {
void onScroll(int scrollY);
void updateBackgroundPadding(Drawable bg);
void disable();
}
@ -62,8 +81,8 @@ interface HeaderElevationController {
final class HeaderElevationControllerV16 implements HeaderElevationController {
private final View mShadow;
private final float mScrollToElevation;
private final Rect mTmpRect = new Rect();
public HeaderElevationControllerV16(View header) {
Resources res = header.getContext().getResources();
@ -89,6 +108,15 @@ final class HeaderElevationControllerV16 implements HeaderElevationController {
mShadow.setAlpha(elevationPct);
}
@Override
public void updateBackgroundPadding(Drawable bg) {
bg.getPadding(mTmpRect);
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mShadow.getLayoutParams();
lp.leftMargin = mTmpRect.left;
lp.rightMargin = mTmpRect.right;
mShadow.requestLayout();
}
@Override
public void disable() {
ViewGroup parent = (ViewGroup) mShadow.getParent();
@ -127,6 +155,11 @@ final class HeaderElevationControllerVL implements HeaderElevationController {
}
}
@Override
public void updateBackgroundPadding(Drawable bg) {
// Do nothing, the background padding on the header view is already applied
}
@Override
public void disable() { }
}
@ -134,9 +167,9 @@ final class HeaderElevationControllerVL implements HeaderElevationController {
/**
* The all apps view container.
*/
public class AppsContainerView extends BaseContainerView implements DragSource, Insettable,
public class AllAppsContainerView extends BaseContainerView implements DragSource, Insettable,
TextWatcher, TextView.OnEditorActionListener, LauncherTransitionable,
AlphabeticalAppsList.AdapterChangedCallback, AppsGridAdapter.PredictionBarSpacerCallbacks,
AlphabeticalAppsList.AdapterChangedCallback, AllAppsGridAdapter.PredictionBarSpacerCallbacks,
View.OnTouchListener, View.OnClickListener, View.OnLongClickListener,
ViewTreeObserver.OnPreDrawListener {
@ -155,18 +188,18 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
@Thunk Launcher mLauncher;
@Thunk AlphabeticalAppsList mApps;
private LayoutInflater mLayoutInflater;
private AppsGridAdapter mAdapter;
private AllAppsGridAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private RecyclerView.ItemDecoration mItemDecoration;
private FrameLayout mContentView;
@Thunk AppsContainerRecyclerView mAppsRecyclerView;
@Thunk AllAppsRecyclerView mAppsRecyclerView;
private ViewGroup mPredictionBarView;
private View mHeaderView;
private View mSearchBarContainerView;
private View mSearchButtonView;
private View mDismissSearchButtonView;
private AppsContainerSearchEditTextView mSearchBarEditView;
private AllAppsSearchEditView mSearchBarEditView;
private HeaderElevationController mElevationController;
@ -188,15 +221,15 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
private CheckLongPressHelper mPredictionIconCheckForLongPress;
private View mPredictionIconUnderTouch;
public AppsContainerView(Context context) {
public AllAppsContainerView(Context context) {
this(context, null);
}
public AppsContainerView(Context context, AttributeSet attrs) {
public AllAppsContainerView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AppsContainerView(Context context, AttributeSet attrs, int defStyleAttr) {
public AllAppsContainerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
LauncherAppState app = LauncherAppState.getInstance();
Resources res = context.getResources();
@ -205,18 +238,19 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
DeviceProfile grid = mLauncher.getDeviceProfile();
mContainerInset = context.getResources().getDimensionPixelSize(
R.dimen.apps_container_inset);
mPredictionBarHeight = grid.allAppsCellHeightPx +
2 * res.getDimensionPixelSize(R.dimen.apps_prediction_icon_top_bottom_padding);
R.dimen.all_apps_container_inset);
mPredictionBarHeight = grid.allAppsIconSizePx + grid.iconDrawablePaddingOriginalPx +
grid.allAppsIconTextSizePx +
2 * res.getDimensionPixelSize(R.dimen.all_apps_prediction_icon_top_bottom_padding);
mLayoutInflater = LayoutInflater.from(context);
mNumAppsPerRow = grid.appsViewNumCols;
mNumPredictedAppsPerRow = grid.appsViewNumPredictiveCols;
mNumAppsPerRow = grid.allAppsNumCols;
mNumPredictedAppsPerRow = grid.allAppsNumPredictiveCols;
mApps = new AlphabeticalAppsList(context, mNumAppsPerRow, mNumPredictedAppsPerRow);
mApps.setAdapterChangedCallback(this);
mAdapter = new AppsGridAdapter(context, mApps, mNumAppsPerRow, this, this, mLauncher, this);
mAdapter.setEmptySearchText(res.getString(R.string.loading_apps_message));
mAdapter = new AllAppsGridAdapter(context, mApps, mNumAppsPerRow, this, this, mLauncher, this);
mAdapter.setEmptySearchText(res.getString(R.string.all_apps_loading_message));
mAdapter.setNumAppsPerRow(mNumAppsPerRow);
mAdapter.setPredictionRowHeight(mPredictionBarHeight);
mLayoutManager = mAdapter.getLayoutManager();
@ -340,13 +374,13 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
mSearchBarContainerView = findViewById(R.id.app_search_container);
mDismissSearchButtonView = mSearchBarContainerView.findViewById(R.id.dismiss_search_button);
mDismissSearchButtonView.setOnClickListener(this);
mSearchBarEditView = (AppsContainerSearchEditTextView) findViewById(R.id.app_search_box);
mSearchBarEditView = (AllAppsSearchEditView) findViewById(R.id.apps_search_box);
if (mSearchBarEditView != null) {
mSearchBarEditView.addTextChangedListener(this);
mSearchBarEditView.setOnEditorActionListener(this);
if (DISMISS_SEARCH_ON_BACK) {
mSearchBarEditView.setOnBackKeyListener(
new AppsContainerSearchEditTextView.OnBackKeyListener() {
new AllAppsSearchEditView.OnBackKeyListener() {
@Override
public void onBackKey() {
// Only hide the search field if there is no query, or if there
@ -360,7 +394,7 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
});
}
}
mAppsRecyclerView = (AppsContainerRecyclerView) findViewById(R.id.apps_list_view);
mAppsRecyclerView = (AllAppsRecyclerView) findViewById(R.id.apps_list_view);
mAppsRecyclerView.setApps(mApps);
mAppsRecyclerView.setNumAppsPerRow(mNumAppsPerRow, mNumPredictedAppsPerRow);
mAppsRecyclerView.setPredictionBarHeight(mPredictionBarHeight);
@ -388,7 +422,7 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
} else {
// Otherwise, inflate a new icon
icon = (BubbleTextView) mLayoutInflater.inflate(
R.layout.apps_prediction_bar_icon_view, mPredictionBarView, false);
R.layout.all_apps_prediction_bar_icon, mPredictionBarView, false);
icon.setFocusable(true);
mPredictionBarView.addView(icon);
}
@ -416,8 +450,8 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
LauncherAppState app = LauncherAppState.getInstance();
DeviceProfile grid = mLauncher.getDeviceProfile();
if (grid.updateAppsViewNumCols(getContext().getResources(), mFixedBounds.width())) {
mNumAppsPerRow = grid.appsViewNumCols;
mNumPredictedAppsPerRow = grid.appsViewNumPredictiveCols;
mNumAppsPerRow = grid.allAppsNumCols;
mNumPredictedAppsPerRow = grid.allAppsNumPredictiveCols;
mAppsRecyclerView.setNumAppsPerRow(mNumAppsPerRow, mNumPredictedAppsPerRow);
mAdapter.setNumAppsPerRow(mNumAppsPerRow);
mApps.setNumAppsPerRow(mNumAppsPerRow, mNumPredictedAppsPerRow);
@ -493,6 +527,7 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
mContentView.setBackground(background);
mAppsRecyclerView.updateBackgroundPadding(background);
mAdapter.updateBackgroundPadding(background);
mElevationController.updateBackgroundPadding(background);
getRevealView().setBackground(background.getConstantState().newDrawable());
}
@ -632,7 +667,7 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
if (queryText.isEmpty()) {
mApps.setFilter(null);
} else {
String formatStr = getResources().getString(R.string.apps_view_no_search_results);
String formatStr = getResources().getString(R.string.all_apps_no_search_results);
mAdapter.setEmptySearchText(String.format(formatStr, queryText));
// Do an intersection of the words in the query and each title, and filter out all the
@ -679,7 +714,7 @@ public class AppsContainerView extends BaseContainerView implements DragSource,
List<AlphabeticalAppsList.AdapterItem> items = mApps.getAdapterItems();
for (int i = 0; i < items.size(); i++) {
AlphabeticalAppsList.AdapterItem item = items.get(i);
if (item.viewType == AppsGridAdapter.ICON_VIEW_TYPE) {
if (item.viewType == AllAppsGridAdapter.ICON_VIEW_TYPE) {
mAppsRecyclerView.getChildAt(i).performClick();
getInputMethodManager().hideSoftInputFromWindow(getWindowToken(), 0);
return true;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3;
package com.android.launcher3.allapps;
import android.content.Context;
import android.content.res.Resources;
@ -29,6 +29,12 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.android.launcher3.AppInfo;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.util.Thunk;
import java.util.HashMap;
@ -38,7 +44,7 @@ import java.util.List;
/**
* The grid view adapter of all the apps.
*/
class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.ViewHolder> {
public static final String TAG = "AppsGridAdapter";
private static final boolean DEBUG = false;
@ -48,7 +54,7 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
// A normal icon
public static final int ICON_VIEW_TYPE = 1;
// The message shown when there are no filtered results
public static final int EMPTY_VIEW_TYPE = 2;
public static final int EMPTY_SEARCH_VIEW_TYPE = 2;
// The spacer used for the prediction bar
public static final int PREDICTION_BAR_SPACER_TYPE = 3;
@ -88,7 +94,7 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
return mAppsPerRow;
}
if (mApps.getAdapterItems().get(position).viewType != AppsGridAdapter.ICON_VIEW_TYPE) {
if (mApps.getAdapterItems().get(position).viewType != AllAppsGridAdapter.ICON_VIEW_TYPE) {
// Both the section breaks and predictive bar span the full width
return mAppsPerRow;
} else {
@ -255,7 +261,7 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
private boolean shouldDrawItemDivider(ViewHolder holder,
List<AlphabeticalAppsList.AdapterItem> items) {
int pos = holder.getPosition();
return items.get(pos).viewType == AppsGridAdapter.PREDICTION_BAR_SPACER_TYPE;
return items.get(pos).viewType == AllAppsGridAdapter.PREDICTION_BAR_SPACER_TYPE;
}
/**
@ -267,12 +273,12 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
AlphabeticalAppsList.AdapterItem item = items.get(pos);
// Ensure it's an icon
if (item.viewType != AppsGridAdapter.ICON_VIEW_TYPE) {
if (item.viewType != AllAppsGridAdapter.ICON_VIEW_TYPE) {
return false;
}
// Draw the section header for the first item in each section
return (childIndex == 0) ||
(items.get(pos - 1).viewType == AppsGridAdapter.SECTION_BREAK_VIEW_TYPE);
(items.get(pos - 1).viewType == AllAppsGridAdapter.SECTION_BREAK_VIEW_TYPE);
}
}
@ -299,7 +305,7 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
@Thunk Paint mSectionTextPaint;
@Thunk Paint mPredictedAppsDividerPaint;
public AppsGridAdapter(Context context, AlphabeticalAppsList apps, int appsPerRow,
public AllAppsGridAdapter(Context context, AlphabeticalAppsList apps, int appsPerRow,
PredictionBarSpacerCallbacks pbCb, View.OnTouchListener touchListener,
View.OnClickListener iconClickListener, View.OnLongClickListener iconLongClickListener) {
Resources res = context.getResources();
@ -316,14 +322,14 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
mTouchListener = touchListener;
mIconClickListener = iconClickListener;
mIconLongClickListener = iconLongClickListener;
mStartMargin = res.getDimensionPixelSize(R.dimen.apps_grid_view_start_margin);
mSectionHeaderOffset = res.getDimensionPixelSize(R.dimen.apps_grid_section_y_offset);
mPaddingStart = res.getDimensionPixelSize(R.dimen.apps_container_inset);
mStartMargin = res.getDimensionPixelSize(R.dimen.all_apps_grid_view_start_margin);
mSectionHeaderOffset = res.getDimensionPixelSize(R.dimen.all_apps_grid_section_y_offset);
mPaddingStart = res.getDimensionPixelSize(R.dimen.all_apps_container_inset);
mSectionTextPaint = new Paint();
mSectionTextPaint.setTextSize(res.getDimensionPixelSize(
R.dimen.apps_view_section_text_size));
mSectionTextPaint.setColor(res.getColor(R.color.apps_view_section_text_color));
R.dimen.all_apps_grid_section_text_size));
mSectionTextPaint.setColor(res.getColor(R.color.all_apps_grid_section_text_color));
mSectionTextPaint.setAntiAlias(true);
mPredictedAppsDividerPaint = new Paint();
@ -394,8 +400,8 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case EMPTY_VIEW_TYPE:
return new ViewHolder(mLayoutInflater.inflate(R.layout.apps_empty_view, parent,
case EMPTY_SEARCH_VIEW_TYPE:
return new ViewHolder(mLayoutInflater.inflate(R.layout.all_apps_empty_search, parent,
false));
case SECTION_BREAK_VIEW_TYPE:
return new ViewHolder(new View(parent.getContext()));
@ -408,7 +414,7 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
return new ViewHolder(v);
case ICON_VIEW_TYPE:
BubbleTextView icon = (BubbleTextView) mLayoutInflater.inflate(
R.layout.apps_grid_icon_view, parent, false);
R.layout.all_apps_icon, parent, false);
icon.setOnTouchListener(mTouchListener);
icon.setOnClickListener(mIconClickListener);
icon.setOnLongClickListener(mIconLongClickListener);
@ -437,7 +443,7 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
}
});
break;
case EMPTY_VIEW_TYPE:
case EMPTY_SEARCH_VIEW_TYPE:
TextView emptyViewText = (TextView) holder.mContent.findViewById(R.id.empty_text);
emptyViewText.setText(mEmptySearchText);
break;
@ -456,7 +462,7 @@ class AppsGridAdapter extends RecyclerView.Adapter<AppsGridAdapter.ViewHolder> {
@Override
public int getItemViewType(int position) {
if (mApps.hasNoFilteredResults()) {
return EMPTY_VIEW_TYPE;
return EMPTY_SEARCH_VIEW_TYPE;
}
AlphabeticalAppsList.AdapterItem item = mApps.getAdapterItems().get(position);

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3;
package com.android.launcher3.allapps;
import android.animation.ObjectAnimator;
import android.content.Context;
@ -29,6 +29,11 @@ import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import com.android.launcher3.BaseRecyclerView;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import java.util.List;
@ -36,7 +41,7 @@ import java.util.List;
* A RecyclerView with custom fastscroll support. This is the main container for the all apps
* icons.
*/
public class AppsContainerRecyclerView extends BaseContainerRecyclerView {
public class AllAppsRecyclerView extends BaseRecyclerView {
/**
* The current scroll state of the recycler view. We use this in updateVerticalScrollbarBounds()
@ -82,38 +87,38 @@ public class AppsContainerRecyclerView extends BaseContainerRecyclerView {
private Launcher mLauncher;
public AppsContainerRecyclerView(Context context) {
public AllAppsRecyclerView(Context context) {
this(context, null);
}
public AppsContainerRecyclerView(Context context, AttributeSet attrs) {
public AllAppsRecyclerView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AppsContainerRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
public AllAppsRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public AppsContainerRecyclerView(Context context, AttributeSet attrs, int defStyleAttr,
public AllAppsRecyclerView(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr);
mLauncher = (Launcher) context;
Resources res = context.getResources();
int fastScrollerSize = res.getDimensionPixelSize(R.dimen.apps_view_fast_scroll_popup_size);
mScrollbar = res.getDrawable(R.drawable.apps_list_scrollbar_thumb);
mFastScrollerBg = res.getDrawable(R.drawable.apps_list_fastscroll_bg);
int fastScrollerSize = res.getDimensionPixelSize(R.dimen.all_apps_fast_scroll_popup_size);
mScrollbar = res.getDrawable(R.drawable.all_apps_scrollbar_thumb);
mFastScrollerBg = res.getDrawable(R.drawable.all_apps_fastscroll_bg);
mFastScrollerBg.setBounds(0, 0, fastScrollerSize, fastScrollerSize);
mFastScrollTextPaint = new Paint();
mFastScrollTextPaint.setColor(Color.WHITE);
mFastScrollTextPaint.setAntiAlias(true);
mFastScrollTextPaint.setTextSize(res.getDimensionPixelSize(
R.dimen.apps_view_fast_scroll_text_size));
mScrollbarWidth = res.getDimensionPixelSize(R.dimen.apps_view_fast_scroll_bar_width);
R.dimen.all_apps_fast_scroll_text_size));
mScrollbarWidth = res.getDimensionPixelSize(R.dimen.all_apps_fast_scroll_bar_width);
mScrollbarMinHeight =
res.getDimensionPixelSize(R.dimen.apps_view_fast_scroll_bar_min_height);
res.getDimensionPixelSize(R.dimen.all_apps_fast_scroll_bar_min_height);
mScrollbarInset =
res.getDimensionPixelSize(R.dimen.apps_view_fast_scroll_scrubber_touch_inset);
res.getDimensionPixelSize(R.dimen.all_apps_fast_scroll_scrubber_touch_inset);
setFastScrollerAlpha(getFastScrollerAlpha());
setOverScrollMode(View.OVER_SCROLL_NEVER);
}
@ -135,10 +140,10 @@ public class AppsContainerRecyclerView extends BaseContainerRecyclerView {
DeviceProfile grid = mLauncher.getDeviceProfile();
RecyclerView.RecycledViewPool pool = getRecycledViewPool();
int approxRows = (int) Math.ceil(grid.availableHeightPx / grid.allAppsIconSizePx);
pool.setMaxRecycledViews(AppsGridAdapter.PREDICTION_BAR_SPACER_TYPE, 1);
pool.setMaxRecycledViews(AppsGridAdapter.EMPTY_VIEW_TYPE, 1);
pool.setMaxRecycledViews(AppsGridAdapter.ICON_VIEW_TYPE, approxRows * mNumAppsPerRow);
pool.setMaxRecycledViews(AppsGridAdapter.SECTION_BREAK_VIEW_TYPE, approxRows);
pool.setMaxRecycledViews(AllAppsGridAdapter.PREDICTION_BAR_SPACER_TYPE, 1);
pool.setMaxRecycledViews(AllAppsGridAdapter.EMPTY_SEARCH_VIEW_TYPE, 1);
pool.setMaxRecycledViews(AllAppsGridAdapter.ICON_VIEW_TYPE, approxRows * mNumAppsPerRow);
pool.setMaxRecycledViews(AllAppsGridAdapter.SECTION_BREAK_VIEW_TYPE, approxRows);
}
public void updateBackgroundPadding(Drawable background) {
@ -511,7 +516,7 @@ public class AppsContainerRecyclerView extends BaseContainerRecyclerView {
int position = getChildPosition(child);
if (position != NO_POSITION) {
AlphabeticalAppsList.AdapterItem item = items.get(position);
if (item.viewType == AppsGridAdapter.ICON_VIEW_TYPE) {
if (item.viewType == AllAppsGridAdapter.ICON_VIEW_TYPE) {
stateOut.rowIndex = findRowForAppIndex(item.appIndex);
stateOut.rowTopOffset = getLayoutManager().getDecoratedTop(child);
stateOut.rowHeight = child.getHeight();

View File

@ -13,29 +13,37 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3;
package com.android.launcher3.allapps;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.BubbleTextView.BubbleTextShadowHandler;
import com.android.launcher3.ClickShadowView;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
public class AppsRecyclerViewContainer extends FrameLayout implements BubbleTextShadowHandler {
/**
* A container for RecyclerView to allow for the click shadow view to be shown behind an icon that
* is launching.
*/
public class AllAppsRecyclerViewContainerView extends FrameLayout
implements BubbleTextShadowHandler {
private final ClickShadowView mTouchFeedbackView;
public AppsRecyclerViewContainer(Context context) {
public AllAppsRecyclerViewContainerView(Context context) {
this(context, null);
}
public AppsRecyclerViewContainer(Context context, AttributeSet attrs) {
public AllAppsRecyclerViewContainerView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AppsRecyclerViewContainer(Context context, AttributeSet attrs, int defStyleAttr) {
public AllAppsRecyclerViewContainerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
Launcher launcher = (Launcher) context;

View File

@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3;
package com.android.launcher3.allapps;
import android.content.Context;
import android.util.AttributeSet;
@ -24,7 +24,7 @@ import android.widget.EditText;
/**
* The edit text for the search container
*/
public class AppsContainerSearchEditTextView extends EditText {
public class AllAppsSearchEditView extends EditText {
/**
* Implemented by listeners of the back key.
@ -35,15 +35,15 @@ public class AppsContainerSearchEditTextView extends EditText {
private OnBackKeyListener mBackKeyListener;
public AppsContainerSearchEditTextView(Context context) {
public AllAppsSearchEditView(Context context) {
this(context, null);
}
public AppsContainerSearchEditTextView(Context context, AttributeSet attrs) {
public AllAppsSearchEditView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AppsContainerSearchEditTextView(Context context, AttributeSet attrs, int defStyleAttr) {
public AllAppsSearchEditView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

View File

@ -1,9 +1,12 @@
package com.android.launcher3;
package com.android.launcher3.allapps;
import android.content.ComponentName;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import com.android.launcher3.AppInfo;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
import com.android.launcher3.compat.AlphabeticIndexCompat;
import com.android.launcher3.model.AppNameComparator;
@ -81,7 +84,7 @@ public class AlphabeticalAppsList {
public static AdapterItem asSectionBreak(int pos, SectionInfo section) {
AdapterItem item = new AdapterItem();
item.viewType = AppsGridAdapter.SECTION_BREAK_VIEW_TYPE;
item.viewType = AllAppsGridAdapter.SECTION_BREAK_VIEW_TYPE;
item.position = pos;
item.sectionInfo = section;
section.sectionBreakItem = item;
@ -90,7 +93,7 @@ public class AlphabeticalAppsList {
public static AdapterItem asPredictionBarSpacer(int pos) {
AdapterItem item = new AdapterItem();
item.viewType = AppsGridAdapter.PREDICTION_BAR_SPACER_TYPE;
item.viewType = AllAppsGridAdapter.PREDICTION_BAR_SPACER_TYPE;
item.position = pos;
return item;
}
@ -98,7 +101,7 @@ public class AlphabeticalAppsList {
public static AdapterItem asApp(int pos, SectionInfo section, String sectionName,
int sectionAppIndex, AppInfo appInfo, int appIndex) {
AdapterItem item = new AdapterItem();
item.viewType = AppsGridAdapter.ICON_VIEW_TYPE;
item.viewType = AllAppsGridAdapter.ICON_VIEW_TYPE;
item.position = pos;
item.sectionInfo = section;
item.sectionName = sectionName;
@ -516,7 +519,7 @@ public class AlphabeticalAppsList {
*/
private void mergeSections() {
// Go through each section and try and merge some of the sections
if (AppsContainerView.GRID_MERGE_SECTIONS && !hasFilter()) {
if (AllAppsContainerView.GRID_MERGE_SECTIONS && !hasFilter()) {
int sectionAppCount = 0;
for (int i = 0; i < mSections.size(); i++) {
SectionInfo section = mSections.get(i);

View File

@ -18,22 +18,22 @@ package com.android.launcher3.widget;
import android.content.Context;
import android.util.AttributeSet;
import com.android.launcher3.BaseContainerRecyclerView;
import com.android.launcher3.BaseRecyclerView;
/**
* The widgets recycler view container.
* The widgets recycler view.
*/
public class WidgetsContainerRecyclerView extends BaseContainerRecyclerView {
public class WidgetsRecyclerView extends BaseRecyclerView {
public WidgetsContainerRecyclerView(Context context) {
public WidgetsRecyclerView(Context context) {
this(context, null);
}
public WidgetsContainerRecyclerView(Context context, AttributeSet attrs) {
public WidgetsRecyclerView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public WidgetsContainerRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
public WidgetsRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}