diff options
author | Hyunyoung Song <hyunyoungs@google.com> | 2015-07-21 17:01:26 -0700 |
---|---|---|
committer | Ed Heyl <edheyl@google.com> | 2015-07-22 11:31:04 -0700 |
commit | e612775922ec9f8cc4e5cb976bc62b3312a3de0e (patch) | |
tree | 96beaf07307486f6491f022da63ebe381765d1a8 | |
parent | a83129f0bc778fd1ccd799bd8cfa40270f632e1d (diff) | |
download | android_packages_apps_Trebuchet-e612775922ec9f8cc4e5cb976bc62b3312a3de0e.tar.gz android_packages_apps_Trebuchet-e612775922ec9f8cc4e5cb976bc62b3312a3de0e.tar.bz2 android_packages_apps_Trebuchet-e612775922ec9f8cc4e5cb976bc62b3312a3de0e.zip |
resolved conflicts for merge of 13ef17a3 to mnc-dr-dev
b/22609402
Change-Id: I140cf972d57e14737a6f91c0b4a8ec6c7ff1af2b
630 files changed, 23677 insertions, 21563 deletions
diff --git a/.gitignore b/.gitignore index f830c66eb..aea5d6102 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,10 @@ db_files +*.iml +.project +.classpath +.project.properties +gen/ +tests/stress/gen/ +WallpaperPicker/gen/ +WallpaperPicker/.project.properties +bin/ diff --git a/Android.mk b/Android.mk index 2a406e76d..134cfb5b0 100644 --- a/Android.mk +++ b/Android.mk @@ -23,28 +23,23 @@ include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional -LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13 - LOCAL_SRC_FILES := $(call all-java-files-under, src) \ $(call all-java-files-under, WallpaperPicker/src) \ - $(call all-renderscript-files-under, src) \ $(call all-proto-files-under, protos) LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/WallpaperPicker/res $(LOCAL_PATH)/res - -LOCAL_AAPT_FLAGS := --auto-add-overlay +LOCAL_PROGUARD_FLAG_FILES := proguard.flags +LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 android-support-v7-recyclerview LOCAL_PROTOC_OPTIMIZE_TYPE := nano LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/protos/ +LOCAL_AAPT_FLAGS := --auto-add-overlay -LOCAL_SDK_VERSION := 21 - +LOCAL_SDK_VERSION := current LOCAL_PACKAGE_NAME := Launcher3 #LOCAL_CERTIFICATE := shared LOCAL_OVERRIDES_PACKAGES := Home Launcher2 -LOCAL_PROGUARD_FLAG_FILES := proguard.flags - include $(BUILD_PACKAGE) @@ -83,4 +78,6 @@ $(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/util/etc/launcher_protoutil | $(ACP) $(copy-file-to-new-target) $(hide) chmod 755 $@ +INTERNAL_DALVIK_MODULES += $(LOCAL_INSTALLED_MODULE) + include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index fb7ac3fab..1fb8e8d01 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -29,12 +29,6 @@ android:label="@string/permlab_install_shortcut" android:description="@string/permdesc_install_shortcut" /> <permission - android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" - android:permissionGroup="android.permission-group.SYSTEM_TOOLS" - android:protectionLevel="dangerous" - android:label="@string/permlab_uninstall_shortcut" - android:description="@string/permdesc_uninstall_shortcut"/> - <permission android:name="com.android.launcher3.permission.READ_SETTINGS" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="normal" @@ -71,7 +65,6 @@ <uses-permission android:name="com.android.launcher3.permission.RECEIVE_FIRST_LOAD_BROADCAST" /> <application - android:name="com.android.launcher3.LauncherApplication" android:allowBackup="@bool/enable_backup" android:backupAgent="com.android.launcher3.LauncherBackupAgentHelper" android:hardwareAccelerated="true" @@ -89,6 +82,8 @@ android:theme="@style/Theme" android:windowSoftInputMode="adjustPan" android:screenOrientation="nosensor" + android:resumeWhilePausing="true" + android:taskAffinity="" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -98,8 +93,10 @@ </intent-filter> </activity> + <!-- ENABLE_FOR_TESTING + <activity - android:name="com.android.launcher3.LauncherExtension" + android:name="com.android.launcher3.testing.LauncherExtension" android:launchMode="singleTask" android:clearTaskOnLaunch="true" android:stateNotNeeded="true" @@ -115,6 +112,8 @@ </intent-filter> </activity> + --> + <activity android:name="com.android.launcher3.ToggleWeightWatcher" android:label="@string/toggle_weight_watcher" @@ -128,7 +127,7 @@ </activity> <activity - android:name="com.android.launcher3.LauncherWallpaperPickerActivity" + android:name="com.android.launcher3.WallpaperPickerActivity" android:theme="@style/Theme.WallpaperPicker" android:label="@string/pick_wallpaper" android:icon="@mipmap/ic_launcher_wallpaper" @@ -154,6 +153,13 @@ </intent-filter> </activity> + <activity + android:name="com.android.launcher3.SettingsActivity" + android:label="@string/settings_button_text" + android:autoRemoveFromRecents="true" + android:process=":settings_process"> + </activity> + <!-- Debugging tools --> <activity android:name="com.android.launcher3.MemoryDumpActivity" @@ -191,15 +197,6 @@ </intent-filter> </receiver> - <!-- Intent received used to uninstall shortcuts from other applications --> - <receiver - android:name="com.android.launcher3.UninstallShortcutReceiver" - android:permission="com.android.launcher.permission.UNINSTALL_SHORTCUT"> - <intent-filter> - <action android:name="com.android.launcher.action.UNINSTALL_SHORTCUT" /> - </intent-filter> - </receiver> - <!-- Intent received used to initialize a restored widget --> <receiver android:name="com.android.launcher3.AppWidgetsRestoredReceiver" > <intent-filter> @@ -207,24 +204,6 @@ </intent-filter> </receiver> - <!-- New user initialization; set up initial wallpaper --> - <receiver - android:name="com.android.launcher3.UserInitializeReceiver" - android:exported="false"> - <intent-filter> - <action android:name="android.intent.action.USER_INITIALIZE" /> - </intent-filter> - </receiver> - - <receiver android:name="com.android.launcher3.PackageChangedReceiver" > - <intent-filter> - <action android:name="android.intent.action.PACKAGE_CHANGED"/> - <action android:name="android.intent.action.PACKAGE_REPLACED"/> - <action android:name="android.intent.action.PACKAGE_REMOVED"/> - <data android:scheme="package"></data> - </intent-filter> - </receiver> - <receiver android:name="com.android.launcher3.StartupReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> diff --git a/WallpaperPicker/AndroidManifest.xml b/WallpaperPicker/AndroidManifest.xml index 86a94d078..cb1457bdc 100644 --- a/WallpaperPicker/AndroidManifest.xml +++ b/WallpaperPicker/AndroidManifest.xml @@ -5,6 +5,6 @@ android:versionName="1.0" > - <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="19" /> - + <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" /> + <application/> </manifest> diff --git a/WallpaperPicker/res/drawable-hdpi/ic_images.png b/WallpaperPicker/res/drawable-hdpi/ic_images.png Binary files differindex 0003c6c65..15e511c89 100644 --- a/WallpaperPicker/res/drawable-hdpi/ic_images.png +++ b/WallpaperPicker/res/drawable-hdpi/ic_images.png diff --git a/WallpaperPicker/res/drawable-mdpi/ic_images.png b/WallpaperPicker/res/drawable-mdpi/ic_images.png Binary files differindex aabc1237a..c4a2229e9 100644 --- a/WallpaperPicker/res/drawable-mdpi/ic_images.png +++ b/WallpaperPicker/res/drawable-mdpi/ic_images.png diff --git a/WallpaperPicker/res/drawable-xhdpi/ic_images.png b/WallpaperPicker/res/drawable-xhdpi/ic_images.png Binary files differindex 3f21faf8f..497479291 100644 --- a/WallpaperPicker/res/drawable-xhdpi/ic_images.png +++ b/WallpaperPicker/res/drawable-xhdpi/ic_images.png diff --git a/WallpaperPicker/res/drawable-xxhdpi/ic_images.png b/WallpaperPicker/res/drawable-xxhdpi/ic_images.png Binary files differindex d00db9a00..c8b9f757a 100644 --- a/WallpaperPicker/res/drawable-xxhdpi/ic_images.png +++ b/WallpaperPicker/res/drawable-xxhdpi/ic_images.png diff --git a/WallpaperPicker/res/drawable-xxxhdpi/ic_images.png b/WallpaperPicker/res/drawable-xxxhdpi/ic_images.png Binary files differnew file mode 100644 index 000000000..a19002e47 --- /dev/null +++ b/WallpaperPicker/res/drawable-xxxhdpi/ic_images.png diff --git a/WallpaperPicker/res/layout/wallpaper_cropper.xml b/WallpaperPicker/res/layout/wallpaper_cropper.xml index abb860898..ffe8df0fb 100644 --- a/WallpaperPicker/res/layout/wallpaper_cropper.xml +++ b/WallpaperPicker/res/layout/wallpaper_cropper.xml @@ -19,7 +19,6 @@ --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/wallpaper_root" android:layout_width="match_parent" android:layout_height="match_parent"> <com.android.launcher3.CropView @@ -28,7 +27,7 @@ android:layout_height="match_parent" /> <ProgressBar android:id="@+id/loading" - style="@android:style/Widget.Holo.ProgressBar.Large" + style="?android:attr/progressBarStyleLarge" android:visibility="invisible" android:layout_width="wrap_content" android:layout_height="wrap_content" diff --git a/WallpaperPicker/res/layout/wallpaper_picker.xml b/WallpaperPicker/res/layout/wallpaper_picker.xml index c36493d2f..0b970b09f 100644 --- a/WallpaperPicker/res/layout/wallpaper_picker.xml +++ b/WallpaperPicker/res/layout/wallpaper_picker.xml @@ -18,60 +18,74 @@ */ --> -<com.android.launcher3.WallpaperRootView - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/wallpaper_root" +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" > + <com.android.launcher3.CropView android:id="@+id/cropView" android:layout_width="match_parent" android:layout_height="match_parent" /> + <ProgressBar android:id="@+id/loading" - style="@android:style/Widget.Holo.ProgressBar.Large" - android:visibility="invisible" + style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_centerInParent="true" + android:layout_gravity="center" android:indeterminate="true" android:indeterminateOnly="true" - android:background="@android:color/transparent" /> + android:visibility="invisible" /> + <LinearLayout android:id="@+id/wallpaper_strip" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_alignParentBottom="true" + android:layout_gravity="bottom" + android:fitsSystemWindows="true" android:orientation="vertical" > + <View android:layout_width="match_parent" android:layout_height="2dp" android:background="@drawable/tile_shadow_top" /> + <HorizontalScrollView android:id="@+id/wallpaper_scroll_container" android:layout_width="match_parent" android:layout_height="wrap_content" > - <LinearLayout android:id="@+id/master_wallpaper_list" + + <LinearLayout + android:id="@+id/master_wallpaper_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > - <LinearLayout android:id="@+id/wallpaper_list" + + <LinearLayout + android:id="@+id/wallpaper_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" /> - <LinearLayout android:id="@+id/live_wallpaper_list" + + <LinearLayout + android:id="@+id/live_wallpaper_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" /> - <LinearLayout android:id="@+id/third_party_wallpaper_list" + + <LinearLayout + android:id="@+id/third_party_wallpaper_list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" /> </LinearLayout> </HorizontalScrollView> + <View android:layout_width="match_parent" android:layout_height="2dp" android:background="@drawable/tile_shadow_bottom" /> </LinearLayout> -</com.android.launcher3.WallpaperRootView> + +</FrameLayout>
\ No newline at end of file diff --git a/WallpaperPicker/res/layout/wallpaper_picker_image_picker_item.xml b/WallpaperPicker/res/layout/wallpaper_picker_image_picker_item.xml index ae3c43d8e..dc6524486 100644 --- a/WallpaperPicker/res/layout/wallpaper_picker_image_picker_item.xml +++ b/WallpaperPicker/res/layout/wallpaper_picker_image_picker_item.xml @@ -20,7 +20,6 @@ android:layout_height="@dimen/wallpaperThumbnailHeight" android:focusable="true" android:clickable="true" - android:background="@drawable/wallpaper_tile_fg" android:foreground="@drawable/wallpaper_tile_fg"> <ImageView android:id="@+id/wallpaper_image" diff --git a/WallpaperPicker/res/layout/wallpaper_picker_item.xml b/WallpaperPicker/res/layout/wallpaper_picker_item.xml index 0ac8f97fb..3f57fcdbd 100644 --- a/WallpaperPicker/res/layout/wallpaper_picker_item.xml +++ b/WallpaperPicker/res/layout/wallpaper_picker_item.xml @@ -20,7 +20,6 @@ android:layout_height="@dimen/wallpaperThumbnailHeight" android:focusable="true" android:clickable="true" - android:background="@drawable/wallpaper_tile_fg" android:foreground="@drawable/wallpaper_tile_fg"> <ImageView android:id="@+id/wallpaper_image" diff --git a/WallpaperPicker/res/layout/wallpaper_picker_live_wallpaper_item.xml b/WallpaperPicker/res/layout/wallpaper_picker_live_wallpaper_item.xml index 29fdb1b82..2b152fce2 100644 --- a/WallpaperPicker/res/layout/wallpaper_picker_live_wallpaper_item.xml +++ b/WallpaperPicker/res/layout/wallpaper_picker_live_wallpaper_item.xml @@ -20,7 +20,6 @@ android:layout_height="@dimen/wallpaperThumbnailHeight" android:focusable="true" android:clickable="true" - android:background="@drawable/wallpaper_tile_fg" android:foreground="@drawable/wallpaper_tile_fg"> <ImageView android:id="@+id/wallpaper_image" diff --git a/WallpaperPicker/res/layout/wallpaper_picker_third_party_item.xml b/WallpaperPicker/res/layout/wallpaper_picker_third_party_item.xml index 68661bc00..a7e3a0c79 100644 --- a/WallpaperPicker/res/layout/wallpaper_picker_third_party_item.xml +++ b/WallpaperPicker/res/layout/wallpaper_picker_third_party_item.xml @@ -20,7 +20,6 @@ android:layout_height="@dimen/wallpaperThumbnailHeight" android:focusable="true" android:clickable="true" - android:background="@drawable/wallpaper_tile_fg" android:foreground="@drawable/wallpaper_tile_fg"> <ImageView android:id="@+id/wallpaper_image" diff --git a/WallpaperPicker/res/values-af/strings.xml b/WallpaperPicker/res/values-af/strings.xml index c17d26be0..eb816402a 100644 --- a/WallpaperPicker/res/values-af/strings.xml +++ b/WallpaperPicker/res/values-af/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Muurpapier %1$d van %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Het <xliff:g id="LABEL">%1$s</xliff:g> gekies"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Vee uit"</string> - <string name="pick_image" msgid="6704438906027442697">"Kies prent"</string> + <string name="pick_image" msgid="3189640419551368385">"My foto\'s"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Muurpapiere"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Snoei muurpapier"</string> </resources> diff --git a/WallpaperPicker/res/values-am/strings.xml b/WallpaperPicker/res/values-am/strings.xml index 59c3bf733..7e793856e 100644 --- a/WallpaperPicker/res/values-am/strings.xml +++ b/WallpaperPicker/res/values-am/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"ልጣፍ %1$d የ%2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> ተመርጧል"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"ሰርዝ"</string> - <string name="pick_image" msgid="6704438906027442697">"ምስል ይምረጡ"</string> + <string name="pick_image" msgid="3189640419551368385">"የእኔ ፎቶዎች"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"የግድግዳ ወረቀቶች"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"ልጣፍ ይከርክሙ"</string> </resources> diff --git a/WallpaperPicker/res/values-ar/strings.xml b/WallpaperPicker/res/values-ar/strings.xml index 2075cc875..84fa104db 100644 --- a/WallpaperPicker/res/values-ar/strings.xml +++ b/WallpaperPicker/res/values-ar/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"الخلفية %1$d من %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"تم تحديد <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"حذف"</string> - <string name="pick_image" msgid="6704438906027442697">"اختيار صورة"</string> + <string name="pick_image" msgid="3189640419551368385">"صوري"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"الخلفيات"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"اقتصاص الخلفية"</string> </resources> diff --git a/WallpaperPicker/res/values-az-rAZ/strings.xml b/WallpaperPicker/res/values-az-rAZ/strings.xml index f9d1fcced..883673dd6 100644 --- a/WallpaperPicker/res/values-az-rAZ/strings.xml +++ b/WallpaperPicker/res/values-az-rAZ/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Divar kağızı %1$d of %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> seçilib"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Sil"</string> - <string name="pick_image" msgid="6704438906027442697">"Şəkil seçin"</string> + <string name="pick_image" msgid="3189640419551368385">"Fotolarım"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Divar kağızları"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Divar kağızını kəsin"</string> </resources> diff --git a/WallpaperPicker/res/values-bg/strings.xml b/WallpaperPicker/res/values-bg/strings.xml index ce4fc651b..60ae3022f 100644 --- a/WallpaperPicker/res/values-bg/strings.xml +++ b/WallpaperPicker/res/values-bg/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Тапет %1$d от %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Избрахте <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Изтриване"</string> - <string name="pick_image" msgid="6704438906027442697">"Избиране на изображение"</string> + <string name="pick_image" msgid="3189640419551368385">"Моите снимки"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Тапети"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Подрязване на тапета"</string> </resources> diff --git a/WallpaperPicker/res/values-bn-rBD/strings.xml b/WallpaperPicker/res/values-bn-rBD/strings.xml index a4fccb208..74d7e57bd 100644 --- a/WallpaperPicker/res/values-bn-rBD/strings.xml +++ b/WallpaperPicker/res/values-bn-rBD/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%2$dটির মধ্যে %1$dটি ওয়ালপেপার"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> নির্বাচন করা হয়েছে"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"মুছুন"</string> - <string name="pick_image" msgid="6704438906027442697">"চিত্র বাছুন"</string> + <string name="pick_image" msgid="3189640419551368385">"আমার ফটো"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"ওয়ালপেপারগুলি"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"ওয়ালপেপার কাটছাঁট করুন"</string> </resources> diff --git a/WallpaperPicker/res/values-ca/strings.xml b/WallpaperPicker/res/values-ca/strings.xml index 89de81c30..cbec76250 100644 --- a/WallpaperPicker/res/values-ca/strings.xml +++ b/WallpaperPicker/res/values-ca/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Fons de pantalla %1$d de %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"S\'ha seleccionat <xliff:g id="LABEL">%1$s</xliff:g>."</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Suprimeix"</string> - <string name="pick_image" msgid="6704438906027442697">"Tria una imatge"</string> + <string name="pick_image" msgid="3189640419551368385">"Les meves fotos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Fons de pantalla"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Retallar fons de pantalla"</string> </resources> diff --git a/WallpaperPicker/res/values-cs/strings.xml b/WallpaperPicker/res/values-cs/strings.xml index a07b9eda2..da0758e0a 100644 --- a/WallpaperPicker/res/values-cs/strings.xml +++ b/WallpaperPicker/res/values-cs/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Tapeta %1$d z %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Vybrána položka <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Smazat"</string> - <string name="pick_image" msgid="6704438906027442697">"Vybrat obrázek"</string> + <string name="pick_image" msgid="3189640419551368385">"Moje fotografie"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Tapety"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Oříznutí tapety"</string> </resources> diff --git a/WallpaperPicker/res/values-da/strings.xml b/WallpaperPicker/res/values-da/strings.xml index 5b233e1d0..12c0fe87e 100644 --- a/WallpaperPicker/res/values-da/strings.xml +++ b/WallpaperPicker/res/values-da/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Baggrund %1$d af %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> blev valgt"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Slet"</string> - <string name="pick_image" msgid="6704438906027442697">"Vælg et billede"</string> + <string name="pick_image" msgid="3189640419551368385">"Mine billeder"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Baggrunde"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Beskær baggrunden"</string> </resources> diff --git a/WallpaperPicker/res/values-de/strings.xml b/WallpaperPicker/res/values-de/strings.xml index 11c1cac6a..3171b3f3a 100644 --- a/WallpaperPicker/res/values-de/strings.xml +++ b/WallpaperPicker/res/values-de/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Hintergrund %1$d von %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> ausgewählt"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Löschen"</string> - <string name="pick_image" msgid="6704438906027442697">"Bild auswählen"</string> + <string name="pick_image" msgid="3189640419551368385">"Meine Fotos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Hintergründe"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Hintergrund zuschneiden"</string> </resources> diff --git a/WallpaperPicker/res/values-el/strings.xml b/WallpaperPicker/res/values-el/strings.xml index 8e1e78fb9..2988beced 100644 --- a/WallpaperPicker/res/values-el/strings.xml +++ b/WallpaperPicker/res/values-el/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Ταπετσαρία %1$d από %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Επιλέχθηκε το <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Διαγραφή"</string> - <string name="pick_image" msgid="6704438906027442697">"Επιλογή εικόνας"</string> + <string name="pick_image" msgid="3189640419551368385">"Οι φωτογραφίες μου"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Ταπετσαρίες"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Περικοπή ταπετσαρίας"</string> </resources> diff --git a/WallpaperPicker/res/values-en-rAU/strings.xml b/WallpaperPicker/res/values-en-rAU/strings.xml index c057c0cb3..30450ee81 100644 --- a/WallpaperPicker/res/values-en-rAU/strings.xml +++ b/WallpaperPicker/res/values-en-rAU/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Wallpaper %1$d of %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Selected <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Delete"</string> - <string name="pick_image" msgid="6704438906027442697">"Pick image"</string> + <string name="pick_image" msgid="3189640419551368385">"My photos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Wallpapers"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Crop wallpaper"</string> </resources> diff --git a/WallpaperPicker/res/values-en-rGB/strings.xml b/WallpaperPicker/res/values-en-rGB/strings.xml index c057c0cb3..30450ee81 100644 --- a/WallpaperPicker/res/values-en-rGB/strings.xml +++ b/WallpaperPicker/res/values-en-rGB/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Wallpaper %1$d of %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Selected <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Delete"</string> - <string name="pick_image" msgid="6704438906027442697">"Pick image"</string> + <string name="pick_image" msgid="3189640419551368385">"My photos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Wallpapers"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Crop wallpaper"</string> </resources> diff --git a/WallpaperPicker/res/values-en-rIN/strings.xml b/WallpaperPicker/res/values-en-rIN/strings.xml index c057c0cb3..30450ee81 100644 --- a/WallpaperPicker/res/values-en-rIN/strings.xml +++ b/WallpaperPicker/res/values-en-rIN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Wallpaper %1$d of %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Selected <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Delete"</string> - <string name="pick_image" msgid="6704438906027442697">"Pick image"</string> + <string name="pick_image" msgid="3189640419551368385">"My photos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Wallpapers"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Crop wallpaper"</string> </resources> diff --git a/WallpaperPicker/res/values-es-rUS/strings.xml b/WallpaperPicker/res/values-es-rUS/strings.xml index 768385b9e..c18ecb233 100644 --- a/WallpaperPicker/res/values-es-rUS/strings.xml +++ b/WallpaperPicker/res/values-es-rUS/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Fondo de pantalla %1$d de %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> seleccionado"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Eliminar"</string> - <string name="pick_image" msgid="6704438906027442697">"Elegir imagen"</string> + <string name="pick_image" msgid="3189640419551368385">"Mis fotos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Fondos de pantalla"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Recortar fondo de pantalla"</string> </resources> diff --git a/WallpaperPicker/res/values-es/strings.xml b/WallpaperPicker/res/values-es/strings.xml index 702b6d413..b7221af2a 100644 --- a/WallpaperPicker/res/values-es/strings.xml +++ b/WallpaperPicker/res/values-es/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Fondo de pantalla %1$d de %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> seleccionado"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Eliminar"</string> - <string name="pick_image" msgid="6704438906027442697">"Seleccionar imagen"</string> + <string name="pick_image" msgid="3189640419551368385">"Mis fotos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Fondos de pantalla"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Recortar fondo de pantalla"</string> </resources> diff --git a/WallpaperPicker/res/values-et-rEE/strings.xml b/WallpaperPicker/res/values-et-rEE/strings.xml index c09e223d9..571a0ffbd 100644 --- a/WallpaperPicker/res/values-et-rEE/strings.xml +++ b/WallpaperPicker/res/values-et-rEE/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d/%2$d taustapildist"</string> <string name="announce_selection" msgid="123723511662250539">"Valitud on <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Kustuta"</string> - <string name="pick_image" msgid="6704438906027442697">"Vali kujutis"</string> + <string name="pick_image" msgid="3189640419551368385">"Minu fotod"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Taustapildid"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Taustapildi kärpimine"</string> </resources> diff --git a/WallpaperPicker/res/values-eu-rES/strings.xml b/WallpaperPicker/res/values-eu-rES/strings.xml index 327550d52..45bf7a106 100644 --- a/WallpaperPicker/res/values-eu-rES/strings.xml +++ b/WallpaperPicker/res/values-eu-rES/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d/%2$d horma-papera"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> hautatu da"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Ezabatu"</string> - <string name="pick_image" msgid="6704438906027442697">"Hautatu irudia"</string> + <string name="pick_image" msgid="3189640419551368385">"Nire argazkiak"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Horma-paperak"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Ebaki horma-papera"</string> </resources> diff --git a/WallpaperPicker/res/values-fa/strings.xml b/WallpaperPicker/res/values-fa/strings.xml index e1d26a868..469ec1263 100644 --- a/WallpaperPicker/res/values-fa/strings.xml +++ b/WallpaperPicker/res/values-fa/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"کاغذدیواری %1$d از %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> انتخاب شد"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"حذف"</string> - <string name="pick_image" msgid="6704438906027442697">"انتخاب تصویر"</string> + <string name="pick_image" msgid="3189640419551368385">"عکسهای من"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"کاغذدیواریها"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"برش کاغذدیواری"</string> </resources> diff --git a/WallpaperPicker/res/values-fi/strings.xml b/WallpaperPicker/res/values-fi/strings.xml index 0fa4b7bcf..c82d3e0ed 100644 --- a/WallpaperPicker/res/values-fi/strings.xml +++ b/WallpaperPicker/res/values-fi/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Taustakuva %1$d/%2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Valittu: <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Poista"</string> - <string name="pick_image" msgid="6704438906027442697">"Valitse kuva"</string> + <string name="pick_image" msgid="3189640419551368385">"Omat valokuvat"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Taustakuvat"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Rajaa taustakuva"</string> </resources> diff --git a/WallpaperPicker/res/values-fr-rCA/strings.xml b/WallpaperPicker/res/values-fr-rCA/strings.xml index e95670678..92568966e 100644 --- a/WallpaperPicker/res/values-fr-rCA/strings.xml +++ b/WallpaperPicker/res/values-fr-rCA/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Fond d\'écran %1$d de %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Sélection : <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Supprimer"</string> - <string name="pick_image" msgid="6704438906027442697">"Choisir une image"</string> + <string name="pick_image" msgid="3189640419551368385">"Mes photos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Fonds d\'écran"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Rogner le fond d\'écran"</string> </resources> diff --git a/WallpaperPicker/res/values-fr/strings.xml b/WallpaperPicker/res/values-fr/strings.xml index 37846e0f5..479a7e430 100644 --- a/WallpaperPicker/res/values-fr/strings.xml +++ b/WallpaperPicker/res/values-fr/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Fond d\'écran %1$d sur %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> sélectionné"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Supprimer"</string> - <string name="pick_image" msgid="6704438906027442697">"Sélectionner une image"</string> + <string name="pick_image" msgid="3189640419551368385">"Mes photos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Fonds d\'écran"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Recadrer le fond d\'écran"</string> </resources> diff --git a/WallpaperPicker/res/values-gl-rES/strings.xml b/WallpaperPicker/res/values-gl-rES/strings.xml index 9f1fd5014..0396b2f62 100644 --- a/WallpaperPicker/res/values-gl-rES/strings.xml +++ b/WallpaperPicker/res/values-gl-rES/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Fondo de pantalla %1$d de %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Seleccionaches <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Eliminar"</string> - <string name="pick_image" msgid="6704438906027442697">"Escoller imaxe"</string> + <string name="pick_image" msgid="3189640419551368385">"As miñas fotos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Fondos de pantalla"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Recortar fondo de pantalla"</string> </resources> diff --git a/WallpaperPicker/res/values-gu-rIN/strings.xml b/WallpaperPicker/res/values-gu-rIN/strings.xml index acee01cfc..e201d523f 100644 --- a/WallpaperPicker/res/values-gu-rIN/strings.xml +++ b/WallpaperPicker/res/values-gu-rIN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%2$d માંથી %1$d વૉલપેપર"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> પસંદ કર્યો"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"કાઢી નાખો"</string> - <string name="pick_image" msgid="6704438906027442697">"છબી ચૂંટો"</string> + <string name="pick_image" msgid="3189640419551368385">"મારા ફોટા"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"વૉલપેપર્સ"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"વૉલપેપર કાપો"</string> </resources> diff --git a/WallpaperPicker/res/values-hi/strings.xml b/WallpaperPicker/res/values-hi/strings.xml index fcb252eb5..60834e103 100644 --- a/WallpaperPicker/res/values-hi/strings.xml +++ b/WallpaperPicker/res/values-hi/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"वॉलपेपर %2$d में से %1$d"</string> <string name="announce_selection" msgid="123723511662250539">"चयनित <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"हटाएं"</string> - <string name="pick_image" msgid="6704438906027442697">"चित्र चुनें"</string> + <string name="pick_image" msgid="3189640419551368385">"मेरी फ़ोटो"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"वॉलपेपर"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"वॉलपेपर काटें"</string> </resources> diff --git a/WallpaperPicker/res/values-hr/strings.xml b/WallpaperPicker/res/values-hr/strings.xml index 3d79e8f0c..9ed702c5a 100644 --- a/WallpaperPicker/res/values-hr/strings.xml +++ b/WallpaperPicker/res/values-hr/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d. pozadinska slika od %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Odabrana je <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Izbriši"</string> - <string name="pick_image" msgid="6704438906027442697">"Odaberi sliku"</string> + <string name="pick_image" msgid="3189640419551368385">"Moje fotografije"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Pozadine"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Obrezivanje pozadinske slike"</string> </resources> diff --git a/WallpaperPicker/res/values-hu/strings.xml b/WallpaperPicker/res/values-hu/strings.xml index 703aa12eb..d8b08fdfd 100644 --- a/WallpaperPicker/res/values-hu/strings.xml +++ b/WallpaperPicker/res/values-hu/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d/%2$d. háttérkép"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> kiválasztva"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Törlés"</string> - <string name="pick_image" msgid="6704438906027442697">"Kép kiválasztása"</string> + <string name="pick_image" msgid="3189640419551368385">"Saját fotók"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Háttérképek"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Háttérkép körbevágása"</string> </resources> diff --git a/WallpaperPicker/res/values-hy-rAM/strings.xml b/WallpaperPicker/res/values-hy-rAM/strings.xml index f3891dd35..027b841a7 100644 --- a/WallpaperPicker/res/values-hy-rAM/strings.xml +++ b/WallpaperPicker/res/values-hy-rAM/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d պաստառ՝ %2$d-ից"</string> <string name="announce_selection" msgid="123723511662250539">"Ընտրված է <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Ջնջել"</string> - <string name="pick_image" msgid="6704438906027442697">"Ընտրել պատկեր"</string> + <string name="pick_image" msgid="3189640419551368385">"Իմ լուսանկարները"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Պաստառներ"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Եզրատել պաստառը"</string> </resources> diff --git a/WallpaperPicker/res/values-in/strings.xml b/WallpaperPicker/res/values-in/strings.xml index f216cf343..91554522f 100644 --- a/WallpaperPicker/res/values-in/strings.xml +++ b/WallpaperPicker/res/values-in/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Wallpaper %1$d dari %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> terpilih"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Hapus"</string> - <string name="pick_image" msgid="6704438906027442697">"Pilih gambar"</string> + <string name="pick_image" msgid="3189640419551368385">"Foto saya"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Wallpaper"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Pangkas wallpaper"</string> </resources> diff --git a/WallpaperPicker/res/values-is-rIS/strings.xml b/WallpaperPicker/res/values-is-rIS/strings.xml index 6d5d680cf..69e6cd498 100644 --- a/WallpaperPicker/res/values-is-rIS/strings.xml +++ b/WallpaperPicker/res/values-is-rIS/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Veggfóður %1$d af %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> valið"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Eyða"</string> - <string name="pick_image" msgid="6704438906027442697">"Velja mynd"</string> + <string name="pick_image" msgid="3189640419551368385">"Myndirnar mínar"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Veggfóður"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Skera veggfóður"</string> </resources> diff --git a/WallpaperPicker/res/values-it/strings.xml b/WallpaperPicker/res/values-it/strings.xml index c29946f85..f4d38d14e 100644 --- a/WallpaperPicker/res/values-it/strings.xml +++ b/WallpaperPicker/res/values-it/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Sfondo %1$d di %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Elemento selezionato: <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Elimina"</string> - <string name="pick_image" msgid="6704438906027442697">"Scegli l\'immagine"</string> + <string name="pick_image" msgid="3189640419551368385">"Le mie foto"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Sfondi"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Ritaglia sfondo"</string> </resources> diff --git a/WallpaperPicker/res/values-iw/strings.xml b/WallpaperPicker/res/values-iw/strings.xml index ddc96e92c..e29f2372f 100644 --- a/WallpaperPicker/res/values-iw/strings.xml +++ b/WallpaperPicker/res/values-iw/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"טפט %1$d מתוך %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"בחרת <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"מחק"</string> - <string name="pick_image" msgid="6704438906027442697">"בחר תמונה"</string> + <string name="pick_image" msgid="3189640419551368385">"התמונות שלי"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"טפטים"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"חתוך את הטפט"</string> </resources> diff --git a/WallpaperPicker/res/values-ja/strings.xml b/WallpaperPicker/res/values-ja/strings.xml index 80b094453..e86026bf9 100644 --- a/WallpaperPicker/res/values-ja/strings.xml +++ b/WallpaperPicker/res/values-ja/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"壁紙: %1$d/%2$d"</string> <string name="announce_selection" msgid="123723511662250539">"選択: <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"削除"</string> - <string name="pick_image" msgid="6704438906027442697">"画像を選択"</string> + <string name="pick_image" msgid="3189640419551368385">"マイフォト"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"壁紙"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"壁紙のトリミング"</string> </resources> diff --git a/WallpaperPicker/res/values-ka-rGE/strings.xml b/WallpaperPicker/res/values-ka-rGE/strings.xml index 2f59712d8..1ae10214a 100644 --- a/WallpaperPicker/res/values-ka-rGE/strings.xml +++ b/WallpaperPicker/res/values-ka-rGE/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"ფონი %1$d %2$d-დან"</string> <string name="announce_selection" msgid="123723511662250539">"არჩეული <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"წაშლა"</string> - <string name="pick_image" msgid="6704438906027442697">"სურათის ამორჩევა"</string> + <string name="pick_image" msgid="3189640419551368385">"ჩემი ფოტოები"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"ფონები"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"ფონის ჩამოჭრა"</string> </resources> diff --git a/WallpaperPicker/res/values-kk-rKZ/strings.xml b/WallpaperPicker/res/values-kk-rKZ/strings.xml index dcf372cf5..a10e27318 100644 --- a/WallpaperPicker/res/values-kk-rKZ/strings.xml +++ b/WallpaperPicker/res/values-kk-rKZ/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d артқы фон, барлығы %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> таңдалған"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Жою"</string> - <string name="pick_image" msgid="6704438906027442697">"Суретті таңдау"</string> + <string name="pick_image" msgid="3189640419551368385">"Менің фотосуреттерім"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Артқы фондар"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Артқы фонды кесу"</string> </resources> diff --git a/WallpaperPicker/res/values-km-rKH/strings.xml b/WallpaperPicker/res/values-km-rKH/strings.xml index 41722355f..2a605e86a 100644 --- a/WallpaperPicker/res/values-km-rKH/strings.xml +++ b/WallpaperPicker/res/values-km-rKH/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"ផ្ទាំងរូបភាព %1$d នៃ %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"បានជ្រើស <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"លុប"</string> - <string name="pick_image" msgid="6704438906027442697">"ជ្រើសយករូបភាព"</string> + <string name="pick_image" msgid="3189640419551368385">"រូបថតរបស់ខ្ញុំ"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"ផ្ទាំងរូបភាព"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"ច្រឹបផ្ទាំងរូបភាព"</string> </resources> diff --git a/WallpaperPicker/res/values-kn-rIN/strings.xml b/WallpaperPicker/res/values-kn-rIN/strings.xml index 89203bf1c..b69bda529 100644 --- a/WallpaperPicker/res/values-kn-rIN/strings.xml +++ b/WallpaperPicker/res/values-kn-rIN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%2$d ರಲ್ಲಿ %1$d ವಾಲ್ಪೇಪರ್"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"ಅಳಿಸು"</string> - <string name="pick_image" msgid="6704438906027442697">"ಚಿತ್ರವನ್ನು ಆರಿಸಿ"</string> + <string name="pick_image" msgid="3189640419551368385">"ನನ್ನ ಫೋಟೋಗಳು"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"ವಾಲ್ಪೇಪರ್ಗಳು"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"ವಾಲ್ಪೇಪರ್ ಕತ್ತರಿಸಿ"</string> </resources> diff --git a/WallpaperPicker/res/values-ko/strings.xml b/WallpaperPicker/res/values-ko/strings.xml index a5a85b773..30e7cfa23 100644 --- a/WallpaperPicker/res/values-ko/strings.xml +++ b/WallpaperPicker/res/values-ko/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"배경화면 %1$d/%2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> 선택함"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"삭제"</string> - <string name="pick_image" msgid="6704438906027442697">"이미지 선택"</string> + <string name="pick_image" msgid="3189640419551368385">"내 사진"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"배경화면"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"배경화면 잘라내기"</string> </resources> diff --git a/WallpaperPicker/res/values-ky-rKG/strings.xml b/WallpaperPicker/res/values-ky-rKG/strings.xml index 696b3ee17..f1ebf095d 100644 --- a/WallpaperPicker/res/values-ky-rKG/strings.xml +++ b/WallpaperPicker/res/values-ky-rKG/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%2$d ичинен %1$d тушкагаз"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> тандалды"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Жок кылуу"</string> - <string name="pick_image" msgid="6704438906027442697">"Сүрөт тандоо"</string> + <string name="pick_image" msgid="3189640419551368385">"Менин сүрөттөрүм"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Тушкагаздар"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Тушкагазды тегиздөө"</string> </resources> diff --git a/WallpaperPicker/res/values-lo-rLA/strings.xml b/WallpaperPicker/res/values-lo-rLA/strings.xml index e46859111..e32cafb7d 100644 --- a/WallpaperPicker/res/values-lo-rLA/strings.xml +++ b/WallpaperPicker/res/values-lo-rLA/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"ພາບພື້ນຫຼັງ %1$d ໃນ %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"ເລືອກ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"ລຶບ"</string> - <string name="pick_image" msgid="6704438906027442697">"ເລືອກຮູບພາບ"</string> + <string name="pick_image" msgid="3189640419551368385">"ຮູບຂອງຂ້ອຍ"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"ພາບພື້ນຫຼັງ"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"ຕັດພາບພື້ນຫຼັງ"</string> </resources> diff --git a/WallpaperPicker/res/values-lt/strings.xml b/WallpaperPicker/res/values-lt/strings.xml index 86035b883..c442e3a5a 100644 --- a/WallpaperPicker/res/values-lt/strings.xml +++ b/WallpaperPicker/res/values-lt/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d ekrano fonas iš %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Pasirinkta: <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Ištrinti"</string> - <string name="pick_image" msgid="6704438906027442697">"Pasirinkti vaizdą"</string> + <string name="pick_image" msgid="3189640419551368385">"Mano nuotraukos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Ekrano fonai"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Apkirpti ekrano foną"</string> </resources> diff --git a/WallpaperPicker/res/values-lv/strings.xml b/WallpaperPicker/res/values-lv/strings.xml index 02e5cfb22..d05a17547 100644 --- a/WallpaperPicker/res/values-lv/strings.xml +++ b/WallpaperPicker/res/values-lv/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d. fona tapete no %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Atlasīta: <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Dzēst"</string> - <string name="pick_image" msgid="6704438906027442697">"Izvēlēties attēlu"</string> + <string name="pick_image" msgid="3189640419551368385">"Mani fotoattēli"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Fona tapetes"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Apgriezt fona tapeti"</string> </resources> diff --git a/WallpaperPicker/res/values-mk-rMK/strings.xml b/WallpaperPicker/res/values-mk-rMK/strings.xml index b1919ccd4..f9e0963ed 100644 --- a/WallpaperPicker/res/values-mk-rMK/strings.xml +++ b/WallpaperPicker/res/values-mk-rMK/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Тапет %1$d од %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Избран <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Избриши"</string> - <string name="pick_image" msgid="6704438906027442697">"Избери слика"</string> + <string name="pick_image" msgid="3189640419551368385">"Моите фотографии"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Тапети"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Исечи тапет"</string> </resources> diff --git a/WallpaperPicker/res/values-ml-rIN/strings.xml b/WallpaperPicker/res/values-ml-rIN/strings.xml index 0b6a4c108..6be771c0e 100644 --- a/WallpaperPicker/res/values-ml-rIN/strings.xml +++ b/WallpaperPicker/res/values-ml-rIN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d / %2$d വാൾപേപ്പർ"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> തിരഞ്ഞെടുത്തു"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"ഇല്ലാതാക്കുക"</string> - <string name="pick_image" msgid="6704438906027442697">"ചിത്രം തിരഞ്ഞെടുക്കുക"</string> + <string name="pick_image" msgid="3189640419551368385">"എന്റെ ഫോട്ടോകൾ"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"വാൾപേപ്പറുകൾ"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"വാൾപേപ്പറിന്റെ വലുപ്പം മാറ്റൽ"</string> </resources> diff --git a/WallpaperPicker/res/values-mn-rMN/strings.xml b/WallpaperPicker/res/values-mn-rMN/strings.xml index 71ff9e0f7..b88da5a96 100644 --- a/WallpaperPicker/res/values-mn-rMN/strings.xml +++ b/WallpaperPicker/res/values-mn-rMN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%2$d ханын цаасны %1$d нь"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> сонгогдсон"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Устгах"</string> - <string name="pick_image" msgid="6704438906027442697">"Зураг сонгох"</string> + <string name="pick_image" msgid="3189640419551368385">"Миний зураг"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Ханын зураг"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Ханын зургийг тайрах"</string> </resources> diff --git a/WallpaperPicker/res/values-mr-rIN/strings.xml b/WallpaperPicker/res/values-mr-rIN/strings.xml index 33cfaa148..128b21c1c 100644 --- a/WallpaperPicker/res/values-mr-rIN/strings.xml +++ b/WallpaperPicker/res/values-mr-rIN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%2$d पैकी %1$d वॉलपेपर"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> निवडले"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"हटवा"</string> - <string name="pick_image" msgid="6704438906027442697">"प्रतिमा निवडा"</string> + <string name="pick_image" msgid="3189640419551368385">"माझे फोटो"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"वॉलपेपर"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"वॉलपेपर कापा"</string> </resources> diff --git a/WallpaperPicker/res/values-ms-rMY/strings.xml b/WallpaperPicker/res/values-ms-rMY/strings.xml index 950f4d0e1..9d824e4fa 100644 --- a/WallpaperPicker/res/values-ms-rMY/strings.xml +++ b/WallpaperPicker/res/values-ms-rMY/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Kertas dinding %1$d daripada %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Memilih <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Padam"</string> - <string name="pick_image" msgid="6704438906027442697">"Pilih imej"</string> + <string name="pick_image" msgid="3189640419551368385">"Foto saya"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Kertas dinding"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Pangkas kertas dinding"</string> </resources> diff --git a/WallpaperPicker/res/values-my-rMM/strings.xml b/WallpaperPicker/res/values-my-rMM/strings.xml index 4d5ac47df..233611431 100644 --- a/WallpaperPicker/res/values-my-rMM/strings.xml +++ b/WallpaperPicker/res/values-my-rMM/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"နောက်ခံ %1$d မှ %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"ရွေးချယ်ထားသော <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"ဖျက်ပါ"</string> - <string name="pick_image" msgid="6704438906027442697">"ပုံ ရွေးပါ"</string> + <string name="pick_image" msgid="3189640419551368385">"ကျွန်ုပ်၏ ဓာတ်ပုံများ"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"နောက်ခံများ"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"နောက်ခံအား ဖြတ်ခြင်း"</string> </resources> diff --git a/WallpaperPicker/res/values-nb/strings.xml b/WallpaperPicker/res/values-nb/strings.xml index 3589e4bc8..9ae0b989a 100644 --- a/WallpaperPicker/res/values-nb/strings.xml +++ b/WallpaperPicker/res/values-nb/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Bakgrunn %1$d av %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Valgt <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Slett"</string> - <string name="pick_image" msgid="6704438906027442697">"Velg bilde"</string> + <string name="pick_image" msgid="3189640419551368385">"Mine bilder"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Bakgrunner"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Beskjær bakgrunnen"</string> </resources> diff --git a/WallpaperPicker/res/values-ne-rNP/strings.xml b/WallpaperPicker/res/values-ne-rNP/strings.xml index 221fa9438..5bca8d809 100644 --- a/WallpaperPicker/res/values-ne-rNP/strings.xml +++ b/WallpaperPicker/res/values-ne-rNP/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%2$d को %1$d वालपेपर"</string> <string name="announce_selection" msgid="123723511662250539">"चयन गरिएको <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"मेट्नुहोस्"</string> - <string name="pick_image" msgid="6704438906027442697">"तस्बिर छान्नुहोस्"</string> + <string name="pick_image" msgid="3189640419551368385">"मेरा तस्बिरहरू"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"वालपेपरहरु"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"वालपेपर काँटछाट गर्नुहोस्"</string> </resources> diff --git a/WallpaperPicker/res/values-nl/strings.xml b/WallpaperPicker/res/values-nl/strings.xml index 7dd4f22b0..a86f0f651 100644 --- a/WallpaperPicker/res/values-nl/strings.xml +++ b/WallpaperPicker/res/values-nl/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Achtergrond %1$d van %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> is geselecteerd"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Verwijderen"</string> - <string name="pick_image" msgid="6704438906027442697">"Afbeelding kiezen"</string> + <string name="pick_image" msgid="3189640419551368385">"Mijn foto\'s"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Achtergronden"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Achtergrond bijsnijden"</string> </resources> diff --git a/WallpaperPicker/res/values-pa-rIN/strings.xml b/WallpaperPicker/res/values-pa-rIN/strings.xml index 3be7bf802..e4225e02d 100644 --- a/WallpaperPicker/res/values-pa-rIN/strings.xml +++ b/WallpaperPicker/res/values-pa-rIN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"ਵਾਲਪੇਪਰ %2$d ਦਾ %1$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> ਚੁਣਿਆ ਗਿਆ"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"ਮਿਟਾਓ"</string> - <string name="pick_image" msgid="6704438906027442697">"ਚਿੱਤਰ ਚੁਣੋ"</string> + <string name="pick_image" msgid="3189640419551368385">"ਮੇਰੀਆਂ ਫੋਟੋਆਂ"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"ਵਾਲਪੇਪਰ"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"ਵਾਲਪੇਪਰ ਕੱਟੋ"</string> </resources> diff --git a/WallpaperPicker/res/values-pl/strings.xml b/WallpaperPicker/res/values-pl/strings.xml index bcdbb3dc7..cd52082d6 100644 --- a/WallpaperPicker/res/values-pl/strings.xml +++ b/WallpaperPicker/res/values-pl/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Tapeta %1$d z %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Wybrano <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Usuń"</string> - <string name="pick_image" msgid="6704438906027442697">"Wybierz obraz"</string> + <string name="pick_image" msgid="3189640419551368385">"Moje zdjęcia"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Tapety"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Przytnij tapetę"</string> </resources> diff --git a/WallpaperPicker/res/values-pt-rPT/strings.xml b/WallpaperPicker/res/values-pt-rPT/strings.xml index 83492327f..82aa4694a 100644 --- a/WallpaperPicker/res/values-pt-rPT/strings.xml +++ b/WallpaperPicker/res/values-pt-rPT/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Imagem de fundo %1$d de %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> selecionada"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Eliminar"</string> - <string name="pick_image" msgid="6704438906027442697">"Escolher imagem"</string> + <string name="pick_image" msgid="3189640419551368385">"As minhas fotos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Imagens de fundo"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Recortar imagem de fundo"</string> </resources> diff --git a/WallpaperPicker/res/values-pt/strings.xml b/WallpaperPicker/res/values-pt/strings.xml index 2332fcbd1..74ff3106c 100644 --- a/WallpaperPicker/res/values-pt/strings.xml +++ b/WallpaperPicker/res/values-pt/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Plano de fundo %1$d de %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> selecionado"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Excluir"</string> - <string name="pick_image" msgid="6704438906027442697">"Escolher imagem"</string> + <string name="pick_image" msgid="3189640419551368385">"Minhas fotos"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Planos de fundo"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Cortar plano de fundo"</string> </resources> diff --git a/WallpaperPicker/res/values-ro/strings.xml b/WallpaperPicker/res/values-ro/strings.xml index 8ee1a5a39..6281b80fc 100644 --- a/WallpaperPicker/res/values-ro/strings.xml +++ b/WallpaperPicker/res/values-ro/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Imaginea de fundal %1$d din %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"S-a selectat <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Ștergeți"</string> - <string name="pick_image" msgid="6704438906027442697">"Alegeți imaginea"</string> + <string name="pick_image" msgid="3189640419551368385">"Fotografiile mele"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Imagini de fundal"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Decupați imaginea de fundal"</string> </resources> diff --git a/WallpaperPicker/res/values-ru/strings.xml b/WallpaperPicker/res/values-ru/strings.xml index ff43ce8f6..959205a33 100644 --- a/WallpaperPicker/res/values-ru/strings.xml +++ b/WallpaperPicker/res/values-ru/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Обои %1$d из %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Выбран элемент \"<xliff:g id="LABEL">%1$s</xliff:g>\""</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Удалить"</string> - <string name="pick_image" msgid="6704438906027442697">"Выбрать обои"</string> + <string name="pick_image" msgid="3189640419551368385">"Мои фото"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Обои"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Кадрировать обои"</string> </resources> diff --git a/WallpaperPicker/res/values-si-rLK/strings.xml b/WallpaperPicker/res/values-si-rLK/strings.xml index d175724fd..37ce1fc52 100644 --- a/WallpaperPicker/res/values-si-rLK/strings.xml +++ b/WallpaperPicker/res/values-si-rLK/strings.xml @@ -32,7 +32,7 @@ <skip /> <string name="announce_selection" msgid="123723511662250539">"තෝරාගත්තේ <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"මකන්න"</string> - <string name="pick_image" msgid="6704438906027442697">"පින්තූරයක් තෝරන්න"</string> + <string name="pick_image" msgid="3189640419551368385">"මගේ ඡායාරූප"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"වෝල්පේපර"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"වෝල්පේපරය කප්පාදු කිරීම"</string> </resources> diff --git a/WallpaperPicker/res/values-sk/strings.xml b/WallpaperPicker/res/values-sk/strings.xml index 33477a124..9d38de437 100644 --- a/WallpaperPicker/res/values-sk/strings.xml +++ b/WallpaperPicker/res/values-sk/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Tapeta %1$d z %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Vybratá položka <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Odstrániť"</string> - <string name="pick_image" msgid="6704438906027442697">"Vybrať obrázok"</string> + <string name="pick_image" msgid="3189640419551368385">"Moje fotky"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Tapety"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Orezanie tapety"</string> </resources> diff --git a/WallpaperPicker/res/values-sl/strings.xml b/WallpaperPicker/res/values-sl/strings.xml index 06a508a8c..e776cc7d5 100644 --- a/WallpaperPicker/res/values-sl/strings.xml +++ b/WallpaperPicker/res/values-sl/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%1$d. ozadje od %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Izbrano: <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Izbriši"</string> - <string name="pick_image" msgid="6704438906027442697">"Izberi sliko"</string> + <string name="pick_image" msgid="3189640419551368385">"Moje fotografije"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Ozadja"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Obrezovanje ozadja"</string> </resources> diff --git a/WallpaperPicker/res/values-sq-rAL/strings.xml b/WallpaperPicker/res/values-sq-rAL/strings.xml index f21b7ef83..8a9983b4b 100644 --- a/WallpaperPicker/res/values-sq-rAL/strings.xml +++ b/WallpaperPicker/res/values-sq-rAL/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Imazhi i sfondit: %1$d nga gjithsej %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> u përzgjodh"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Fshi"</string> - <string name="pick_image" msgid="6704438906027442697">"Zgjidh imazhin"</string> + <string name="pick_image" msgid="3189640419551368385">"Fotografitë e mia"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Imazhet e sfondit"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Prit imazhin e sfondit"</string> </resources> diff --git a/WallpaperPicker/res/values-sr/strings.xml b/WallpaperPicker/res/values-sr/strings.xml index fdfaaf60f..c37bc060f 100644 --- a/WallpaperPicker/res/values-sr/strings.xml +++ b/WallpaperPicker/res/values-sr/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Позадина %1$d од %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Изабрана је <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Избриши"</string> - <string name="pick_image" msgid="6704438906027442697">"Изабери слику"</string> + <string name="pick_image" msgid="3189640419551368385">"Моје фотографије"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Позадине"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Опсеци позадину"</string> </resources> diff --git a/WallpaperPicker/res/values-sv/strings.xml b/WallpaperPicker/res/values-sv/strings.xml index 57db3a64d..044508b4d 100644 --- a/WallpaperPicker/res/values-sv/strings.xml +++ b/WallpaperPicker/res/values-sv/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Bakgrund %1$d av %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> har valts"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Ta bort"</string> - <string name="pick_image" msgid="6704438906027442697">"Välj bild"</string> + <string name="pick_image" msgid="3189640419551368385">"Mina foton"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Bakgrunder"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Beskär bakgrund"</string> </resources> diff --git a/WallpaperPicker/res/values-sw/strings.xml b/WallpaperPicker/res/values-sw/strings.xml index edea3de5b..367912aab 100644 --- a/WallpaperPicker/res/values-sw/strings.xml +++ b/WallpaperPicker/res/values-sw/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Mandhari %1$d ya %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> iliyochaguliwa"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Futa"</string> - <string name="pick_image" msgid="6704438906027442697">"Chagua picha"</string> + <string name="pick_image" msgid="3189640419551368385">"Picha zangu"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Mandhari"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Punguza mandhari"</string> </resources> diff --git a/WallpaperPicker/res/values-sw720dp-v19/styles.xml b/WallpaperPicker/res/values-sw720dp-v19/styles.xml index 91078517d..d8dab223a 100644 --- a/WallpaperPicker/res/values-sw720dp-v19/styles.xml +++ b/WallpaperPicker/res/values-sw720dp-v19/styles.xml @@ -18,7 +18,7 @@ --> <resources> - <style name="Theme" parent="android:Theme.Holo.Wallpaper.NoTitleBar"> + <style name="Theme" parent="@android:style/Theme.DeviceDefault.Wallpaper.NoTitleBar"> <item name="android:windowActionModeOverlay">true</item> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item> diff --git a/WallpaperPicker/res/values-sw720dp/dimens.xml b/WallpaperPicker/res/values-sw720dp/dimens.xml deleted file mode 100644 index 9ae155b3c..000000000 --- a/WallpaperPicker/res/values-sw720dp/dimens.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2011 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<resources> - <dimen name="app_icon_size">72dp</dimen> - -<!-- QSB --> - <dimen name="toolbar_button_vertical_padding">8dip</dimen> - <dimen name="toolbar_button_horizontal_padding">8dip</dimen> - - <!-- When dragging items on the workspace, the number of dps by which the position of - the drag view should be offset from the position of the original view. --> - <dimen name="dragViewOffsetX">0dp</dimen> - <dimen name="dragViewOffsetY">0dp</dimen> -</resources> diff --git a/WallpaperPicker/res/values-sw720dp/styles.xml b/WallpaperPicker/res/values-sw720dp/styles.xml index b48909087..12f8884f1 100644 --- a/WallpaperPicker/res/values-sw720dp/styles.xml +++ b/WallpaperPicker/res/values-sw720dp/styles.xml @@ -18,7 +18,7 @@ --> <resources> - <style name="Theme" parent="android:Theme.Holo.Wallpaper.NoTitleBar"> + <style name="Theme" parent="@android:style/Theme.DeviceDefault.Wallpaper.NoTitleBar"> <item name="android:windowActionModeOverlay">true</item> </style> </resources> diff --git a/WallpaperPicker/res/values-ta-rIN/strings.xml b/WallpaperPicker/res/values-ta-rIN/strings.xml index 2b984271a..7284da8ae 100644 --- a/WallpaperPicker/res/values-ta-rIN/strings.xml +++ b/WallpaperPicker/res/values-ta-rIN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"வால்பேப்பர் %1$d / %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> தேர்ந்தெடுக்கப்பட்டது"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"நீக்கு"</string> - <string name="pick_image" msgid="6704438906027442697">"படத்தைத் தேர்வுசெய்க"</string> + <string name="pick_image" msgid="3189640419551368385">"எனது படங்கள்"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"வால்பேப்பர்கள்"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"வால்பேப்பரைச் செதுக்கு"</string> </resources> diff --git a/WallpaperPicker/res/values-te-rIN/strings.xml b/WallpaperPicker/res/values-te-rIN/strings.xml index c26f84e28..4c5ad2f08 100644 --- a/WallpaperPicker/res/values-te-rIN/strings.xml +++ b/WallpaperPicker/res/values-te-rIN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%2$dలో %1$dవ వాల్పేపర్"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> ఎంచుకోబడింది"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"తొలగించు"</string> - <string name="pick_image" msgid="6704438906027442697">"చిత్రాన్ని ఎంచుకోండి"</string> + <string name="pick_image" msgid="3189640419551368385">"నా ఫోటోలు"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"వాల్పేపర్లు"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"వాల్పేపర్ను కత్తిరించండి"</string> </resources> diff --git a/WallpaperPicker/res/values-th/strings.xml b/WallpaperPicker/res/values-th/strings.xml index 6b4c23536..b3d7a8bc7 100644 --- a/WallpaperPicker/res/values-th/strings.xml +++ b/WallpaperPicker/res/values-th/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"วอลเปเปอร์ %1$d จาก %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"เลือก <xliff:g id="LABEL">%1$s</xliff:g> แล้ว"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"ลบ"</string> - <string name="pick_image" msgid="6704438906027442697">"เลือกรูปภาพ"</string> + <string name="pick_image" msgid="3189640419551368385">"รูปภาพของฉัน"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"วอลเปเปอร์"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"ครอบตัดวอลเปเปอร์"</string> </resources> diff --git a/WallpaperPicker/res/values-tl/strings.xml b/WallpaperPicker/res/values-tl/strings.xml index c9fe338d4..db8f4d542 100644 --- a/WallpaperPicker/res/values-tl/strings.xml +++ b/WallpaperPicker/res/values-tl/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Wallpaper %1$d ng %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Napili ang <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Tanggalin"</string> - <string name="pick_image" msgid="6704438906027442697">"Pumili ng larawan"</string> + <string name="pick_image" msgid="3189640419551368385">"Aking mga larawan"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Mga Wallpaper"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"I-crop ang wallpaper"</string> </resources> diff --git a/WallpaperPicker/res/values-tr/strings.xml b/WallpaperPicker/res/values-tr/strings.xml index 3d03c6be8..d1e57edbb 100644 --- a/WallpaperPicker/res/values-tr/strings.xml +++ b/WallpaperPicker/res/values-tr/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"%2$d duvar kağıdı arasından duvar kağıdı %1$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> seçildi"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Sil"</string> - <string name="pick_image" msgid="6704438906027442697">"Resim seç"</string> + <string name="pick_image" msgid="3189640419551368385">"Fotoğraflarım"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Duvar kağıtları"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Duvar kağıdını kırp"</string> </resources> diff --git a/WallpaperPicker/res/values-uk/strings.xml b/WallpaperPicker/res/values-uk/strings.xml index 076c88238..756e7cf09 100644 --- a/WallpaperPicker/res/values-uk/strings.xml +++ b/WallpaperPicker/res/values-uk/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Фоновий малюнок %1$d з %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"Вибрано <xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Видалити"</string> - <string name="pick_image" msgid="6704438906027442697">"Вибрати зображення"</string> + <string name="pick_image" msgid="3189640419551368385">"Мої фото"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Фонові малюнки"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Обрізати фоновий малюнок"</string> </resources> diff --git a/WallpaperPicker/res/values-ur-rPK/strings.xml b/WallpaperPicker/res/values-ur-rPK/strings.xml index 7b12d4239..86d8163d9 100644 --- a/WallpaperPicker/res/values-ur-rPK/strings.xml +++ b/WallpaperPicker/res/values-ur-rPK/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"وال پیپر %1$d از %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> کو منتخب کیا گیا"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"حذف کریں"</string> - <string name="pick_image" msgid="6704438906027442697">"تصویر منتخب کریں"</string> + <string name="pick_image" msgid="3189640419551368385">"میری تصاویر"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"وال پیپرز"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"وال پیپر کو تراشیں"</string> </resources> diff --git a/WallpaperPicker/res/values-uz-rUZ/strings.xml b/WallpaperPicker/res/values-uz-rUZ/strings.xml index 807d6b4ae..97d3938ae 100644 --- a/WallpaperPicker/res/values-uz-rUZ/strings.xml +++ b/WallpaperPicker/res/values-uz-rUZ/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Fon rasmi %2$ddan %1$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> tanlandi"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"O‘chirish"</string> - <string name="pick_image" msgid="6704438906027442697">"Rasm tanlang"</string> + <string name="pick_image" msgid="3189640419551368385">"Mening rasmlarim"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Fon rasmlari"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Fon rasmini kesish"</string> </resources> diff --git a/WallpaperPicker/res/values-v21/styles.xml b/WallpaperPicker/res/values-v21/styles.xml new file mode 100644 index 000000000..582ab8fed --- /dev/null +++ b/WallpaperPicker/res/values-v21/styles.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +* Copyright (C) 2015 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android"> + + <style name="WallpaperCropperActionBar" parent="@android:style/Widget.DeviceDefault.ActionBar"> + <item name="android:displayOptions">showCustom</item> + <item name="android:background">#88000000</item> + <item name="android:contentInsetEnd">0dp</item> + <item name="android:contentInsetLeft">0dp</item> + <item name="android:contentInsetRight">0dp</item> + <item name="android:contentInsetStart">0dp</item> + </style> + + <style name="ActionBarSetWallpaperStyle" parent="@android:style/Widget.DeviceDefault.ActionButton"> + <item name="android:textColor">#ffffffff</item> + <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item> + </style> + +</resources>
\ No newline at end of file diff --git a/WallpaperPicker/res/values-vi/strings.xml b/WallpaperPicker/res/values-vi/strings.xml index d1efbe989..ae00d585c 100644 --- a/WallpaperPicker/res/values-vi/strings.xml +++ b/WallpaperPicker/res/values-vi/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Hình nền %1$d / %2$d"</string> <string name="announce_selection" msgid="123723511662250539">"<xliff:g id="LABEL">%1$s</xliff:g> được chọn"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Xóa"</string> - <string name="pick_image" msgid="6704438906027442697">"Chọn hình ảnh"</string> + <string name="pick_image" msgid="3189640419551368385">"Ảnh của tôi"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Hình nền"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Cắt hình nền"</string> </resources> diff --git a/WallpaperPicker/res/values-zh-rCN/strings.xml b/WallpaperPicker/res/values-zh-rCN/strings.xml index 1def9ed41..8bd5342eb 100644 --- a/WallpaperPicker/res/values-zh-rCN/strings.xml +++ b/WallpaperPicker/res/values-zh-rCN/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"第%1$d张壁纸,共%2$d张"</string> <string name="announce_selection" msgid="123723511662250539">"已选择<xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"删除"</string> - <string name="pick_image" msgid="6704438906027442697">"选择图片"</string> + <string name="pick_image" msgid="3189640419551368385">"我的照片"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"壁纸"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"剪裁壁纸"</string> </resources> diff --git a/WallpaperPicker/res/values-zh-rHK/strings.xml b/WallpaperPicker/res/values-zh-rHK/strings.xml index 66ba0af18..e51d60afa 100644 --- a/WallpaperPicker/res/values-zh-rHK/strings.xml +++ b/WallpaperPicker/res/values-zh-rHK/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"第 %1$d 張桌布,共 %2$d 張"</string> <string name="announce_selection" msgid="123723511662250539">"已選取<xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"刪除"</string> - <string name="pick_image" msgid="6704438906027442697">"選擇圖片"</string> + <string name="pick_image" msgid="3189640419551368385">"我的相片"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"桌布"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"裁剪桌布"</string> </resources> diff --git a/WallpaperPicker/res/values-zh-rTW/strings.xml b/WallpaperPicker/res/values-zh-rTW/strings.xml index 418497608..c12350af0 100644 --- a/WallpaperPicker/res/values-zh-rTW/strings.xml +++ b/WallpaperPicker/res/values-zh-rTW/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"第 %1$d 張桌布,共 %2$d 張"</string> <string name="announce_selection" msgid="123723511662250539">"已選取<xliff:g id="LABEL">%1$s</xliff:g>"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"刪除"</string> - <string name="pick_image" msgid="6704438906027442697">"選擇圖片"</string> + <string name="pick_image" msgid="3189640419551368385">"我的相片"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"桌布"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"裁剪桌布"</string> </resources> diff --git a/WallpaperPicker/res/values-zu/strings.xml b/WallpaperPicker/res/values-zu/strings.xml index c7d3f33d1..537b2f3ca 100644 --- a/WallpaperPicker/res/values-zu/strings.xml +++ b/WallpaperPicker/res/values-zu/strings.xml @@ -30,7 +30,7 @@ <string name="wallpaper_accessibility_name" msgid="4093221025304876354">"Isithombe sangemuva esingu-%1$d kwezingu-%2$d"</string> <string name="announce_selection" msgid="123723511662250539">"I-<xliff:g id="LABEL">%1$s</xliff:g> ekhethiwe"</string> <string name="wallpaper_delete" msgid="1459353972739215344">"Susa"</string> - <string name="pick_image" msgid="6704438906027442697">"Khetha isithombe"</string> + <string name="pick_image" msgid="3189640419551368385">"Izithombe zami"</string> <string name="pick_wallpaper" msgid="4628969645948454559">"Izithombe zangemuva"</string> <string name="crop_wallpaper" msgid="4882870800623585836">"Nqampuna isithombe sangemuva"</string> </resources> diff --git a/WallpaperPicker/res/values/config.xml b/WallpaperPicker/res/values/config.xml index 71580b5b0..2f5174ce6 100644 --- a/WallpaperPicker/res/values/config.xml +++ b/WallpaperPicker/res/values/config.xml @@ -14,7 +14,6 @@ limitations under the License. --> <resources> - <bool name="allow_rotation">false</bool> <!-- Specifies whether to expand the cropped area on both sides (rather than just to one side) --> <bool name="center_crop">false</bool> diff --git a/WallpaperPicker/res/values/strings.xml b/WallpaperPicker/res/values/strings.xml index 1ee3513f9..72b1e15df 100644 --- a/WallpaperPicker/res/values/strings.xml +++ b/WallpaperPicker/res/values/strings.xml @@ -45,7 +45,7 @@ <!-- Label on button to delete wallpaper(s) --> <string name="wallpaper_delete">Delete</string> <!-- Label on button in Wallpaper Picker to pick an image --> - <string name="pick_image">Pick image</string> + <string name="pick_image">My photos</string> <!-- Option in "Select wallpaper from" dialog box --> <string name="pick_wallpaper">Wallpapers</string> <!-- Title of activity for cropping wallpapers --> diff --git a/WallpaperPicker/res/values/styles.xml b/WallpaperPicker/res/values/styles.xml index f4008f159..74aeab903 100644 --- a/WallpaperPicker/res/values/styles.xml +++ b/WallpaperPicker/res/values/styles.xml @@ -17,7 +17,7 @@ */ --> -<resources> +<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.WallpaperCropper" parent="@android:style/Theme.DeviceDefault"> <item name="android:actionBarStyle">@style/WallpaperCropperActionBar</item> <item name="android:windowFullscreen">true</item> @@ -40,5 +40,6 @@ <style name="ActionBarSetWallpaperStyle" parent="@android:style/Widget.DeviceDefault.ActionButton"> <item name="android:textColor">#ffffffff</item> + <item name="android:background">?android:attr/selectableItemBackground</item> </style> </resources> diff --git a/WallpaperPicker/src/android/util/Pools.java b/WallpaperPicker/src/android/util/Pools.java deleted file mode 100644 index 40bab1eae..000000000 --- a/WallpaperPicker/src/android/util/Pools.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2009 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 android.util; - -/** - * Helper class for crating pools of objects. An example use looks like this: - * <pre> - * public class MyPooledClass { - * - * private static final SynchronizedPool<MyPooledClass> sPool = - * new SynchronizedPool<MyPooledClass>(10); - * - * public static MyPooledClass obtain() { - * MyPooledClass instance = sPool.acquire(); - * return (instance != null) ? instance : new MyPooledClass(); - * } - * - * public void recycle() { - * // Clear state if needed. - * sPool.release(this); - * } - * - * . . . - * } - * </pre> - * - * @hide - */ -public final class Pools { - - /** - * Interface for managing a pool of objects. - * - * @param <T> The pooled type. - */ - public static interface Pool<T> { - - /** - * @return An instance from the pool if such, null otherwise. - */ - public T acquire(); - - /** - * Release an instance to the pool. - * - * @param instance The instance to release. - * @return Whether the instance was put in the pool. - * - * @throws IllegalStateException If the instance is already in the pool. - */ - public boolean release(T instance); - } - - private Pools() { - /* do nothing - hiding constructor */ - } - - /** - * Simple (non-synchronized) pool of objects. - * - * @param <T> The pooled type. - */ - public static class SimplePool<T> implements Pool<T> { - private final Object[] mPool; - - private int mPoolSize; - - /** - * Creates a new instance. - * - * @param maxPoolSize The max pool size. - * - * @throws IllegalArgumentException If the max pool size is less than zero. - */ - public SimplePool(int maxPoolSize) { - if (maxPoolSize <= 0) { - throw new IllegalArgumentException("The max pool size must be > 0"); - } - mPool = new Object[maxPoolSize]; - } - - @Override - @SuppressWarnings("unchecked") - public T acquire() { - if (mPoolSize > 0) { - final int lastPooledIndex = mPoolSize - 1; - T instance = (T) mPool[lastPooledIndex]; - mPool[lastPooledIndex] = null; - mPoolSize--; - return instance; - } - return null; - } - - @Override - public boolean release(T instance) { - if (isInPool(instance)) { - throw new IllegalStateException("Already in the pool!"); - } - if (mPoolSize < mPool.length) { - mPool[mPoolSize] = instance; - mPoolSize++; - return true; - } - return false; - } - - private boolean isInPool(T instance) { - for (int i = 0; i < mPoolSize; i++) { - if (mPool[i] == instance) { - return true; - } - } - return false; - } - } - - /** - * Synchronized) pool of objects. - * - * @param <T> The pooled type. - */ - public static class SynchronizedPool<T> extends SimplePool<T> { - private final Object mLock = new Object(); - - /** - * Creates a new instance. - * - * @param maxPoolSize The max pool size. - * - * @throws IllegalArgumentException If the max pool size is less than zero. - */ - public SynchronizedPool(int maxPoolSize) { - super(maxPoolSize); - } - - @Override - public T acquire() { - synchronized (mLock) { - return super.acquire(); - } - } - - @Override - public boolean release(T element) { - synchronized (mLock) { - return super.release(element); - } - } - } -}
\ No newline at end of file diff --git a/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java new file mode 100644 index 000000000..45118bf45 --- /dev/null +++ b/WallpaperPicker/src/com/android/gallery3d/common/BitmapCropTask.java @@ -0,0 +1,405 @@ +/** + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.gallery3d.common; + +import android.app.WallpaperManager; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.Bitmap.CompressFormat; +import android.graphics.BitmapFactory; +import android.graphics.BitmapRegionDecoder; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Point; +import android.graphics.Rect; +import android.graphics.RectF; +import android.net.Uri; +import android.os.AsyncTask; +import android.util.Log; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +public class BitmapCropTask extends AsyncTask<Void, Void, Boolean> { + + public interface OnBitmapCroppedHandler { + public void onBitmapCropped(byte[] imageBytes); + } + + private static final int DEFAULT_COMPRESS_QUALITY = 90; + private static final String LOGTAG = "BitmapCropTask"; + + Uri mInUri = null; + Context mContext; + String mInFilePath; + byte[] mInImageBytes; + int mInResId = 0; + RectF mCropBounds = null; + int mOutWidth, mOutHeight; + int mRotation; + boolean mSetWallpaper; + boolean mSaveCroppedBitmap; + Bitmap mCroppedBitmap; + Runnable mOnEndRunnable; + Resources mResources; + BitmapCropTask.OnBitmapCroppedHandler mOnBitmapCroppedHandler; + boolean mNoCrop; + + public BitmapCropTask(Context c, String filePath, + RectF cropBounds, int rotation, int outWidth, int outHeight, + boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + mContext = c; + mInFilePath = filePath; + init(cropBounds, rotation, + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + } + + public BitmapCropTask(byte[] imageBytes, + RectF cropBounds, int rotation, int outWidth, int outHeight, + boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + mInImageBytes = imageBytes; + init(cropBounds, rotation, + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + } + + public BitmapCropTask(Context c, Uri inUri, + RectF cropBounds, int rotation, int outWidth, int outHeight, + boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + mContext = c; + mInUri = inUri; + init(cropBounds, rotation, + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + } + + public BitmapCropTask(Context c, Resources res, int inResId, + RectF cropBounds, int rotation, int outWidth, int outHeight, + boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + mContext = c; + mInResId = inResId; + mResources = res; + init(cropBounds, rotation, + outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); + } + + private void init(RectF cropBounds, int rotation, int outWidth, int outHeight, + boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { + mCropBounds = cropBounds; + mRotation = rotation; + mOutWidth = outWidth; + mOutHeight = outHeight; + mSetWallpaper = setWallpaper; + mSaveCroppedBitmap = saveCroppedBitmap; + mOnEndRunnable = onEndRunnable; + } + + public void setOnBitmapCropped(BitmapCropTask.OnBitmapCroppedHandler handler) { + mOnBitmapCroppedHandler = handler; + } + + public void setNoCrop(boolean value) { + mNoCrop = value; + } + + public void setOnEndRunnable(Runnable onEndRunnable) { + mOnEndRunnable = onEndRunnable; + } + + // Helper to setup input stream + private InputStream regenerateInputStream() { + if (mInUri == null && mInResId == 0 && mInFilePath == null && mInImageBytes == null) { + Log.w(LOGTAG, "cannot read original file, no input URI, resource ID, or " + + "image byte array given"); + } else { + try { + if (mInUri != null) { + return new BufferedInputStream( + mContext.getContentResolver().openInputStream(mInUri)); + } else if (mInFilePath != null) { + return mContext.openFileInput(mInFilePath); + } else if (mInImageBytes != null) { + return new BufferedInputStream(new ByteArrayInputStream(mInImageBytes)); + } else { + return new BufferedInputStream(mResources.openRawResource(mInResId)); + } + } catch (FileNotFoundException e) { + Log.w(LOGTAG, "cannot read file: " + mInUri.toString(), e); + } + } + return null; + } + + public Point getImageBounds() { + InputStream is = regenerateInputStream(); + if (is != null) { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeStream(is, null, options); + Utils.closeSilently(is); + if (options.outWidth != 0 && options.outHeight != 0) { + return new Point(options.outWidth, options.outHeight); + } + } + return null; + } + + public void setCropBounds(RectF cropBounds) { + mCropBounds = cropBounds; + } + + public Bitmap getCroppedBitmap() { + return mCroppedBitmap; + } + public boolean cropBitmap() { + boolean failure = false; + + + WallpaperManager wallpaperManager = null; + if (mSetWallpaper) { + wallpaperManager = WallpaperManager.getInstance(mContext.getApplicationContext()); + } + + + if (mSetWallpaper && mNoCrop) { + try { + InputStream is = regenerateInputStream(); + if (is != null) { + wallpaperManager.setStream(is); + Utils.closeSilently(is); + } + } catch (IOException e) { + Log.w(LOGTAG, "cannot write stream to wallpaper", e); + failure = true; + } + return !failure; + } else { + // Find crop bounds (scaled to original image size) + Rect roundedTrueCrop = new Rect(); + Matrix rotateMatrix = new Matrix(); + Matrix inverseRotateMatrix = new Matrix(); + + Point bounds = getImageBounds(); + if (mRotation > 0) { + rotateMatrix.setRotate(mRotation); + inverseRotateMatrix.setRotate(-mRotation); + + mCropBounds.roundOut(roundedTrueCrop); + mCropBounds = new RectF(roundedTrueCrop); + + if (bounds == null) { + Log.w(LOGTAG, "cannot get bounds for image"); + failure = true; + return false; + } + + float[] rotatedBounds = new float[] { bounds.x, bounds.y }; + rotateMatrix.mapPoints(rotatedBounds); + rotatedBounds[0] = Math.abs(rotatedBounds[0]); + rotatedBounds[1] = Math.abs(rotatedBounds[1]); + + mCropBounds.offset(-rotatedBounds[0]/2, -rotatedBounds[1]/2); + inverseRotateMatrix.mapRect(mCropBounds); + mCropBounds.offset(bounds.x/2, bounds.y/2); + + } + + mCropBounds.roundOut(roundedTrueCrop); + + if (roundedTrueCrop.width() <= 0 || roundedTrueCrop.height() <= 0) { + Log.w(LOGTAG, "crop has bad values for full size image"); + failure = true; + return false; + } + + // See how much we're reducing the size of the image + int scaleDownSampleSize = Math.max(1, Math.min(roundedTrueCrop.width() / mOutWidth, + roundedTrueCrop.height() / mOutHeight)); + // Attempt to open a region decoder + BitmapRegionDecoder decoder = null; + InputStream is = null; + try { + is = regenerateInputStream(); + if (is == null) { + Log.w(LOGTAG, "cannot get input stream for uri=" + mInUri.toString()); + failure = true; + return false; + } + decoder = BitmapRegionDecoder.newInstance(is, false); + Utils.closeSilently(is); + } catch (IOException e) { + Log.w(LOGTAG, "cannot open region decoder for file: " + mInUri.toString(), e); + } finally { + Utils.closeSilently(is); + is = null; + } + + Bitmap crop = null; + if (decoder != null) { + // Do region decoding to get crop bitmap + BitmapFactory.Options options = new BitmapFactory.Options(); + if (scaleDownSampleSize > 1) { + options.inSampleSize = scaleDownSampleSize; + } + crop = decoder.decodeRegion(roundedTrueCrop, options); + decoder.recycle(); + } + + if (crop == null) { + // BitmapRegionDecoder has failed, try to crop in-memory + is = regenerateInputStream(); + Bitmap fullSize = null; + if (is != null) { + BitmapFactory.Options options = new BitmapFactory.Options(); + if (scaleDownSampleSize > 1) { + options.inSampleSize = scaleDownSampleSize; + } + fullSize = BitmapFactory.decodeStream(is, null, options); + Utils.closeSilently(is); + } + if (fullSize != null) { + // Find out the true sample size that was used by the decoder + scaleDownSampleSize = bounds.x / fullSize.getWidth(); + mCropBounds.left /= scaleDownSampleSize; + mCropBounds.top /= scaleDownSampleSize; + mCropBounds.bottom /= scaleDownSampleSize; + mCropBounds.right /= scaleDownSampleSize; + mCropBounds.roundOut(roundedTrueCrop); + + // Adjust values to account for issues related to rounding + if (roundedTrueCrop.width() > fullSize.getWidth()) { + // Adjust the width + roundedTrueCrop.right = roundedTrueCrop.left + fullSize.getWidth(); + } + if (roundedTrueCrop.right > fullSize.getWidth()) { + // Adjust the left value + int adjustment = roundedTrueCrop.left - + Math.max(0, roundedTrueCrop.right - roundedTrueCrop.width()); + roundedTrueCrop.left -= adjustment; + roundedTrueCrop.right -= adjustment; + } + if (roundedTrueCrop.height() > fullSize.getHeight()) { + // Adjust the height + roundedTrueCrop.bottom = roundedTrueCrop.top + fullSize.getHeight(); + } + if (roundedTrueCrop.bottom > fullSize.getHeight()) { + // Adjust the top value + int adjustment = roundedTrueCrop.top - + Math.max(0, roundedTrueCrop.bottom - roundedTrueCrop.height()); + roundedTrueCrop.top -= adjustment; + roundedTrueCrop.bottom -= adjustment; + } + + crop = Bitmap.createBitmap(fullSize, roundedTrueCrop.left, + roundedTrueCrop.top, roundedTrueCrop.width(), + roundedTrueCrop.height()); + } + } + + if (crop == null) { + Log.w(LOGTAG, "cannot decode file: " + mInUri.toString()); + failure = true; + return false; + } + if (mOutWidth > 0 && mOutHeight > 0 || mRotation > 0) { + float[] dimsAfter = new float[] { crop.getWidth(), crop.getHeight() }; + rotateMatrix.mapPoints(dimsAfter); + dimsAfter[0] = Math.abs(dimsAfter[0]); + dimsAfter[1] = Math.abs(dimsAfter[1]); + + if (!(mOutWidth > 0 && mOutHeight > 0)) { + mOutWidth = Math.round(dimsAfter[0]); + mOutHeight = Math.round(dimsAfter[1]); + } + + RectF cropRect = new RectF(0, 0, dimsAfter[0], dimsAfter[1]); + RectF returnRect = new RectF(0, 0, mOutWidth, mOutHeight); + + Matrix m = new Matrix(); + if (mRotation == 0) { + m.setRectToRect(cropRect, returnRect, Matrix.ScaleToFit.FILL); + } else { + Matrix m1 = new Matrix(); + m1.setTranslate(-crop.getWidth() / 2f, -crop.getHeight() / 2f); + Matrix m2 = new Matrix(); + m2.setRotate(mRotation); + Matrix m3 = new Matrix(); + m3.setTranslate(dimsAfter[0] / 2f, dimsAfter[1] / 2f); + Matrix m4 = new Matrix(); + m4.setRectToRect(cropRect, returnRect, Matrix.ScaleToFit.FILL); + + Matrix c1 = new Matrix(); + c1.setConcat(m2, m1); + Matrix c2 = new Matrix(); + c2.setConcat(m4, m3); + m.setConcat(c2, c1); + } + + Bitmap tmp = Bitmap.createBitmap((int) returnRect.width(), + (int) returnRect.height(), Bitmap.Config.ARGB_8888); + if (tmp != null) { + Canvas c = new Canvas(tmp); + Paint p = new Paint(); + p.setFilterBitmap(true); + c.drawBitmap(crop, m, p); + crop = tmp; + } + } + + if (mSaveCroppedBitmap) { + mCroppedBitmap = crop; + } + + // Compress to byte array + ByteArrayOutputStream tmpOut = new ByteArrayOutputStream(2048); + if (crop.compress(CompressFormat.JPEG, DEFAULT_COMPRESS_QUALITY, tmpOut)) { + // If we need to set to the wallpaper, set it + if (mSetWallpaper && wallpaperManager != null) { + try { + byte[] outByteArray = tmpOut.toByteArray(); + wallpaperManager.setStream(new ByteArrayInputStream(outByteArray)); + if (mOnBitmapCroppedHandler != null) { + mOnBitmapCroppedHandler.onBitmapCropped(outByteArray); + } + } catch (IOException e) { + Log.w(LOGTAG, "cannot write stream to wallpaper", e); + failure = true; + } + } + } else { + Log.w(LOGTAG, "cannot compress bitmap"); + failure = true; + } + } + return !failure; // True if any of the operations failed + } + + @Override + protected Boolean doInBackground(Void... params) { + return cropBitmap(); + } + + @Override + protected void onPostExecute(Boolean result) { + if (mOnEndRunnable != null) { + mOnEndRunnable.run(); + } + } +}
\ No newline at end of file diff --git a/WallpaperPicker/src/com/android/gallery3d/common/BitmapUtils.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapUtils.java index a671ed2b9..9ac5c1bf7 100644 --- a/WallpaperPicker/src/com/android/gallery3d/common/BitmapUtils.java +++ b/WallpaperPicker/src/com/android/gallery3d/common/BitmapUtils.java @@ -16,87 +16,24 @@ package com.android.gallery3d.common; -import android.graphics.Bitmap; -import android.graphics.Bitmap.CompressFormat; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.os.Build; -import android.util.FloatMath; +import android.content.Context; +import android.content.res.Resources; +import android.net.Uri; import android.util.Log; -import java.io.ByteArrayOutputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; +import com.android.gallery3d.exif.ExifInterface; -public class BitmapUtils { - private static final String TAG = "BitmapUtils"; - private static final int DEFAULT_JPEG_QUALITY = 90; - public static final int UNCONSTRAINED = -1; - - private BitmapUtils(){} - - /* - * Compute the sample size as a function of minSideLength - * and maxNumOfPixels. - * minSideLength is used to specify that minimal width or height of a - * bitmap. - * maxNumOfPixels is used to specify the maximal size in pixels that is - * tolerable in terms of memory usage. - * - * The function returns a sample size based on the constraints. - * Both size and minSideLength can be passed in as UNCONSTRAINED, - * which indicates no care of the corresponding constraint. - * The functions prefers returning a sample size that - * generates a smaller bitmap, unless minSideLength = UNCONSTRAINED. - * - * Also, the function rounds up the sample size to a power of 2 or multiple - * of 8 because BitmapFactory only honors sample size this way. - * For example, BitmapFactory downsamples an image by 2 even though the - * request is 3. So we round up the sample size to avoid OOM. - */ - public static int computeSampleSize(int width, int height, - int minSideLength, int maxNumOfPixels) { - int initialSize = computeInitialSampleSize( - width, height, minSideLength, maxNumOfPixels); - - return initialSize <= 8 - ? Utils.nextPowerOf2(initialSize) - : (initialSize + 7) / 8 * 8; - } - - private static int computeInitialSampleSize(int w, int h, - int minSideLength, int maxNumOfPixels) { - if (maxNumOfPixels == UNCONSTRAINED - && minSideLength == UNCONSTRAINED) return 1; - - int lowerBound = (maxNumOfPixels == UNCONSTRAINED) ? 1 : - (int) FloatMath.ceil(FloatMath.sqrt((float) (w * h) / maxNumOfPixels)); - - if (minSideLength == UNCONSTRAINED) { - return lowerBound; - } else { - int sampleSize = Math.min(w / minSideLength, h / minSideLength); - return Math.max(sampleSize, lowerBound); - } - } +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; - // This computes a sample size which makes the longer side at least - // minSideLength long. If that's not possible, return 1. - public static int computeSampleSizeLarger(int w, int h, - int minSideLength) { - int initialSize = Math.max(w / minSideLength, h / minSideLength); - if (initialSize <= 1) return 1; +public class BitmapUtils { - return initialSize <= 8 - ? Utils.prevPowerOf2(initialSize) - : initialSize / 8 * 8; - } + private static final String TAG = "BitmapUtils"; // Find the min x that 1 / x >= scale public static int computeSampleSizeLarger(float scale) { - int initialSize = (int) FloatMath.floor(1f / scale); + int initialSize = (int) Math.floor(1f / scale); if (initialSize <= 1) return 1; return initialSize <= 8 @@ -104,157 +41,41 @@ public class BitmapUtils { : initialSize / 8 * 8; } - // Find the max x that 1 / x <= scale. - public static int computeSampleSize(float scale) { - Utils.assertTrue(scale > 0); - int initialSize = Math.max(1, (int) FloatMath.ceil(1 / scale)); - return initialSize <= 8 - ? Utils.nextPowerOf2(initialSize) - : (initialSize + 7) / 8 * 8; - } - - public static Bitmap resizeBitmapByScale( - Bitmap bitmap, float scale, boolean recycle) { - int width = Math.round(bitmap.getWidth() * scale); - int height = Math.round(bitmap.getHeight() * scale); - if (width == bitmap.getWidth() - && height == bitmap.getHeight()) return bitmap; - Bitmap target = Bitmap.createBitmap(width, height, getConfig(bitmap)); - Canvas canvas = new Canvas(target); - canvas.scale(scale, scale); - Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG); - canvas.drawBitmap(bitmap, 0, 0, paint); - if (recycle) bitmap.recycle(); - return target; + public static int getRotationFromExif(Context context, Uri uri) { + return BitmapUtils.getRotationFromExifHelper(null, 0, context, uri); } - private static Bitmap.Config getConfig(Bitmap bitmap) { - Bitmap.Config config = bitmap.getConfig(); - if (config == null) { - config = Bitmap.Config.ARGB_8888; - } - return config; + public static int getRotationFromExif(Resources res, int resId) { + return BitmapUtils.getRotationFromExifHelper(res, resId, null, null); } - public static Bitmap resizeDownBySideLength( - Bitmap bitmap, int maxLength, boolean recycle) { - int srcWidth = bitmap.getWidth(); - int srcHeight = bitmap.getHeight(); - float scale = Math.min( - (float) maxLength / srcWidth, (float) maxLength / srcHeight); - if (scale >= 1.0f) return bitmap; - return resizeBitmapByScale(bitmap, scale, recycle); - } - - public static Bitmap resizeAndCropCenter(Bitmap bitmap, int size, boolean recycle) { - int w = bitmap.getWidth(); - int h = bitmap.getHeight(); - if (w == size && h == size) return bitmap; - - // scale the image so that the shorter side equals to the target; - // the longer side will be center-cropped. - float scale = (float) size / Math.min(w, h); - - Bitmap target = Bitmap.createBitmap(size, size, getConfig(bitmap)); - int width = Math.round(scale * bitmap.getWidth()); - int height = Math.round(scale * bitmap.getHeight()); - Canvas canvas = new Canvas(target); - canvas.translate((size - width) / 2f, (size - height) / 2f); - canvas.scale(scale, scale); - Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG); - canvas.drawBitmap(bitmap, 0, 0, paint); - if (recycle) bitmap.recycle(); - return target; - } - - public static void recycleSilently(Bitmap bitmap) { - if (bitmap == null) return; - try { - bitmap.recycle(); - } catch (Throwable t) { - Log.w(TAG, "unable recycle bitmap", t); - } - } - - public static Bitmap rotateBitmap(Bitmap source, int rotation, boolean recycle) { - if (rotation == 0) return source; - int w = source.getWidth(); - int h = source.getHeight(); - Matrix m = new Matrix(); - m.postRotate(rotation); - Bitmap bitmap = Bitmap.createBitmap(source, 0, 0, w, h, m, true); - if (recycle) source.recycle(); - return bitmap; - } - - public static Bitmap createVideoThumbnail(String filePath) { - // MediaMetadataRetriever is available on API Level 8 - // but is hidden until API Level 10 - Class<?> clazz = null; - Object instance = null; + private static int getRotationFromExifHelper(Resources res, int resId, Context context, Uri uri) { + ExifInterface ei = new ExifInterface(); + InputStream is = null; + BufferedInputStream bis = null; try { - clazz = Class.forName("android.media.MediaMetadataRetriever"); - instance = clazz.newInstance(); - - Method method = clazz.getMethod("setDataSource", String.class); - method.invoke(instance, filePath); - - // The method name changes between API Level 9 and 10. - if (Build.VERSION.SDK_INT <= 9) { - return (Bitmap) clazz.getMethod("captureFrame").invoke(instance); + if (uri != null) { + is = context.getContentResolver().openInputStream(uri); + bis = new BufferedInputStream(is); + ei.readExif(bis); } else { - byte[] data = (byte[]) clazz.getMethod("getEmbeddedPicture").invoke(instance); - if (data != null) { - Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); - if (bitmap != null) return bitmap; - } - return (Bitmap) clazz.getMethod("getFrameAtTime").invoke(instance); + is = res.openRawResource(resId); + bis = new BufferedInputStream(is); + ei.readExif(bis); } - } catch (IllegalArgumentException ex) { - // Assume this is a corrupt video file - } catch (RuntimeException ex) { - // Assume this is a corrupt video file. - } catch (InstantiationException e) { - Log.e(TAG, "createVideoThumbnail", e); - } catch (InvocationTargetException e) { - Log.e(TAG, "createVideoThumbnail", e); - } catch (ClassNotFoundException e) { - Log.e(TAG, "createVideoThumbnail", e); - } catch (NoSuchMethodException e) { - Log.e(TAG, "createVideoThumbnail", e); - } catch (IllegalAccessException e) { - Log.e(TAG, "createVideoThumbnail", e); - } finally { - try { - if (instance != null) { - clazz.getMethod("release").invoke(instance); - } - } catch (Exception ignored) { + Integer ori = ei.getTagIntValue(ExifInterface.TAG_ORIENTATION); + if (ori != null) { + return ExifInterface.getRotationForOrientationValue(ori.shortValue()); } + } catch (IOException e) { + Log.w(TAG, "Getting exif data failed", e); + } catch (NullPointerException e) { + // Sometimes the ExifInterface has an internal NPE if Exif data isn't valid + Log.w(TAG, "Getting exif data failed", e); + } finally { + Utils.closeSilently(bis); + Utils.closeSilently(is); } - return null; - } - - public static byte[] compressToBytes(Bitmap bitmap) { - return compressToBytes(bitmap, DEFAULT_JPEG_QUALITY); - } - - public static byte[] compressToBytes(Bitmap bitmap, int quality) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(65536); - bitmap.compress(CompressFormat.JPEG, quality, baos); - return baos.toByteArray(); - } - - public static boolean isSupportedByRegionDecoder(String mimeType) { - if (mimeType == null) return false; - mimeType = mimeType.toLowerCase(); - return mimeType.startsWith("image/") && - (!mimeType.equals("image/gif") && !mimeType.endsWith("bmp")); - } - - public static boolean isRotationSupported(String mimeType) { - if (mimeType == null) return false; - mimeType = mimeType.toLowerCase(); - return mimeType.equals("image/jpeg"); + return 0; } } diff --git a/WallpaperPicker/src/com/android/gallery3d/common/Utils.java b/WallpaperPicker/src/com/android/gallery3d/common/Utils.java index 614a081c8..8466c22cb 100644 --- a/WallpaperPicker/src/com/android/gallery3d/common/Utils.java +++ b/WallpaperPicker/src/com/android/gallery3d/common/Utils.java @@ -16,32 +16,16 @@ package com.android.gallery3d.common; -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager.NameNotFoundException; import android.database.Cursor; -import android.os.Build; +import android.graphics.RectF; import android.os.ParcelFileDescriptor; -import android.text.TextUtils; import android.util.Log; import java.io.Closeable; import java.io.IOException; -import java.io.InterruptedIOException; public class Utils { private static final String TAG = "Utils"; - private static final String DEBUG_TAG = "GalleryDebug"; - - private static final long POLY64REV = 0x95AC9329AC4BC9B5L; - private static final long INITIALCRC = 0xFFFFFFFFFFFFFFFFL; - - private static long[] sCrcTable = new long[256]; - - private static final boolean IS_DEBUG_BUILD = - Build.TYPE.equals("eng") || Build.TYPE.equals("userdebug"); - - private static final String MASK_STRING = "********************************"; // Throws AssertionError if the input is false. public static void assertTrue(boolean cond) { @@ -50,28 +34,6 @@ public class Utils { } } - // Throws AssertionError with the message. We had a method having the form - // assertTrue(boolean cond, String message, Object ... args); - // However a call to that method will cause memory allocation even if the - // condition is false (due to autoboxing generated by "Object ... args"), - // so we don't use that anymore. - public static void fail(String message, Object ... args) { - throw new AssertionError( - args.length == 0 ? message : String.format(message, args)); - } - - // Throws NullPointerException if the input is null. - public static <T> T checkNotNull(T object) { - if (object == null) throw new NullPointerException(); - return object; - } - - // Returns true if two input Object are both null or equal - // to each other. - public static boolean equals(Object a, Object b) { - return (a == b) || (a == null ? false : a.equals(b)); - } - // Returns the next power of two. // Returns the input if it is already power of 2. // Throws IllegalArgumentException if the input is <= 0 or @@ -102,87 +64,6 @@ public class Utils { return x; } - // Returns the input value x clamped to the range [min, max]. - public static float clamp(float x, float min, float max) { - if (x > max) return max; - if (x < min) return min; - return x; - } - - // Returns the input value x clamped to the range [min, max]. - public static long clamp(long x, long min, long max) { - if (x > max) return max; - if (x < min) return min; - return x; - } - - public static boolean isOpaque(int color) { - return color >>> 24 == 0xFF; - } - - public static void swap(int[] array, int i, int j) { - int temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - /** - * A function thats returns a 64-bit crc for string - * - * @param in input string - * @return a 64-bit crc value - */ - public static final long crc64Long(String in) { - if (in == null || in.length() == 0) { - return 0; - } - return crc64Long(getBytes(in)); - } - - static { - // http://bioinf.cs.ucl.ac.uk/downloads/crc64/crc64.c - long part; - for (int i = 0; i < 256; i++) { - part = i; - for (int j = 0; j < 8; j++) { - long x = ((int) part & 1) != 0 ? POLY64REV : 0; - part = (part >> 1) ^ x; - } - sCrcTable[i] = part; - } - } - - public static final long crc64Long(byte[] buffer) { - long crc = INITIALCRC; - for (int k = 0, n = buffer.length; k < n; ++k) { - crc = sCrcTable[(((int) crc) ^ buffer[k]) & 0xff] ^ (crc >> 8); - } - return crc; - } - - public static byte[] getBytes(String in) { - byte[] result = new byte[in.length() * 2]; - int output = 0; - for (char ch : in.toCharArray()) { - result[output++] = (byte) (ch & 0xFF); - result[output++] = (byte) (ch >> 8); - } - return result; - } - - public static void closeSilently(Closeable c) { - if (c == null) return; - try { - c.close(); - } catch (IOException t) { - Log.w(TAG, "close fail ", t); - } - } - - public static int compare(long a, long b) { - return a < b ? -1 : a == b ? 0 : 1; - } - public static int ceilLog2(float value) { int i; for (i = 0; i < 31; i++) { @@ -199,6 +80,15 @@ public class Utils { return i - 1; } + public static void closeSilently(Closeable c) { + if (c == null) return; + try { + c.close(); + } catch (IOException t) { + Log.w(TAG, "close fail ", t); + } + } + public static void closeSilently(ParcelFileDescriptor fd) { try { if (fd != null) fd.close(); @@ -215,126 +105,25 @@ public class Utils { } } - public static float interpolateAngle( - float source, float target, float progress) { - // interpolate the angle from source to target - // We make the difference in the range of [-179, 180], this is the - // shortest path to change source to target. - float diff = target - source; - if (diff < 0) diff += 360f; - if (diff > 180) diff -= 360f; - - float result = source + diff * progress; - return result < 0 ? result + 360f : result; - } - - public static float interpolateScale( - float source, float target, float progress) { - return source + progress * (target - source); - } - - public static String ensureNotNull(String value) { - return value == null ? "" : value; - } - - public static float parseFloatSafely(String content, float defaultValue) { - if (content == null) return defaultValue; - try { - return Float.parseFloat(content); - } catch (NumberFormatException e) { - return defaultValue; - } - } - - public static int parseIntSafely(String content, int defaultValue) { - if (content == null) return defaultValue; - try { - return Integer.parseInt(content); - } catch (NumberFormatException e) { - return defaultValue; - } - } - - public static boolean isNullOrEmpty(String exifMake) { - return TextUtils.isEmpty(exifMake); - } - - public static void waitWithoutInterrupt(Object object) { - try { - object.wait(); - } catch (InterruptedException e) { - Log.w(TAG, "unexpected interrupt: " + object); - } - } - - public static boolean handleInterrruptedException(Throwable e) { - // A helper to deal with the interrupt exception - // If an interrupt detected, we will setup the bit again. - if (e instanceof InterruptedIOException - || e instanceof InterruptedException) { - Thread.currentThread().interrupt(); - return true; - } - return false; - } - - /** - * @return String with special XML characters escaped. - */ - public static String escapeXml(String s) { - StringBuilder sb = new StringBuilder(); - for (int i = 0, len = s.length(); i < len; ++i) { - char c = s.charAt(i); - switch (c) { - case '<': sb.append("<"); break; - case '>': sb.append(">"); break; - case '\"': sb.append("""); break; - case '\'': sb.append("'"); break; - case '&': sb.append("&"); break; - default: sb.append(c); - } - } - return sb.toString(); - } - - public static String getUserAgent(Context context) { - PackageInfo packageInfo; - try { - packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); - } catch (NameNotFoundException e) { - throw new IllegalStateException("getPackageInfo failed"); - } - return String.format("%s/%s; %s/%s/%s/%s; %s/%s/%s", - packageInfo.packageName, - packageInfo.versionName, - Build.BRAND, - Build.DEVICE, - Build.MODEL, - Build.ID, - Build.VERSION.SDK_INT, - Build.VERSION.RELEASE, - Build.VERSION.INCREMENTAL); - } - - public static String[] copyOf(String[] source, int newSize) { - String[] result = new String[newSize]; - newSize = Math.min(source.length, newSize); - System.arraycopy(source, 0, result, 0, newSize); - return result; - } - - // Mask information for debugging only. It returns <code>info.toString()</code> directly - // for debugging build (i.e., 'eng' and 'userdebug') and returns a mask ("****") - // in release build to protect the information (e.g. for privacy issue). - public static String maskDebugInfo(Object info) { - if (info == null) return null; - String s = info.toString(); - int length = Math.min(s.length(), MASK_STRING.length()); - return IS_DEBUG_BUILD ? s : MASK_STRING.substring(0, length); - } - - // This method should be ONLY used for debugging. - public static void debug(String message, Object ... args) { - Log.v(DEBUG_TAG, String.format(message, args)); + public static RectF getMaxCropRect( + int inWidth, int inHeight, int outWidth, int outHeight, boolean leftAligned) { + RectF cropRect = new RectF(); + // Get a crop rect that will fit this + if (inWidth / (float) inHeight > outWidth / (float) outHeight) { + cropRect.top = 0; + cropRect.bottom = inHeight; + cropRect.left = (inWidth - (outWidth / (float) outHeight) * inHeight) / 2; + cropRect.right = inWidth - cropRect.left; + if (leftAligned) { + cropRect.right -= cropRect.left; + cropRect.left = 0; + } + } else { + cropRect.left = 0; + cropRect.right = inWidth; + cropRect.top = (inHeight - (outHeight / (float) outWidth) * inWidth) / 2; + cropRect.bottom = inHeight - cropRect.top; + } + return cropRect; } } diff --git a/WallpaperPicker/src/com/android/gallery3d/exif/ExifInterface.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifInterface.java index a1cf0fc85..9247e879f 100644 --- a/WallpaperPicker/src/com/android/gallery3d/exif/ExifInterface.java +++ b/WallpaperPicker/src/com/android/gallery3d/exif/ExifInterface.java @@ -1247,7 +1247,7 @@ public class ExifInterface { if (l == null || l.length <= 0) { return null; } - return new Long(l[0]); + return Long.valueOf(l[0]); } /** @@ -1266,7 +1266,7 @@ public class ExifInterface { if (l == null || l.length <= 0) { return null; } - return new Integer(l[0]); + return Integer.valueOf(l[0]); } /** @@ -1285,7 +1285,7 @@ public class ExifInterface { if (l == null || l.length <= 0) { return null; } - return new Byte(l[0]); + return Byte.valueOf(l[0]); } /** diff --git a/WallpaperPicker/src/com/android/gallery3d/glrenderer/BasicTexture.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/BasicTexture.java index 2e77b903f..0f3efb727 100644 --- a/WallpaperPicker/src/com/android/gallery3d/glrenderer/BasicTexture.java +++ b/WallpaperPicker/src/com/android/gallery3d/glrenderer/BasicTexture.java @@ -27,7 +27,6 @@ import java.util.WeakHashMap; // If a BasicTexture is loaded into GL memory, it has a GL texture id. public abstract class BasicTexture implements Texture { - @SuppressWarnings("unused") private static final String TAG = "BasicTexture"; protected static final int UNSPECIFIED = -1; diff --git a/WallpaperPicker/src/com/android/gallery3d/glrenderer/BitmapTexture.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/BitmapTexture.java index 100b0b3b9..f8b01cb42 100644 --- a/WallpaperPicker/src/com/android/gallery3d/glrenderer/BitmapTexture.java +++ b/WallpaperPicker/src/com/android/gallery3d/glrenderer/BitmapTexture.java @@ -18,7 +18,7 @@ package com.android.gallery3d.glrenderer; import android.graphics.Bitmap; -import junit.framework.Assert; +import com.android.gallery3d.common.Utils; // BitmapTexture is a texture whose content is specified by a fixed Bitmap. // @@ -34,7 +34,7 @@ public class BitmapTexture extends UploadedTexture { public BitmapTexture(Bitmap bitmap, boolean hasBorder) { super(hasBorder); - Assert.assertTrue(bitmap != null && !bitmap.isRecycled()); + Utils.assertTrue(bitmap != null && !bitmap.isRecycled()); mContentBitmap = bitmap; } diff --git a/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLES20Canvas.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLES20Canvas.java index 4ead1315e..933260b48 100644 --- a/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLES20Canvas.java +++ b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLES20Canvas.java @@ -23,8 +23,6 @@ import android.opengl.GLUtils; import android.opengl.Matrix; import android.util.Log; -import com.android.gallery3d.util.IntArray; - import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.ByteOrder; @@ -698,6 +696,7 @@ public class GLES20Canvas implements GLCanvas { } private void prepareTexture(BasicTexture texture, int program, ShaderParameter[] params) { + deleteRecycledResources(); GLES20.glUseProgram(program); checkError(); enableBlending(!texture.isOpaque() || getAlpha() < OPAQUE_ALPHA); diff --git a/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLPaint.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLPaint.java index 16b220690..b26e9ab29 100644 --- a/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLPaint.java +++ b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLPaint.java @@ -16,7 +16,7 @@ package com.android.gallery3d.glrenderer; -import junit.framework.Assert; +import com.android.gallery3d.common.Utils; public class GLPaint { private float mLineWidth = 1f; @@ -31,7 +31,7 @@ public class GLPaint { } public void setLineWidth(float width) { - Assert.assertTrue(width >= 0); + Utils.assertTrue(width >= 0); mLineWidth = width; } diff --git a/WallpaperPicker/src/com/android/gallery3d/util/IntArray.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/IntArray.java index 2c4dc2c83..f123624d6 100644 --- a/WallpaperPicker/src/com/android/gallery3d/util/IntArray.java +++ b/WallpaperPicker/src/com/android/gallery3d/glrenderer/IntArray.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.gallery3d.util; +package com.android.gallery3d.glrenderer; public class IntArray { private static final int INIT_CAPACITY = 8; diff --git a/WallpaperPicker/src/com/android/gallery3d/glrenderer/UploadedTexture.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/UploadedTexture.java index f41a979b7..8075bf868 100644 --- a/WallpaperPicker/src/com/android/gallery3d/glrenderer/UploadedTexture.java +++ b/WallpaperPicker/src/com/android/gallery3d/glrenderer/UploadedTexture.java @@ -20,7 +20,8 @@ import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.opengl.GLUtils; -import junit.framework.Assert; +import com.android.gallery3d.common.Utils; +import com.android.launcher3.util.Thunk; import java.util.HashMap; @@ -82,7 +83,7 @@ public abstract class UploadedTexture extends BasicTexture { return mIsUploading; } - private static class BorderKey implements Cloneable { + @Thunk static class BorderKey implements Cloneable { public boolean vertical; public Config config; public int length; @@ -144,7 +145,7 @@ public abstract class UploadedTexture extends BasicTexture { } private void freeBitmap() { - Assert.assertTrue(mBitmap != null); + Utils.assertTrue(mBitmap != null); onFreeBitmap(mBitmap); mBitmap = null; } @@ -219,7 +220,7 @@ public abstract class UploadedTexture extends BasicTexture { int texWidth = getTextureWidth(); int texHeight = getTextureHeight(); - Assert.assertTrue(bWidth <= texWidth && bHeight <= texHeight); + Utils.assertTrue(bWidth <= texWidth && bHeight <= texHeight); // Upload the bitmap to a new texture. mId = canvas.getGLId().generateTexture(); diff --git a/WallpaperPicker/src/com/android/launcher3/CropView.java b/WallpaperPicker/src/com/android/launcher3/CropView.java index 578b8eafd..50f779add 100644 --- a/WallpaperPicker/src/com/android/launcher3/CropView.java +++ b/WallpaperPicker/src/com/android/launcher3/CropView.java @@ -21,7 +21,6 @@ import android.graphics.Matrix; import android.graphics.Point; import android.graphics.RectF; import android.util.AttributeSet; -import android.util.FloatMath; import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.ScaleGestureDetector.OnScaleGestureListener; @@ -300,12 +299,12 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { adjustment[0] = (edges.right - getWidth()) / scale; } if (edges.top > 0) { - adjustment[1] = FloatMath.ceil(edges.top / scale); + adjustment[1] = (float) Math.ceil(edges.top / scale); } else if (edges.bottom < getHeight()) { adjustment[1] = (edges.bottom - getHeight()) / scale; } for (int dim = 0; dim <= 1; dim++) { - if (coef[dim] > 0) adjustment[dim] = FloatMath.ceil(adjustment[dim]); + if (coef[dim] > 0) adjustment[dim] = (float) Math.ceil(adjustment[dim]); } mInverseRotateMatrix.mapPoints(adjustment); diff --git a/src/com/android/launcher3/LauncherWallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/LauncherWallpaperPickerActivity.java index 10fe013ee..091c05462 100644 --- a/src/com/android/launcher3/LauncherWallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/LauncherWallpaperPickerActivity.java @@ -16,15 +16,6 @@ package com.android.launcher3; -import android.content.Intent; - +// TODO: Remove this class public class LauncherWallpaperPickerActivity extends WallpaperPickerActivity { - @Override - public void startActivityForResultSafely(Intent intent, int requestCode) { - Utilities.startActivityForResultSafely(this, intent, requestCode); - } - @Override - public boolean enableRotation() { - return Utilities.isRotationEnabled(this); - } -} +}
\ No newline at end of file diff --git a/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java b/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java index 88f4461bf..b53fce119 100644 --- a/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java +++ b/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java @@ -30,11 +30,12 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; -import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.TextView; +import com.android.launcher3.util.Thunk; + import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; @@ -50,7 +51,7 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter private final LayoutInflater mInflater; private final PackageManager mPackageManager; - private List<LiveWallpaperTile> mWallpapers; + @Thunk List<LiveWallpaperTile> mWallpapers; @SuppressWarnings("unchecked") public LiveWallpaperListAdapter(Context context) { @@ -90,8 +91,6 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter view = convertView; } - WallpaperPickerActivity.setWallpaperItemPaddingToZero((FrameLayout) view); - LiveWallpaperTile wallpaperInfo = mWallpapers.get(position); wallpaperInfo.setView(view); ImageView image = (ImageView) view.findViewById(R.id.wallpaper_image); @@ -111,8 +110,8 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter } public static class LiveWallpaperTile extends WallpaperPickerActivity.WallpaperTileInfo { - private Drawable mThumbnail; - private WallpaperInfo mInfo; + @Thunk Drawable mThumbnail; + @Thunk WallpaperInfo mInfo; public LiveWallpaperTile(Drawable thumbnail, WallpaperInfo info, Intent intent) { mThumbnail = thumbnail; mInfo = info; @@ -122,8 +121,8 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter Intent preview = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); preview.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, mInfo.getComponent()); - a.onLiveWallpaperPickerLaunch(mInfo); - a.startActivityForResultSafely(preview, WallpaperPickerActivity.PICK_LIVE_WALLPAPER); + a.startActivityForResultSafely(preview, + WallpaperPickerActivity.PICK_WALLPAPER_THIRD_PARTY_ACTIVITY); } } diff --git a/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java index 9f92bc105..64b0ac466 100644 --- a/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java +++ b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java @@ -16,7 +16,6 @@ package com.android.launcher3; -import android.app.Activity; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; @@ -60,13 +59,13 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { } } - public SavedWallpaperImages(Activity context) { + public SavedWallpaperImages(Context context) { // We used to store the saved images in the cache directory, but that meant they'd get // deleted sometimes-- move them to the data directory ImageDb.moveFromCacheDirectoryIfNecessary(context); mDb = new ImageDb(context); mContext = context; - mLayoutInflater = context.getLayoutInflater(); + mLayoutInflater = LayoutInflater.from(context); } public void loadThumbnailsAndImageIdList() { diff --git a/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java index 7a4d48ca9..f46da53ec 100644 --- a/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java +++ b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java @@ -28,16 +28,15 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; -import android.widget.FrameLayout; import android.widget.ListAdapter; import android.widget.TextView; +import com.android.launcher3.util.Thunk; + import java.util.ArrayList; import java.util.List; public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements ListAdapter { - private static final String LOG_TAG = "LiveWallpaperListAdapter"; - private final LayoutInflater mInflater; private final PackageManager mPackageManager; private final int mIconSize; @@ -46,7 +45,7 @@ public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements new ArrayList<ThirdPartyWallpaperTile>(); public static class ThirdPartyWallpaperTile extends WallpaperPickerActivity.WallpaperTileInfo { - private ResolveInfo mResolveInfo; + @Thunk ResolveInfo mResolveInfo; public ThirdPartyWallpaperTile(ResolveInfo resolveInfo) { mResolveInfo = resolveInfo; } @@ -62,7 +61,7 @@ public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements } public ThirdPartyWallpaperPickerListAdapter(Context context) { - mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + mInflater = LayoutInflater.from(context); mPackageManager = context.getPackageManager(); mIconSize = context.getResources().getDimensionPixelSize(R.dimen.wallpaperItemIconSize); final PackageManager pm = mPackageManager; @@ -126,8 +125,6 @@ public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements view = convertView; } - WallpaperPickerActivity.setWallpaperItemPaddingToZero((FrameLayout) view); - ResolveInfo info = mThirdPartyWallpaperPickers.get(position).mResolveInfo; TextView label = (TextView) view.findViewById(R.id.wallpaper_item_label); label.setText(info.loadLabel(mPackageManager)); diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index fa8ec64c2..f2bb50944 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -16,6 +16,7 @@ package com.android.launcher3; +import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; import android.app.WallpaperManager; @@ -25,42 +26,41 @@ import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.Bitmap.CompressFormat; -import android.graphics.BitmapFactory; -import android.graphics.BitmapRegionDecoder; -import android.graphics.Canvas; import android.graphics.Matrix; -import android.graphics.Paint; import android.graphics.Point; -import android.graphics.Rect; import android.graphics.RectF; import android.net.Uri; -import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Message; import android.util.Log; import android.view.Display; import android.view.View; -import android.view.WindowManager; import android.widget.Toast; +import com.android.gallery3d.common.BitmapCropTask; +import com.android.gallery3d.common.BitmapUtils; import com.android.gallery3d.common.Utils; -import com.android.gallery3d.exif.ExifInterface; +import com.android.launcher3.base.BaseActivity; +import com.android.launcher3.util.Thunk; +import com.android.launcher3.util.WallpaperUtils; import com.android.photos.BitmapRegionTileSource; import com.android.photos.BitmapRegionTileSource.BitmapSource; +import com.android.photos.BitmapRegionTileSource.BitmapSource.InBitmapProvider; +import com.android.photos.views.TiledImageRenderer.TileSource; -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; +import java.util.Collections; +import java.util.Set; +import java.util.WeakHashMap; -public class WallpaperCropActivity extends Activity { +public class WallpaperCropActivity extends BaseActivity implements Handler.Callback { private static final String LOGTAG = "Launcher3.CropActivity"; - protected static final String WALLPAPER_WIDTH_KEY = "wallpaper.width"; - protected static final String WALLPAPER_HEIGHT_KEY = "wallpaper.height"; - private static final int DEFAULT_COMPRESS_QUALITY = 90; + protected static final String WALLPAPER_WIDTH_KEY = WallpaperUtils.WALLPAPER_WIDTH_KEY; + protected static final String WALLPAPER_HEIGHT_KEY = WallpaperUtils.WALLPAPER_HEIGHT_KEY; + /** * The maximum bitmap size we allow to be returned through the intent. * Intents have a maximum of 1MB in total size. However, the Bitmap seems to @@ -69,17 +69,31 @@ public class WallpaperCropActivity extends Activity { * array instead of a Bitmap instance to avoid overhead. */ public static final int MAX_BMAP_IN_INTENT = 750000; - private static final float WALLPAPER_SCREENS_SPAN = 2f; + public static final float WALLPAPER_SCREENS_SPAN = WallpaperUtils.WALLPAPER_SCREENS_SPAN; - protected static Point sDefaultWallpaperSize; + private static final int MSG_LOAD_IMAGE = 1; protected CropView mCropView; + protected View mProgressView; protected Uri mUri; protected View mSetWallpaperButton; + private HandlerThread mLoaderThread; + private Handler mLoaderHandler; + @Thunk LoadRequest mCurrentLoadRequest; + private byte[] mTempStorageForDecoding = new byte[16 * 1024]; + // A weak-set of reusable bitmaps + @Thunk Set<Bitmap> mReusableBitmaps = + Collections.newSetFromMap(new WeakHashMap<Bitmap, Boolean>()); + @Override - protected void onCreate(Bundle savedInstanceState) { + public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + mLoaderThread = new HandlerThread("wallpaper_loader"); + mLoaderThread.start(); + mLoaderHandler = new Handler(mLoaderThread.getLooper(), this); + init(); if (!enableRotation()) { setRequestedOrientation(Configuration.ORIENTATION_PORTRAIT); @@ -90,6 +104,7 @@ public class WallpaperCropActivity extends Activity { setContentView(R.layout.wallpaper_cropper); mCropView = (CropView) findViewById(R.id.cropView); + mProgressView = findViewById(R.id.loading); Intent cropIntent = getIntent(); final Uri imageUri = cropIntent.getData(); @@ -116,13 +131,12 @@ public class WallpaperCropActivity extends Activity { // Load image in background final BitmapRegionTileSource.UriBitmapSource bitmapSource = - new BitmapRegionTileSource.UriBitmapSource(this, imageUri, 1024); + new BitmapRegionTileSource.UriBitmapSource(getContext(), imageUri); mSetWallpaperButton.setEnabled(false); Runnable onLoad = new Runnable() { public void run() { if (bitmapSource.getLoadingState() != BitmapSource.State.LOADED) { - Toast.makeText(WallpaperCropActivity.this, - getString(R.string.wallpaper_load_fail), + Toast.makeText(getContext(), R.string.wallpaper_load_fail, Toast.LENGTH_LONG).show(); finish(); } else { @@ -130,188 +144,163 @@ public class WallpaperCropActivity extends Activity { } } }; - setCropViewTileSource(bitmapSource, true, false, onLoad); + setCropViewTileSource(bitmapSource, true, false, null, onLoad); } @Override - protected void onDestroy() { + public void onDestroy() { if (mCropView != null) { mCropView.destroy(); } + if (mLoaderThread != null) { + mLoaderThread.quit(); + } super.onDestroy(); } - public void setCropViewTileSource( - final BitmapRegionTileSource.BitmapSource bitmapSource, final boolean touchEnabled, - final boolean moveToLeft, final Runnable postExecute) { - final Context context = WallpaperCropActivity.this; - final View progressView = findViewById(R.id.loading); - final AsyncTask<Void, Void, Void> loadBitmapTask = new AsyncTask<Void, Void, Void>() { - protected Void doInBackground(Void...args) { - if (!isCancelled()) { - try { - bitmapSource.loadInBackground(); - } catch (SecurityException securityException) { - if (isDestroyed()) { - // Temporarily granted permissions are revoked when the activity - // finishes, potentially resulting in a SecurityException here. - // Even though {@link #isDestroyed} might also return true in different - // situations where the configuration changes, we are fine with - // catching these cases here as well. - cancel(false); - } else { - // otherwise it had a different cause and we throw it further - throw securityException; + /** + * This is called on {@link #mLoaderThread} + */ + @Override + public boolean handleMessage(Message msg) { + if (msg.what == MSG_LOAD_IMAGE) { + final LoadRequest req = (LoadRequest) msg.obj; + try { + req.src.loadInBackground(new InBitmapProvider() { + + @Override + public Bitmap forPixelCount(int count) { + Bitmap bitmapToReuse = null; + // Find the smallest bitmap that satisfies the pixel count limit + synchronized (mReusableBitmaps) { + int currentBitmapSize = Integer.MAX_VALUE; + for (Bitmap b : mReusableBitmaps) { + int bitmapSize = b.getWidth() * b.getHeight(); + if ((bitmapSize >= count) && (bitmapSize < currentBitmapSize)) { + bitmapToReuse = b; + currentBitmapSize = bitmapSize; + } + } + + if (bitmapToReuse != null) { + mReusableBitmaps.remove(bitmapToReuse); + } } + return bitmapToReuse; } + }); + } catch (SecurityException securityException) { + if (isActivityDestroyed()) { + // Temporarily granted permissions are revoked when the activity + // finishes, potentially resulting in a SecurityException here. + // Even though {@link #isDestroyed} might also return true in different + // situations where the configuration changes, we are fine with + // catching these cases here as well. + return true; + } else { + // otherwise it had a different cause and we throw it further + throw securityException; } - return null; } - protected void onPostExecute(Void arg) { - if (!isCancelled()) { - progressView.setVisibility(View.INVISIBLE); - if (bitmapSource.getLoadingState() == BitmapSource.State.LOADED) { - mCropView.setTileSource( - new BitmapRegionTileSource(context, bitmapSource), null); - mCropView.setTouchEnabled(touchEnabled); - if (moveToLeft) { - mCropView.moveToLeft(); - } + + req.result = new BitmapRegionTileSource(getContext(), req.src, mTempStorageForDecoding); + runOnUiThread(new Runnable() { + + @Override + public void run() { + if (req == mCurrentLoadRequest) { + onLoadRequestComplete(req, + req.src.getLoadingState() == BitmapSource.State.LOADED); + } else { + addReusableBitmap(req.result); } } - if (postExecute != null) { - postExecute.run(); - } - } - }; - // We don't want to show the spinner every time we load an image, because that would be - // annoying; instead, only start showing the spinner if loading the image has taken - // longer than 1 sec (ie 1000 ms) - progressView.postDelayed(new Runnable() { - public void run() { - if (loadBitmapTask.getStatus() != AsyncTask.Status.FINISHED) { - progressView.setVisibility(View.VISIBLE); - } - } - }, 1000); - loadBitmapTask.execute(); - } - - public boolean enableRotation() { - return getResources().getBoolean(R.bool.allow_rotation); + }); + return true; + } + return false; } - public static String getSharedPreferencesKey() { - return LauncherFiles.WALLPAPER_CROP_PREFERENCES_KEY; + @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) + protected boolean isActivityDestroyed() { + return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) + && isDestroyed(); } - // As a ratio of screen height, the total distance we want the parallax effect to span - // horizontally - private static float wallpaperTravelToScreenWidthRatio(int width, int height) { - float aspectRatio = width / (float) height; - - // At an aspect ratio of 16/10, the wallpaper parallax effect should span 1.5 * screen width - // At an aspect ratio of 10/16, the wallpaper parallax effect should span 1.2 * screen width - // We will use these two data points to extrapolate how much the wallpaper parallax effect - // to span (ie travel) at any aspect ratio: - - final float ASPECT_RATIO_LANDSCAPE = 16/10f; - final float ASPECT_RATIO_PORTRAIT = 10/16f; - final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE = 1.5f; - final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT = 1.2f; - - // To find out the desired width at different aspect ratios, we use the following two - // formulas, where the coefficient on x is the aspect ratio (width/height): - // (16/10)x + y = 1.5 - // (10/16)x + y = 1.2 - // We solve for x and y and end up with a final formula: - final float x = - (WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE - WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT) / - (ASPECT_RATIO_LANDSCAPE - ASPECT_RATIO_PORTRAIT); - final float y = WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT - x * ASPECT_RATIO_PORTRAIT; - return x * aspectRatio + y; + @Thunk void addReusableBitmap(TileSource src) { + synchronized (mReusableBitmaps) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT + && src instanceof BitmapRegionTileSource) { + Bitmap preview = ((BitmapRegionTileSource) src).getBitmap(); + if (preview != null && preview.isMutable()) { + mReusableBitmaps.add(preview); + } + } + } } - static protected Point getDefaultWallpaperSize(Resources res, WindowManager windowManager) { - if (sDefaultWallpaperSize == null) { - Point minDims = new Point(); - Point maxDims = new Point(); - windowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims); - - int maxDim = Math.max(maxDims.x, maxDims.y); - int minDim = Math.max(minDims.x, minDims.y); - - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { - Point realSize = new Point(); - windowManager.getDefaultDisplay().getRealSize(realSize); - maxDim = Math.max(realSize.x, realSize.y); - minDim = Math.min(realSize.x, realSize.y); + protected void onLoadRequestComplete(LoadRequest req, boolean success) { + mCurrentLoadRequest = null; + if (success) { + TileSource oldSrc = mCropView.getTileSource(); + mCropView.setTileSource(req.result, null); + mCropView.setTouchEnabled(req.touchEnabled); + if (req.moveToLeft) { + mCropView.moveToLeft(); + } + if (req.scaleProvider != null) { + mCropView.setScale(req.scaleProvider.getScale(req.result)); } - // We need to ensure that there is enough extra space in the wallpaper - // for the intended parallax effects - final int defaultWidth, defaultHeight; - if (isScreenLarge(res)) { - defaultWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim)); - defaultHeight = maxDim; - } else { - defaultWidth = Math.max((int) (minDim * WALLPAPER_SCREENS_SPAN), maxDim); - defaultHeight = maxDim; + // Free last image + if (oldSrc != null) { + // Call yield instead of recycle, as we only want to free GL resource. + // We can still reuse the bitmap for decoding any other image. + oldSrc.getPreview().yield(); } - sDefaultWallpaperSize = new Point(defaultWidth, defaultHeight); + addReusableBitmap(oldSrc); } - return sDefaultWallpaperSize; + if (req.postExecute != null) { + req.postExecute.run(); + } + mProgressView.setVisibility(View.GONE); } - public static int getRotationFromExif(String path) { - return getRotationFromExifHelper(path, null, 0, null, null); - } + public final void setCropViewTileSource(BitmapSource bitmapSource, boolean touchEnabled, + boolean moveToLeft, CropViewScaleProvider scaleProvider, Runnable postExecute) { + final LoadRequest req = new LoadRequest(); + req.moveToLeft = moveToLeft; + req.src = bitmapSource; + req.touchEnabled = touchEnabled; + req.postExecute = postExecute; + req.scaleProvider = scaleProvider; + mCurrentLoadRequest = req; - public static int getRotationFromExif(Context context, Uri uri) { - return getRotationFromExifHelper(null, null, 0, context, uri); - } + // Remove any pending requests + mLoaderHandler.removeMessages(MSG_LOAD_IMAGE); + Message.obtain(mLoaderHandler, MSG_LOAD_IMAGE, req).sendToTarget(); - public static int getRotationFromExif(Resources res, int resId) { - return getRotationFromExifHelper(null, res, resId, null, null); + // We don't want to show the spinner every time we load an image, because that would be + // annoying; instead, only start showing the spinner if loading the image has taken + // longer than 1 sec (ie 1000 ms) + mProgressView.postDelayed(new Runnable() { + public void run() { + if (mCurrentLoadRequest == req) { + mProgressView.setVisibility(View.VISIBLE); + } + } + }, 1000); } - private static int getRotationFromExifHelper( - String path, Resources res, int resId, Context context, Uri uri) { - ExifInterface ei = new ExifInterface(); - InputStream is = null; - BufferedInputStream bis = null; - try { - if (path != null) { - ei.readExif(path); - } else if (uri != null) { - is = context.getContentResolver().openInputStream(uri); - bis = new BufferedInputStream(is); - ei.readExif(bis); - } else { - is = res.openRawResource(resId); - bis = new BufferedInputStream(is); - ei.readExif(bis); - } - Integer ori = ei.getTagIntValue(ExifInterface.TAG_ORIENTATION); - if (ori != null) { - return ExifInterface.getRotationForOrientationValue(ori.shortValue()); - } - } catch (IOException e) { - Log.w(LOGTAG, "Getting exif data failed", e); - } catch (NullPointerException e) { - // Sometimes the ExifInterface has an internal NPE if Exif data isn't valid - Log.w(LOGTAG, "Getting exif data failed", e); - } finally { - Utils.closeSilently(bis); - Utils.closeSilently(is); - } - return 0; + + public boolean enableRotation() { + return getResources().getBoolean(R.bool.allow_rotation); } protected void setWallpaper(Uri uri, final boolean finishActivityWhenDone) { - int rotation = getRotationFromExif(this, uri); + int rotation = BitmapUtils.getRotationFromExif(getContext(), uri); BitmapCropTask cropTask = new BitmapCropTask( - this, uri, null, rotation, 0, 0, true, false, null); + getContext(), uri, null, rotation, 0, 0, true, false, null); final Point bounds = cropTask.getImageBounds(); Runnable onEndCrop = new Runnable() { public void run() { @@ -331,11 +320,11 @@ public class WallpaperCropActivity extends Activity { Resources res, int resId, final boolean finishActivityWhenDone) { // crop this image and scale it down to the default wallpaper size for // this device - int rotation = getRotationFromExif(res, resId); + int rotation = BitmapUtils.getRotationFromExif(res, resId); Point inSize = mCropView.getSourceDimensions(); - Point outSize = getDefaultWallpaperSize(getResources(), + Point outSize = WallpaperUtils.getDefaultWallpaperSize(getResources(), getWindowManager()); - RectF crop = getMaxCropRect( + RectF crop = Utils.getMaxCropRect( inSize.x, inSize.y, outSize.x, outSize.y, false); Runnable onEndCrop = new Runnable() { public void run() { @@ -348,18 +337,14 @@ public class WallpaperCropActivity extends Activity { } } }; - BitmapCropTask cropTask = new BitmapCropTask(this, res, resId, + BitmapCropTask cropTask = new BitmapCropTask(getContext(), res, resId, crop, rotation, outSize.x, outSize.y, true, false, onEndCrop); cropTask.execute(); } - private static boolean isScreenLarge(Resources res) { - Configuration config = res.getConfiguration(); - return config.smallestScreenWidthDp >= 720; - } - + @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) protected void cropImageAndSetWallpaper(Uri uri, - OnBitmapCroppedHandler onBitmapCroppedHandler, final boolean finishActivityWhenDone) { + BitmapCropTask.OnBitmapCroppedHandler onBitmapCroppedHandler, final boolean finishActivityWhenDone) { boolean centerCrop = getResources().getBoolean(R.bool.center_crop); // Get the crop boolean ltr = mCropView.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR; @@ -370,7 +355,7 @@ public class WallpaperCropActivity extends Activity { d.getSize(displaySize); boolean isPortrait = displaySize.x < displaySize.y; - Point defaultWallpaperSize = getDefaultWallpaperSize(getResources(), + Point defaultWallpaperSize = WallpaperUtils.getDefaultWallpaperSize(getResources(), getWindowManager()); // Get the crop RectF cropRect = mCropView.getCrop(); @@ -444,7 +429,7 @@ public class WallpaperCropActivity extends Activity { } } }; - BitmapCropTask cropTask = new BitmapCropTask(this, uri, + BitmapCropTask cropTask = new BitmapCropTask(getContext(), uri, cropRect, cropRotation, outWidth, outHeight, true, false, onEndCrop); if (onBitmapCroppedHandler != null) { cropTask.setOnBitmapCropped(onBitmapCroppedHandler); @@ -452,375 +437,9 @@ public class WallpaperCropActivity extends Activity { cropTask.execute(); } - public interface OnBitmapCroppedHandler { - public void onBitmapCropped(byte[] imageBytes); - } - - protected static class BitmapCropTask extends AsyncTask<Void, Void, Boolean> { - Uri mInUri = null; - Context mContext; - String mInFilePath; - byte[] mInImageBytes; - int mInResId = 0; - RectF mCropBounds = null; - int mOutWidth, mOutHeight; - int mRotation; - String mOutputFormat = "jpg"; // for now - boolean mSetWallpaper; - boolean mSaveCroppedBitmap; - Bitmap mCroppedBitmap; - Runnable mOnEndRunnable; - Resources mResources; - OnBitmapCroppedHandler mOnBitmapCroppedHandler; - boolean mNoCrop; - - public BitmapCropTask(Context c, String filePath, - RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { - mContext = c; - mInFilePath = filePath; - init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); - } - - public BitmapCropTask(byte[] imageBytes, - RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { - mInImageBytes = imageBytes; - init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); - } - - public BitmapCropTask(Context c, Uri inUri, - RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { - mContext = c; - mInUri = inUri; - init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); - } - - public BitmapCropTask(Context c, Resources res, int inResId, - RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { - mContext = c; - mInResId = inResId; - mResources = res; - init(cropBounds, rotation, - outWidth, outHeight, setWallpaper, saveCroppedBitmap, onEndRunnable); - } - - private void init(RectF cropBounds, int rotation, int outWidth, int outHeight, - boolean setWallpaper, boolean saveCroppedBitmap, Runnable onEndRunnable) { - mCropBounds = cropBounds; - mRotation = rotation; - mOutWidth = outWidth; - mOutHeight = outHeight; - mSetWallpaper = setWallpaper; - mSaveCroppedBitmap = saveCroppedBitmap; - mOnEndRunnable = onEndRunnable; - } - - public void setOnBitmapCropped(OnBitmapCroppedHandler handler) { - mOnBitmapCroppedHandler = handler; - } - - public void setNoCrop(boolean value) { - mNoCrop = value; - } - - public void setOnEndRunnable(Runnable onEndRunnable) { - mOnEndRunnable = onEndRunnable; - } - - // Helper to setup input stream - private InputStream regenerateInputStream() { - if (mInUri == null && mInResId == 0 && mInFilePath == null && mInImageBytes == null) { - Log.w(LOGTAG, "cannot read original file, no input URI, resource ID, or " + - "image byte array given"); - } else { - try { - if (mInUri != null) { - return new BufferedInputStream( - mContext.getContentResolver().openInputStream(mInUri)); - } else if (mInFilePath != null) { - return mContext.openFileInput(mInFilePath); - } else if (mInImageBytes != null) { - return new BufferedInputStream(new ByteArrayInputStream(mInImageBytes)); - } else { - return new BufferedInputStream(mResources.openRawResource(mInResId)); - } - } catch (FileNotFoundException e) { - Log.w(LOGTAG, "cannot read file: " + mInUri.toString(), e); - } - } - return null; - } - - public Point getImageBounds() { - InputStream is = regenerateInputStream(); - if (is != null) { - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inJustDecodeBounds = true; - BitmapFactory.decodeStream(is, null, options); - Utils.closeSilently(is); - if (options.outWidth != 0 && options.outHeight != 0) { - return new Point(options.outWidth, options.outHeight); - } - } - return null; - } - - public void setCropBounds(RectF cropBounds) { - mCropBounds = cropBounds; - } - - public Bitmap getCroppedBitmap() { - return mCroppedBitmap; - } - public boolean cropBitmap() { - boolean failure = false; - - - WallpaperManager wallpaperManager = null; - if (mSetWallpaper) { - wallpaperManager = WallpaperManager.getInstance(mContext.getApplicationContext()); - } - - - if (mSetWallpaper && mNoCrop) { - try { - InputStream is = regenerateInputStream(); - if (is != null) { - wallpaperManager.setStream(is); - Utils.closeSilently(is); - } - } catch (IOException e) { - Log.w(LOGTAG, "cannot write stream to wallpaper", e); - failure = true; - } - return !failure; - } else { - // Find crop bounds (scaled to original image size) - Rect roundedTrueCrop = new Rect(); - Matrix rotateMatrix = new Matrix(); - Matrix inverseRotateMatrix = new Matrix(); - - Point bounds = getImageBounds(); - if (mRotation > 0) { - rotateMatrix.setRotate(mRotation); - inverseRotateMatrix.setRotate(-mRotation); - - mCropBounds.roundOut(roundedTrueCrop); - mCropBounds = new RectF(roundedTrueCrop); - - if (bounds == null) { - Log.w(LOGTAG, "cannot get bounds for image"); - failure = true; - return false; - } - - float[] rotatedBounds = new float[] { bounds.x, bounds.y }; - rotateMatrix.mapPoints(rotatedBounds); - rotatedBounds[0] = Math.abs(rotatedBounds[0]); - rotatedBounds[1] = Math.abs(rotatedBounds[1]); - - mCropBounds.offset(-rotatedBounds[0]/2, -rotatedBounds[1]/2); - inverseRotateMatrix.mapRect(mCropBounds); - mCropBounds.offset(bounds.x/2, bounds.y/2); - - } - - mCropBounds.roundOut(roundedTrueCrop); - - if (roundedTrueCrop.width() <= 0 || roundedTrueCrop.height() <= 0) { - Log.w(LOGTAG, "crop has bad values for full size image"); - failure = true; - return false; - } - - // See how much we're reducing the size of the image - int scaleDownSampleSize = Math.max(1, Math.min(roundedTrueCrop.width() / mOutWidth, - roundedTrueCrop.height() / mOutHeight)); - // Attempt to open a region decoder - BitmapRegionDecoder decoder = null; - InputStream is = null; - try { - is = regenerateInputStream(); - if (is == null) { - Log.w(LOGTAG, "cannot get input stream for uri=" + mInUri.toString()); - failure = true; - return false; - } - decoder = BitmapRegionDecoder.newInstance(is, false); - Utils.closeSilently(is); - } catch (IOException e) { - Log.w(LOGTAG, "cannot open region decoder for file: " + mInUri.toString(), e); - } finally { - Utils.closeSilently(is); - is = null; - } - - Bitmap crop = null; - if (decoder != null) { - // Do region decoding to get crop bitmap - BitmapFactory.Options options = new BitmapFactory.Options(); - if (scaleDownSampleSize > 1) { - options.inSampleSize = scaleDownSampleSize; - } - crop = decoder.decodeRegion(roundedTrueCrop, options); - decoder.recycle(); - } - - if (crop == null) { - // BitmapRegionDecoder has failed, try to crop in-memory - is = regenerateInputStream(); - Bitmap fullSize = null; - if (is != null) { - BitmapFactory.Options options = new BitmapFactory.Options(); - if (scaleDownSampleSize > 1) { - options.inSampleSize = scaleDownSampleSize; - } - fullSize = BitmapFactory.decodeStream(is, null, options); - Utils.closeSilently(is); - } - if (fullSize != null) { - // Find out the true sample size that was used by the decoder - scaleDownSampleSize = bounds.x / fullSize.getWidth(); - mCropBounds.left /= scaleDownSampleSize; - mCropBounds.top /= scaleDownSampleSize; - mCropBounds.bottom /= scaleDownSampleSize; - mCropBounds.right /= scaleDownSampleSize; - mCropBounds.roundOut(roundedTrueCrop); - - // Adjust values to account for issues related to rounding - if (roundedTrueCrop.width() > fullSize.getWidth()) { - // Adjust the width - roundedTrueCrop.right = roundedTrueCrop.left + fullSize.getWidth(); - } - if (roundedTrueCrop.right > fullSize.getWidth()) { - // Adjust the left value - int adjustment = roundedTrueCrop.left - - Math.max(0, roundedTrueCrop.right - roundedTrueCrop.width()); - roundedTrueCrop.left -= adjustment; - roundedTrueCrop.right -= adjustment; - } - if (roundedTrueCrop.height() > fullSize.getHeight()) { - // Adjust the height - roundedTrueCrop.bottom = roundedTrueCrop.top + fullSize.getHeight(); - } - if (roundedTrueCrop.bottom > fullSize.getHeight()) { - // Adjust the top value - int adjustment = roundedTrueCrop.top - - Math.max(0, roundedTrueCrop.bottom - roundedTrueCrop.height()); - roundedTrueCrop.top -= adjustment; - roundedTrueCrop.bottom -= adjustment; - } - - crop = Bitmap.createBitmap(fullSize, roundedTrueCrop.left, - roundedTrueCrop.top, roundedTrueCrop.width(), - roundedTrueCrop.height()); - } - } - - if (crop == null) { - Log.w(LOGTAG, "cannot decode file: " + mInUri.toString()); - failure = true; - return false; - } - if (mOutWidth > 0 && mOutHeight > 0 || mRotation > 0) { - float[] dimsAfter = new float[] { crop.getWidth(), crop.getHeight() }; - rotateMatrix.mapPoints(dimsAfter); - dimsAfter[0] = Math.abs(dimsAfter[0]); - dimsAfter[1] = Math.abs(dimsAfter[1]); - - if (!(mOutWidth > 0 && mOutHeight > 0)) { - mOutWidth = Math.round(dimsAfter[0]); - mOutHeight = Math.round(dimsAfter[1]); - } - - RectF cropRect = new RectF(0, 0, dimsAfter[0], dimsAfter[1]); - RectF returnRect = new RectF(0, 0, mOutWidth, mOutHeight); - - Matrix m = new Matrix(); - if (mRotation == 0) { - m.setRectToRect(cropRect, returnRect, Matrix.ScaleToFit.FILL); - } else { - Matrix m1 = new Matrix(); - m1.setTranslate(-crop.getWidth() / 2f, -crop.getHeight() / 2f); - Matrix m2 = new Matrix(); - m2.setRotate(mRotation); - Matrix m3 = new Matrix(); - m3.setTranslate(dimsAfter[0] / 2f, dimsAfter[1] / 2f); - Matrix m4 = new Matrix(); - m4.setRectToRect(cropRect, returnRect, Matrix.ScaleToFit.FILL); - - Matrix c1 = new Matrix(); - c1.setConcat(m2, m1); - Matrix c2 = new Matrix(); - c2.setConcat(m4, m3); - m.setConcat(c2, c1); - } - - Bitmap tmp = Bitmap.createBitmap((int) returnRect.width(), - (int) returnRect.height(), Bitmap.Config.ARGB_8888); - if (tmp != null) { - Canvas c = new Canvas(tmp); - Paint p = new Paint(); - p.setFilterBitmap(true); - c.drawBitmap(crop, m, p); - crop = tmp; - } - } - - if (mSaveCroppedBitmap) { - mCroppedBitmap = crop; - } - - // Get output compression format - CompressFormat cf = - convertExtensionToCompressFormat(getFileExtension(mOutputFormat)); - - // Compress to byte array - ByteArrayOutputStream tmpOut = new ByteArrayOutputStream(2048); - if (crop.compress(cf, DEFAULT_COMPRESS_QUALITY, tmpOut)) { - // If we need to set to the wallpaper, set it - if (mSetWallpaper && wallpaperManager != null) { - try { - byte[] outByteArray = tmpOut.toByteArray(); - wallpaperManager.setStream(new ByteArrayInputStream(outByteArray)); - if (mOnBitmapCroppedHandler != null) { - mOnBitmapCroppedHandler.onBitmapCropped(outByteArray); - } - } catch (IOException e) { - Log.w(LOGTAG, "cannot write stream to wallpaper", e); - failure = true; - } - } - } else { - Log.w(LOGTAG, "cannot compress bitmap"); - failure = true; - } - } - return !failure; // True if any of the operations failed - } - - @Override - protected Boolean doInBackground(Void... params) { - return cropBitmap(); - } - - @Override - protected void onPostExecute(Boolean result) { - if (mOnEndRunnable != null) { - mOnEndRunnable.run(); - } - } - } - protected void updateWallpaperDimensions(int width, int height) { - String spKey = getSharedPreferencesKey(); - SharedPreferences sp = getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS); + String spKey = LauncherFiles.WALLPAPER_CROP_PREFERENCES_KEY; + SharedPreferences sp = getContext().getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS); SharedPreferences.Editor editor = sp.edit(); if (width != 0 && height != 0) { editor.putInt(WALLPAPER_WIDTH_KEY, width); @@ -830,69 +449,21 @@ public class WallpaperCropActivity extends Activity { editor.remove(WALLPAPER_HEIGHT_KEY); } editor.commit(); - - suggestWallpaperDimension(getResources(), - sp, getWindowManager(), WallpaperManager.getInstance(this), true); - } - - static public void suggestWallpaperDimension(Resources res, - final SharedPreferences sharedPrefs, - WindowManager windowManager, - final WallpaperManager wallpaperManager, boolean fallBackToDefaults) { - final Point defaultWallpaperSize = getDefaultWallpaperSize(res, windowManager); - // If we have saved a wallpaper width/height, use that instead - - int savedWidth = sharedPrefs.getInt(WALLPAPER_WIDTH_KEY, -1); - int savedHeight = sharedPrefs.getInt(WALLPAPER_HEIGHT_KEY, -1); - - if (savedWidth == -1 || savedHeight == -1) { - if (!fallBackToDefaults) { - return; - } else { - savedWidth = defaultWallpaperSize.x; - savedHeight = defaultWallpaperSize.y; - } - } - - if (savedWidth != wallpaperManager.getDesiredMinimumWidth() || - savedHeight != wallpaperManager.getDesiredMinimumHeight()) { - wallpaperManager.suggestDesiredDimensions(savedWidth, savedHeight); - } + WallpaperUtils.suggestWallpaperDimension(getResources(), + sp, getWindowManager(), WallpaperManager.getInstance(getContext()), true); } - protected static RectF getMaxCropRect( - int inWidth, int inHeight, int outWidth, int outHeight, boolean leftAligned) { - RectF cropRect = new RectF(); - // Get a crop rect that will fit this - if (inWidth / (float) inHeight > outWidth / (float) outHeight) { - cropRect.top = 0; - cropRect.bottom = inHeight; - cropRect.left = (inWidth - (outWidth / (float) outHeight) * inHeight) / 2; - cropRect.right = inWidth - cropRect.left; - if (leftAligned) { - cropRect.right -= cropRect.left; - cropRect.left = 0; - } - } else { - cropRect.left = 0; - cropRect.right = inWidth; - cropRect.top = (inHeight - (outHeight / (float) outWidth) * inWidth) / 2; - cropRect.bottom = inHeight - cropRect.top; - } - return cropRect; - } + static class LoadRequest { + BitmapSource src; + boolean touchEnabled; + boolean moveToLeft; + Runnable postExecute; + CropViewScaleProvider scaleProvider; - protected static CompressFormat convertExtensionToCompressFormat(String extension) { - return extension.equals("png") ? CompressFormat.PNG : CompressFormat.JPEG; + TileSource result; } - protected static String getFileExtension(String requestFormat) { - String outputFormat = (requestFormat == null) - ? "jpg" - : requestFormat; - outputFormat = outputFormat.toLowerCase(); - return (outputFormat.equals("png") || outputFormat.equals("gif")) - ? "png" // We don't support gif compression. - : "jpg"; + interface CropViewScaleProvider { + float getScale(TileSource src); } } diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 09e096396..88dc3e22b 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -16,11 +16,11 @@ package com.android.launcher3; +import android.Manifest.permission; import android.animation.LayoutTransition; import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; -import android.app.WallpaperInfo; import android.app.WallpaperManager; import android.content.Context; import android.content.Intent; @@ -35,15 +35,15 @@ import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Point; import android.graphics.PorterDuff; -import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.LevelListDrawable; +import android.Manifest; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; +import android.os.Process; import android.provider.MediaStore; import android.util.Log; import android.util.Pair; @@ -52,6 +52,7 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLayoutChangeListener; @@ -70,8 +71,14 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; +import com.android.gallery3d.common.BitmapCropTask; +import com.android.gallery3d.common.BitmapUtils; +import com.android.gallery3d.common.Utils; +import com.android.launcher3.util.Thunk; +import com.android.launcher3.util.WallpaperUtils; import com.android.photos.BitmapRegionTileSource; import com.android.photos.BitmapRegionTileSource.BitmapSource; +import com.android.photos.views.TiledImageRenderer.TileSource; import java.io.File; import java.io.FileOutputStream; @@ -83,28 +90,25 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public static final int IMAGE_PICK = 5; public static final int PICK_WALLPAPER_THIRD_PARTY_ACTIVITY = 6; - public static final int PICK_LIVE_WALLPAPER = 7; private static final String TEMP_WALLPAPER_TILES = "TEMP_WALLPAPER_TILES"; private static final String SELECTED_INDEX = "SELECTED_INDEX"; private static final int FLAG_POST_DELAY_MILLIS = 200; - private View mSelectedTile; - private boolean mIgnoreNextTap; - private OnClickListener mThumbnailOnClickListener; + @Thunk View mSelectedTile; + @Thunk boolean mIgnoreNextTap; + @Thunk OnClickListener mThumbnailOnClickListener; - private LinearLayout mWallpapersView; - private View mWallpaperStrip; + @Thunk LinearLayout mWallpapersView; + @Thunk HorizontalScrollView mWallpaperScrollContainer; - private ActionMode.Callback mActionModeCallback; - private ActionMode mActionMode; + @Thunk ActionMode.Callback mActionModeCallback; + @Thunk ActionMode mActionMode; - private View.OnLongClickListener mLongClickListener; + @Thunk View.OnLongClickListener mLongClickListener; ArrayList<Uri> mTempWallpaperTiles = new ArrayList<Uri>(); private SavedWallpaperImages mSavedImages; - private WallpaperInfo mLiveWallpaperInfoOnPickerLaunch; - private int mSelectedIndex = -1; - private WallpaperInfo mLastClickedLiveWallpaperInfo; + @Thunk int mSelectedIndex = -1; public static abstract class WallpaperTileInfo { protected View mView; @@ -136,45 +140,36 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public static class UriWallpaperInfo extends WallpaperTileInfo { private Uri mUri; - private boolean mFirstClick = true; - private BitmapRegionTileSource.UriBitmapSource mBitmapSource; public UriWallpaperInfo(Uri uri) { mUri = uri; } @Override public void onClick(final WallpaperPickerActivity a) { - final Runnable onLoad; - if (!mFirstClick) { - onLoad = null; - } else { - mFirstClick = false; - a.mSetWallpaperButton.setEnabled(false); - onLoad = new Runnable() { - public void run() { - if (mBitmapSource != null && - mBitmapSource.getLoadingState() == BitmapSource.State.LOADED) { - a.selectTile(mView); - a.mSetWallpaperButton.setEnabled(true); - } else { - ViewGroup parent = (ViewGroup) mView.getParent(); - if (parent != null) { - parent.removeView(mView); - Toast.makeText(a, - a.getString(R.string.image_load_fail), - Toast.LENGTH_SHORT).show(); - } + a.setWallpaperButtonEnabled(false); + final BitmapRegionTileSource.UriBitmapSource bitmapSource = + new BitmapRegionTileSource.UriBitmapSource(a.getContext(), mUri); + a.setCropViewTileSource(bitmapSource, true, false, null, new Runnable() { + + @Override + public void run() { + if (bitmapSource.getLoadingState() == BitmapSource.State.LOADED) { + a.selectTile(mView); + a.setWallpaperButtonEnabled(true); + } else { + ViewGroup parent = (ViewGroup) mView.getParent(); + if (parent != null) { + parent.removeView(mView); + Toast.makeText(a.getContext(), R.string.image_load_fail, + Toast.LENGTH_SHORT).show(); } } - }; - } - mBitmapSource = new BitmapRegionTileSource.UriBitmapSource( - a, mUri, BitmapRegionTileSource.MAX_PREVIEW_SIZE); - a.setCropViewTileSource(mBitmapSource, true, false, onLoad); + } + }); } @Override public void onSave(final WallpaperPickerActivity a) { boolean finishActivityWhenDone = true; - OnBitmapCroppedHandler h = new OnBitmapCroppedHandler() { + BitmapCropTask.OnBitmapCroppedHandler h = new BitmapCropTask.OnBitmapCroppedHandler() { public void onBitmapCropped(byte[] imageBytes) { Point thumbSize = getDefaultThumbnailSize(a.getResources()); // rotation is set to 0 since imageBytes has already been correctly rotated @@ -203,10 +198,19 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mThumb = thumb; } @Override - public void onClick(WallpaperPickerActivity a) { - BitmapRegionTileSource.UriBitmapSource bitmapSource = - new BitmapRegionTileSource.UriBitmapSource(a, Uri.fromFile(mFile), 1024); - a.setCropViewTileSource(bitmapSource, false, true, null); + public void onClick(final WallpaperPickerActivity a) { + a.setWallpaperButtonEnabled(false); + final BitmapRegionTileSource.UriBitmapSource bitmapSource = + new BitmapRegionTileSource.UriBitmapSource(a.getContext(), Uri.fromFile(mFile)); + a.setCropViewTileSource(bitmapSource, false, true, null, new Runnable() { + + @Override + public void run() { + if (bitmapSource.getLoadingState() == BitmapSource.State.LOADED) { + a.setWallpaperButtonEnabled(true); + } + } + }); } @Override public void onSave(WallpaperPickerActivity a) { @@ -232,22 +236,30 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mThumb = thumb; } @Override - public void onClick(WallpaperPickerActivity a) { - BitmapRegionTileSource.ResourceBitmapSource bitmapSource = - new BitmapRegionTileSource.ResourceBitmapSource( - mResources, mResId, BitmapRegionTileSource.MAX_PREVIEW_SIZE); - bitmapSource.loadInBackground(); - BitmapRegionTileSource source = new BitmapRegionTileSource(a, bitmapSource); - CropView v = a.getCropView(); - v.setTileSource(source, null); - Point wallpaperSize = WallpaperCropActivity.getDefaultWallpaperSize( - a.getResources(), a.getWindowManager()); - RectF crop = WallpaperCropActivity.getMaxCropRect( - source.getImageWidth(), source.getImageHeight(), - wallpaperSize.x, wallpaperSize.y, false); - v.setScale(wallpaperSize.x / crop.width()); - v.setTouchEnabled(false); - a.setSystemWallpaperVisiblity(false); + public void onClick(final WallpaperPickerActivity a) { + a.setWallpaperButtonEnabled(false); + final BitmapRegionTileSource.ResourceBitmapSource bitmapSource = + new BitmapRegionTileSource.ResourceBitmapSource(mResources, mResId); + a.setCropViewTileSource(bitmapSource, false, false, new CropViewScaleProvider() { + + @Override + public float getScale(TileSource src) { + Point wallpaperSize = WallpaperUtils.getDefaultWallpaperSize( + a.getResources(), a.getWindowManager()); + RectF crop = Utils.getMaxCropRect( + src.getImageWidth(), src.getImageHeight(), + wallpaperSize.x, wallpaperSize.y, false); + return wallpaperSize.x / crop.width(); + } + }, new Runnable() { + + @Override + public void run() { + if (bitmapSource.getLoadingState() == BitmapSource.State.LOADED) { + a.setWallpaperButtonEnabled(true); + } + } + }); } @Override public void onSave(WallpaperPickerActivity a) { @@ -272,27 +284,33 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { @Override public void onClick(WallpaperPickerActivity a) { CropView c = a.getCropView(); - - Drawable defaultWallpaper = WallpaperManager.getInstance(a).getBuiltInDrawable( - c.getWidth(), c.getHeight(), false, 0.5f, 0.5f); - + Drawable defaultWallpaper = WallpaperManager.getInstance(a.getContext()) + .getBuiltInDrawable(c.getWidth(), c.getHeight(), false, 0.5f, 0.5f); if (defaultWallpaper == null) { Log.w(TAG, "Null default wallpaper encountered."); c.setTileSource(null, null); return; } - c.setTileSource( - new DrawableTileSource(a, defaultWallpaper, DrawableTileSource.MAX_PREVIEW_SIZE), null); - c.setScale(1f); - c.setTouchEnabled(false); - a.setSystemWallpaperVisiblity(false); + LoadRequest req = new LoadRequest(); + req.moveToLeft = false; + req.touchEnabled = false; + req.scaleProvider = new CropViewScaleProvider() { + + @Override + public float getScale(TileSource src) { + return 1f; + } + }; + req.result = new DrawableTileSource(a.getContext(), + defaultWallpaper, DrawableTileSource.MAX_PREVIEW_SIZE); + a.onLoadRequestComplete(req, true); } @Override public void onSave(WallpaperPickerActivity a) { try { - WallpaperManager.getInstance(a).clear(); - a.setResult(RESULT_OK); + WallpaperManager.getInstance(a.getContext()).clear(); + a.setResult(Activity.RESULT_OK); } catch (IOException e) { Log.w("Setting wallpaper to default threw exception", e); } @@ -308,10 +326,6 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - public void setWallpaperStripYOffset(float offset) { - mWallpaperStrip.setPadding(0, 0, 0, (int) offset); - } - /** * shows the system wallpaper behind the window and hides the {@link * #mCropView} if visible @@ -338,7 +352,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { }, FLAG_POST_DELAY_MILLIS); } - private void changeWallpaperFlags(boolean visible) { + @Thunk void changeWallpaperFlags(boolean visible) { int desiredWallpaperFlag = visible ? WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER : 0; int currentWallpaperFlag = getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; @@ -349,24 +363,11 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } @Override - public void setCropViewTileSource(BitmapSource bitmapSource, - boolean touchEnabled, - boolean moveToLeft, - final Runnable postExecute) { - // we also want to show our own wallpaper instead of the one in the background - Runnable showPostExecuteRunnable = new Runnable() { - @Override - public void run() { - if(postExecute != null) { - postExecute.run(); - } - setSystemWallpaperVisiblity(false); - } - }; - super.setCropViewTileSource(bitmapSource, - touchEnabled, - moveToLeft, - showPostExecuteRunnable); + protected void onLoadRequestComplete(LoadRequest req, boolean success) { + super.onLoadRequestComplete(req, success); + if (success) { + setSystemWallpaperVisiblity(false); + } } // called by onCreate; this is subclassed to overwrite WallpaperCropActivity @@ -376,7 +377,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mCropView = (CropView) findViewById(R.id.cropView); mCropView.setVisibility(View.INVISIBLE); - mWallpaperStrip = findViewById(R.id.wallpaper_strip); + mProgressView = findViewById(R.id.loading); + mWallpaperScrollContainer = (HorizontalScrollView) findViewById(R.id.wallpaper_scroll_container); mCropView.setTouchCallback(new CropView.TouchCallback() { ViewPropertyAnimator mAnim; @Override @@ -384,15 +386,15 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (mAnim != null) { mAnim.cancel(); } - if (mWallpaperStrip.getAlpha() == 1f) { + if (mWallpaperScrollContainer.getAlpha() == 1f) { mIgnoreNextTap = true; } - mAnim = mWallpaperStrip.animate(); + mAnim = mWallpaperScrollContainer.animate(); mAnim.alpha(0f) .setDuration(150) .withEndAction(new Runnable() { public void run() { - mWallpaperStrip.setVisibility(View.INVISIBLE); + mWallpaperScrollContainer.setVisibility(View.INVISIBLE); } }); mAnim.setInterpolator(new AccelerateInterpolator(0.75f)); @@ -410,8 +412,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (mAnim != null) { mAnim.cancel(); } - mWallpaperStrip.setVisibility(View.VISIBLE); - mAnim = mWallpaperStrip.animate(); + mWallpaperScrollContainer.setVisibility(View.VISIBLE); + mAnim = mWallpaperScrollContainer.animate(); mAnim.alpha(1f) .setDuration(150) .setInterpolator(new DecelerateInterpolator(0.75f)); @@ -429,7 +431,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } return; } - mSetWallpaperButton.setEnabled(true); + setWallpaperButtonEnabled(true); WallpaperTileInfo info = (WallpaperTileInfo) v.getTag(); if (info.isSelectable() && v.getVisibility() == View.VISIBLE) { selectTile(v); @@ -460,18 +462,18 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { // Populate the built-in wallpapers ArrayList<WallpaperTileInfo> wallpapers = findBundledWallpapers(); mWallpapersView = (LinearLayout) findViewById(R.id.wallpaper_list); - SimpleWallpapersAdapter ia = new SimpleWallpapersAdapter(this, wallpapers); + SimpleWallpapersAdapter ia = new SimpleWallpapersAdapter(getContext(), wallpapers); populateWallpapersFromAdapter(mWallpapersView, ia, false); // Populate the saved wallpapers - mSavedImages = new SavedWallpaperImages(this); + mSavedImages = new SavedWallpaperImages(getContext()); mSavedImages.loadThumbnailsAndImageIdList(); populateWallpapersFromAdapter(mWallpapersView, mSavedImages, true); // Populate the live wallpapers final LinearLayout liveWallpapersView = (LinearLayout) findViewById(R.id.live_wallpaper_list); - final LiveWallpaperListAdapter a = new LiveWallpaperListAdapter(this); + final LiveWallpaperListAdapter a = new LiveWallpaperListAdapter(getContext()); a.registerDataSetObserver(new DataSetObserver() { public void onChanged() { liveWallpapersView.removeAllViews(); @@ -485,14 +487,13 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { final LinearLayout thirdPartyWallpapersView = (LinearLayout) findViewById(R.id.third_party_wallpaper_list); final ThirdPartyWallpaperPickerListAdapter ta = - new ThirdPartyWallpaperPickerListAdapter(this); + new ThirdPartyWallpaperPickerListAdapter(getContext()); populateWallpapersFromAdapter(thirdPartyWallpapersView, ta, false); // Add a tile for the Gallery LinearLayout masterWallpaperList = (LinearLayout) findViewById(R.id.master_wallpaper_list); FrameLayout pickImageTile = (FrameLayout) getLayoutInflater(). inflate(R.layout.wallpaper_picker_image_picker_item, masterWallpaperList, false); - setWallpaperItemPaddingToZero(pickImageTile); masterWallpaperList.addView(pickImageTile, 0); // Make its background the last photo taken on external storage @@ -500,10 +501,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (lastPhoto != null) { ImageView galleryThumbnailBg = (ImageView) pickImageTile.findViewById(R.id.wallpaper_image); - galleryThumbnailBg.setImageBitmap(getThumbnailOfLastPhoto()); + galleryThumbnailBg.setImageBitmap(lastPhoto); int colorOverlay = getResources().getColor(R.color.wallpaper_picker_translucent_gray); galleryThumbnailBg.setColorFilter(colorOverlay, PorterDuff.Mode.SRC_ATOP); - } PickImageInfo pickImageInfo = new PickImageInfo(); @@ -650,7 +650,11 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { }; } - private void selectTile(View v) { + public void setWallpaperButtonEnabled(boolean enabled) { + mSetWallpaperButton.setEnabled(enabled); + } + + @Thunk void selectTile(View v) { if (mSelectedTile != null) { mSelectedTile.setSelected(false); mSelectedTile = null; @@ -661,28 +665,35 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { // TODO: Remove this once the accessibility framework and // services have better support for selection state. v.announceForAccessibility( - getString(R.string.announce_selection, v.getContentDescription())); + getContext().getString(R.string.announce_selection, v.getContentDescription())); } - private void initializeScrollForRtl() { - final HorizontalScrollView scroll = - (HorizontalScrollView) findViewById(R.id.wallpaper_scroll_container); - - if (scroll.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { - final ViewTreeObserver observer = scroll.getViewTreeObserver(); + @Thunk void initializeScrollForRtl() { + if (Utilities.isRtl(getResources())) { + final ViewTreeObserver observer = mWallpaperScrollContainer.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { public void onGlobalLayout() { LinearLayout masterWallpaperList = (LinearLayout) findViewById(R.id.master_wallpaper_list); - scroll.scrollTo(masterWallpaperList.getWidth(), 0); - scroll.getViewTreeObserver().removeOnGlobalLayoutListener(this); + mWallpaperScrollContainer.scrollTo(masterWallpaperList.getWidth(), 0); + mWallpaperScrollContainer.getViewTreeObserver().removeOnGlobalLayoutListener(this); } }); } } protected Bitmap getThumbnailOfLastPhoto() { - Cursor cursor = MediaStore.Images.Media.query(getContentResolver(), + boolean canReadExternalStorage = getActivity().checkPermission( + Manifest.permission.READ_EXTERNAL_STORAGE, Process.myPid(), Process.myUid()) == + PackageManager.PERMISSION_GRANTED; + + if (!canReadExternalStorage) { + // MediaStore.Images.Media.EXTERNAL_CONTENT_URI requires + // the READ_EXTERNAL_STORAGE permission + return null; + } + + Cursor cursor = MediaStore.Images.Media.query(getContext().getContentResolver(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATE_TAKEN}, @@ -692,7 +703,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (cursor != null) { if (cursor.moveToNext()) { int id = cursor.getInt(0); - thumb = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), + thumb = MediaStore.Images.Thumbnails.getThumbnail(getContext().getContentResolver(), id, MediaStore.Images.Thumbnails.MINI_KIND, null); } cursor.close(); @@ -700,16 +711,16 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { return thumb; } - protected void onStop() { + public void onStop() { super.onStop(); - mWallpaperStrip = findViewById(R.id.wallpaper_strip); - if (mWallpaperStrip.getAlpha() < 1f) { - mWallpaperStrip.setAlpha(1f); - mWallpaperStrip.setVisibility(View.VISIBLE); + mWallpaperScrollContainer = (HorizontalScrollView) findViewById(R.id.wallpaper_scroll_container); + if (mWallpaperScrollContainer.getAlpha() < 1f) { + mWallpaperScrollContainer.setAlpha(1f); + mWallpaperScrollContainer.setVisibility(View.VISIBLE); } } - protected void onSaveInstanceState(Bundle outState) { + public void onSaveInstanceState(Bundle outState) { outState.putParcelableArrayList(TEMP_WALLPAPER_TILES, mTempWallpaperTiles); outState.putInt(SELECTED_INDEX, mSelectedIndex); } @@ -722,7 +733,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mSelectedIndex = savedInstanceState.getInt(SELECTED_INDEX, -1); } - private void populateWallpapersFromAdapter(ViewGroup parent, BaseAdapter adapter, + @Thunk void populateWallpapersFromAdapter(ViewGroup parent, BaseAdapter adapter, boolean addLongPressHandler) { for (int i = 0; i < adapter.getCount(); i++) { FrameLayout thumbnail = (FrameLayout) adapter.getView(i, null, parent); @@ -737,7 +748,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - private void updateTileIndices() { + @Thunk void updateTileIndices() { LinearLayout masterWallpaperList = (LinearLayout) findViewById(R.id.master_wallpaper_list); final int childCount = masterWallpaperList.getChildCount(); final Resources res = getResources(); @@ -778,13 +789,13 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - private static Point getDefaultThumbnailSize(Resources res) { + @Thunk static Point getDefaultThumbnailSize(Resources res) { return new Point(res.getDimensionPixelSize(R.dimen.wallpaperThumbnailWidth), res.getDimensionPixelSize(R.dimen.wallpaperThumbnailHeight)); } - private static Bitmap createThumbnail(Point size, Context context, Uri uri, byte[] imageBytes, + @Thunk static Bitmap createThumbnail(Point size, Context context, Uri uri, byte[] imageBytes, Resources res, int resId, int rotation, boolean leftAligned) { int width = size.x; int height = size.y; @@ -812,7 +823,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { rotatedBounds[0] = Math.abs(rotatedBounds[0]); rotatedBounds[1] = Math.abs(rotatedBounds[1]); - RectF cropRect = WallpaperCropActivity.getMaxCropRect( + RectF cropRect = Utils.getMaxCropRect( (int) rotatedBounds[0], (int) rotatedBounds[1], width, height, leftAligned); cropTask.setCropBounds(cropRect); @@ -829,20 +840,19 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { final FrameLayout pickedImageThumbnail = (FrameLayout) getLayoutInflater(). inflate(R.layout.wallpaper_picker_item, mWallpapersView, false); pickedImageThumbnail.setVisibility(View.GONE); - setWallpaperItemPaddingToZero(pickedImageThumbnail); mWallpapersView.addView(pickedImageThumbnail, 0); // Load the thumbnail final ImageView image = (ImageView) pickedImageThumbnail.findViewById(R.id.wallpaper_image); final Point defaultSize = getDefaultThumbnailSize(this.getResources()); - final Context context = this; + final Context context = getContext(); new AsyncTask<Void, Bitmap, Bitmap>() { protected Bitmap doInBackground(Void...args) { try { - int rotation = WallpaperCropActivity.getRotationFromExif(context, uri); + int rotation = BitmapUtils.getRotationFromExif(context, uri); return createThumbnail(defaultSize, context, uri, null, null, 0, rotation, false); } catch (SecurityException securityException) { - if (isDestroyed()) { + if (isActivityDestroyed()) { // Temporarily granted permissions are revoked when the activity // finishes, potentially resulting in a SecurityException here. // Even though {@link #isDestroyed} might also return true in different @@ -879,45 +889,35 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == IMAGE_PICK && resultCode == RESULT_OK) { + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == IMAGE_PICK && resultCode == Activity.RESULT_OK) { if (data != null && data.getData() != null) { Uri uri = data.getData(); addTemporaryWallpaperTile(uri, false); } - } else if (requestCode == PICK_WALLPAPER_THIRD_PARTY_ACTIVITY) { - setResult(RESULT_OK); + } else if (requestCode == PICK_WALLPAPER_THIRD_PARTY_ACTIVITY + && resultCode == Activity.RESULT_OK) { + // Something was set on the third-party activity. + setResult(Activity.RESULT_OK); finish(); - } else if (requestCode == PICK_LIVE_WALLPAPER) { - WallpaperManager wm = WallpaperManager.getInstance(this); - final WallpaperInfo oldLiveWallpaper = mLiveWallpaperInfoOnPickerLaunch; - final WallpaperInfo clickedWallpaper = mLastClickedLiveWallpaperInfo; - WallpaperInfo newLiveWallpaper = wm.getWallpaperInfo(); - // Try to figure out if a live wallpaper was set; - if (newLiveWallpaper != null && - (oldLiveWallpaper == null - || !oldLiveWallpaper.getComponent() - .equals(newLiveWallpaper.getComponent()) - || clickedWallpaper.getComponent() - .equals(oldLiveWallpaper.getComponent()))) { - // Return if a live wallpaper was set - setResult(RESULT_OK); - finish(); - } } } - static void setWallpaperItemPaddingToZero(FrameLayout frameLayout) { - frameLayout.setPadding(0, 0, 0, 0); - frameLayout.setForeground(new ZeroPaddingDrawable(frameLayout.getForeground())); - } - private void addLongPressHandler(View v) { v.setOnLongClickListener(mLongClickListener); + + // Enable stylus button to also trigger long click. + final StylusEventHelper stylusEventHelper = new StylusEventHelper(v); + v.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent event) { + return stylusEventHelper.checkAndPerformStylusEvent(event); + } + }); } private ArrayList<WallpaperTileInfo> findBundledWallpapers() { - final PackageManager pm = getPackageManager(); + final PackageManager pm = getContext().getPackageManager(); final ArrayList<WallpaperTileInfo> bundled = new ArrayList<WallpaperTileInfo>(24); Partner partner = Partner.get(pm); @@ -961,7 +961,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { Pair<ApplicationInfo, Integer> r = getWallpaperArrayResourceId(); if (r != null) { try { - Resources wallpaperRes = getPackageManager().getResourcesForApplication(r.first); + Resources wallpaperRes = getContext().getPackageManager() + .getResourcesForApplication(r.first); addWallpapers(bundled, wallpaperRes, r.first.packageName, r.second); } catch (PackageManager.NameNotFoundException e) { } @@ -984,7 +985,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { try { f.createNewFile(); FileOutputStream thumbFileStream = - openFileOutput(f.getName(), Context.MODE_PRIVATE); + getContext().openFileOutput(f.getName(), Context.MODE_PRIVATE); b.compress(Bitmap.CompressFormat.JPEG, 95, thumbFileStream); thumbFileStream.close(); return true; @@ -996,17 +997,18 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } private File getDefaultThumbFile() { - return new File(getFilesDir(), Build.VERSION.SDK_INT + return new File(getContext().getFilesDir(), Build.VERSION.SDK_INT + "_" + LauncherFiles.DEFAULT_WALLPAPER_THUMBNAIL); } private boolean saveDefaultWallpaperThumb(Bitmap b) { // Delete old thumbnails. - new File(getFilesDir(), LauncherFiles.DEFAULT_WALLPAPER_THUMBNAIL_OLD).delete(); - new File(getFilesDir(), LauncherFiles.DEFAULT_WALLPAPER_THUMBNAIL).delete(); + new File(getContext().getFilesDir(), LauncherFiles.DEFAULT_WALLPAPER_THUMBNAIL_OLD).delete(); + new File(getContext().getFilesDir(), LauncherFiles.DEFAULT_WALLPAPER_THUMBNAIL).delete(); for (int i = Build.VERSION_CODES.JELLY_BEAN; i < Build.VERSION.SDK_INT; i++) { - new File(getFilesDir(), i + "_" + LauncherFiles.DEFAULT_WALLPAPER_THUMBNAIL).delete(); + new File(getContext().getFilesDir(), i + "_" + + LauncherFiles.DEFAULT_WALLPAPER_THUMBNAIL).delete(); } return writeImageToFileAsJpeg(getDefaultThumbFile(), b); } @@ -1024,9 +1026,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } else { Resources res = getResources(); Point defaultThumbSize = getDefaultThumbnailSize(res); - int rotation = WallpaperCropActivity.getRotationFromExif(res, resId); + int rotation = BitmapUtils.getRotationFromExif(res, resId); thumb = createThumbnail( - defaultThumbSize, this, null, null, sysRes, resId, rotation, false); + defaultThumbSize, getContext(), null, null, sysRes, resId, rotation, false); if (thumb != null) { defaultWallpaperExists = saveDefaultWallpaperThumb(thumb); } @@ -1048,7 +1050,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } else { Resources res = getResources(); Point defaultThumbSize = getDefaultThumbnailSize(res); - Drawable wallpaperDrawable = WallpaperManager.getInstance(this).getBuiltInDrawable( + Drawable wallpaperDrawable = WallpaperManager.getInstance(getContext()).getBuiltInDrawable( defaultThumbSize.x, defaultThumbSize.y, true, 0.5f, 0.5f); if (wallpaperDrawable != null) { thumb = Bitmap.createBitmap( @@ -1075,7 +1077,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { // package name should be. final String packageName = getResources().getResourcePackageName(R.array.wallpapers); try { - ApplicationInfo info = getPackageManager().getApplicationInfo(packageName, 0); + ApplicationInfo info = getContext().getPackageManager().getApplicationInfo(packageName, 0); return new Pair<ApplicationInfo, Integer>(info, R.array.wallpapers); } catch (PackageManager.NameNotFoundException e) { return null; @@ -1110,31 +1112,12 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { return mSavedImages; } - public void onLiveWallpaperPickerLaunch(WallpaperInfo info) { - mLastClickedLiveWallpaperInfo = info; - mLiveWallpaperInfoOnPickerLaunch = WallpaperManager.getInstance(this).getWallpaperInfo(); - } - - static class ZeroPaddingDrawable extends LevelListDrawable { - public ZeroPaddingDrawable(Drawable d) { - super(); - addLevel(0, 0, d); - setLevel(0); - } - - @Override - public boolean getPadding(Rect padding) { - padding.set(0, 0, 0, 0); - return true; - } - } - private static class SimpleWallpapersAdapter extends ArrayAdapter<WallpaperTileInfo> { private final LayoutInflater mLayoutInflater; - SimpleWallpapersAdapter(Activity activity, ArrayList<WallpaperTileInfo> wallpapers) { - super(activity, R.layout.wallpaper_picker_item, wallpapers); - mLayoutInflater = activity.getLayoutInflater(); + SimpleWallpapersAdapter(Context context, ArrayList<WallpaperTileInfo> wallpapers) { + super(context, R.layout.wallpaper_picker_item, wallpapers); + mLayoutInflater = LayoutInflater.from(context); } public View getView(int position, View convertView, ViewGroup parent) { @@ -1156,8 +1139,6 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { view = convertView; } - setWallpaperItemPaddingToZero((FrameLayout) view); - ImageView image = (ImageView) view.findViewById(R.id.wallpaper_image); if (thumb != null) { @@ -1168,9 +1149,17 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { return view; } - // In Launcher3, we override this with a method that catches exceptions - // from starting activities; didn't want to copy and paste code into here public void startActivityForResultSafely(Intent intent, int requestCode) { - startActivityForResult(intent, requestCode); + Utilities.startActivityForResultSafely(getActivity(), intent, requestCode); + } + + @Override + public boolean enableRotation() { + // Check if rotation is enabled for this device. + if (Utilities.isRotationAllowedForDevice(getContext())) + return true; + + // Check if the user has specifically enabled rotation via preferences. + return Utilities.isAllowRotationPrefEnabled(getApplicationContext(), true); } } diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperRootView.java b/WallpaperPicker/src/com/android/launcher3/WallpaperRootView.java deleted file mode 100644 index ceaa043a7..000000000 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperRootView.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2013 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.graphics.Rect; -import android.util.AttributeSet; -import android.widget.RelativeLayout; - -public class WallpaperRootView extends RelativeLayout { - private final WallpaperPickerActivity a; - public WallpaperRootView(Context context, AttributeSet attrs) { - super(context, attrs); - a = (WallpaperPickerActivity) context; - } - public WallpaperRootView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - a = (WallpaperPickerActivity) context; - } - - protected boolean fitSystemWindows(Rect insets) { - a.setWallpaperStripYOffset(insets.bottom); - return true; - } -} diff --git a/WallpaperPicker/src/com/android/launcher3/base/BaseActivity.java b/WallpaperPicker/src/com/android/launcher3/base/BaseActivity.java new file mode 100644 index 000000000..f8541188f --- /dev/null +++ b/WallpaperPicker/src/com/android/launcher3/base/BaseActivity.java @@ -0,0 +1,21 @@ +package com.android.launcher3.base; + +import android.app.Activity; +import android.content.Context; + +/** + * A wrapper over {@link Activity} which allows to override some methods. + * The base implementation can change from an Activity to a Fragment (or any other custom + * implementation), Callers should not assume that the base class extends Context, instead use + * either {@link #getContext} or {@link #getActivity} + */ +public class BaseActivity extends Activity { + + public Context getContext() { + return this; + } + + public Activity getActivity() { + return this; + } +} diff --git a/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java b/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java index 66ece4ff6..2d496a5a6 100644 --- a/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java +++ b/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java @@ -20,15 +20,14 @@ import android.annotation.TargetApi; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.net.Uri; +import android.opengl.GLUtils; import android.os.Build; -import android.os.Build.VERSION_CODES; import android.util.Log; import com.android.gallery3d.common.BitmapUtils; @@ -148,24 +147,19 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { private static final String TAG = "BitmapRegionTileSource"; - private static final boolean REUSE_BITMAP = - Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; private static final int GL_SIZE_LIMIT = 2048; // This must be no larger than half the size of the GL_SIZE_LIMIT // due to decodePreview being allowed to be up to 2x the size of the target - public static final int MAX_PREVIEW_SIZE = GL_SIZE_LIMIT / 2; + private static final int MAX_PREVIEW_SIZE = GL_SIZE_LIMIT / 2; public static abstract class BitmapSource { private SimpleBitmapRegionDecoder mDecoder; private Bitmap mPreview; - private int mPreviewSize; private int mRotation; public enum State { NOT_LOADED, LOADED, ERROR_LOADING }; private State mState = State.NOT_LOADED; - public BitmapSource(int previewSize) { - mPreviewSize = previewSize; - } - public boolean loadInBackground() { + + public boolean loadInBackground(InBitmapProvider bitmapProvider) { ExifInterface ei = new ExifInterface(); if (readExif(ei)) { Integer ori = ei.getTagIntValue(ExifInterface.TAG_ORIENTATION); @@ -180,18 +174,44 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { } else { int width = mDecoder.getWidth(); int height = mDecoder.getHeight(); - if (mPreviewSize != 0) { - int previewSize = Math.min(mPreviewSize, MAX_PREVIEW_SIZE); - BitmapFactory.Options opts = new BitmapFactory.Options(); - opts.inPreferredConfig = Bitmap.Config.ARGB_8888; - opts.inPreferQualityOverSpeed = true; - - float scale = (float) previewSize / Math.max(width, height); - opts.inSampleSize = BitmapUtils.computeSampleSizeLarger(scale); - opts.inJustDecodeBounds = false; + + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inPreferredConfig = Bitmap.Config.ARGB_8888; + opts.inPreferQualityOverSpeed = true; + + float scale = (float) MAX_PREVIEW_SIZE / Math.max(width, height); + opts.inSampleSize = BitmapUtils.computeSampleSizeLarger(scale); + opts.inJustDecodeBounds = false; + opts.inMutable = true; + + if (bitmapProvider != null) { + int expectedPixles = (width / opts.inSampleSize) * (height / opts.inSampleSize); + Bitmap reusableBitmap = bitmapProvider.forPixelCount(expectedPixles); + if (reusableBitmap != null) { + // Try loading with reusable bitmap + opts.inBitmap = reusableBitmap; + try { + mPreview = loadPreviewBitmap(opts); + } catch (IllegalArgumentException e) { + Log.d(TAG, "Unable to reusage bitmap", e); + opts.inBitmap = null; + mPreview = null; + } + } + } + if (mPreview == null) { mPreview = loadPreviewBitmap(opts); } - mState = State.LOADED; + + // Verify that the bitmap can be used on GL surface + try { + GLUtils.getInternalFormat(mPreview); + GLUtils.getType(mPreview); + mState = State.LOADED; + } catch (IllegalArgumentException e) { + Log.d(TAG, "Image cannot be rendered on a GL surface", e); + mState = State.ERROR_LOADING; + } return true; } } @@ -208,10 +228,6 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { return mPreview; } - public int getPreviewSize() { - return mPreviewSize; - } - public int getRotation() { return mRotation; } @@ -219,12 +235,15 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { public abstract boolean readExif(ExifInterface ei); public abstract SimpleBitmapRegionDecoder loadBitmapRegionDecoder(); public abstract Bitmap loadPreviewBitmap(BitmapFactory.Options options); + + public interface InBitmapProvider { + Bitmap forPixelCount(int count); + } } public static class FilePathBitmapSource extends BitmapSource { private String mPath; - public FilePathBitmapSource(String path, int previewSize) { - super(previewSize); + public FilePathBitmapSource(String path) { mPath = path; } @Override @@ -258,8 +277,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { public static class UriBitmapSource extends BitmapSource { private Context mContext; private Uri mUri; - public UriBitmapSource(Context context, Uri uri, int previewSize) { - super(previewSize); + public UriBitmapSource(Context context, Uri uri) { mContext = context; mUri = uri; } @@ -306,13 +324,13 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { Utils.closeSilently(is); return true; } catch (FileNotFoundException e) { - Log.e("BitmapRegionTileSource", "Failed to load URI " + mUri, e); + Log.d("BitmapRegionTileSource", "Failed to load URI " + mUri, e); return false; } catch (IOException e) { - Log.e("BitmapRegionTileSource", "Failed to load URI " + mUri, e); + Log.d("BitmapRegionTileSource", "Failed to load URI " + mUri, e); return false; } catch (NullPointerException e) { - Log.e("BitmapRegionTileSource", "Failed to read EXIF for URI " + mUri, e); + Log.d("BitmapRegionTileSource", "Failed to read EXIF for URI " + mUri, e); return false; } finally { Utils.closeSilently(is); @@ -323,8 +341,7 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { public static class ResourceBitmapSource extends BitmapSource { private Resources mRes; private int mResId; - public ResourceBitmapSource(Resources res, int resId, int previewSize) { - super(previewSize); + public ResourceBitmapSource(Resources res, int resId) { mRes = res; mResId = resId; } @@ -372,11 +389,9 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { // For use only by getTile private Rect mWantRegion = new Rect(); - private Rect mOverlapRegion = new Rect(); private BitmapFactory.Options mOptions; - private Canvas mCanvas; - public BitmapRegionTileSource(Context context, BitmapSource source) { + public BitmapRegionTileSource(Context context, BitmapSource source, byte[] tempStorage) { mTileSize = TiledImageRenderer.suggestedTileSize(context); mRotation = source.getRotation(); mDecoder = source.getBitmapRegionDecoder(); @@ -386,27 +401,26 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { mOptions = new BitmapFactory.Options(); mOptions.inPreferredConfig = Bitmap.Config.ARGB_8888; mOptions.inPreferQualityOverSpeed = true; - mOptions.inTempStorage = new byte[16 * 1024]; - int previewSize = source.getPreviewSize(); - if (previewSize != 0) { - previewSize = Math.min(previewSize, MAX_PREVIEW_SIZE); - // Although this is the same size as the Bitmap that is likely already - // loaded, the lifecycle is different and interactions are on a different - // thread. Thus to simplify, this source will decode its own bitmap. - Bitmap preview = decodePreview(source, previewSize); - if (preview.getWidth() <= GL_SIZE_LIMIT && preview.getHeight() <= GL_SIZE_LIMIT) { + mOptions.inTempStorage = tempStorage; + + Bitmap preview = source.getPreviewBitmap(); + if (preview != null && + preview.getWidth() <= GL_SIZE_LIMIT && preview.getHeight() <= GL_SIZE_LIMIT) { mPreview = new BitmapTexture(preview); - } else { - Log.w(TAG, String.format( - "Failed to create preview of apropriate size! " - + " in: %dx%d, out: %dx%d", - mWidth, mHeight, - preview.getWidth(), preview.getHeight())); - } + } else { + Log.w(TAG, String.format( + "Failed to create preview of apropriate size! " + + " in: %dx%d, out: %dx%d", + mWidth, mHeight, + preview.getWidth(), preview.getHeight())); } } } + public Bitmap getBitmap() { + return mPreview instanceof BitmapTexture ? ((BitmapTexture) mPreview).getBitmap() : null; + } + @Override public int getTileSize() { return mTileSize; @@ -435,10 +449,6 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { @Override public Bitmap getTile(int level, int x, int y, Bitmap bitmap) { int tileSize = getTileSize(); - if (!REUSE_BITMAP) { - return getTileWithoutReusingBitmap(level, x, y, tileSize); - } - int t = tileSize << level; mWantRegion.set(x, y, x + t, y + t); @@ -462,64 +472,4 @@ public class BitmapRegionTileSource implements TiledImageRenderer.TileSource { } return bitmap; } - - private Bitmap getTileWithoutReusingBitmap( - int level, int x, int y, int tileSize) { - - int t = tileSize << level; - mWantRegion.set(x, y, x + t, y + t); - - mOverlapRegion.set(0, 0, mWidth, mHeight); - - mOptions.inSampleSize = (1 << level); - Bitmap bitmap = mDecoder.decodeRegion(mOverlapRegion, mOptions); - - if (bitmap == null) { - Log.w(TAG, "fail in decoding region"); - } - - if (mWantRegion.equals(mOverlapRegion)) { - return bitmap; - } - - Bitmap result = Bitmap.createBitmap(tileSize, tileSize, Config.ARGB_8888); - if (mCanvas == null) { - mCanvas = new Canvas(); - } - mCanvas.setBitmap(result); - mCanvas.drawBitmap(bitmap, - (mOverlapRegion.left - mWantRegion.left) >> level, - (mOverlapRegion.top - mWantRegion.top) >> level, null); - mCanvas.setBitmap(null); - return result; - } - - /** - * Note that the returned bitmap may have a long edge that's longer - * than the targetSize, but it will always be less than 2x the targetSize - */ - private Bitmap decodePreview(BitmapSource source, int targetSize) { - Bitmap result = source.getPreviewBitmap(); - if (result == null) { - return null; - } - - // We need to resize down if the decoder does not support inSampleSize - // or didn't support the specified inSampleSize (some decoders only do powers of 2) - float scale = (float) targetSize / (float) (Math.max(result.getWidth(), result.getHeight())); - - if (scale <= 0.5) { - result = BitmapUtils.resizeBitmapByScale(result, scale, true); - } - return ensureGLCompatibleBitmap(result); - } - - private static Bitmap ensureGLCompatibleBitmap(Bitmap bitmap) { - if (bitmap == null || bitmap.getConfig() != null) { - return bitmap; - } - Bitmap newBitmap = bitmap.copy(Config.ARGB_8888, false); - bitmap.recycle(); - return newBitmap; - } } diff --git a/WallpaperPicker/src/com/android/photos/views/BlockingGLTextureView.java b/WallpaperPicker/src/com/android/photos/views/BlockingGLTextureView.java deleted file mode 100644 index 8a0505185..000000000 --- a/WallpaperPicker/src/com/android/photos/views/BlockingGLTextureView.java +++ /dev/null @@ -1,438 +0,0 @@ -/* - * Copyright (C) 2013 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.photos.views; - -import android.content.Context; -import android.graphics.SurfaceTexture; -import android.opengl.GLSurfaceView.Renderer; -import android.opengl.GLUtils; -import android.util.Log; -import android.view.TextureView; -import android.view.TextureView.SurfaceTextureListener; - -import javax.microedition.khronos.egl.EGL10; -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.egl.EGLContext; -import javax.microedition.khronos.egl.EGLDisplay; -import javax.microedition.khronos.egl.EGLSurface; -import javax.microedition.khronos.opengles.GL10; - -/** - * A TextureView that supports blocking rendering for synchronous drawing - */ -public class BlockingGLTextureView extends TextureView - implements SurfaceTextureListener { - - private RenderThread mRenderThread; - - public BlockingGLTextureView(Context context) { - super(context); - setSurfaceTextureListener(this); - } - - public void setRenderer(Renderer renderer) { - if (mRenderThread != null) { - throw new IllegalArgumentException("Renderer already set"); - } - mRenderThread = new RenderThread(renderer); - } - - public void render() { - mRenderThread.render(); - } - - public void destroy() { - if (mRenderThread != null) { - mRenderThread.finish(); - mRenderThread = null; - } - } - - @Override - public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, - int height) { - mRenderThread.setSurface(surface); - mRenderThread.setSize(width, height); - } - - @Override - public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, - int height) { - mRenderThread.setSize(width, height); - } - - @Override - public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { - if (mRenderThread != null) { - mRenderThread.setSurface(null); - } - return false; - } - - @Override - public void onSurfaceTextureUpdated(SurfaceTexture surface) { - } - - @Override - protected void finalize() throws Throwable { - try { - destroy(); - } catch (Throwable t) { - // Ignore - } - super.finalize(); - } - - /** - * An EGL helper class. - */ - - private static class EglHelper { - private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098; - private static final int EGL_OPENGL_ES2_BIT = 4; - - EGL10 mEgl; - EGLDisplay mEglDisplay; - EGLSurface mEglSurface; - EGLConfig mEglConfig; - EGLContext mEglContext; - - private EGLConfig chooseEglConfig() { - int[] configsCount = new int[1]; - EGLConfig[] configs = new EGLConfig[1]; - int[] configSpec = getConfig(); - if (!mEgl.eglChooseConfig(mEglDisplay, configSpec, configs, 1, configsCount)) { - throw new IllegalArgumentException("eglChooseConfig failed " + - GLUtils.getEGLErrorString(mEgl.eglGetError())); - } else if (configsCount[0] > 0) { - return configs[0]; - } - return null; - } - - private static int[] getConfig() { - return new int[] { - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL10.EGL_RED_SIZE, 8, - EGL10.EGL_GREEN_SIZE, 8, - EGL10.EGL_BLUE_SIZE, 8, - EGL10.EGL_ALPHA_SIZE, 8, - EGL10.EGL_DEPTH_SIZE, 0, - EGL10.EGL_STENCIL_SIZE, 0, - EGL10.EGL_NONE - }; - } - - EGLContext createContext(EGL10 egl, EGLDisplay eglDisplay, EGLConfig eglConfig) { - int[] attribList = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE }; - return egl.eglCreateContext(eglDisplay, eglConfig, EGL10.EGL_NO_CONTEXT, attribList); - } - - /** - * Initialize EGL for a given configuration spec. - */ - public void start() { - /* - * Get an EGL instance - */ - mEgl = (EGL10) EGLContext.getEGL(); - - /* - * Get to the default display. - */ - mEglDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); - - if (mEglDisplay == EGL10.EGL_NO_DISPLAY) { - throw new RuntimeException("eglGetDisplay failed"); - } - - /* - * We can now initialize EGL for that display - */ - int[] version = new int[2]; - if (!mEgl.eglInitialize(mEglDisplay, version)) { - throw new RuntimeException("eglInitialize failed"); - } - mEglConfig = chooseEglConfig(); - - /* - * Create an EGL context. We want to do this as rarely as we can, because an - * EGL context is a somewhat heavy object. - */ - mEglContext = createContext(mEgl, mEglDisplay, mEglConfig); - - if (mEglContext == null || mEglContext == EGL10.EGL_NO_CONTEXT) { - mEglContext = null; - throwEglException("createContext"); - } - - mEglSurface = null; - } - - /** - * Create an egl surface for the current SurfaceTexture surface. If a surface - * already exists, destroy it before creating the new surface. - * - * @return true if the surface was created successfully. - */ - public boolean createSurface(SurfaceTexture surface) { - /* - * Check preconditions. - */ - if (mEgl == null) { - throw new RuntimeException("egl not initialized"); - } - if (mEglDisplay == null) { - throw new RuntimeException("eglDisplay not initialized"); - } - if (mEglConfig == null) { - throw new RuntimeException("mEglConfig not initialized"); - } - - /* - * The window size has changed, so we need to create a new - * surface. - */ - destroySurfaceImp(); - - /* - * Create an EGL surface we can render into. - */ - if (surface != null) { - mEglSurface = mEgl.eglCreateWindowSurface(mEglDisplay, mEglConfig, surface, null); - } else { - mEglSurface = null; - } - - if (mEglSurface == null || mEglSurface == EGL10.EGL_NO_SURFACE) { - int error = mEgl.eglGetError(); - if (error == EGL10.EGL_BAD_NATIVE_WINDOW) { - Log.e("EglHelper", "createWindowSurface returned EGL_BAD_NATIVE_WINDOW."); - } - return false; - } - - /* - * Before we can issue GL commands, we need to make sure - * the context is current and bound to a surface. - */ - if (!mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)) { - /* - * Could not make the context current, probably because the underlying - * SurfaceView surface has been destroyed. - */ - logEglErrorAsWarning("EGLHelper", "eglMakeCurrent", mEgl.eglGetError()); - return false; - } - - return true; - } - - /** - * Create a GL object for the current EGL context. - */ - public GL10 createGL() { - return (GL10) mEglContext.getGL(); - } - - /** - * Display the current render surface. - * @return the EGL error code from eglSwapBuffers. - */ - public int swap() { - if (!mEgl.eglSwapBuffers(mEglDisplay, mEglSurface)) { - return mEgl.eglGetError(); - } - return EGL10.EGL_SUCCESS; - } - - public void destroySurface() { - destroySurfaceImp(); - } - - private void destroySurfaceImp() { - if (mEglSurface != null && mEglSurface != EGL10.EGL_NO_SURFACE) { - mEgl.eglMakeCurrent(mEglDisplay, EGL10.EGL_NO_SURFACE, - EGL10.EGL_NO_SURFACE, - EGL10.EGL_NO_CONTEXT); - mEgl.eglDestroySurface(mEglDisplay, mEglSurface); - mEglSurface = null; - } - } - - public void finish() { - if (mEglContext != null) { - mEgl.eglDestroyContext(mEglDisplay, mEglContext); - mEglContext = null; - } - if (mEglDisplay != null) { - mEgl.eglTerminate(mEglDisplay); - mEglDisplay = null; - } - } - - private void throwEglException(String function) { - throwEglException(function, mEgl.eglGetError()); - } - - public static void throwEglException(String function, int error) { - String message = formatEglError(function, error); - throw new RuntimeException(message); - } - - public static void logEglErrorAsWarning(String tag, String function, int error) { - Log.w(tag, formatEglError(function, error)); - } - - public static String formatEglError(String function, int error) { - return function + " failed: " + error; - } - - } - - private static class RenderThread extends Thread { - private static final int INVALID = -1; - private static final int RENDER = 1; - private static final int CHANGE_SURFACE = 2; - private static final int RESIZE_SURFACE = 3; - private static final int FINISH = 4; - - private EglHelper mEglHelper = new EglHelper(); - - private Object mLock = new Object(); - private int mExecMsgId = INVALID; - private SurfaceTexture mSurface; - private Renderer mRenderer; - private int mWidth, mHeight; - - private boolean mFinished = false; - private GL10 mGL; - - public RenderThread(Renderer renderer) { - super("RenderThread"); - mRenderer = renderer; - start(); - } - - private void checkRenderer() { - if (mRenderer == null) { - throw new IllegalArgumentException("Renderer is null!"); - } - } - - private void checkSurface() { - if (mSurface == null) { - throw new IllegalArgumentException("surface is null!"); - } - } - - public void setSurface(SurfaceTexture surface) { - // If the surface is null we're being torn down, don't need a - // renderer then - if (surface != null) { - checkRenderer(); - } - mSurface = surface; - exec(CHANGE_SURFACE); - } - - public void setSize(int width, int height) { - checkRenderer(); - checkSurface(); - mWidth = width; - mHeight = height; - exec(RESIZE_SURFACE); - } - - public void render() { - checkRenderer(); - if (mSurface != null) { - exec(RENDER); - mSurface.updateTexImage(); - } - } - - public void finish() { - mSurface = null; - exec(FINISH); - try { - join(); - } catch (InterruptedException e) { - // Ignore - } - } - - private void exec(int msgid) { - synchronized (mLock) { - if (mExecMsgId != INVALID) { - throw new IllegalArgumentException( - "Message already set - multithreaded access?"); - } - mExecMsgId = msgid; - mLock.notify(); - try { - mLock.wait(); - } catch (InterruptedException e) { - // Ignore - } - } - } - - private void handleMessageLocked(int what) { - switch (what) { - case CHANGE_SURFACE: - if (mEglHelper.createSurface(mSurface)) { - mGL = mEglHelper.createGL(); - mRenderer.onSurfaceCreated(mGL, mEglHelper.mEglConfig); - } - break; - case RESIZE_SURFACE: - mRenderer.onSurfaceChanged(mGL, mWidth, mHeight); - break; - case RENDER: - mRenderer.onDrawFrame(mGL); - mEglHelper.swap(); - break; - case FINISH: - mEglHelper.destroySurface(); - mEglHelper.finish(); - mFinished = true; - break; - } - } - - @Override - public void run() { - synchronized (mLock) { - mEglHelper.start(); - while (!mFinished) { - while (mExecMsgId == INVALID) { - try { - mLock.wait(); - } catch (InterruptedException e) { - // Ignore - } - } - handleMessageLocked(mExecMsgId); - mExecMsgId = INVALID; - mLock.notify(); - } - mExecMsgId = FINISH; - } - } - } -} diff --git a/WallpaperPicker/src/com/android/photos/views/TiledImageRenderer.java b/WallpaperPicker/src/com/android/photos/views/TiledImageRenderer.java index c4e493b34..e57ce70b9 100644 --- a/WallpaperPicker/src/com/android/photos/views/TiledImageRenderer.java +++ b/WallpaperPicker/src/com/android/photos/views/TiledImageRenderer.java @@ -20,11 +20,11 @@ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Rect; import android.graphics.RectF; -import android.support.v4.util.LongSparseArray; +import android.support.v4.util.Pools.Pool; +import android.support.v4.util.Pools.SynchronizedPool; import android.util.DisplayMetrics; import android.util.Log; -import android.util.Pools.Pool; -import android.util.Pools.SynchronizedPool; +import android.util.LongSparseArray; import android.view.View; import android.view.WindowManager; @@ -32,6 +32,7 @@ import com.android.gallery3d.common.Utils; import com.android.gallery3d.glrenderer.BasicTexture; import com.android.gallery3d.glrenderer.GLCanvas; import com.android.gallery3d.glrenderer.UploadedTexture; +import com.android.launcher3.util.Thunk; /** * Handles laying out, decoding, and drawing of tiles in GL @@ -67,12 +68,12 @@ public class TiledImageRenderer { private static final int STATE_RECYCLING = 0x20; private static final int STATE_RECYCLED = 0x40; - private static Pool<Bitmap> sTilePool = new SynchronizedPool<Bitmap>(64); + @Thunk static Pool<Bitmap> sTilePool = new SynchronizedPool<Bitmap>(64); // TILE_SIZE must be 2^N - private int mTileSize; + @Thunk int mTileSize; - private TileSource mModel; + @Thunk TileSource mModel; private BasicTexture mPreview; protected int mLevelCount; // cache the value of mScaledBitmaps.length @@ -82,7 +83,7 @@ public class TiledImageRenderer { // half size of the previous one). If the value is in [0, mLevelCount), we // use the bitmap in mScaledBitmaps[mLevel] for display, otherwise the value // is mLevelCount - private int mLevel = 0; + @Thunk int mLevel = 0; private int mOffsetX; private int mOffsetY; @@ -96,10 +97,10 @@ public class TiledImageRenderer { private final LongSparseArray<Tile> mActiveTiles = new LongSparseArray<Tile>(); // The following three queue are guarded by mQueueLock - private final Object mQueueLock = new Object(); + @Thunk final Object mQueueLock = new Object(); private final TileQueue mRecycledQueue = new TileQueue(); private final TileQueue mUploadQueue = new TileQueue(); - private final TileQueue mDecodeQueue = new TileQueue(); + @Thunk final TileQueue mDecodeQueue = new TileQueue(); // The width and height of the full-sized bitmap protected int mImageWidth = SIZE_UNKNOWN; @@ -489,7 +490,7 @@ public class TiledImageRenderer { } } - private void decodeTile(Tile tile) { + @Thunk void decodeTile(Tile tile) { synchronized (mQueueLock) { if (tile.mTileState != STATE_IN_QUEUE) { return; @@ -556,7 +557,7 @@ public class TiledImageRenderer { mActiveTiles.put(key, tile); } - private Tile getTile(int x, int y, int level) { + @Thunk Tile getTile(int x, int y, int level) { return mActiveTiles.get(makeTileKey(x, y, level)); } @@ -748,7 +749,7 @@ public class TiledImageRenderer { } } - private static class TileQueue { + @Thunk static class TileQueue { private Tile mHead; public Tile pop() { @@ -786,7 +787,7 @@ public class TiledImageRenderer { } } - private class TileDecoder extends Thread { + @Thunk class TileDecoder extends Thread { public void finishAndWait() { interrupt(); diff --git a/WallpaperPicker/src/com/android/photos/views/TiledImageView.java b/WallpaperPicker/src/com/android/photos/views/TiledImageView.java index 94063b027..7e3e1a936 100644 --- a/WallpaperPicker/src/com/android/photos/views/TiledImageView.java +++ b/WallpaperPicker/src/com/android/photos/views/TiledImageView.java @@ -16,8 +16,6 @@ package com.android.photos.views; -import android.annotation.SuppressLint; -import android.annotation.TargetApi; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -28,35 +26,26 @@ import android.graphics.Paint.Align; import android.graphics.RectF; import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView.Renderer; -import android.os.Build; import android.util.AttributeSet; import android.view.Choreographer; import android.view.Choreographer.FrameCallback; -import android.view.View; import android.widget.FrameLayout; import com.android.gallery3d.glrenderer.BasicTexture; import com.android.gallery3d.glrenderer.GLES20Canvas; +import com.android.launcher3.util.Thunk; import com.android.photos.views.TiledImageRenderer.TileSource; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; /** - * Shows an image using {@link TiledImageRenderer} using either {@link GLSurfaceView} - * or {@link BlockingGLTextureView}. + * Shows an image using {@link TiledImageRenderer} using either {@link GLSurfaceView}. */ public class TiledImageView extends FrameLayout { - private static final boolean USE_TEXTURE_VIEW = false; - private static final boolean IS_SUPPORTED = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; - private static final boolean USE_CHOREOGRAPHER = - Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; - - private BlockingGLTextureView mTextureView; - private GLSurfaceView mGLSurfaceView; - private boolean mInvalPending = false; + @Thunk GLSurfaceView mGLSurfaceView; + @Thunk boolean mInvalPending = false; private FrameCallback mFrameCallback; protected static class ImageRendererWrapper { @@ -79,35 +68,19 @@ public class TiledImageView extends FrameLayout { protected Object mLock = new Object(); protected ImageRendererWrapper mRenderer; - public static boolean isTilingSupported() { - return IS_SUPPORTED; - } - public TiledImageView(Context context) { this(context, null); } public TiledImageView(Context context, AttributeSet attrs) { super(context, attrs); - if (!IS_SUPPORTED) { - return; - } - mRenderer = new ImageRendererWrapper(); mRenderer.image = new TiledImageRenderer(this); - View view; - if (USE_TEXTURE_VIEW) { - mTextureView = new BlockingGLTextureView(context); - mTextureView.setRenderer(new TileRenderer()); - view = mTextureView; - } else { - mGLSurfaceView = new GLSurfaceView(context); - mGLSurfaceView.setEGLContextClientVersion(2); - mGLSurfaceView.setRenderer(new TileRenderer()); - mGLSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); - view = mGLSurfaceView; - } - addView(view, new LayoutParams( + mGLSurfaceView = new GLSurfaceView(context); + mGLSurfaceView.setEGLContextClientVersion(2); + mGLSurfaceView.setRenderer(new TileRenderer()); + mGLSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); + addView(mGLSurfaceView, new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); //setTileSource(new ColoredTiles()); } @@ -117,22 +90,11 @@ public class TiledImageView extends FrameLayout { super.setVisibility(visibility); // need to update inner view's visibility because it seems like we're causing it to draw // from {@link #dispatchDraw} or {@link #invalidate} even if we are invisible. - if (USE_TEXTURE_VIEW) { - mTextureView.setVisibility(visibility); - } else { - mGLSurfaceView.setVisibility(visibility); - } + mGLSurfaceView.setVisibility(visibility); } public void destroy() { - if (!IS_SUPPORTED) { - return; - } - if (USE_TEXTURE_VIEW) { - mTextureView.destroy(); - } else { - mGLSurfaceView.queueEvent(mFreeTextures); - } + mGLSurfaceView.queueEvent(mFreeTextures); } private Runnable mFreeTextures = new Runnable() { @@ -144,27 +106,14 @@ public class TiledImageView extends FrameLayout { }; public void onPause() { - if (!IS_SUPPORTED) { - return; - } - if (!USE_TEXTURE_VIEW) { - mGLSurfaceView.onPause(); - } + mGLSurfaceView.onPause(); } public void onResume() { - if (!IS_SUPPORTED) { - return; - } - if (!USE_TEXTURE_VIEW) { - mGLSurfaceView.onResume(); - } + mGLSurfaceView.onResume(); } public void setTileSource(TileSource source, Runnable isReadyCallback) { - if (!IS_SUPPORTED) { - return; - } synchronized (mLock) { mRenderer.source = source; mRenderer.isReadyCallback = isReadyCallback; @@ -177,13 +126,14 @@ public class TiledImageView extends FrameLayout { invalidate(); } + public TileSource getTileSource() { + return mRenderer.source; + } + @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); - if (!IS_SUPPORTED) { - return; - } synchronized (mLock) { updateScaleIfNecessaryLocked(mRenderer); } @@ -200,43 +150,10 @@ public class TiledImageView extends FrameLayout { } @Override - protected void dispatchDraw(Canvas canvas) { - if (!IS_SUPPORTED) { - return; - } - if (USE_TEXTURE_VIEW) { - mTextureView.render(); - } - super.dispatchDraw(canvas); - } - - @SuppressLint("NewApi") - @Override - public void setTranslationX(float translationX) { - if (!IS_SUPPORTED) { - return; - } - super.setTranslationX(translationX); - } - - @Override public void invalidate() { - if (!IS_SUPPORTED) { - return; - } - if (USE_TEXTURE_VIEW) { - super.invalidate(); - mTextureView.invalidate(); - } else { - if (USE_CHOREOGRAPHER) { - invalOnVsync(); - } else { - mGLSurfaceView.requestRender(); - } - } + invalOnVsync(); } - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) private void invalOnVsync() { if (!mInvalPending) { mInvalPending = true; @@ -255,9 +172,6 @@ public class TiledImageView extends FrameLayout { private RectF mTempRectF = new RectF(); public void positionFromMatrix(Matrix matrix) { - if (!IS_SUPPORTED) { - return; - } if (mRenderer.source != null) { final int rotation = mRenderer.source.getRotation(); final boolean swap = !(rotation % 180 == 0); @@ -290,7 +204,7 @@ public class TiledImageView extends FrameLayout { } } - private class TileRenderer implements Renderer { + @Thunk class TileRenderer implements Renderer { private GLES20Canvas mCanvas; diff --git a/proguard.flags b/proguard.flags index 83a491dfd..6a9d6f345 100644 --- a/proguard.flags +++ b/proguard.flags @@ -1,18 +1,22 @@ --keep class com.android.launcher3.Launcher { - public void previousScreen(android.view.View); - public void nextScreen(android.view.View); - public void launchHotSeat(android.view.View); - public void onClickSearchButton(android.view.View); - public void onClickVoiceButton(android.view.View); - public void onClickConfigureButton(android.view.View); - public void onClickAllAppsButton(android.view.View); - public void onClickAppMarketButton(android.view.View); - public void dismissFirstRunCling(android.view.View); - public void dismissMigrationClingCopyApps(android.view.View); - public void dismissMigrationClingUseDefault(android.view.View); - public void dismissMigrationWorkspaceCling(android.view.View); - public void dismissWorkspaceCling(android.view.View); - public void dismissAllAppsCling(android.view.View); +-keep class com.android.launcher3.BaseRecyclerViewFastScrollBar { + public void setWidth(int); + public int getWidth(); + public void setTrackAlpha(int); + public int getTrackAlpha(); +} + +-keep class com.android.launcher3.BaseRecyclerViewFastScrollPopup { + public void setAlpha(float); + public float getAlpha(); +} + +-keep class com.android.launcher3.BubbleTextView { + public void setFastScrollFocus(float); + public float getFastScrollFocus(); +} + +-keep class com.android.launcher3.ButtonDropTarget { + public int getTextColor(); } -keep class com.android.launcher3.CellLayout { @@ -20,7 +24,7 @@ public void setBackgroundAlpha(float); } --keep class com.android.launcher3.DragLayer$LayoutParams { +-keep class com.android.launcher3.CellLayout$LayoutParams { public void setWidth(int); public int getWidth(); public void setHeight(int); @@ -31,7 +35,7 @@ public int getY(); } --keep class com.android.launcher3.CellLayout$LayoutParams { +-keep class com.android.launcher3.DragLayer$LayoutParams { public void setWidth(int); public int getWidth(); public void setHeight(int); @@ -42,11 +46,9 @@ public int getY(); } --keep class com.android.launcher3.Workspace { - public float getBackgroundAlpha(); - public void setBackgroundAlpha(float); - public float getChildrenOutlineAlpha(); - public void setChildrenOutlineAlpha(float); +-keep class com.android.launcher3.FastBitmapDrawable { + public int getBrightness(); + public void setBrightness(int); } -keep class com.android.launcher3.MemoryDumpActivity { @@ -58,7 +60,7 @@ public void setAnimationProgress(float); } --keep class com.android.launcher3.FastBitmapDrawable { - public int getBrightness(); - public void setBrightness(int); -} +-keep class com.android.launcher3.Workspace { + public float getBackgroundAlpha(); + public void setBackgroundAlpha(float); +}
\ No newline at end of file diff --git a/protos/backup.proto b/protos/backup.proto index 8ae175234..d8d94e8cb 100644 --- a/protos/backup.proto +++ b/protos/backup.proto @@ -14,7 +14,9 @@ * limitations under the License. */ - package launcher_backup; +syntax = "proto2"; + +package launcher_backup; option java_package = "com.android.launcher3.backup"; option java_outer_classname = "BackupProtos"; @@ -70,6 +72,17 @@ message Journal { } message Favorite { + // Type of the app, this target represents + enum TargetType { + TARGET_NONE = 0; + TARGET_PHONE = 1; + TARGET_MESSENGER = 2; + TARGET_EMAIL = 3; + TARGET_BROWSER = 4; + TARGET_GALLERY = 5; + TARGET_CAMERA = 6; + } + required int64 id = 1; required int32 itemType = 2; optional string title = 3; @@ -88,17 +101,18 @@ message Favorite { optional string iconPackage = 16; optional string iconResource = 17; optional bytes icon = 18; - } + optional TargetType targetType = 19 [default = TARGET_NONE]; +} message Screen { required int64 id = 1; optional int32 rank = 2; - } +} message Resource { required int32 dpi = 1; required bytes data = 2; - } +} message Widget { required string provider = 1; @@ -106,4 +120,8 @@ message Widget { optional bool configure = 3; optional Resource icon = 4; optional Resource preview = 5; - } + + // Assume that a widget is resizable upto 2x2 if no data is available + optional int32 minSpanX = 6 [default = 2]; + optional int32 minSpanY = 7 [default = 2]; +} diff --git a/res/drawable-hdpi/apps_customize_bg.png b/res/drawable-hdpi/apps_customize_bg.png Binary files differdeleted file mode 100644 index 284746796..000000000 --- a/res/drawable-hdpi/apps_customize_bg.png +++ /dev/null diff --git a/res/drawable-hdpi/bg_appwidget_error.9.png b/res/drawable-hdpi/bg_appwidget_error.9.png Binary files differdeleted file mode 100644 index 4da3195d4..000000000 --- a/res/drawable-hdpi/bg_appwidget_error.9.png +++ /dev/null diff --git a/res/drawable-hdpi/home_press.9.png b/res/drawable-hdpi/home_press.9.png Binary files differdeleted file mode 100644 index ef07011f8..000000000 --- a/res/drawable-hdpi/home_press.9.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_arrow_back_grey.png b/res/drawable-hdpi/ic_arrow_back_grey.png Binary files differnew file mode 100755 index 000000000..ccd3900dd --- /dev/null +++ b/res/drawable-hdpi/ic_arrow_back_grey.png diff --git a/res/drawable-hdpi/ic_home_all_apps_holo_dark.png b/res/drawable-hdpi/ic_home_all_apps_holo_dark.png Binary files differdeleted file mode 100644 index 1dc02d5e4..000000000 --- a/res/drawable-hdpi/ic_home_all_apps_holo_dark.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_info_launcher.png b/res/drawable-hdpi/ic_info_launcher.png Binary files differnew file mode 100644 index 000000000..ec0cdd18c --- /dev/null +++ b/res/drawable-hdpi/ic_info_launcher.png diff --git a/res/drawable-hdpi/ic_launcher_clear_active_holo.png b/res/drawable-hdpi/ic_launcher_clear_active_holo.png Binary files differdeleted file mode 100644 index cdd0052b3..000000000 --- a/res/drawable-hdpi/ic_launcher_clear_active_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_launcher_clear_normal_holo.png b/res/drawable-hdpi/ic_launcher_clear_normal_holo.png Binary files differdeleted file mode 100644 index 84549ff94..000000000 --- a/res/drawable-hdpi/ic_launcher_clear_normal_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_launcher_info_active_holo.png b/res/drawable-hdpi/ic_launcher_info_active_holo.png Binary files differdeleted file mode 100644 index c534e5670..000000000 --- a/res/drawable-hdpi/ic_launcher_info_active_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_launcher_info_normal_holo.png b/res/drawable-hdpi/ic_launcher_info_normal_holo.png Binary files differdeleted file mode 100644 index c9bcd7f37..000000000 --- a/res/drawable-hdpi/ic_launcher_info_normal_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_launcher_market_holo.png b/res/drawable-hdpi/ic_launcher_market_holo.png Binary files differdeleted file mode 100644 index dc7825114..000000000 --- a/res/drawable-hdpi/ic_launcher_market_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_launcher_trashcan_active_holo.png b/res/drawable-hdpi/ic_launcher_trashcan_active_holo.png Binary files differdeleted file mode 100644 index 82b1b5917..000000000 --- a/res/drawable-hdpi/ic_launcher_trashcan_active_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_launcher_trashcan_normal_holo.png b/res/drawable-hdpi/ic_launcher_trashcan_normal_holo.png Binary files differdeleted file mode 100644 index 3fc2e8347..000000000 --- a/res/drawable-hdpi/ic_launcher_trashcan_normal_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_pageindicator_current.png b/res/drawable-hdpi/ic_pageindicator_current.png Binary files differindex 283f44d37..423ca2b45 100644 --- a/res/drawable-hdpi/ic_pageindicator_current.png +++ b/res/drawable-hdpi/ic_pageindicator_current.png diff --git a/res/drawable-hdpi/ic_pageindicator_current_folder.png b/res/drawable-hdpi/ic_pageindicator_current_folder.png Binary files differnew file mode 100644 index 000000000..43fbb0e79 --- /dev/null +++ b/res/drawable-hdpi/ic_pageindicator_current_folder.png diff --git a/res/drawable-hdpi/ic_pageindicator_default.png b/res/drawable-hdpi/ic_pageindicator_default.png Binary files differindex 47b998967..83fa73fc6 100644 --- a/res/drawable-hdpi/ic_pageindicator_default.png +++ b/res/drawable-hdpi/ic_pageindicator_default.png diff --git a/res/drawable-hdpi/ic_pageindicator_default_folder.png b/res/drawable-hdpi/ic_pageindicator_default_folder.png Binary files differnew file mode 100644 index 000000000..55cab1c65 --- /dev/null +++ b/res/drawable-hdpi/ic_pageindicator_default_folder.png diff --git a/res/drawable-hdpi/ic_remove_launcher.png b/res/drawable-hdpi/ic_remove_launcher.png Binary files differnew file mode 100644 index 000000000..c0814579a --- /dev/null +++ b/res/drawable-hdpi/ic_remove_launcher.png diff --git a/res/drawable-hdpi/ic_search_grey.png b/res/drawable-hdpi/ic_search_grey.png Binary files differnew file mode 100755 index 000000000..f4c5e27d2 --- /dev/null +++ b/res/drawable-hdpi/ic_search_grey.png diff --git a/res/drawable-hdpi/ic_uninstall_launcher.png b/res/drawable-hdpi/ic_uninstall_launcher.png Binary files differnew file mode 100644 index 000000000..3d8f72644 --- /dev/null +++ b/res/drawable-hdpi/ic_uninstall_launcher.png diff --git a/res/drawable-hdpi/ic_widget_resize_handle.png b/res/drawable-hdpi/ic_widget_resize_handle.png Binary files differnew file mode 100644 index 000000000..844f3cf09 --- /dev/null +++ b/res/drawable-hdpi/ic_widget_resize_handle.png diff --git a/res/drawable-hdpi/on_boarding_welcome.png b/res/drawable-hdpi/on_boarding_welcome.png Binary files differdeleted file mode 100644 index 852a0cb13..000000000 --- a/res/drawable-hdpi/on_boarding_welcome.png +++ /dev/null diff --git a/res/drawable-hdpi/overscroll_glow_left.9.png b/res/drawable-hdpi/overscroll_glow_left.9.png Binary files differdeleted file mode 100644 index aaf43c73a..000000000 --- a/res/drawable-hdpi/overscroll_glow_left.9.png +++ /dev/null diff --git a/res/drawable-hdpi/overscroll_glow_right.9.png b/res/drawable-hdpi/overscroll_glow_right.9.png Binary files differdeleted file mode 100644 index d03486441..000000000 --- a/res/drawable-hdpi/overscroll_glow_right.9.png +++ /dev/null diff --git a/res/drawable-hdpi/paged_view_indicator.9.png b/res/drawable-hdpi/paged_view_indicator.9.png Binary files differdeleted file mode 100644 index 5b47f4477..000000000 --- a/res/drawable-hdpi/paged_view_indicator.9.png +++ /dev/null diff --git a/res/drawable-hdpi/portal_container_holo.9.png b/res/drawable-hdpi/portal_container_holo.9.png Binary files differdeleted file mode 100644 index ba8a4a8cd..000000000 --- a/res/drawable-hdpi/portal_container_holo.9.png +++ /dev/null diff --git a/res/drawable-hdpi/portal_ring_inner.png b/res/drawable-hdpi/portal_ring_inner.png Binary files differnew file mode 100644 index 000000000..c29b4aa64 --- /dev/null +++ b/res/drawable-hdpi/portal_ring_inner.png diff --git a/res/drawable-hdpi/portal_ring_inner_holo.png b/res/drawable-hdpi/portal_ring_inner_holo.png Binary files differdeleted file mode 100644 index 857a01ec4..000000000 --- a/res/drawable-hdpi/portal_ring_inner_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/portal_ring_inner_nolip.png b/res/drawable-hdpi/portal_ring_inner_nolip.png Binary files differnew file mode 100644 index 000000000..e2f06fe9b --- /dev/null +++ b/res/drawable-hdpi/portal_ring_inner_nolip.png diff --git a/res/drawable-hdpi/portal_ring_inner_nolip_holo.png b/res/drawable-hdpi/portal_ring_inner_nolip_holo.png Binary files differdeleted file mode 100644 index 53df36a43..000000000 --- a/res/drawable-hdpi/portal_ring_inner_nolip_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/portal_ring_outer.png b/res/drawable-hdpi/portal_ring_outer.png Binary files differnew file mode 100644 index 000000000..e7b436b7b --- /dev/null +++ b/res/drawable-hdpi/portal_ring_outer.png diff --git a/res/drawable-hdpi/portal_ring_outer_holo.png b/res/drawable-hdpi/portal_ring_outer_holo.png Binary files differdeleted file mode 100644 index b711cf350..000000000 --- a/res/drawable-hdpi/portal_ring_outer_holo.png +++ /dev/null diff --git a/res/drawable-hdpi/portal_ring_rest.png b/res/drawable-hdpi/portal_ring_rest.png Binary files differindex 2979b736b..e3b13393e 100644 --- a/res/drawable-hdpi/portal_ring_rest.png +++ b/res/drawable-hdpi/portal_ring_rest.png diff --git a/res/drawable-hdpi/quantum_panel.9.png b/res/drawable-hdpi/quantum_panel.9.png Binary files differdeleted file mode 100644 index b4ac9c0a0..000000000 --- a/res/drawable-hdpi/quantum_panel.9.png +++ /dev/null diff --git a/res/drawable-hdpi/quantum_panel_bitmap.9.png b/res/drawable-hdpi/quantum_panel_bitmap.9.png Binary files differnew file mode 100644 index 000000000..c3319290f --- /dev/null +++ b/res/drawable-hdpi/quantum_panel_bitmap.9.png diff --git a/res/drawable-hdpi/quantum_panel_dark.9.png b/res/drawable-hdpi/quantum_panel_dark.9.png Binary files differdeleted file mode 100644 index abaf23026..000000000 --- a/res/drawable-hdpi/quantum_panel_dark.9.png +++ /dev/null diff --git a/res/drawable-hdpi/quantum_panel_dark_bitmap.9.png b/res/drawable-hdpi/quantum_panel_dark_bitmap.9.png Binary files differnew file mode 100644 index 000000000..0145d36b7 --- /dev/null +++ b/res/drawable-hdpi/quantum_panel_dark_bitmap.9.png diff --git a/res/drawable-hdpi/widget_resize_frame.9.png b/res/drawable-hdpi/widget_resize_frame.9.png Binary files differnew file mode 100644 index 000000000..b0a740384 --- /dev/null +++ b/res/drawable-hdpi/widget_resize_frame.9.png diff --git a/res/drawable-hdpi/widget_resize_frame_holo.9.png b/res/drawable-hdpi/widget_resize_frame_holo.9.png Binary files differdeleted file mode 100644 index 2d6fcf51f..000000000 --- a/res/drawable-hdpi/widget_resize_frame_holo.9.png +++ /dev/null diff --git a/res/drawable-hdpi/widget_resize_handle_bottom.png b/res/drawable-hdpi/widget_resize_handle_bottom.png Binary files differdeleted file mode 100644 index f0afd6172..000000000 --- a/res/drawable-hdpi/widget_resize_handle_bottom.png +++ /dev/null diff --git a/res/drawable-hdpi/widget_resize_handle_left.png b/res/drawable-hdpi/widget_resize_handle_left.png Binary files differdeleted file mode 100644 index 47613b29f..000000000 --- a/res/drawable-hdpi/widget_resize_handle_left.png +++ /dev/null diff --git a/res/drawable-hdpi/widget_resize_handle_right.png b/res/drawable-hdpi/widget_resize_handle_right.png Binary files differdeleted file mode 100644 index acc28be83..000000000 --- a/res/drawable-hdpi/widget_resize_handle_right.png +++ /dev/null diff --git a/res/drawable-hdpi/widget_resize_handle_top.png b/res/drawable-hdpi/widget_resize_handle_top.png Binary files differdeleted file mode 100644 index 2c60be00c..000000000 --- a/res/drawable-hdpi/widget_resize_handle_top.png +++ /dev/null diff --git a/res/drawable-hdpi/widget_resize_shadow.9.png b/res/drawable-hdpi/widget_resize_shadow.9.png Binary files differnew file mode 100644 index 000000000..6e2932dcd --- /dev/null +++ b/res/drawable-hdpi/widget_resize_shadow.9.png diff --git a/res/drawable-ldrtl/container_fastscroll_popup_bg.xml b/res/drawable-ldrtl/container_fastscroll_popup_bg.xml new file mode 100644 index 000000000..d79096807 --- /dev/null +++ b/res/drawable-ldrtl/container_fastscroll_popup_bg.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@color/container_fastscroll_thumb_active_color" /> + <size + android:width="64dp" + android:height="64dp" /> + <corners + android:topLeftRadius="64dp" + android:topRightRadius="64dp" + android:bottomRightRadius="64dp" /> +</shape>
\ No newline at end of file diff --git a/res/drawable-mdpi/apps_customize_bg.png b/res/drawable-mdpi/apps_customize_bg.png Binary files differdeleted file mode 100644 index 284746796..000000000 --- a/res/drawable-mdpi/apps_customize_bg.png +++ /dev/null diff --git a/res/drawable-mdpi/bg_appwidget_error.9.png b/res/drawable-mdpi/bg_appwidget_error.9.png Binary files differdeleted file mode 100644 index 493c0d454..000000000 --- a/res/drawable-mdpi/bg_appwidget_error.9.png +++ /dev/null diff --git a/res/drawable-mdpi/home_press.9.png b/res/drawable-mdpi/home_press.9.png Binary files differdeleted file mode 100644 index 679a1f626..000000000 --- a/res/drawable-mdpi/home_press.9.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_arrow_back_grey.png b/res/drawable-mdpi/ic_arrow_back_grey.png Binary files differnew file mode 100755 index 000000000..11996efe3 --- /dev/null +++ b/res/drawable-mdpi/ic_arrow_back_grey.png diff --git a/res/drawable-mdpi/ic_home_all_apps_holo_dark.png b/res/drawable-mdpi/ic_home_all_apps_holo_dark.png Binary files differdeleted file mode 100644 index 84fa5947d..000000000 --- a/res/drawable-mdpi/ic_home_all_apps_holo_dark.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_info_launcher.png b/res/drawable-mdpi/ic_info_launcher.png Binary files differnew file mode 100644 index 000000000..c72d0c2a9 --- /dev/null +++ b/res/drawable-mdpi/ic_info_launcher.png diff --git a/res/drawable-mdpi/ic_launcher_clear_active_holo.png b/res/drawable-mdpi/ic_launcher_clear_active_holo.png Binary files differdeleted file mode 100644 index 2683beaa3..000000000 --- a/res/drawable-mdpi/ic_launcher_clear_active_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_launcher_clear_normal_holo.png b/res/drawable-mdpi/ic_launcher_clear_normal_holo.png Binary files differdeleted file mode 100644 index 219f3e5cf..000000000 --- a/res/drawable-mdpi/ic_launcher_clear_normal_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_launcher_info_active_holo.png b/res/drawable-mdpi/ic_launcher_info_active_holo.png Binary files differdeleted file mode 100644 index f84b4a6ba..000000000 --- a/res/drawable-mdpi/ic_launcher_info_active_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_launcher_info_normal_holo.png b/res/drawable-mdpi/ic_launcher_info_normal_holo.png Binary files differdeleted file mode 100644 index eac578f5c..000000000 --- a/res/drawable-mdpi/ic_launcher_info_normal_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_launcher_market_holo.png b/res/drawable-mdpi/ic_launcher_market_holo.png Binary files differdeleted file mode 100644 index cacb37484..000000000 --- a/res/drawable-mdpi/ic_launcher_market_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_launcher_trashcan_active_holo.png b/res/drawable-mdpi/ic_launcher_trashcan_active_holo.png Binary files differdeleted file mode 100644 index 0350e558d..000000000 --- a/res/drawable-mdpi/ic_launcher_trashcan_active_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_launcher_trashcan_normal_holo.png b/res/drawable-mdpi/ic_launcher_trashcan_normal_holo.png Binary files differdeleted file mode 100644 index 799b62f8b..000000000 --- a/res/drawable-mdpi/ic_launcher_trashcan_normal_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_pageindicator_current.png b/res/drawable-mdpi/ic_pageindicator_current.png Binary files differindex b41e1bb67..ca889c4d1 100644 --- a/res/drawable-mdpi/ic_pageindicator_current.png +++ b/res/drawable-mdpi/ic_pageindicator_current.png diff --git a/res/drawable-mdpi/ic_pageindicator_current_folder.png b/res/drawable-mdpi/ic_pageindicator_current_folder.png Binary files differnew file mode 100644 index 000000000..5bbba9140 --- /dev/null +++ b/res/drawable-mdpi/ic_pageindicator_current_folder.png diff --git a/res/drawable-mdpi/ic_pageindicator_default.png b/res/drawable-mdpi/ic_pageindicator_default.png Binary files differindex e36c25cf1..34493b155 100644 --- a/res/drawable-mdpi/ic_pageindicator_default.png +++ b/res/drawable-mdpi/ic_pageindicator_default.png diff --git a/res/drawable-mdpi/ic_pageindicator_default_folder.png b/res/drawable-mdpi/ic_pageindicator_default_folder.png Binary files differnew file mode 100644 index 000000000..0a987a4d0 --- /dev/null +++ b/res/drawable-mdpi/ic_pageindicator_default_folder.png diff --git a/res/drawable-mdpi/ic_remove_launcher.png b/res/drawable-mdpi/ic_remove_launcher.png Binary files differnew file mode 100644 index 000000000..4a2c3197e --- /dev/null +++ b/res/drawable-mdpi/ic_remove_launcher.png diff --git a/res/drawable-mdpi/ic_search_grey.png b/res/drawable-mdpi/ic_search_grey.png Binary files differnew file mode 100755 index 000000000..e83891c11 --- /dev/null +++ b/res/drawable-mdpi/ic_search_grey.png diff --git a/res/drawable-mdpi/ic_setting_icn.png b/res/drawable-mdpi/ic_setting_icn.png Binary files differdeleted file mode 100644 index 5c32c54da..000000000 --- a/res/drawable-mdpi/ic_setting_icn.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_uninstall_launcher.png b/res/drawable-mdpi/ic_uninstall_launcher.png Binary files differnew file mode 100644 index 000000000..af456690c --- /dev/null +++ b/res/drawable-mdpi/ic_uninstall_launcher.png diff --git a/res/drawable-mdpi/ic_widget_resize_handle.png b/res/drawable-mdpi/ic_widget_resize_handle.png Binary files differnew file mode 100644 index 000000000..c3b287ff0 --- /dev/null +++ b/res/drawable-mdpi/ic_widget_resize_handle.png diff --git a/res/drawable-mdpi/on_boarding_welcome.png b/res/drawable-mdpi/on_boarding_welcome.png Binary files differdeleted file mode 100644 index 1d12e8362..000000000 --- a/res/drawable-mdpi/on_boarding_welcome.png +++ /dev/null diff --git a/res/drawable-mdpi/overscroll_glow_left.9.png b/res/drawable-mdpi/overscroll_glow_left.9.png Binary files differdeleted file mode 100644 index b79cdcdc2..000000000 --- a/res/drawable-mdpi/overscroll_glow_left.9.png +++ /dev/null diff --git a/res/drawable-mdpi/overscroll_glow_right.9.png b/res/drawable-mdpi/overscroll_glow_right.9.png Binary files differdeleted file mode 100644 index 1321303e1..000000000 --- a/res/drawable-mdpi/overscroll_glow_right.9.png +++ /dev/null diff --git a/res/drawable-mdpi/paged_view_indicator.9.png b/res/drawable-mdpi/paged_view_indicator.9.png Binary files differdeleted file mode 100644 index 647b60f37..000000000 --- a/res/drawable-mdpi/paged_view_indicator.9.png +++ /dev/null diff --git a/res/drawable-mdpi/portal_container_holo.9.png b/res/drawable-mdpi/portal_container_holo.9.png Binary files differdeleted file mode 100644 index 1e4afae76..000000000 --- a/res/drawable-mdpi/portal_container_holo.9.png +++ /dev/null diff --git a/res/drawable-mdpi/portal_ring_inner.png b/res/drawable-mdpi/portal_ring_inner.png Binary files differnew file mode 100644 index 000000000..99aaa60a9 --- /dev/null +++ b/res/drawable-mdpi/portal_ring_inner.png diff --git a/res/drawable-mdpi/portal_ring_inner_holo.png b/res/drawable-mdpi/portal_ring_inner_holo.png Binary files differdeleted file mode 100644 index 72e0af8f8..000000000 --- a/res/drawable-mdpi/portal_ring_inner_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/portal_ring_inner_nolip.png b/res/drawable-mdpi/portal_ring_inner_nolip.png Binary files differnew file mode 100644 index 000000000..f981778f5 --- /dev/null +++ b/res/drawable-mdpi/portal_ring_inner_nolip.png diff --git a/res/drawable-mdpi/portal_ring_inner_nolip_holo.png b/res/drawable-mdpi/portal_ring_inner_nolip_holo.png Binary files differdeleted file mode 100644 index 483f0ebec..000000000 --- a/res/drawable-mdpi/portal_ring_inner_nolip_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/portal_ring_outer.png b/res/drawable-mdpi/portal_ring_outer.png Binary files differnew file mode 100644 index 000000000..c98f64b76 --- /dev/null +++ b/res/drawable-mdpi/portal_ring_outer.png diff --git a/res/drawable-mdpi/portal_ring_outer_holo.png b/res/drawable-mdpi/portal_ring_outer_holo.png Binary files differdeleted file mode 100644 index e9b35f3f3..000000000 --- a/res/drawable-mdpi/portal_ring_outer_holo.png +++ /dev/null diff --git a/res/drawable-mdpi/portal_ring_rest.png b/res/drawable-mdpi/portal_ring_rest.png Binary files differindex d0a976e55..5c33b424d 100644 --- a/res/drawable-mdpi/portal_ring_rest.png +++ b/res/drawable-mdpi/portal_ring_rest.png diff --git a/res/drawable-mdpi/quantum_panel.9.png b/res/drawable-mdpi/quantum_panel.9.png Binary files differdeleted file mode 100644 index c5a6eb735..000000000 --- a/res/drawable-mdpi/quantum_panel.9.png +++ /dev/null diff --git a/res/drawable-mdpi/quantum_panel_bitmap.9.png b/res/drawable-mdpi/quantum_panel_bitmap.9.png Binary files differnew file mode 100644 index 000000000..86be568fd --- /dev/null +++ b/res/drawable-mdpi/quantum_panel_bitmap.9.png diff --git a/res/drawable-mdpi/quantum_panel_dark.9.png b/res/drawable-mdpi/quantum_panel_dark.9.png Binary files differdeleted file mode 100644 index 7728a7268..000000000 --- a/res/drawable-mdpi/quantum_panel_dark.9.png +++ /dev/null diff --git a/res/drawable-mdpi/quantum_panel_dark_bitmap.9.png b/res/drawable-mdpi/quantum_panel_dark_bitmap.9.png Binary files differnew file mode 100644 index 000000000..70429b9fc --- /dev/null +++ b/res/drawable-mdpi/quantum_panel_dark_bitmap.9.png diff --git a/res/drawable-mdpi/widget_resize_frame.9.png b/res/drawable-mdpi/widget_resize_frame.9.png Binary files differnew file mode 100644 index 000000000..856cec619 --- /dev/null +++ b/res/drawable-mdpi/widget_resize_frame.9.png diff --git a/res/drawable-mdpi/widget_resize_frame_holo.9.png b/res/drawable-mdpi/widget_resize_frame_holo.9.png Binary files differdeleted file mode 100644 index 028bd6248..000000000 --- a/res/drawable-mdpi/widget_resize_frame_holo.9.png +++ /dev/null diff --git a/res/drawable-mdpi/widget_resize_handle_bottom.png b/res/drawable-mdpi/widget_resize_handle_bottom.png Binary files differdeleted file mode 100644 index c838bf405..000000000 --- a/res/drawable-mdpi/widget_resize_handle_bottom.png +++ /dev/null diff --git a/res/drawable-mdpi/widget_resize_handle_left.png b/res/drawable-mdpi/widget_resize_handle_left.png Binary files differdeleted file mode 100644 index ff0b0d357..000000000 --- a/res/drawable-mdpi/widget_resize_handle_left.png +++ /dev/null diff --git a/res/drawable-mdpi/widget_resize_handle_right.png b/res/drawable-mdpi/widget_resize_handle_right.png Binary files differdeleted file mode 100644 index fc4808e3a..000000000 --- a/res/drawable-mdpi/widget_resize_handle_right.png +++ /dev/null diff --git a/res/drawable-mdpi/widget_resize_handle_top.png b/res/drawable-mdpi/widget_resize_handle_top.png Binary files differdeleted file mode 100644 index 3b1df0170..000000000 --- a/res/drawable-mdpi/widget_resize_handle_top.png +++ /dev/null diff --git a/res/drawable-mdpi/widget_resize_shadow.9.png b/res/drawable-mdpi/widget_resize_shadow.9.png Binary files differnew file mode 100644 index 000000000..02522f344 --- /dev/null +++ b/res/drawable-mdpi/widget_resize_shadow.9.png diff --git a/res/drawable-v21/quantum_panel.xml b/res/drawable-v21/quantum_panel.xml new file mode 100644 index 000000000..d1c078335 --- /dev/null +++ b/res/drawable-v21/quantum_panel.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<inset xmlns:android="http://schemas.android.com/apk/res/android" + android:drawable="@drawable/quantum_panel_shape" + android:insetBottom="@dimen/quantum_panel_outer_padding" + android:insetLeft="@dimen/quantum_panel_outer_padding" + android:insetRight="@dimen/quantum_panel_outer_padding" + android:insetTop="@dimen/quantum_panel_outer_padding" /> diff --git a/res/drawable-v21/quantum_panel_dark.xml b/res/drawable-v21/quantum_panel_dark.xml new file mode 100644 index 000000000..405ad5173 --- /dev/null +++ b/res/drawable-v21/quantum_panel_dark.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<inset xmlns:android="http://schemas.android.com/apk/res/android" + android:drawable="@drawable/quantum_panel_shape_dark" + android:insetBottom="@dimen/quantum_panel_outer_padding" + android:insetLeft="@dimen/quantum_panel_outer_padding" + android:insetRight="@dimen/quantum_panel_outer_padding" + android:insetTop="@dimen/quantum_panel_outer_padding" /> diff --git a/res/drawable-xhdpi/apps_customize_bg.png b/res/drawable-xhdpi/apps_customize_bg.png Binary files differdeleted file mode 100644 index a51cc112b..000000000 --- a/res/drawable-xhdpi/apps_customize_bg.png +++ /dev/null diff --git a/res/drawable-xhdpi/bg_appwidget_error.9.png b/res/drawable-xhdpi/bg_appwidget_error.9.png Binary files differdeleted file mode 100644 index b792cc847..000000000 --- a/res/drawable-xhdpi/bg_appwidget_error.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/home_press.9.png b/res/drawable-xhdpi/home_press.9.png Binary files differdeleted file mode 100644 index d9abfd358..000000000 --- a/res/drawable-xhdpi/home_press.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_arrow_back_grey.png b/res/drawable-xhdpi/ic_arrow_back_grey.png Binary files differnew file mode 100755 index 000000000..79b9b486c --- /dev/null +++ b/res/drawable-xhdpi/ic_arrow_back_grey.png diff --git a/res/drawable-xhdpi/ic_home_all_apps_holo_dark.png b/res/drawable-xhdpi/ic_home_all_apps_holo_dark.png Binary files differdeleted file mode 100644 index 81228d402..000000000 --- a/res/drawable-xhdpi/ic_home_all_apps_holo_dark.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_info_launcher.png b/res/drawable-xhdpi/ic_info_launcher.png Binary files differnew file mode 100644 index 000000000..076b59bf7 --- /dev/null +++ b/res/drawable-xhdpi/ic_info_launcher.png diff --git a/res/drawable-xhdpi/ic_launcher_clear_active_holo.png b/res/drawable-xhdpi/ic_launcher_clear_active_holo.png Binary files differdeleted file mode 100644 index 1a7e53ddb..000000000 --- a/res/drawable-xhdpi/ic_launcher_clear_active_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_launcher_clear_normal_holo.png b/res/drawable-xhdpi/ic_launcher_clear_normal_holo.png Binary files differdeleted file mode 100644 index d4965d9f8..000000000 --- a/res/drawable-xhdpi/ic_launcher_clear_normal_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_launcher_info_active_holo.png b/res/drawable-xhdpi/ic_launcher_info_active_holo.png Binary files differdeleted file mode 100644 index b8cdbc4f8..000000000 --- a/res/drawable-xhdpi/ic_launcher_info_active_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_launcher_info_normal_holo.png b/res/drawable-xhdpi/ic_launcher_info_normal_holo.png Binary files differdeleted file mode 100644 index f503fb82d..000000000 --- a/res/drawable-xhdpi/ic_launcher_info_normal_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_launcher_market_holo.png b/res/drawable-xhdpi/ic_launcher_market_holo.png Binary files differdeleted file mode 100644 index 958f0de3c..000000000 --- a/res/drawable-xhdpi/ic_launcher_market_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_launcher_trashcan_active_holo.png b/res/drawable-xhdpi/ic_launcher_trashcan_active_holo.png Binary files differdeleted file mode 100644 index c155274bd..000000000 --- a/res/drawable-xhdpi/ic_launcher_trashcan_active_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_launcher_trashcan_normal_holo.png b/res/drawable-xhdpi/ic_launcher_trashcan_normal_holo.png Binary files differdeleted file mode 100644 index 2ec7ad9b4..000000000 --- a/res/drawable-xhdpi/ic_launcher_trashcan_normal_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/ic_pageindicator_current.png b/res/drawable-xhdpi/ic_pageindicator_current.png Binary files differindex 8fa774dee..3054f2f4f 100644 --- a/res/drawable-xhdpi/ic_pageindicator_current.png +++ b/res/drawable-xhdpi/ic_pageindicator_current.png diff --git a/res/drawable-xhdpi/ic_pageindicator_current_folder.png b/res/drawable-xhdpi/ic_pageindicator_current_folder.png Binary files differnew file mode 100644 index 000000000..cd92e9f21 --- /dev/null +++ b/res/drawable-xhdpi/ic_pageindicator_current_folder.png diff --git a/res/drawable-xhdpi/ic_pageindicator_default.png b/res/drawable-xhdpi/ic_pageindicator_default.png Binary files differindex 8eb5eb08d..38538dcf0 100644 --- a/res/drawable-xhdpi/ic_pageindicator_default.png +++ b/res/drawable-xhdpi/ic_pageindicator_default.png diff --git a/res/drawable-xhdpi/ic_pageindicator_default_folder.png b/res/drawable-xhdpi/ic_pageindicator_default_folder.png Binary files differnew file mode 100644 index 000000000..e7c46e3a1 --- /dev/null +++ b/res/drawable-xhdpi/ic_pageindicator_default_folder.png diff --git a/res/drawable-xhdpi/ic_remove_launcher.png b/res/drawable-xhdpi/ic_remove_launcher.png Binary files differnew file mode 100644 index 000000000..de058893a --- /dev/null +++ b/res/drawable-xhdpi/ic_remove_launcher.png diff --git a/res/drawable-xhdpi/ic_search_grey.png b/res/drawable-xhdpi/ic_search_grey.png Binary files differnew file mode 100755 index 000000000..bd5fdf444 --- /dev/null +++ b/res/drawable-xhdpi/ic_search_grey.png diff --git a/res/drawable-xhdpi/ic_uninstall_launcher.png b/res/drawable-xhdpi/ic_uninstall_launcher.png Binary files differnew file mode 100644 index 000000000..dd50e88c6 --- /dev/null +++ b/res/drawable-xhdpi/ic_uninstall_launcher.png diff --git a/res/drawable-xhdpi/ic_widget_resize_handle.png b/res/drawable-xhdpi/ic_widget_resize_handle.png Binary files differnew file mode 100644 index 000000000..f445a1c08 --- /dev/null +++ b/res/drawable-xhdpi/ic_widget_resize_handle.png diff --git a/res/drawable-xhdpi/on_boarding_welcome.png b/res/drawable-xhdpi/on_boarding_welcome.png Binary files differdeleted file mode 100644 index 8c101e0db..000000000 --- a/res/drawable-xhdpi/on_boarding_welcome.png +++ /dev/null diff --git a/res/drawable-xhdpi/overscroll_glow_left.9.png b/res/drawable-xhdpi/overscroll_glow_left.9.png Binary files differdeleted file mode 100644 index 4f248f70b..000000000 --- a/res/drawable-xhdpi/overscroll_glow_left.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/overscroll_glow_right.9.png b/res/drawable-xhdpi/overscroll_glow_right.9.png Binary files differdeleted file mode 100644 index 818a70db8..000000000 --- a/res/drawable-xhdpi/overscroll_glow_right.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/paged_view_indicator.9.png b/res/drawable-xhdpi/paged_view_indicator.9.png Binary files differdeleted file mode 100644 index fb8a22820..000000000 --- a/res/drawable-xhdpi/paged_view_indicator.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/portal_container_holo.9.png b/res/drawable-xhdpi/portal_container_holo.9.png Binary files differdeleted file mode 100644 index cedbdc401..000000000 --- a/res/drawable-xhdpi/portal_container_holo.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/portal_ring_inner.png b/res/drawable-xhdpi/portal_ring_inner.png Binary files differnew file mode 100644 index 000000000..7b6a8a04e --- /dev/null +++ b/res/drawable-xhdpi/portal_ring_inner.png diff --git a/res/drawable-xhdpi/portal_ring_inner_holo.png b/res/drawable-xhdpi/portal_ring_inner_holo.png Binary files differdeleted file mode 100644 index f9acfa284..000000000 --- a/res/drawable-xhdpi/portal_ring_inner_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/portal_ring_inner_nolip.png b/res/drawable-xhdpi/portal_ring_inner_nolip.png Binary files differnew file mode 100644 index 000000000..4b84436ee --- /dev/null +++ b/res/drawable-xhdpi/portal_ring_inner_nolip.png diff --git a/res/drawable-xhdpi/portal_ring_inner_nolip_holo.png b/res/drawable-xhdpi/portal_ring_inner_nolip_holo.png Binary files differdeleted file mode 100644 index eb2cf5f8b..000000000 --- a/res/drawable-xhdpi/portal_ring_inner_nolip_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/portal_ring_outer.png b/res/drawable-xhdpi/portal_ring_outer.png Binary files differnew file mode 100644 index 000000000..79c188873 --- /dev/null +++ b/res/drawable-xhdpi/portal_ring_outer.png diff --git a/res/drawable-xhdpi/portal_ring_outer_holo.png b/res/drawable-xhdpi/portal_ring_outer_holo.png Binary files differdeleted file mode 100644 index f32051dcf..000000000 --- a/res/drawable-xhdpi/portal_ring_outer_holo.png +++ /dev/null diff --git a/res/drawable-xhdpi/portal_ring_rest.png b/res/drawable-xhdpi/portal_ring_rest.png Binary files differindex ff0369a26..544a74f9f 100644 --- a/res/drawable-xhdpi/portal_ring_rest.png +++ b/res/drawable-xhdpi/portal_ring_rest.png diff --git a/res/drawable-xhdpi/quantum_panel.9.png b/res/drawable-xhdpi/quantum_panel.9.png Binary files differdeleted file mode 100644 index 1797ad500..000000000 --- a/res/drawable-xhdpi/quantum_panel.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/quantum_panel_bitmap.9.png b/res/drawable-xhdpi/quantum_panel_bitmap.9.png Binary files differnew file mode 100644 index 000000000..13bdf09ec --- /dev/null +++ b/res/drawable-xhdpi/quantum_panel_bitmap.9.png diff --git a/res/drawable-xhdpi/quantum_panel_dark.9.png b/res/drawable-xhdpi/quantum_panel_dark.9.png Binary files differdeleted file mode 100644 index 4c1868b55..000000000 --- a/res/drawable-xhdpi/quantum_panel_dark.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/quantum_panel_dark_bitmap.9.png b/res/drawable-xhdpi/quantum_panel_dark_bitmap.9.png Binary files differnew file mode 100644 index 000000000..ac2e423f2 --- /dev/null +++ b/res/drawable-xhdpi/quantum_panel_dark_bitmap.9.png diff --git a/res/drawable-xhdpi/widget_resize_frame.9.png b/res/drawable-xhdpi/widget_resize_frame.9.png Binary files differnew file mode 100644 index 000000000..bf7cc6b82 --- /dev/null +++ b/res/drawable-xhdpi/widget_resize_frame.9.png diff --git a/res/drawable-xhdpi/widget_resize_frame_holo.9.png b/res/drawable-xhdpi/widget_resize_frame_holo.9.png Binary files differdeleted file mode 100644 index 76cec606d..000000000 --- a/res/drawable-xhdpi/widget_resize_frame_holo.9.png +++ /dev/null diff --git a/res/drawable-xhdpi/widget_resize_handle_bottom.png b/res/drawable-xhdpi/widget_resize_handle_bottom.png Binary files differdeleted file mode 100644 index 19437d7dc..000000000 --- a/res/drawable-xhdpi/widget_resize_handle_bottom.png +++ /dev/null diff --git a/res/drawable-xhdpi/widget_resize_handle_left.png b/res/drawable-xhdpi/widget_resize_handle_left.png Binary files differdeleted file mode 100644 index 28c5487ec..000000000 --- a/res/drawable-xhdpi/widget_resize_handle_left.png +++ /dev/null diff --git a/res/drawable-xhdpi/widget_resize_handle_right.png b/res/drawable-xhdpi/widget_resize_handle_right.png Binary files differdeleted file mode 100644 index 4f672a602..000000000 --- a/res/drawable-xhdpi/widget_resize_handle_right.png +++ /dev/null diff --git a/res/drawable-xhdpi/widget_resize_handle_top.png b/res/drawable-xhdpi/widget_resize_handle_top.png Binary files differdeleted file mode 100644 index e866c008c..000000000 --- a/res/drawable-xhdpi/widget_resize_handle_top.png +++ /dev/null diff --git a/res/drawable-xhdpi/widget_resize_shadow.9.png b/res/drawable-xhdpi/widget_resize_shadow.9.png Binary files differnew file mode 100644 index 000000000..96dee7f01 --- /dev/null +++ b/res/drawable-xhdpi/widget_resize_shadow.9.png diff --git a/res/drawable-xxhdpi/apps_customize_bg.png b/res/drawable-xxhdpi/apps_customize_bg.png Binary files differdeleted file mode 100644 index a51cc112b..000000000 --- a/res/drawable-xxhdpi/apps_customize_bg.png +++ /dev/null diff --git a/res/drawable-xxhdpi/arrow_dashed.png b/res/drawable-xxhdpi/arrow_dashed.png Binary files differdeleted file mode 100644 index b64f4d0fe..000000000 --- a/res/drawable-xxhdpi/arrow_dashed.png +++ /dev/null diff --git a/res/drawable-xxhdpi/default_widget_preview_holo.9.png b/res/drawable-xxhdpi/default_widget_preview_holo.9.png Binary files differdeleted file mode 100644 index 0f62097a8..000000000 --- a/res/drawable-xxhdpi/default_widget_preview_holo.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/hotseat_bg_panel.9.png b/res/drawable-xxhdpi/hotseat_bg_panel.9.png Binary files differdeleted file mode 100644 index 40fc076ff..000000000 --- a/res/drawable-xxhdpi/hotseat_bg_panel.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/hotseat_scrubber_holo.9.png b/res/drawable-xxhdpi/hotseat_scrubber_holo.9.png Binary files differdeleted file mode 100644 index 8a77536be..000000000 --- a/res/drawable-xxhdpi/hotseat_scrubber_holo.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/hotseat_track_holo.9.png b/res/drawable-xxhdpi/hotseat_track_holo.9.png Binary files differdeleted file mode 100644 index dd2216fb7..000000000 --- a/res/drawable-xxhdpi/hotseat_track_holo.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_arrow_back_grey.png b/res/drawable-xxhdpi/ic_arrow_back_grey.png Binary files differnew file mode 100755 index 000000000..8e42e091d --- /dev/null +++ b/res/drawable-xxhdpi/ic_arrow_back_grey.png diff --git a/res/drawable-xxhdpi/ic_home_all_apps_holo_dark.png b/res/drawable-xxhdpi/ic_home_all_apps_holo_dark.png Binary files differdeleted file mode 100644 index 0b8e88c16..000000000 --- a/res/drawable-xxhdpi/ic_home_all_apps_holo_dark.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_home_google_logo_normal_holo.png b/res/drawable-xxhdpi/ic_home_google_logo_normal_holo.png Binary files differdeleted file mode 100644 index a47b2ba99..000000000 --- a/res/drawable-xxhdpi/ic_home_google_logo_normal_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_home_google_logo_pressed_holo.png b/res/drawable-xxhdpi/ic_home_google_logo_pressed_holo.png Binary files differdeleted file mode 100644 index 75625d120..000000000 --- a/res/drawable-xxhdpi/ic_home_google_logo_pressed_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_home_search_pressed_holo.png b/res/drawable-xxhdpi/ic_home_search_pressed_holo.png Binary files differdeleted file mode 100644 index 800d99430..000000000 --- a/res/drawable-xxhdpi/ic_home_search_pressed_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_home_voice_search_pressed_holo.png b/res/drawable-xxhdpi/ic_home_voice_search_pressed_holo.png Binary files differdeleted file mode 100644 index 27a589782..000000000 --- a/res/drawable-xxhdpi/ic_home_voice_search_pressed_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_info_launcher.png b/res/drawable-xxhdpi/ic_info_launcher.png Binary files differnew file mode 100644 index 000000000..386d09147 --- /dev/null +++ b/res/drawable-xxhdpi/ic_info_launcher.png diff --git a/res/drawable-xxhdpi/ic_launcher_clear_active_holo.png b/res/drawable-xxhdpi/ic_launcher_clear_active_holo.png Binary files differdeleted file mode 100644 index 95cf84115..000000000 --- a/res/drawable-xxhdpi/ic_launcher_clear_active_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_launcher_clear_normal_holo.png b/res/drawable-xxhdpi/ic_launcher_clear_normal_holo.png Binary files differdeleted file mode 100644 index b0f5a2702..000000000 --- a/res/drawable-xxhdpi/ic_launcher_clear_normal_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_launcher_info_active_holo.png b/res/drawable-xxhdpi/ic_launcher_info_active_holo.png Binary files differdeleted file mode 100644 index 57f332a94..000000000 --- a/res/drawable-xxhdpi/ic_launcher_info_active_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_launcher_info_normal_holo.png b/res/drawable-xxhdpi/ic_launcher_info_normal_holo.png Binary files differdeleted file mode 100644 index 94f0955d6..000000000 --- a/res/drawable-xxhdpi/ic_launcher_info_normal_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_launcher_trashcan_active_holo.png b/res/drawable-xxhdpi/ic_launcher_trashcan_active_holo.png Binary files differdeleted file mode 100644 index 3bb098c2b..000000000 --- a/res/drawable-xxhdpi/ic_launcher_trashcan_active_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_launcher_trashcan_normal_holo.png b/res/drawable-xxhdpi/ic_launcher_trashcan_normal_holo.png Binary files differdeleted file mode 100644 index 550cc5bb8..000000000 --- a/res/drawable-xxhdpi/ic_launcher_trashcan_normal_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_pageindicator_current.png b/res/drawable-xxhdpi/ic_pageindicator_current.png Binary files differindex 22b290e69..5941c8e4f 100644 --- a/res/drawable-xxhdpi/ic_pageindicator_current.png +++ b/res/drawable-xxhdpi/ic_pageindicator_current.png diff --git a/res/drawable-xxhdpi/ic_pageindicator_current_folder.png b/res/drawable-xxhdpi/ic_pageindicator_current_folder.png Binary files differnew file mode 100644 index 000000000..602b89a40 --- /dev/null +++ b/res/drawable-xxhdpi/ic_pageindicator_current_folder.png diff --git a/res/drawable-xxhdpi/ic_pageindicator_default.png b/res/drawable-xxhdpi/ic_pageindicator_default.png Binary files differindex e608cae30..3fa9e5fd7 100644 --- a/res/drawable-xxhdpi/ic_pageindicator_default.png +++ b/res/drawable-xxhdpi/ic_pageindicator_default.png diff --git a/res/drawable-xxhdpi/ic_pageindicator_default_folder.png b/res/drawable-xxhdpi/ic_pageindicator_default_folder.png Binary files differnew file mode 100644 index 000000000..bbcd7f91e --- /dev/null +++ b/res/drawable-xxhdpi/ic_pageindicator_default_folder.png diff --git a/res/drawable-xxhdpi/ic_qs_remote_display.png b/res/drawable-xxhdpi/ic_qs_remote_display.png Binary files differdeleted file mode 100644 index 25ea9fab2..000000000 --- a/res/drawable-xxhdpi/ic_qs_remote_display.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_qs_remote_display_connected.png b/res/drawable-xxhdpi/ic_qs_remote_display_connected.png Binary files differdeleted file mode 100644 index 33a8d2d5a..000000000 --- a/res/drawable-xxhdpi/ic_qs_remote_display_connected.png +++ /dev/null diff --git a/res/drawable-xxhdpi/ic_remove_launcher.png b/res/drawable-xxhdpi/ic_remove_launcher.png Binary files differnew file mode 100644 index 000000000..7c28bb0bb --- /dev/null +++ b/res/drawable-xxhdpi/ic_remove_launcher.png diff --git a/res/drawable-xxhdpi/ic_search_grey.png b/res/drawable-xxhdpi/ic_search_grey.png Binary files differnew file mode 100755 index 000000000..1d5c91361 --- /dev/null +++ b/res/drawable-xxhdpi/ic_search_grey.png diff --git a/res/drawable-xxhdpi/ic_uninstall_launcher.png b/res/drawable-xxhdpi/ic_uninstall_launcher.png Binary files differnew file mode 100644 index 000000000..872e82933 --- /dev/null +++ b/res/drawable-xxhdpi/ic_uninstall_launcher.png diff --git a/res/drawable-xxhdpi/ic_widget_resize_handle.png b/res/drawable-xxhdpi/ic_widget_resize_handle.png Binary files differnew file mode 100644 index 000000000..144cac996 --- /dev/null +++ b/res/drawable-xxhdpi/ic_widget_resize_handle.png diff --git a/res/drawable-xxhdpi/overscroll_glow_left.9.png b/res/drawable-xxhdpi/overscroll_glow_left.9.png Binary files differdeleted file mode 100644 index 1a895cdc8..000000000 --- a/res/drawable-xxhdpi/overscroll_glow_left.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/overscroll_glow_right.9.png b/res/drawable-xxhdpi/overscroll_glow_right.9.png Binary files differdeleted file mode 100644 index 576676145..000000000 --- a/res/drawable-xxhdpi/overscroll_glow_right.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/portal_container_holo.9.png b/res/drawable-xxhdpi/portal_container_holo.9.png Binary files differdeleted file mode 100644 index 599a076d8..000000000 --- a/res/drawable-xxhdpi/portal_container_holo.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/portal_ring_inner.png b/res/drawable-xxhdpi/portal_ring_inner.png Binary files differnew file mode 100644 index 000000000..d088a172d --- /dev/null +++ b/res/drawable-xxhdpi/portal_ring_inner.png diff --git a/res/drawable-xxhdpi/portal_ring_inner_holo.png b/res/drawable-xxhdpi/portal_ring_inner_holo.png Binary files differdeleted file mode 100644 index 8cd6a5930..000000000 --- a/res/drawable-xxhdpi/portal_ring_inner_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/portal_ring_inner_nolip_holo.png b/res/drawable-xxhdpi/portal_ring_inner_nolip.png Binary files differindex 0fad65629..0fad65629 100644 --- a/res/drawable-xxhdpi/portal_ring_inner_nolip_holo.png +++ b/res/drawable-xxhdpi/portal_ring_inner_nolip.png diff --git a/res/drawable-xxhdpi/portal_ring_outer.png b/res/drawable-xxhdpi/portal_ring_outer.png Binary files differnew file mode 100644 index 000000000..45ac0406c --- /dev/null +++ b/res/drawable-xxhdpi/portal_ring_outer.png diff --git a/res/drawable-xxhdpi/portal_ring_outer_holo.png b/res/drawable-xxhdpi/portal_ring_outer_holo.png Binary files differdeleted file mode 100644 index 0aee4f027..000000000 --- a/res/drawable-xxhdpi/portal_ring_outer_holo.png +++ /dev/null diff --git a/res/drawable-xxhdpi/quantum_panel.9.png b/res/drawable-xxhdpi/quantum_panel.9.png Binary files differdeleted file mode 100644 index d7ba87416..000000000 --- a/res/drawable-xxhdpi/quantum_panel.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/quantum_panel_bitmap.9.png b/res/drawable-xxhdpi/quantum_panel_bitmap.9.png Binary files differnew file mode 100644 index 000000000..b44269ea9 --- /dev/null +++ b/res/drawable-xxhdpi/quantum_panel_bitmap.9.png diff --git a/res/drawable-xxhdpi/quantum_panel_dark.9.png b/res/drawable-xxhdpi/quantum_panel_dark.9.png Binary files differdeleted file mode 100644 index 17ba0f116..000000000 --- a/res/drawable-xxhdpi/quantum_panel_dark.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/quantum_panel_dark_bitmap.9.png b/res/drawable-xxhdpi/quantum_panel_dark_bitmap.9.png Binary files differnew file mode 100644 index 000000000..7979cf747 --- /dev/null +++ b/res/drawable-xxhdpi/quantum_panel_dark_bitmap.9.png diff --git a/res/drawable-xxhdpi/widget_resize_frame.9.png b/res/drawable-xxhdpi/widget_resize_frame.9.png Binary files differnew file mode 100644 index 000000000..7e189d442 --- /dev/null +++ b/res/drawable-xxhdpi/widget_resize_frame.9.png diff --git a/res/drawable-xxhdpi/widget_resize_frame_holo.9.png b/res/drawable-xxhdpi/widget_resize_frame_holo.9.png Binary files differdeleted file mode 100644 index 1681387a1..000000000 --- a/res/drawable-xxhdpi/widget_resize_frame_holo.9.png +++ /dev/null diff --git a/res/drawable-xxhdpi/widget_resize_handle_bottom.png b/res/drawable-xxhdpi/widget_resize_handle_bottom.png Binary files differdeleted file mode 100644 index d549fcd91..000000000 --- a/res/drawable-xxhdpi/widget_resize_handle_bottom.png +++ /dev/null diff --git a/res/drawable-xxhdpi/widget_resize_handle_left.png b/res/drawable-xxhdpi/widget_resize_handle_left.png Binary files differdeleted file mode 100644 index dd56dad15..000000000 --- a/res/drawable-xxhdpi/widget_resize_handle_left.png +++ /dev/null diff --git a/res/drawable-xxhdpi/widget_resize_handle_right.png b/res/drawable-xxhdpi/widget_resize_handle_right.png Binary files differdeleted file mode 100644 index 296a1c166..000000000 --- a/res/drawable-xxhdpi/widget_resize_handle_right.png +++ /dev/null diff --git a/res/drawable-xxhdpi/widget_resize_handle_top.png b/res/drawable-xxhdpi/widget_resize_handle_top.png Binary files differdeleted file mode 100644 index e86270ad1..000000000 --- a/res/drawable-xxhdpi/widget_resize_handle_top.png +++ /dev/null diff --git a/res/drawable-xxhdpi/widget_resize_shadow.9.png b/res/drawable-xxhdpi/widget_resize_shadow.9.png Binary files differnew file mode 100644 index 000000000..41c448bbb --- /dev/null +++ b/res/drawable-xxhdpi/widget_resize_shadow.9.png diff --git a/res/drawable-xxxhdpi/ic_arrow_back_grey.png b/res/drawable-xxxhdpi/ic_arrow_back_grey.png Binary files differnew file mode 100755 index 000000000..854a9bd1a --- /dev/null +++ b/res/drawable-xxxhdpi/ic_arrow_back_grey.png diff --git a/res/drawable-xxxhdpi/ic_info_launcher.png b/res/drawable-xxxhdpi/ic_info_launcher.png Binary files differnew file mode 100644 index 000000000..bf39e5be2 --- /dev/null +++ b/res/drawable-xxxhdpi/ic_info_launcher.png diff --git a/res/drawable-xxxhdpi/ic_remove_launcher.png b/res/drawable-xxxhdpi/ic_remove_launcher.png Binary files differnew file mode 100644 index 000000000..7043be015 --- /dev/null +++ b/res/drawable-xxxhdpi/ic_remove_launcher.png diff --git a/res/drawable-xxxhdpi/ic_search_grey.png b/res/drawable-xxxhdpi/ic_search_grey.png Binary files differnew file mode 100755 index 000000000..28519fda6 --- /dev/null +++ b/res/drawable-xxxhdpi/ic_search_grey.png diff --git a/res/drawable-xxxhdpi/ic_uninstall_launcher.png b/res/drawable-xxxhdpi/ic_uninstall_launcher.png Binary files differnew file mode 100644 index 000000000..77a3302f6 --- /dev/null +++ b/res/drawable-xxxhdpi/ic_uninstall_launcher.png diff --git a/res/drawable-xxxhdpi/ic_widget_resize_handle.png b/res/drawable-xxxhdpi/ic_widget_resize_handle.png Binary files differnew file mode 100644 index 000000000..4bde6b9a6 --- /dev/null +++ b/res/drawable-xxxhdpi/ic_widget_resize_handle.png diff --git a/res/drawable-xxxhdpi/portal_ring_inner.png b/res/drawable-xxxhdpi/portal_ring_inner.png Binary files differnew file mode 100644 index 000000000..34a359997 --- /dev/null +++ b/res/drawable-xxxhdpi/portal_ring_inner.png diff --git a/res/drawable-xxxhdpi/portal_ring_inner_nolip.png b/res/drawable-xxxhdpi/portal_ring_inner_nolip.png Binary files differnew file mode 100644 index 000000000..8cebb3535 --- /dev/null +++ b/res/drawable-xxxhdpi/portal_ring_inner_nolip.png diff --git a/res/drawable-xxxhdpi/portal_ring_outer.png b/res/drawable-xxxhdpi/portal_ring_outer.png Binary files differnew file mode 100644 index 000000000..d2df32267 --- /dev/null +++ b/res/drawable-xxxhdpi/portal_ring_outer.png diff --git a/res/drawable-xxxhdpi/portal_ring_rest.png b/res/drawable-xxxhdpi/portal_ring_rest.png Binary files differnew file mode 100644 index 000000000..11e92eeb6 --- /dev/null +++ b/res/drawable-xxxhdpi/portal_ring_rest.png diff --git a/res/drawable-xxxhdpi/quantum_panel_bitmap.9.png b/res/drawable-xxxhdpi/quantum_panel_bitmap.9.png Binary files differnew file mode 100644 index 000000000..bc887fe91 --- /dev/null +++ b/res/drawable-xxxhdpi/quantum_panel_bitmap.9.png diff --git a/res/drawable-xxxhdpi/quantum_panel_dark_bitmap.9.png b/res/drawable-xxxhdpi/quantum_panel_dark_bitmap.9.png Binary files differnew file mode 100644 index 000000000..7cfd6e477 --- /dev/null +++ b/res/drawable-xxxhdpi/quantum_panel_dark_bitmap.9.png diff --git a/res/drawable-xxxhdpi/widget_resize_frame.9.png b/res/drawable-xxxhdpi/widget_resize_frame.9.png Binary files differnew file mode 100644 index 000000000..cb609cef9 --- /dev/null +++ b/res/drawable-xxxhdpi/widget_resize_frame.9.png diff --git a/res/drawable-xxxhdpi/widget_resize_shadow.9.png b/res/drawable-xxxhdpi/widget_resize_shadow.9.png Binary files differnew file mode 100644 index 000000000..82c8b9c7c --- /dev/null +++ b/res/drawable-xxxhdpi/widget_resize_shadow.9.png diff --git a/res/drawable/all_apps_search_bg.xml b/res/drawable/all_apps_search_bg.xml new file mode 100644 index 000000000..a09f88fd4 --- /dev/null +++ b/res/drawable/all_apps_search_bg.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<inset xmlns:android="http://schemas.android.com/apk/res/android" + android:drawable="@drawable/quantum_panel" + android:insetTop="@dimen/container_bounds_minus_quantum_panel_padding_inset" + android:insetBottom="@dimen/container_bounds_minus_quantum_panel_padding_inset" />
\ No newline at end of file diff --git a/res/drawable/info_target_selector.xml b/res/drawable/bg_screenpanel.xml index f3a7016c3..cdb71dfa1 100644 --- a/res/drawable/info_target_selector.xml +++ b/res/drawable/bg_screenpanel.xml @@ -2,7 +2,7 @@ <!-- /* ** -** Copyright 2011, The Android Open Source Project +** Copyright 2015, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. @@ -18,7 +18,9 @@ */ --> -<transition xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:drawable="@drawable/ic_launcher_info_normal_holo" /> - <item android:drawable="@drawable/ic_launcher_info_active_holo" /> -</transition> +<transition xmlns:android="http://schemas.android.com/apk/res/android" > + + <item android:drawable="@drawable/screenpanel"/> + <item android:drawable="@drawable/screenpanel_hover"/> + +</transition>
\ No newline at end of file diff --git a/res/drawable/container_fastscroll_popup_bg.xml b/res/drawable/container_fastscroll_popup_bg.xml new file mode 100644 index 000000000..2ef07ab96 --- /dev/null +++ b/res/drawable/container_fastscroll_popup_bg.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@color/container_fastscroll_thumb_active_color" /> + <size + android:width="64dp" + android:height="64dp" /> + <corners + android:topLeftRadius="64dp" + android:topRightRadius="64dp" + android:bottomLeftRadius="64dp" /> +</shape>
\ No newline at end of file diff --git a/WallpaperPicker/res/values-sw600dp/config.xml b/res/drawable/quantum_panel.xml index 62342dcc2..1f4fb711b 100644 --- a/WallpaperPicker/res/values-sw600dp/config.xml +++ b/res/drawable/quantum_panel.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2013 The Android Open Source Project +<!-- + Copyright (C) 2015 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,6 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. --> -<resources> - <bool name="allow_rotation">true</bool> -</resources> +<nine-patch xmlns:android="http://schemas.android.com/apk/res/android" + android:src="@drawable/quantum_panel_bitmap" /> diff --git a/res/values-sw340dp-port/config.xml b/res/drawable/quantum_panel_dark.xml index 5f71077c7..6642e78ac 100644 --- a/res/values-sw340dp-port/config.xml +++ b/res/drawable/quantum_panel_dark.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2011 The Android Open Source Project +<!-- + Copyright (C) 2015 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,6 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. --> - -<resources> -</resources> +<nine-patch xmlns:android="http://schemas.android.com/apk/res/android" + android:src="@drawable/quantum_panel_dark_bitmap" /> diff --git a/res/drawable/quantum_panel_shape.xml b/res/drawable/quantum_panel_shape.xml new file mode 100644 index 000000000..108361576 --- /dev/null +++ b/res/drawable/quantum_panel_shape.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@color/quantum_panel_bg_color" /> + <corners + android:radius="2dp" /> +</shape>
\ No newline at end of file diff --git a/res/layout/apps_customize_application.xml b/res/drawable/quantum_panel_shape_dark.xml index c56cdf3d2..c3821c416 100644 --- a/res/layout/apps_customize_application.xml +++ b/res/drawable/quantum_panel_shape_dark.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2011 The Android Open Source Project +<!-- + Copyright (C) 2015 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,9 +14,9 @@ See the License for the specific language governing permissions and limitations under the License. --> - -<com.android.launcher3.BubbleTextView - xmlns:android="http://schemas.android.com/apk/res/android" - style="@style/WorkspaceIcon.AppsCustomize" - android:id="@+id/application_icon" - android:focusable="true" /> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@color/quantum_panel_bg_color_dark" /> + <corners + android:radius="2dp" /> +</shape>
\ No newline at end of file diff --git a/res/drawable/remove_target_selector.xml b/res/drawable/remove_target_selector.xml deleted file mode 100644 index 5e071fbfa..000000000 --- a/res/drawable/remove_target_selector.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** -** Copyright 2007, 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. -*/ ---> - -<transition xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:drawable="@drawable/ic_launcher_clear_normal_holo" /> - <item android:drawable="@drawable/ic_launcher_clear_active_holo" /> -</transition> diff --git a/res/drawable/uninstall_target_selector.xml b/res/drawable/uninstall_target_selector.xml deleted file mode 100644 index 229942e3a..000000000 --- a/res/drawable/uninstall_target_selector.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** -** Copyright 2007, 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. -*/ ---> - -<transition xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:drawable="@drawable/ic_launcher_trashcan_normal_holo" /> - <item android:drawable="@drawable/ic_launcher_trashcan_active_holo" /> -</transition> diff --git a/res/values-land/config.xml b/res/drawable/widgets_row_divider.xml index 31115c9cb..bb5b6b55b 100644 --- a/res/values-land/config.xml +++ b/res/drawable/widgets_row_divider.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2011 The Android Open Source Project +<!-- Copyright (C) 2015 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,9 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - -<resources> -<!-- Workspace --> - <!-- Whether or not the drop targets drop down as opposed to fade in --> - <bool name="config_useDropTargetDownTransition">false</bool> -</resources> +<shape xmlns:android="http://schemas.android.com/apk/res/android" > + <size android:width="@dimen/widget_row_divider" /> + <solid android:color="@color/quantum_panel_bg_color_dark" /> +</shape> diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml index 6f95bd506..6500ebcd2 100644 --- a/res/layout-land/launcher.xml +++ b/res/layout-land/launcher.xml @@ -18,11 +18,9 @@ <com.android.launcher3.LauncherRootView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res-auto" - android:id="@+id/launcher" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@drawable/workspace_bg" android:fitsSystemWindows="true"> <com.android.launcher3.DragLayer @@ -36,6 +34,7 @@ android:layout_height="52dp" /> <!-- The workspace contains 5 screens of cells --> + <!-- DO NOT CHANGE THE ID --> <com.android.launcher3.Workspace android:id="@+id/workspace" android:layout_width="match_parent" @@ -43,11 +42,12 @@ android:layout_gravity="center" launcher:defaultScreen="@integer/config_workspaceDefaultScreen" /> + <!-- DO NOT CHANGE THE ID --> <include layout="@layout/hotseat" android:id="@+id/hotseat" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_gravity="end" /> + android:layout_gravity="right" /> <include android:id="@+id/search_drop_target_bar" @@ -57,8 +57,14 @@ android:id="@+id/overview_panel" android:visibility="gone" /> - <include layout="@layout/apps_customize_pane" - android:id="@+id/apps_customize_pane" + <include layout="@layout/widgets_view" + android:id="@+id/widgets_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="invisible" /> + + <include layout="@layout/all_apps" + android:id="@+id/apps_view" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible" /> diff --git a/res/layout-land/migration_cling.xml b/res/layout-land/migration_cling.xml index db93da87a..269c1aee6 100644 --- a/res/layout-land/migration_cling.xml +++ b/res/layout-land/migration_cling.xml @@ -46,6 +46,7 @@ android:layout_width="@dimen/cling_migration_content_width" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/cling_migration_content_margin" + android:layout_marginRight="@dimen/cling_migration_content_margin" android:orientation="vertical" android:paddingLeft="24dp" android:paddingRight="24dp" > diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml index af30a32e5..d0772ee70 100644 --- a/res/layout-port/launcher.xml +++ b/res/layout-port/launcher.xml @@ -22,7 +22,6 @@ android:id="@+id/launcher" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@drawable/workspace_bg" android:fitsSystemWindows="true"> <com.android.launcher3.DragLayer @@ -36,6 +35,7 @@ android:layout_height="52dp" /> <!-- The workspace contains 5 screens of cells --> + <!-- DO NOT CHANGE THE ID --> <com.android.launcher3.Workspace android:id="@+id/workspace" android:layout_width="match_parent" @@ -44,6 +44,7 @@ launcher:pageIndicator="@+id/page_indicator"> </com.android.launcher3.Workspace> + <!-- DO NOT CHANGE THE ID --> <include layout="@layout/hotseat" android:id="@+id/hotseat" android:layout_width="match_parent" @@ -66,8 +67,14 @@ android:id="@+id/search_drop_target_bar" layout="@layout/search_drop_target_bar" /> - <include layout="@layout/apps_customize_pane" - android:id="@+id/apps_customize_pane" + <include layout="@layout/widgets_view" + android:id="@+id/widgets_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="invisible" /> + + <include layout="@layout/all_apps" + android:id="@+id/apps_view" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible" /> diff --git a/res/layout-port/migration_cling.xml b/res/layout-port/migration_cling.xml index 81689d38b..3f696a216 100644 --- a/res/layout-port/migration_cling.xml +++ b/res/layout-port/migration_cling.xml @@ -48,6 +48,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/ic_cling_migration" android:layout_marginStart="@dimen/cling_migration_content_margin" + android:layout_marginLeft="@dimen/cling_migration_content_margin" android:orientation="vertical" android:paddingLeft="24dp" android:paddingRight="24dp" > diff --git a/res/layout-sw720dp/launcher.xml b/res/layout-sw720dp/launcher.xml index 960ccf330..802922ec1 100644 --- a/res/layout-sw720dp/launcher.xml +++ b/res/layout-sw720dp/launcher.xml @@ -18,11 +18,9 @@ <com.android.launcher3.LauncherRootView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res-auto" - android:id="@+id/launcher" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@drawable/workspace_bg" android:fitsSystemWindows="true"> <com.android.launcher3.DragLayer @@ -36,6 +34,7 @@ android:layout_height="52dp" /> <!-- The workspace contains 5 screens of cells --> + <!-- DO NOT CHANGE THE ID --> <com.android.launcher3.Workspace android:id="@+id/workspace" android:layout_width="match_parent" @@ -44,6 +43,7 @@ launcher:pageIndicator="@id/page_indicator"> </com.android.launcher3.Workspace> + <!-- DO NOT CHANGE THE ID --> <include layout="@layout/hotseat" android:id="@+id/hotseat" android:layout_width="match_parent" @@ -59,15 +59,20 @@ <!-- Keep these behind the workspace so that they are not visible when we go into AllApps --> - <include - android:id="@+id/page_indicator" + <include android:id="@+id/page_indicator" layout="@layout/page_indicator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> - <include layout="@layout/apps_customize_pane" - android:id="@+id/apps_customize_pane" + <include layout="@layout/widgets_view" + android:id="@+id/widgets_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="invisible" /> + + <include layout="@layout/all_apps" + android:id="@+id/apps_view" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible" /> diff --git a/res/layout/all_apps.xml b/res/layout/all_apps.xml new file mode 100644 index 000000000..1bf54eefb --- /dev/null +++ b/res/layout/all_apps.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- The top and bottom paddings are defined in this container, but since we want + the list view to span the full width (for touch interception purposes), we + will bake the left/right padding into that view's background itself. --> +<com.android.launcher3.allapps.AllAppsContainerView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/apps_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <!-- Both android:focusable and android:focusableInTouchMode are needed for + the view to get focus change events. --> + <FrameLayout + android:id="@+id/search_box_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:focusable="true" + android:focusableInTouchMode="true" + android:visibility="gone" /> + + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> + <FrameLayout + android:id="@+id/all_apps_reveal" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center" + android:focusable="false" + android:elevation="2dp" + android:visibility="invisible" /> + <include + layout="@layout/all_apps_container" + android:id="@+id/all_apps_container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center" + android:visibility="gone" /> + </FrameLayout> +</com.android.launcher3.allapps.AllAppsContainerView>
\ No newline at end of file diff --git a/res/layout/all_apps_button.xml b/res/layout/all_apps_button.xml index 9d6d82bb2..68cc10932 100644 --- a/res/layout/all_apps_button.xml +++ b/res/layout/all_apps_button.xml @@ -15,5 +15,5 @@ --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" - style="@style/WorkspaceIcon" + style="@style/Icon" android:focusable="true" /> diff --git a/res/layout/all_apps_container.xml b/res/layout/all_apps_container.xml new file mode 100644 index 000000000..626edafab --- /dev/null +++ b/res/layout/all_apps_container.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- Both android:focusable and android:focusableInTouchMode are needed for + the view to get focus change events. --> +<com.android.launcher3.allapps.AllAppsRecyclerViewContainerView + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:elevation="15dp" + android:focusable="true" + android:focusableInTouchMode="true"> + + <!-- DO NOT CHANGE THE ID --> + <com.android.launcher3.allapps.AllAppsRecyclerView + android:id="@+id/apps_list_view" + android:theme="@style/Theme.Light.CustomOverscroll" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center_horizontal|top" + android:clipToPadding="false" + android:focusable="true" + android:descendantFocusability="afterDescendants" /> + +</com.android.launcher3.allapps.AllAppsRecyclerViewContainerView>
\ No newline at end of file diff --git a/res/layout/add_list_item.xml b/res/layout/all_apps_empty_search.xml index e937d7bc1..f60c4a09a 100644 --- a/res/layout/add_list_item.xml +++ b/res/layout/all_apps_empty_search.xml @@ -1,25 +1,28 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2009 The Android Open Source Project +<!-- Copyright (C) 2015 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> - -<TextView xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" +<TextView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/empty_text" + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:minHeight="?android:attr/listPreferredItemHeight" - android:textAppearance="?android:attr/textAppearanceLarge" - android:gravity="center_vertical" - android:drawablePadding="14dip" - android:paddingLeft="15dip" - android:paddingRight="15dip" /> + android:gravity="center" + android:paddingTop="24dp" + android:paddingBottom="24dp" + android:paddingRight="@dimen/all_apps_grid_view_start_margin" + android:textSize="16sp" + android:textColor="#4c4c4c" + android:focusable="false" /> + diff --git a/res/layout/all_apps_icon.xml b/res/layout/all_apps_icon.xml new file mode 100644 index 000000000..0985e95c0 --- /dev/null +++ b/res/layout/all_apps_icon.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<com.android.launcher3.BubbleTextView + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto" + style="@style/Icon.AllApps" + android:id="@+id/icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingTop="@dimen/all_apps_icon_top_bottom_padding" + android:paddingBottom="@dimen/all_apps_icon_top_bottom_padding" + android:focusable="true" + android:background="@drawable/focusable_view_bg" + launcher:iconDisplay="all_apps" /> + diff --git a/res/layout/all_apps_prediction_bar_icon.xml b/res/layout/all_apps_prediction_bar_icon.xml new file mode 100644 index 000000000..341d8ef4f --- /dev/null +++ b/res/layout/all_apps_prediction_bar_icon.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<com.android.launcher3.BubbleTextView + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto" + style="@style/Icon.AllApps" + android:id="@+id/icon" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingTop="@dimen/all_apps_prediction_icon_top_padding" + android:paddingBottom="@dimen/all_apps_prediction_icon_bottom_padding" + android:focusable="true" + android:background="@drawable/focusable_view_bg" + launcher:iconDisplay="all_apps" /> + diff --git a/res/layout/all_apps_search_bar.xml b/res/layout/all_apps_search_bar.xml new file mode 100644 index 000000000..cf30eac36 --- /dev/null +++ b/res/layout/all_apps_search_bar.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<FrameLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/all_apps_search_bg" > + + <LinearLayout + android:id="@+id/search_container" + android:layout_width="match_parent" + android:layout_height="@dimen/all_apps_search_bar_height" + android:layout_gravity="start|center_vertical" + android:orientation="horizontal" + android:visibility="invisible" > + + <ImageView + android:id="@+id/dismiss_search_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="4dp" + android:layout_marginStart="4dp" + android:contentDescription="@string/all_apps_button_label" + android:paddingBottom="13dp" + android:paddingTop="13dp" + android:src="@drawable/ic_arrow_back_grey" /> + + <com.android.launcher3.allapps.AllAppsSearchEditView + android:id="@+id/search_box_input" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/transparent" + android:focusableInTouchMode="true" + android:gravity="fill_horizontal|center_vertical" + android:hint="@string/all_apps_search_bar_hint" + android:inputType="text|textNoSuggestions|textCapWords" + android:imeOptions="actionDone|flagNoExtractUi" + android:maxLines="1" + android:paddingLeft="8dp" + android:scrollHorizontally="true" + android:singleLine="true" + android:textColor="#4c4c4c" + android:textColorHint="#9c9c9c" + android:textSize="16sp" /> + </LinearLayout> + + <ImageView + android:id="@+id/search_button" + android:layout_width="wrap_content" + android:layout_height="@dimen/all_apps_search_bar_height" + android:layout_gravity="end|center_vertical" + android:layout_marginEnd="4dp" + android:layout_marginRight="4dp" + android:contentDescription="@string/all_apps_search_bar_hint" + android:paddingBottom="13dp" + android:paddingTop="13dp" + android:src="@drawable/ic_search_grey" /> +</FrameLayout>
\ No newline at end of file diff --git a/res/layout/application.xml b/res/layout/app_icon.xml index c21dea070..831cee5b0 100644 --- a/res/layout/application.xml +++ b/res/layout/app_icon.xml @@ -15,5 +15,5 @@ --> <com.android.launcher3.BubbleTextView xmlns:android="http://schemas.android.com/apk/res/android" - style="@style/WorkspaceIcon" + style="@style/Icon" android:focusable="true" /> diff --git a/res/layout/apps_customize_pane.xml b/res/layout/apps_customize_pane.xml deleted file mode 100644 index e42576ffe..000000000 --- a/res/layout/apps_customize_pane.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2011 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<com.android.launcher3.AppsCustomizeTabHost - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:launcher="http://schemas.android.com/apk/res-auto" - android:clipChildren="false"> - - <LinearLayout - android:id="@+id/content" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:clipChildren="false" - android:orientation="vertical"> - - <FrameLayout - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" - android:clipChildren="false"> - <FrameLayout - android:id="@+id/fake_page_container" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:clipChildren="false" - android:clipToPadding="false"> - <FrameLayout - android:id="@+id/fake_page" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="invisible" - android:clipToPadding="false" /> - </FrameLayout> - <com.android.launcher3.AppsCustomizePagedView - android:id="@+id/apps_customize_pane_content" - android:layout_width="match_parent" - android:layout_height="match_parent" - launcher:widgetCountX="@integer/apps_customize_widget_cell_count_x" - launcher:widgetCountY="@integer/apps_customize_widget_cell_count_y" - launcher:maxGap="@dimen/workspace_max_gap" - launcher:pageIndicator="@+id/apps_customize_page_indicator" /> - </FrameLayout> - <include - android:id="@+id/apps_customize_page_indicator" - layout="@layout/page_indicator" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" /> - </LinearLayout> -</com.android.launcher3.AppsCustomizeTabHost> diff --git a/res/layout/apps_customize_progressbar.xml b/res/layout/apps_customize_progressbar.xml deleted file mode 100644 index 6aa90999c..000000000 --- a/res/layout/apps_customize_progressbar.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2011 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<ProgressBar - xmlns:android="http://schemas.android.com/apk/res/android" - style="?android:attr/progressBarStyleLarge" - android:id="@+id/apps_customize_progress_bar" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" /> diff --git a/res/layout/apps_customize_widget.xml b/res/layout/apps_customize_widget.xml deleted file mode 100644 index a8344e3ff..000000000 --- a/res/layout/apps_customize_widget.xml +++ /dev/null @@ -1,105 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2011 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<com.android.launcher3.PagedViewWidget - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:launcher="http://schemas.android.com/apk/res-auto" - - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_weight="1" - android:orientation="vertical" - - android:background="@drawable/focusable_view_bg" - android:focusable="true"> - - <LinearLayout - android:orientation="horizontal" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_weight="1"> - <FrameLayout - android:id="@+id/left_border" - android:layout_width="1dp" - android:layout_height="match_parent" - android:background="@color/widget_text_panel" - android:visibility="gone" /> - - <!-- The preview of the widget or shortcut. --> - <com.android.launcher3.PagedViewWidgetImageView - android:id="@+id/widget_preview" - style="@style/PagedViewWidgetImageView" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_weight="1" - android:paddingTop="@dimen/app_widget_preview_padding_top" - android:paddingEnd="@dimen/app_widget_preview_padding_right" - android:paddingRight="@dimen/app_widget_preview_padding_right" - android:scaleType="matrix" /> - <FrameLayout - android:id="@+id/right_border" - android:layout_width="1dp" - android:layout_height="match_parent" - android:background="@color/widget_text_panel" - android:visibility="gone" /> - </LinearLayout> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingTop="@dimen/app_widget_preview_label_vertical_padding" - android:paddingBottom="@dimen/app_widget_preview_label_vertical_padding" - android:paddingLeft="@dimen/app_widget_preview_label_horizontal_padding" - android:paddingRight="@dimen/app_widget_preview_label_horizontal_padding" - android:background="@color/widget_text_panel" - android:orientation="horizontal"> - <!-- The name of the widget. --> - <TextView - android:id="@+id/widget_name" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_weight="1" - android:gravity="start" - android:singleLine="true" - android:ellipsize="marquee" - android:fadingEdge="horizontal" - - android:textColor="#FFFFFFFF" - android:textSize="12sp" - android:textAlignment="viewStart" - android:fontFamily="sans-serif-condensed" - android:shadowRadius="2.0" - android:shadowColor="#B0000000" /> - - <!-- The original dimensions of the widget (can't be the same text as above due to different - style. --> - <TextView - android:id="@+id/widget_dims" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_marginStart="5dp" - android:layout_weight="0" - android:gravity="start" - - android:textColor="#FFFFFFFF" - android:textSize="12sp" - android:fontFamily="sans-serif-condensed" - android:shadowRadius="2.0" - android:shadowColor="#B0000000" /> - </LinearLayout> - - -</com.android.launcher3.PagedViewWidget> diff --git a/res/layout/appwidget_error.xml b/res/layout/appwidget_error.xml index 03d4ae424..708ece4e2 100644 --- a/res/layout/appwidget_error.xml +++ b/res/layout/appwidget_error.xml @@ -15,15 +15,12 @@ --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:paddingTop="10dip" - android:paddingBottom="10dip" - android:paddingLeft="20dip" - android:paddingRight="20dip" + android:layout_width="match_parent" + android:layout_height="match_parent" android:gravity="center" - android:background="@drawable/bg_appwidget_error" + android:elevation="2dp" + android:background="@drawable/quantum_panel_dark" android:textAppearance="?android:attr/textAppearanceMediumInverse" - android:textColor="@color/appwidget_error_color" + android:textColor="@color/widgets_view_item_text_color" android:text="@string/gadget_error_text" /> diff --git a/res/layout/dummy_widget.xml b/res/layout/dummy_widget.xml new file mode 100644 index 000000000..a0fa8fc3e --- /dev/null +++ b/res/layout/dummy_widget.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2014 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. +--> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="horizontal"> + + <FrameLayout + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:background="#ffff0000" /> + + <FrameLayout + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" + android:background="#ff00ff00" /> + +</LinearLayout>
\ No newline at end of file diff --git a/res/layout/folder_application.xml b/res/layout/folder_application.xml index b48b61331..4d003313e 100644 --- a/res/layout/folder_application.xml +++ b/res/layout/folder_application.xml @@ -15,5 +15,5 @@ --> <com.android.launcher3.BubbleTextView xmlns:android="http://schemas.android.com/apk/res/android" - style="@style/WorkspaceIcon.Folder" + style="@style/Icon.Folder" android:focusable="true" /> diff --git a/res/layout/folder_icon.xml b/res/layout/folder_icon.xml index fd45d7685..237af6890 100644 --- a/res/layout/folder_icon.xml +++ b/res/layout/folder_icon.xml @@ -26,9 +26,9 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:antialias="true" - android:src="@drawable/portal_ring_inner_holo"/> + android:src="@drawable/portal_ring_inner"/> <com.android.launcher3.BubbleTextView - style="@style/WorkspaceIcon" + style="@style/Icon" android:id="@+id/folder_icon_name" android:layout_gravity="top" android:layout_width="match_parent" diff --git a/res/layout/page_indicator_marker.xml b/res/layout/page_indicator_marker.xml index 686d27569..564a95811 100644 --- a/res/layout/page_indicator_marker.xml +++ b/res/layout/page_indicator_marker.xml @@ -16,8 +16,8 @@ <com.android.launcher3.PageIndicatorMarker xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res-auto" - android:layout_width="16dp" - android:layout_height="16dp" + android:layout_width="12dp" + android:layout_height="12dp" android:layout_gravity="center_vertical"> <ImageView android:id="@+id/inactive" diff --git a/res/layout/rename_folder.xml b/res/layout/rename_folder.xml deleted file mode 100644 index 21a335c4a..000000000 --- a/res/layout/rename_folder.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2008 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. ---> - -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:padding="20dip" - android:orientation="vertical"> - - <TextView - android:id="@+id/label" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:text="@string/rename_folder_label" - android:gravity="start" - android:textAppearance="?android:attr/textAppearanceMedium" /> - - <EditText - android:id="@+id/folder_name" - android:layout_height="wrap_content" - android:layout_width="match_parent" - android:scrollHorizontally="true" - android:autoText="false" - android:capitalize="none" - android:gravity="fill_horizontal" - android:maxLength="30" - android:textAppearance="?android:attr/textAppearanceMedium" /> - -</LinearLayout> diff --git a/res/layout/search_drop_target_bar.xml b/res/layout/search_drop_target_bar.xml index af2d01634..4737ee1bc 100644 --- a/res/layout/search_drop_target_bar.xml +++ b/res/layout/search_drop_target_bar.xml @@ -17,8 +17,7 @@ <com.android.launcher3.SearchDropTargetBar xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:focusable="false" - android:orientation="horizontal" > + android:focusable="false" > <!-- Drag specific targets container --> @@ -37,8 +36,7 @@ <com.android.launcher3.DeleteDropTarget android:id="@+id/delete_target_text" style="@style/DropTargetButton" - android:drawableStart="@drawable/remove_target_selector" - android:text="@string/delete_zone_label_workspace" /> + android:text="@string/delete_target_label" /> </FrameLayout> <FrameLayout @@ -50,9 +48,20 @@ <com.android.launcher3.InfoDropTarget android:id="@+id/info_target_text" style="@style/DropTargetButton" - android:drawableStart="@drawable/info_target_selector" android:text="@string/info_target_label" /> </FrameLayout> + + <FrameLayout + style="@style/DropTargetButtonContainer" + android:layout_weight="1" > + + <!-- Uninstall target --> + + <com.android.launcher3.UninstallDropTarget + android:id="@+id/uninstall_target_text" + style="@style/DropTargetButton" + android:text="@string/delete_target_uninstall_label" /> + </FrameLayout> </LinearLayout> </com.android.launcher3.SearchDropTargetBar>
\ No newline at end of file diff --git a/res/layout/user_folder.xml b/res/layout/user_folder.xml index ed8d43e46..ecf7def48 100644 --- a/res/layout/user_folder.xml +++ b/res/layout/user_folder.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2008 The Android Open Source Project +<!-- + Copyright (C) 2015 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,43 +14,72 @@ See the License for the specific language governing permissions and limitations under the License. --> - -<com.android.launcher3.Folder - xmlns:android="http://schemas.android.com/apk/res/android" +<com.android.launcher3.Folder xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:orientation="vertical" - android:background="@drawable/quantum_panel"> + android:background="@drawable/quantum_panel" + android:elevation="5dp" + android:orientation="vertical" > - <ScrollView - android:id="@+id/scroll_view" + <FrameLayout + android:id="@+id/folder_content_wrapper" android:layout_width="match_parent" - android:layout_height="match_parent"> - <com.android.launcher3.CellLayout - android:id="@+id/folder_content" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:cacheColorHint="#ff333333" - android:hapticFeedbackEnabled="false" /> - </ScrollView> - - <com.android.launcher3.FolderEditText - android:id="@+id/folder_name" + android:layout_height="match_parent" > + + <!-- Actual size of the indicator doesn't matter as it is scaled to match the view size --> + + <com.android.launcher3.FocusIndicatorView + android:id="@+id/focus_indicator" + android:layout_width="20dp" + android:layout_height="20dp" /> + + <com.android.launcher3.FolderPagedView + android:id="@+id/folder_content" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingLeft="4dp" + android:paddingRight="4dp" + android:paddingTop="8dp" + launcher:pageIndicator="@+id/folder_page_indicator" /> + </FrameLayout> + + <LinearLayout + android:id="@+id/folder_footer" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_centerHorizontal="true" - android:paddingTop="@dimen/folder_name_padding" - android:paddingBottom="@dimen/folder_name_padding" - android:background="#00000000" - android:hint="@string/folder_hint_text" - android:textSize="14sp" - android:textColor="#ff777777" - android:textColorHint="#ff808080" - android:textColorHighlight="#ffCCCCCC" - android:textCursorDrawable="@null" - android:gravity="center_horizontal" - android:singleLine="true" - android:imeOptions="flagNoExtractUi" - android:fontFamily="sans-serif-condensed"/> -</com.android.launcher3.Folder> + android:clipChildren="false" + android:orientation="horizontal" + android:paddingLeft="8dp" + android:paddingRight="8dp" > + + <com.android.launcher3.FolderEditText + android:id="@+id/folder_name" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_weight="1" + android:background="#00000000" + android:fontFamily="sans-serif-condensed" + android:gravity="center_horizontal" + android:hint="@string/folder_hint_text" + android:imeOptions="flagNoExtractUi" + android:paddingBottom="8dp" + android:paddingTop="4dp" + android:singleLine="true" + android:textColor="#ff777777" + android:textColorHighlight="#ffCCCCCC" + android:textColorHint="#ff808080" + android:textCursorDrawable="@null" + android:textSize="14sp" /> + + <include + android:id="@+id/folder_page_indicator" + android:layout_width="wrap_content" + android:layout_height="12dp" + android:layout_gravity="center_vertical" + layout="@layout/page_indicator" /> + + </LinearLayout> + +</com.android.launcher3.Folder>
\ No newline at end of file diff --git a/res/layout/widget_cell.xml b/res/layout/widget_cell.xml new file mode 100644 index 000000000..7fefebaec --- /dev/null +++ b/res/layout/widget_cell.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<com.android.launcher3.widget.WidgetCell + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:orientation="vertical" + android:focusable="true" + android:background="@color/widgets_cell_color" + android:gravity="center_horizontal"> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingTop="@dimen/widget_preview_label_vertical_padding" + android:paddingBottom="@dimen/widget_preview_label_vertical_padding" + android:paddingLeft="@dimen/widget_preview_label_horizontal_padding" + android:paddingRight="@dimen/widget_preview_label_horizontal_padding" + android:orientation="horizontal"> + + <!-- The name of the widget. --> + <TextView + android:id="@+id/widget_name" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:ellipsize="end" + android:fadingEdge="horizontal" + android:fontFamily="sans-serif-condensed" + android:gravity="start" + android:shadowColor="#B0000000" + android:shadowRadius="2.0" + android:singleLine="true" + android:textColor="@color/widgets_view_item_text_color" + android:textSize="14sp" /> + + <!-- The original dimensions of the widget (can't be the same text as above due to different + style. --> + <TextView + android:id="@+id/widget_dims" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="5dp" + android:layout_marginLeft="5dp" + android:textColor="@color/widgets_view_item_text_color" + android:textSize="14sp" + android:fontFamily="sans-serif-condensed" + android:shadowRadius="2.0" + android:shadowColor="#B0000000" /> + </LinearLayout> + + <!-- The image of the widget. This view does not support padding. Any placement adjustment + should be done using margins. --> + <com.android.launcher3.widget.WidgetImageView + android:id="@+id/widget_preview" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" /> +</com.android.launcher3.widget.WidgetCell>
\ No newline at end of file diff --git a/res/layout/widgets_list_row_view.xml b/res/layout/widgets_list_row_view.xml new file mode 100644 index 000000000..ced564801 --- /dev/null +++ b/res/layout/widgets_list_row_view.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto" + android:id="@+id/widgets_cell_list_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/widgets_cell_color" + android:orientation="vertical" + android:focusable="true" + android:descendantFocusability="afterDescendants"> + + <!-- Section info --> + + <com.android.launcher3.BubbleTextView + android:id="@+id/section" + android:layout_width="match_parent" + android:layout_height="@dimen/widget_section_height" + android:background="@color/quantum_panel_bg_color_dark" + android:drawablePadding="@dimen/widget_section_horizontal_padding" + android:ellipsize="end" + android:focusable="true" + android:gravity="start|center_vertical" + android:importantForAccessibility="no" + android:paddingBottom="@dimen/widget_section_vertical_padding" + android:paddingLeft="@dimen/widget_section_horizontal_padding" + android:paddingRight="@dimen/widget_section_horizontal_padding" + android:paddingTop="@dimen/widget_section_vertical_padding" + android:singleLine="true" + android:textColor="@color/widgets_view_section_text_color" + android:textSize="16sp" + launcher:customShadows="false" + launcher:deferShadowGeneration="true" + launcher:iconDisplay="widget_section" + launcher:iconSizeOverride="@dimen/widget_section_icon_size" + launcher:layoutHorizontal="true" /> + + <HorizontalScrollView + android:id="@+id/widgets_scroll_container" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:scrollbars="none"> + <LinearLayout + android:id="@+id/widgets_cell_list" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/widget_row_padding" + android:layout_marginLeft="@dimen/widget_row_padding" + android:orientation="horizontal" + android:divider="@drawable/widgets_row_divider" + android:showDividers="middle"/> + </HorizontalScrollView> +</LinearLayout> diff --git a/res/layout/widgets_view.xml b/res/layout/widgets_view.xml new file mode 100644 index 000000000..755634f82 --- /dev/null +++ b/res/layout/widgets_view.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!-- The top and bottom paddings are defined in this container, but since we want + the list view to span the full width (for touch interception purposes), we + will bake the left/right padding into that view's background itself. --> +<com.android.launcher3.widget.WidgetsContainerView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/widgets_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:descendantFocusability="afterDescendants"> + + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <FrameLayout + android:id="@+id/widgets_reveal_view" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center" + android:focusable="false" + android:elevation="2dp" + android:visibility="invisible" /> + + <!-- DO NOT CHANGE THE ID --> + <com.android.launcher3.widget.WidgetsRecyclerView + android:id="@+id/widgets_list_view" + android:theme="@style/Theme.Dark.CustomOverscroll" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center" + android:elevation="15dp" + android:visibility="gone" /> + </FrameLayout> + +</com.android.launcher3.widget.WidgetsContainerView>
\ No newline at end of file diff --git a/res/mipmap-xxhdpi/on_boarding_welcome.png b/res/mipmap-xxhdpi/on_boarding_welcome.png Binary files differdeleted file mode 100644 index 7b11dea0e..000000000 --- a/res/mipmap-xxhdpi/on_boarding_welcome.png +++ /dev/null diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index f37f08f3b..700452463 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -20,57 +20,27 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="application_name" msgid="5181331383435256801">"Launcher3"</string> - <string name="home" msgid="7658288663002113681">"Tuis"</string> - <string name="uid_name" msgid="7820867637514617527">"Android-kernprogramme"</string> <string name="folder_name" msgid="7371454440695724752"></string> + <string name="work_folder_name" msgid="3753320833950115786">"Werk"</string> <string name="activity_not_found" msgid="8071924732094499514">"Program is nie geïnstalleer nie."</string> <string name="activity_not_available" msgid="7456344436509528827">"Program is nie beskikbaar nie"</string> <string name="safemode_shortcut_error" msgid="9160126848219158407">"Afgelaaide program in veiligmodus gedeaktiveer"</string> <string name="safemode_widget_error" msgid="4863470563535682004">"Legstukke gedeaktiveer in Veiligmodus"</string> - <string name="widgets_tab_label" msgid="2921133187116603919">"Legstukke"</string> - <string name="widget_adder" msgid="3201040140710381657">"Legstukke"</string> <string name="toggle_weight_watcher" msgid="5645299835184636119">"Wys Mem"</string> <string name="long_press_widget_to_add" msgid="7699152356777458215">"Raak en hou om \'n legstuk op te tel."</string> <string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string> - <string name="external_drop_widget_error" msgid="3165821058322217155">"Kan nie item op hierdie Tuisskerm laat los nie."</string> - <string name="external_drop_widget_pick_title" msgid="3486317258037690630">"Kies legstuk om te skep"</string> - <string name="rename_folder_label" msgid="3727762225964550653">"Vouernaam"</string> - <string name="rename_folder_title" msgid="3771389277707820891">"Hernoem vouer"</string> - <string name="rename_action" msgid="5559600076028658757">"OK"</string> - <string name="cancel_action" msgid="7009134900002915310">"Kanselleer"</string> - <string name="menu_item_add_item" msgid="1264911265836810421">"Voeg by Tuisskerm"</string> - <string name="group_applications" msgid="3797214114206693605">"Programme"</string> - <string name="group_shortcuts" msgid="6012256992764410535">"Kortpaaie"</string> - <string name="group_widgets" msgid="1569030723286851002">"Legstukke"</string> - <string name="completely_out_of_space" msgid="6106288382070760318">"Niks meer spasie op jou Tuisskerms nie."</string> + <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Deursoek programme"</string> + <string name="all_apps_loading_message" msgid="7557140873644765180">"Laai tans programme …"</string> + <string name="all_apps_no_search_results" msgid="6332185285860416787">"Geen programme gevind wat met \"<xliff:g id="QUERY">%1$s</xliff:g>\" ooreenstem nie"</string> <string name="out_of_space" msgid="4691004494942118364">"Niks meer spasie op die tuisskerm nie."</string> <string name="hotseat_out_of_space" msgid="7448809638125333693">"Geen plek meer in die Gunstelinge-laai nie"</string> - <string name="invalid_hotseat_item" msgid="5779907847267573691">"Hierdie legstuk is te groot vir die Gunstelinge-laai"</string> - <string name="shortcut_installed" msgid="1701742129426969556">"Kortpad \"<xliff:g id="NAME">%s</xliff:g>\" is geskep."</string> - <string name="shortcut_uninstalled" msgid="8176767991305701821">"Kortpad \"<xliff:g id="NAME">%s</xliff:g>\" is verwyder."</string> - <string name="shortcut_duplicate" msgid="9167217446062498127">"Kortpad \"<xliff:g id="NAME">%s</xliff:g>\" bestaan reeds."</string> - <string name="title_select_shortcut" msgid="6680642571148153868">"Kies kortpad"</string> - <string name="title_select_application" msgid="3280812711670683644">"Kies program"</string> <string name="all_apps_button_label" msgid="9110807029020582876">"Programme"</string> <string name="all_apps_home_button_label" msgid="252062713717058851">"Tuis"</string> - <string name="delete_zone_label_workspace" msgid="4009607676751398685">"Verwyder"</string> - <string name="delete_zone_label_all_apps" msgid="8083826390278958980">"Deïnstalleer"</string> <string name="delete_target_label" msgid="1822697352535677073">"Verwyder"</string> <string name="delete_target_uninstall_label" msgid="5100785476250872595">"Deïnstalleer"</string> <string name="info_target_label" msgid="8053346143994679532">"Programinligting"</string> - <string name="accessibility_all_apps_button" msgid="2603132375383800483">"Programme"</string> - <string name="accessibility_delete_button" msgid="6466114477993744621">"Verwyder"</string> - <string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Deïnstalleer opdatering"</string> - <string name="cab_menu_delete_app" msgid="7435191475867183689">"Deïnstalleer program"</string> - <string name="cab_menu_app_info" msgid="8593722221450362342">"Programbesonderhede"</string> - <string name="cab_app_selection_text" msgid="374688303047985416">"1 program gekies"</string> - <string name="cab_widget_selection_text" msgid="1833458597831541241">"1 legstuk gekies"</string> - <string name="cab_folder_selection_text" msgid="7999992513806132118">"1 vouer gekies"</string> - <string name="cab_shortcut_selection_text" msgid="2103811025667946450">"1 kortpad gekies"</string> <string name="permlab_install_shortcut" msgid="5632423390354674437">"installeer kortpaaie"</string> <string name="permdesc_install_shortcut" msgid="923466509822011139">"Laat \'n program toe om kortpaaie by te voeg sonder gebruikerinmenging."</string> - <string name="permlab_uninstall_shortcut" msgid="864595034498083837">"deïnstalleer kortpaaie"</string> - <string name="permdesc_uninstall_shortcut" msgid="5134129545001836849">"Laat die program toe om kortpaaie te verwyder sonder gebruikerinmenging."</string> <string name="permlab_read_settings" msgid="1941457408239617576">"lees Tuis-instellings en -kortpaaie"</string> <string name="permdesc_read_settings" msgid="5833423719057558387">"Laat die program toe om die instellings en kortpaaie in Tuis te lees."</string> <string name="permlab_write_settings" msgid="3574213698004620587">"skryf Tuis-instellings en -kortpaaie"</string> @@ -78,30 +48,17 @@ <string name="gadget_error_text" msgid="6081085226050792095">"Kon nie legstuk laai nie"</string> <string name="gadget_setup_text" msgid="8274003207686040488">"Stel op"</string> <string name="uninstall_system_app_text" msgid="4172046090762920660">"Dit is \'n stelselprogram en kan nie gedeïnstalleer word nie."</string> - <string name="dream_name" msgid="1530253749244328964">"Vuurpyllanseerder"</string> <string name="folder_hint_text" msgid="6617836969016293992">"Naamlose vouer"</string> - <string name="workspace_description_format" msgid="2950174241104043327">"Tuisskerm %1$d"</string> <string name="default_scroll_format" msgid="7475544710230993317">"Bladsy %1$d van %2$d"</string> <string name="workspace_scroll_format" msgid="8458889198184077399">"Tuisskerm %1$d van %2$d"</string> - <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Programme-bladsy %1$d van %2$d"</string> - <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Legstukke-bladsy %1$d van %2$d"</string> <string name="first_run_cling_title" msgid="2459738000155917941">"Welkom"</string> - <string name="first_run_cling_description" msgid="6447072552696253358">"Maak jouself tuis."</string> - <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> - <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> - <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Skep meer skerms vir programme en vouers"</string> <string name="migration_cling_title" msgid="9181776667882933767">"Kopieer jou program-ikone"</string> <string name="migration_cling_description" msgid="2752413805582227644">"Voer ikone en vouers vanaf jou ou tuisskerms in?"</string> <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIEER IKONE"</string> <string name="migration_cling_use_default" msgid="2626475813981258626">"BEGIN VAN NUUTS AF"</string> - <string name="workspace_cling_title" msgid="5626202359865825661">"Organiseer jou spasie"</string> - <string name="workspace_cling_move_item" msgid="528201129978005352">"Raak en hou agtergrond om muurpapier, legstukke en instellings te bestuur."</string> <string name="workspace_cling_longpress_title" msgid="9173998993909018310">"Muurpapiere, legstukke en instellings"</string> <string name="workspace_cling_longpress_description" msgid="4119994475505235248">"Raak en hou agtergrond om te pasmaak"</string> <string name="workspace_cling_longpress_dismiss" msgid="368660286867640874">"HET DIT"</string> - <string name="folder_cling_title" msgid="3894908818693254164">"Hier\'s \'n vouer"</string> - <string name="folder_cling_create_folder" msgid="6158215559475836131">"Om een soos dié te skep, raak en hou \'n program en skuif dit dan oor \'n ander een."</string> - <string name="cling_dismiss" msgid="8962359497601507581">"OK"</string> <string name="folder_opened" msgid="94695026776264709">"Vouer oopgemaak, <xliff:g id="WIDTH">%1$d</xliff:g> by <xliff:g id="HEIGHT">%2$d</xliff:g>"</string> <string name="folder_tap_to_close" msgid="1884479294466410023">"Raak om vouer toe te maak"</string> <string name="folder_tap_to_rename" msgid="9191075570492871147">"Raak om hernoem te stoor"</string> @@ -111,14 +68,34 @@ <string name="widget_button_text" msgid="2880537293434387943">"Legstukke"</string> <string name="wallpaper_button_text" msgid="8404103075899945851">"Muurpapiere"</string> <string name="settings_button_text" msgid="8119458837558863227">"Instellings"</string> - <string name="package_state_enqueued" msgid="6227252464303085641">"Wag tans…"</string> - <string name="package_state_downloading" msgid="4088770468458724721">"Laai tans af…"</string> - <string name="package_state_installing" msgid="7588193972189849870">"Installeer tans…"</string> + <string name="allow_rotation_title" msgid="2118706734511831751">"Laat draai toe"</string> <string name="package_state_unknown" msgid="7592128424511031410">"Onbekend"</string> - <string name="package_state_error" msgid="7672093962724223588">"Nie teruggestel nie"</string> - <string name="abandoned_clean_all" msgid="5256770727689657618">"Verwyder almal"</string> <string name="abandoned_clean_this" msgid="7610119707847920412">"Verwyder"</string> <string name="abandoned_search" msgid="891119232568284442">"Soek"</string> <string name="abandoned_promises_title" msgid="7096178467971716750">"Hierdie program is nie geïnstalleer nie"</string> <string name="abandoned_promise_explanation" msgid="3990027586878167529">"Die program vir hierdie ikoon is nie geïnstalleer nie. Jy kan dit verwyder of die program soek en dit self installeer."</string> + <string name="action_add_to_workspace" msgid="8902165848117513641">"Voeg by tuisskerm"</string> + <string name="action_move_here" msgid="2170188780612570250">"Skuif item hierheen"</string> + <string name="item_added_to_workspace" msgid="4211073925752213539">"Item is by tuisskerm gevoeg"</string> + <string name="item_removed" msgid="851119963877842327">"Item is verwyder"</string> + <string name="action_move" msgid="4339390619886385032">"Skuif item"</string> + <string name="move_to_empty_cell" msgid="2833711483015685619">"Skuif na ry <xliff:g id="NUMBER_0">%1$s</xliff:g> kolom <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string> + <string name="move_to_position" msgid="6750008980455459790">"Skuif na posisie <xliff:g id="NUMBER">%1$s</xliff:g>"</string> + <string name="move_to_hotseat_position" msgid="6295412897075147808">"Skuif na gunstelingposisie <xliff:g id="NUMBER">%1$s</xliff:g>"</string> + <string name="item_moved" msgid="4606538322571412879">"Item geskuif"</string> + <string name="add_to_folder" msgid="9040534766770853243">"Voeg by vouer: <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="add_to_folder_with_app" msgid="4534929978967147231">"Voeg by vouer met <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="added_to_folder" msgid="4793259502305558003">"Item by vouer gevoeg"</string> + <string name="create_folder_with" msgid="4050141361160214248">"Skep vouer met: <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="folder_created" msgid="6409794597405184510">"Vouer geskep"</string> + <string name="action_move_to_workspace" msgid="1603837886334246317">"Skuif na tuisskerm"</string> + <string name="action_move_screen_left" msgid="8854216831569401665">"Skuif skerm na links"</string> + <string name="action_move_screen_right" msgid="329334910274311123">"Skuif skerm na regs"</string> + <string name="screen_moved" msgid="266230079505650577">"Skerm is geskuif"</string> + <string name="action_resize" msgid="1802976324781771067">"Verander grootte"</string> + <string name="action_increase_width" msgid="8773715375078513326">"Vermeerder breedte"</string> + <string name="action_increase_height" msgid="459390020612501122">"Vermeerder hoogte"</string> + <string name="action_decrease_width" msgid="1374549771083094654">"Verminder breedte"</string> + <string name="action_decrease_height" msgid="282377193880900022">"Verminder hoogte"</string> + <string name="widget_resized" msgid="9130327887929620">"Legstukgrootte is verander na breedte <xliff:g id="NUMBER_0">%1$s</xliff:g> hoogte <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string> </resources> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 1a25f66cd..d7fed9de4 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -20,57 +20,27 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="application_name" msgid="5181331383435256801">"ማስጀመሪያ3"</string> - <string name="home" msgid="7658288663002113681">"መነሻ"</string> - <string name="uid_name" msgid="7820867637514617527">"Android ዋና መተግበሪያዎች"</string> <string name="folder_name" msgid="7371454440695724752"></string> + <string name="work_folder_name" msgid="3753320833950115786">"ስራ"</string> <string name="activity_not_found" msgid="8071924732094499514">"መተግበሪያ አልተጫነም።"</string> <string name="activity_not_available" msgid="7456344436509528827">"መተግበሪያ አይገኝም"</string> <string name="safemode_shortcut_error" msgid="9160126848219158407">"የወረደው መተግበሪያ ደህንነቱ በተጠበቀ ሁኔታ ውስጥ ተሰናክሏል"</string> <string name="safemode_widget_error" msgid="4863470563535682004">"ምግብሮች በደህንነቱ የተጠበቀ ሁኔታ ተሰናክለዋል"</string> - <string name="widgets_tab_label" msgid="2921133187116603919">"ፍርግሞች"</string> - <string name="widget_adder" msgid="3201040140710381657">"ፍርግሞች"</string> <string name="toggle_weight_watcher" msgid="5645299835184636119">"ማህደረ ማስታወሻ አሳይ"</string> <string name="long_press_widget_to_add" msgid="7699152356777458215">"ፍርግም ለማንሳት ይንኩ እና ይያዙት"</string> <string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string> - <string name="external_drop_widget_error" msgid="3165821058322217155">"ንጥሉን እዚህ የመነሻ ማያ ገጽ ላይ ማኖር አልተቻለም።"</string> - <string name="external_drop_widget_pick_title" msgid="3486317258037690630">"ለመፍጠር መግብር ይምረጡ"</string> - <string name="rename_folder_label" msgid="3727762225964550653">"አቃፊ ስም"</string> - <string name="rename_folder_title" msgid="3771389277707820891">"አቃፊ ዳግም ሰይም"</string> - <string name="rename_action" msgid="5559600076028658757">"እሺ"</string> - <string name="cancel_action" msgid="7009134900002915310">"ይቅር"</string> - <string name="menu_item_add_item" msgid="1264911265836810421">"ወደ መነሻ ማያ ገጽ ያክሉ"</string> - <string name="group_applications" msgid="3797214114206693605">"መተግበሪያዎች"</string> - <string name="group_shortcuts" msgid="6012256992764410535">"አቋራጮች"</string> - <string name="group_widgets" msgid="1569030723286851002">"ፍርግሞች"</string> - <string name="completely_out_of_space" msgid="6106288382070760318">"የመነሻ ማያ ገጾችዎ ላይ ተጨማሪ ቦታ የለም።"</string> + <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"መተግበሪያዎችን ይፈልጉ"</string> + <string name="all_apps_loading_message" msgid="7557140873644765180">"መተግበሪያዎችን በመጫን ላይ..."</string> + <string name="all_apps_no_search_results" msgid="6332185285860416787">"ከ«<xliff:g id="QUERY">%1$s</xliff:g>» ጋር የሚዛመዱ ምንም መተግበሪያዎች አልተገኙም"</string> <string name="out_of_space" msgid="4691004494942118364">"በዚህ መነሻ ማያ ገጽ ላይ ምንም ቦታ የለም።"</string> <string name="hotseat_out_of_space" msgid="7448809638125333693">"በተወዳጆች መሣቢያ ውስጥ ተጨማሪ ቦታ የለም"</string> - <string name="invalid_hotseat_item" msgid="5779907847267573691">"ይህ መግብር ወደ የተወዳጆች መሣቢያ ላይ እንዳይገባ በጣም ትልቅ ነው"</string> - <string name="shortcut_installed" msgid="1701742129426969556">"አቋራጭ «<xliff:g id="NAME">%s</xliff:g>» ተፈጥሯል።"</string> - <string name="shortcut_uninstalled" msgid="8176767991305701821">"አቋራጭ «<xliff:g id="NAME">%s</xliff:g>» ተወግዶ ነበር።"</string> - <string name="shortcut_duplicate" msgid="9167217446062498127">"አቋራጭ «<xliff:g id="NAME">%s</xliff:g>» አስቀድሞ አለ።"</string> - <string name="title_select_shortcut" msgid="6680642571148153868">"አቋራጭ ይምረጡ"</string> - <string name="title_select_application" msgid="3280812711670683644">"መተግበሪያ ይምረጡ"</string> <string name="all_apps_button_label" msgid="9110807029020582876">"መተግበሪያዎች"</string> <string name="all_apps_home_button_label" msgid="252062713717058851">"መነሻ"</string> - <string name="delete_zone_label_workspace" msgid="4009607676751398685">"አስወግድ"</string> - <string name="delete_zone_label_all_apps" msgid="8083826390278958980">"አራግፍ"</string> <string name="delete_target_label" msgid="1822697352535677073">"አስወግድ"</string> <string name="delete_target_uninstall_label" msgid="5100785476250872595">"አራግፍ"</string> <string name="info_target_label" msgid="8053346143994679532">"የመተግበሪያ መረጃ"</string> - <string name="accessibility_all_apps_button" msgid="2603132375383800483">"መተግበሪያዎች"</string> - <string name="accessibility_delete_button" msgid="6466114477993744621">"አስወግድ"</string> - <string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"ዝማኔ አራግፍ"</string> - <string name="cab_menu_delete_app" msgid="7435191475867183689">"መተግበሪያ አራግፍ"</string> - <string name="cab_menu_app_info" msgid="8593722221450362342">"የመተግበሪያ ዝርዝሮች"</string> - <string name="cab_app_selection_text" msgid="374688303047985416">"1 መተግበሪያ ተመርጧል"</string> - <string name="cab_widget_selection_text" msgid="1833458597831541241">"1 ፍርግም ተመርጧል"</string> - <string name="cab_folder_selection_text" msgid="7999992513806132118">"1 አቃፊ ተመርጧል"</string> - <string name="cab_shortcut_selection_text" msgid="2103811025667946450">"1 አቋራጭ ተመርጧል"</string> <string name="permlab_install_shortcut" msgid="5632423390354674437">"አቋራጮችን ይጭናል"</string> <string name="permdesc_install_shortcut" msgid="923466509822011139">"መተግበሪያው ያለተጠቃሚ ጣልቃ ገብነት አቋራጭ እንዲያክል ያስችለዋል።"</string> - <string name="permlab_uninstall_shortcut" msgid="864595034498083837">"አቋራጮችን ያራግፋል"</string> - <string name="permdesc_uninstall_shortcut" msgid="5134129545001836849">"መተግበሪያው አቋራጮችን ያለተጠቃሚ ጣልቃ ገብነት እንዲያስወግድ ያስችለዋል።"</string> <string name="permlab_read_settings" msgid="1941457408239617576">"የመነሻ ቅንብሮች እና አቋራጮችን ያነባል"</string> <string name="permdesc_read_settings" msgid="5833423719057558387">"መተግበሪያው በመነሻ ውስጥ ያሉ ቅንብሮችን እና አቋራጮችን እንዲያነብ ያስችለዋል።"</string> <string name="permlab_write_settings" msgid="3574213698004620587">"የመነሻ ቅንብሮችን እና አቋራጮችን ይጽፋል"</string> @@ -78,30 +48,17 @@ <string name="gadget_error_text" msgid="6081085226050792095">"ፍርግም የመጫን ችግር"</string> <string name="gadget_setup_text" msgid="8274003207686040488">"ማዋቀሪያ"</string> <string name="uninstall_system_app_text" msgid="4172046090762920660">"ይህ የስርዓት መተግበሪያ ነው እና ማራገፍ አይቻልም።"</string> - <string name="dream_name" msgid="1530253749244328964">"የሮኬት ማስጀመሪያ"</string> <string name="folder_hint_text" msgid="6617836969016293992">"ስም-አልባ አቃፊ"</string> - <string name="workspace_description_format" msgid="2950174241104043327">"መነሻ ማያ ገጽ %1$d"</string> <string name="default_scroll_format" msgid="7475544710230993317">"ገጽ %1$d ከ%2$d"</string> <string name="workspace_scroll_format" msgid="8458889198184077399">"መነሻ ማያ ገጽ %1$d ከ%2$d"</string> - <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"የመተግበሪያዎች ገጽ %1$d ከ%2$d"</string> - <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"የመግብሮች ገጽ %1$d ከ%2$d"</string> <string name="first_run_cling_title" msgid="2459738000155917941">"እንኳን በደህና መጡ"</string> - <string name="first_run_cling_description" msgid="6447072552696253358">"ልክ እቤትዎ እንዳሉ ሆነው ዘና ይበሉ።"</string> - <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> - <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> - <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"ለመተግበሪያዎች እና አቃፊዎች ተጨማሪ ማያ ገጾችን ይፍጠሩ"</string> <string name="migration_cling_title" msgid="9181776667882933767">"የመተግበሪያ አዶዎችዎን ይቅዱ"</string> <string name="migration_cling_description" msgid="2752413805582227644">"አዶዎች እና አቃፊዎች ከድሮው የመነሻ ማያ ገጾችዎ ይምጡ?"</string> <string name="migration_cling_copy_apps" msgid="946331230090919440">"አዶዎችን ይቅዱ"</string> <string name="migration_cling_use_default" msgid="2626475813981258626">"እንደ አዲስ ይጀምሩ"</string> - <string name="workspace_cling_title" msgid="5626202359865825661">"ቦታዎን ያደራጁ"</string> - <string name="workspace_cling_move_item" msgid="528201129978005352">"ልጣፍ ፣ ምግብሮችን እና ቅንብሮችን ለማቀናበር ጀርባውን ይንኩ እና ይያዙት።"</string> <string name="workspace_cling_longpress_title" msgid="9173998993909018310">"የግድግዳ ወረቀቶች፣ ንዑስ ፕሮግራሞች እና ቅንብሮች"</string> <string name="workspace_cling_longpress_description" msgid="4119994475505235248">"ለማበጀት ጀርባውን ነክተው ይያዙት"</string> <string name="workspace_cling_longpress_dismiss" msgid="368660286867640874">"ገባኝ"</string> - <string name="folder_cling_title" msgid="3894908818693254164">"አንድ አቃፊ እነሆ"</string> - <string name="folder_cling_create_folder" msgid="6158215559475836131">"አንድ እንደዚህ አይነት ለመፍጠር መተግበሪያውን ነክተው ይያዙት እና ወደ ሌላ ያንቀሳቅሱት።"</string> - <string name="cling_dismiss" msgid="8962359497601507581">"እሺ"</string> <string name="folder_opened" msgid="94695026776264709">"አቃፊ ተከፍቷል፣ <xliff:g id="WIDTH">%1$d</xliff:g> በ<xliff:g id="HEIGHT">%2$d</xliff:g>"</string> <string name="folder_tap_to_close" msgid="1884479294466410023">"አቃፊን ለመዝጋት ይንኩ"</string> <string name="folder_tap_to_rename" msgid="9191075570492871147">"ዳግም የተሰየመውን ለማስቀመጥ ይንኩ"</string> @@ -111,14 +68,34 @@ <string name="widget_button_text" msgid="2880537293434387943">"ፍርግሞች"</string> <string name="wallpaper_button_text" msgid="8404103075899945851">"የግድግዳ ወረቀቶች"</string> <string name="settings_button_text" msgid="8119458837558863227">"ቅንብሮች"</string> - <string name="package_state_enqueued" msgid="6227252464303085641">"በመጠበቅ ላይ"</string> - <string name="package_state_downloading" msgid="4088770468458724721">"በማውረድ ላይ"</string> - <string name="package_state_installing" msgid="7588193972189849870">"በመጫን ላይ"</string> + <string name="allow_rotation_title" msgid="2118706734511831751">"ማሽከርከርን ይፍቀዱ"</string> <string name="package_state_unknown" msgid="7592128424511031410">"የማይታወቅ"</string> - <string name="package_state_error" msgid="7672093962724223588">"ወደነበረበት አልተመለሰም"</string> - <string name="abandoned_clean_all" msgid="5256770727689657618">"ሁሉንም አስወግድ"</string> <string name="abandoned_clean_this" msgid="7610119707847920412">"አስወግድ"</string> <string name="abandoned_search" msgid="891119232568284442">"ፈልግ"</string> <string name="abandoned_promises_title" msgid="7096178467971716750">"ይህ መተግበሪያ አልተጫነም"</string> <string name="abandoned_promise_explanation" msgid="3990027586878167529">"የዚህ አዶ መተግበሪያ አልተጫነም። ማስወገድ ወይም መተግበሪያውን መፈለግና ራስዎ መጫን ይችላሉ።"</string> + <string name="action_add_to_workspace" msgid="8902165848117513641">"ወደ መነሻ ማያ ገጽ ያክሉ"</string> + <string name="action_move_here" msgid="2170188780612570250">"ንጥልን ወደዚህ ውሰድ"</string> + <string name="item_added_to_workspace" msgid="4211073925752213539">"ወደ መነሻ ማያ ገጽ ንጥል ታክሏል"</string> + <string name="item_removed" msgid="851119963877842327">"ንጥል ነገር ተንቀሳቅሷል"</string> + <string name="action_move" msgid="4339390619886385032">"ንጥልን አንቀሳቅስ"</string> + <string name="move_to_empty_cell" msgid="2833711483015685619">"ወደ ረድፍ <xliff:g id="NUMBER_0">%1$s</xliff:g> ዓምድ <xliff:g id="NUMBER_1">%2$s</xliff:g> አንቀሳቅስ"</string> + <string name="move_to_position" msgid="6750008980455459790">"ወደ አቀማመጥ <xliff:g id="NUMBER">%1$s</xliff:g> አንቀሳቅስ"</string> + <string name="move_to_hotseat_position" msgid="6295412897075147808">"ወደ ተወዳጆች አቀማመጥ <xliff:g id="NUMBER">%1$s</xliff:g> አንቀሳቅስ"</string> + <string name="item_moved" msgid="4606538322571412879">"ንጥል ተንቀሳቅሷል"</string> + <string name="add_to_folder" msgid="9040534766770853243">"ወደ አቃፊ አክል፦ <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="add_to_folder_with_app" msgid="4534929978967147231">"ወደ አቃፊ አክል ከ<xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="added_to_folder" msgid="4793259502305558003">"ንጥል ወደ አቃፊ ታክሏል"</string> + <string name="create_folder_with" msgid="4050141361160214248">"አቃፊ ፍጠር ከዚህ ጋር፦ <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="folder_created" msgid="6409794597405184510">"አቃፊ ተፈጥሮዋል"</string> + <string name="action_move_to_workspace" msgid="1603837886334246317">"ወደ መነሻ ማያ ገጽ አንቀሳቅስ"</string> + <string name="action_move_screen_left" msgid="8854216831569401665">"ማያ ገጽን ወደ ግራ አንቀሳቅስ"</string> + <string name="action_move_screen_right" msgid="329334910274311123">"ማያ ገጽን ወደ ቀኝ አንቀሳቅስ"</string> + <string name="screen_moved" msgid="266230079505650577">"ማያ ገጽ ተንቀሳቅሷል"</string> + <string name="action_resize" msgid="1802976324781771067">"መጠን ቀይር"</string> + <string name="action_increase_width" msgid="8773715375078513326">"ስፋት ጨምር"</string> + <string name="action_increase_height" msgid="459390020612501122">"ቁመት ጨምር"</string> + <string name="action_decrease_width" msgid="1374549771083094654">"ስፋት ይቀንሱ"</string> + <string name="action_decrease_height" msgid="282377193880900022">"ቁመት ይቀንሱ"</string> + <string name="widget_resized" msgid="9130327887929620">"የመግብር መጠን ወደ ስፋት <xliff:g id="NUMBER_0">%1$s</xliff:g> ቁመት <xliff:g id="NUMBER_1">%2$s</xliff:g> ተለውጧል"</string> </resources> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 592be5841..b7cd901de 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -20,57 +20,27 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="application_name" msgid="5181331383435256801">"Launcher3"</string> - <string name="home" msgid="7658288663002113681">"الرئيسية"</string> - <string name="uid_name" msgid="7820867637514617527">"تطبيقات Android الأساسية"</string> <string name="folder_name" msgid="7371454440695724752"></string> + <string name="work_folder_name" msgid="3753320833950115786">"العمل"</string> <string name="activity_not_found" msgid="8071924732094499514">"لم يتم تثبيت التطبيق."</string> <string name="activity_not_available" msgid="7456344436509528827">"التطبيق ليس متاحًا"</string> <string name="safemode_shortcut_error" msgid="9160126848219158407">"تم تعطيل التطبيق الذي تم تنزيله في الوضع الآمن"</string> <string name="safemode_widget_error" msgid="4863470563535682004">"الأدوات معطلة في الوضع الآمن"</string> - <string name="widgets_tab_label" msgid="2921133187116603919">"الأدوات"</string> - <string name="widget_adder" msgid="3201040140710381657">"الأدوات"</string> <string name="toggle_weight_watcher" msgid="5645299835184636119">"عرض الذاكرة"</string> <string name="long_press_widget_to_add" msgid="7699152356777458215">"المس مع الاستمرار لاختيار إحدى الأدوات."</string> <string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string> - <string name="external_drop_widget_error" msgid="3165821058322217155">"تعذر إسقاط العنصر على هذه الشاشة الرئيسية."</string> - <string name="external_drop_widget_pick_title" msgid="3486317258037690630">"اختيار أداة لإنشائها"</string> - <string name="rename_folder_label" msgid="3727762225964550653">"اسم المجلد"</string> - <string name="rename_folder_title" msgid="3771389277707820891">"إعادة تسمية المجلد"</string> - <string name="rename_action" msgid="5559600076028658757">"موافق"</string> - <string name="cancel_action" msgid="7009134900002915310">"إلغاء"</string> - <string name="menu_item_add_item" msgid="1264911265836810421">"إضافة إلى الشاشة الرئيسية"</string> - <string name="group_applications" msgid="3797214114206693605">"التطبيقات"</string> - <string name="group_shortcuts" msgid="6012256992764410535">"الاختصارات"</string> - <string name="group_widgets" msgid="1569030723286851002">"الأدوات"</string> - <string name="completely_out_of_space" msgid="6106288382070760318">"ليس هناك مساحة أخرى في الشاشات الرئيسية."</string> + <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"البحث في التطبيقات"</string> + <string name="all_apps_loading_message" msgid="7557140873644765180">"جارٍ تحميل التطبيقات…"</string> + <string name="all_apps_no_search_results" msgid="6332185285860416787">"لم يتم العثور على أية تطبيقات تتطابق مع \"<xliff:g id="QUERY">%1$s</xliff:g>\""</string> <string name="out_of_space" msgid="4691004494942118364">"ليس هناك مساحة أخرى في هذه الشاشة الرئيسية."</string> <string name="hotseat_out_of_space" msgid="7448809638125333693">"لا يوجد المزيد من الحقول في علبة المفضلة"</string> - <string name="invalid_hotseat_item" msgid="5779907847267573691">"هذه الأداة كبيرة جدًا مما يحول دون قبولها في علبة المفضّلة"</string> - <string name="shortcut_installed" msgid="1701742129426969556">"تم إنشاء الاختصار \"<xliff:g id="NAME">%s</xliff:g>\"."</string> - <string name="shortcut_uninstalled" msgid="8176767991305701821">"تمت إزالة الاختصار \"<xliff:g id="NAME">%s</xliff:g>\"."</string> - <string name="shortcut_duplicate" msgid="9167217446062498127">"الاختصار \"<xliff:g id="NAME">%s</xliff:g>\" موجود من قبل."</string> - <string name="title_select_shortcut" msgid="6680642571148153868">"اختيار اختصار"</string> - <string name="title_select_application" msgid="3280812711670683644">"اختيار تطبيق"</string> <string name="all_apps_button_label" msgid="9110807029020582876">"التطبيقات"</string> <string name="all_apps_home_button_label" msgid="252062713717058851">"الرئيسية"</string> - <string name="delete_zone_label_workspace" msgid="4009607676751398685">"إزالة"</string> - <string name="delete_zone_label_all_apps" msgid="8083826390278958980">"إزالة"</string> <string name="delete_target_label" msgid="1822697352535677073">"إزالة"</string> <string name="delete_target_uninstall_label" msgid="5100785476250872595">"إزالة"</string> <string name="info_target_label" msgid="8053346143994679532">"معلومات عن التطبيق"</string> - <string name="accessibility_all_apps_button" msgid="2603132375383800483">"التطبيقات"</string> - <string name="accessibility_delete_button" msgid="6466114477993744621">"إزالة"</string> - <string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"إزالة التحديث"</string> - <string name="cab_menu_delete_app" msgid="7435191475867183689">"إزالة التطبيق"</string> - <string name="cab_menu_app_info" msgid="8593722221450362342">"تفاصيل التطبيق"</string> - <string name="cab_app_selection_text" msgid="374688303047985416">"تم تحديد تطبيق واحد"</string> - <string name="cab_widget_selection_text" msgid="1833458597831541241">"تم تحديد أداة واحدة"</string> - <string name="cab_folder_selection_text" msgid="7999992513806132118">"تم تحديد مجلد واحد"</string> - <string name="cab_shortcut_selection_text" msgid="2103811025667946450">"تم تحديد اختصار واحد"</string> <string name="permlab_install_shortcut" msgid="5632423390354674437">"تثبيت اختصارات"</string> <string name="permdesc_install_shortcut" msgid="923466509822011139">"للسماح لتطبيق ما بإضافة اختصارات بدون تدخل المستخدم."</string> - <string name="permlab_uninstall_shortcut" msgid="864595034498083837">"إزالة الاختصارات"</string> - <string name="permdesc_uninstall_shortcut" msgid="5134129545001836849">"للسماح للتطبيق بإزالة الاختصارات بدون تدخل المستخدم."</string> <string name="permlab_read_settings" msgid="1941457408239617576">"قراءة إعدادات واختصارات الشاشة الرئيسية"</string> <string name="permdesc_read_settings" msgid="5833423719057558387">"للسماح للتطبيق بقراءة الإعدادات والاختصارات في الشاشة الرئيسية."</string> <string name="permlab_write_settings" msgid="3574213698004620587">"كتابة إعدادات واختصارات الشاشة الرئيسية"</string> @@ -78,30 +48,17 @@ <string name="gadget_error_text" msgid="6081085226050792095">"حدثت مشكلة أثناء تحميل الأداة"</string> <string name="gadget_setup_text" msgid="8274003207686040488">"الإعداد"</string> <string name="uninstall_system_app_text" msgid="4172046090762920660">"هذا تطبيق نظام وتتعذر إزالته."</string> - <string name="dream_name" msgid="1530253749244328964">"قاذفة صواريخ"</string> <string name="folder_hint_text" msgid="6617836969016293992">"مجلد بدون اسم"</string> - <string name="workspace_description_format" msgid="2950174241104043327">"الشاشة الرئيسية %1$d"</string> <string name="default_scroll_format" msgid="7475544710230993317">"الصفحة %1$d من %2$d"</string> <string name="workspace_scroll_format" msgid="8458889198184077399">"الشاشة الرئيسية %1$d من %2$d"</string> - <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"صفحة التطبيقات %1$d من %2$d"</string> - <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"صفحة الأدوات %1$d من %2$d"</string> <string name="first_run_cling_title" msgid="2459738000155917941">"مرحبًا"</string> - <string name="first_run_cling_description" msgid="6447072552696253358">"تصرف على راحتك."</string> - <string name="first_run_cling_custom_content_hint" msgid="6090628589029352439"></string> - <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> - <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"إنشاء المزيد من الشاشات للتطبيقات والمجلدات"</string> <string name="migration_cling_title" msgid="9181776667882933767">"نسخ رموز التطبيقات"</string> <string name="migration_cling_description" msgid="2752413805582227644">"هل تريد استيراد رموز ومجلدات من الشاشات الرئيسية القديمة؟"</string> <string name="migration_cling_copy_apps" msgid="946331230090919440">"نسخ الرموز"</string> <string name="migration_cling_use_default" msgid="2626475813981258626">"بداية جديدة"</string> - <string name="workspace_cling_title" msgid="5626202359865825661">"تنظيم مساحتك"</string> - <string name="workspace_cling_move_item" msgid="528201129978005352">"المس مع الاستمرار الجزء الخلفي من صورة الشاشة لإدارة الخلفية والأدوات والإعدادات."</string> <string name="workspace_cling_longpress_title" msgid="9173998993909018310">"الخلفيات والأدوات والإعدادات"</string> <string name="workspace_cling_longpress_description" msgid="4119994475505235248">"المس مع الاستمرار الخلفية لتخصيصها"</string> <string name="workspace_cling_longpress_dismiss" msgid="368660286867640874">"حسنًا"</string> - <string name="folder_cling_title" msgid="3894908818693254164">"إليك المجلد"</string> - <string name="folder_cling_create_folder" msgid="6158215559475836131">"لإنشاء مجلد مثل هذا، المس أحد التطبيقات مع استمرار اللمس، ثم حركه فوق آخر."</string> - <string name="cling_dismiss" msgid="8962359497601507581">"موافق"</string> <string name="folder_opened" msgid="94695026776264709">"تم فتح المجلد، بمقاس <xliff:g id="WIDTH">%1$d</xliff:g> في <xliff:g id="HEIGHT">%2$d</xliff:g>"</string> <string name="folder_tap_to_close" msgid="1884479294466410023">"المس لإغلاق المجلد"</string> <string name="folder_tap_to_rename" msgid="9191075570492871147">"المس لحفظ إعادة التسمية"</string> @@ -111,14 +68,34 @@ <string name="widget_button_text" msgid="2880537293434387943">"الأدوات"</string> <string name="wallpaper_button_text" msgid="8404103075899945851">"الخلفيات"</string> <string name="settings_button_text" msgid="8119458837558863227">"الإعدادات"</string> - <string name="package_state_enqueued" msgid="6227252464303085641">"انتظار"</string> - <string name="package_state_downloading" msgid="4088770468458724721">"جارٍ التنزيل"</string> - <string name="package_state_installing" msgid="7588193972189849870">"جارٍ التثبيت"</string> + <string name="allow_rotation_title" msgid="2118706734511831751">"السماح بالتدوير"</string> <string name="package_state_unknown" msgid="7592128424511031410">"غير معروفة"</string> - <string name="package_state_error" msgid="7672093962724223588">"استعادة مخفقة"</string> - <string name="abandoned_clean_all" msgid="5256770727689657618">"إزالة الكل"</string> <string name="abandoned_clean_this" msgid="7610119707847920412">"إزالة"</string> <string name="abandoned_search" msgid="891119232568284442">"بحث"</string> <string name="abandoned_promises_title" msgid="7096178467971716750">"لم يتم تثبيت هذا التطبيق"</string> <string name="abandoned_promise_explanation" msgid="3990027586878167529">"لم يتم تثبيت تطبيق لهذا الرمز. يمكنك إزالته أو البحث عن التطبيق وتثبيته يدويًا."</string> + <string name="action_add_to_workspace" msgid="8902165848117513641">"إضافة إلى الشاشة الرئيسية"</string> + <string name="action_move_here" msgid="2170188780612570250">"نقل العنصر إلى هنا"</string> + <string name="item_added_to_workspace" msgid="4211073925752213539">"تمت إضافة العنصر إلى الشاشة الرئيسية"</string> + <string name="item_removed" msgid="851119963877842327">"تم حذف العنصر"</string> + <string name="action_move" msgid="4339390619886385032">"نقل العنصر"</string> + <string name="move_to_empty_cell" msgid="2833711483015685619">"نقل إلى الصف <xliff:g id="NUMBER_0">%1$s</xliff:g> العمود <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string> + <string name="move_to_position" msgid="6750008980455459790">"نقل إلى الموضع <xliff:g id="NUMBER">%1$s</xliff:g>"</string> + <string name="move_to_hotseat_position" msgid="6295412897075147808">"نقل إلى الموضع المفضل <xliff:g id="NUMBER">%1$s</xliff:g>"</string> + <string name="item_moved" msgid="4606538322571412879">"تم نقل العنصر"</string> + <string name="add_to_folder" msgid="9040534766770853243">"إضافة إلى المجلد: <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="add_to_folder_with_app" msgid="4534929978967147231">"إضافة إلى المجلد الذي به <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="added_to_folder" msgid="4793259502305558003">"تمت إضافة العنصر إلى المجلد"</string> + <string name="create_folder_with" msgid="4050141361160214248">"إنشاء مجلد يتضمن: <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="folder_created" msgid="6409794597405184510">"تم إنشاء المجلد"</string> + <string name="action_move_to_workspace" msgid="1603837886334246317">"نقل إلى الشاشة الرئيسية"</string> + <string name="action_move_screen_left" msgid="8854216831569401665">"نقل الشاشة إلى اليسار"</string> + <string name="action_move_screen_right" msgid="329334910274311123">"نقل الشاشة إلى اليمين"</string> + <string name="screen_moved" msgid="266230079505650577">"تم نقل الشاشة"</string> + <string name="action_resize" msgid="1802976324781771067">"تغيير حجم"</string> + <string name="action_increase_width" msgid="8773715375078513326">"زيادة العرض"</string> + <string name="action_increase_height" msgid="459390020612501122">"زيادة الارتفاع"</string> + <string name="action_decrease_width" msgid="1374549771083094654">"تقليل العرض"</string> + <string name="action_decrease_height" msgid="282377193880900022">"تقليل الارتفاع"</string> + <string name="widget_resized" msgid="9130327887929620">"تم تغيير حجم الأداة إلى العرض <xliff:g id="NUMBER_0">%1$s</xliff:g> والارتفاع <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string> </resources> diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml index 0da8364ab..099a2208d 100644 --- a/res/values-az-rAZ/strings.xml +++ b/res/values-az-rAZ/strings.xml @@ -20,57 +20,27 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="application_name" msgid="5181331383435256801">"Launcher3"</string> - <string name="home" msgid="7658288663002113681">"Əsas səhifə"</string> - <string name="uid_name" msgid="7820867637514617527">"Əsas Android Tətbiqləri"</string> <string name="folder_name" msgid="7371454440695724752"></string> + <string name="work_folder_name" msgid="3753320833950115786">"İş"</string> <string name="activity_not_found" msgid="8071924732094499514">"Tətbiq quraşdırılmayıb."</string> <string name="activity_not_available" msgid="7456344436509528827">"Tətbiq əlçatmazdır"</string> <string name="safemode_shortcut_error" msgid="9160126848219158407">"Güvənli rejimdə icazə verilməyən tətbiq endirildi"</string> <string name="safemode_widget_error" msgid="4863470563535682004">"Vidcetlər Güvənli rejimdə deaktiv edilib"</string> - <string name="widgets_tab_label" msgid="2921133187116603919">"Vidcetlər"</string> - <string name="widget_adder" msgid="3201040140710381657">"Vidcetlər"</string> <string name="toggle_weight_watcher" msgid="5645299835184636119">"Suvenirləri göstər"</string> <string name="long_press_widget_to_add" msgid="7699152356777458215">"Vidceti götürmək üçün toxunub saxlayın."</string> <string name="widget_dims_format" msgid="2370757736025621599">"%1$d × %2$d"</string> - <string name="external_drop_widget_error" msgid="3165821058322217155">"Bu Əsas ekrana element atmaq mümkün olmadı."</string> - <string name="external_drop_widget_pick_title" msgid="3486317258037690630">"Yaratmaq üçün vidcet seçin"</string> - <string name="rename_folder_label" msgid="3727762225964550653">"Qovluq adı"</string> - <string name="rename_folder_title" msgid="3771389277707820891">"Qovluq adını dəyiş"</string> - <string name="rename_action" msgid="5559600076028658757">"OK"</string> - <string name="cancel_action" msgid="7009134900002915310">"Ləğv et"</string> - <string name="menu_item_add_item" msgid="1264911265836810421">"Əsas ekrana əlavə et"</string> - <string name="group_applications" msgid="3797214114206693605">"Tətbiqlər"</string> - <string name="group_shortcuts" msgid="6012256992764410535">"Qısa yollar"</string> - <string name="group_widgets" msgid="1569030723286851002">"Vidcet"</string> - <string name="completely_out_of_space" msgid="6106288382070760318">"Əsas ekranlarınızda boş yer yoxdur."</string> + <string name="all_apps_search_bar_hint" msgid="7084713969757597256">"Tətbiq Axtarın"</string> + <string name="all_apps_loading_message" msgid="7557140873644765180">"Tətbiqlər endirilir..."</string> + <string name="all_apps_no_search_results" msgid="6332185285860416787">"\"<xliff:g id="QUERY">%1$s</xliff:g>\" sorğusuna uyğun Tətbiqlər tapılmadı"</string> <string name="out_of_space" msgid="4691004494942118364">"Bu Əsas ekranda boş yer yoxdur."</string> <string name="hotseat_out_of_space" msgid="7448809638125333693">"Favoritlər-də yer yoxdur"</string> - <string name="invalid_hotseat_item" msgid="5779907847267573691">"Bu vidcet Favorit-ə yerləşdirmək üçün çox böyükdür"</string> - <string name="shortcut_installed" msgid="1701742129426969556">"\"<xliff:g id="NAME">%s</xliff:g>\" qısayolu yaradılıb."</string> - <string name="shortcut_uninstalled" msgid="8176767991305701821">"\"<xliff:g id="NAME">%s</xliff:g>\" qısayolu kənarlaşdırıldı."</string> - <string name="shortcut_duplicate" msgid="9167217446062498127">"\"<xliff:g id="NAME">%s</xliff:g>\" qısayolu artıq mövcuddur."</string> - <string name="title_select_shortcut" msgid="6680642571148153868">"Qısayol seçin"</string> - <string name="title_select_application" msgid="3280812711670683644">"Tətbiq seçin"</string> <string name="all_apps_button_label" msgid="9110807029020582876">"Tətbiqlər"</string> <string name="all_apps_home_button_label" msgid="252062713717058851">"Əsas səhifə"</string> - <string name="delete_zone_label_workspace" msgid="4009607676751398685">"Yığışdır"</string> - <string name="delete_zone_label_all_apps" msgid="8083826390278958980">"Sistemdən sil"</string> <string name="delete_target_label" msgid="1822697352535677073">"Kənarlaşdır"</string> <string name="delete_target_uninstall_label" msgid="5100785476250872595">"Sistemdən sil"</string> <string name="info_target_label" msgid="8053346143994679532">"Tətbiq məlumatı"</string> - <string name="accessibility_all_apps_button" msgid="2603132375383800483">"Tətbiqlər"</string> - <string name="accessibility_delete_button" msgid="6466114477993744621">"Kənarlaşdır"</string> - <string name="delete_zone_label_all_apps_system_app" msgid="449755632749610895">"Güncəlləməni sistemdən sil"</string> - <string name="cab_menu_delete_app" msgid="7435191475867183689">"Tətbiqi sistemdən sil"</string> - <string name="cab_menu_app_info" msgid="8593722221450362342">"Tətbiq məlumatları"</string> - <string name="cab_app_selection_text" msgid="374688303047985416">"1 tətbiq seçildi"</string> - <string name="cab_widget_selection_text" msgid="1833458597831541241">"1 vidcet seçilib"</string> - <string name="cab_folder_selection_text" msgid="7999992513806132118">"1 qovluq seçildi"</string> - <string name="cab_shortcut_selection_text" msgid="2103811025667946450">"1 qısayol seçilib"</string> <string name="permlab_install_shortcut" msgid="5632423390354674437">"qısayolları quraşdır"</string> <string name="permdesc_install_shortcut" msgid="923466509822011139">"Tətbiqə istifadəçi müdaxiləsi olmadan qısayolları əlavə etməyə icazə verir."</string> - <string name="permlab_uninstall_shortcut" msgid="864595034498083837">"qısayolları sistemdən sil"</string> - <string name="permdesc_uninstall_shortcut" msgid="5134129545001836849">"İstifadəçi müdaxiləsi olmadan tətbiqə qısayolları silməyə icazə verir."</string> <string name="permlab_read_settings" msgid="1941457408239617576">"Əsas Səhifə ayarlarını və qısayolları oxuyun"</string> <string name="permdesc_read_settings" msgid="5833423719057558387">"Tətbiqə Əsas Səhifədə parametrləri və qısayolla |