diff --git a/.gitignore b/.gitignore index 7240e4877b801a63c3330705c0e4fb96083fc92d..694b40c7efce023876d06b1fa2acf46b6b960dce 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ bin/ local.properties gradle/ build/ -gradlew* \ No newline at end of file +gradlew* +.DS_Store diff --git a/Android.bp b/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..4c382059793a0ffa57a520085c0badd427e894ff --- /dev/null +++ b/Android.bp @@ -0,0 +1,32 @@ +// Copyright (C) 2018 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +android_library { + name: "launcher-aosp-tapl", + static_libs: [ + "androidx.annotation_annotation", + "androidx.test.runner", + "androidx.test.rules", + "androidx.test.uiautomator_uiautomator", + "SystemUISharedLib", + ], + srcs: [ + "tests/tapl/**/*.java", + "src/com/android/launcher3/util/SecureSettingsObserver.java", + "src/com/android/launcher3/ResourceUtils.java", + "src/com/android/launcher3/testing/TestProtocol.java", + ], + manifest: "tests/tapl/AndroidManifest.xml", + platform_apis: true, +} diff --git a/Android.mk b/Android.mk index f5ec7cd4882f4d937dc9b09ceca1036bb4e6ccf8..9d113d954791b57c067f768b7e26aeef398d4a82 100644 --- a/Android.mk +++ b/Android.mk @@ -17,16 +17,27 @@ LOCAL_PATH := $(call my-dir) # -# Prebuilt Java Libraries +# Build rule for plugin lib (needed to write a plugin). # include $(CLEAR_VARS) -LOCAL_MODULE := libSharedSystemUI +LOCAL_USE_AAPT2 := true +LOCAL_AAPT2_ONLY := true LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_CLASS := JAVA_LIBRARIES -LOCAL_SRC_FILES := quickstep/libs/sysui_shared.jar -LOCAL_UNINSTALLABLE_MODULE := true + +ifneq (,$(wildcard frameworks/base)) + LOCAL_STATIC_JAVA_LIBRARIES:= PluginCoreLib +else + LOCAL_STATIC_JAVA_LIBRARIES:= libPluginCore +endif + +LOCAL_SRC_FILES := \ + $(call all-java-files-under, src_plugins) + LOCAL_SDK_VERSION := current -include $(BUILD_PREBUILT) +LOCAL_MIN_SDK_VERSION := 28 +LOCAL_MODULE := LauncherPluginLib + +include $(BUILD_STATIC_JAVA_LIBRARY) # # Build rule for Launcher3 dependencies lib. @@ -37,13 +48,17 @@ LOCAL_AAPT2_ONLY := true LOCAL_MODULE_TAGS := optional LOCAL_STATIC_ANDROID_LIBRARIES := \ - android-support-v4 \ - android-support-v7-recyclerview \ - android-support-dynamic-animation + androidx.recyclerview_recyclerview \ + androidx.dynamicanimation_dynamicanimation \ + androidx.preference_preference \ + iconloader_base + +LOCAL_STATIC_JAVA_LIBRARIES := LauncherPluginLib LOCAL_SRC_FILES := \ $(call all-proto-files-under, protos) \ - $(call all-proto-files-under, proto_overrides) + $(call all-proto-files-under, proto_overrides) \ + $(call all-java-files-under, src_build_config) \ LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res @@ -68,18 +83,24 @@ include $(CLEAR_VARS) LOCAL_USE_AAPT2 := true LOCAL_MODULE_TAGS := optional -LOCAL_STATIC_ANDROID_LIBRARIES := Launcher3CommonDepsLib +LOCAL_STATIC_ANDROID_LIBRARIES := \ + Launcher3CommonDepsLib \ + SecondaryDisplayLauncherLib LOCAL_SRC_FILES := \ $(call all-java-files-under, src) \ + $(call all-java-files-under, src_shortcuts_overrides) \ $(call all-java-files-under, src_ui_overrides) \ $(call all-java-files-under, src_flags) LOCAL_PROGUARD_FLAG_FILES := proguard.flags +# Proguard is disable for testing. Derivarive prjects to keep proguard enabled +LOCAL_PROGUARD_ENABLED := disabled LOCAL_SDK_VERSION := current LOCAL_MIN_SDK_VERSION := 21 LOCAL_PACKAGE_NAME := Launcher3 LOCAL_PRIVILEGED_MODULE := true +LOCAL_PRODUCT_MODULE := true LOCAL_OVERRIDES_PACKAGES := Home Launcher2 LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.launcher3 @@ -100,7 +121,7 @@ LOCAL_STATIC_ANDROID_LIBRARIES := Launcher3CommonDepsLib LOCAL_SRC_FILES := \ $(call all-java-files-under, src) \ $(call all-java-files-under, src_ui_overrides) \ - $(call all-java-files-under, go/src_flags) + $(call all-java-files-under, go/src) LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/go/res @@ -110,6 +131,7 @@ LOCAL_SDK_VERSION := current LOCAL_MIN_SDK_VERSION := 21 LOCAL_PACKAGE_NAME := Launcher3Go LOCAL_PRIVILEGED_MODULE := true +LOCAL_PRODUCT_MODULE := true LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 Launcher3QuickStep LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.launcher3 @@ -129,21 +151,32 @@ LOCAL_USE_AAPT2 := true LOCAL_AAPT2_ONLY := true LOCAL_MODULE_TAGS := optional -LOCAL_STATIC_JAVA_LIBRARIES := libSharedSystemUI -LOCAL_STATIC_ANDROID_LIBRARIES := Launcher3CommonDepsLib +ifneq (,$(wildcard frameworks/base)) + LOCAL_STATIC_JAVA_LIBRARIES := SystemUISharedLib launcherprotosnano + LOCAL_PRIVATE_PLATFORM_APIS := true +else + LOCAL_STATIC_JAVA_LIBRARIES := libSharedSystemUI libLauncherProtos + LOCAL_SDK_VERSION := system_current + LOCAL_MIN_SDK_VERSION := 26 +endif +LOCAL_MODULE := Launcher3QuickStepLib +LOCAL_PRIVILEGED_MODULE := true +LOCAL_STATIC_ANDROID_LIBRARIES := \ + Launcher3CommonDepsLib \ + SecondaryDisplayLauncherLib LOCAL_SRC_FILES := \ $(call all-java-files-under, src) \ $(call all-java-files-under, quickstep/src) \ - $(call all-java-files-under, src_flags) + $(call all-java-files-under, quickstep/recents_ui_overrides/src) \ + $(call all-java-files-under, src_flags) \ + $(call all-java-files-under, src_shortcuts_overrides) -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/quickstep/res +LOCAL_RESOURCE_DIR := \ + $(LOCAL_PATH)/quickstep/res \ + $(LOCAL_PATH)/quickstep/recents_ui_overrides/res LOCAL_PROGUARD_ENABLED := disabled -LOCAL_SDK_VERSION := system_current -LOCAL_MIN_SDK_VERSION := 26 -LOCAL_MODULE := Launcher3QuickStepLib -LOCAL_PRIVILEGED_MODULE := true LOCAL_MANIFEST_FILE := quickstep/AndroidManifest.xml include $(BUILD_STATIC_JAVA_LIBRARY) @@ -158,15 +191,21 @@ LOCAL_MODULE_TAGS := optional LOCAL_STATIC_ANDROID_LIBRARIES := Launcher3QuickStepLib LOCAL_PROGUARD_ENABLED := disabled -LOCAL_SDK_VERSION := system_current -LOCAL_MIN_SDK_VERSION := 26 +ifneq (,$(wildcard frameworks/base)) + LOCAL_PRIVATE_PLATFORM_APIS := true +else + LOCAL_SDK_VERSION := system_current + LOCAL_MIN_SDK_VERSION := 26 +endif LOCAL_PACKAGE_NAME := Launcher3QuickStep LOCAL_PRIVILEGED_MODULE := true LOCAL_PRODUCT_MODULE := true LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.launcher3 -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/quickstep/res +LOCAL_RESOURCE_DIR := \ + $(LOCAL_PATH)/quickstep/res \ + $(LOCAL_PATH)/quickstep/recents_ui_overrides/res LOCAL_FULL_LIBS_MANIFEST_FILES := \ $(LOCAL_PATH)/AndroidManifest.xml \ @@ -185,25 +224,81 @@ include $(CLEAR_VARS) LOCAL_USE_AAPT2 := true LOCAL_MODULE_TAGS := optional -LOCAL_STATIC_JAVA_LIBRARIES := libSharedSystemUI +ifneq (,$(wildcard frameworks/base)) + LOCAL_STATIC_JAVA_LIBRARIES := SystemUISharedLib launcherprotosnano + LOCAL_PRIVATE_PLATFORM_APIS := true +else + LOCAL_STATIC_JAVA_LIBRARIES := libSharedSystemUI libLauncherProtos + LOCAL_SDK_VERSION := system_current + LOCAL_MIN_SDK_VERSION := 26 +endif LOCAL_STATIC_ANDROID_LIBRARIES := Launcher3CommonDepsLib LOCAL_SRC_FILES := \ $(call all-java-files-under, src) \ $(call all-java-files-under, quickstep/src) \ - $(call all-java-files-under, go/src_flags) + $(call all-java-files-under, quickstep/recents_ui_overrides/src) \ + $(call all-java-files-under, go/src) LOCAL_RESOURCE_DIR := \ $(LOCAL_PATH)/quickstep/res \ + $(LOCAL_PATH)/quickstep/recents_ui_overrides/res \ $(LOCAL_PATH)/go/res -LOCAL_PROGUARD_ENABLED := disabled +LOCAL_PROGUARD_FLAG_FILES := proguard.flags +LOCAL_PROGUARD_ENABLED := full -LOCAL_SDK_VERSION := system_current -LOCAL_MIN_SDK_VERSION := 26 LOCAL_PACKAGE_NAME := Launcher3QuickStepGo LOCAL_PRIVILEGED_MODULE := true -LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 Launcher3QuickStep +LOCAL_PRODUCT_MODULE := true +LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 Launcher3QuickStep Launcher3GoIconRecents +LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.launcher3 + +LOCAL_FULL_LIBS_MANIFEST_FILES := \ + $(LOCAL_PATH)/go/AndroidManifest.xml \ + $(LOCAL_PATH)/AndroidManifest.xml \ + $(LOCAL_PATH)/AndroidManifest-common.xml + +LOCAL_MANIFEST_FILE := quickstep/AndroidManifest.xml +LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.* +include $(BUILD_PACKAGE) + +# +# Build rule for Launcher3 Go app with quickstep and Go-specific +# version of recents for Android Go devices. +# +include $(CLEAR_VARS) +LOCAL_USE_AAPT2 := true +LOCAL_MODULE_TAGS := optional + +ifneq (,$(wildcard frameworks/base)) + LOCAL_STATIC_JAVA_LIBRARIES := SystemUISharedLib launcherprotosnano + LOCAL_PRIVATE_PLATFORM_APIS := true +else + LOCAL_STATIC_JAVA_LIBRARIES := libSharedSystemUI libLauncherProtos + LOCAL_SDK_VERSION := system_current + LOCAL_MIN_SDK_VERSION := 26 +endif +LOCAL_STATIC_ANDROID_LIBRARIES := Launcher3CommonDepsLib + +LOCAL_SRC_FILES := \ + $(call all-java-files-under, src) \ + $(call all-java-files-under, quickstep/src) \ + $(call all-java-files-under, go/src) \ + $(call all-java-files-under, go/quickstep/src) + +LOCAL_RESOURCE_DIR := \ + $(LOCAL_PATH)/quickstep/res \ + $(LOCAL_PATH)/go/res \ + $(LOCAL_PATH)/go/quickstep/res + +LOCAL_PROGUARD_FLAG_FILES := proguard.flags +LOCAL_PROGUARD_ENABLED := full + +LOCAL_PACKAGE_NAME := Launcher3GoIconRecents +LOCAL_PRIVILEGED_MODULE := true +LOCAL_PRODUCT_MODULE := true +LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 Launcher3Go Launcher3QuickStep LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.launcher3 LOCAL_FULL_LIBS_MANIFEST_FILES := \ diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml index 211e1ff37fb93f90d8b4c7b39805316948a3cd15..5318a12eddb1bd58a51c319283055d888cb479d6 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml @@ -44,6 +44,28 @@ + + + + + + + + @@ -100,7 +122,7 @@ android:value="true" /> @@ -118,5 +140,48 @@ android:name="com.android.launcher3.launcher_dump_provider" android:value="com.android.launcher3.LauncherProvider" /> + + + + + + + + + + + + + + + diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 3212980a0549c49296514fd98f3234caacee4755..b031ffbee4235167152e6b63b74070f7a4a1b305 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -20,35 +20,12 @@ - + - - - - - - - - - + - - - - - - - - - - - diff --git a/OWNERS b/OWNERS index a8c84eb2d76c61acee56f49da8765bdfb953a89b..6c1273f56bb95b69e1acf41a43761ee1a662eb19 100644 --- a/OWNERS +++ b/OWNERS @@ -1,4 +1,12 @@ +# Use this reviewer by default. +# gnl-eng@google.com (Googlers only) + +# People who can approve changes for submission +# + adamcohen@google.com hyunyoungs@google.com +mrcasey@google.com sunnygoyal@google.com +twickham@google.com winsonc@google.com diff --git a/SecondaryDisplayLauncher/Android.mk b/SecondaryDisplayLauncher/Android.mk new file mode 100644 index 0000000000000000000000000000000000000000..7f305bba5759ff91ebe1e61b9a362042002c60ad --- /dev/null +++ b/SecondaryDisplayLauncher/Android.mk @@ -0,0 +1,39 @@ +# +# Copyright (C) 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_USE_AAPT2 := true +LOCAL_AAPT2_ONLY := true +LOCAL_MODULE_TAGS := optional + +LOCAL_STATIC_ANDROID_LIBRARIES := com.google.android.material_material + +LOCAL_STATIC_JAVA_LIBRARIES := LauncherPluginLib + +LOCAL_SRC_FILES := $(call all-java-files-under, src) + +LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res + +LOCAL_PROGUARD_ENABLED := disabled + +LOCAL_SDK_VERSION := current +LOCAL_MIN_SDK_VERSION := 21 +LOCAL_MODULE := SecondaryDisplayLauncherLib +LOCAL_PRIVILEGED_MODULE := true + +include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/SecondaryDisplayLauncher/AndroidManifest.xml b/SecondaryDisplayLauncher/AndroidManifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..ebf6b02cb85ca58ef54e8f101a6fd63afc22854d --- /dev/null +++ b/SecondaryDisplayLauncher/AndroidManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + diff --git a/SecondaryDisplayLauncher/res/drawable/ic_apps.xml b/SecondaryDisplayLauncher/res/drawable/ic_apps.xml new file mode 100644 index 0000000000000000000000000000000000000000..db779c2d12e11c79cf177ce4e86c60999e3e3822 --- /dev/null +++ b/SecondaryDisplayLauncher/res/drawable/ic_apps.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/SecondaryDisplayLauncher/res/drawable/ic_settings.xml b/SecondaryDisplayLauncher/res/drawable/ic_settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c269c3bafc5d46bc9408c6568fc94497f3fedb5d --- /dev/null +++ b/SecondaryDisplayLauncher/res/drawable/ic_settings.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml b/SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml new file mode 100644 index 0000000000000000000000000000000000000000..46f1674e4727a19790e7a92e818d9653f77d081b --- /dev/null +++ b/SecondaryDisplayLauncher/res/layout-sw600dp/secondary_display_launcher.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + diff --git a/SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml b/SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml new file mode 100644 index 0000000000000000000000000000000000000000..6653a779684d1bc869c725162ad857addd54b3fe --- /dev/null +++ b/SecondaryDisplayLauncher/res/layout-sw720dp/secondary_display_launcher.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + diff --git a/SecondaryDisplayLauncher/res/layout/app_grid_item.xml b/SecondaryDisplayLauncher/res/layout/app_grid_item.xml new file mode 100644 index 0000000000000000000000000000000000000000..ee5158ad323556424863a9056d8e4509cfa6cd28 --- /dev/null +++ b/SecondaryDisplayLauncher/res/layout/app_grid_item.xml @@ -0,0 +1,35 @@ + + + + + + + + + diff --git a/SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml b/SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml new file mode 100644 index 0000000000000000000000000000000000000000..563a1afa78724775847ba306066befec2fcf96a6 --- /dev/null +++ b/SecondaryDisplayLauncher/res/layout/app_picker_dialog.xml @@ -0,0 +1,34 @@ + + + + + + + diff --git a/SecondaryDisplayLauncher/res/layout/app_picker_layout.xml b/SecondaryDisplayLauncher/res/layout/app_picker_layout.xml new file mode 100644 index 0000000000000000000000000000000000000000..20f85b16a6bb2950f89c20ac5afdd9260c585ac4 --- /dev/null +++ b/SecondaryDisplayLauncher/res/layout/app_picker_layout.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + diff --git a/SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml b/SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml new file mode 100644 index 0000000000000000000000000000000000000000..49cd499a50f11d7d3259934d0cfe3bf189993e71 --- /dev/null +++ b/SecondaryDisplayLauncher/res/layout/secondary_display_launcher.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + diff --git a/SecondaryDisplayLauncher/res/menu/context_menu.xml b/SecondaryDisplayLauncher/res/menu/context_menu.xml new file mode 100644 index 0000000000000000000000000000000000000000..626384229e2aa6e8a66ff3e9ebe0414169a887fd --- /dev/null +++ b/SecondaryDisplayLauncher/res/menu/context_menu.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/go/res/values-zh-rHK/strings.xml b/SecondaryDisplayLauncher/res/values-af/strings.xml similarity index 58% rename from go/res/values-zh-rHK/strings.xml rename to SecondaryDisplayLauncher/res/values-af/strings.xml index dea7749f68149f0c57a5a1b9b1bf1ad6545973d2..b544be7a3d4b15d29f52eb580c353e2b4c686c0f 100644 --- a/go/res/values-zh-rHK/strings.xml +++ b/SecondaryDisplayLauncher/res/values-af/strings.xml @@ -1,7 +1,7 @@ + + + "Fəaliyyəti başlatmaq mümkün olmadı" + "Tətbiq qısayolu əlavə edin" + "Divar kağızı ayarlayın" + diff --git a/SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml b/SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a8859d9ff8ed0956580613007b7596d2931ebb01 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,25 @@ + + + + + "Pokretanje aktivnosti nije uspelo" + "Dodaj prečicu za aplikaciju" + "Podesite pozadinu" + diff --git a/SecondaryDisplayLauncher/res/values-be/strings.xml b/SecondaryDisplayLauncher/res/values-be/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3df3760378d8326abde947f6edc2e0521dc5e0ef --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-be/strings.xml @@ -0,0 +1,25 @@ + + + + + "Не ўдалося запусціць дзеянне" + "Дадаць ярлык праграмы" + "Устанавіць шпалеры" + diff --git a/SecondaryDisplayLauncher/res/values-bg/strings.xml b/SecondaryDisplayLauncher/res/values-bg/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4474815bde3aa2159985aff7b800824e3c8137e4 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-bg/strings.xml @@ -0,0 +1,25 @@ + + + + + "Активността не можа да бъде стартирана" + "Добавяне на пряк път към приложението" + "Задаване на тапет" + diff --git a/SecondaryDisplayLauncher/res/values-bn/strings.xml b/SecondaryDisplayLauncher/res/values-bn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..732269170919f2a45c9df89760505665dcf2f9ab --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-bn/strings.xml @@ -0,0 +1,25 @@ + + + + + "অ্যাক্টিভিটি চালু করা যায়নি" + "অ্যাপ শর্টকাট যোগ করুন" + "ওয়ালপেপার সেট করুন" + diff --git a/SecondaryDisplayLauncher/res/values-bs/strings.xml b/SecondaryDisplayLauncher/res/values-bs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1e59d334ab2ed6dfa6421d19e081935038c9a25d --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-bs/strings.xml @@ -0,0 +1,25 @@ + + + + + "Pokretanje aktivnosti nije uspjelo" + "Dodaj prečicu aplikacije" + "Postavi pozadinsku sliku" + diff --git a/SecondaryDisplayLauncher/res/values-ca/strings.xml b/SecondaryDisplayLauncher/res/values-ca/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c0274d142deb8ccbede2ab1a7aa71a916a561b1a --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ca/strings.xml @@ -0,0 +1,25 @@ + + + + + "No s\'ha pogut iniciar l\'activitat" + "Afegeix una drecera d\'aplicació" + "Estableix el fons de pantalla" + diff --git a/SecondaryDisplayLauncher/res/values-cs/strings.xml b/SecondaryDisplayLauncher/res/values-cs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..92ed5fa56f26e9937079de320747a77feb0141ae --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-cs/strings.xml @@ -0,0 +1,25 @@ + + + + + "Aktivitu nelze zahájit" + "Přidat zkratku aplikace" + "Nastavení tapety" + diff --git a/SecondaryDisplayLauncher/res/values-da/strings.xml b/SecondaryDisplayLauncher/res/values-da/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..16bdb33f6fc833248d899462b1f8cb2a091229ce --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-da/strings.xml @@ -0,0 +1,25 @@ + + + + + "Aktiviteten kunne ikke startes" + "Tilføj appgenvej" + "Angiv baggrund" + diff --git a/SecondaryDisplayLauncher/res/values-de/strings.xml b/SecondaryDisplayLauncher/res/values-de/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3617a5b209d290aea895b23f85f9b01c8005799b --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-de/strings.xml @@ -0,0 +1,25 @@ + + + + + "Aktivität konnte nicht gestartet werden" + "App-Verknüpfung hinzufügen" + "Hintergrund festlegen" + diff --git a/SecondaryDisplayLauncher/res/values-el/strings.xml b/SecondaryDisplayLauncher/res/values-el/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8d19d09c9d221e9c838966367aba3e65d4388273 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-el/strings.xml @@ -0,0 +1,25 @@ + + + + + "Δεν ήταν δυνατή η εκκίνηση της δραστηριότητας" + "Προσθήκη συντόμευσης εφαρμογής" + "Ορισμός ταπετσαρίας" + diff --git a/SecondaryDisplayLauncher/res/values-en-rAU/strings.xml b/SecondaryDisplayLauncher/res/values-en-rAU/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8d8c419b2d219905929d33e618774d58ffd07f5a --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-en-rAU/strings.xml @@ -0,0 +1,25 @@ + + + + + "Couldn\'t launch the activity" + "Add app shortcut" + "Set wallpaper" + diff --git a/SecondaryDisplayLauncher/res/values-en-rGB/strings.xml b/SecondaryDisplayLauncher/res/values-en-rGB/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8d8c419b2d219905929d33e618774d58ffd07f5a --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-en-rGB/strings.xml @@ -0,0 +1,25 @@ + + + + + "Couldn\'t launch the activity" + "Add app shortcut" + "Set wallpaper" + diff --git a/SecondaryDisplayLauncher/res/values-en-rIN/strings.xml b/SecondaryDisplayLauncher/res/values-en-rIN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8d8c419b2d219905929d33e618774d58ffd07f5a --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-en-rIN/strings.xml @@ -0,0 +1,25 @@ + + + + + "Couldn\'t launch the activity" + "Add app shortcut" + "Set wallpaper" + diff --git a/SecondaryDisplayLauncher/res/values-es-rUS/strings.xml b/SecondaryDisplayLauncher/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ff6772bf33cde83c49ad24d7fda465212a70fec2 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-es-rUS/strings.xml @@ -0,0 +1,25 @@ + + + + + "No se pudo iniciar la actividad" + "Agregar acceso directo a app" + "Establecer fondo de pantalla" + diff --git a/SecondaryDisplayLauncher/res/values-es/strings.xml b/SecondaryDisplayLauncher/res/values-es/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0654dcb756b7e5c585ef1bd9abff95d5bc3045b9 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-es/strings.xml @@ -0,0 +1,25 @@ + + + + + "No se ha podido iniciar la acción" + "Añadir acceso directo a la aplicación" + "Establecer fondo de pantalla" + diff --git a/SecondaryDisplayLauncher/res/values-et/strings.xml b/SecondaryDisplayLauncher/res/values-et/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3410fd44de7da958c176eb3d979819cdc193733a --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-et/strings.xml @@ -0,0 +1,25 @@ + + + + + "Tegevust ei saanud käivitada" + "Lisa rakenduse otsetee" + "Määra taustapilt" + diff --git a/SecondaryDisplayLauncher/res/values-eu/strings.xml b/SecondaryDisplayLauncher/res/values-eu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d7abe33d132bbc3dfd7b9152a671c855b26db305 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-eu/strings.xml @@ -0,0 +1,25 @@ + + + + + "Ezin izan da abiarazi jarduera" + "Gehitu aplikaziorako lasterbidea" + "Ezarri horma-papera" + diff --git a/SecondaryDisplayLauncher/res/values-fa/strings.xml b/SecondaryDisplayLauncher/res/values-fa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4d3ec4d3f5da1d727780151414ddb627143723a1 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-fa/strings.xml @@ -0,0 +1,25 @@ + + + + + "فعالیت راه‌اندازی نشد" + "افزودن میان‌بر برنامه" + "تنظیم کاغذدیواری" + diff --git a/SecondaryDisplayLauncher/res/values-fi/strings.xml b/SecondaryDisplayLauncher/res/values-fi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e56f67a10be2901f0e15eb75704d4d3804c1a0af --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-fi/strings.xml @@ -0,0 +1,25 @@ + + + + + "Käynnistäminen epäonnistui" + "Lisää sovelluksen pikakuvake" + "Aseta taustakuva" + diff --git a/SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml b/SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5c9ba55f4b17e0b3fff28d7aa1e48894c2f1828 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-fr-rCA/strings.xml @@ -0,0 +1,25 @@ + + + + + "Impossible de lancer l\'activité" + "Ajouter un raccourci vers l\'application" + "Définir le fond d\'écran" + diff --git a/SecondaryDisplayLauncher/res/values-fr/strings.xml b/SecondaryDisplayLauncher/res/values-fr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..daa186b46fc6b64395b2e53d3e4a4082d52ac4b8 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-fr/strings.xml @@ -0,0 +1,25 @@ + + + + + "Impossible de lancer l\'activité" + "Ajouter un raccourci vers l\'application" + "Configurer le fond d\'écran" + diff --git a/SecondaryDisplayLauncher/res/values-gl/strings.xml b/SecondaryDisplayLauncher/res/values-gl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0bcf9696ca4c9a72386e360e9f9e5ddc5b0329cb --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-gl/strings.xml @@ -0,0 +1,25 @@ + + + + + "Non se puido iniciar a actividade" + "Engadir atallo da aplicación" + "Definir fondo de pantalla" + diff --git a/SecondaryDisplayLauncher/res/values-gu/strings.xml b/SecondaryDisplayLauncher/res/values-gu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..82b4444f39017cc0fed606dfce778e227c63ec9b --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-gu/strings.xml @@ -0,0 +1,25 @@ + + + + + "પ્રવૃત્તિ લૉન્ચ કરી શકાઈ નથી" + "ઍપ શૉર્ટકટ ઉમેરો" + "વૉલપેપર સેટ કરો" + diff --git a/SecondaryDisplayLauncher/res/values-hi/strings.xml b/SecondaryDisplayLauncher/res/values-hi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8adb519303319bb9ce71642f52be07e0a9242f7b --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-hi/strings.xml @@ -0,0 +1,25 @@ + + + + + "गतिविधि लॉन्च नहीं हो सकी" + "ऐप्लिकेशन शॉर्टकट जोड़ें" + "वॉलपेपर सेट करें" + diff --git a/SecondaryDisplayLauncher/res/values-hr/strings.xml b/SecondaryDisplayLauncher/res/values-hr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..87ac8746016bcd2c084d51011dd61455486cbb3d --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-hr/strings.xml @@ -0,0 +1,25 @@ + + + + + "Pokretanje aktivnosti nije uspjelo" + "Dodajte aplikacijski prečac" + "Postavljanje pozadine" + diff --git a/SecondaryDisplayLauncher/res/values-hu/strings.xml b/SecondaryDisplayLauncher/res/values-hu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a8870fc439fe4bdc0271b55b941c42094d072b51 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-hu/strings.xml @@ -0,0 +1,25 @@ + + + + + "Nem sikerült elindítani a tevékenységet" + "Alkalmazás parancsikonjának hozzáadása" + "Háttérkép beállítása" + diff --git a/SecondaryDisplayLauncher/res/values-hy/strings.xml b/SecondaryDisplayLauncher/res/values-hy/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a64233f01fa79c1a2a586c9e0daeab590f92eff8 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-hy/strings.xml @@ -0,0 +1,25 @@ + + + + + "Չհաջողվեց գործարկել գործողությունը" + "Ավելացնել հավելվածի դյուրանցումը" + "Դարձնել պաստառ" + diff --git a/SecondaryDisplayLauncher/res/values-in/strings.xml b/SecondaryDisplayLauncher/res/values-in/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f51d23840fca7a257ccc1a913ceda1784d3dbf36 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-in/strings.xml @@ -0,0 +1,25 @@ + + + + + "Tidak dapat meluncurkan aktivitas" + "Tambahkan pintasan app" + "Setel wallpaper" + diff --git a/SecondaryDisplayLauncher/res/values-is/strings.xml b/SecondaryDisplayLauncher/res/values-is/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e8b3e97c602ba513fcfc10c3669c15e50c3dd987 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-is/strings.xml @@ -0,0 +1,25 @@ + + + + + "Ekki tókst að ræsa aðgerðina" + "Bæta við flýtileið forrita" + "Velja veggfóður" + diff --git a/SecondaryDisplayLauncher/res/values-it/strings.xml b/SecondaryDisplayLauncher/res/values-it/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4941515cbe72ef258efb2d183d4d538f65c54993 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-it/strings.xml @@ -0,0 +1,25 @@ + + + + + "Impossibile avviare l\'attività" + "Aggiungi scorciatoia app" + "Imposta sfondo" + diff --git a/SecondaryDisplayLauncher/res/values-iw/strings.xml b/SecondaryDisplayLauncher/res/values-iw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..06b0c42bbd3f26e8be1038e7de8a2a6fa0a82fc5 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-iw/strings.xml @@ -0,0 +1,25 @@ + + + + + "לא ניתן היה להפעיל את הפעילות" + "הוספת קיצור דרך של אפליקציה" + "הגדרת טפט" + diff --git a/SecondaryDisplayLauncher/res/values-ja/strings.xml b/SecondaryDisplayLauncher/res/values-ja/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3ed7b2b11015f135307efef49184e80303e92bfc --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ja/strings.xml @@ -0,0 +1,25 @@ + + + + + "アクティビティを開始できませんでした" + "アプリのショートカットを追加" + "壁紙を設定" + diff --git a/SecondaryDisplayLauncher/res/values-ka/strings.xml b/SecondaryDisplayLauncher/res/values-ka/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ac85f703745acb52f75edff3a105916595b9b335 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ka/strings.xml @@ -0,0 +1,25 @@ + + + + + "აქტივობის გაშვება ვერ მოხერხდა" + "აპის მალსახმობის დამატება" + "ფონის დაყენება" + diff --git a/SecondaryDisplayLauncher/res/values-kk/strings.xml b/SecondaryDisplayLauncher/res/values-kk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f9ac455687e7a4de414edec2f6a4649f2e5b71a2 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-kk/strings.xml @@ -0,0 +1,25 @@ + + + + + "Әрекет іске қосылмады" + "Қолданба таңбашасын енгізу" + "Тұсқағаз орнату" + diff --git a/SecondaryDisplayLauncher/res/values-km/strings.xml b/SecondaryDisplayLauncher/res/values-km/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..afc050f37d9a9a23c1564d3f236bac0dc6f6f048 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-km/strings.xml @@ -0,0 +1,25 @@ + + + + + "មិនអាចចាប់ផ្តើមសកម្មភាពទេ" + "បញ្ចូល​ផ្លូវកាត់​កម្មវិធី" + "កំណត់​ផ្ទាំង​រូបភាព" + diff --git a/SecondaryDisplayLauncher/res/values-kn/strings.xml b/SecondaryDisplayLauncher/res/values-kn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..09c327fe4530e25ffdbad8d40d153679ef7fad43 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-kn/strings.xml @@ -0,0 +1,25 @@ + + + + + "ಚಟುವಟಿಕೆಯನ್ನು ಲಾಂಚ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" + "ಆ್ಯಪ್‌ ಶಾರ್ಟ್‌ಕಟ್ ಸೇರಿಸಿ" + "ವಾಲ್‌ಪೇಪರ್ ಹೊಂದಿಸಿ" + diff --git a/SecondaryDisplayLauncher/res/values-ko/strings.xml b/SecondaryDisplayLauncher/res/values-ko/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6a02ac08ce550b39ea0b5a717fffe95622f72403 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ko/strings.xml @@ -0,0 +1,25 @@ + + + + + "활동을 실행할 수 없음" + "앱 바로가기 추가" + "배경화면 설정" + diff --git a/SecondaryDisplayLauncher/res/values-ky/strings.xml b/SecondaryDisplayLauncher/res/values-ky/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..56185fa7d52a668624e0fe0a621cefe06bb2344e --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ky/strings.xml @@ -0,0 +1,25 @@ + + + + + "Аракет аткарылган жок" + "Колдонмого кыска жол кошуу" + "Тушкагаз орнотуу" + diff --git a/SecondaryDisplayLauncher/res/values-lo/strings.xml b/SecondaryDisplayLauncher/res/values-lo/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..36a62755674861f6fb6a137a3865be7ec97514e7 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-lo/strings.xml @@ -0,0 +1,25 @@ + + + + + "ບໍ່ສາມາດເປີດໃຊ້ການເຄື່ອນໄຫວໄດ້" + "ເພີ່ມທາງລັດແອັບ" + "ຕັ້ງເປັນຮູບພື້ນຫຼັງ" + diff --git a/SecondaryDisplayLauncher/res/values-lt/strings.xml b/SecondaryDisplayLauncher/res/values-lt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8113eb61b697cec8c39379590a7d7915c628bd7b --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-lt/strings.xml @@ -0,0 +1,25 @@ + + + + + "Nepavyko paleisti veiklos" + "Pridėti programos šaukinį" + "Nustatyti ekrano foną" + diff --git a/SecondaryDisplayLauncher/res/values-lv/strings.xml b/SecondaryDisplayLauncher/res/values-lv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e2679335d5aba6f73b24b70793d3c2266e2a9214 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-lv/strings.xml @@ -0,0 +1,25 @@ + + + + + "Nevarēja palaist darbību" + "Pievienot lietotnes saīsni" + "Iestatīt fona tapeti" + diff --git a/go/res/values-en-rGB/strings.xml b/SecondaryDisplayLauncher/res/values-mk/strings.xml similarity index 57% rename from go/res/values-en-rGB/strings.xml rename to SecondaryDisplayLauncher/res/values-mk/strings.xml index 2ee2c26457195fed7602ac3ddee26da597f7c873..e2cca03eeb269e992c275e2cd6d98c6e516e12cd 100644 --- a/go/res/values-en-rGB/strings.xml +++ b/SecondaryDisplayLauncher/res/values-mk/strings.xml @@ -1,7 +1,7 @@ + + + "ആക്‌റ്റിവിറ്റി പ്രകാശിപ്പിക്കാനായില്ല" + "ആപ്പ് കുറുക്കുവഴികൾ ചേർക്കുക" + "വാൾപേപ്പർ സജ്ജീകരിക്കുക" + diff --git a/SecondaryDisplayLauncher/res/values-mn/strings.xml b/SecondaryDisplayLauncher/res/values-mn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..85fb0209eb87f14bea0682935fce2a80d3c731b8 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-mn/strings.xml @@ -0,0 +1,25 @@ + + + + + "Үйл ажиллагааг эхлүүж чадсангүй" + "Аппын товчлол нэмэх" + "Ханын зураг тохируулах" + diff --git a/SecondaryDisplayLauncher/res/values-mr/strings.xml b/SecondaryDisplayLauncher/res/values-mr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6e92a2f2a141e1fa30536604572f3f6858903d0a --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-mr/strings.xml @@ -0,0 +1,25 @@ + + + + + "अ‍ॅक्टिव्हिटी लाँच करता आली नाही" + "अ‍ॅप शॉर्टकट जोडा" + "वॉलपेपर सेट करा" + diff --git a/SecondaryDisplayLauncher/res/values-ms/strings.xml b/SecondaryDisplayLauncher/res/values-ms/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd7805324cc03c83277f093933664078267e8dd4 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ms/strings.xml @@ -0,0 +1,25 @@ + + + + + "Tidak dapat melancarkan aktiviti" + "Tambah pintasan apl" + "Tetapkan kertas dinding" + diff --git a/SecondaryDisplayLauncher/res/values-my/strings.xml b/SecondaryDisplayLauncher/res/values-my/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..152140220389422929135e47257998fe0f963b8c --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-my/strings.xml @@ -0,0 +1,25 @@ + + + + + "လုပ်ဆောင်ချက်ကို စတင်၍မရပါ" + "အက်ပ်ဖြတ်လမ်းလင့်ခ်ထည့်ရန်" + "နောက်ခံ သတ်မှတ်ရန်" + diff --git a/SecondaryDisplayLauncher/res/values-nb/strings.xml b/SecondaryDisplayLauncher/res/values-nb/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..945c87bb7d4fc08cb0359ac9ec923cbbeee7158b --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-nb/strings.xml @@ -0,0 +1,25 @@ + + + + + "Kunne ikke starte aktiviteten" + "Legg til en appsnarvei" + "Angi bakgrunn" + diff --git a/SecondaryDisplayLauncher/res/values-ne/strings.xml b/SecondaryDisplayLauncher/res/values-ne/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9a5b0a0590c40c68cd7f69a64a30085a72504d85 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ne/strings.xml @@ -0,0 +1,25 @@ + + + + + "उक्त क्रियाकलाप सुरु गर्न सकिएन" + "अनुप्रयोगको सर्टकट थप्नुहोस्‌" + "वालपेपर सेट गर्नुहोस्" + diff --git a/SecondaryDisplayLauncher/res/values-nl/strings.xml b/SecondaryDisplayLauncher/res/values-nl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8767708814d964633806fe878273211289db19e1 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-nl/strings.xml @@ -0,0 +1,25 @@ + + + + + "Kan de activiteit niet starten" + "App-snelkoppeling toevoegen" + "Achtergrond instellen" + diff --git a/SecondaryDisplayLauncher/res/values-or/strings.xml b/SecondaryDisplayLauncher/res/values-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9bc5725abad9e762002d3cfcb92ff61a1c978131 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-or/strings.xml @@ -0,0 +1,25 @@ + + + + + "ଗତିବିଧିକୁ ଲଞ୍ଚ କରାଯାଇପାରିଲା ନାହିଁ" + "ଆପ୍‌ ସର୍ଟକଟ୍‌ ଯୋଗ କରନ୍ତୁ" + "ୱାଲ୍‌‌ପେପର୍‌କୁ ସେଟ୍ କରନ୍ତୁ" + diff --git a/SecondaryDisplayLauncher/res/values-pa/strings.xml b/SecondaryDisplayLauncher/res/values-pa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c5dd582ce0bad4ed2f215fea00888668f70b6a52 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-pa/strings.xml @@ -0,0 +1,25 @@ + + + + + "ਸਰਗਰਮੀ ਨੂੰ ਲਾਂਚ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" + "ਐਪ ਸ਼ਾਰਟਕੱਟ ਸ਼ਾਮਲ ਕਰੋ" + "ਵਾਲਪੇਪਰ ਸੈੱਟ ਕਰੋ" + diff --git a/SecondaryDisplayLauncher/res/values-pl/strings.xml b/SecondaryDisplayLauncher/res/values-pl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e8efaed2b08e6b61ff89b2a43325815dd651790a --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-pl/strings.xml @@ -0,0 +1,25 @@ + + + + + "Nie udało się uruchomić aktywności" + "Dodaj skrót do aplikacji" + "Ustaw tapetę" + diff --git a/SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml b/SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..67c75574be4caa01287695f24590574f165265ca --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-pt-rPT/strings.xml @@ -0,0 +1,25 @@ + + + + + "Não foi possível iniciar a atividade." + "Adicionar atalho de aplicação" + "Definir imagem de fundo" + diff --git a/SecondaryDisplayLauncher/res/values-pt/strings.xml b/SecondaryDisplayLauncher/res/values-pt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..201fc07e522f39cb9e861bf1676b5138e21670cc --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-pt/strings.xml @@ -0,0 +1,25 @@ + + + + + "Não foi possível abrir a atividade" + "Adicionar atalho de apps" + "Definir plano de fundo" + diff --git a/SecondaryDisplayLauncher/res/values-ro/strings.xml b/SecondaryDisplayLauncher/res/values-ro/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e2e21c5731a40a0d87127ad20d9ba2dc5e96e1b8 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ro/strings.xml @@ -0,0 +1,25 @@ + + + + + "Nu s-a putut lansa activitatea" + "Adăugați comanda rapidă pentru aplicație" + "Setați imaginea de fundal" + diff --git a/SecondaryDisplayLauncher/res/values-ru/strings.xml b/SecondaryDisplayLauncher/res/values-ru/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..64ba00ef1f63643355abb7a6a3e0b8ae2e2c1776 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ru/strings.xml @@ -0,0 +1,25 @@ + + + + + "Не удалось запустить объект activity" + "Добавить ярлык приложения" + "Установить обои" + diff --git a/SecondaryDisplayLauncher/res/values-si/strings.xml b/SecondaryDisplayLauncher/res/values-si/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ac492eb8ce6d9b926ec10da584dfdf23bd846949 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-si/strings.xml @@ -0,0 +1,25 @@ + + + + + "ක්‍රියාකාරකම දියත් කිරීමට නොහැකි විය" + "යෙදුම් කෙටිමඟ එක් කරන්න" + "බිතුපත සකසන්න" + diff --git a/SecondaryDisplayLauncher/res/values-sk/strings.xml b/SecondaryDisplayLauncher/res/values-sk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5e6fa7a61372df725e5f8f272ef4022040a9677b --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-sk/strings.xml @@ -0,0 +1,25 @@ + + + + + "Aktivitu sa nepodarilo spustiť" + "Pridať odkaz do aplikácie" + "Nastaviť tapetu" + diff --git a/SecondaryDisplayLauncher/res/values-sl/strings.xml b/SecondaryDisplayLauncher/res/values-sl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f54dec9c8d01bdaf35d191517a10c3f37507e056 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-sl/strings.xml @@ -0,0 +1,25 @@ + + + + + "Dejavnosti ni bilo mogoče zagnati" + "Dodaj bližnjico do aplikacije" + "Nastavi ozadje" + diff --git a/SecondaryDisplayLauncher/res/values-sq/strings.xml b/SecondaryDisplayLauncher/res/values-sq/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e626dd1caf27b588079d481d84bf7da52fdf28ea --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-sq/strings.xml @@ -0,0 +1,25 @@ + + + + + "Aktiviteti nuk mund të hapej" + "Shto shkurtoren e aplikacionit" + "Cakto imazhin e sfondit" + diff --git a/SecondaryDisplayLauncher/res/values-sr/strings.xml b/SecondaryDisplayLauncher/res/values-sr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..94214f113bd297bcf62971fdc5c3cab7ea3a8bfd --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-sr/strings.xml @@ -0,0 +1,25 @@ + + + + + "Покретање активности није успело" + "Додај пречицу за апликацију" + "Подесите позадину" + diff --git a/SecondaryDisplayLauncher/res/values-sv/strings.xml b/SecondaryDisplayLauncher/res/values-sv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..53e17ef6857d95cd7ce8fb72a6839f9562cc4029 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-sv/strings.xml @@ -0,0 +1,25 @@ + + + + + "Det gick inte att starta aktiviteten" + "Lägg till appgenväg" + "Ange bakgrund" + diff --git a/SecondaryDisplayLauncher/res/values-sw/strings.xml b/SecondaryDisplayLauncher/res/values-sw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..490561a6194f24a8a7be54ee4d42074316878f9b --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-sw/strings.xml @@ -0,0 +1,25 @@ + + + + + "Imeshindwa kuanzisha shughuli" + "Ongeza njia ya mkato ya programu" + "Weka mandhari" + diff --git a/SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml b/SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml new file mode 100644 index 0000000000000000000000000000000000000000..f33a8db400e17525a111fda533de80749f931eae --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-sw600dp/dimens.xml @@ -0,0 +1,22 @@ + + + + + 400dp + 400dp + 60dp + diff --git a/SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml b/SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml new file mode 100644 index 0000000000000000000000000000000000000000..524e52af71adebbcc43fa529b2264f3eb81af27b --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-sw720dp/dimens.xml @@ -0,0 +1,22 @@ + + + + + 660dp + 660dp + 70dp + diff --git a/SecondaryDisplayLauncher/res/values-ta/strings.xml b/SecondaryDisplayLauncher/res/values-ta/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6bb054a11aa46d6fbdd8e7e8e434b38c3fe610c7 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ta/strings.xml @@ -0,0 +1,25 @@ + + + + + "நடவடிக்கையைத் துவக்க இயலவில்லை" + "ஆப்ஸ் ஷார்ட்கட்டைச் சேர்" + "வால்பேப்பரை அமை" + diff --git a/SecondaryDisplayLauncher/res/values-te/strings.xml b/SecondaryDisplayLauncher/res/values-te/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3dd3c9bddb335046b9d2f006546de4ed9f7ce93d --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-te/strings.xml @@ -0,0 +1,25 @@ + + + + + "కార్యకలాపాన్ని ప్రారంభించడం సాధ్యం కాలేదు" + "యాప్ షార్ట్‌కట్‌ని జోడించు" + "వాల్‌పేపర్‌ను సెట్ చేయండి" + diff --git a/SecondaryDisplayLauncher/res/values-th/strings.xml b/SecondaryDisplayLauncher/res/values-th/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6368950ad83750c7d8de544a12c8d41caff50aec --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-th/strings.xml @@ -0,0 +1,25 @@ + + + + + "เปิดกิจกรรมไม่ได้" + "เพิ่มทางลัดของแอป" + "ตั้งวอลเปเปอร์" + diff --git a/SecondaryDisplayLauncher/res/values-tl/strings.xml b/SecondaryDisplayLauncher/res/values-tl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..192e5c4f926af1a1f2f84dc0cbcb7ab33e3290e3 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-tl/strings.xml @@ -0,0 +1,25 @@ + + + + + "Hindi mailunsad ang aktibidad" + "Magdagdag ng shortcut ng app" + "Magtakda ng wallpaper" + diff --git a/SecondaryDisplayLauncher/res/values-tr/strings.xml b/SecondaryDisplayLauncher/res/values-tr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e7ed9983ee92cab23c050e544581eac01f707a2d --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-tr/strings.xml @@ -0,0 +1,25 @@ + + + + + "İşlem başlatılamadı" + "Uygulama kısayolu ekle" + "Duvar kağıdı ayarla" + diff --git a/SecondaryDisplayLauncher/res/values-uk/strings.xml b/SecondaryDisplayLauncher/res/values-uk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e4659952cdace93664f7775670b5f2e5ed7a1641 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-uk/strings.xml @@ -0,0 +1,25 @@ + + + + + "Не вдалося запустити активність" + "Розмістити ярлик додатка" + "Вибрати фоновий малюнок" + diff --git a/SecondaryDisplayLauncher/res/values-ur/strings.xml b/SecondaryDisplayLauncher/res/values-ur/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e4c86417dc996de98a0268619fac2b15d2f786e5 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-ur/strings.xml @@ -0,0 +1,25 @@ + + + + + "سرگرمی کو شروع نہیں کیا جا سکا" + "ایپ شارٹ کٹ شامل کریں" + "وال پیپر سیٹ کریں" + diff --git a/SecondaryDisplayLauncher/res/values-uz/strings.xml b/SecondaryDisplayLauncher/res/values-uz/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..585739d37fa1b3e4ec10f873e6a7b08850ab4cfe --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-uz/strings.xml @@ -0,0 +1,25 @@ + + + + + "Faollik ishga tushmadi" + "Yorliq yaratish" + "Fonga rasm oʻrnatish" + diff --git a/SecondaryDisplayLauncher/res/values-vi/strings.xml b/SecondaryDisplayLauncher/res/values-vi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..15a1a44ddeb21c78728c05fbdedbaea4fb334f05 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-vi/strings.xml @@ -0,0 +1,25 @@ + + + + + "Không thể chạy hoạt động" + "Thêm lối tắt ứng dụng" + "Đặt hình nền" + diff --git a/SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml b/SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3358499824656113653a4d995e4fca02cdab6cd4 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-zh-rCN/strings.xml @@ -0,0 +1,25 @@ + + + + + "无法启动该操作组件" + "添加应用快捷方式" + "设置壁纸" + diff --git a/SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml b/SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bf76f29dec93d918552ec9a6b835d035953bebcb --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-zh-rHK/strings.xml @@ -0,0 +1,25 @@ + + + + + "無法啟動活動" + "新增應用程式捷徑" + "設定桌布" + diff --git a/SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml b/SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bf76f29dec93d918552ec9a6b835d035953bebcb --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-zh-rTW/strings.xml @@ -0,0 +1,25 @@ + + + + + "無法啟動活動" + "新增應用程式捷徑" + "設定桌布" + diff --git a/SecondaryDisplayLauncher/res/values-zu/strings.xml b/SecondaryDisplayLauncher/res/values-zu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ad2f6b9cdb6b23822d27145534bf81db14139cce --- /dev/null +++ b/SecondaryDisplayLauncher/res/values-zu/strings.xml @@ -0,0 +1,25 @@ + + + + + "Ayikwazanga ukuqalisa umsebenzi" + "Engeza isinqamuleli sohlelo lokusebenza" + "Setha isithombe sangemuva" + diff --git a/SecondaryDisplayLauncher/res/values/colors.xml b/SecondaryDisplayLauncher/res/values/colors.xml new file mode 100644 index 0000000000000000000000000000000000000000..66b41a2ba6a27013bca9a1d43f8e5a04fb6fd8c0 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values/colors.xml @@ -0,0 +1,22 @@ + + + + #884e8391 + diff --git a/SecondaryDisplayLauncher/res/values/dimens.xml b/SecondaryDisplayLauncher/res/values/dimens.xml new file mode 100644 index 0000000000000000000000000000000000000000..7cca60719cc9596f1568d0e2e762b1c463fd7941 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values/dimens.xml @@ -0,0 +1,31 @@ + + + + + 72dp + 24dp + 24dp + 64dp + 64dp + 24dp + 8dp + 8dp + + 300dp + 300dp + 20dp + 20dp + diff --git a/SecondaryDisplayLauncher/res/values/strings.xml b/SecondaryDisplayLauncher/res/values/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b68918ac3f0d902fbc2864f5c3ebadc00301a51c --- /dev/null +++ b/SecondaryDisplayLauncher/res/values/strings.xml @@ -0,0 +1,24 @@ + + + + + Couldn\'t launch the activity + Add app shortcut + Set wallpaper + diff --git a/SecondaryDisplayLauncher/res/values/styles.xml b/SecondaryDisplayLauncher/res/values/styles.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e41a98fc8ec734a2bdd64c6ca9b3de999f10002 --- /dev/null +++ b/SecondaryDisplayLauncher/res/values/styles.xml @@ -0,0 +1,30 @@ + + + + + + diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java b/SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java new file mode 100644 index 0000000000000000000000000000000000000000..3017b81c1d9231de767951bf4e7f29797fbb03de --- /dev/null +++ b/SecondaryDisplayLauncher/src/com/android/launcher3/AppEntry.java @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.content.ComponentName; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.drawable.Drawable; + +/** An entry that represents a single activity that can be launched. */ +public class AppEntry { + + private String mLabel; + private Drawable mIcon; + private Intent mLaunchIntent; + + AppEntry(ResolveInfo info, PackageManager packageManager) { + mLabel = info.loadLabel(packageManager).toString(); + mIcon = info.loadIcon(packageManager); + mLaunchIntent = new Intent(); + mLaunchIntent.setComponent(new ComponentName(info.activityInfo.packageName, + info.activityInfo.name)); + } + + String getLabel() { + return mLabel; + } + + Drawable getIcon() { + return mIcon; + } + + Intent getLaunchIntent() { return mLaunchIntent; } + + ComponentName getComponentName() { + return mLaunchIntent.getComponent(); + } + + @Override + public String toString() { + return mLabel; + } +} diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..aa115cb575bc740a2a1e04cafe2bddb07c412686 --- /dev/null +++ b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListAdapter.java @@ -0,0 +1,63 @@ +/** + * Copyright (c) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.android.launcher3.R; + +import java.util.List; + +/** Adapter for available apps list. */ +public class AppListAdapter extends ArrayAdapter { + private final LayoutInflater mInflater; + + AppListAdapter(Context context) { + super(context, android.R.layout.simple_list_item_2); + mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + void setData(List data) { + clear(); + if (data != null) { + addAll(data); + } + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View view; + + if (convertView == null) { + view = mInflater.inflate(R.layout.app_grid_item, parent, false); + } else { + view = convertView; + } + + AppEntry item = getItem(position); + ((ImageView)view.findViewById(R.id.app_icon)).setImageDrawable(item.getIcon()); + ((TextView)view.findViewById(R.id.app_name)).setText(item.getLabel()); + + return view; + } +} diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java new file mode 100644 index 0000000000000000000000000000000000000000..914fd5e01ab5e81442e8e784d8459205fa338add --- /dev/null +++ b/SecondaryDisplayLauncher/src/com/android/launcher3/AppListViewModel.java @@ -0,0 +1,126 @@ +/** + * Copyright (c) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.app.Application; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.AsyncTask; + +import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LiveData; + +import java.util.ArrayList; +import java.util.List; + +/** + * A view model that provides a list of activities that can be launched. + */ +public class AppListViewModel extends AndroidViewModel { + + private final AppListLiveData mLiveData; + private final PackageIntentReceiver + mPackageIntentReceiver; + + public AppListViewModel(Application application) { + super(application); + mLiveData = new AppListLiveData(application); + mPackageIntentReceiver = new PackageIntentReceiver(mLiveData, application); + } + + public LiveData> getAppList() { + return mLiveData; + } + + protected void onCleared() { + getApplication().unregisterReceiver(mPackageIntentReceiver); + } +} + +class AppListLiveData extends LiveData> { + + private final PackageManager mPackageManager; + private int mCurrentDataVersion; + + public AppListLiveData(Context context) { + mPackageManager = context.getPackageManager(); + loadData(); + } + + void loadData() { + final int loadDataVersion = ++mCurrentDataVersion; + + new AsyncTask>() { + @Override + protected List doInBackground(Void... voids) { + Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); + mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); + + List apps = mPackageManager.queryIntentActivities(mainIntent, + PackageManager.GET_META_DATA); + + List entries = new ArrayList<>(); + if (apps != null) { + for (ResolveInfo app : apps) { + AppEntry entry = new AppEntry(app, mPackageManager); + entries.add(entry); + } + } + return entries; + } + + @Override + protected void onPostExecute(List data) { + if (mCurrentDataVersion == loadDataVersion) { + setValue(data); + } + } + }.execute(); + } +} + +/** + * Receiver used to notify live data about app list changes. + */ +class PackageIntentReceiver extends BroadcastReceiver { + + private final AppListLiveData mLiveData; + + public PackageIntentReceiver(AppListLiveData liveData, Context context) { + mLiveData = liveData; + IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); + filter.addAction(Intent.ACTION_PACKAGE_REMOVED); + filter.addAction(Intent.ACTION_PACKAGE_CHANGED); + filter.addDataScheme("package"); + context.registerReceiver(this, filter); + + // Register for events related to sdcard installation. + IntentFilter sdFilter = new IntentFilter(); + sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE); + sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE); + context.registerReceiver(this, sdFilter); + } + + @Override + public void onReceive(Context context, Intent intent) { + mLiveData.loadData(); + } +} \ No newline at end of file diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java new file mode 100644 index 0000000000000000000000000000000000000000..4f92038ae4e8a65c1387e91effcef9fc1599c357 --- /dev/null +++ b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppListViewModel.java @@ -0,0 +1,120 @@ +/** + * Copyright (c) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import static com.android.launcher3.PinnedAppListViewModel.PINNED_APPS_KEY; + +import android.app.Application; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.AsyncTask; + +import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LiveData; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +/** + * A view model that provides a list of activities that were pinned by user to always display on + * home screen. + * The pinned activities are stored in {@link SharedPreferences} to keep the sample simple :). + */ +public class PinnedAppListViewModel extends AndroidViewModel { + + final static String PINNED_APPS_KEY = "pinned_apps"; + + private final PinnedAppListLiveData mLiveData; + + public PinnedAppListViewModel(Application application) { + super(application); + mLiveData = new PinnedAppListLiveData(application); + } + + public LiveData> getPinnedAppList() { + return mLiveData; + } +} + +class PinnedAppListLiveData extends LiveData> { + + private final Context mContext; + private final PackageManager mPackageManager; + // Store listener reference, so it won't be GC-ed. + private final SharedPreferences.OnSharedPreferenceChangeListener mChangeListener; + private int mCurrentDataVersion; + + public PinnedAppListLiveData(Context context) { + mContext = context; + mPackageManager = context.getPackageManager(); + + final SharedPreferences prefs = context.getSharedPreferences(PINNED_APPS_KEY, 0); + mChangeListener = (preferences, key) -> { + loadData(); + }; + prefs.registerOnSharedPreferenceChangeListener(mChangeListener); + + loadData(); + } + + private void loadData() { + final int loadDataVersion = ++mCurrentDataVersion; + + new AsyncTask>() { + @Override + protected List doInBackground(Void... voids) { + List entries = new ArrayList<>(); + + final SharedPreferences sp = mContext.getSharedPreferences(PINNED_APPS_KEY, 0); + final Set pinnedAppsComponents = sp.getStringSet(PINNED_APPS_KEY, null); + if (pinnedAppsComponents == null) { + return null; + } + + for (String componentString : pinnedAppsComponents) { + final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); + mainIntent.setComponent(ComponentName.unflattenFromString(componentString)); + mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); + + final List apps = mPackageManager.queryIntentActivities(mainIntent, + PackageManager.GET_META_DATA); + + if (apps != null) { + for (ResolveInfo app : apps) { + final AppEntry entry = new AppEntry(app, mPackageManager); + entries.add(entry); + } + } + } + + return entries; + } + + @Override + protected void onPostExecute(List data) { + if (mCurrentDataVersion == loadDataVersion) { + setValue(data); + } + } + }.execute(); + } +} \ No newline at end of file diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..02e6e4a9c659f1f175182bb6990bb672206ddfe8 --- /dev/null +++ b/SecondaryDisplayLauncher/src/com/android/launcher3/PinnedAppPickerDialog.java @@ -0,0 +1,74 @@ +/** + * Copyright (c) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.GridView; + +import androidx.fragment.app.DialogFragment; + +import com.android.launcher3.R; + +/** + * Callback to be invoked when an app was picked. + */ +interface AppPickedCallback { + void onAppPicked(AppEntry appEntry); +} + +/** + * Dialog that provides the user with a list of available apps to pin to the home screen. + */ +public class PinnedAppPickerDialog extends DialogFragment { + + private AppListAdapter mAppListAdapter; + private AppPickedCallback mAppPickerCallback; + + public PinnedAppPickerDialog() { + } + + public static PinnedAppPickerDialog newInstance(AppListAdapter appListAdapter, + AppPickedCallback callback) { + PinnedAppPickerDialog + frag = new PinnedAppPickerDialog(); + frag.mAppListAdapter = appListAdapter; + frag.mAppPickerCallback = callback; + return frag; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return inflater.inflate(R.layout.app_picker_dialog, container); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + GridView appGridView = view.findViewById(R.id.picker_app_grid); + appGridView.setAdapter(mAppListAdapter); + appGridView.setOnItemClickListener((adapterView, itemView, position, id) -> { + final AppEntry entry = mAppListAdapter.getItem(position); + mAppPickerCallback.onAppPicked(entry); + dismiss(); + }); + } +} \ No newline at end of file diff --git a/SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java b/SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java new file mode 100644 index 0000000000000000000000000000000000000000..0a2f18f1097dcbf5d66f842fd832af85f3dc1c50 --- /dev/null +++ b/SecondaryDisplayLauncher/src/com/android/launcher3/SecondaryDisplayLauncher.java @@ -0,0 +1,229 @@ +/** + * Copyright (c) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import static com.android.launcher3.PinnedAppListViewModel.PINNED_APPS_KEY; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.app.AlertDialog; +import android.app.Application; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.os.Bundle; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewAnimationUtils; +import android.view.inputmethod.InputMethodManager; +import android.widget.GridView; +import android.widget.ImageButton; +import android.widget.PopupMenu; + +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.ViewModelProvider; +import androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory; + +import com.google.android.material.circularreveal.cardview.CircularRevealCardView; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import java.util.HashSet; +import java.util.Set; + +/** + * Secondary launcher activity. It's launch mode is configured as "singleTop" to allow showing on + * multiple displays and to ensure a single instance per each display. + */ +public class SecondaryDisplayLauncher extends FragmentActivity implements AppPickedCallback, + PopupMenu.OnMenuItemClickListener { + + private AppListAdapter mAppListAdapter; + private AppListAdapter mPinnedAppListAdapter; + private CircularRevealCardView mAppDrawerView; + private FloatingActionButton mFab; + + private boolean mAppDrawerShown; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.secondary_display_launcher); + + mAppDrawerView = findViewById(R.id.FloatingSheet); + mFab = findViewById(R.id.FloatingActionButton); + + mFab.setOnClickListener((View v) -> { + showAppDrawer(true); + }); + + final ViewModelProvider viewModelProvider = new ViewModelProvider(getViewModelStore(), + new AndroidViewModelFactory((Application) getApplicationContext())); + + mPinnedAppListAdapter = new AppListAdapter(this); + final GridView pinnedAppGridView = findViewById(R.id.pinned_app_grid); + pinnedAppGridView.setAdapter(mPinnedAppListAdapter); + pinnedAppGridView.setOnItemClickListener((adapterView, view, position, id) -> { + final AppEntry entry = mPinnedAppListAdapter.getItem(position); + launch(entry.getLaunchIntent()); + }); + final PinnedAppListViewModel pinnedAppListViewModel = + viewModelProvider.get(PinnedAppListViewModel.class); + pinnedAppListViewModel.getPinnedAppList().observe(this, data -> { + mPinnedAppListAdapter.setData(data); + }); + + mAppListAdapter = new AppListAdapter(this); + final GridView appGridView = findViewById(R.id.app_grid); + appGridView.setAdapter(mAppListAdapter); + appGridView.setOnItemClickListener((adapterView, view, position, id) -> { + final AppEntry entry = mAppListAdapter.getItem(position); + launch(entry.getLaunchIntent()); + }); + final AppListViewModel appListViewModel = viewModelProvider.get(AppListViewModel.class); + appListViewModel.getAppList().observe(this, data -> { + mAppListAdapter.setData(data); + }); + + ImageButton optionsButton = findViewById(R.id.OptionsButton); + optionsButton.setOnClickListener((View v) -> { + PopupMenu popup = new PopupMenu(this,v); + popup.setOnMenuItemClickListener(this); + MenuInflater inflater = popup.getMenuInflater(); + inflater.inflate(R.menu.context_menu, popup.getMenu()); + popup.show(); + }); + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + // Respond to picking one of the popup menu items. + final int id = item.getItemId(); + if (id == R.id.add_app_shortcut) { + FragmentManager fm = getSupportFragmentManager(); + PinnedAppPickerDialog pickerDialogFragment = + PinnedAppPickerDialog.newInstance(mAppListAdapter, this); + pickerDialogFragment.show(fm, "fragment_app_picker"); + return true; + } else if (id == R.id.set_wallpaper) { + Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER); + startActivity(Intent.createChooser(intent, getString(R.string.set_wallpaper))); + return true; + } + + return true; + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + showAppDrawer(false); + } + + public void onBackPressed() { + // If the app drawer was shown - hide it. Otherwise, not doing anything since we don't want + // to close the launcher. + showAppDrawer(false); + } + + public void onNewIntent(Intent intent) { + super.onNewIntent(intent); + + if (Intent.ACTION_MAIN.equals(intent.getAction())) { + // Hide keyboard. + final View v = getWindow().peekDecorView(); + if (v != null && v.getWindowToken() != null) { + getSystemService(InputMethodManager.class).hideSoftInputFromWindow( + v.getWindowToken(), 0); + } + } + + // A new intent will bring the launcher to top. Hide the app drawer to reset the state. + showAppDrawer(false); + } + + void launch(Intent launchIntent) { + launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + try { + startActivity(launchIntent); + } catch (Exception e) { + final AlertDialog.Builder builder = + new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert); + builder.setTitle(R.string.couldnt_launch) + .setMessage(e.getLocalizedMessage()) + .setIcon(android.R.drawable.ic_dialog_alert) + .show(); + } + } + + /** + * Store the picked app to persistent pinned list and update the loader. + */ + @Override + public void onAppPicked(AppEntry appEntry) { + final SharedPreferences sp = getSharedPreferences(PINNED_APPS_KEY, 0); + Set pinnedApps = sp.getStringSet(PINNED_APPS_KEY, null); + if (pinnedApps == null) { + pinnedApps = new HashSet(); + } else { + // Always need to create a new object to make sure that the changes are persisted. + pinnedApps = new HashSet(pinnedApps); + } + pinnedApps.add(appEntry.getComponentName().flattenToString()); + + final SharedPreferences.Editor editor = sp.edit(); + editor.putStringSet(PINNED_APPS_KEY, pinnedApps); + editor.apply(); + } + + /** + * Show/hide app drawer card with animation. + */ + private void showAppDrawer(boolean show) { + if (show == mAppDrawerShown) { + return; + } + + final Animator animator = revealAnimator(mAppDrawerView, show); + if (show) { + mAppDrawerShown = true; + mAppDrawerView.setVisibility(View.VISIBLE); + mFab.setVisibility(View.INVISIBLE); + } else { + mAppDrawerShown = false; + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + mAppDrawerView.setVisibility(View.INVISIBLE); + mFab.setVisibility(View.VISIBLE); + } + }); + } + animator.start(); + } + + /** + * Create reveal/hide animator for app list card. + */ + private Animator revealAnimator(View view, boolean open) { + final int radius = (int) Math.hypot((double) view.getWidth(), (double) view.getHeight()); + return ViewAnimationUtils.createCircularReveal(view, view.getRight(), view.getBottom(), + open ? 0 : radius, open ? radius : 0); + } +} diff --git a/build.gradle b/build.gradle index 4ae6600ee334fcea75e20a53f892bcf0e9d569ee..e296455bec73af85f6f1dd40c9d70ca99939b38e 100644 --- a/build.gradle +++ b/build.gradle @@ -4,27 +4,28 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.2.0-alpha12' - classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.3' + classpath GRADLE_CLASS_PATH + classpath PROTOBUF_CLASS_PATH } } -final String SUPPORT_LIBS_VERSION = '28.0.0-SNAPSHOT' +final String ANDROID_TOP = "${rootDir}/../../.." +final String FRAMEWORK_PREBUILTS_DIR = "${ANDROID_TOP}/prebuilts/framework_intermediates/" apply plugin: 'com.android.application' apply plugin: 'com.google.protobuf' android { - compileSdkVersion 28 - buildToolsVersion '28.0.0' + compileSdkVersion COMPILE_SDK + buildToolsVersion BUILD_TOOLS_VERSION defaultConfig { - minSdkVersion 21 + minSdkVersion 25 targetSdkVersion 28 versionCode 1 versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } buildTypes { @@ -38,39 +39,56 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } - flavorDimensions "default" + // The flavor dimensions for build variants (e.g. aospWithQuickstep, aospWithoutQuickstep) + // See: https://developer.android.com/studio/build/build-variants#flavor-dimensions + flavorDimensions "app", "recents" productFlavors { aosp { - dimension "default" + dimension "app" applicationId 'com.android.launcher3' testApplicationId 'com.android.launcher3.tests' } l3go { - dimension "default" + dimension "app" applicationId 'com.android.launcher3' testApplicationId 'com.android.launcher3.tests' } - quickstep { - dimension "default" - applicationId 'com.android.launcher3' - testApplicationId 'com.android.launcher3.tests' + withQuickstep { + dimension "recents" + + minSdkVersion 28 + } + + withQuickstepIconRecents { + dimension "recents" + + minSdkVersion 28 + } + + withoutQuickstep { + dimension "recents" } } // Disable release builds for now android.variantFilter { variant -> if (variant.buildType.name.endsWith('release')) { - variant.setIgnore(true); + variant.setIgnore(true) + } + + // Icon recents is Go only + if (name.contains("WithQuickstepIconRecents") && !name.contains("l3go")) { + variant.setIgnore(true) } } sourceSets { main { res.srcDirs = ['res'] - java.srcDirs = ['src'] + java.srcDirs = ['src', 'src_plugins'] manifest.srcFile 'AndroidManifest-common.xml' proto { srcDir 'protos/' @@ -84,7 +102,7 @@ android { androidTest { res.srcDirs = ['tests/res'] - java.srcDirs = ['tests/src'] + java.srcDirs = ['tests/src', 'tests/tapl'] manifest.srcFile "tests/AndroidManifest-common.xml" } @@ -93,18 +111,29 @@ android { } aosp { - java.srcDirs = ['src_flags', "src_ui_overrides"] + java.srcDirs = ['src_flags', 'src_shortcuts_overrides'] + manifest.srcFile "AndroidManifest.xml" } l3go { res.srcDirs = ['go/res'] - java.srcDirs = ['go/src_flags', "src_ui_overrides"] + java.srcDirs = ['go/src'] manifest.srcFile "go/AndroidManifest.xml" } - quickstep { - res.srcDirs = ['quickstep/res'] - java.srcDirs = ['src_flags', 'quickstep/src'] + withoutQuickstep { + java.srcDirs = ['src_ui_overrides'] + } + + withQuickstep { + res.srcDirs = ['quickstep/res', 'quickstep/recents_ui_overrides/res'] + java.srcDirs = ['quickstep/src', 'quickstep/recents_ui_overrides/src'] + manifest.srcFile "quickstep/AndroidManifest.xml" + } + + withQuickstepIconRecents { + res.srcDirs = ['quickstep/res', 'go/quickstep/res'] + java.srcDirs = ['quickstep/src', 'go/quickstep/src'] manifest.srcFile "quickstep/AndroidManifest.xml" } } @@ -118,12 +147,20 @@ repositories { } dependencies { - implementation "com.android.support:support-v4:${SUPPORT_LIBS_VERSION}" - implementation "com.android.support:support-dynamic-animation:${SUPPORT_LIBS_VERSION}" - implementation "com.android.support:recyclerview-v7:${SUPPORT_LIBS_VERSION}" - implementation 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7' + implementation "androidx.dynamicanimation:dynamicanimation:${ANDROID_X_VERSION}" + implementation "androidx.recyclerview:recyclerview:${ANDROID_X_VERSION}" + implementation "androidx.preference:preference:${ANDROID_X_VERSION}" + implementation project(':IconLoader') + implementation fileTree(dir: "${FRAMEWORK_PREBUILTS_DIR}/libs", include: 'launcher_protos.jar') + + // Recents lib dependency + withQuickstepImplementation fileTree(dir: "${FRAMEWORK_PREBUILTS_DIR}/quickstep/libs", include: 'sysui_shared.jar') + + // Recents lib dependency for Go + withQuickstepIconRecentsImplementation fileTree(dir: "${FRAMEWORK_PREBUILTS_DIR}/quickstep/libs", include: 'sysui_shared.jar') - quickstepImplementation fileTree(dir: "quickstep/libs", include: 'sysui_shared.jar') + // Required for AOSP to compile. This is already included in the sysui_shared.jar + withoutQuickstepImplementation fileTree(dir: "${FRAMEWORK_PREBUILTS_DIR}/libs", include: 'plugin_core.jar') testImplementation 'junit:junit:4.12' androidTestImplementation "org.mockito:mockito-core:1.9.5" @@ -132,7 +169,7 @@ dependencies { androidTestImplementation 'com.android.support.test:runner:1.0.0' androidTestImplementation 'com.android.support.test:rules:1.0.0' androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' - androidTestImplementation "com.android.support:support-annotations:${SUPPORT_LIBS_VERSION}" + androidTestImplementation "androidx.annotation:annotation:${ANDROID_X_VERSION}" } protobuf { diff --git a/go/AndroidManifest.xml b/go/AndroidManifest.xml index 0a9ad7b5ad1e3e98d844ddcdac55c9facbf4bf41..fae1efffe0d1924a1057e874746bd9ce798e4c85 100644 --- a/go/AndroidManifest.xml +++ b/go/AndroidManifest.xml @@ -22,7 +22,7 @@ xmlns:tools="http://schemas.android.com/tools" package="com.android.launcher3" > - + - + - - - diff --git a/go/quickstep/res/drawable/clear_all_button.xml b/go/quickstep/res/drawable/clear_all_button.xml new file mode 100644 index 0000000000000000000000000000000000000000..acac32de5ed504da2420d4f90b7bb49e259d33bd --- /dev/null +++ b/go/quickstep/res/drawable/clear_all_button.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/go/quickstep/res/drawable/default_thumbnail.xml b/go/quickstep/res/drawable/default_thumbnail.xml new file mode 100644 index 0000000000000000000000000000000000000000..ab22dcf827e99d9c50183566686e164cfb2923d9 --- /dev/null +++ b/go/quickstep/res/drawable/default_thumbnail.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/go/quickstep/res/drawable/empty_content_box.xml b/go/quickstep/res/drawable/empty_content_box.xml new file mode 100644 index 0000000000000000000000000000000000000000..a4883889feba8ab6eabffb27b4d26e99f60dbe11 --- /dev/null +++ b/go/quickstep/res/drawable/empty_content_box.xml @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/go/quickstep/res/layout/clear_all_button.xml b/go/quickstep/res/layout/clear_all_button.xml new file mode 100644 index 0000000000000000000000000000000000000000..eef66add4522a774097eb24c63728783199e829a --- /dev/null +++ b/go/quickstep/res/layout/clear_all_button.xml @@ -0,0 +1,34 @@ + + + +