├── .gitignore ├── Android.mk ├── AndroidManifest-common.xml ├── AndroidManifest.xml ├── CleanSpec.mk ├── LICENSE ├── MODULE_LICENSE_APACHE2 ├── README.md ├── assets ├── fonts │ └── GoogleSans-Regular.ttf └── license.html ├── build.gradle ├── fill_screens.py ├── go ├── AndroidManifest.xml ├── res │ ├── drawable │ │ └── ic_widget.xml │ ├── layout │ │ └── widget_cell_content.xml │ ├── values-af │ │ └── strings.xml │ ├── values-am │ │ └── strings.xml │ ├── values-ar │ │ └── strings.xml │ ├── values-az-rAZ │ │ └── strings.xml │ ├── values-az │ │ └── strings.xml │ ├── values-b+sr+Latn │ │ └── strings.xml │ ├── values-be │ │ └── strings.xml │ ├── values-bg │ │ └── strings.xml │ ├── values-bn │ │ └── strings.xml │ ├── values-bs-rBA │ │ └── strings.xml │ ├── values-bs │ │ └── strings.xml │ ├── values-ca │ │ └── strings.xml │ ├── values-cs │ │ └── strings.xml │ ├── values-da │ │ └── strings.xml │ ├── values-de │ │ └── strings.xml │ ├── values-el │ │ └── strings.xml │ ├── values-en-rAU │ │ └── strings.xml │ ├── values-en-rGB │ │ └── strings.xml │ ├── values-en-rIN │ │ └── strings.xml │ ├── values-es-rUS │ │ └── strings.xml │ ├── values-es │ │ └── strings.xml │ ├── values-et │ │ └── strings.xml │ ├── values-eu │ │ └── strings.xml │ ├── values-fa │ │ └── strings.xml │ ├── values-fi │ │ └── strings.xml │ ├── values-fr-rCA │ │ └── strings.xml │ ├── values-fr │ │ └── strings.xml │ ├── values-gl │ │ └── strings.xml │ ├── values-gu │ │ └── strings.xml │ ├── values-hi │ │ └── strings.xml │ ├── values-hr │ │ └── strings.xml │ ├── values-hu │ │ └── strings.xml │ ├── values-hy │ │ └── strings.xml │ ├── values-in │ │ └── strings.xml │ ├── values-is │ │ └── strings.xml │ ├── values-it │ │ └── strings.xml │ ├── values-iw │ │ └── strings.xml │ ├── values-ja │ │ └── strings.xml │ ├── values-ka-rGE │ │ └── strings.xml │ ├── values-ka │ │ └── strings.xml │ ├── values-kk │ │ └── strings.xml │ ├── values-km │ │ └── strings.xml │ ├── values-kn │ │ └── strings.xml │ ├── values-ko │ │ └── strings.xml │ ├── values-ky-rKG │ │ └── strings.xml │ ├── values-ky │ │ └── strings.xml │ ├── values-lo-rLA │ │ └── strings.xml │ ├── values-lo │ │ └── strings.xml │ ├── values-lt │ │ └── strings.xml │ ├── values-lv │ │ └── strings.xml │ ├── values-mk │ │ └── strings.xml │ ├── values-ml │ │ └── strings.xml │ ├── values-mn │ │ └── strings.xml │ ├── values-mr │ │ └── strings.xml │ ├── values-ms │ │ └── strings.xml │ ├── values-my │ │ └── strings.xml │ ├── values-nb │ │ └── strings.xml │ ├── values-ne │ │ └── strings.xml │ ├── values-nl │ │ └── strings.xml │ ├── values-pa │ │ └── strings.xml │ ├── values-pl │ │ └── strings.xml │ ├── values-pt-rPT │ │ └── strings.xml │ ├── values-pt │ │ └── strings.xml │ ├── values-ro │ │ └── strings.xml │ ├── values-ru │ │ └── strings.xml │ ├── values-si-rLK │ │ └── strings.xml │ ├── values-si │ │ └── strings.xml │ ├── values-sk │ │ └── strings.xml │ ├── values-sl │ │ └── strings.xml │ ├── values-sq │ │ └── strings.xml │ ├── values-sr │ │ └── strings.xml │ ├── values-sv │ │ └── strings.xml │ ├── values-sw │ │ └── strings.xml │ ├── values-ta │ │ └── strings.xml │ ├── values-te │ │ └── strings.xml │ ├── values-th │ │ └── strings.xml │ ├── values-tl │ │ └── strings.xml │ ├── values-tr │ │ └── strings.xml │ ├── values-uk │ │ └── strings.xml │ ├── values-ur │ │ └── strings.xml │ ├── values-uz-rUZ │ │ └── strings.xml │ ├── values-uz │ │ └── strings.xml │ ├── values-v23 │ │ └── bools.xml │ ├── values-v26 │ │ └── bools.xml │ ├── values-vi │ │ └── strings.xml │ ├── values-zh-rCN │ │ └── strings.xml │ ├── values-zh-rHK │ │ └── strings.xml │ ├── values-zh-rTW │ │ └── strings.xml │ ├── values-zu │ │ └── strings.xml │ ├── values │ │ ├── override.xml │ │ └── strings.xml │ └── xml │ │ └── device_profiles.xml └── src_flags │ └── com │ └── android │ └── launcher3 │ └── config │ └── FeatureFlags.java ├── print_db.py ├── proguard.flags ├── proto_overrides └── launcher_log_extension.proto ├── proto_pixel ├── search.proto └── smartspace.proto ├── protos ├── launcher_dump.proto └── launcher_log.proto ├── res ├── anim │ ├── no_anim.xml │ └── task_open_enter.xml ├── animator-v23 │ └── discovery_bounce.xml ├── animator │ ├── all_apps_fastscroll_icon_anim.xml │ ├── discovery_bounce.xml │ └── overview_button_anim.xml ├── color-v24 │ ├── all_apps_bg_hand_fill.xml │ └── all_apps_bg_hand_fill_dark.xml ├── color │ ├── primary_text_material_dark.xml │ ├── primary_text_material_light.xml │ ├── qsb_icon_tint.xml │ ├── secondary_text_material_dark.xml │ └── secondary_text_material_light.xml ├── drawable-hdpi │ ├── ic_allapps.png │ ├── ic_allapps_pressed.png │ ├── ic_widget_resize_handle.png │ ├── widget_resize_frame.9.png │ ├── widget_resize_shadow.9.png │ ├── workspace_bg.9.png │ └── workspace_bg_dark.9.png ├── drawable-mdpi │ ├── ic_allapps.png │ ├── ic_allapps_pressed.png │ ├── ic_widget_resize_handle.png │ ├── widget_resize_frame.9.png │ ├── widget_resize_shadow.9.png │ ├── workspace_bg.9.png │ └── workspace_bg_dark.9.png ├── drawable-v24 │ ├── ic_info_shadow.xml │ ├── ic_mic_shadow.xml │ ├── ic_remove_shadow.xml │ ├── ic_super_g_shadow.xml │ └── ic_uninstall_shadow.xml ├── drawable-v26 │ ├── adaptive_icon_drawable_wrapper.xml │ └── ic_launcher_home.xml ├── drawable-xhdpi │ ├── ic_allapps.png │ ├── ic_allapps_pressed.png │ ├── ic_widget_resize_handle.png │ ├── widget_resize_frame.9.png │ ├── widget_resize_shadow.9.png │ ├── workspace_bg.9.png │ └── workspace_bg_dark.9.png ├── drawable-xxhdpi │ ├── ic_allapps.png │ ├── ic_allapps_pressed.png │ ├── ic_widget_resize_handle.png │ ├── widget_resize_frame.9.png │ ├── widget_resize_shadow.9.png │ ├── workspace_bg.9.png │ └── workspace_bg_dark.9.png ├── drawable-xxxhdpi │ ├── ic_widget_resize_handle.png │ ├── widget_resize_frame.9.png │ ├── widget_resize_shadow.9.png │ ├── workspace_bg.9.png │ └── workspace_bg_dark.9.png ├── drawable │ ├── all_apps_button_icon.xml │ ├── all_apps_divider.xml │ ├── all_apps_search_divider.xml │ ├── all_apps_search_hint.xml │ ├── bg_celllayout.xml │ ├── bg_qsb_click_feedback.xml │ ├── bg_smartspace.xml │ ├── deep_shortcuts_drag_handle.xml │ ├── gutter_horizontal.xml │ ├── horizontal_ellipsis.xml │ ├── ic_all_apps_bg_hand.xml │ ├── ic_all_apps_bg_icon_1.xml │ ├── ic_all_apps_bg_icon_2.xml │ ├── ic_all_apps_bg_icon_3.xml │ ├── ic_all_apps_bg_icon_4.xml │ ├── ic_allapps_search.xml │ ├── ic_default_shortcut.xml │ ├── ic_edit_no_shadow.xml │ ├── ic_info_no_shadow.xml │ ├── ic_instant_app_badge.xml │ ├── ic_launcher_home.xml │ ├── ic_mic_color.xml │ ├── ic_mic_shadow.xml │ ├── ic_remove_no_shadow.xml │ ├── ic_setting.xml │ ├── ic_smartspace_preferences.xml │ ├── ic_star_rating.xml │ ├── ic_super_g_color.xml │ ├── ic_super_g_shadow.xml │ ├── ic_uninstall_no_shadow.xml │ ├── ic_wallpaper.xml │ ├── ic_warning.xml │ ├── ic_widget.xml │ ├── pending_widget_bg.xml │ ├── qsb_icon_click_feedback.xml │ ├── round_rect_primary.xml │ └── widget_internal_focus_bg.xml ├── interpolator │ ├── decelerate_quart.xml │ ├── decelerate_quint.xml │ ├── disco_bounce.xml │ ├── folder_interpolator.xml │ ├── large_folder_preview_item_close_interpolator.xml │ └── large_folder_preview_item_open_interpolator.xml ├── layout-land │ ├── all_apps_fast_scroller.xml │ ├── launcher.xml │ └── search_container_hotseat.xml ├── layout-port │ ├── launcher.xml │ └── search_container_hotseat.xml ├── layout-sw720dp │ ├── all_apps_fast_scroller.xml │ ├── launcher.xml │ └── search_container_hotseat.xml ├── layout-v23 │ └── search_container_all_apps_include.xml ├── layout │ ├── add_item_confirmation_activity.xml │ ├── all_apps.xml │ ├── all_apps_button.xml │ ├── all_apps_discovery_item.xml │ ├── all_apps_discovery_loading_divider.xml │ ├── all_apps_divider.xml │ ├── all_apps_empty_search.xml │ ├── all_apps_fast_scroller.xml │ ├── all_apps_google_search_fallback.xml │ ├── all_apps_icon.xml │ ├── all_apps_search_market.xml │ ├── app_edit_bottom_sheet.xml │ ├── app_icon.xml │ ├── app_widget_resize_frame.xml │ ├── apps_search_icon_template.xml │ ├── apps_search_qsb_template.xml │ ├── appwidget_error.xml │ ├── appwidget_not_ready.xml │ ├── deep_shortcut.xml │ ├── drop_target_bar_horz.xml │ ├── drop_target_bar_vert.xml │ ├── folder_application.xml │ ├── folder_icon.xml │ ├── folder_page.xml │ ├── gradient_bg.xml │ ├── hotseat.xml │ ├── notification.xml │ ├── notification_footer.xml │ ├── notification_main.xml │ ├── notification_pref_warning.xml │ ├── overview_panel.xml │ ├── page_indicator.xml │ ├── popup_container.xml │ ├── qsb_default_view.xml │ ├── qsb_hotseat_content.xml │ ├── search_container_all_apps.xml │ ├── search_container_all_apps_google.xml │ ├── search_container_all_apps_include.xml │ ├── search_container_workspace.xml │ ├── shortcuts_item.xml │ ├── smartspace_singleline.xml │ ├── smartspace_twolines.xml │ ├── system_shortcut.xml │ ├── system_shortcut_icon_only.xml │ ├── system_shortcut_icons.xml │ ├── user_folder.xml │ ├── user_folder_icon_normalized.xml │ ├── widget_cell.xml │ ├── widget_cell_content.xml │ ├── widget_list_divider.xml │ ├── widgets_bottom_sheet.xml │ ├── widgets_list_row_view.xml │ ├── widgets_scroll_container.xml │ ├── widgets_view.xml │ ├── workspace_screen.xml │ ├── zzz_dummy_widget.xml │ └── zzz_weight_watcher.xml ├── mipmap-hdpi │ ├── ic_launcher_home.png │ ├── ic_launcher_home_background.png │ └── ic_launcher_home_foreground.png ├── mipmap-mdpi │ ├── ic_launcher_home.png │ ├── ic_launcher_home_background.png │ └── ic_launcher_home_foreground.png ├── mipmap-xhdpi │ ├── ic_launcher_home.png │ ├── ic_launcher_home_background.png │ └── ic_launcher_home_foreground.png ├── mipmap-xxhdpi │ ├── ic_launcher_home.png │ ├── ic_launcher_home_background.png │ └── ic_launcher_home_foreground.png ├── mipmap-xxxhdpi │ ├── ic_launcher_home.png │ ├── ic_launcher_home_background.png │ └── ic_launcher_home_foreground.png ├── raw │ └── downgrade_schema.json ├── values-af │ ├── plurals.xml │ └── strings.xml ├── values-am │ ├── plurals.xml │ └── strings.xml ├── values-ar-rXB │ └── plurals.xml ├── values-ar │ ├── plurals.xml │ └── strings.xml ├── values-az │ ├── plurals.xml │ └── strings.xml ├── values-b+sr+Latn │ ├── plurals.xml │ └── strings.xml ├── values-be │ ├── plurals.xml │ └── strings.xml ├── values-bg │ ├── plurals.xml │ └── strings.xml ├── values-bn │ ├── plurals.xml │ └── strings.xml ├── values-bs │ ├── plurals.xml │ └── strings.xml ├── values-ca │ ├── plurals.xml │ └── strings.xml ├── values-cs │ ├── plurals.xml │ └── strings.xml ├── values-da │ ├── plurals.xml │ └── strings.xml ├── values-de │ ├── plurals.xml │ └── strings.xml ├── values-el │ ├── plurals.xml │ └── strings.xml ├── values-en-rAU │ ├── plurals.xml │ └── strings.xml ├── values-en-rGB │ ├── plurals.xml │ └── strings.xml ├── values-en-rIN │ ├── plurals.xml │ └── strings.xml ├── values-en-rXA │ └── plurals.xml ├── values-es-rUS │ ├── plurals.xml │ └── strings.xml ├── values-es │ ├── plurals.xml │ └── strings.xml ├── values-et │ ├── plurals.xml │ └── strings.xml ├── values-eu │ ├── plurals.xml │ └── strings.xml ├── values-fa │ ├── plurals.xml │ └── strings.xml ├── values-fi │ ├── plurals.xml │ └── strings.xml ├── values-fr-rCA │ ├── plurals.xml │ └── strings.xml ├── values-fr │ ├── plurals.xml │ └── strings.xml ├── values-gl │ ├── plurals.xml │ └── strings.xml ├── values-gu │ ├── plurals.xml │ └── strings.xml ├── values-hi │ ├── plurals.xml │ └── strings.xml ├── values-hr │ ├── plurals.xml │ └── strings.xml ├── values-hu │ ├── plurals.xml │ └── strings.xml ├── values-hy │ ├── plurals.xml │ └── strings.xml ├── values-in │ ├── plurals.xml │ └── strings.xml ├── values-is │ ├── plurals.xml │ └── strings.xml ├── values-it │ ├── plurals.xml │ └── strings.xml ├── values-iw │ ├── plurals.xml │ └── strings.xml ├── values-ja │ ├── plurals.xml │ └── strings.xml ├── values-ka │ ├── plurals.xml │ └── strings.xml ├── values-kk │ ├── plurals.xml │ └── strings.xml ├── values-km │ ├── plurals.xml │ └── strings.xml ├── values-kn │ ├── plurals.xml │ └── strings.xml ├── values-ko │ ├── plurals.xml │ └── strings.xml ├── values-ky │ ├── plurals.xml │ └── strings.xml ├── values-land │ └── dimens.xml ├── values-lo │ ├── plurals.xml │ └── strings.xml ├── values-lt │ ├── plurals.xml │ └── strings.xml ├── values-lv │ ├── plurals.xml │ └── strings.xml ├── values-mk │ ├── plurals.xml │ └── strings.xml ├── values-ml │ ├── plurals.xml │ └── strings.xml ├── values-mn │ ├── plurals.xml │ └── strings.xml ├── values-mr │ ├── plurals.xml │ └── strings.xml ├── values-ms │ ├── plurals.xml │ └── strings.xml ├── values-my │ ├── plurals.xml │ └── strings.xml ├── values-nb │ ├── plurals.xml │ └── strings.xml ├── values-ne │ ├── plurals.xml │ └── strings.xml ├── values-nl │ ├── plurals.xml │ └── strings.xml ├── values-pa │ ├── plurals.xml │ └── strings.xml ├── values-pl │ ├── plurals.xml │ └── strings.xml ├── values-pt-rPT │ ├── plurals.xml │ └── strings.xml ├── values-pt │ ├── plurals.xml │ └── strings.xml ├── values-rm │ └── strings.xml ├── values-ro │ ├── plurals.xml │ └── strings.xml ├── values-ru │ ├── plurals.xml │ └── strings.xml ├── values-si │ ├── plurals.xml │ └── strings.xml ├── values-sk │ ├── plurals.xml │ └── strings.xml ├── values-sl │ ├── plurals.xml │ └── strings.xml ├── values-sq │ ├── plurals.xml │ └── strings.xml ├── values-sr │ ├── plurals.xml │ └── strings.xml ├── values-sv │ ├── plurals.xml │ └── strings.xml ├── values-sw │ ├── plurals.xml │ └── strings.xml ├── values-sw340dp │ └── dimens.xml ├── values-sw600dp │ ├── config.xml │ └── dimens.xml ├── values-sw720dp-land │ └── dimens.xml ├── values-sw720dp │ ├── config.xml │ ├── dimens.xml │ └── styles.xml ├── values-ta │ ├── plurals.xml │ └── strings.xml ├── values-te │ ├── plurals.xml │ └── strings.xml ├── values-th │ ├── plurals.xml │ └── strings.xml ├── values-tl │ ├── plurals.xml │ └── strings.xml ├── values-tr │ ├── plurals.xml │ └── strings.xml ├── values-uk │ ├── plurals.xml │ └── strings.xml ├── values-ur │ ├── plurals.xml │ └── strings.xml ├── values-uz │ ├── plurals.xml │ └── strings.xml ├── values-v19 │ └── styles.xml ├── values-v21 │ └── styles.xml ├── values-v23 │ ├── bools.xml │ └── styles.xml ├── values-v24 │ └── config.xml ├── values-v26 │ ├── bools.xml │ ├── colors.xml │ └── styles.xml ├── values-vi │ ├── plurals.xml │ └── strings.xml ├── values-zh-rCN │ ├── plurals.xml │ └── strings.xml ├── values-zh-rHK │ ├── plurals.xml │ └── strings.xml ├── values-zh-rTW │ ├── plurals.xml │ └── strings.xml ├── values-zu │ ├── plurals.xml │ └── strings.xml ├── values │ ├── attrs.xml │ ├── bools.xml │ ├── bridge.xml │ ├── colors.xml │ ├── config.xml │ ├── dimens.xml │ ├── drawables.xml │ ├── plurals.xml │ ├── strings.xml │ └── styles.xml └── xml │ ├── app_edit_prefs.xml │ ├── backupscheme.xml │ ├── default_workspace_3x3.xml │ ├── default_workspace_4x4.xml │ ├── default_workspace_4x5.xml │ ├── default_workspace_5x5.xml │ ├── default_workspace_5x6.xml │ ├── default_workspace_6x6.xml │ ├── device_profiles.xml │ ├── dw_hotseat_4.xml │ ├── dw_hotseat_5.xml │ ├── dw_hotseat_6.xml │ ├── dw_phone_hotseat.xml │ ├── dw_tablet_hotseat.xml │ ├── file_paths.xml │ └── launcher_preferences.xml ├── src ├── amirz │ └── aidlbridge │ │ ├── Bridge.aidl │ │ └── BridgeCallback.aidl └── com │ ├── android │ └── launcher3 │ │ ├── AbstractFloatingView.java │ │ ├── Alarm.java │ │ ├── AllAppsList.java │ │ ├── AppFilter.java │ │ ├── AppInfo.java │ │ ├── AppWidgetResizeFrame.java │ │ ├── AppWidgetsRestoredReceiver.java │ │ ├── AutoInstallsLayout.java │ │ ├── BaseActivity.java │ │ ├── BaseContainerView.java │ │ ├── BaseRecyclerView.java │ │ ├── BubbleTextView.java │ │ ├── ButtonDropTarget.java │ │ ├── CellLayout.java │ │ ├── CheckLongPressHelper.java │ │ ├── ClickShadowView.java │ │ ├── CustomAppWidget.java │ │ ├── DefaultLayoutParser.java │ │ ├── DeleteDropTarget.java │ │ ├── DeviceProfile.java │ │ ├── DragSource.java │ │ ├── DropTarget.java │ │ ├── DropTargetBar.java │ │ ├── ExtendedEditText.java │ │ ├── FastBitmapDrawable.java │ │ ├── FirstFrameAnimatorHelper.java │ │ ├── FocusHelper.java │ │ ├── FolderInfo.java │ │ ├── Hotseat.java │ │ ├── IconCache.java │ │ ├── IconProvider.java │ │ ├── InfoDropTarget.java │ │ ├── Insettable.java │ │ ├── InsettableFrameLayout.java │ │ ├── InstallShortcutReceiver.java │ │ ├── InterruptibleInOutAnimator.java │ │ ├── InvariantDeviceProfile.java │ │ ├── ItemInfo.java │ │ ├── ItemInfoWithIcon.java │ │ ├── Launcher.java │ │ ├── LauncherAnimUtils.java │ │ ├── LauncherAppState.java │ │ ├── LauncherAppWidgetHost.java │ │ ├── LauncherAppWidgetHostView.java │ │ ├── LauncherAppWidgetInfo.java │ │ ├── LauncherAppWidgetProviderInfo.java │ │ ├── LauncherBackupAgent.java │ │ ├── LauncherCallbacks.java │ │ ├── LauncherExterns.java │ │ ├── LauncherFiles.java │ │ ├── LauncherModel.java │ │ ├── LauncherProvider.java │ │ ├── LauncherProviderChangeListener.java │ │ ├── LauncherRootView.java │ │ ├── LauncherScroller.java │ │ ├── LauncherSettings.java │ │ ├── LauncherStateTransitionAnimation.java │ │ ├── LogAccelerateInterpolator.java │ │ ├── LogDecelerateInterpolator.java │ │ ├── MainThreadExecutor.java │ │ ├── OnAlarmListener.java │ │ ├── OverviewButtonClickListener.java │ │ ├── PagedView.java │ │ ├── Partner.java │ │ ├── PendingAddItemInfo.java │ │ ├── PendingAppWidgetHostView.java │ │ ├── PinchAnimationManager.java │ │ ├── PinchThresholdManager.java │ │ ├── PinchToOverviewListener.java │ │ ├── PromiseAppInfo.java │ │ ├── SessionCommitReceiver.java │ │ ├── SettingsActivity.java │ │ ├── ShortcutAndWidgetContainer.java │ │ ├── ShortcutInfo.java │ │ ├── SimpleOnStylusPressListener.java │ │ ├── StylusEventHelper.java │ │ ├── UninstallDropTarget.java │ │ ├── Utilities.java │ │ ├── WidgetPreviewLoader.java │ │ ├── Workspace.java │ │ ├── WorkspaceStateTransitionAnimation.java │ │ ├── accessibility │ │ ├── AccessibleDragListenerAdapter.java │ │ ├── DragAndDropAccessibilityDelegate.java │ │ ├── DragViewStateAnnouncer.java │ │ ├── FolderAccessibilityHelper.java │ │ ├── LauncherAccessibilityDelegate.java │ │ ├── OverviewAccessibilityDelegate.java │ │ ├── OverviewScreenAccessibilityDelegate.java │ │ ├── ShortcutMenuAccessibilityDelegate.java │ │ └── WorkspaceAccessibilityHelper.java │ │ ├── allapps │ │ ├── AllAppsBackgroundDrawable.java │ │ ├── AllAppsCaretController.java │ │ ├── AllAppsContainerView.java │ │ ├── AllAppsFastScrollHelper.java │ │ ├── AllAppsGridAdapter.java │ │ ├── AllAppsRecyclerView.java │ │ ├── AllAppsRecyclerViewContainerView.java │ │ ├── AllAppsTransitionController.java │ │ ├── AlphabeticalAppsList.java │ │ ├── AppInfoComparator.java │ │ ├── LandscapeFastScroller.java │ │ ├── SearchUiManager.java │ │ └── search │ │ │ ├── AllAppsSearchBarController.java │ │ │ ├── AppsSearchContainerLayout.java │ │ │ ├── DefaultAppSearchAlgorithm.java │ │ │ ├── HeaderElevationController.java │ │ │ └── SearchAlgorithm.java │ │ ├── anim │ │ ├── AnimationLayerSet.java │ │ ├── CircleRevealOutlineProvider.java │ │ ├── PropertyListBuilder.java │ │ ├── PropertyResetListener.java │ │ ├── RevealOutlineAnimation.java │ │ ├── RoundedRectRevealOutlineProvider.java │ │ └── SpringAnimationHandler.java │ │ ├── badge │ │ ├── BadgeInfo.java │ │ ├── BadgeRenderer.java │ │ └── FolderBadgeInfo.java │ │ ├── compat │ │ ├── AlphabeticIndexCompat.java │ │ ├── AppWidgetManagerCompat.java │ │ ├── AppWidgetManagerCompatVL.java │ │ ├── AppWidgetManagerCompatVO.java │ │ ├── LauncherAppsCompat.java │ │ ├── LauncherAppsCompatVL.java │ │ ├── LauncherAppsCompatVO.java │ │ ├── PackageInstallerCompat.java │ │ ├── PackageInstallerCompatVL.java │ │ ├── ShortcutConfigActivityInfo.java │ │ ├── UserManagerCompat.java │ │ ├── UserManagerCompatVL.java │ │ ├── UserManagerCompatVM.java │ │ ├── UserManagerCompatVN.java │ │ ├── UserManagerCompatVNMr1.java │ │ ├── WallpaperColorsCompat.java │ │ ├── WallpaperManagerCompat.java │ │ ├── WallpaperManagerCompatVL.java │ │ └── WallpaperManagerCompatVOMR1.java │ │ ├── config │ │ └── BaseFlags.java │ │ ├── discovery │ │ ├── AppDiscoveryAppInfo.java │ │ ├── AppDiscoveryItem.java │ │ ├── AppDiscoveryItemView.java │ │ ├── AppDiscoveryUpdateState.java │ │ └── RatingView.java │ │ ├── dragndrop │ │ ├── AddItemActivity.java │ │ ├── BaseItemDragListener.java │ │ ├── DragController.java │ │ ├── DragDriver.java │ │ ├── DragLayer.java │ │ ├── DragOptions.java │ │ ├── DragView.java │ │ ├── FlingToDeleteHelper.java │ │ ├── FolderAdaptiveIcon.java │ │ ├── LivePreviewWidgetCell.java │ │ ├── PinItemDragListener.java │ │ ├── PinShortcutRequestActivityInfo.java │ │ ├── PinWidgetFlowHandler.java │ │ └── SpringLoadedDragController.java │ │ ├── dynamicui │ │ ├── ColorExtractionAlgorithm.java │ │ ├── ColorExtractionService.java │ │ ├── ExtractedColors.java │ │ ├── ExtractionUtils.java │ │ └── WallpaperColorInfo.java │ │ ├── folder │ │ ├── ClippedFolderIconLayoutRule.java │ │ ├── Folder.java │ │ ├── FolderAnimationManager.java │ │ ├── FolderIcon.java │ │ ├── FolderIconPreviewVerifier.java │ │ ├── FolderPagedView.java │ │ ├── FolderPreviewItemAnim.java │ │ ├── PreviewBackground.java │ │ ├── PreviewImageView.java │ │ ├── PreviewItemDrawingParams.java │ │ ├── PreviewItemManager.java │ │ └── StackFolderIconLayoutRule.java │ │ ├── graphics │ │ ├── DragPreviewProvider.java │ │ ├── DrawableFactory.java │ │ ├── FastScrollThumbDrawable.java │ │ ├── FixedScaleDrawable.java │ │ ├── GradientView.java │ │ ├── HolographicOutlineHelper.java │ │ ├── IconNormalizer.java │ │ ├── IconPalette.java │ │ ├── IconShapeOverride.java │ │ ├── LauncherIcons.java │ │ ├── PreloadIconDrawable.java │ │ ├── ShadowDrawable.java │ │ ├── ShadowGenerator.java │ │ ├── TintedDrawableSpan.java │ │ └── TriangleShape.java │ │ ├── keyboard │ │ ├── CustomActionsPopup.java │ │ ├── FocusIndicatorHelper.java │ │ ├── FocusedItemDecorator.java │ │ └── ViewGroupFocusHelper.java │ │ ├── logging │ │ ├── DumpTargetWrapper.java │ │ ├── FileLog.java │ │ ├── LoggerUtils.java │ │ └── UserEventDispatcher.java │ │ ├── model │ │ ├── AddWorkspaceItemsTask.java │ │ ├── BaseModelUpdateTask.java │ │ ├── BgDataModel.java │ │ ├── CacheDataUpdatedTask.java │ │ ├── DbDowngradeHelper.java │ │ ├── GridSizeMigrationTask.java │ │ ├── LoaderCursor.java │ │ ├── LoaderResults.java │ │ ├── LoaderTask.java │ │ ├── ModelWriter.java │ │ ├── PackageInstallStateChangedTask.java │ │ ├── PackageItemInfo.java │ │ ├── PackageUpdatedTask.java │ │ ├── SdCardAvailableReceiver.java │ │ ├── ShortcutsChangedTask.java │ │ ├── UserLockStateChangedTask.java │ │ ├── WidgetItem.java │ │ └── WidgetsModel.java │ │ ├── notification │ │ ├── Interpolators.java │ │ ├── NotificationFooterLayout.java │ │ ├── NotificationInfo.java │ │ ├── NotificationItemView.java │ │ ├── NotificationKeyData.java │ │ ├── NotificationListener.java │ │ └── NotificationMainView.java │ │ ├── pageindicators │ │ ├── CaretDrawable.java │ │ ├── PageIndicator.java │ │ ├── PageIndicatorCaretLandscape.java │ │ ├── PageIndicatorDots.java │ │ └── PageIndicatorLineCaret.java │ │ ├── popup │ │ ├── PopupContainerWithArrow.java │ │ ├── PopupDataProvider.java │ │ ├── PopupItemView.java │ │ ├── PopupPopulator.java │ │ └── SystemShortcut.java │ │ ├── provider │ │ ├── ImportDataTask.java │ │ ├── LauncherDbUtils.java │ │ ├── LossyScreenMigrationTask.java │ │ └── RestoreDbTask.java │ │ ├── qsb │ │ ├── QsbContainerView.java │ │ └── QsbWidgetHostView.java │ │ ├── shortcuts │ │ ├── DeepShortcutManager.java │ │ ├── DeepShortcutManagerBackport.java │ │ ├── DeepShortcutTextView.java │ │ ├── DeepShortcutView.java │ │ ├── ShortcutCache.java │ │ ├── ShortcutDragPreviewProvider.java │ │ ├── ShortcutInfoCompat.java │ │ ├── ShortcutInfoCompatBackport.java │ │ ├── ShortcutKey.java │ │ └── ShortcutsItemView.java │ │ ├── testing │ │ ├── DummyWidget.java │ │ ├── LauncherExtension.java │ │ ├── MemoryDumpActivity.java │ │ ├── MemoryTracker.java │ │ ├── ToggleWeightWatcher.java │ │ └── WeightWatcher.java │ │ ├── touch │ │ ├── OverScroll.java │ │ └── SwipeDetector.java │ │ ├── util │ │ ├── ActivityResultInfo.java │ │ ├── CellAndSpan.java │ │ ├── ComponentKey.java │ │ ├── ComponentKeyMapper.java │ │ ├── ConfigMonitor.java │ │ ├── ContentWriter.java │ │ ├── FlagOp.java │ │ ├── FlingAnimation.java │ │ ├── FocusLogic.java │ │ ├── GridOccupancy.java │ │ ├── IOUtils.java │ │ ├── InstantAppResolver.java │ │ ├── ItemInfoMatcher.java │ │ ├── LabelComparator.java │ │ ├── LogConfig.java │ │ ├── LongArrayMap.java │ │ ├── LooperExecutor.java │ │ ├── LooperIdleLock.java │ │ ├── ManagedProfileHeuristic.java │ │ ├── MultiHashMap.java │ │ ├── NoLocaleSqliteContext.java │ │ ├── PackageManagerHelper.java │ │ ├── PackageUserKey.java │ │ ├── ParcelableSparseArray.java │ │ ├── PendingRequestArgs.java │ │ ├── Preconditions.java │ │ ├── Provider.java │ │ ├── RunnableWithId.java │ │ ├── SQLiteCacheHelper.java │ │ ├── SettingsObserver.java │ │ ├── SystemUiController.java │ │ ├── TestingUtils.java │ │ ├── Themes.java │ │ ├── Thunk.java │ │ ├── TouchController.java │ │ ├── TransformingTouchDelegate.java │ │ ├── VerticalFlingDetector.java │ │ ├── ViewOnDrawExecutor.java │ │ └── WallpaperOffsetInterpolator.java │ │ ├── views │ │ ├── ButtonPreference.java │ │ ├── DoubleShadowBubbleTextView.java │ │ └── RecyclerViewFastScroller.java │ │ └── widget │ │ ├── PendingAddShortcutInfo.java │ │ ├── PendingAddWidgetInfo.java │ │ ├── PendingItemDragHelper.java │ │ ├── WidgetAddFlowHandler.java │ │ ├── WidgetCell.java │ │ ├── WidgetHostViewLoader.java │ │ ├── WidgetImageView.java │ │ ├── WidgetItemComparator.java │ │ ├── WidgetListRowEntry.java │ │ ├── WidgetsBottomSheet.java │ │ ├── WidgetsContainerView.java │ │ ├── WidgetsDiffReporter.java │ │ ├── WidgetsListAdapter.java │ │ ├── WidgetsRecyclerView.java │ │ └── WidgetsRowViewHolder.java │ └── google │ └── android │ ├── apps │ └── nexuslauncher │ │ ├── CustomAppFilter.java │ │ ├── CustomAppPredictor.java │ │ ├── CustomBottomSheet.java │ │ ├── CustomDrawableFactory.java │ │ ├── CustomEditShortcut.java │ │ ├── CustomIconPreference.java │ │ ├── CustomIconProvider.java │ │ ├── CustomIconUtils.java │ │ ├── DynamicDrawableFactory.java │ │ ├── DynamicIconProvider.java │ │ ├── NexusAppFilter.java │ │ ├── NexusLauncher.java │ │ ├── NexusLauncherActivity.java │ │ ├── NexusLauncherOverlay.java │ │ ├── PixelBridge.java │ │ ├── SettingsActivity.java │ │ ├── clock │ │ ├── AutoUpdateClock.java │ │ ├── ClockLayers.java │ │ ├── CustomClock.java │ │ └── DynamicClock.java │ │ ├── graphics │ │ ├── DoubleShadowTextView.java │ │ └── IcuDateTextView.java │ │ ├── qsb │ │ ├── AbstractQsbLayout.java │ │ ├── AllAppsQsbLayout.java │ │ ├── ConfigBuilder.java │ │ ├── FallbackAppsSearchView.java │ │ ├── HotseatQsbWidget.java │ │ ├── ItemDragListener.java │ │ ├── LongClickReceiver.java │ │ └── OPAStatusReceiver.java │ │ ├── search │ │ ├── AppItemInfoWithIcon.java │ │ ├── AppLaunchActivity.java │ │ ├── AppSearchProvider.java │ │ ├── ItemInfoUpdateReceiver.java │ │ ├── LogContainerProvider.java │ │ ├── SearchResult.java │ │ └── SearchThread.java │ │ ├── smartspace │ │ ├── ISmartspace.java │ │ ├── NewCardInfo.java │ │ ├── SmartspaceBroadcastReceiver.java │ │ ├── SmartspaceCard.java │ │ ├── SmartspaceController.java │ │ ├── SmartspaceDataContainer.java │ │ ├── SmartspacePreferencesShortcut.java │ │ └── SmartspaceView.java │ │ └── utils │ │ ├── ActionIntentFilter.java │ │ ├── ColorManipulation.java │ │ └── ProtoStore.java │ └── libraries │ ├── gsa │ └── launcherclient │ │ ├── BaseClientService.java │ │ ├── IScrollCallback.java │ │ ├── ISerializableScrollCallback.java │ │ ├── LauncherClient.java │ │ ├── LauncherClientBridge.java │ │ ├── LauncherClientService.java │ │ └── StaticInteger.java │ └── launcherclient │ ├── ILauncherOverlay.aidl │ └── ILauncherOverlayCallback.aidl ├── src_config └── com │ └── android │ └── launcher3 │ └── BuildConfig.java ├── src_flags └── com │ └── android │ └── launcher3 │ └── config │ └── FeatureFlags.java └── tests ├── Android.mk ├── AndroidManifest-common.xml ├── AndroidManifest.xml ├── res ├── drawable │ └── test_drawable_pin_item.xml ├── layout │ ├── test_layout_appwidget_blue.xml │ ├── test_layout_appwidget_red.xml │ └── test_layout_appwidget_view.xml ├── raw │ ├── cache_data_updated_task_data.txt │ ├── db_schema_v10.json │ └── package_install_state_change_task_data.txt └── xml │ ├── appwidget_no_config.xml │ └── appwidget_with_config.xml └── src └── com └── android └── launcher3 ├── allapps └── search │ └── DefaultAppSearchAlgorithmTest.java ├── logging └── FileLogTest.java ├── model ├── AddWorkspaceItemsTaskTest.java ├── BaseModelUpdateTaskTestCase.java ├── CacheDataUpdatedTaskTest.java ├── DbDowngradeHelperTest.java ├── GridSizeMigrationTaskTest.java ├── LoaderCursorTest.java └── PackageInstallStateChangedTaskTest.java ├── popup └── PopupPopulatorTest.java ├── provider └── RestoreDbTaskTest.java ├── testcomponent ├── AppWidgetNoConfig.java ├── AppWidgetWithConfig.java ├── BaseTestingActivity.java ├── RequestPinItemActivity.java ├── TouchEventGenerator.java └── WidgetConfigActivity.java ├── touch └── SwipeDetectorTest.java ├── ui ├── AbstractLauncherUiTest.java ├── AllAppsAppLaunchTest.java ├── AllAppsIconToHomeTest.java ├── ShortcutsLaunchTest.java ├── ShortcutsToHomeTest.java └── widget │ ├── AddConfigWidgetTest.java │ ├── AddWidgetTest.java │ ├── BindWidgetTest.java │ └── RequestPinItemTest.java ├── util ├── Condition.java ├── FocusLogicTest.java ├── GridOccupancyTest.java ├── TestLauncherProvider.java ├── Wait.java └── rule │ ├── LauncherActivityRule.java │ └── ShellCommandRule.java └── widget └── WidgetsListAdapterTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | db_files 2 | *.iml 3 | .project 4 | .classpath 5 | .project.properties 6 | gen/ 7 | tests/stress/gen/ 8 | WallpaperPicker/gen/ 9 | WallpaperPicker/.project.properties 10 | bin/ 11 | .idea/ 12 | .gradle/ 13 | local.properties 14 | gradle/ 15 | build/ 16 | gradlew* -------------------------------------------------------------------------------- /MODULE_LICENSE_APACHE2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/MODULE_LICENSE_APACHE2 -------------------------------------------------------------------------------- /assets/fonts/GoogleSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/assets/fonts/GoogleSans-Regular.ttf -------------------------------------------------------------------------------- /go/res/drawable/ic_widget.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 25 | 26 | -------------------------------------------------------------------------------- /go/res/values-am/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "አንድ አቋራጭ ለመውሰድ ነክተው ይያዙ" 23 | "አንድ አቋራጭ ለመውሰድ ወይም ብጁ እርምጃዎችን ለመጠቀም ሁለቴ መታ አድርገው ይያዙ።" 24 | "አቋራጮች" 25 | "%1$s አቋራጮች" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "ショートカットを追加するには押し続けます。" 23 | "ダブルタップ後に押し続けてショートカットを選択するか、カスタム操作を使用してください。" 24 | "ショートカット" 25 | "「%1$s」のショートカット" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-ko/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "바로가기를 선택하려면 길게 터치하세요." 23 | "바로가기를 선택하려면 두 번 탭한 다음 길게 터치하거나 맞춤 액션을 사용합니다." 24 | "바로가기" 25 | "%1$s 바로가기" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-v23/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | false 21 | -------------------------------------------------------------------------------- /go/res/values-v26/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | false 21 | -------------------------------------------------------------------------------- /go/res/values-zh-rCN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "触摸并按住快捷方式即可选择快捷方式。" 23 | "点按两次并按住快捷方式即可选择快捷方式,您也可以使用自定义操作。" 24 | "快捷方式" 25 | "%1$s快捷方式" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-zh-rHK/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "按住捷徑即可選取捷徑。" 23 | "扲兩下然後扲住就可以揀選捷徑,或者用自訂嘅操作。" 24 | "捷徑" 25 | "%1$s 捷徑" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-zh-rTW/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "按住捷徑即可選取。" 23 | "輕觸兩下並按住捷徑即可選取,你也可以使用自訂動作。" 24 | "捷徑" 25 | "「%1$s」捷徑" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values/override.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | #Intent;action=android.intent.action.DELETE;launchFlags=0x10800000;B.android.intent.extra.RETURN_RESULT=true;end 22 | -------------------------------------------------------------------------------- /go/res/xml/device_profiles.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 32 | 33 | -------------------------------------------------------------------------------- /proto_overrides/launcher_log_extension.proto: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | syntax = "proto2"; 17 | 18 | option java_package = "com.android.launcher3.userevent"; 19 | option java_outer_classname = "LauncherLogExtensions"; 20 | 21 | package userevent; 22 | 23 | // 24 | // Use this to add any app specific extensions to the proto. 25 | // 26 | message LauncherEventExtension { 27 | } 28 | 29 | message TargetExtension { 30 | } 31 | -------------------------------------------------------------------------------- /proto_pixel/search.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto2"; 2 | 3 | option java_package = "com.google.android.apps.nexuslauncher.search"; 4 | option java_outer_classname = "SearchProto"; 5 | 6 | package nano; 7 | 8 | message a_search { 9 | optional int32 ef = 1; 10 | optional int32 eg = 2; 11 | optional int32 eh = 3; 12 | optional int32 ee = 4; 13 | } 14 | 15 | message b_search { 16 | optional string label = 1; 17 | optional string ek = 2; 18 | optional string ej = 3; 19 | optional string el = 4; 20 | } 21 | 22 | message c_search { 23 | optional int32 em = 1; 24 | optional string ep = 2; 25 | optional string er = 3; 26 | optional a_search en = 4; 27 | optional int32 es = 5; 28 | repeated b_search eo = 6; 29 | optional a_search ev = 7; 30 | optional string ey = 8; 31 | optional int32 ew = 9; 32 | optional int32 ex = 10; 33 | optional string eu = 11; 34 | optional a_search et = 12; 35 | optional bool eA = 13; 36 | optional a_search ez = 14; 37 | optional bool eq = 15; 38 | } 39 | 40 | message d_search { 41 | optional c_search eB = 1; 42 | } 43 | -------------------------------------------------------------------------------- /res/anim/no_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 19 | -------------------------------------------------------------------------------- /res/color-v24/all_apps_bg_hand_fill.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /res/color-v24/all_apps_bg_hand_fill_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /res/color/primary_text_material_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /res/color/primary_text_material_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /res/color/qsb_icon_tint.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /res/color/secondary_text_material_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /res/color/secondary_text_material_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 20 | 21 | -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-hdpi/ic_allapps.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-hdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-hdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-hdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-hdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-hdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-hdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/workspace_bg_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-hdpi/workspace_bg_dark.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-mdpi/ic_allapps.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-mdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-mdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-mdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-mdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-mdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-mdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/workspace_bg_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-mdpi/workspace_bg_dark.9.png -------------------------------------------------------------------------------- /res/drawable-v24/ic_info_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | -------------------------------------------------------------------------------- /res/drawable-v24/ic_mic_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /res/drawable-v24/ic_remove_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | -------------------------------------------------------------------------------- /res/drawable-v24/ic_super_g_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /res/drawable-v24/ic_uninstall_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | -------------------------------------------------------------------------------- /res/drawable-v26/adaptive_icon_drawable_wrapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /res/drawable-v26/ic_launcher_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xhdpi/ic_allapps.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xhdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xhdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xhdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xhdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/workspace_bg_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xhdpi/workspace_bg_dark.9.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxhdpi/ic_allapps.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxhdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxhdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxhdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxhdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/workspace_bg_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxhdpi/workspace_bg_dark.9.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxxhdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxxhdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxxhdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxxhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi/workspace_bg_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/drawable-xxxhdpi/workspace_bg_dark.9.png -------------------------------------------------------------------------------- /res/drawable/all_apps_button_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /res/drawable/all_apps_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /res/drawable/all_apps_search_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /res/drawable/all_apps_search_hint.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /res/drawable/bg_smartspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /res/drawable/gutter_horizontal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | -------------------------------------------------------------------------------- /res/drawable/horizontal_ellipsis.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 23 | 24 | 27 | -------------------------------------------------------------------------------- /res/drawable/ic_allapps_search.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /res/drawable/ic_default_shortcut.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 12 | 13 | 18 | 24 | 25 | -------------------------------------------------------------------------------- /res/drawable/ic_edit_no_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 22 | 26 | -------------------------------------------------------------------------------- /res/drawable/ic_launcher_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 19 | -------------------------------------------------------------------------------- /res/drawable/ic_star_rating.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 21 | 22 | 27 | -------------------------------------------------------------------------------- /res/drawable/ic_uninstall_no_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 22 | 26 | 27 | -------------------------------------------------------------------------------- /res/drawable/pending_widget_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 20 | -------------------------------------------------------------------------------- /res/drawable/qsb_icon_click_feedback.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /res/drawable/round_rect_primary.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /res/drawable/widget_internal_focus_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /res/interpolator/decelerate_quart.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | -------------------------------------------------------------------------------- /res/interpolator/decelerate_quint.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | -------------------------------------------------------------------------------- /res/interpolator/disco_bounce.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /res/interpolator/folder_interpolator.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 25 | -------------------------------------------------------------------------------- /res/interpolator/large_folder_preview_item_close_interpolator.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 25 | -------------------------------------------------------------------------------- /res/interpolator/large_folder_preview_item_open_interpolator.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 25 | -------------------------------------------------------------------------------- /res/layout-land/search_container_hotseat.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /res/layout-port/search_container_hotseat.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /res/layout-sw720dp/search_container_hotseat.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /res/layout-v23/search_container_all_apps_include.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 18 | 19 | 22 | -------------------------------------------------------------------------------- /res/layout/all_apps_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /res/layout/all_apps_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | -------------------------------------------------------------------------------- /res/layout/all_apps_empty_search.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 30 | 31 | -------------------------------------------------------------------------------- /res/layout/app_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /res/layout/appwidget_error.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 29 | -------------------------------------------------------------------------------- /res/layout/appwidget_not_ready.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | -------------------------------------------------------------------------------- /res/layout/folder_application.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 23 | -------------------------------------------------------------------------------- /res/layout/folder_page.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 25 | -------------------------------------------------------------------------------- /res/layout/gradient_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | -------------------------------------------------------------------------------- /res/layout/hotseat.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /res/layout/notification_pref_warning.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 24 | -------------------------------------------------------------------------------- /res/layout/popup_container.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 28 | 29 | -------------------------------------------------------------------------------- /res/layout/search_container_all_apps_include.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 18 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /res/layout/system_shortcut_icon_only.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 25 | -------------------------------------------------------------------------------- /res/layout/system_shortcut_icons.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 27 | 28 | -------------------------------------------------------------------------------- /res/layout/widget_cell.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /res/layout/widget_list_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | -------------------------------------------------------------------------------- /res/layout/workspace_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /res/layout/zzz_weight_watcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /res/mipmap-hdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-hdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /res/mipmap-hdpi/ic_launcher_home_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-hdpi/ic_launcher_home_background.png -------------------------------------------------------------------------------- /res/mipmap-hdpi/ic_launcher_home_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-hdpi/ic_launcher_home_foreground.png -------------------------------------------------------------------------------- /res/mipmap-mdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-mdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /res/mipmap-mdpi/ic_launcher_home_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-mdpi/ic_launcher_home_background.png -------------------------------------------------------------------------------- /res/mipmap-mdpi/ic_launcher_home_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-mdpi/ic_launcher_home_foreground.png -------------------------------------------------------------------------------- /res/mipmap-xhdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-xhdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /res/mipmap-xhdpi/ic_launcher_home_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-xhdpi/ic_launcher_home_background.png -------------------------------------------------------------------------------- /res/mipmap-xhdpi/ic_launcher_home_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-xhdpi/ic_launcher_home_foreground.png -------------------------------------------------------------------------------- /res/mipmap-xxhdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-xxhdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /res/mipmap-xxhdpi/ic_launcher_home_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-xxhdpi/ic_launcher_home_background.png -------------------------------------------------------------------------------- /res/mipmap-xxhdpi/ic_launcher_home_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-xxhdpi/ic_launcher_home_foreground.png -------------------------------------------------------------------------------- /res/mipmap-xxxhdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-xxxhdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /res/mipmap-xxxhdpi/ic_launcher_home_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-xxxhdpi/ic_launcher_home_background.png -------------------------------------------------------------------------------- /res/mipmap-xxxhdpi/ic_launcher_home_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/android-hacker/Launcher3/6650ec7a19e619e54bd405cd2a17e46e2582a0dd/res/mipmap-xxxhdpi/ic_launcher_home_foreground.png -------------------------------------------------------------------------------- /res/raw/downgrade_schema.json: -------------------------------------------------------------------------------- 1 | { 2 | // Note: Comments are not supported in JSON schema, but android parser is lenient. 3 | 4 | // Maximum DB version supported by this schema 5 | "version" : 27, 6 | 7 | // Downgrade from 27 to 26. Empty array indicates, the DB is compatible 8 | "downgrade_to_26" : [], 9 | "downgrade_to_25" : [], 10 | "downgrade_to_24" : [], 11 | "downgrade_to_23" : [], 12 | "downgrade_to_22" : [ 13 | "ALTER TABLE favorites RENAME TO temp_favorites;", 14 | "CREATE TABLE favorites(_id INTEGER PRIMARY KEY, title TEXT, intent TEXT, container INTEGER, screen INTEGER, cellX INTEGER, cellY INTEGER, spanX INTEGER, spanY INTEGER, itemType INTEGER, appWidgetId INTEGER NOT NULL DEFAULT - 1, iconPackage TEXT, iconResource TEXT, icon BLOB, appWidgetProvider TEXT, modified INTEGER NOT NULL DEFAULT 0, restored INTEGER NOT NULL DEFAULT 0, profileId INTEGER DEFAULT 0, rank INTEGER NOT NULL DEFAULT 0);", 15 | "INSERT INTO favorites SELECT _id, title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, iconPackage, iconResource, icon, appWidgetProvider, modified, restored, profileId, rank FROM temp_favorites;", 16 | "DROP TABLE temp_favorites;" 17 | ] 18 | 19 | // Missing values indicate the DB is not compatible 20 | } -------------------------------------------------------------------------------- /res/values-af/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min. 5 | %d min. 6 | 7 | 8 | %d uur 9 | %d uur 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-am/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d ደቂቃ 5 | %d ደቂቃ 6 | 7 | 8 | %d ሰዓ 9 | %d ሰዓ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-ar-rXB/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ‏‮%d‬‏ ‏‮min‬‏ 5 | ‏‮%d‬‏ ‏‮min‬‏ 6 | 7 | 8 | ‏‮%d‬‏ ‏‮hr‬‏ 9 | ‏‮%d‬‏ ‏‮hr‬‏ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-ar/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ‏%d دقيقة 5 | ‏%d دقيقة 6 | ‏دقيقة واحدة (%d) 7 | ‏دقيقتان (%d) 8 | ‏%d دقائق 9 | ‏%d دقيقة 10 | 11 | 12 | ‏%d ساعة 13 | ‏%d ساعة 14 | ‏ساعة واحدة (%d) 15 | ‏ساعتان (%d) 16 | ‏%d ساعات 17 | ‏%d ساعة 18 | 19 | 20 | -------------------------------------------------------------------------------- /res/values-az/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d dəq 5 | %d dəq 6 | 7 | 8 | %d saat 9 | %d saat 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-b+sr+Latn/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | %d min 7 | 8 | 9 | %d č 10 | %d č 11 | %d č 12 | 13 | 14 | -------------------------------------------------------------------------------- /res/values-be/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d хв 5 | %d хв 6 | %d хв 7 | %d хв 8 | 9 | 10 | %d гадз 11 | %d гадз 12 | %d гадз 13 | %d гадз 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-bg/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d мин 5 | %d мин 6 | 7 | 8 | %d ч 9 | %d ч 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-bn/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d মিনিট 5 | %d মিনিট 6 | 7 | 8 | %d ঘণ্টা 9 | %d ঘণ্টা 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-bs/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | %d min 7 | 8 | 9 | %d h 10 | %d h 11 | %d h 12 | 13 | 14 | -------------------------------------------------------------------------------- /res/values-ca/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-cs/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | %d min 7 | %d min 8 | 9 | 10 | %d h 11 | %d h 12 | %d h 13 | %d h 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-da/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min. 5 | %d min. 6 | 7 | 8 | %d t. 9 | %d t. 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-de/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-el/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d λ. 5 | %d λ. 6 | 7 | 8 | %d ώ. 9 | %d ώ. 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-en-rAU/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d hr 9 | %d hr 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-en-rGB/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d hr 9 | %d hr 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-en-rIN/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d hr 9 | %d hr 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-en-rXA/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | [»%d« ḿîñ one] 5 | [»%d« ḿîñ one] 6 | 7 | 8 | [»%d« ĥŕ one] 9 | [»%d« ĥŕ one] 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-es-rUS/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-es/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-et/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-eu/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-fa/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ‏%d دقیقه 5 | ‏%d دقیقه 6 | 7 | 8 | ‏%d ساعت 9 | ‏%d ساعت 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-fi/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-fr-rCA/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-fr/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-gl/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-gu/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d મિનિટ 5 | %d મિનિટ 6 | 7 | 8 | %d કલાક 9 | %d કલાક 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-hi/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d मिनट 5 | %d मिनट 6 | 7 | 8 | %d घंटे 9 | %d घंटे 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-hr/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | %d min 7 | 8 | 9 | %d h 10 | %d h 11 | %d h 12 | 13 | 14 | -------------------------------------------------------------------------------- /res/values-hu/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d perc 5 | %d perc 6 | 7 | 8 | %d óra 9 | %d óra 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-hy/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d ր 5 | %d ր 6 | 7 | 8 | %d ժ 9 | %d ժ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-in/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d mnt 5 | %d mnt 6 | 7 | 8 | %d jam 9 | %d jam 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-is/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d mín. 5 | %d mín. 6 | 7 | 8 | %d klst. 9 | %d klst. 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-it/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-iw/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ‏%d ד’ 5 | ‏%d ד’ 6 | ‏%d ד’ 7 | ‏%d ד’ 8 | 9 | 10 | ‏%d ש’ 11 | ‏%d ש’ 12 | ‏%d ש’ 13 | ‏%d ש’ 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-ja/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d分 5 | %d分 6 | 7 | 8 | %d時間 9 | %d時間 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-ka/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d წთ 5 | %d წთ 6 | 7 | 8 | %d სთ 9 | %d სთ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-kk/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d мин 5 | %d мин 6 | 7 | 8 | %d сағ 9 | %d сағ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-km/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d ន 5 | %d ន 6 | 7 | 8 | %d ម៉ 9 | %d ម៉ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-kn/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d ನಿಮಿಷ 5 | %d ನಿಮಿಷ 6 | 7 | 8 | %d ಗಂಟೆ 9 | %d ಗಂಟೆ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-ko/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d분 5 | %d분 6 | 7 | 8 | %d시간 9 | %d시간 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-ky/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d мүн. 5 | %d мүн. 6 | 7 | 8 | %d с. 9 | %d с. 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-lo/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d ນທ 5 | %d ນທ 6 | 7 | 8 | %d ຊມ 9 | %d ຊມ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-lt/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min. 5 | %d min. 6 | %d min. 7 | %d min. 8 | 9 | 10 | %d val. 11 | %d val. 12 | %d val. 13 | %d val. 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-lv/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | %d min 7 | 8 | 9 | %d h 10 | %d h 11 | %d h 12 | 13 | 14 | -------------------------------------------------------------------------------- /res/values-mk/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d мин. 5 | %d мин. 6 | 7 | 8 | %d часа 9 | %d час 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-ml/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d മിനിറ്റ് 5 | %d മിനിറ്റ് 6 | 7 | 8 | %d മണിക്കൂർ 9 | %d മണിക്കൂർ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-mn/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d мин 5 | %d мин 6 | 7 | 8 | %d цаг 9 | %d цаг 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-mr/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d मि 5 | %d मि 6 | 7 | 8 | %d ता 9 | %d ता 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-ms/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d jam 9 | %d jam 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-my/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d မိနစ် 5 | %d မိနစ် 6 | 7 | 8 | %d နာရီ 9 | %d နာရီ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-nb/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d t 9 | %d t 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-ne/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d मिनेट 5 | %d मिनेट 6 | 7 | 8 | %d घन्टा 9 | %d घन्टा 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-nl/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d u 9 | %d u 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-pa/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d ਮਿੰਟ 5 | %d ਮਿੰਟ 6 | 7 | 8 | %d ਘੰਟੇ 9 | %d ਘੰਟਾ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-pl/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | %d min 7 | %d min 8 | 9 | 10 | %d godz. 11 | %d godz. 12 | %d godz. 13 | %d godz. 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-pt-rPT/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-pt/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d h 9 | %d h 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-ro/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | %d min 7 | 8 | 9 | %d h 10 | %d h 11 | %d h 12 | 13 | 14 | -------------------------------------------------------------------------------- /res/values-ru/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d мин. 5 | %d мин. 6 | %d мин. 7 | %d мин. 8 | 9 | 10 | %d ч. 11 | %d ч. 12 | %d ч. 13 | %d ч. 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-si/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | මිනි %d 5 | මිනි %d 6 | 7 | 8 | පැය %d 9 | පැය %d 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-sk/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | %d min 7 | %d min 8 | 9 | 10 | %d h 11 | %d h 12 | %d h 13 | %d h 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-sl/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | %d min 7 | %d min 8 | 9 | 10 | %d h 11 | %d h 12 | %d h 13 | %d h 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-sq/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min. 5 | %d min. 6 | 7 | 8 | %d orë 9 | %d orë 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-sr/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d мин 5 | %d мин 6 | %d мин 7 | 8 | 9 | %d ч 10 | %d ч 11 | %d ч 12 | 13 | 14 | -------------------------------------------------------------------------------- /res/values-sv/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d tim 9 | %d tim 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-sw/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Dakika %d 5 | Dakika %d 6 | 7 | 8 | Saa %d 9 | Saa %d 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-sw340dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 20dp 22 | 16sp 23 | 24 | -------------------------------------------------------------------------------- /res/values-sw600dp/config.xml: -------------------------------------------------------------------------------- 1 | 2 | true 3 | true 4 | 5 | -------------------------------------------------------------------------------- /res/values-sw600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 850dp 20 | 525dp 21 | 22 | 23 | 56dp 24 | 25 | 26 | -1000dp 27 | 28 | -------------------------------------------------------------------------------- /res/values-sw720dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -50.0dip 4 | 5 | -------------------------------------------------------------------------------- /res/values-sw720dp/config.xml: -------------------------------------------------------------------------------- 1 | 2 | true 3 | true 4 | 5 | 6 | 7 | 90 8 | 9 | 10 | false 11 | 12 | -------------------------------------------------------------------------------- /res/values-sw720dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 8dp 20 | 64dp 21 | 180dp 22 | 23 | 24 | 75dp 25 | 62dp 26 | 13dp 27 | 32dp 28 | 29 | 30 | -------------------------------------------------------------------------------- /res/values-ta/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d நிமி. 5 | %d நிமி. 6 | 7 | 8 | %d ம.நே 9 | %d ம.நே 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-te/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d నిమి 5 | %d నిమి 6 | 7 | 8 | %d గం 9 | %d గం 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-th/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d นาที 5 | %d นาที 6 | 7 | 8 | %d ชม. 9 | %d ชม. 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-tl/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d na min 5 | %d min 6 | 7 | 8 | %d na oras 9 | %d oras 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-tr/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d dk. 5 | %d dk. 6 | 7 | 8 | %d sa. 9 | %d sa. 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-uk/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d хв 5 | %d хв 6 | %d хв 7 | %d хв 8 | 9 | 10 | %d год 11 | %d год 12 | %d год 13 | %d год 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/values-ur/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ‏‎%d منٹ 5 | ‏‎%d منٹ 6 | 7 | 8 | ‏‎%d گھنٹہ 9 | ‏‎%d گھنٹہ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-uz/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d daqiqa 5 | %d daqiqa 6 | 7 | 8 | %d soat 9 | %d soat 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-v19/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 25 | 26 | -------------------------------------------------------------------------------- /res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /res/values-v23/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | true 21 | 22 | true 23 | -------------------------------------------------------------------------------- /res/values-v23/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /res/values-v24/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 0 5 | 1 6 | 2 7 | 256 8 | 9 | 10 | 11 | @string/theme_automatic 12 | @string/theme_default 13 | @string/theme_light 14 | @string/theme_dark 15 | @string/theme_transparent 16 | 17 | -------------------------------------------------------------------------------- /res/values-v26/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | true 21 | 22 | false 23 | -------------------------------------------------------------------------------- /res/values-v26/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | #66FFFFFF 21 | 22 | -------------------------------------------------------------------------------- /res/values-vi/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d phút 5 | %d phút 6 | 7 | 8 | %d giờ 9 | %d giờ 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-zh-rCN/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d 分钟 5 | %d 分钟 6 | 7 | 8 | %d 小时 9 | %d 小时 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-zh-rHK/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d 分鐘 5 | %d 分鐘 6 | 7 | 8 | %d 小時 9 | %d 小時 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-zh-rTW/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d 分鐘 5 | %d 分鐘 6 | 7 | 8 | %d 小時 9 | %d 小時 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-zu/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d iminithi 5 | %d iminithi 6 | 7 | 8 | %d ihora 9 | %d ihora 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | false 21 | 22 | true 23 | -------------------------------------------------------------------------------- /res/values/bridge.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 0xB662CC2F 4 | v2 5 | -------------------------------------------------------------------------------- /res/values/drawables.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | @drawable/ic_info_no_shadow 18 | @drawable/ic_remove_no_shadow 19 | @drawable/ic_uninstall_no_shadow 20 | -------------------------------------------------------------------------------- /res/values/plurals.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d min 5 | %d min 6 | 7 | 8 | %d hr 9 | %d hr 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/xml/backupscheme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/xml/default_workspace_4x4.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /res/xml/default_workspace_4x5.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /res/xml/default_workspace_5x5.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /res/xml/default_workspace_5x6.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /res/xml/default_workspace_6x6.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/amirz/aidlbridge/Bridge.aidl: -------------------------------------------------------------------------------- 1 | package amirz.aidlbridge; 2 | 3 | import amirz.aidlbridge.BridgeCallback; 4 | 5 | interface Bridge { 6 | oneway void setCallback(in int index, in BridgeCallback cb); 7 | } 8 | -------------------------------------------------------------------------------- /src/amirz/aidlbridge/BridgeCallback.aidl: -------------------------------------------------------------------------------- 1 | package amirz.aidlbridge; 2 | 3 | interface BridgeCallback { 4 | oneway void onBridgeConnected(in IBinder service); 5 | 6 | oneway void onBridgeDisconnected(); 7 | } 8 | -------------------------------------------------------------------------------- /src/com/android/launcher3/AppFilter.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | import android.content.ComponentName; 4 | import android.content.Context; 5 | import android.os.UserHandle; 6 | 7 | public class AppFilter { 8 | 9 | public static AppFilter newInstance(Context context) { 10 | return Utilities.getOverrideObject(AppFilter.class, context, R.string.app_filter_class); 11 | } 12 | 13 | public boolean shouldShowApp(ComponentName app, UserHandle user) { 14 | return true; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/com/android/launcher3/CustomAppWidget.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | public interface CustomAppWidget { 4 | public String getLabel(); 5 | public int getPreviewImage(); 6 | public int getIcon(); 7 | public int getWidgetLayout(); 8 | 9 | public int getSpanX(); 10 | public int getSpanY(); 11 | public int getMinSpanX(); 12 | public int getMinSpanY(); 13 | public int getResizeMode(); 14 | } 15 | -------------------------------------------------------------------------------- /src/com/android/launcher3/IconProvider.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | import android.content.pm.LauncherActivityInfo; 4 | import android.graphics.drawable.Drawable; 5 | import android.os.Build; 6 | 7 | import java.util.Locale; 8 | 9 | public class IconProvider { 10 | 11 | private static final boolean DBG = false; 12 | private static final String TAG = "IconProvider"; 13 | 14 | protected String mSystemState; 15 | 16 | public IconProvider() { 17 | updateSystemStateString(); 18 | } 19 | 20 | public void updateSystemStateString() { 21 | mSystemState = Locale.getDefault().toString() + "," + Build.VERSION.SDK_INT; 22 | } 23 | 24 | public String getIconSystemState(String packageName) { 25 | return mSystemState; 26 | } 27 | 28 | /** 29 | * @param flattenDrawable true if the caller does not care about the specification of the 30 | * original icon as long as the flattened version looks the same. 31 | */ 32 | public Drawable getIcon(LauncherActivityInfo info, int iconDpi, boolean flattenDrawable) { 33 | return info.getIcon(iconDpi); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/com/android/launcher3/Insettable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.launcher3; 18 | 19 | import android.graphics.Rect; 20 | 21 | /** 22 | * Allows the implementing {@link View} to not draw underneath system bars. 23 | * e.g., notification bar on top and home key area on the bottom. 24 | */ 25 | public interface Insettable { 26 | 27 | void setInsets(Rect insets); 28 | } -------------------------------------------------------------------------------- /src/com/android/launcher3/LauncherBackupAgent.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | import android.app.backup.BackupAgent; 4 | import android.app.backup.BackupDataInput; 5 | import android.app.backup.BackupDataOutput; 6 | import android.os.ParcelFileDescriptor; 7 | 8 | import com.android.launcher3.logging.FileLog; 9 | import com.android.launcher3.provider.RestoreDbTask; 10 | 11 | public class LauncherBackupAgent extends BackupAgent { 12 | 13 | @Override 14 | public void onCreate() { 15 | super.onCreate(); 16 | // Set the log dir as LauncherAppState is not initialized during restore. 17 | FileLog.setDir(getFilesDir()); 18 | } 19 | 20 | @Override 21 | public void onRestore( 22 | BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) { 23 | // Doesn't do incremental backup/restore 24 | } 25 | 26 | @Override 27 | public void onBackup( 28 | ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) { 29 | // Doesn't do incremental backup/restore 30 | } 31 | 32 | @Override 33 | public void onRestoreFinished() { 34 | RestoreDbTask.setPending(this, true); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/com/android/launcher3/LauncherExterns.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.launcher3; 18 | 19 | import android.content.SharedPreferences; 20 | 21 | /** 22 | * This interface defines the set of methods that the Launcher activity exposes. Methods 23 | * here should be safe to call from classes outside of com.android.launcher3.* 24 | */ 25 | public interface LauncherExterns { 26 | 27 | public boolean setLauncherCallbacks(LauncherCallbacks callbacks); 28 | 29 | public SharedPreferences getSharedPrefs(); 30 | 31 | public void setLauncherOverlay(Launcher.LauncherOverlay overlay); 32 | 33 | void clearTypedText(); 34 | } 35 | -------------------------------------------------------------------------------- /src/com/android/launcher3/LauncherProviderChangeListener.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | /** 4 | * This class is a listener for {@link LauncherProvider} changes. It gets notified in the 5 | * sendNotify method. This listener is needed because by default the Launcher suppresses 6 | * standard data change callbacks. 7 | */ 8 | public interface LauncherProviderChangeListener { 9 | 10 | void onLauncherProviderChanged(); 11 | 12 | void onExtractedColorsChanged(); 13 | 14 | void onAppWidgetHostReset(); 15 | } 16 | -------------------------------------------------------------------------------- /src/com/android/launcher3/LogAccelerateInterpolator.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | import android.animation.TimeInterpolator; 4 | 5 | public class LogAccelerateInterpolator implements TimeInterpolator { 6 | 7 | int mBase; 8 | int mDrift; 9 | final float mLogScale; 10 | 11 | public LogAccelerateInterpolator(int base, int drift) { 12 | mBase = base; 13 | mDrift = drift; 14 | mLogScale = 1f / computeLog(1, mBase, mDrift); 15 | } 16 | 17 | static float computeLog(float t, int base, int drift) { 18 | return (float) -Math.pow(base, -t) + 1 + (drift * t); 19 | } 20 | 21 | @Override 22 | public float getInterpolation(float t) { 23 | // Due to rounding issues, the interpolation doesn't quite reach 1 even though it should. 24 | // To account for this, we short-circuit to return 1 if the input is 1. 25 | return Float.compare(t, 1f) == 0 ? 1f : 1 - computeLog(1 - t, mBase, mDrift) * mLogScale; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/com/android/launcher3/LogDecelerateInterpolator.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | import android.animation.TimeInterpolator; 4 | 5 | public class LogDecelerateInterpolator implements TimeInterpolator { 6 | 7 | int mBase; 8 | int mDrift; 9 | final float mLogScale; 10 | 11 | public LogDecelerateInterpolator(int base, int drift) { 12 | mBase = base; 13 | mDrift = drift; 14 | 15 | mLogScale = 1f / computeLog(1, mBase, mDrift); 16 | } 17 | 18 | static float computeLog(float t, int base, int drift) { 19 | return (float) -Math.pow(base, -t) + 1 + (drift * t); 20 | } 21 | 22 | @Override 23 | public float getInterpolation(float t) { 24 | // Due to rounding issues, the interpolation doesn't quite reach 1 even though it should. 25 | // To account for this, we short-circuit to return 1 if the input is 1. 26 | return Float.compare(t, 1f) == 0 ? 1f : computeLog(t, mBase, mDrift) * mLogScale; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/com/android/launcher3/MainThreadExecutor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License 15 | */ 16 | 17 | package com.android.launcher3; 18 | 19 | import android.os.Looper; 20 | 21 | import com.android.launcher3.util.LooperExecutor; 22 | 23 | /** 24 | * An executor service that executes its tasks on the main thread. 25 | * 26 | * Shutting down this executor is not supported. 27 | */ 28 | public class MainThreadExecutor extends LooperExecutor { 29 | 30 | public MainThreadExecutor() { 31 | super(Looper.getMainLooper()); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/com/android/launcher3/OnAlarmListener.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | public interface OnAlarmListener { 4 | public void onAlarm(Alarm alarm); 5 | } 6 | -------------------------------------------------------------------------------- /src/com/android/launcher3/SimpleOnStylusPressListener.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | import android.view.MotionEvent; 4 | import android.view.View; 5 | 6 | import com.android.launcher3.StylusEventHelper.StylusButtonListener; 7 | 8 | /** 9 | * Simple listener that performs a long click on the view after a stylus button press. 10 | */ 11 | public class SimpleOnStylusPressListener implements StylusButtonListener { 12 | private View mView; 13 | 14 | public SimpleOnStylusPressListener(View view) { 15 | mView = view; 16 | } 17 | 18 | public boolean onPressed(MotionEvent event) { 19 | return mView.isLongClickable() && mView.performLongClick(); 20 | } 21 | 22 | public boolean onReleased(MotionEvent event) { 23 | return false; 24 | } 25 | } -------------------------------------------------------------------------------- /src/com/android/launcher3/allapps/search/SearchAlgorithm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.android.launcher3.allapps.search; 17 | 18 | /** 19 | * An interface for handling search. 20 | */ 21 | public interface SearchAlgorithm { 22 | 23 | /** 24 | * Performs search and sends the result to the callback. 25 | */ 26 | void doSearch(String query, AllAppsSearchBarController.Callbacks callback); 27 | 28 | /** 29 | * Cancels any active request. 30 | */ 31 | void cancel(boolean interruptActiveRequests); 32 | } 33 | -------------------------------------------------------------------------------- /src/com/android/launcher3/compat/UserManagerCompatVM.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.launcher3.compat; 18 | 19 | import android.annotation.TargetApi; 20 | import android.content.Context; 21 | import android.os.Build; 22 | import android.os.UserHandle; 23 | 24 | @TargetApi(Build.VERSION_CODES.M) 25 | public class UserManagerCompatVM extends UserManagerCompatVL { 26 | 27 | UserManagerCompatVM(Context context) { 28 | super(context); 29 | } 30 | 31 | @Override 32 | public long getUserCreationTime(UserHandle user) { 33 | return mUserManager.getUserCreationTime(user); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/com/android/launcher3/compat/UserManagerCompatVNMr1.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.launcher3.compat; 18 | 19 | import android.annotation.TargetApi; 20 | import android.content.Context; 21 | import android.os.Build; 22 | 23 | @TargetApi(Build.VERSION_CODES.N_MR1) 24 | public class UserManagerCompatVNMr1 extends UserManagerCompatVN { 25 | 26 | UserManagerCompatVNMr1(Context context) { 27 | super(context); 28 | } 29 | 30 | @Override 31 | public boolean isDemoUser() { 32 | return mUserManager.isDemoUser(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/com/android/launcher3/discovery/AppDiscoveryUpdateState.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.launcher3.discovery; 18 | 19 | public enum AppDiscoveryUpdateState { 20 | START, UPDATE, END 21 | } 22 | -------------------------------------------------------------------------------- /src/com/android/launcher3/testing/DummyWidget.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3.testing; 2 | 3 | import android.appwidget.AppWidgetProviderInfo; 4 | 5 | import com.android.launcher3.CustomAppWidget; 6 | import com.android.launcher3.R; 7 | 8 | public class DummyWidget implements CustomAppWidget { 9 | @Override 10 | public String getLabel() { 11 | return "Dumb Launcher Widget"; 12 | } 13 | 14 | @Override 15 | public int getPreviewImage() { 16 | return 0; 17 | } 18 | 19 | @Override 20 | public int getIcon() { 21 | return 0; 22 | } 23 | 24 | @Override 25 | public int getWidgetLayout() { 26 | return R.layout.zzz_dummy_widget; 27 | } 28 | 29 | @Override 30 | public int getSpanX() { 31 | return 2; 32 | } 33 | 34 | @Override 35 | public int getSpanY() { 36 | return 2; 37 | } 38 | 39 | @Override 40 | public int getMinSpanX() { 41 | return 1; 42 | } 43 | 44 | @Override 45 | public int getMinSpanY() { 46 | return 1; 47 | } 48 | 49 | @Override 50 | public int getResizeMode() { 51 | return AppWidgetProviderInfo.RESIZE_BOTH; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/com/android/launcher3/testing/ToggleWeightWatcher.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3.testing; 2 | 3 | import android.app.Activity; 4 | import android.content.SharedPreferences; 5 | import android.os.Bundle; 6 | import android.view.View; 7 | 8 | import com.android.launcher3.Launcher; 9 | import com.android.launcher3.LauncherAppState; 10 | import com.android.launcher3.Utilities; 11 | import com.android.launcher3.util.TestingUtils; 12 | 13 | public class ToggleWeightWatcher extends Activity { 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | 19 | SharedPreferences sp = Utilities.getPrefs(this); 20 | boolean show = sp.getBoolean(TestingUtils.SHOW_WEIGHT_WATCHER, true); 21 | 22 | show = !show; 23 | sp.edit().putBoolean(TestingUtils.SHOW_WEIGHT_WATCHER, show).apply(); 24 | 25 | Launcher launcher = (Launcher) LauncherAppState.getInstance(this).getModel().getCallback(); 26 | if (launcher != null && launcher.mWeightWatcher != null) { 27 | launcher.mWeightWatcher.setVisibility(show ? View.VISIBLE : View.GONE); 28 | } 29 | finish(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/android/launcher3/util/CellAndSpan.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3.util; 2 | 3 | /** 4 | * Base class which represents an area on the grid. 5 | */ 6 | public class CellAndSpan { 7 | 8 | /** 9 | * Indicates the X position of the associated cell. 10 | */ 11 | public int cellX = -1; 12 | 13 | /** 14 | * Indicates the Y position of the associated cell. 15 | */ 16 | public int cellY = -1; 17 | 18 | /** 19 | * Indicates the X cell span. 20 | */ 21 | public int spanX = 1; 22 | 23 | /** 24 | * Indicates the Y cell span. 25 | */ 26 | public int spanY = 1; 27 | 28 | public CellAndSpan() { 29 | } 30 | 31 | public void copyFrom(CellAndSpan copy) { 32 | cellX = copy.cellX; 33 | cellY = copy.cellY; 34 | spanX = copy.spanX; 35 | spanY = copy.spanY; 36 | } 37 | 38 | public CellAndSpan(int cellX, int cellY, int spanX, int spanY) { 39 | this.cellX = cellX; 40 | this.cellY = cellY; 41 | this.spanX = spanX; 42 | this.spanY = spanY; 43 | } 44 | 45 | public String toString() { 46 | return "(" + cellX + ", " + cellY + ": " + spanX + ", " + spanY + ")"; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/com/android/launcher3/util/FlagOp.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3.util; 2 | 3 | public abstract class FlagOp { 4 | 5 | public static FlagOp NO_OP = new FlagOp() {}; 6 | 7 | private FlagOp() {} 8 | 9 | public int apply(int flags) { 10 | return flags; 11 | } 12 | 13 | public static FlagOp addFlag(final int flag) { 14 | return new FlagOp() { 15 | @Override 16 | public int apply(int flags) { 17 | return flags | flag; 18 | } 19 | }; 20 | } 21 | 22 | public static FlagOp removeFlag(final int flag) { 23 | return new FlagOp() { 24 | @Override 25 | public int apply(int flags) { 26 | return flags & ~flag; 27 | } 28 | }; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/com/android/launcher3/util/LogConfig.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3.util; 2 | 3 | /** 4 | * This is a utility class that keeps track of all the tag that can be enabled to debug 5 | * a behavior in runtime. 6 | * 7 | * To use any of the strings defined in this class, execute the following command. 8 | * 9 | * $ adb shell setprop log.tag.TAGNAME VERBOSE 10 | */ 11 | 12 | public class LogConfig { 13 | // These are list of strings that can be used to replace TAGNAME. 14 | 15 | /** 16 | * After this tag is turned on, whenever there is n user event, debug information is 17 | * printed out to logcat. 18 | */ 19 | public static final String USEREVENT = "UserEvent"; 20 | 21 | /** 22 | * When turned on, all icons are kept on the home screen, even if they don't have an active 23 | * session. 24 | */ 25 | public static final String KEEP_ALL_ICONS = "KeepAllIcons"; 26 | 27 | /** 28 | * When turned on, icon cache is only fetched from memory and not disk. 29 | */ 30 | public static final String MEMORY_ONLY_ICON_CACHE = "MemoryOnlyIconCache"; 31 | } 32 | -------------------------------------------------------------------------------- /src/com/android/launcher3/util/NoLocaleSqliteContext.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3.util; 2 | 3 | import android.content.Context; 4 | import android.content.ContextWrapper; 5 | import android.database.DatabaseErrorHandler; 6 | import android.database.sqlite.SQLiteDatabase; 7 | import android.database.sqlite.SQLiteDatabase.CursorFactory; 8 | 9 | /** 10 | * A context wrapper which creates databases without support for localized collators. 11 | */ 12 | public class NoLocaleSqliteContext extends ContextWrapper { 13 | 14 | public NoLocaleSqliteContext(Context context) { 15 | super(context); 16 | } 17 | 18 | @Override 19 | public SQLiteDatabase openOrCreateDatabase( 20 | String name, int mode, CursorFactory factory, DatabaseErrorHandler errorHandler) { 21 | return super.openOrCreateDatabase( 22 | name, mode | Context.MODE_NO_LOCALIZED_COLLATORS, factory, errorHandler); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/android/launcher3/util/Provider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.launcher3.util; 18 | 19 | /** 20 | * Utility class to allow lazy initialization of objects. 21 | */ 22 | public abstract class Provider { 23 | 24 | /** 25 | * Initializes and returns the object. This may contain expensive operations not suitable 26 | * to UI thread. 27 | */ 28 | public abstract T get(); 29 | 30 | public static Provider of (final T value) { 31 | return new Provider() { 32 | @Override 33 | public T get() { 34 | return value; 35 | } 36 | }; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/com/android/launcher3/util/RunnableWithId.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.android.launcher3.util; 17 | 18 | /** 19 | * A runnable with an id associated which is used for equality check. 20 | */ 21 | public abstract class RunnableWithId implements Runnable { 22 | 23 | public static final int RUNNABLE_ID_BIND_APPS = 1; 24 | public static final int RUNNABLE_ID_BIND_WIDGETS = 2; 25 | 26 | public final int id; 27 | 28 | public RunnableWithId(int id) { 29 | this.id = id; 30 | } 31 | 32 | @Override 33 | public boolean equals(Object obj) { 34 | return obj instanceof RunnableWithId && ((RunnableWithId) obj).id == id; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/com/android/launcher3/util/TouchController.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2016 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.launcher3.util; 18 | 19 | import android.view.MotionEvent; 20 | 21 | public interface TouchController { 22 | 23 | /** 24 | * Called when the draglayer receives touch event. 25 | */ 26 | boolean onControllerTouchEvent(MotionEvent ev); 27 | 28 | /** 29 | * Called when the draglayer receives a intercept touch event. 30 | */ 31 | boolean onControllerInterceptTouchEvent(MotionEvent ev); 32 | } 33 | -------------------------------------------------------------------------------- /src/com/google/android/apps/nexuslauncher/DynamicDrawableFactory.java: -------------------------------------------------------------------------------- 1 | package com.google.android.apps.nexuslauncher; 2 | 3 | import android.content.Context; 4 | import android.graphics.Bitmap; 5 | import android.os.Process; 6 | 7 | import com.android.launcher3.FastBitmapDrawable; 8 | import com.android.launcher3.ItemInfo; 9 | import com.android.launcher3.LauncherSettings; 10 | import com.android.launcher3.Utilities; 11 | import com.android.launcher3.graphics.DrawableFactory; 12 | import com.google.android.apps.nexuslauncher.clock.DynamicClock; 13 | 14 | public class DynamicDrawableFactory extends DrawableFactory { 15 | private final DynamicClock mDynamicClockDrawer; 16 | 17 | public DynamicDrawableFactory(Context context) { 18 | mDynamicClockDrawer = new DynamicClock(context); 19 | } 20 | 21 | @Override 22 | public FastBitmapDrawable newIcon(Bitmap icon, ItemInfo info) { 23 | if (info != null && 24 | Utilities.ATLEAST_OREO && 25 | info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION && 26 | DynamicClock.DESK_CLOCK.equals(info.getTargetComponent()) && 27 | info.user.equals(Process.myUserHandle())) { 28 | return mDynamicClockDrawer.drawIcon(icon); 29 | } 30 | return super.newIcon(icon, info); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/com/google/android/apps/nexuslauncher/NexusAppFilter.java: -------------------------------------------------------------------------------- 1 | package com.google.android.apps.nexuslauncher; 2 | 3 | import android.content.ComponentName; 4 | import android.content.Context; 5 | import android.os.UserHandle; 6 | 7 | import com.android.launcher3.AppFilter; 8 | 9 | import java.util.HashSet; 10 | 11 | public class NexusAppFilter extends AppFilter { 12 | private final HashSet mHideList = new HashSet<>(); 13 | 14 | public NexusAppFilter(Context context) { 15 | //Voice Search 16 | mHideList.add(ComponentName.unflattenFromString("com.google.android.googlequicksearchbox/.VoiceSearchActivity")); 17 | 18 | //Wallpapers 19 | mHideList.add(ComponentName.unflattenFromString("com.google.android.apps.wallpaper/.picker.CategoryPickerActivity")); 20 | 21 | //Google Now Launcher 22 | mHideList.add(ComponentName.unflattenFromString("com.google.android.launcher/.StubApp")); 23 | } 24 | 25 | @Override 26 | public boolean shouldShowApp(ComponentName componentName, UserHandle user) { 27 | return !mHideList.contains(componentName); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/com/google/android/apps/nexuslauncher/qsb/OPAStatusReceiver.java: -------------------------------------------------------------------------------- 1 | package com.google.android.apps.nexuslauncher.qsb; 2 | 3 | import com.android.launcher3.Utilities; 4 | import android.content.Intent; 5 | import android.content.Context; 6 | import android.content.BroadcastReceiver; 7 | 8 | public class OPAStatusReceiver extends BroadcastReceiver { 9 | @Override 10 | public void onReceive(Context context, Intent intent) { 11 | Utilities.getDevicePrefs(context).edit().putBoolean("opa_enabled", intent.getBooleanExtra("OPA_ENABLED", false)).apply(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/google/android/apps/nexuslauncher/search/AppItemInfoWithIcon.java: -------------------------------------------------------------------------------- 1 | package com.google.android.apps.nexuslauncher.search; 2 | 3 | import android.content.Intent; 4 | 5 | import com.android.launcher3.ItemInfoWithIcon; 6 | import com.android.launcher3.util.ComponentKey; 7 | 8 | public class AppItemInfoWithIcon extends ItemInfoWithIcon { 9 | private Intent mIntent; 10 | 11 | public AppItemInfoWithIcon(final ComponentKey componentKey) { 12 | mIntent = new Intent(Intent.ACTION_MAIN) 13 | .addCategory(Intent.CATEGORY_LAUNCHER) 14 | .setComponent(componentKey.componentName) 15 | .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 16 | user = componentKey.user; 17 | itemType = 0; 18 | } 19 | 20 | public Intent getIntent() { 21 | return this.mIntent; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/google/android/apps/nexuslauncher/search/LogContainerProvider.java: -------------------------------------------------------------------------------- 1 | package com.google.android.apps.nexuslauncher.search; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.widget.FrameLayout; 6 | 7 | import com.android.launcher3.ItemInfo; 8 | import com.android.launcher3.logging.UserEventDispatcher; 9 | import com.android.launcher3.userevent.nano.LauncherLogProto; 10 | 11 | class LogContainerProvider extends FrameLayout implements UserEventDispatcher.LogContainerProvider { 12 | private final int mPredictedRank; 13 | 14 | public LogContainerProvider(Context context, int predictedRank) { 15 | super(context); 16 | mPredictedRank = predictedRank; 17 | } 18 | 19 | @Override 20 | public void fillInLogContainerData(View v, ItemInfo info, LauncherLogProto.Target target, LauncherLogProto.Target targetParent) { 21 | if (mPredictedRank >= 0) { 22 | targetParent.containerType = 7; 23 | target.predictedRank = mPredictedRank; 24 | } else { 25 | targetParent.containerType = 8; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/com/google/android/apps/nexuslauncher/search/SearchResult.java: -------------------------------------------------------------------------------- 1 | package com.google.android.apps.nexuslauncher.search; 2 | 3 | import com.android.launcher3.allapps.search.AllAppsSearchBarController; 4 | import com.android.launcher3.util.ComponentKey; 5 | 6 | import java.util.ArrayList; 7 | 8 | class SearchResult { 9 | final AllAppsSearchBarController.Callbacks mCallbacks; 10 | final String mQuery; 11 | final ArrayList mApps; 12 | 13 | SearchResult(String query, AllAppsSearchBarController.Callbacks callbacks) { 14 | mApps = new ArrayList<>(); 15 | mQuery = query; 16 | mCallbacks = callbacks; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/google/android/apps/nexuslauncher/smartspace/ISmartspace.java: -------------------------------------------------------------------------------- 1 | package com.google.android.apps.nexuslauncher.smartspace; 2 | 3 | public interface ISmartspace { 4 | void cq(); 5 | 6 | void cr(final SmartspaceDataContainer p0); 7 | } 8 | -------------------------------------------------------------------------------- /src/com/google/android/apps/nexuslauncher/smartspace/SmartspacePreferencesShortcut.java: -------------------------------------------------------------------------------- 1 | package com.google.android.apps.nexuslauncher.smartspace; 2 | 3 | import android.view.View; 4 | 5 | import com.android.launcher3.AbstractFloatingView; 6 | import com.android.launcher3.ItemInfo; 7 | import com.android.launcher3.Launcher; 8 | import com.android.launcher3.R; 9 | import com.android.launcher3.popup.SystemShortcut; 10 | 11 | class SmartspacePreferencesShortcut extends SystemShortcut { 12 | SmartspacePreferencesShortcut() { 13 | super(R.drawable.ic_smartspace_preferences, R.string.smartspace_preferences); 14 | } 15 | 16 | public View.OnClickListener getOnClickListener(final Launcher launcher, ItemInfo itemInfo) { 17 | return new View.OnClickListener() { 18 | public void onClick(final View view) { 19 | SmartspaceController.get(view.getContext()).cZ(); 20 | AbstractFloatingView.closeAllOpenViews(launcher); 21 | } 22 | }; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/google/android/apps/nexuslauncher/utils/ActionIntentFilter.java: -------------------------------------------------------------------------------- 1 | package com.google.android.apps.nexuslauncher.utils; 2 | 3 | import android.content.Context; 4 | import android.content.IntentFilter; 5 | import android.content.pm.PackageManager; 6 | 7 | public class ActionIntentFilter { 8 | public static IntentFilter googleInstance(String... array) { 9 | return newInstance("com.google.android.googlequicksearchbox", array); 10 | } 11 | 12 | public static IntentFilter newInstance(String s, String... array) { 13 | IntentFilter intentFilter = new IntentFilter(); 14 | for (int length = array.length, i = 0; i < length; ++i) { 15 | intentFilter.addAction(array[i]); 16 | } 17 | intentFilter.addDataScheme("package"); 18 | intentFilter.addDataSchemeSpecificPart(s, 0); 19 | return intentFilter; 20 | } 21 | 22 | public static boolean googleEnabled(final Context context) { 23 | try { 24 | return context.getPackageManager().getApplicationInfo("com.google.android.googlequicksearchbox", 0).enabled; 25 | } catch (PackageManager.NameNotFoundException ex) { 26 | return false; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/com/google/android/libraries/gsa/launcherclient/IScrollCallback.java: -------------------------------------------------------------------------------- 1 | package com.google.android.libraries.gsa.launcherclient; 2 | 3 | public interface IScrollCallback { 4 | void onOverlayScrollChanged(float progress); 5 | 6 | void onServiceStateChanged(boolean overlayAttached); 7 | } 8 | -------------------------------------------------------------------------------- /src/com/google/android/libraries/gsa/launcherclient/ISerializableScrollCallback.java: -------------------------------------------------------------------------------- 1 | package com.google.android.libraries.gsa.launcherclient; 2 | 3 | public interface ISerializableScrollCallback extends IScrollCallback { 4 | void setPersistentFlags(int flags); 5 | } 6 | -------------------------------------------------------------------------------- /src/com/google/android/libraries/gsa/launcherclient/StaticInteger.java: -------------------------------------------------------------------------------- 1 | package com.google.android.libraries.gsa.launcherclient; 2 | 3 | public class StaticInteger { 4 | public final int mData; 5 | 6 | public StaticInteger(int data) { 7 | mData = data; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/com/google/android/libraries/launcherclient/ILauncherOverlay.aidl: -------------------------------------------------------------------------------- 1 | package com.google.android.libraries.launcherclient; 2 | 3 | import android.view.WindowManager.LayoutParams; 4 | import com.google.android.libraries.launcherclient.ILauncherOverlayCallback; 5 | 6 | interface ILauncherOverlay { 7 | 8 | oneway void startScroll(); 9 | 10 | oneway void onScroll(in float progress); 11 | 12 | oneway void endScroll(); 13 | 14 | oneway void windowAttached(in LayoutParams lp, in ILauncherOverlayCallback cb, in int flags); 15 | 16 | oneway void windowDetached(in boolean isChangingConfigurations); 17 | 18 | oneway void closeOverlay(in int flags); 19 | 20 | oneway void onPause(); 21 | 22 | oneway void onResume(); 23 | 24 | oneway void openOverlay(in int flags); 25 | 26 | oneway void requestVoiceDetection(in boolean start); 27 | 28 | String getVoiceSearchLanguage(); 29 | 30 | boolean isVoiceDetectionRunning(); 31 | 32 | boolean hasOverlayContent(); 33 | 34 | oneway void windowAttached2(in Bundle bundle, in ILauncherOverlayCallback cb); 35 | 36 | oneway void unusedMethod(); 37 | 38 | oneway void setActivityState(in int flags); 39 | 40 | boolean startSearch(in byte[] data, in Bundle bundle); 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/com/google/android/libraries/launcherclient/ILauncherOverlayCallback.aidl: -------------------------------------------------------------------------------- 1 | package com.google.android.libraries.launcherclient; 2 | 3 | interface ILauncherOverlayCallback { 4 | 5 | oneway void overlayScrollChanged(float progress); 6 | 7 | oneway void overlayStatusChanged(int status); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src_config/com/android/launcher3/BuildConfig.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.launcher3; 18 | 19 | /** 20 | * Config file used by Make. This file is automatically generated when using gradle. 21 | */ 22 | public class BuildConfig { 23 | public static final String APPLICATION_ID = "com.google.android.apps.nexuslauncher"; 24 | } 25 | -------------------------------------------------------------------------------- /tests/Android.mk: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2015 The Android Open Source Project 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # 15 | 16 | LOCAL_PATH := $(call my-dir) 17 | include $(CLEAR_VARS) 18 | 19 | LOCAL_MODULE_TAGS := tests 20 | LOCAL_STATIC_JAVA_LIBRARIES := android-support-test ub-uiautomator mockito-target-minus-junit4 21 | 22 | LOCAL_SRC_FILES := $(call all-java-files-under, src) 23 | LOCAL_FULL_LIBS_MANIFEST_FILES := $(LOCAL_PATH)/AndroidManifest-common.xml 24 | 25 | LOCAL_SDK_VERSION := current 26 | LOCAL_MIN_SDK_VERSION := 21 27 | 28 | LOCAL_PACKAGE_NAME := Launcher3Tests 29 | 30 | LOCAL_INSTRUMENTATION_FOR := Launcher3 31 | 32 | include $(BUILD_PACKAGE) 33 | -------------------------------------------------------------------------------- /tests/res/layout/test_layout_appwidget_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tests/res/layout/test_layout_appwidget_red.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tests/res/layout/test_layout_appwidget_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | -------------------------------------------------------------------------------- /tests/res/raw/cache_data_updated_task_data.txt: -------------------------------------------------------------------------------- 1 | # Model data used by CacheDataUpdatedTaskTest 2 | 3 | classMap s com.android.launcher3.ShortcutInfo 4 | 5 | # Items for the BgDataModel 6 | 7 | # App shortcuts 8 | bgItem s itemType=0 title=app1-class1 intent=component=app1/class1 id=1 9 | bgItem s itemType=0 title=app1-class2 intent=component=app1/class2 id=2 10 | bgItem s itemType=0 title=app2-class1 intent=component=app2/class1 id=3 11 | bgItem s itemType=0 title=app2-class2 intent=component=app2/class2 id=4 12 | 13 | # Auto install app shortcut 14 | bgItem s itemType=0 status=2 title=app3-class1 intent=component=app3/class1 id=5 15 | bgItem s itemType=0 status=2 title=app3-class2 intent=component=app3/class2 id=6 16 | 17 | # Custom shortcuts 18 | bgItem s itemType=1 title=app1-shrt intent=component=app1/class3 id=7 19 | bgItem s itemType=1 title=app4-shrt intent=component=app4/class1 id=8 20 | 21 | # Restored custom shortcut 22 | bgItem s itemType=1 status=1 title=app3-shrt intent=component=app3/class3 id=9 23 | bgItem s itemType=1 status=1 title=app5-shrt intent=component=app5/class1 id=10 24 | 25 | allApps componentName=app1/class1 intent=component=app1/class1 26 | allApps componentName=app1/class2 intent=component=app1/class2 27 | allApps componentName=app2/class1 intent=component=app2/class1 28 | allApps componentName=app2/class2 intent=component=app2/class2 -------------------------------------------------------------------------------- /tests/res/raw/db_schema_v10.json: -------------------------------------------------------------------------------- 1 | { 2 | "version" : 10, 3 | "downgrade_to_9" : [] 4 | } -------------------------------------------------------------------------------- /tests/res/raw/package_install_state_change_task_data.txt: -------------------------------------------------------------------------------- 1 | # Model data used by PackageInstallStateChangeTaskTest 2 | 3 | classMap s com.android.launcher3.ShortcutInfo 4 | classMap w com.android.launcher3.LauncherAppWidgetInfo 5 | 6 | # Items for the BgDataModel 7 | 8 | # App shortcuts 9 | bgItem s itemType=0 title=app1-class1 intent=component=app1/class1 id=1 10 | bgItem s itemType=0 title=app1-class2 intent=component=app1/class2 id=2 11 | bgItem s itemType=0 title=app2-class1 intent=component=app2/class1 id=3 12 | bgItem s itemType=0 title=app2-class2 intent=component=app2/class2 id=4 13 | 14 | # Promise icons for app3 15 | bgItem s itemType=0 status=2 title=app3-class1 intent=component=app3/class1 id=5 16 | bgItem s itemType=0 status=2 title=app3-class2 intent=component=app3/class2 id=6 17 | bgItem s itemType=1 status=1 title=app3-shrt intent=component=app3/class3 id=7 18 | 19 | # Promise icon for app4 20 | bgItem s itemType=1 status=1 title=app4-shrt intent=component=app4/class1 id=8 21 | 22 | # Widget 23 | bgItem w providerName=app4/provider1 id=9 24 | bgItem w providerName=app5/provider1 id=10 -------------------------------------------------------------------------------- /tests/res/xml/appwidget_no_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | -------------------------------------------------------------------------------- /tests/res/xml/appwidget_with_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | -------------------------------------------------------------------------------- /tests/src/com/android/launcher3/testcomponent/AppWidgetNoConfig.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | package com.android.launcher3.testcomponent; 17 | 18 | import android.appwidget.AppWidgetProvider; 19 | 20 | /** 21 | * A simple app widget without any configuration screen. 22 | */ 23 | public class AppWidgetNoConfig extends AppWidgetProvider { 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /tests/src/com/android/launcher3/testcomponent/AppWidgetWithConfig.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2017 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | package com.android.launcher3.testcomponent; 17 | 18 | /** 19 | * A simple app widget with configuration sceen. 20 | */ 21 | public class AppWidgetWithConfig extends AppWidgetNoConfig { 22 | 23 | } 24 | -------------------------------------------------------------------------------- /tests/src/com/android/launcher3/util/Wait.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3.util; 2 | 3 | import android.os.SystemClock; 4 | 5 | /** 6 | * A utility class for waiting for a condition to be true. 7 | */ 8 | public class Wait { 9 | 10 | private static final long DEFAULT_SLEEP_MS = 200; 11 | 12 | public static boolean atMost(Condition condition, long timeout) { 13 | return atMost(condition, timeout, DEFAULT_SLEEP_MS); 14 | } 15 | 16 | public static boolean atMost(Condition condition, long timeout, long sleepMillis) { 17 | long endTime = SystemClock.uptimeMillis() + timeout; 18 | while (SystemClock.uptimeMillis() < endTime) { 19 | try { 20 | if (condition.isTrue()) { 21 | return true; 22 | } 23 | } catch (Throwable t) { 24 | // Ignore 25 | } 26 | SystemClock.sleep(sleepMillis); 27 | } 28 | 29 | // Check once more before returning false. 30 | try { 31 | if (condition.isTrue()) { 32 | return true; 33 | } 34 | } catch (Throwable t) { 35 | // Ignore 36 | } 37 | return false; 38 | } 39 | } 40 | --------------------------------------------------------------------------------