├── .gitignore ├── Android.mk ├── AndroidManifest-common.xml ├── AndroidManifest.xml ├── CleanSpec.mk ├── MODULE_LICENSE_APACHE2 ├── NOTICE ├── README.md ├── 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-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 │ │ ├── dimens.xml │ │ ├── override.xml │ │ └── strings.xml │ └── xml │ │ └── device_profiles.xml └── src_flags │ └── com │ └── android │ └── launcher3 │ └── config │ └── FeatureFlags.java ├── libs └── freeme-framework.jar ├── print_db.py ├── proguard.flags ├── proto_overrides └── launcher_log_extension.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 ├── 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 ├── 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 ├── drawable-v24 │ ├── ic_info_shadow.xml │ ├── ic_remove_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 ├── 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 ├── drawable-xxxhdpi │ ├── ic_widget_resize_handle.png │ ├── widget_resize_frame.9.png │ ├── widget_resize_shadow.9.png │ └── workspace_bg.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 │ ├── 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_info_no_shadow.xml │ ├── ic_instant_app_badge.xml │ ├── ic_launcher_home.xml │ ├── ic_remove_no_shadow.xml │ ├── ic_setting.xml │ ├── ic_star_rating.xml │ ├── ic_uninstall_no_shadow.xml │ ├── ic_wallpaper.xml │ ├── ic_warning.xml │ ├── ic_widget.xml │ ├── pending_widget_bg.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 ├── layout-port │ └── launcher.xml ├── layout-sw720dp │ ├── all_apps_fast_scroller.xml │ └── launcher.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_icon.xml │ ├── all_apps_search_market.xml │ ├── app_icon.xml │ ├── app_widget_resize_frame.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 │ ├── search_container_all_apps.xml │ ├── search_container_workspace.xml │ ├── shortcuts_item.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_foreground.png ├── mipmap-mdpi │ ├── ic_launcher_home.png │ └── ic_launcher_home_foreground.png ├── mipmap-xhdpi │ ├── ic_launcher_home.png │ └── ic_launcher_home_foreground.png ├── mipmap-xxhdpi │ ├── ic_launcher_home.png │ └── ic_launcher_home_foreground.png ├── raw │ └── downgrade_schema.json ├── values-af │ └── strings.xml ├── values-am │ └── strings.xml ├── values-ar │ └── 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 │ └── 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 │ └── strings.xml ├── values-kk │ └── strings.xml ├── values-km │ └── strings.xml ├── values-kn │ └── strings.xml ├── values-ko │ └── strings.xml ├── values-ky │ └── strings.xml ├── values-land │ └── dimens.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-rm │ └── strings.xml ├── values-ro │ └── strings.xml ├── values-ru │ └── 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-sw340dp │ └── dimens.xml ├── values-sw600dp │ ├── config.xml │ └── dimens.xml ├── values-sw720dp │ ├── config.xml │ ├── dimens.xml │ └── styles.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 │ └── strings.xml ├── values-v19 │ └── styles.xml ├── values-v21 │ └── styles.xml ├── values-v26 │ ├── bools.xml │ └── styles.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 │ ├── attrs.xml │ ├── bools.xml │ ├── colors.xml │ ├── config.xml │ ├── dimens.xml │ ├── drawables.xml │ ├── strings.xml │ └── styles.xml └── xml │ ├── backupscheme.xml │ ├── default_workspace_3x3.xml │ ├── default_workspace_4x4.xml │ ├── default_workspace_5x5.xml │ ├── default_workspace_5x6.xml │ ├── device_profiles.xml │ ├── dw_phone_hotseat.xml │ ├── dw_tablet_hotseat.xml │ └── launcher_preferences.xml ├── src └── 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 │ ├── DeepShortcutTextView.java │ ├── DeepShortcutView.java │ ├── ShortcutCache.java │ ├── ShortcutDragPreviewProvider.java │ ├── ShortcutInfoCompat.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 ├── 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/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/MODULE_LICENSE_APACHE2 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Launcher3 2 | 3 | ​ 本工程旨在创建一个可以在Android Studio中编译、调试的Launcher3工程。如果有其他Android App有同样的需求,可做参考。 4 | 5 | 由于Launcher3使用了一些私有的API,比如`android.app.WallpaperColors`,这些导致Android Studio使用标准的sdk编译不过。 6 | 7 | ## 1. 获取framework.jar 8 | `framework.jar`可通过编译android官方的aosp工程获得,编译时间较长。生成的路径为: 9 | 10 | ```java 11 | out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 12 | ``` 13 | 14 | 如果不知道如何编译android源码,可参考[Google官方构建编译环境指南](https://source.android.com/source/initializing),当然如果不敢兴趣,可使用我上传的`freeme-framework.jar`. 15 | 16 | ## 2. 放置framework.jar 17 | 新建`libs`目录,在本文我重命名为 `freeme-framework.jar`并放在此`libs`目录。 18 | 19 | ## 3. 修改build.gradle 20 | 21 | ```groovy 22 | dependencies { 23 | //provided是指这个库仅仅在编译时使用,但最终不会被编译到apk或aar里 24 | provided files('libs/freeme-framework.jar') 25 | 26 | ... 27 | } 28 | 29 | //添加此处配置,意在调整编译时优先加载freeme-framework.jar,这样才能让使用某个公共类中的私有api不会报错 30 | //-Xbootclasspath/p是java编址的优先寻址设置 31 | //"Xbootclasspath/p"后接的路径,是相对于当前Project的根目录的相对路径 32 | gradle.projectsEvaluated { 33 | tasks.withType(JavaCompile) { 34 | options.compilerArgs << '-Xbootclasspath/p:libs/freeme-framework.jar' 35 | } 36 | } 37 | ``` 38 | 39 | ## 最后,就可以顺利运行了 40 | 41 | -------------------------------------------------------------------------------- /go/res/drawable/ic_widget.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 25 | 26 | -------------------------------------------------------------------------------- /go/res/values-af/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Raak en hou om \'n kortpad op te tel." 23 | "Dubbeltik en hou om \'n kortpad op te tel of gebruik gepasmaakte handelinge." 24 | "Kortpaaie" 25 | "%1$s-kortpaaie" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-am/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "አንድ አቋራጭ ለመውሰድ ነክተው ይያዙ" 23 | "አንድ አቋራጭ ለመውሰድ ወይም ብጁ እርምጃዎችን ለመጠቀም ሁለቴ መታ አድርገው ይያዙ።" 24 | "አቋራጮች" 25 | "%1$s አቋራጮች" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-ar/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "المس مع الاستمرار لاختيار اختصار." 23 | "يمكنك النقر نقرًا مزدوجًا مع الاستمرار لاختيار اختصار أو استخدام الإجراءات المخصصة." 24 | "الاختصارات" 25 | "اختصارات %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-az-rAZ/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Qısayolu seçmək üçün toxunub saxlayın." 23 | "Qısayolu seçmək üçün iki dəfə basıb saxlayın və ya fərdi əməliyyatlardan istifadə edin." 24 | "Qısayollar" 25 | "%1$s qısayolları" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-az/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Qısayolu seçmək üçün toxunub saxlayın." 23 | "Qısayolu seçmək üçün iki dəfə basıb saxlayın və ya fərdi əməliyyatlardan istifadə edin." 24 | "Qısayollar" 25 | "%1$s qısayolları" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-b+sr+Latn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Dodirnite i zadržite da biste izabrali prečicu." 23 | "Dvaput dodirnite i zadržite da biste izabrali prečicu ili koristite prilagođene radnje." 24 | "Prečice" 25 | "Prečice za %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-be/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Дакраніцеся і ўтрымлiвайце ярлык, каб дадаць яго." 23 | "Дакраніцеся двойчы і ўтрымлівайце, каб выбраць ярлык або выкарыстоўваць спецыяльныя дзеянні." 24 | "Ярлыкі" 25 | "Ярлыкі %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-bn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "কোনও শর্টকাট বেছে নিতে টাচ করে ধরে রাখুন।" 23 | "কোনও শর্টকাট বেছে নিতে ডাবল ট্যাপ করে ধরে রাখুন অথবা কাস্টম ক্রিয়াগুলি ব্যবহার করুন।" 24 | "শর্টকাট" 25 | "%1$s এর শর্টকাট" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-bs-rBA/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Dodirnite i držite da uzmete prečicu." 23 | "Dvaput dodirnite i držite da uzmete prečicu ili koristite prilagođene akcije." 24 | "Prečice" 25 | "Prečice aplikacije %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-bs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Dodirnite i držite da uzmete prečicu." 23 | "Dvaput dodirnite i držite da uzmete prečicu ili koristite prilagođene akcije." 24 | "Prečice" 25 | "Prečice aplikacije %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-cs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Zkratku vyberete podržením." 23 | "Dvojitým klepnutím a podržením vyberte zkratku, případně použijte vlastní akce." 24 | "Zkratky" 25 | "Zkratky aplikace %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-da/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Hold en genvej nede for at samle den op." 23 | "Tryk to gange, og hold en genvej nede for at samle den op og bruge tilpassede handlinger." 24 | "Genveje" 25 | "%1$s-genveje" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-en-rAU/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Touch & hold to pick up a shortcut." 23 | "Double-tap & hold to pick up a shortcut or use custom actions." 24 | "Shortcuts" 25 | "%1$s shortcuts" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-en-rGB/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Touch & hold to pick up a shortcut." 23 | "Double-tap & hold to pick up a shortcut or use custom actions." 24 | "Shortcuts" 25 | "%1$s shortcuts" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-en-rIN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Touch & hold to pick up a shortcut." 23 | "Double-tap & hold to pick up a shortcut or use custom actions." 24 | "Shortcuts" 25 | "%1$s shortcuts" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-et/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Otsetee valimiseks puudutage seda pikalt." 23 | "Topeltpuudutage ja hoidke otsetee valimiseks või kohandatud toimingute kasutamiseks." 24 | "Otseteed" 25 | "Rakenduse %1$s otseteed" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-fa/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "برای انتخاب یک میان‌بر، لمس کنید و نگه‌دارید." 23 | "برای انتخاب یک میان‌بر، دو ضربه سریع بزنید و نگه‌دارید یا از اقدام‌های سفارشی استفاده کنید." 24 | "میان‌برها" 25 | "میان‌برهای %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-gu/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "એક શૉર્ટકટ ચૂંટવા ટૅપ કરી રાખો." 23 | "એક શૉર્ટકટ ચૂંટવા અથવા કોઈ કસ્ટમ ક્રિયાઓનો ઉપયોગ કરવા માટે બે વાર ટૅપ કરી રાખો." 24 | "શૉર્ટકટ" 25 | "%1$s શૉર્ટકટ" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-hi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "शॉर्टकट चुनने के लिए छूकर रखें." 23 | "शॉर्टकट चुनने के लिए डबल टैप करके रखें या कस्टम कार्रवाइयों का उपयोग करें." 24 | "शॉर्टकट" 25 | "%1$s शॉर्टकट" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-in/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Tap lama untuk memilih pintasan." 23 | "Tap dua kali & tahan untuk memilih pintasan atau menggunakan tindakan khusus." 24 | "Pintasan" 25 | "Pintasan %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-is/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Haltu fingri á flýtileið til að grípa hana." 23 | "Ýttu tvisvar og haltu fingri á flýtileið til að grípa hana eða notaðu sérsniðnar aðgerðir." 24 | "Flýtileiðir" 25 | "%1$s flýtileiðir" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "ショートカットを追加するには押し続けます。" 23 | "ダブルタップ後に押し続けてショートカットを選択するか、カスタム操作を使用してください。" 24 | "ショートカット" 25 | "「%1$s」のショートカット" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-ka/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "შეეხეთ და დააყოვნეთ მალსახმობის ასარჩევად." 23 | "ორმაგად შეეხეთ და გეჭიროთ მალსახმობის ასარჩევად ან მორგებული მოქმედებების გამოსაყენებლად." 24 | "მალსახმობები" 25 | "%1$s-ის მალსახმობები" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-kk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Таңбашаны таңдау үшін оны түртіп, ұстап тұрыңыз." 23 | "Таңбашаны таңдау немесе арнаулы әрекеттерді пайдалану үшін екі рет түртіп, ұстап тұрыңыз." 24 | "Таңбашалар" 25 | "%1$s таңбаша" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-km/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-ky/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Кыска жолду тандоо үчүн басып туруңуз." 23 | "Кыска жолду тандоо үчүн эки жолу таптап, кармап туруңуз же ыңгайлаштырылган аракеттерди колдонуңуз." 24 | "Кыска жолдор" 25 | "%1$s кыска жол" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-lo-rLA/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "ແຕະຄ້າງໄວ້ເພື່ອຮັບປຸ່ມລັດ." 23 | "ແຕະສອງເທື່ອຄ້າງໄວ້ເພື່ອຮັບປຸ່ມລັດ ຫຼື ໃຊ້ຄຳສັ່ງແບບກຳນົດເອງ." 24 | "ປຸ່ມລັດ" 25 | "ປຸ່ມລັດ %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-lo/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "ແຕະຄ້າງໄວ້ເພື່ອຮັບປຸ່ມລັດ." 23 | "ແຕະສອງເທື່ອຄ້າງໄວ້ເພື່ອຮັບປຸ່ມລັດ ຫຼື ໃຊ້ຄຳສັ່ງແບບກຳນົດເອງ." 24 | "ປຸ່ມລັດ" 25 | "ປຸ່ມລັດ %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-mk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Допрете двапати и задржете за да изберете кратенка." 23 | "Допрете двапати и задржете за да изберете кратенка или да користите приспособени дејства." 24 | "Кратенки" 25 | "Кратенки за %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-mn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Товчлол авах бол удаан дарна уу." 23 | "Товчлол авах болон тохируулсан үйлдлийг ашиглахын тулд хоёр товшоод хүлээнэ үү." 24 | "Товчлол" 25 | "%1$s-н товчлол" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-mr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "शॉर्टकट निवडण्यासाठी स्पर्श करा आणि धरून ठेवा." 23 | "शॉर्टकट निवडण्यासाठी किंवा कस्टम क्रिया वापरण्यासाठी दोनदा टॅप करा आणि धरून ठेवा." 24 | "शॉर्टकट" 25 | "%1$s शॉर्टकट" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-ms/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Sentuh & tahan untuk mengambil pintasan." 23 | "Ketik dua kali & tahan untuk mengambil pintasan atau menggunakan tindakan tersuai." 24 | "Pintasan" 25 | "Pintasan %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-nb/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Trykk og hold for å velge en snarvei." 23 | "Dobbelttrykk og hold for å velge en snarvei eller bruke tilpassede handlinger." 24 | "Snarveier" 25 | "%1$s-snarveier" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-ne/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "कुनै सटकर्ट छनौट गर्न छोइराख्नुहोस्।" 23 | "कुनै सर्टकट छनौट गर्न दुईपटक ट्याप गरेर होल्ड गर्नुहोस् वा रोजेका कारबाहीहरू प्रयोग गर्नुहोस्।" 24 | "सर्टकटहरू" 25 | "%1$s सर्टकटहरू" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-pa/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "ਕੋਈ ਸ਼ਾਰਟਕੱਟ ਚੁਣਨ ਲਈ ਸਪੱਰਸ਼ ਕਰੋ ਅਤੇ ਦਬਾ ਕੇ ਰੱਖੋ।" 23 | "ਕੋਈ ਸ਼ਾਰਟਕੱਟ ਚੁਣਨ ਲਈ ਡਬਲ-ਟੈਪ ਕਰੋ ਅਤੇ ਦਬਾ ਕੇ ਰੱਖੋ ਜਾਂ ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕਾਰਵਾਈਆਂ ਵਰਤੋ।" 24 | "ਸ਼ਾਰਟਕੱਟ" 25 | "%1$s ਸ਼ਾਰਟਕੱਟ" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-pl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Kliknij i przytrzymaj, by wybrać skrót." 23 | "Kliknij dwukrotnie i przytrzymaj, by wybrać skrót lub użyć działań niestandardowych." 24 | "Skróty" 25 | "%1$s – skróty" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-pt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Toque e segure para selecionar um atalho." 23 | "Toque duas vezes na tela e segure para selecionar um atalho ou usar ações personalizadas." 24 | "Atalhos" 25 | "Atalhos do app %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-si-rLK/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "කෙටි මගක් තෝරා ගැනීමට ස්පර්ශ කර අල්ලාගෙන සිටින්න." 23 | "විජට් එකක් තෝරා ගැනීමට හෝ අභිරුචි භාවිත කිරීමට දෙවරක් තට්ටු කර අල්ලා ගෙන සිටින්න." 24 | "කෙටි මං" 25 | "කෙටි මං %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-si/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "කෙටි මගක් තෝරා ගැනීමට ස්පර්ශ කර අල්ලාගෙන සිටින්න." 23 | "විජට් එකක් තෝරා ගැනීමට හෝ අභිරුචි භාවිත කිරීමට දෙවරක් තට්ටු කර අල්ලා ගෙන සිටින්න." 24 | "කෙටි මං" 25 | "කෙටි මං %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-sk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Skratku pridáte pridržaním." 23 | "Skratku pridáte dvojitým klepnutím a pridržaním alebo pomocou vlastných akcií." 24 | "Skratky" 25 | "Skratky aplikácie %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-sl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Pridržite bližnjico, da jo izberete." 23 | "Dvakrat se dotaknite bližnjice in jo pridržite, da jo izberete, ali pa uporabite dejanja po meri." 24 | "Bližnjice" 25 | "Bližnjice za %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-sr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Додирните и задржите да бисте изабрали пречицу." 23 | "Двапут додирните и задржите да бисте изабрали пречицу или користите прилагођене радње." 24 | "Пречице" 25 | "Пречице за %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-sw/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Gusa na ushikilie ili uchague njia ya mkato." 23 | "Gonga mara mbili na ushikilie ile uchague njia ya mkato au utumie vitendo maalum." 24 | "Njia za mkato" 25 | "Njia za mkato za %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-th/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "แตะค้างไว้เพื่อเลือกทางลัด" 23 | "แตะสองครั้งค้างไว้เพื่อเลือกทางลัดหรือใช้การกระทำที่กำหนดเอง" 24 | "ทางลัด" 25 | "ทางลัด %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-tr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Kısayol seçmek için dokunun ve basılı tutun." 23 | "Bir kısayolu seçmek veya özel işlemleri kullanmak için iki kez dokunun ve basılı tutun." 24 | "Kısayollar" 25 | "%1$s kısayolları" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-uk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Натисніть і утримуйте, щоб вибрати ярлик." 23 | "Двічі натисніть і утримуйте, щоб вибрати ярлик, або виконайте іншу дію." 24 | "Ярлики" 25 | "Ярлики додатка %1$s" 26 | 27 | -------------------------------------------------------------------------------- /go/res/values-v26/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | false 21 | -------------------------------------------------------------------------------- /go/res/values-vi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | "Chạm và giữ để chọn lối tắt." 23 | "Nhấn đúp và giữ để chọn lối tắt hoặc sử dụng hành động tùy chỉnh." 24 | "Lối tắt" 25 | "Lối tắt %1$s" 26 | 27 | -------------------------------------------------------------------------------- /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/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 60dp 20 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /go/src_flags/com/android/launcher3/config/FeatureFlags.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.config; 18 | 19 | /** 20 | * Defines a set of flags used to control various launcher behaviors 21 | */ 22 | public final class FeatureFlags extends BaseFlags { 23 | 24 | private FeatureFlags() {} 25 | 26 | // Features to control Launcher3Go behavior 27 | public static final boolean GO_DISABLE_WIDGETS = true; 28 | public static final boolean LAUNCHER3_SPRING_ICONS = false; 29 | } 30 | -------------------------------------------------------------------------------- /libs/freeme-framework.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/libs/freeme-framework.jar -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /res/anim/no_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 19 | -------------------------------------------------------------------------------- /res/animator/overview_button_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 25 | 26 | 27 | 28 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /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/drawable-hdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-hdpi/ic_allapps.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-hdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-hdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-hdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-hdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-hdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-hdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-hdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-mdpi/ic_allapps.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-mdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-mdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-mdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-mdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-mdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-mdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-mdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /res/drawable-v24/ic_info_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | -------------------------------------------------------------------------------- /res/drawable-v24/ic_remove_shadow.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xhdpi/ic_allapps.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xhdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xhdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xhdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xhdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxhdpi/ic_allapps.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxhdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxhdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxhdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxhdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-xxhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi/ic_widget_resize_handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxxhdpi/ic_widget_resize_handle.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi/widget_resize_frame.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxxhdpi/widget_resize_frame.9.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi/widget_resize_shadow.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxxhdpi/widget_resize_shadow.9.png -------------------------------------------------------------------------------- /res/drawable-xxxhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/drawable-xxxhdpi/workspace_bg.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_celllayout.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /res/drawable/deep_shortcuts_drag_handle.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 23 | 24 | 28 | -------------------------------------------------------------------------------- /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_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/ic_widget.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 26 | 27 | -------------------------------------------------------------------------------- /res/drawable/pending_widget_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 20 | -------------------------------------------------------------------------------- /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/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/all_apps_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 28 | 29 | -------------------------------------------------------------------------------- /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_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 23 | 30 | 31 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /res/layout/notification_pref_warning.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 24 | -------------------------------------------------------------------------------- /res/layout/page_indicator.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 22 | 28 | 29 | -------------------------------------------------------------------------------- /res/layout/popup_container.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 28 | 29 | -------------------------------------------------------------------------------- /res/layout/search_container_workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 24 | 25 | 30 | -------------------------------------------------------------------------------- /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_dummy_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 22 | 23 | 28 | 29 | 34 | 35 | -------------------------------------------------------------------------------- /res/layout/zzz_weight_watcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /res/mipmap-hdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/mipmap-hdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /res/mipmap-hdpi/ic_launcher_home_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/mipmap-hdpi/ic_launcher_home_foreground.png -------------------------------------------------------------------------------- /res/mipmap-mdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/mipmap-mdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /res/mipmap-mdpi/ic_launcher_home_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/mipmap-mdpi/ic_launcher_home_foreground.png -------------------------------------------------------------------------------- /res/mipmap-xhdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/mipmap-xhdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /res/mipmap-xhdpi/ic_launcher_home_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/mipmap-xhdpi/ic_launcher_home_foreground.png -------------------------------------------------------------------------------- /res/mipmap-xxhdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/mipmap-xxhdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /res/mipmap-xxhdpi/ic_launcher_home_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GregGe/Launcher3/23c948db6164cba7a58daf1286585fbae5f7767f/res/mipmap-xxhdpi/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-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/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-v19/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 25 | 26 | -------------------------------------------------------------------------------- /res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 28 | 29 | -------------------------------------------------------------------------------- /res/values-v26/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | true 21 | 22 | false 23 | -------------------------------------------------------------------------------- /res/values-v26/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 24 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /res/values/bools.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | false 21 | 22 | true 23 | -------------------------------------------------------------------------------- /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/xml/backupscheme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 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 | 6 | public class AppFilter { 7 | 8 | public static AppFilter newInstance(Context context) { 9 | return Utilities.getOverrideObject(AppFilter.class, context, R.string.app_filter_class); 10 | } 11 | 12 | public boolean shouldShowApp(ComponentName app) { 13 | return true; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /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/ItemInfoWithIcon.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 | import android.graphics.Bitmap; 20 | 21 | /** 22 | * Represents an ItemInfo which also holds an icon. 23 | */ 24 | public abstract class ItemInfoWithIcon extends ItemInfo { 25 | 26 | /** 27 | * A bitmap version of the application icon. 28 | */ 29 | public Bitmap iconBitmap; 30 | 31 | /** 32 | * Indicates whether we're using a low res icon 33 | */ 34 | public boolean usingLowResIcon; 35 | 36 | protected ItemInfoWithIcon() { } 37 | 38 | protected ItemInfoWithIcon(ItemInfoWithIcon info) { 39 | super(info); 40 | iconBitmap = info.iconBitmap; 41 | usingLowResIcon = info.usingLowResIcon; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /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/LauncherFiles.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3; 2 | 3 | import java.util.Arrays; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | /** 8 | * Central list of files the Launcher writes to the application data directory. 9 | * 10 | * To add a new Launcher file, create a String constant referring to the filename, and add it to 11 | * ALL_FILES, as shown below. 12 | */ 13 | public class LauncherFiles { 14 | 15 | private static final String XML = ".xml"; 16 | 17 | public static final String LAUNCHER_DB = "launcher.db"; 18 | public static final String SHARED_PREFERENCES_KEY = "com.android.launcher3.prefs"; 19 | public static final String MANAGED_USER_PREFERENCES_KEY = "com.android.launcher3.managedusers.prefs"; 20 | // This preference file is not backed up to cloud. 21 | public static final String DEVICE_PREFERENCES_KEY = "com.android.launcher3.device.prefs"; 22 | 23 | public static final String WIDGET_PREVIEWS_DB = "widgetpreviews.db"; 24 | public static final String APP_ICONS_DB = "app_icons.db"; 25 | 26 | public static final List ALL_FILES = Collections.unmodifiableList(Arrays.asList( 27 | LAUNCHER_DB, 28 | SHARED_PREFERENCES_KEY + XML, 29 | WIDGET_PREVIEWS_DB, 30 | MANAGED_USER_PREFERENCES_KEY + XML, 31 | DEVICE_PREFERENCES_KEY + XML, 32 | APP_ICONS_DB)); 33 | } 34 | -------------------------------------------------------------------------------- /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/PendingAddItemInfo.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 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.ComponentName; 20 | 21 | /** 22 | * Meta data that is used for deferred binding. 23 | * e.g., this object is used to pass information on draggable targets when they are dropped onto 24 | * the workspace from another container. 25 | */ 26 | public class PendingAddItemInfo extends ItemInfo { 27 | 28 | /** 29 | * The component that will be created. 30 | */ 31 | public ComponentName componentName; 32 | 33 | @Override 34 | protected String dumpProperties() { 35 | return super.dumpProperties() + " componentName=" + componentName; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /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/UserManagerCompatVN.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.N) 25 | public class UserManagerCompatVN extends UserManagerCompatVM { 26 | 27 | UserManagerCompatVN(Context context) { 28 | super(context); 29 | } 30 | 31 | @Override 32 | public boolean isQuietModeEnabled(UserHandle user) { 33 | return mUserManager.isQuietModeEnabled(user); 34 | } 35 | 36 | @Override 37 | public boolean isUserUnlocked(UserHandle user) { 38 | return mUserManager.isUserUnlocked(user); 39 | } 40 | } 41 | 42 | -------------------------------------------------------------------------------- /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/model/PackageItemInfo.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 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.model; 18 | 19 | import com.android.launcher3.ItemInfoWithIcon; 20 | 21 | /** 22 | * Represents a {@link Package} in the widget tray section. 23 | */ 24 | public class PackageItemInfo extends ItemInfoWithIcon { 25 | 26 | /** 27 | * Package name of the {@link PackageItemInfo}. 28 | */ 29 | public String packageName; 30 | 31 | public PackageItemInfo(String packageName) { 32 | this.packageName = packageName; 33 | } 34 | 35 | @Override 36 | protected String dumpProperties() { 37 | return super.dumpProperties() + " packageName=" + packageName; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/com/android/launcher3/shortcuts/ShortcutKey.java: -------------------------------------------------------------------------------- 1 | package com.android.launcher3.shortcuts; 2 | 3 | import android.content.ComponentName; 4 | import android.content.Intent; 5 | import android.os.UserHandle; 6 | 7 | import com.android.launcher3.ItemInfo; 8 | import com.android.launcher3.util.ComponentKey; 9 | 10 | /** 11 | * A key that uniquely identifies a shortcut using its package, id, and user handle. 12 | */ 13 | public class ShortcutKey extends ComponentKey { 14 | 15 | public ShortcutKey(String packageName, UserHandle user, String id) { 16 | // Use the id as the class name. 17 | super(new ComponentName(packageName, id), user); 18 | } 19 | 20 | public String getId() { 21 | return componentName.getClassName(); 22 | } 23 | 24 | public static ShortcutKey fromInfo(ShortcutInfoCompat shortcutInfo) { 25 | return new ShortcutKey(shortcutInfo.getPackage(), shortcutInfo.getUserHandle(), 26 | shortcutInfo.getId()); 27 | } 28 | 29 | public static ShortcutKey fromIntent(Intent intent, UserHandle user) { 30 | String shortcutId = intent.getStringExtra( 31 | ShortcutInfoCompat.EXTRA_SHORTCUT_ID); 32 | return new ShortcutKey(intent.getPackage(), user, shortcutId); 33 | } 34 | 35 | public static ShortcutKey fromItemInfo(ItemInfo info) { 36 | return fromIntent(info.getIntent(), info.user); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /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/android/launcher3/widget/WidgetsRowViewHolder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 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.widget; 17 | 18 | import android.support.v7.widget.RecyclerView.ViewHolder; 19 | import android.view.ViewGroup; 20 | 21 | import com.android.launcher3.BubbleTextView; 22 | import com.android.launcher3.R; 23 | 24 | public class WidgetsRowViewHolder extends ViewHolder { 25 | 26 | public final ViewGroup cellContainer; 27 | public final BubbleTextView title; 28 | 29 | public WidgetsRowViewHolder(ViewGroup v) { 30 | super(v); 31 | 32 | cellContainer = (ViewGroup) v.findViewById(R.id.widgets_cell_list); 33 | title = (BubbleTextView) v.findViewById(R.id.section); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /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.android.launcher3"; 24 | } 25 | -------------------------------------------------------------------------------- /src_flags/com/android/launcher3/config/FeatureFlags.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 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.config; 18 | 19 | /** 20 | * Defines a set of flags used to control various launcher behaviors 21 | */ 22 | public final class FeatureFlags extends BaseFlags { 23 | 24 | private FeatureFlags() {} 25 | } 26 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------