diff options
author | Qiwen Zhao <zhao@google.com> | 2014-02-14 16:22:50 -0800 |
---|---|---|
committer | Qiwen Zhao <zhao@google.com> | 2014-02-14 16:22:50 -0800 |
commit | 0f3e20658a2386b68f23c71a83e18b9423e939e9 (patch) | |
tree | c3f7b6bda200951ea4adfdde8bd41a58bcf2664a | |
parent | ec3aad2e30ead7923f659c197c57f843cc55c913 (diff) | |
parent | 8fa85d2025902d15f40edff3255d99422685d9de (diff) | |
download | android_packages_apps_Trebuchet-0f3e20658a2386b68f23c71a83e18b9423e939e9.tar.gz android_packages_apps_Trebuchet-0f3e20658a2386b68f23c71a83e18b9423e939e9.tar.bz2 android_packages_apps_Trebuchet-0f3e20658a2386b68f23c71a83e18b9423e939e9.zip |
Merge commit '8fa85d20' into klp-dev-plus-aosp
Conflicts:
res/values-lo-rLA/strings.xml
108 files changed, 1603 insertions, 647 deletions
diff --git a/WallpaperPicker/res/values/config.xml b/WallpaperPicker/res/values/config.xml index 1b2419073..71580b5b0 100644 --- a/WallpaperPicker/res/values/config.xml +++ b/WallpaperPicker/res/values/config.xml @@ -15,4 +15,7 @@ --> <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> </resources> diff --git a/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java index 58add7022..44bfdf1f9 100644 --- a/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java +++ b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java @@ -85,6 +85,9 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { } public SavedWallpaperImages(Activity 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(); @@ -215,11 +218,20 @@ public class SavedWallpaperImages extends BaseAdapter implements ListAdapter { Context mContext; public ImageDb(Context context) { - super(context, new File(context.getCacheDir(), DB_NAME).getPath(), null, DB_VERSION); + super(context, context.getDatabasePath(DB_NAME).getPath(), null, DB_VERSION); // Store the context for later use mContext = context; } + public static void moveFromCacheDirectoryIfNecessary(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 + File oldSavedImagesFile = new File(context.getCacheDir(), ImageDb.DB_NAME); + File savedImagesFile = context.getDatabasePath(ImageDb.DB_NAME); + if (oldSavedImagesFile.exists()) { + oldSavedImagesFile.renameTo(savedImagesFile); + } + } @Override public void onCreate(SQLiteDatabase database) { database.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index b3ef07309..ee7b81951 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -330,10 +330,10 @@ public class WallpaperCropActivity extends Activity { protected void cropImageAndSetWallpaper(Uri uri, OnBitmapCroppedHandler onBitmapCroppedHandler, final boolean finishActivityWhenDone) { + boolean centerCrop = getResources().getBoolean(R.bool.center_crop); // Get the crop boolean ltr = mCropView.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR; - Display d = getWindowManager().getDefaultDisplay(); Point displaySize = new Point(); @@ -358,15 +358,25 @@ public class WallpaperCropActivity extends Activity { // ADJUST CROP WIDTH // Extend the crop all the way to the right, for parallax // (or all the way to the left, in RTL) - float extraSpace = ltr ? rotatedInSize[0] - cropRect.right : cropRect.left; + float extraSpace; + if (centerCrop) { + extraSpace = 2f * Math.min(rotatedInSize[0] - cropRect.right, cropRect.left); + } else { + extraSpace = ltr ? rotatedInSize[0] - cropRect.right : cropRect.left; + } // Cap the amount of extra width float maxExtraSpace = defaultWallpaperSize.x / cropScale - cropRect.width(); extraSpace = Math.min(extraSpace, maxExtraSpace); - if (ltr) { - cropRect.right += extraSpace; + if (centerCrop) { + cropRect.left -= extraSpace / 2f; + cropRect.right += extraSpace / 2f; } else { - cropRect.left -= extraSpace; + if (ltr) { + cropRect.right += extraSpace; + } else { + cropRect.left -= extraSpace; + } } // ADJUST CROP HEIGHT diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index d3c779fe4..c54e4779c 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -85,6 +85,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { 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 String OLD_DEFAULT_WALLPAPER_THUMBNAIL_FILENAME = "default_thumb.jpg"; private static final String DEFAULT_WALLPAPER_THUMBNAIL_FILENAME = "default_thumb2.jpg"; @@ -103,6 +104,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { ArrayList<Uri> mTempWallpaperTiles = new ArrayList<Uri>(); private SavedWallpaperImages mSavedImages; private WallpaperInfo mLiveWallpaperInfoOnPickerLaunch; + private int mSelectedIndex; public static abstract class WallpaperTileInfo { protected View mView; @@ -148,7 +150,6 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public void run() { if (mBitmapSource != null && mBitmapSource.getLoadingState() == BitmapSource.State.LOADED) { - mView.setVisibility(View.VISIBLE); a.selectTile(mView); } else { ViewGroup parent = (ViewGroup) mView.getParent(); @@ -430,8 +431,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { if ((right - left) > 0 && (bottom - top) > 0) { - if (mWallpapersView.getChildCount() > 0) { - mThumbnailOnClickListener.onClick(mWallpapersView.getChildAt(0)); + if (mSelectedIndex >= 0 && mSelectedIndex < mWallpapersView.getChildCount()) { + mThumbnailOnClickListener.onClick( + mWallpapersView.getChildAt(mSelectedIndex)); } v.removeOnLayoutChangeListener(this); } @@ -551,6 +553,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } mSelectedTile = v; v.setSelected(true); + mSelectedIndex = mWallpapersView.indexOfChild(v); // TODO: Remove this once the accessibility framework and // services have better support for selection state. v.announceForAccessibility( @@ -601,13 +604,15 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { protected void onSaveInstanceState(Bundle outState) { outState.putParcelableArrayList(TEMP_WALLPAPER_TILES, mTempWallpaperTiles); + outState.putInt(SELECTED_INDEX, mSelectedIndex); } protected void onRestoreInstanceState(Bundle savedInstanceState) { ArrayList<Uri> uris = savedInstanceState.getParcelableArrayList(TEMP_WALLPAPER_TILES); for (Uri uri : uris) { - addTemporaryWallpaperTile(uri); + addTemporaryWallpaperTile(uri, true); } + mSelectedIndex = savedInstanceState.getInt(SELECTED_INDEX, 0); } private void populateWallpapersFromAdapter(ViewGroup parent, BaseAdapter adapter, @@ -711,7 +716,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - private void addTemporaryWallpaperTile(final Uri uri) { + private void addTemporaryWallpaperTile(final Uri uri, boolean fromRestore) { mTempWallpaperTiles.add(uri); // Add a tile for the image picked from Gallery final FrameLayout pickedImageThumbnail = (FrameLayout) getLayoutInflater(). @@ -735,6 +740,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { image.setImageBitmap(thumb); Drawable thumbDrawable = image.getDrawable(); thumbDrawable.setDither(true); + pickedImageThumbnail.setVisibility(View.VISIBLE); } else { Log.e(TAG, "Error loading thumbnail for uri=" + uri); } @@ -747,14 +753,16 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { addLongPressHandler(pickedImageThumbnail); updateTileIndices(); pickedImageThumbnail.setOnClickListener(mThumbnailOnClickListener); - mThumbnailOnClickListener.onClick(pickedImageThumbnail); + if (!fromRestore) { + mThumbnailOnClickListener.onClick(pickedImageThumbnail); + } } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == IMAGE_PICK && resultCode == RESULT_OK) { if (data != null && data.getData() != null) { Uri uri = data.getData(); - addTemporaryWallpaperTile(uri); + addTemporaryWallpaperTile(uri, false); } } else if (requestCode == PICK_WALLPAPER_THIRD_PARTY_ACTIVITY) { setResult(RESULT_OK); diff --git a/res/drawable-hdpi/screenpanel_hover.9.png b/res/drawable-hdpi/screenpanel_hover.9.png Binary files differindex 3321fc925..0fed7c9d8 100644 --- a/res/drawable-hdpi/screenpanel_hover.9.png +++ b/res/drawable-hdpi/screenpanel_hover.9.png diff --git a/res/drawable-mdpi/screenpanel_hover.9.png b/res/drawable-mdpi/screenpanel_hover.9.png Binary files differindex dd7740665..7dd885860 100644 --- a/res/drawable-mdpi/screenpanel_hover.9.png +++ b/res/drawable-mdpi/screenpanel_hover.9.png diff --git a/res/drawable-xhdpi/screenpanel_hover.9.png b/res/drawable-xhdpi/screenpanel_hover.9.png Binary files differindex a44dc113f..251bf2085 100644 --- a/res/drawable-xhdpi/screenpanel_hover.9.png +++ b/res/drawable-xhdpi/screenpanel_hover.9.png diff --git a/res/drawable-xxhdpi/screenpanel_hover.9.png b/res/drawable-xxhdpi/screenpanel_hover.9.png Binary files differindex 1ab18da6a..e8b36d8f1 100644 --- a/res/drawable-xxhdpi/screenpanel_hover.9.png +++ b/res/drawable-xxhdpi/screenpanel_hover.9.png diff --git a/res/layout-land/folder_cling.xml b/res/layout-land/folder_cling.xml index 86286d71b..5dd372973 100644 --- a/res/layout-land/folder_cling.xml +++ b/res/layout-land/folder_cling.xml @@ -16,7 +16,7 @@ <com.android.launcher3.Cling xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" - launcher:drawIdentifier="folder_portrait"> + launcher:drawIdentifier="folder_landscape"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" @@ -25,6 +25,7 @@ android:layout_marginTop="10dp" android:layout_marginBottom="10dp"> <LinearLayout + android:id="@+id/folder_bubble" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> @@ -59,6 +60,6 @@ android:id="@+id/cling_dismiss" android:layout_marginBottom="15dp" android:layout_marginEnd="20dp" - android:layout_gravity="bottom|end" + android:layout_gravity="bottom|right" android:onClick="dismissFolderCling" /> </com.android.launcher3.Cling> diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml index abb19f4bb..779160925 100644 --- a/res/layout-land/launcher.xml +++ b/res/layout-land/launcher.xml @@ -45,8 +45,8 @@ android:layout_gravity="end" /> <include - android:id="@+id/qsb_bar" - layout="@layout/qsb_bar" /> + android:id="@+id/search_drop_target_bar" + layout="@layout/search_drop_target_bar" /> <include layout="@layout/overview_panel" android:id="@+id/overview_panel" @@ -65,12 +65,21 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" /> + <include layout="@layout/migration_cling" + android:id="@+id/migration_cling" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + <include layout="@layout/migration_workspace_cling" + android:id="@+id/migration_workspace_cling" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> <include layout="@layout/workspace_cling" android:id="@+id/workspace_cling" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" /> - <include layout="@layout/folder_cling" android:id="@+id/folder_cling" android:layout_width="match_parent" diff --git a/res/layout-land/migration_workspace_cling.xml b/res/layout-land/migration_workspace_cling.xml index bf7075b3d..2d7194075 100644 --- a/res/layout-land/migration_workspace_cling.xml +++ b/res/layout-land/migration_workspace_cling.xml @@ -19,25 +19,26 @@ android:layout_width="match_parent" android:layout_height="match_parent" launcher:drawIdentifier="migration_workspace_landscape"> - <FrameLayout + <LinearLayout android:id="@+id/content" - android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_width="400dp" + android:layout_height="wrap_content" + android:layout_gravity="end|center_vertical" + android:paddingEnd="60dp" + android:orientation="vertical"> <LinearLayout android:id="@+id/migration_workspace_cling_bubble" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_gravity="bottom" - android:layout_marginStart="25dp" - android:layout_marginEnd="25dp" - android:orientation="vertical"> + android:orientation="horizontal"> <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginRight="4dp" android:paddingLeft="20dp" android:paddingRight="20dp" android:paddingTop="20dp" android:paddingBottom="20dp" - android:layout_width="match_parent" - android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/cling"> <TextView @@ -54,17 +55,15 @@ <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:src="@drawable/cling_arrow_down" /> + android:layout_gravity="center_vertical" + android:src="@drawable/cling_arrow_end" /> </LinearLayout> - <Button style="@style/ClingButton" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginBottom="15dp" - android:layout_marginRight="20dp" - android:layout_gravity="bottom|right" + android:layout_marginTop="5dp" + android:layout_gravity="right" android:onClick="dismissMigrationWorkspaceCling" /> - </FrameLayout> + </LinearLayout> </com.android.launcher3.Cling> diff --git a/res/layout-land/search_bar.xml b/res/layout-land/qsb.xml index d56e380d0..d56e380d0 100644 --- a/res/layout-land/search_bar.xml +++ b/res/layout-land/qsb.xml diff --git a/res/layout-land/workspace_cling.xml b/res/layout-land/workspace_cling.xml index db33db06f..d3b07d74d 100644 --- a/res/layout-land/workspace_cling.xml +++ b/res/layout-land/workspace_cling.xml @@ -18,24 +18,20 @@ xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" android:layout_width="match_parent" android:layout_height="match_parent" - launcher:drawIdentifier="workspace_portrait"> + launcher:drawIdentifier="workspace_landscape"> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginStart="25dp" - android:layout_marginEnd="25dp" - android:layout_marginTop="310dp"> + android:layout_height="match_parent"> <LinearLayout + android:id="@+id/workspace_cling_bubble" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" + android:layout_marginStart="25dp" + android:layout_marginEnd="25dp" + android:layout_marginTop="30dp" android:orientation="vertical"> - <ImageView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" - android:src="@drawable/cling_arrow_up" /> <LinearLayout android:paddingLeft="20dp" android:paddingRight="20dp" @@ -56,14 +52,57 @@ android:layout_height="wrap_content" android:text="@string/workspace_cling_move_item" /> </LinearLayout> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:src="@drawable/cling_arrow_down" /> + </LinearLayout> + + <LinearLayout + android:id="@+id/focused_hotseat_app_bubble" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom|left" + android:layout_marginLeft="25dp" + android:layout_marginBottom="90dp" + android:orientation="vertical" + android:visibility="gone"> + <LinearLayout + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:layout_width="240dp" + android:layout_height="wrap_content" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + android:id="@+id/focused_hotseat_app_title" + style="@style/ClingTitleText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + <TextView + android:id="@+id/focused_hotseat_app_description" + style="@style/ClingText" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + </LinearLayout> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="left" + android:layout_marginLeft="78dp" + android:src="@drawable/cling_arrow_down" /> </LinearLayout> </FrameLayout> + <Button style="@style/ClingButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="15dp" - android:layout_marginEnd="20dp" - android:layout_gravity="bottom|end" + android:layout_marginRight="20dp" + android:layout_gravity="bottom|right" android:onClick="dismissWorkspaceCling" /> </com.android.launcher3.Cling> diff --git a/res/layout-port/folder_cling.xml b/res/layout-port/folder_cling.xml index 86286d71b..1a1b11fce 100644 --- a/res/layout-port/folder_cling.xml +++ b/res/layout-port/folder_cling.xml @@ -25,6 +25,7 @@ android:layout_marginTop="10dp" android:layout_marginBottom="10dp"> <LinearLayout + android:id="@+id/folder_bubble" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> @@ -59,6 +60,6 @@ android:id="@+id/cling_dismiss" android:layout_marginBottom="15dp" android:layout_marginEnd="20dp" - android:layout_gravity="bottom|end" + android:layout_gravity="bottom|right" android:onClick="dismissFolderCling" /> </com.android.launcher3.Cling> diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml index 74005348c..574b73e46 100644 --- a/res/layout-port/launcher.xml +++ b/res/layout-port/launcher.xml @@ -57,8 +57,8 @@ android:layout_gravity="center_horizontal" /> <include - android:id="@+id/qsb_bar" - layout="@layout/qsb_bar" /> + android:id="@+id/search_drop_target_bar" + layout="@layout/search_drop_target_bar" /> <!-- The Workspace cling must appear under the AppsCustomizePagedView below to ensure that it is still visible during the transition to AllApps and doesn't overlay on diff --git a/res/layout-port/migration_workspace_cling.xml b/res/layout-port/migration_workspace_cling.xml index bc5e22ff1..576bb41f2 100644 --- a/res/layout-port/migration_workspace_cling.xml +++ b/res/layout-port/migration_workspace_cling.xml @@ -63,7 +63,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="15dp" - android:layout_marginRight="20dp" + android:layout_marginEnd="20dp" android:layout_gravity="bottom|right" android:onClick="dismissMigrationWorkspaceCling" /> </FrameLayout> diff --git a/res/layout-port/search_bar.xml b/res/layout-port/qsb.xml index e993f7847..4c9963dfb 100644 --- a/res/layout-port/search_bar.xml +++ b/res/layout-port/qsb.xml @@ -16,7 +16,6 @@ <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" - style="@style/SearchDropTargetBar" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/search_frame"> diff --git a/res/layout-port/workspace_cling.xml b/res/layout-port/workspace_cling.xml index b926ca967..624568668 100644 --- a/res/layout-port/workspace_cling.xml +++ b/res/layout-port/workspace_cling.xml @@ -24,6 +24,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout + android:id="@+id/workspace_cling_bubble" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" diff --git a/res/layout-sw600dp-port/first_run_cling.xml b/res/layout-sw600dp-port/first_run_cling.xml new file mode 100644 index 000000000..d80c084ab --- /dev/null +++ b/res/layout-sw600dp-port/first_run_cling.xml @@ -0,0 +1,100 @@ +<?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.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="first_run_portrait"> + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <LinearLayout + android:id="@+id/bubble_content" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginLeft="100dp" + android:layout_marginRight="100dp" + android:orientation="vertical"> + <TextView + style="@style/ClingAltTitleText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginBottom="10dp" + android:text="@string/first_run_cling_title" + android:textColor="#FFFFFFFF" + android:gravity="center" /> + <TextView + style="@style/ClingAltText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:text="@string/first_run_cling_description" + android:textColor="#80000000" + android:gravity="center" /> + </LinearLayout> + <TextView + style="@style/ClingHintText" + android:id="@+id/search_bar_hint" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top|end" + android:layout_marginEnd="30dp" + android:layout_marginTop="80dp" + android:gravity="center_horizontal" + android:maxWidth="160dp" + android:visibility="gone" + android:drawableTop="@drawable/cling_arrow_up" + android:drawablePadding="10dp" + android:text="@string/first_run_cling_search_bar_hint" /> + <TextView + style="@style/ClingHintText" + android:id="@+id/custom_content_hint" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top|start" + android:layout_marginStart="30dp" + android:layout_marginTop="120dp" + android:gravity="start" + android:maxWidth="160dp" + android:visibility="gone" + android:drawableStart="@drawable/cling_arrow_start" + android:drawablePadding="10dp" + android:text="@string/first_run_cling_custom_content_hint" /> + <TextView + style="@style/ClingHintText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom|end" + android:layout_marginEnd="30dp" + android:layout_marginBottom="120dp" + android:maxWidth="180dp" + android:drawableEnd="@drawable/cling_arrow_end" + android:drawablePadding="10dp" + android:text="@string/first_run_cling_create_screens_hint" /> + </FrameLayout> + <Button + style="@style/ClingButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="30dp" + android:layout_marginEnd="30dp" + android:layout_gravity="bottom|end" + android:onClick="dismissFirstRunCling" /> +</com.android.launcher3.Cling> diff --git a/res/layout-sw600dp-port/folder_cling.xml b/res/layout-sw600dp-port/folder_cling.xml deleted file mode 100644 index 87086cb62..000000000 --- a/res/layout-sw600dp-port/folder_cling.xml +++ /dev/null @@ -1,51 +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.Cling - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" - launcher:drawIdentifier="folder_portrait"> - <FrameLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginStart="20dp" - android:layout_marginEnd="10dp" - android:layout_marginTop="@dimen/folderClingMarginTop"> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - <TextView - style="@style/ClingTitleText" - android:id="@+id/folder_cling_title" - android:text="@string/folder_cling_title" /> - <TextView - style="@style/ClingText" - android:id="@+id/folder_cling_create_folder" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/folder_cling_create_folder" /> - </LinearLayout> - </FrameLayout> - <Button - style="@style/ClingButton" - android:id="@+id/cling_dismiss" - android:minWidth="168dp" - android:textSize="24sp" - android:layout_marginBottom="27dp" - android:layout_marginEnd="36dp" - android:layout_gravity="bottom|end" - android:onClick="dismissFolderCling" /> -</com.android.launcher3.Cling> diff --git a/res/layout-sw600dp-port/migration_workspace_cling.xml b/res/layout-sw600dp-port/migration_workspace_cling.xml new file mode 100644 index 000000000..eb13137a1 --- /dev/null +++ b/res/layout-sw600dp-port/migration_workspace_cling.xml @@ -0,0 +1,70 @@ +<?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.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="migration_workspace_large_portrait"> + <FrameLayout + android:id="@+id/content" + android:layout_width="480dp" + android:layout_height="match_parent" + android:layout_gravity="bottom|center_horizontal"> + <LinearLayout + android:id="@+id/migration_workspace_cling_bubble" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginStart="25dp" + android:layout_marginEnd="25dp" + android:orientation="vertical"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginRight="4dp" + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + style="@style/ClingTitleText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_title" /> + <TextView + style="@style/ClingText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_move_item" /> + </LinearLayout> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:src="@drawable/cling_arrow_down" /> + <Button + style="@style/ClingButton" + android:id="@+id/dismiss_migration_workspace_cling_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="right" + android:onClick="dismissMigrationWorkspaceCling" /> + </LinearLayout> + </FrameLayout> +</com.android.launcher3.Cling> diff --git a/res/layout-sw600dp/first_run_cling.xml b/res/layout-sw600dp/first_run_cling.xml new file mode 100644 index 000000000..295765b6e --- /dev/null +++ b/res/layout-sw600dp/first_run_cling.xml @@ -0,0 +1,100 @@ +<?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.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="first_run_landscape"> + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <LinearLayout + android:id="@+id/bubble_content" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginLeft="100dp" + android:layout_marginRight="100dp" + android:orientation="vertical"> + <TextView + style="@style/ClingAltTitleText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginBottom="10dp" + android:text="@string/first_run_cling_title" + android:textColor="#FFFFFFFF" + android:gravity="center" /> + <TextView + style="@style/ClingAltText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:text="@string/first_run_cling_description" + android:textColor="#80000000" + android:gravity="center" /> + </LinearLayout> + <TextView + style="@style/ClingHintText" + android:id="@+id/search_bar_hint" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top|start" + android:layout_marginStart="60dp" + android:layout_marginTop="105dp" + android:gravity="start" + android:maxWidth="160dp" + android:visibility="gone" + android:drawableStart="@drawable/cling_arrow_start" + android:drawablePadding="10dp" + android:text="@string/first_run_cling_search_bar_hint" /> + <TextView + style="@style/ClingHintText" + android:id="@+id/custom_content_hint" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top|start" + android:layout_marginStart="60dp" + android:layout_marginTop="200dp" + android:gravity="start" + android:maxWidth="160dp" + android:visibility="gone" + android:drawableStart="@drawable/cling_arrow_start" + android:drawablePadding="10dp" + android:text="@string/first_run_cling_custom_content_hint" /> + <TextView + style="@style/ClingHintText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom|end" + android:layout_marginEnd="30dp" + android:layout_marginBottom="120dp" + android:maxWidth="180dp" + android:drawableEnd="@drawable/cling_arrow_end" + android:drawablePadding="10dp" + android:text="@string/first_run_cling_create_screens_hint" /> + </FrameLayout> + <Button + style="@style/ClingButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="30dp" + android:layout_marginEnd="30dp" + android:layout_gravity="bottom|end" + android:onClick="dismissFirstRunCling" /> +</com.android.launcher3.Cling> diff --git a/res/layout-sw600dp/folder_cling.xml b/res/layout-sw600dp/folder_cling.xml new file mode 100644 index 000000000..f21aef4e4 --- /dev/null +++ b/res/layout-sw600dp/folder_cling.xml @@ -0,0 +1,66 @@ +<?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.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + launcher:drawIdentifier="folder_large"> + <LinearLayout + android:id="@+id/folder_bubble" + android:layout_width="300dp" + android:layout_height="match_parent" + android:layout_gravity="left|top" + android:paddingTop="28dp" + android:paddingRight="10dp" + android:orientation="vertical"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:src="@drawable/cling_arrow_start" /> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginRight="4dp" + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + style="@style/ClingTitleText" + android:id="@+id/folder_cling_title" + android:text="@string/folder_cling_title" /> + <TextView + style="@style/ClingText" + android:id="@+id/folder_cling_create_folder" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/folder_cling_create_folder" /> + </LinearLayout> + </LinearLayout> + <Button + style="@style/ClingButton" + android:id="@+id/cling_dismiss" + android:layout_marginTop="5dp" + android:layout_gravity="right" + android:onClick="dismissFolderCling" /> + </LinearLayout> +</com.android.launcher3.Cling> diff --git a/res/layout-sw600dp/migration_cling.xml b/res/layout-sw600dp/migration_cling.xml new file mode 100644 index 000000000..19def6a56 --- /dev/null +++ b/res/layout-sw600dp/migration_cling.xml @@ -0,0 +1,98 @@ +<?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.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="migration_portrait"> + <LinearLayout + android:id="@+id/content" + android:layout_width="360dp" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="top" + android:layout_marginBottom="15dp" + android:orientation="vertical"> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:text="@string/first_run_cling_title" + android:textSize="42dp" + android:textColor="#FFffffff" /> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="0dp" + android:layout_gravity="center_horizontal" + android:src="@drawable/on_boarding_welcome" /> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:src="@drawable/cling_arrow_up" /> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="4dp" + android:layout_marginRight="4dp" + android:paddingLeft="25dp" + android:paddingRight="25dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + style="@style/ClingTitleText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/migration_cling_title" /> + <TextView + style="@style/ClingText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/migration_cling_description" /> + </LinearLayout> + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:orientation="vertical"> + <Button + style="@style/ClingButton" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/migration_cling_copy_apps" + android:onClick="dismissMigrationClingCopyApps" /> + <Button + style="@style/ClingButton" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/migration_cling_use_default" + android:onClick="dismissMigrationClingUseDefault" /> + </LinearLayout> + </LinearLayout> +</com.android.launcher3.Cling> diff --git a/res/layout-sw600dp/workspace_cling.xml b/res/layout-sw600dp/workspace_cling.xml new file mode 100644 index 000000000..63b5522ca --- /dev/null +++ b/res/layout-sw600dp/workspace_cling.xml @@ -0,0 +1,65 @@ +<?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.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="workspace_large"> + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <LinearLayout + android:id="@+id/workspace_cling_bubble" + android:layout_width="400dp" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="vertical"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + style="@style/ClingTitleText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_title" /> + <TextView + style="@style/ClingText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_move_item" /> + </LinearLayout> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:src="@drawable/cling_arrow_down" /> + <Button + style="@style/ClingButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="right" + android:onClick="dismissWorkspaceCling" /> + </LinearLayout> + </FrameLayout> +</com.android.launcher3.Cling> diff --git a/res/layout-sw720dp-port/folder_cling.xml b/res/layout-sw720dp-port/folder_cling.xml deleted file mode 100644 index 40d4e20a5..000000000 --- a/res/layout-sw720dp-port/folder_cling.xml +++ /dev/null @@ -1,46 +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.Cling - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" - launcher:drawIdentifier="folder_large"> - <FrameLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginStart="@dimen/cling_text_block_offset_x" - android:layout_marginTop="@dimen/cling_text_block_offset_y"> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - <TextView - style="@style/ClingTitleText" - android:id="@+id/folder_cling_title" - android:text="@string/folder_cling_title" /> - <TextView - style="@style/ClingText" - android:id="@+id/folder_cling_create_folder" - android:layout_width="480dp" - android:layout_height="wrap_content" - android:text="@string/folder_cling_create_folder" /> - <Button - style="@style/ClingButton" - android:id="@+id/cling_dismiss" - android:layout_marginTop="15dp" - android:onClick="dismissFolderCling" /> - </LinearLayout> - </FrameLayout> -</com.android.launcher3.Cling> diff --git a/res/layout-sw720dp/first_run_cling.xml b/res/layout-sw720dp/first_run_cling.xml new file mode 100644 index 000000000..c43d8d32e --- /dev/null +++ b/res/layout-sw720dp/first_run_cling.xml @@ -0,0 +1,98 @@ +<?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.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="first_run_portrait"> + <FrameLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <LinearLayout + android:id="@+id/bubble_content" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginLeft="100dp" + android:layout_marginRight="100dp" + android:orientation="vertical"> + <TextView + style="@style/ClingAltTitleText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginBottom="10dp" + android:text="@string/first_run_cling_title" + android:textColor="#FFFFFFFF" + android:gravity="center" /> + <TextView + style="@style/ClingAltText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:text="@string/first_run_cling_description" + android:textColor="#80000000" + android:gravity="center" /> + </LinearLayout> + <TextView + style="@style/ClingHintText" + android:id="@+id/search_bar_hint" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top|end" + android:layout_marginEnd="120dp" + android:layout_marginTop="80dp" + android:gravity="center_horizontal" + android:maxWidth="160dp" + android:visibility="gone" + android:drawableTop="@drawable/cling_arrow_up" + android:drawablePadding="10dp" + android:text="@string/first_run_cling_search_bar_hint" /> + <TextView + style="@style/ClingHintText" + android:id="@+id/custom_content_hint" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical|start" + android:layout_marginStart="30dp" + android:gravity="start" + android:maxWidth="160dp" + android:visibility="gone" + android:drawableStart="@drawable/cling_arrow_start" + android:drawablePadding="10dp" + android:text="@string/first_run_cling_custom_content_hint" /> + <TextView + style="@style/ClingHintText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical|end" + android:layout_marginEnd="30dp" + android:maxWidth="180dp" + android:drawableEnd="@drawable/cling_arrow_end" + android:drawablePadding="10dp" + android:text="@string/first_run_cling_create_screens_hint" /> + </FrameLayout> + <Button + style="@style/ClingButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="30dp" + android:layout_marginEnd="40dp" + android:layout_gravity="bottom|end" + android:onClick="dismissFirstRunCling" /> +</com.android.launcher3.Cling> diff --git a/res/layout-sw720dp/launcher.xml b/res/layout-sw720dp/launcher.xml index 7dac2718c..685d03c6f 100644 --- a/res/layout-sw720dp/launcher.xml +++ b/res/layout-sw720dp/launcher.xml @@ -45,8 +45,8 @@ android:layout_height="match_parent" /> <include - android:id="@+id/qsb_bar" - layout="@layout/qsb_bar" /> + android:id="@+id/search_drop_target_bar" + layout="@layout/search_drop_target_bar" /> <include layout="@layout/overview_panel" android:id="@+id/overview_panel" @@ -64,17 +64,31 @@ <!-- The Workspace cling must appear under the AppsCustomizePagedView below to ensure that it is still visible during the transition to AllApps and doesn't overlay on top of that view. --> + <com.android.launcher3.ScrimView + android:id="@+id/cling_scrim" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> <include layout="@layout/first_run_cling" android:id="@+id/first_run_cling" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" /> + <include layout="@layout/migration_cling" + android:id="@+id/migration_cling" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + <include layout="@layout/migration_workspace_cling" + android:id="@+id/migration_workspace_cling" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> <include layout="@layout/workspace_cling" android:id="@+id/workspace_cling" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" /> - <include layout="@layout/folder_cling" android:id="@+id/folder_cling" android:layout_width="match_parent" diff --git a/res/layout-sw720dp/migration_workspace_cling.xml b/res/layout-sw720dp/migration_workspace_cling.xml new file mode 100644 index 000000000..eb13137a1 --- /dev/null +++ b/res/layout-sw720dp/migration_workspace_cling.xml @@ -0,0 +1,70 @@ +<?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.Cling + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" + android:layout_width="match_parent" + android:layout_height="match_parent" + launcher:drawIdentifier="migration_workspace_large_portrait"> + <FrameLayout + android:id="@+id/content" + android:layout_width="480dp" + android:layout_height="match_parent" + android:layout_gravity="bottom|center_horizontal"> + <LinearLayout + android:id="@+id/migration_workspace_cling_bubble" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginStart="25dp" + android:layout_marginEnd="25dp" + android:orientation="vertical"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginRight="4dp" + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:paddingTop="20dp" + android:paddingBottom="20dp" + android:orientation="vertical" + android:background="@drawable/cling"> + <TextView + style="@style/ClingTitleText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_title" /> + <TextView + style="@style/ClingText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/workspace_cling_move_item" /> + </LinearLayout> + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:src="@drawable/cling_arrow_down" /> + <Button + style="@style/ClingButton" + android:id="@+id/dismiss_migration_workspace_cling_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="right" + android:onClick="dismissMigrationWorkspaceCling" /> + </LinearLayout> + </FrameLayout> +</com.android.launcher3.Cling> diff --git a/res/layout-sw720dp/search_bar.xml b/res/layout-sw720dp/qsb.xml index 3276f3f17..4c9963dfb 100644 --- a/res/layout-sw720dp/search_bar.xml +++ b/res/layout-sw720dp/qsb.xml @@ -16,7 +16,8 @@ <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3" - style="@style/SearchDropTargetBar" + android:layout_width="match_parent" + android:layout_height="match_parent" android:background="@drawable/search_frame"> <!-- Global search icon --> <com.android.launcher3.HolographicLinearLayout diff --git a/res/layout/qsb_bar.xml b/res/layout/search_drop_target_bar.xml index 030acf6be..2d51b93ab 100644 --- a/res/layout/qsb_bar.xml +++ b/res/layout/search_drop_target_bar.xml @@ -15,14 +15,13 @@ --> <com.android.launcher3.SearchDropTargetBar xmlns:android="http://schemas.android.com/apk/res/android" - style="@style/QSBBar" + android:orientation="horizontal" android:focusable="false" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Drag specific targets container --> <LinearLayout - style="@style/SearchDropTargetBar" android:id="@+id/drag_target_bar" android:layout_width="match_parent" android:layout_height="match_parent" diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 82fd344bb..6d21442be 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -54,8 +54,8 @@ <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="out_of_space" msgid="4691004494942118364">"Niks meer spasie op die tuisskerm nie."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Niks meer plek op die warmlaai nie."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Hierdie legstuk is te groot vir die warmlaai."</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> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 2ab010c0a..466c888ff 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"ፍርግሞች"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"የመነሻ ማያ ገጾችዎ ላይ ተጨማሪ ቦታ የለም።"</string> <string name="out_of_space" msgid="4691004494942118364">"በዚህ መነሻ ማያ ገጽ ላይ ምንም ቦታ የለም።"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"በመትከያ ቦታው ላይ ተጨማሪ ቦታ የለም።"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"ይህ ፍርግም ለመትከያ ቦታው በጣም ትልቅ ነው።"</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> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 913430602..38c086a97 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"الأدوات"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"ليس هناك مساحة أخرى في الشاشات الرئيسية."</string> <string name="out_of_space" msgid="4691004494942118364">"ليس هناك مساحة أخرى في هذه الشاشة الرئيسية."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"ليست هناك مساحة أخرى في منطقة الإرساء القابلة للتخصيص."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"حجم هذه الأداة كبير للغاية بحيث لا تتسع له منطقة الإرساء القابلة للتخصيص."</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> diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 626345a52..02b1abfc3 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Приспособления"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"На началните ви екрани няма повече място."</string> <string name="out_of_space" msgid="4691004494942118364">"На този начален екран няма повече място."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"В трамплина няма повече място."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Това приспособление е твърде голямо за трамплина."</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> @@ -96,20 +96,15 @@ <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> - <!-- no translation found for first_run_cling_title (2459738000155917941) --> - <skip /> + <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> - <!-- no translation found for migration_cling_title (9181776667882933767) --> - <skip /> - <!-- no translation found for migration_cling_description (2752413805582227644) --> - <skip /> - <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> - <skip /> - <!-- no translation found for migration_cling_use_default (2626475813981258626) --> - <skip /> + <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="all_apps_cling_title" msgid="34929250753095858">"Изберете някои приложения"</string> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index fe9524ba2..9d0886e7c 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"No queda espai a les pantalles d\'inici."</string> <string name="out_of_space" msgid="4691004494942118364">"Ja no queda espai en aquesta pantalla d\'inici."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"No queda espai al hotseat."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Aquest widget és massa gran per al hotseat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"No hi ha més espai a la safata Preferits."</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Aquest widget és massa gran per a la safata Preferits."</string> <string name="shortcut_installed" msgid="1701742129426969556">"S\'ha creat la drecera \"<xliff:g id="NAME">%s</xliff:g>\"."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"S\'ha suprimit la drecera \"<xliff:g id="NAME">%s</xliff:g>\"."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"La drecera \"<xliff:g id="NAME">%s</xliff:g>\" ja existeix."</string> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index f323e11c3..c3ecbee5f 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgety"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Na plochách již není místo."</string> <string name="out_of_space" msgid="4691004494942118364">"Na této ploše již není místo."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"V sekci hotseat již není místo."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Widget je pro hotseat příliš velký."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Na panelu Oblíbené položky již není místo."</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Tento widget je pro panel Oblíbené položky příliš velký."</string> <string name="shortcut_installed" msgid="1701742129426969556">"Zástupce aplikace <xliff:g id="NAME">%s</xliff:g> byl vytvořen."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Zástupce aplikace <xliff:g id="NAME">%s</xliff:g> byl odebrán."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Zástupce aplikace <xliff:g id="NAME">%s</xliff:g> již existuje."</string> diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index eb805126a..bb2a29aed 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Der er ikke mere plads på dine startskærme."</string> <string name="out_of_space" msgid="4691004494942118364">"Der er ikke mere plads på denne startskærm."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Der er ikke mere plads i hotseat."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Denne widget er for stor til hotseat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Der er ikke mere plads i bakken Foretrukne"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Denne widget er for stor til bakken Foretrukne"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Genvejen \"<xliff:g id="NAME">%s</xliff:g>\" blev oprettet."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Genvejen \"<xliff:g id="NAME">%s</xliff:g>\" blev fjernet."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Genvejen \"<xliff:g id="NAME">%s</xliff:g>\" findes allerede."</string> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index d0cc5aa9f..7e543c245 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Auf Ihren Startbildschirmen ist kein Platz mehr vorhanden."</string> <string name="out_of_space" msgid="4691004494942118364">"Auf diesem Startbildschirm ist kein Platz mehr vorhanden."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Kein Platz mehr auf der App-Leiste"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Dieses Widget ist zu groß für die App-Leiste."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Ablage \"Favoriten\" ist voll."</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Dieses Widget ist zu groß für die Ablage \"Favoriten\"."</string> <string name="shortcut_installed" msgid="1701742129426969556">"Verknüpfung \"<xliff:g id="NAME">%s</xliff:g>\" wurde erstellt."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Verknüpfung \"<xliff:g id="NAME">%s</xliff:g>\" wurde entfernt."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Verknüpfung \"<xliff:g id="NAME">%s</xliff:g>\" ist bereits vorhanden."</string> diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index d28c7b654..949d1aadd 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Γραφικά στοιχεία"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Δεν υπάρχει άλλος χώρος στις Αρχικές οθόνες σας."</string> <string name="out_of_space" msgid="4691004494942118364">"Δεν υπάρχει χώρος σε αυτήν την αρχική οθόνη."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Δεν υπάρχει άλλος χώρος στη γραμμή γρήγορης πρόσβασης."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Αυτό το γραφικό στοιχείο είναι πολύ μεγάλο για τη γραμμή γρήγορης πρόσβασης."</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> diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 4ca33f4f5..d37da629c 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"No more room on your Home screens."</string> <string name="out_of_space" msgid="4691004494942118364">"No more room on this Home screen."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"No more room on the hot seat."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"This widget is too large for the hot seat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"No more room in the Favourites tray"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"This widget is too large for the Favourites tray"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Shortcut \"<xliff:g id="NAME">%s</xliff:g>\" created."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Shortcut \"<xliff:g id="NAME">%s</xliff:g>\" was removed."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Shortcut \"<xliff:g id="NAME">%s</xliff:g>\" already exists."</string> diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 4ca33f4f5..d37da629c 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"No more room on your Home screens."</string> <string name="out_of_space" msgid="4691004494942118364">"No more room on this Home screen."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"No more room on the hot seat."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"This widget is too large for the hot seat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"No more room in the Favourites tray"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"This widget is too large for the Favourites tray"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Shortcut \"<xliff:g id="NAME">%s</xliff:g>\" created."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Shortcut \"<xliff:g id="NAME">%s</xliff:g>\" was removed."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Shortcut \"<xliff:g id="NAME">%s</xliff:g>\" already exists."</string> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 43c2f411a..beb56204b 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"No hay más espacio en tus pantallas principales."</string> <string name="out_of_space" msgid="4691004494942118364">"No hay más espacio en esta pantalla principal."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"No hay más espacio en la barra de accesos directos."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Este widget es demasiado grande para la barra de accesos directos."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"La bandeja de favoritos está llena."</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Este widget es demasiado grande para la bandeja de favoritos."</string> <string name="shortcut_installed" msgid="1701742129426969556">"Se creó el acceso directo \"<xliff:g id="NAME">%s</xliff:g>\"."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Se eliminó el acceso directo \"<xliff:g id="NAME">%s</xliff:g>\"."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"El acceso directo \"<xliff:g id="NAME">%s</xliff:g>\" ya existe."</string> @@ -96,13 +96,13 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Pantalla principal %1$d de %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Página de aplicaciones %1$d de %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Página de widgets %1$d de %2$d"</string> - <string name="first_run_cling_title" msgid="2459738000155917941">"Te damos la bienvenida"</string> + <string name="first_run_cling_title" msgid="2459738000155917941">"Bienvenido"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Siéntete como en casa."</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">"Crea más pantallas para aplicaciones y carpetas."</string> <string name="migration_cling_title" msgid="9181776667882933767">"Copiar íconos de aplicaciones"</string> - <string name="migration_cling_description" msgid="2752413805582227644">"¿Importar íconos y carpetas de pantallas princip. antiguas?"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"¿Importar íconos y carpetas de pant. principales antiguas?"</string> <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIAR ÍCONOS"</string> <string name="migration_cling_use_default" msgid="2626475813981258626">"EMPEZAR DE CERO"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organiza tu espacio"</string> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 6fc4a428c..a05ae69f0 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"No queda espacio en las pantallas de inicio."</string> <string name="out_of_space" msgid="4691004494942118364">"No queda espacio en la pantalla de inicio."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"No queda espacio en la barra de accesos directos."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Este widget es demasiado grande para la barra de accesos directos."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"La bandeja de favoritos está completa"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Este widget es demasiado grande para la bandeja de favoritos"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Se ha creado el acceso directo \"<xliff:g id="NAME">%s</xliff:g>\"."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Se ha eliminado el acceso directo \"<xliff:g id="NAME">%s</xliff:g>\"."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"El acceso directo \"<xliff:g id="NAME">%s</xliff:g>\" ya existe."</string> @@ -104,7 +104,7 @@ <string name="migration_cling_title" msgid="9181776667882933767">"Copiar iconos de aplicaciones"</string> <string name="migration_cling_description" msgid="2752413805582227644">"¿Importar iconos y carpetas de pantallas de inicio antiguas?"</string> <string name="migration_cling_copy_apps" msgid="946331230090919440">"COPIAR ICONOS"</string> - <string name="migration_cling_use_default" msgid="2626475813981258626">"INICIAR ACTUALIZACIÓN"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"AJUSTES PREDETERMINADOS"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organiza tu espacio"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Mantén pulsado el fondo para gestionar el fondo de pantalla, los widgets y los ajustes."</string> <string name="all_apps_cling_title" msgid="34929250753095858">"Selecciona algunas aplicaciones"</string> diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 86285ce50..fb252723d 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Vidinad"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Teie avaekraanidel ei ole enam ruumi."</string> <string name="out_of_space" msgid="4691004494942118364">"Sellel avaekraanil pole enam ruumi."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Kohandataval dokialal pole rohkem ruumi."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"See vidin on kohandatava dokiala jaoks liiga suur."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Salves Lemmikud pole rohkem ruumi"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"See vidin on salve Lemmikud jaoks liiga suur"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Otsetee „<xliff:g id="NAME">%s</xliff:g>” on loodud."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Otsetee „<xliff:g id="NAME">%s</xliff:g>” on eemaldatud."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Otsetee „<xliff:g id="NAME">%s</xliff:g>” on juba olemas."</string> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 8b60f2403..684e811a8 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"ابزارکها"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"فضای بیشتری در صفحات نمایش اصلی شما موجود نیست."</string> <string name="out_of_space" msgid="4691004494942118364">"فضای بیشتری در این صفحه اصلی موجود نیست."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"فضای بیشتری در جایگاه اتصال نیست."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"این ابزارک بیش از حد برای جایگاه اتصال بزرگ است."</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> diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 673c99eb6..a8dc83fcd 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgetit"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Aloitusruuduilla ei ole enää tilaa."</string> <string name="out_of_space" msgid="4691004494942118364">"Tässä aloitusruudussa ei ole enää tilaa."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Hotseatissa ei ole enää tilaa."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Tämä widget on liian suuri tähän hotseat-paikkaan."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Suosikit-valikossa ei ole enää tilaa"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Tämä widget on liian suuri Suosikit-valikkoon lisättäväksi"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Pikakuvake <xliff:g id="NAME">%s</xliff:g> luotiin."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Pikakuvake <xliff:g id="NAME">%s</xliff:g> poistettiin."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Pikakuvake <xliff:g id="NAME">%s</xliff:g> on jo olemassa."</string> diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index bd47ad78a..2855935eb 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Vous n\'avez plus d\'espace libre sur vos écrans d\'accueil."</string> <string name="out_of_space" msgid="4691004494942118364">"Pas d\'espace libre sur l\'écran d\'accueil."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Vous n\'avez plus de place sur la barre d\'accès rapide."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Ce widget est trop volumineux pour la barre d\'accès rapide."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Il n\'y a plus d\'espace dans la zone des favoris"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Ce widget est trop volumineux pour la zone des favoris"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Le raccourci « <xliff:g id="NAME">%s</xliff:g> » a été créé."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Le raccourci « <xliff:g id="NAME">%s</xliff:g> » a été supprimé."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Le raccourci « <xliff:g id="NAME">%s</xliff:g> » existe déjà."</string> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index ab543d0c1..374718395 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Vous n\'avez plus d\'espace libre sur vos écrans d\'accueil."</string> <string name="out_of_space" msgid="4691004494942118364">"Pas d\'espace libre sur cet écran d\'accueil."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Vous n\'avez plus de place sur la barre d\'accès rapide."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Ce widget est trop volumineux pour la barre d\'accès rapide."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Plus d\'espace disponible dans la zone de favoris."</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Ce widget est trop volumineux pour la zone de favoris."</string> <string name="shortcut_installed" msgid="1701742129426969556">"Le raccourci \"<xliff:g id="NAME">%s</xliff:g>\" a été créé."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Le raccourci \"<xliff:g id="NAME">%s</xliff:g>\" a été supprimé."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Le raccourci \"<xliff:g id="NAME">%s</xliff:g>\" existe déjà."</string> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 3ce95313d..de38a8bb0 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"विजेट"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"आपकी होम स्क्रीन पर स्थान शेष नहीं है."</string> <string name="out_of_space" msgid="4691004494942118364">"इस होम स्क्रीन पर स्थान शेष नहीं है."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"हॉटसीट पर स्थान शेष नहीं है."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"हॉटसीट के लिए यह विजेट बहुत बड़ा है."</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> diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index cc2bab8d6..260df5950 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgeti"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Na vašim početnim zaslonima više nema mjesta."</string> <string name="out_of_space" msgid="4691004494942118364">"Na ovom početnom zaslonu više nema mjesta."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Na hotseatu više nema mjesta."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Ovaj je widget prevelik za hotseat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Nema više prostora na traci Favoriti"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Widget je prevelik za traku Favoriti"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Izrađen je prečac za \"<xliff:g id="NAME">%s</xliff:g>\"."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Uklonjen je prečac za \"<xliff:g id="NAME">%s</xliff:g>\"."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Prečac za \"<xliff:g id="NAME">%s</xliff:g>\" već postoji."</string> diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 8a769f5e0..17cb8cd43 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Modulok"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Nincs több hely a kezdőképernyőkön."</string> <string name="out_of_space" msgid="4691004494942118364">"Nincs több hely ezen a kezdőképernyőn."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Nincs több hely az egyéni mezőben."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Ez a modul túl nagy az egyéni mező számára."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Nincs több hely a Kedvencek tálcán"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Ez a modul túl nagy a Kedvencek tálcán való elhelyezéshez"</string> <string name="shortcut_installed" msgid="1701742129426969556">"A(z) „<xliff:g id="NAME">%s</xliff:g>” parancsikon létrehozva."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"A(z) „<xliff:g id="NAME">%s</xliff:g>” parancsikon eltávolítva."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"A(z) „<xliff:g id="NAME">%s</xliff:g>” parancsikon már létezik."</string> diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index b4cdbb78a..3b4beba50 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Վիջեթներ"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Այլևս տեղ չկա ձեր հիմնական էկրաններին:"</string> <string name="out_of_space" msgid="4691004494942118364">"Այլևս տեղ չկա այս հիմնական էկրանին:"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Թեժ նստատեղերում այլևս տեղ չկա:"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Այս վիջեթը չափազանց մեծ է թեժ նստատեղերի համար:"</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> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 7bd8d7db9..68b4a85ab 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widget"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Tidak ada ruang lagi di layar Utama Anda."</string> <string name="out_of_space" msgid="4691004494942118364">"Tidak ada ruang lagi pada layar Utama ini."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Tidak ada ruang lagi di hotseat."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Widget ini terlalu besar untuk hotseat tersebut."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Tidak ada ruang tersisa di baki Favorit"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Widget ini terlalu besar untuk baki Favorit"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Pintasan \"<xliff:g id="NAME">%s</xliff:g>\" sudah dibuat."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Pintasan \"<xliff:g id="NAME">%s</xliff:g>\" telah dihapus."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Pintasan \"<xliff:g id="NAME">%s</xliff:g>\" sudah ada."</string> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 941852c89..428c5da64 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widget"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Spazio nelle schermate Home esaurito."</string> <string name="out_of_space" msgid="4691004494942118364">"Spazio nella schermata Home esaurito."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Spazio nell\'area hotseat esaurito."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Questo widget è troppo grande per l\'area hotseat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Spazio esaurito nella barra dei Preferiti"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Questo widget è troppo grande per la barra dei Preferiti"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Scorciatoia \"<xliff:g id="NAME">%s</xliff:g>\" creata."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"La scorciatoia \"<xliff:g id="NAME">%s</xliff:g>\" è stata rimossa."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Scorciatoia \"<xliff:g id="NAME">%s</xliff:g>\" già presente."</string> diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 2e1df54dd..313fcc046 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"רכיבי ווידג\'ט"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"אין יותר מקום במסכי דף הבית."</string> <string name="out_of_space" msgid="4691004494942118364">"אין עוד מקום במסך דף הבית הזה."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"אין יותר מקום בפס האפליקציות."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"הווידג\'ט הזה גדול מדי עבור פס האפליקציות."</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> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index bac349445..bbb49b2d4 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"ウィジェット"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"ホーム画面に空きスペースがありません。"</string> <string name="out_of_space" msgid="4691004494942118364">"このホーム画面に空きスペースがありません。"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"ホットシートに空きスペースがありません。"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"このウィジェットはホットシートには大きすぎます。"</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> @@ -96,20 +96,15 @@ <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> - <!-- no translation found for first_run_cling_title (2459738000155917941) --> - <skip /> + <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> - <!-- no translation found for migration_cling_title (9181776667882933767) --> - <skip /> - <!-- no translation found for migration_cling_description (2752413805582227644) --> - <skip /> - <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> - <skip /> - <!-- no translation found for migration_cling_use_default (2626475813981258626) --> - <skip /> + <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="all_apps_cling_title" msgid="34929250753095858">"アプリの選択"</string> diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 0ed5982e6..db300b969 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"ვიჯეტები"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"მთავარ ეკრანებზე ადგილი აღარ არის."</string> <string name="out_of_space" msgid="4691004494942118364">"ამ მთავარ ეკრანზე ადგილი აღარ არის."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"hotseat-ში მეტი ადგილი არ არის."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"ეს ვიჯეტი ძალიან დიდია hotseat-ისთვის."</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> @@ -102,7 +102,7 @@ <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_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> diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index dafbdf6d1..8165c4bdd 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"ធាតុក្រាហ្វិក"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"គ្មានបន្ទប់នៅលើអេក្រង់ដើមរស់អ្នកទៀតទេ។"</string> <string name="out_of_space" msgid="4691004494942118364">"គ្មានបន្ទប់នៅលើអេក្រង់ដើមនេះទៀតទេ។"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"គ្មានបន្ទប់នៅក្នុងមជ្ឈមណ្ឌលទៀតទេ។"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"ធាតុក្រាហ្វិកនេះធំពេកសម្រាប់មជ្ឈមណ្ឌល។"</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> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 9ef40e15f..d8cf487d1 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"위젯"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"홈 화면에 더 이상 공간이 없습니다."</string> <string name="out_of_space" msgid="4691004494942118364">"홈 화면에 더 이상 공간이 없습니다."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"즐겨찾는 앱 모음에 더 이상 빈 공간이 없습니다."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"이 위젯은 너무 커서 즐겨찾는 앱 모음에 들어갈 수 없습니다."</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> diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml index fa3801d60..87a744455 100644 --- a/res/values-land/styles.xml +++ b/res/values-land/styles.xml @@ -19,10 +19,6 @@ <resources> <!-- Search Bar --> - <style name="QSBBar"> - </style> - <style name="SearchDropTargetBar"> - </style> <style name="SearchButton"> </style> <style name="DropTargetButtonContainer"> diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index 2fb2df0b1..ed4e17c9c 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"ວິດເຈັດ"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"ບໍ່ມີຫ້ອງເຫຼືອໃນໜ້າຈໍຫຼັກຂອງທ່ານ."</string> <string name="out_of_space" msgid="4691004494942118364">"ບໍ່ມີຫ້ອງເຫຼືອໃນໜ້າຈໍຫຼັກນີ້."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"ບໍ່ມີຫ້ອງຫວ່າງໃນ hotseat ແລ້ວ."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"ວິດເຈັດ ມີຂະໜາດໃຫຍ່ເກີນໄປສຳລັບ hotseat."</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> @@ -109,8 +109,8 @@ <string name="workspace_cling_move_item" msgid="528201129978005352">"ແຕະຄ້າງໄວ້ທີ່ພາບພື້ນຫຼັງເພື່ອຈັດການພາບພື້ນຫຼັງ, ວິດເຈັດແລະການຕັ້ງຄ່າ."</string> <string name="all_apps_cling_title" msgid="34929250753095858">"ເລືອກແອັບຯ"</string> <string name="all_apps_cling_add_item" msgid="400866858451850784">"ເພື່ອເພີ່ມແອັບຯໃສ່ໜ້າຈໍຫຼັກຂອງທ່ານ, ໃຫ້ແຕະຄ້າງໄວ້."</string> - <string name="folder_cling_title" msgid="3894908818693254164">"ນີ້ແມ່ນໂຟນເດີ່"</string> - <string name="folder_cling_create_folder" msgid="6158215559475836131">"ເພື່ອສ້າງອັນໃໝ່ແບບນີ້, ແຕະຄ້າງໄວ້ທີ່ແອັບຯ ແລ້ວຍ້າຍມັນໄປຫາໂຕອື່ນ."</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> diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 89bae5568..8ac5814b4 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Valdikliai"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Pagrindiniuose ekranuose vietos nebėra."</string> <string name="out_of_space" msgid="4691004494942118364">"Šiame pagrindiniame ekrane vietos nebėra."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Įtvirtintojoje srityje nebėra vietos."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Šis valdiklis įtvirtintajai sričiai per didelis."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Mėgstamiausių dėkle nebėra vietos"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Mėgstamiausių dėklui šis valdiklis per didelis."</string> <string name="shortcut_installed" msgid="1701742129426969556">"Spartusis klavišas „<xliff:g id="NAME">%s</xliff:g>“ sukurtas."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Spartusis klavišas „<xliff:g id="NAME">%s</xliff:g>“ pašalintas."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Spartusis klavišas „<xliff:g id="NAME">%s</xliff:g>“ jau yra."</string> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index b4e7ee9c4..e8191e0a0 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Logrīki"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Sākuma ekrānos vairs nav vietas."</string> <string name="out_of_space" msgid="4691004494942118364">"Šajā sākuma ekrānā vairs nav vietas."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Režīmā “hotseat” vairs nav vietas."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Šis logrīks ir pārāk liels režīmam “hotseat”."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Izlases joslā vairs nav vietas."</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Šis logrīks ir pārāk liels izlases joslai."</string> <string name="shortcut_installed" msgid="1701742129426969556">"Tika izveidota saīsne “<xliff:g id="NAME">%s</xliff:g>”."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Tika noņemta saīsne “<xliff:g id="NAME">%s</xliff:g>”."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Saīsne “<xliff:g id="NAME">%s</xliff:g>” jau pastāv."</string> diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 13b5cd42e..a96074387 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Виджет"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Таны Нүүр дэлгэц зайгүй."</string> <string name="out_of_space" msgid="4691004494942118364">"Энэ Нүүр дэлгэц зайгүй."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Суурь зайгүй."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Энэ виджет сууринд хэт томдож байна."</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> diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index c555c5601..996c64cd3 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widget"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Tiada lagi ruang pada skrin Laman Utama anda."</string> <string name="out_of_space" msgid="4691004494942118364">"Tiada lagi ruang pada skrin Laman Utama ini."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Tiada lagi ruang pada kerusi panas."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Widget ini terlalu besar untuk kerusi panas."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Tiada ruang dalam dulang Kegemaran lagi"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Widget ini terlalu besar untuk dulang Kegemaran"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Pintasan \"<xliff:g id="NAME">%s</xliff:g>\" telah dibuat."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Pintasan \"<xliff:g id="NAME">%s</xliff:g>\" telah dialih keluar."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Pintasan \"<xliff:g id="NAME">%s</xliff:g>\" sudah wujud."</string> @@ -102,7 +102,7 @@ <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Buat lebih banyak skrin untuk apl dan folder"</string> <string name="migration_cling_title" msgid="9181776667882933767">"Salin ikon apl anda"</string> - <string name="migration_cling_description" msgid="2752413805582227644">"Import ikon dan folder dari skrin Laman Utama anda?"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Import ikon dan folder dari skrin Laman Utama lama anda?"</string> <string name="migration_cling_copy_apps" msgid="946331230090919440">"SALIN IKON"</string> <string name="migration_cling_use_default" msgid="2626475813981258626">"MULAKAN YANG BAHARU"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Susun ruang anda"</string> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 9bc9e6942..f53684837 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Moduler"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Ikke mer plass på startsidene dine."</string> <string name="out_of_space" msgid="4691004494942118364">"Denne startsiden er full."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Dokksonen er full."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Denne modulen er for stor for dokksonen."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Favoritter-skuffen er full"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Denne modulen er for stor for Favoritter-skuffen."</string> <string name="shortcut_installed" msgid="1701742129426969556">"Snarveien «<xliff:g id="NAME">%s</xliff:g>» er opprettet."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Snarveien «<xliff:g id="NAME">%s</xliff:g>» er fjernet."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Snarveien «<xliff:g id="NAME">%s</xliff:g>» fins allerede."</string> @@ -102,7 +102,7 @@ <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Opprett flere sider for apper og mapper"</string> <string name="migration_cling_title" msgid="9181776667882933767">"Kopiér appikonene dine"</string> - <string name="migration_cling_description" msgid="2752413805582227644">"Vil du importere ikoner og mapper fra de gamle startsidene?"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Vil du importere ikoner og mapper fra dine gamle startsider?"</string> <string name="migration_cling_copy_apps" msgid="946331230090919440">"KOPIÉR IKONENE"</string> <string name="migration_cling_use_default" msgid="2626475813981258626">"START PÅ NYTT"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Organiser plassen din"</string> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index e5df49ca3..08114bc20 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Er is geen ruimte meer op uw startschermen."</string> <string name="out_of_space" msgid="4691004494942118364">"Er is geen ruimte meer op dit startscherm."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Er is geen ruimte meer op de hotseat."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Deze widget is te groot voor de hotseat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Geen ruimte meer in het vak \'Favorieten\'"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Deze widget is te groot voor het vak \'Favorieten\'"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Snelkoppeling \'<xliff:g id="NAME">%s</xliff:g>\' is gemaakt."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Snelkoppeling \'<xliff:g id="NAME">%s</xliff:g>\' is verwijderd."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Snelkoppeling \'<xliff:g id="NAME">%s</xliff:g>\' bestaat al."</string> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 964e8a16a..a9efceebf 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widżety"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Brak miejsca na ekranach głównych."</string> <string name="out_of_space" msgid="4691004494942118364">"Brak miejsca na tym ekranie głównym."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Brak miejsca w kieszonce."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Ten widżet jest za duży, by umieścić go w kieszonce."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Brak miejsca w Ulubionych"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Ten widżet jest za duży, by zmieścił się w Ulubionych"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Skrót „<xliff:g id="NAME">%s</xliff:g>” został utworzony."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Skrót „<xliff:g id="NAME">%s</xliff:g>” został usunięty."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Skrót „<xliff:g id="NAME">%s</xliff:g>” już istnieje."</string> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 6ef84b0b6..a8b49cf38 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Sem espaço suficiente nos Ecrãs principais."</string> <string name="out_of_space" msgid="4691004494942118364">"Sem espaço suficiente neste Ecrã principal."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Sem espaço suficiente na barra personalizável."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Este widget é demasiado grande para a barra personalizável."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Não existe mais espaço no tabuleiro de Favoritos"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Este widget é demasiado grande para o tabuleiro de Favoritos"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Atalho “<xliff:g id="NAME">%s</xliff:g>” criado."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"O atalho “<xliff:g id="NAME">%s</xliff:g>” foi removido."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"O atalho “<xliff:g id="NAME">%s</xliff:g>” já existe."</string> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index d2ff1b4ba..1fc1018e1 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgets"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Não há mais espaço nas telas iniciais."</string> <string name="out_of_space" msgid="4691004494942118364">"Não há mais espaço na tela inicial."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Não há mais espaço no hotseat."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Este widget é muito grande para o hotseat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Sem espaço na bandeja de favoritos"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"O widget é muito grande para a bandeja de favoritos"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Atalho \"<xliff:g id="NAME">%s</xliff:g>\" criado."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"O atalho \"<xliff:g id="NAME">%s</xliff:g>\" foi removido."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"O atalho \"<xliff:g id="NAME">%s</xliff:g>\" já existe."</string> diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml index b1ef2ec00..c86f2b554 100644 --- a/res/values-rm/strings.xml +++ b/res/values-rm/strings.xml @@ -81,9 +81,9 @@ <skip /> <!-- no translation found for out_of_space (4691004494942118364) --> <skip /> - <!-- no translation found for hotseat_out_of_space (9139760413395605841) --> + <!-- no translation found for hotseat_out_of_space (7448809638125333693) --> <skip /> - <!-- no translation found for invalid_hotseat_item (1211534262129849507) --> + <!-- no translation found for invalid_hotseat_item (5779907847267573691) --> <skip /> <!-- no translation found for shortcut_installed (1701742129426969556) --> <skip /> diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 277b1df02..dafb859eb 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgeturi"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Nu mai este loc pe ecranele de pornire."</string> <string name="out_of_space" msgid="4691004494942118364">"Nu mai este loc pe acest Ecran de pornire."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Nu mai este loc în bara de lansare rapidă."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Acest widget este prea mare pentru bara de lansare rapidă."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Spațiu epuizat în bara Preferate"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Acest widget este prea mare pentru bara Preferate"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Comanda rapidă „<xliff:g id="NAME">%s</xliff:g>\" a fost creată."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Comanda rapidă „<xliff:g id="NAME">%s</xliff:g>” a fost eliminată."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Comanda rapidă „<xliff:g id="NAME">%s</xliff:g>” există deja."</string> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index f8343cc8e..16e7f3795 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Виджеты"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"На главных экранах все занято"</string> <string name="out_of_space" msgid="4691004494942118364">"На этом экране все занято"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Нет свободного места в слоте"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Виджет слишком велик для слота"</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> @@ -96,20 +96,15 @@ <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> - <!-- no translation found for first_run_cling_title (2459738000155917941) --> - <skip /> + <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> - <!-- no translation found for migration_cling_title (9181776667882933767) --> - <skip /> - <!-- no translation found for migration_cling_description (2752413805582227644) --> - <skip /> - <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> - <skip /> - <!-- no translation found for migration_cling_use_default (2626475813981258626) --> - <skip /> + <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="all_apps_cling_title" msgid="34929250753095858">"Выберите приложения"</string> diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 8ca6d907b..c2a95071d 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Miniaplikácie"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Na plochách už nie je miesto."</string> <string name="out_of_space" msgid="4691004494942118364">"Na tejto ploche už nie je miesto"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"V časti hotseat už nie je miesto."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Táto miniaplikácia je pre hotseat príliš veľká."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Na paneli Obľúbené položky už nie je miesto"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Táto miniaplikácia je príliš veľká pre panel Obľúbené položky"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Odkaz <xliff:g id="NAME">%s</xliff:g> bol vytvorený."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Odkaz <xliff:g id="NAME">%s</xliff:g> bol odstránený."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Odkaz <xliff:g id="NAME">%s</xliff:g> už existuje."</string> @@ -96,20 +96,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Plocha %1$d z %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Stránka aplikácií %1$d z %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Stránka miniaplikácií %1$d z %2$d"</string> - <!-- no translation found for first_run_cling_title (2459738000155917941) --> - <skip /> + <string name="first_run_cling_title" msgid="2459738000155917941">"Vitajte"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Cíťte sa tu ako doma."</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">"Vytvorte viac obrazoviek pre aplikácie a priečinky"</string> - <!-- no translation found for migration_cling_title (9181776667882933767) --> - <skip /> - <!-- no translation found for migration_cling_description (2752413805582227644) --> - <skip /> - <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> - <skip /> - <!-- no translation found for migration_cling_use_default (2626475813981258626) --> - <skip /> + <string name="migration_cling_title" msgid="9181776667882933767">"Kopírovanie ikon aplikácií"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Chcete importovať ikony a priečinky zo starých plôch?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"SKOPÍROVAŤ IKONY"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"ZAČAŤ S PREDVOLENÝM ROZLOŽENÍM"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Usporiadajte svoj priestor"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Ak chcete spravovať tapetu, miniaplikácie a nastavenia, dotknite sa pozadia a podržte."</string> <string name="all_apps_cling_title" msgid="34929250753095858">"Vyberte niektoré aplikácie"</string> diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 02b91f69e..aeb6514cb 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Pripomočki"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Na začetnih zaslonih ni več prostora."</string> <string name="out_of_space" msgid="4691004494942118364">"Na tem začetnem zaslonu ni več prostora."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"V vrstici z ikonami ni več prostora."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Ta pripomoček je prevelik za vrstico z ikonami."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"V vrstici za priljubljene ni več prostora"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Ta pripomoček je prevelik za vrstico s priljubljenimi"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Bližnjica »<xliff:g id="NAME">%s</xliff:g>« je ustvarjena."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Bližnjica »<xliff:g id="NAME">%s</xliff:g>« je bila odstranjena."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Bližnjica »<xliff:g id="NAME">%s</xliff:g>« že obstaja."</string> diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index c3cf1a0e8..b7d63278e 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Виџети"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Нема више простора на почетним екранима."</string> <string name="out_of_space" msgid="4691004494942118364">"Нема више простора на овом почетном екрану."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Нема више простора на траци актуелности."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Овај виџет је превелики за траку актуелности."</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> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 050bc339f..c146abfe4 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widgetar"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Det finns inte plats för mer på dina startsidor."</string> <string name="out_of_space" msgid="4691004494942118364">"Det finns inte plats för mer på den här startskärmen."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Utrymmet på Hotseat är fullt."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Denna widget är för stor för Hotseat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Favoritfältet är fullt"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Denna widget är för stor för favoritfältet"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Genvägen <xliff:g id="NAME">%s</xliff:g> har skapats."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Genvägen <xliff:g id="NAME">%s</xliff:g> har tagits bort."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Genvägen <xliff:g id="NAME">%s</xliff:g> finns redan."</string> diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 5434fb3aa..6c13ef5f9 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Wijeti"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Hakuna nafasi zaidi kwenye skrini zako za Nyumbani."</string> <string name="out_of_space" msgid="4691004494942118364">"Hakuna nafasi katika skrini hii ya Mwanzo."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Hakuna nafasi zaidi kwenye eneo kali."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Wijeti hii ni kubwa zaidi kwa eneo kali."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Hakuna nafasi zaidi katika treya ya Vipendeleo"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Wijeti hii ni kubwa mno kwa treya ya Vipendeleo"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Njia ya mkato ya \"<xliff:g id="NAME">%s</xliff:g>\" imeundwa."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Njia ya mkato ya \"<xliff:g id="NAME">%s</xliff:g>\" iliondolewa."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"\"<xliff:g id="NAME">%s</xliff:g>\" la njia ya mkato tayari lipo."</string> @@ -104,7 +104,7 @@ <string name="first_run_cling_search_bar_hint" msgid="5909062802402452582"></string> <string name="first_run_cling_create_screens_hint" msgid="6950729526680114157">"Unda skrini zaidi za programu na folda"</string> <string name="migration_cling_title" msgid="9181776667882933767">"Nakili ikoni za programu yako"</string> - <string name="migration_cling_description" msgid="2752413805582227644">"Je, ungependa kuingiza ikoni na folda kutoka kwa skrini zako za Mwanzo za zamani?"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Je, ungependa kuingiza ikoni na folda kutoka kwenye skrini zako za Mwanzo za zamani?"</string> <string name="migration_cling_copy_apps" msgid="946331230090919440">"NAKILI IKONI"</string> <string name="migration_cling_use_default" msgid="2626475813981258626">"ANZA UPYA"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Panga nafasi yako"</string> diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml index 200c0a0bd..bcbbafdbb 100644 --- a/res/values-sw600dp/styles.xml +++ b/res/values-sw600dp/styles.xml @@ -18,33 +18,4 @@ --> <resources> - <style name="ClingButton"> - <item name="android:layout_width">wrap_content</item> - <item name="android:layout_height">wrap_content</item> - <item name="android:paddingTop">10dp</item> - <item name="android:paddingBottom">15dp</item> - <item name="android:paddingLeft">35dp</item> - <item name="android:paddingRight">35dp</item> - <item name="android:text">@string/cling_dismiss</item> - <item name="android:textStyle">bold</item> - <item name="android:background">@drawable/cling_button_bg</item> - </style> - <style name="ClingTitleText"> - <item name="android:layout_width">wrap_content</item> - <item name="android:layout_height">wrap_content</item> - <item name="android:layout_marginBottom">5dp</item> - <item name="android:textSize">30sp</item> - <item name="android:textColor">#33B5E5</item> - <item name="android:shadowColor">#000000</item> - <item name="android:shadowDy">2</item> - <item name="android:shadowRadius">2.0</item> - </style> - <style name="ClingText"> - <item name="android:textSize">22sp</item> - <item name="android:textColor">#FFFFFF</item> - <item name="android:shadowColor">#000000</item> - <item name="android:shadowDy">2</item> - <item name="android:shadowRadius">2.0</item> - <item name="android:lineSpacingMultiplier">1.1</item> - </style> </resources> diff --git a/res/values-sw720dp/styles.xml b/res/values-sw720dp/styles.xml index b3afae399..71f030400 100644 --- a/res/values-sw720dp/styles.xml +++ b/res/values-sw720dp/styles.xml @@ -18,38 +18,6 @@ --> <resources> -<!-- Clings --> - <style name="ClingButton"> - <item name="android:layout_width">wrap_content</item> - <item name="android:layout_height">wrap_content</item> - <item name="android:paddingTop">10dp</item> - <item name="android:paddingBottom">15dp</item> - <item name="android:paddingLeft">35dp</item> - <item name="android:paddingRight">35dp</item> - <item name="android:text">@string/cling_dismiss</item> - <item name="android:textSize">20sp</item> - <item name="android:textStyle">bold</item> - <item name="android:background">@drawable/cling_button_bg</item> - </style> - <style name="ClingTitleText"> - <item name="android:layout_width">wrap_content</item> - <item name="android:layout_height">wrap_content</item> - <item name="android:layout_marginBottom">5dp</item> - <item name="android:textSize">32sp</item> - <item name="android:textColor">#49C0EC</item> - <item name="android:shadowColor">#000000</item> - <item name="android:shadowDy">2</item> - <item name="android:shadowRadius">2.0</item> - </style> - <style name="ClingText"> - <item name="android:textSize">22sp</item> - <item name="android:textColor">#FFFFFF</item> - <item name="android:shadowColor">#000000</item> - <item name="android:shadowDy">2</item> - <item name="android:shadowRadius">2.0</item> - <item name="android:lineSpacingMultiplier">1.1</item> - </style> - <!-- Workspace --> <style name="TabIndicator.AppsCustomize"> <item name="android:paddingLeft">32dp</item> @@ -58,11 +26,6 @@ <item name="android:maxWidth">240dp</item> </style> - <!-- QSB Search / Drop Target bar --> - <style name="QSBBar"> - </style> - <style name="SearchDropTargetBar"> - </style> <style name="SearchButton"> </style> <style name="DropTargetButtonContainer"> diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 2b7b8f326..83af0045d 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"วิดเจ็ต"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"ไม่มีที่ว่างในหน้าจอหลักของคุณ"</string> <string name="out_of_space" msgid="4691004494942118364">"ไม่มีที่ว่างในหน้าจอหลักนี้"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"ไม่มีที่ว่างใน hotseat"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"วิดเจ็ตนี้มีขนาดใหญ่เกินไปสำหรับ hotseat"</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> diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 536f0aada..55af72639 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Mga Widget"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Wala nang lugar sa iyong mga Home screen."</string> <string name="out_of_space" msgid="4691004494942118364">"Wala nang lugar sa Home screen na ito."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Wala nang lugar sa hotseat."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Masyadong malaki ang widget na ito para sa hotseat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Wala nang lugar sa tray ng Mga Paborito"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Masyadong malaki ang widget na ito para sa tray ng Mga Paborito"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Nagawa ang shortcut na \"<xliff:g id="NAME">%s</xliff:g>.\""</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Inalis ang shortcut na \"<xliff:g id="NAME">%s</xliff:g>.\""</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Umiiral na ang shortcut na \"<xliff:g id="NAME">%s</xliff:g>.\""</string> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 4a4ee036a..1ca3883c4 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Widget\'lar"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Ana ekranlarınızda yer kalmadı."</string> <string name="out_of_space" msgid="4691004494942118364">"Bu Ana ekranda yer kalmadı."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Favori kısa yollarda yer yok"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Bu widget, favori kısa yollar için çok büyük."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Favoriler tepsisinde başka yer kalmadı"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Bu widget, Favoriler tepsisi için çok geniş"</string> <string name="shortcut_installed" msgid="1701742129426969556">"\"<xliff:g id="NAME">%s</xliff:g>\" kısayolu oluşturuldu."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"\"<xliff:g id="NAME">%s</xliff:g>\" kısayolu kaldırıldı."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"\"<xliff:g id="NAME">%s</xliff:g>\" kısayolu zaten var."</string> @@ -96,20 +96,15 @@ <string name="workspace_scroll_format" msgid="8458889198184077399">"Ana ekran %1$d / %2$d"</string> <string name="apps_customize_apps_scroll_format" msgid="370005296147130238">"Uygulama sayfası %1$d / %2$d"</string> <string name="apps_customize_widgets_scroll_format" msgid="3106209519974971521">"Widget sayfası %1$d / %2$d"</string> - <!-- no translation found for first_run_cling_title (2459738000155917941) --> - <skip /> + <string name="first_run_cling_title" msgid="2459738000155917941">"Hoş geldiniz"</string> <string name="first_run_cling_description" msgid="6447072552696253358">"Rahatınıza bakın."</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">"Uygulamalar ve klasörler için daha fazla ekran oluşturun"</string> - <!-- no translation found for migration_cling_title (9181776667882933767) --> - <skip /> - <!-- no translation found for migration_cling_description (2752413805582227644) --> - <skip /> - <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> - <skip /> - <!-- no translation found for migration_cling_use_default (2626475813981258626) --> - <skip /> + <string name="migration_cling_title" msgid="9181776667882933767">"Uygulama simgelerini kopyala"</string> + <string name="migration_cling_description" msgid="2752413805582227644">"Eski Ana ekranlarınızdaki simgeler ve klasörler içe aktarılsın mı?"</string> + <string name="migration_cling_copy_apps" msgid="946331230090919440">"SİMGELERİ KOPYALA"</string> + <string name="migration_cling_use_default" msgid="2626475813981258626">"VARSAYILANI KULLAN"</string> <string name="workspace_cling_title" msgid="5626202359865825661">"Alanınızı düzenleyin"</string> <string name="workspace_cling_move_item" msgid="528201129978005352">"Duvar kağıdını, widget\'ları ve ayarları yönetmek için arka plana uzun basın."</string> <string name="all_apps_cling_title" msgid="34929250753095858">"İstediğiniz uygulamaları seçin"</string> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 849e4cb47..8836b9624 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Віджети"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"На головних екранах більше немає місця."</string> <string name="out_of_space" msgid="4691004494942118364">"На цьому головному екрані більше немає місця."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Немає вільного місця."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Цей віджет завеликий."</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> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 0274e7dc2..a0a383b6d 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Tiện ích con"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Không còn chỗ trên Màn hình chính của bạn."</string> <string name="out_of_space" msgid="4691004494942118364">"Không còn chỗ trên Màn hình chính này."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Không còn chỗ trên vùng gắn."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Tiện ích con này quá lớn cho vùng gắn."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Không còn chỗ trong khay Mục yêu thích"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Tiện ích con này có kích thước quá lớn để đặt vào khay Mục yêu thích"</string> <string name="shortcut_installed" msgid="1701742129426969556">"Lối tắt \"<xliff:g id="NAME">%s</xliff:g>\" đã được tạo."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Lối tắt \"<xliff:g id="NAME">%s</xliff:g>\" đã bị xóa."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Lối tắt \"<xliff:g id="NAME">%s</xliff:g>\" đã tồn tại."</string> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index f38a6f4ff..1222f1c96 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"小部件"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"您的主屏幕上没有空间了。"</string> <string name="out_of_space" msgid="4691004494942118364">"此主屏幕上已没有空间。"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"底部区域已无空间。"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"该小部件太大,底部区域容纳不下。"</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> @@ -96,20 +96,15 @@ <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> - <!-- no translation found for first_run_cling_title (2459738000155917941) --> - <skip /> + <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> - <!-- no translation found for migration_cling_title (9181776667882933767) --> - <skip /> - <!-- no translation found for migration_cling_description (2752413805582227644) --> - <skip /> - <!-- no translation found for migration_cling_copy_apps (946331230090919440) --> - <skip /> - <!-- no translation found for migration_cling_use_default (2626475813981258626) --> - <skip /> + <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="all_apps_cling_title" msgid="34929250753095858">"选择一些应用"</string> diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index cc79cfd09..cb02728c2 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"小工具"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"主畫面已無空間。"</string> <string name="out_of_space" msgid="4691004494942118364">"主畫面已無空間。"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"停駐區已無可用空間。"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"這個小工具過大,停駐區沒有足夠空間。"</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> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index afac36642..4af347264 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"小工具"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"主螢幕已無空間。"</string> <string name="out_of_space" msgid="4691004494942118364">"這個主螢幕已無空間。"</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"停駐區已無空間。"</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"這個小工具過大,停駐區無法容納。"</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> diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 6bd8a41cb..585811179 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -54,8 +54,8 @@ <string name="group_widgets" msgid="1569030723286851002">"Amawijethi"</string> <string name="completely_out_of_space" msgid="6106288382070760318">"Akusenagumbi ezikrinini zakho Zekhaya."</string> <string name="out_of_space" msgid="4691004494942118364">"Asisekho isikhala kulesi sikrini Sasekhaya."</string> - <string name="hotseat_out_of_space" msgid="9139760413395605841">"Akusenagumbi ku-hotseat."</string> - <string name="invalid_hotseat_item" msgid="1211534262129849507">"Le wijethi inkulu kakhulu ukuba ku-hotseat."</string> + <string name="hotseat_out_of_space" msgid="7448809638125333693">"Asisekho isikhala kwitreyi lezintandokazi"</string> + <string name="invalid_hotseat_item" msgid="5779907847267573691">"Le wijethi inkulu kakhulu ukuba kwitreyi lezintandokazi."</string> <string name="shortcut_installed" msgid="1701742129426969556">"Isinqamuleli esithi \"<xliff:g id="NAME">%s</xliff:g>\" sidaliwe."</string> <string name="shortcut_uninstalled" msgid="8176767991305701821">"Isinqamuleli esithi \"<xliff:g id="NAME">%s</xliff:g>\" sisusiwe."</string> <string name="shortcut_duplicate" msgid="9167217446062498127">"Isinqamuleli esithi \"<xliff:g id="NAME">%s</xliff:g>\" sesivele sikhona."</string> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 28b6a5bcc..1eca5b382 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -25,7 +25,8 @@ <dimen name="dynamic_grid_workspace_page_spacing">8dp</dimen> <dimen name="dynamic_grid_overview_min_icon_zone_height">80dp</dimen> <dimen name="dynamic_grid_overview_max_icon_zone_height">120dp</dimen> - <dimen name="dynamic_grid_overview_bar_max_width">280dp</dimen> + <dimen name="dynamic_grid_overview_bar_item_width">48dp</dimen> + <dimen name="dynamic_grid_overview_bar_spacer_width">68dp</dimen> <!-- Cling --> <dimen name="clingPunchThroughGraphicCenterRadius">94dp</dimen> diff --git a/res/values/strings.xml b/res/values/strings.xml index 66bd36fb0..2c6306a56 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -85,9 +85,9 @@ s --> <!-- Error message when user has filled a home screen --> <string name="out_of_space">No more room on this Home screen.</string> <!-- Error message when user has filled the hotseat --> - <string name="hotseat_out_of_space">No more room on the hotseat.</string> + <string name="hotseat_out_of_space">No more room in the Favorites tray</string> <!-- Error message when user tries to drop an invalid item on the hotseat --> - <string name="invalid_hotseat_item">This widget is too large for the hotseat.</string> + <string name="invalid_hotseat_item">This widget is too large for the Favorites tray</string> <!-- Message displayed when a shortcut is created by an external application --> <string name="shortcut_installed">Shortcut \"<xliff:g id="name" example="Browser">%s</xliff:g>\" created.</string> <!-- Message displayed when a shortcut is uninstalled by an external application --> diff --git a/res/values/styles.xml b/res/values/styles.xml index c9834f8b5..c18dccbab 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -91,10 +91,6 @@ <item name="android:shadowRadius">4.0</item> <item name="android:shadowColor">#FF000000</item> </style> - - <style name="QSBBar"> - <item name="android:orientation">horizontal</item> - </style> <style name="SearchDropTargetBar"> </style> <style name="SearchButton"> diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index 37cdb9e13..49b12b1b1 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -299,6 +299,13 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen mPageLayoutPaddingBottom = pageIndicatorHeight; } + WidgetPreviewLoader getWidgetPreviewLoader() { + if (mWidgetPreviewLoader == null) { + mWidgetPreviewLoader = new WidgetPreviewLoader(mLauncher); + } + return mWidgetPreviewLoader; + } + /** Returns the item index of the center item on this page so that we can restore to this * item index when we rotate. */ private int getMiddleComponentIndexOnCurrentPage() { @@ -364,10 +371,6 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } protected void onDataReady(int width, int height) { - if (mWidgetPreviewLoader == null) { - mWidgetPreviewLoader = new WidgetPreviewLoader(mLauncher); - } - // Now that the data is ready, we can calculate the content width, the number of cells to // use for each page LauncherAppState app = LauncherAppState.getInstance(); @@ -727,13 +730,13 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen int[] previewSizeBeforeScale = new int[1]; - preview = mWidgetPreviewLoader.generateWidgetPreview(createWidgetInfo.componentName, + preview = getWidgetPreviewLoader().generateWidgetPreview(createWidgetInfo.componentName, createWidgetInfo.previewImage, createWidgetInfo.icon, spanX, spanY, maxWidth, maxHeight, null, previewSizeBeforeScale); // Compare the size of the drag preview to the preview in the AppsCustomize tray int previewWidthInAppsCustomize = Math.min(previewSizeBeforeScale[0], - mWidgetPreviewLoader.maxWidthForWidgetPreview(spanX)); + getWidgetPreviewLoader().maxWidthForWidgetPreview(spanX)); scale = previewWidthInAppsCustomize / (float) preview.getWidth(); // The bitmap in the AppsCustomize tray is always the the same size, so there @@ -1147,7 +1150,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen // do cleanup inside onSyncWidgetPageItems onSyncWidgetPageItems(data, false); } - }, mWidgetPreviewLoader); + }, getWidgetPreviewLoader()); // Ensure that the task is appropriately prioritized and runs in parallel AppsCustomizeAsyncTask t = new AppsCustomizeAsyncTask(page, @@ -1208,7 +1211,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen createItemInfo.minSpanX = minSpanXY[0]; createItemInfo.minSpanY = minSpanXY[1]; - widget.applyFromAppWidgetProviderInfo(info, -1, spanXY, mWidgetPreviewLoader); + widget.applyFromAppWidgetProviderInfo(info, -1, spanXY, getWidgetPreviewLoader()); widget.setTag(createItemInfo); widget.setShortPressListener(this); } else if (rawInfo instanceof ResolveInfo) { @@ -1218,7 +1221,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen createItemInfo.itemType = LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT; createItemInfo.componentName = new ComponentName(info.activityInfo.packageName, info.activityInfo.name); - widget.applyFromResolveInfo(mPackageManager, info, mWidgetPreviewLoader); + widget.applyFromResolveInfo(mPackageManager, info, getWidgetPreviewLoader()); widget.setTag(createItemInfo); } widget.setOnClickListener(this); @@ -1255,11 +1258,11 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen maxPreviewHeight = maxSize[1]; } - mWidgetPreviewLoader.setPreviewSize( + getWidgetPreviewLoader().setPreviewSize( maxPreviewWidth, maxPreviewHeight, mWidgetSpacingLayout); if (immediate) { AsyncTaskPageData data = new AsyncTaskPageData(page, items, - maxPreviewWidth, maxPreviewHeight, null, null, mWidgetPreviewLoader); + maxPreviewWidth, maxPreviewHeight, null, null, getWidgetPreviewLoader()); loadWidgetPreviewsInBackground(null, data); onSyncWidgetPageItems(data, immediate); } else { @@ -1296,7 +1299,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen task.syncThreadPriority(); } - images.add(mWidgetPreviewLoader.getPreview(items.get(i))); + images.add(getWidgetPreviewLoader().getPreview(items.get(i))); } } @@ -1725,4 +1728,4 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen return String.format(getContext().getString(stringId), page + 1, count); } -}
\ No newline at end of file +} diff --git a/src/com/android/launcher3/Cling.java b/src/com/android/launcher3/Cling.java index 185b49b08..a6139ccbc 100644 --- a/src/com/android/launcher3/Cling.java +++ b/src/com/android/launcher3/Cling.java @@ -30,6 +30,7 @@ import android.util.DisplayMetrics; import android.view.FocusFinder; import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.widget.FrameLayout; import android.widget.TextView; @@ -49,6 +50,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen private static String MIGRATION_LANDSCAPE = "migration_landscape"; private static String MIGRATION_WORKSPACE_PORTRAIT = "migration_workspace_portrait"; + private static String MIGRATION_WORKSPACE_LARGE_PORTRAIT = "migration_workspace_large_portrait"; private static String MIGRATION_WORKSPACE_LANDSCAPE = "migration_workspace_landscape"; private static String FOLDER_PORTRAIT = "folder_portrait"; @@ -56,6 +58,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen private static String FOLDER_LARGE = "folder_large"; private static float FIRST_RUN_CIRCLE_BUFFER_DPS = 60; + private static float FIRST_RUN_MAX_CIRCLE_RADIUS_DPS = 180; private static float WORKSPACE_INNER_CIRCLE_RADIUS_DPS = 50; private static float WORKSPACE_OUTER_CIRCLE_RADIUS_DPS = 60; private static float WORKSPACE_CIRCLE_Y_OFFSET_DPS = 30; @@ -106,7 +109,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen if (!mIsInitialized) { mLauncher = l; mScrimView = scrim; - mBackgroundColor = 0xdd000000; + mBackgroundColor = 0xcc000000; setOnLongClickListener(this); setOnClickListener(this); setOnTouchListener(this); @@ -141,7 +144,9 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen Resources r = getResources(); int appIconId = drawableId; Hotseat hotseat = mLauncher.getHotseat(); - if (hotseat != null && appIconId > -1 && appRank > -1 && !title.isEmpty() && + // Skip the focused app in the large layouts + if (!mDrawIdentifier.equals(WORKSPACE_LARGE) && + hotseat != null && appIconId > -1 && appRank > -1 && !title.isEmpty() && !description.isEmpty()) { // Set the app bounds int x = hotseat.getCellXFromOrder(appRank); @@ -175,6 +180,18 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen } } + void setOpenFolderRect(Rect r) { + if (mDrawIdentifier.equals(FOLDER_LANDSCAPE) || + mDrawIdentifier.equals(FOLDER_LARGE)) { + ViewGroup vg = (ViewGroup) findViewById(R.id.folder_bubble); + ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) vg.getLayoutParams(); + lp.topMargin = r.top - mInsets.bottom; + lp.leftMargin = r.right; + vg.setLayoutDirection(View.LAYOUT_DIRECTION_LTR); + vg.requestLayout(); + } + } + void updateMigrationWorkspaceBubblePosition() { DisplayMetrics metrics = new DisplayMetrics(); mLauncher.getWindowManager().getDefaultDisplay().getMetrics(metrics); @@ -184,10 +201,59 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); Rect pageIndicatorBounds = grid.getWorkspacePageIndicatorBounds(mInsets); - View bubble = findViewById(R.id.migration_workspace_cling_bubble); - FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) bubble.getLayoutParams(); - lp.bottomMargin = grid.heightPx - pageIndicatorBounds.top; - bubble.requestLayout(); + if (mDrawIdentifier.equals(MIGRATION_WORKSPACE_PORTRAIT)) { + View bubble = findViewById(R.id.migration_workspace_cling_bubble); + ViewGroup.MarginLayoutParams lp = + (ViewGroup.MarginLayoutParams) bubble.getLayoutParams(); + lp.bottomMargin = grid.heightPx - pageIndicatorBounds.top; + bubble.requestLayout(); + } else if (mDrawIdentifier.equals(MIGRATION_WORKSPACE_LARGE_PORTRAIT)) { + View bubble = findViewById(R.id.content); + ViewGroup.MarginLayoutParams lp = + (ViewGroup.MarginLayoutParams) bubble.getLayoutParams(); + lp.bottomMargin = grid.heightPx - pageIndicatorBounds.top; + bubble.requestLayout(); + } else if (mDrawIdentifier.equals(MIGRATION_WORKSPACE_LANDSCAPE)) { + View bubble = findViewById(R.id.content); + ViewGroup.MarginLayoutParams lp = + (ViewGroup.MarginLayoutParams) bubble.getLayoutParams(); + if (grid.isLayoutRtl) { + lp.leftMargin = pageIndicatorBounds.right; + } else { + lp.rightMargin = (grid.widthPx - pageIndicatorBounds.left); + } + bubble.requestLayout(); + } + } + + void updateWorkspaceBubblePosition() { + DisplayMetrics metrics = new DisplayMetrics(); + mLauncher.getWindowManager().getDefaultDisplay().getMetrics(metrics); + + // Get the cut-out bounds + LauncherAppState app = LauncherAppState.getInstance(); + DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); + Rect cutOutBounds = getWorkspaceCutOutBounds(metrics); + + if (mDrawIdentifier.equals(WORKSPACE_LARGE)) { + View bubble = findViewById(R.id.workspace_cling_bubble); + ViewGroup.MarginLayoutParams lp = + (ViewGroup.MarginLayoutParams) bubble.getLayoutParams(); + lp.bottomMargin = grid.heightPx - cutOutBounds.top - mInsets.bottom; + bubble.requestLayout(); + } + } + + private Rect getWorkspaceCutOutBounds(DisplayMetrics metrics) { + int halfWidth = metrics.widthPixels / 2; + int halfHeight = metrics.heightPixels / 2; + int yOffset = DynamicGrid.pxFromDp(WORKSPACE_CIRCLE_Y_OFFSET_DPS, metrics); + if (mDrawIdentifier.equals(WORKSPACE_LARGE)) { + yOffset = 0; + } + int radius = DynamicGrid.pxFromDp(WORKSPACE_OUTER_CIRCLE_RADIUS_DPS, metrics); + return new Rect(halfWidth - radius, halfHeight - yOffset - radius, halfWidth + radius, + halfHeight - yOffset + radius); } void show(boolean animate, int duration) { @@ -198,6 +264,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen mDrawIdentifier.equals(WORKSPACE_LARGE) || mDrawIdentifier.equals(WORKSPACE_CUSTOM) || mDrawIdentifier.equals(MIGRATION_WORKSPACE_PORTRAIT) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_LARGE_PORTRAIT) || mDrawIdentifier.equals(MIGRATION_WORKSPACE_LANDSCAPE)) { View content = getContent(); content.setAlpha(0f); @@ -381,6 +448,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen mLauncher.getLauncherClings().dismissWorkspaceCling(null); return true; } else if (mDrawIdentifier.equals(MIGRATION_WORKSPACE_PORTRAIT) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_LARGE_PORTRAIT) || mDrawIdentifier.equals(MIGRATION_WORKSPACE_LANDSCAPE)) { mLauncher.getLauncherClings().dismissMigrationWorkspaceCling(null); return true; @@ -417,6 +485,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) || mDrawIdentifier.equals(WORKSPACE_LARGE) || mDrawIdentifier.equals(MIGRATION_WORKSPACE_PORTRAIT) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_LARGE_PORTRAIT) || mDrawIdentifier.equals(MIGRATION_WORKSPACE_LANDSCAPE)) { // Initialize the draw buffer (to allow punching through) eraseBg = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), @@ -443,24 +512,23 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen bubbleContent.getGlobalVisibleRect(bubbleRect); mBubblePaint.setAlpha((int) (255 * alpha)); float buffer = DynamicGrid.pxFromDp(FIRST_RUN_CIRCLE_BUFFER_DPS, metrics); + float maxRadius = DynamicGrid.pxFromDp(FIRST_RUN_MAX_CIRCLE_RADIUS_DPS, metrics); + float radius = Math.min(maxRadius, (bubbleContent.getMeasuredWidth() + buffer) / 2); canvas.drawCircle(metrics.widthPixels / 2, - bubbleRect.centerY(), - (bubbleContent.getMeasuredWidth() + buffer) / 2, + bubbleRect.centerY(), radius, mBubblePaint); } else if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) || mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) || mDrawIdentifier.equals(WORKSPACE_LARGE)) { - int offset = DynamicGrid.pxFromDp(WORKSPACE_CIRCLE_Y_OFFSET_DPS, metrics); + Rect cutOutBounds = getWorkspaceCutOutBounds(metrics); // Draw the outer circle mErasePaint.setAlpha(128); - eraseCanvas.drawCircle(metrics.widthPixels / 2, - metrics.heightPixels / 2 - offset, + eraseCanvas.drawCircle(cutOutBounds.centerX(), cutOutBounds.centerY(), DynamicGrid.pxFromDp(WORKSPACE_OUTER_CIRCLE_RADIUS_DPS, metrics), mErasePaint); // Draw the inner circle mErasePaint.setAlpha(0); - eraseCanvas.drawCircle(metrics.widthPixels / 2, - metrics.heightPixels / 2 - offset, + eraseCanvas.drawCircle(cutOutBounds.centerX(), cutOutBounds.centerY(), DynamicGrid.pxFromDp(WORKSPACE_INNER_CIRCLE_RADIUS_DPS, metrics), mErasePaint); canvas.drawBitmap(eraseBg, 0, 0, null); @@ -476,6 +544,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnClickListen mFocusedHotseatApp.draw(canvas); } } else if (mDrawIdentifier.equals(MIGRATION_WORKSPACE_PORTRAIT) || + mDrawIdentifier.equals(MIGRATION_WORKSPACE_LARGE_PORTRAIT) || mDrawIdentifier.equals(MIGRATION_WORKSPACE_LANDSCAPE)) { int offset = DynamicGrid.pxFromDp(WORKSPACE_CIRCLE_Y_OFFSET_DPS, metrics); // Draw the outer circle diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index a64d5e403..7ca4f811c 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -31,9 +31,11 @@ import android.view.Display; import android.view.Gravity; import android.view.Surface; import android.view.View; +import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.WindowManager; import android.widget.FrameLayout; +import android.widget.LinearLayout; import java.util.ArrayList; import java.util.Collections; @@ -88,7 +90,8 @@ public class DeviceProfile { int overviewModeMinIconZoneHeightPx; int overviewModeMaxIconZoneHeightPx; - int overviewModeMaxBarWidthPx; + int overviewModeBarItemWidthPx; + int overviewModeBarSpacerWidthPx; float overviewModeIconZoneRatio; float overviewModeScaleFactor; @@ -170,8 +173,10 @@ public class DeviceProfile { res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_min_icon_zone_height); overviewModeMaxIconZoneHeightPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_max_icon_zone_height); - overviewModeMaxBarWidthPx = - res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_bar_max_width); + overviewModeBarItemWidthPx = + res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_bar_item_width); + overviewModeBarSpacerWidthPx = + res.getDimensionPixelSize(R.dimen.dynamic_grid_overview_bar_spacer_width); overviewModeIconZoneRatio = res.getInteger(R.integer.config_dynamic_grid_overview_icon_zone_percentage) / 100f; overviewModeScaleFactor = @@ -478,9 +483,22 @@ public class DeviceProfile { /** Returns the bounds of the workspace page indicators. */ Rect getWorkspacePageIndicatorBounds(Rect insets) { Rect workspacePadding = getWorkspacePadding(); - int pageIndicatorTop = heightPx - insets.bottom - workspacePadding.bottom; - return new Rect(workspacePadding.left, pageIndicatorTop, - widthPx - workspacePadding.right, pageIndicatorTop + pageIndicatorHeightPx); + if (isLandscape && transposeLayoutWithOrientation) { + if (isLayoutRtl) { + return new Rect(workspacePadding.left, workspacePadding.top, + workspacePadding.left + pageIndicatorHeightPx, + heightPx - workspacePadding.bottom - insets.bottom); + } else { + int pageIndicatorLeft = widthPx - workspacePadding.right; + return new Rect(pageIndicatorLeft, workspacePadding.top, + pageIndicatorLeft + pageIndicatorHeightPx, + heightPx - workspacePadding.bottom - insets.bottom); + } + } else { + int pageIndicatorTop = heightPx - insets.bottom - workspacePadding.bottom; + return new Rect(workspacePadding.left, pageIndicatorTop, + widthPx - workspacePadding.right, pageIndicatorTop + pageIndicatorHeightPx); + } } /** Returns the workspace padding in the specified orientation */ @@ -539,7 +557,7 @@ public class DeviceProfile { // In portrait, we want the pages spaced such that there is no // overhang of the previous / next page into the current page viewport. // We assume symmetrical padding in portrait mode. - return 2 * getWorkspacePadding().left; + return Math.max(defaultPageSpacingPx, 2 * getWorkspacePadding().left); } } @@ -593,6 +611,21 @@ public class DeviceProfile { return isVerticalBarLayout() || isLargeTablet(); } + int getVisibleChildCount(ViewGroup parent) { + int visibleChildren = 0; + for (int i = 0; i < parent.getChildCount(); i++) { + if (parent.getChildAt(i).getVisibility() != View.GONE) { + visibleChildren++; + } + } + return visibleChildren; + } + + int calculateOverviewModeWidth(int visibleChildCount) { + return visibleChildCount * overviewModeBarItemWidthPx + + (visibleChildCount-1) * overviewModeBarSpacerWidthPx; + } + public void layout(Launcher launcher) { FrameLayout.LayoutParams lp; Resources res = launcher.getResources(); @@ -605,10 +638,13 @@ public class DeviceProfile { // Vertical search bar space lp.gravity = Gravity.TOP | Gravity.LEFT; lp.width = searchBarSpaceHeightPx; - lp.height = LayoutParams.MATCH_PARENT; + lp.height = LayoutParams.WRAP_CONTENT; searchBar.setPadding( 0, 2 * edgeMarginPx, 0, 2 * edgeMarginPx); + + LinearLayout targets = (LinearLayout) searchBar.findViewById(R.id.drag_target_bar); + targets.setOrientation(LinearLayout.VERTICAL); } else { // Horizontal search bar space lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; @@ -621,13 +657,6 @@ public class DeviceProfile { } searchBar.setLayoutParams(lp); - // Layout the search bar - View qsbBar = launcher.getQsbBar(); - LayoutParams vglp = qsbBar.getLayoutParams(); - vglp.width = LayoutParams.MATCH_PARENT; - vglp.height = LayoutParams.MATCH_PARENT; - qsbBar.setLayoutParams(vglp); - // Layout the voice proxy View voiceButtonProxy = launcher.findViewById(R.id.voice_button_proxy); if (voiceButtonProxy != null) { @@ -739,12 +768,13 @@ public class DeviceProfile { } // Layout the Overview Mode - View overviewMode = launcher.getOverviewPanel(); + ViewGroup overviewMode = launcher.getOverviewPanel(); if (overviewMode != null) { Rect r = getOverviewModeButtonBarRect(); lp = (FrameLayout.LayoutParams) overviewMode.getLayoutParams(); lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; - lp.width = Math.min(availableWidthPx, overviewModeMaxBarWidthPx); + lp.width = Math.min(availableWidthPx, + calculateOverviewModeWidth(getVisibleChildCount(overviewMode))); lp.height = r.height(); overviewMode.setLayoutParams(lp); } diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java index 3aced1fae..447bb1cd8 100644 --- a/src/com/android/launcher3/DynamicGrid.java +++ b/src/com/android/launcher3/DynamicGrid.java @@ -70,7 +70,11 @@ public class DynamicGrid { deviceProfiles.add(new DeviceProfile("Nexus S", 296, 491.33f, 4, 4, 48, 13, (hasAA ? 5 : 5), 48)); deviceProfiles.add(new DeviceProfile("Nexus 4", - 359, 518, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56)); + 335, 567, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56)); + deviceProfiles.add(new DeviceProfile("Nexus 5", + 359, 567, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56)); + deviceProfiles.add(new DeviceProfile("Large Phone", + 406, 694, 5, 5, 64, 14.4f, 5, 56)); // The tablet profile is odd in that the landscape orientation // also includes the nav bar on the side deviceProfiles.add(new DeviceProfile("Nexus 7", diff --git a/src/com/android/launcher3/FocusHelper.java b/src/com/android/launcher3/FocusHelper.java index 4600985c4..bb62bac65 100644 --- a/src/com/android/launcher3/FocusHelper.java +++ b/src/com/android/launcher3/FocusHelper.java @@ -665,7 +665,7 @@ public class FocusHelper { final CellLayout layout = (CellLayout) parent.getParent(); final Workspace workspace = (Workspace) layout.getParent(); final ViewGroup launcher = (ViewGroup) workspace.getParent(); - final ViewGroup tabs = (ViewGroup) launcher.findViewById(R.id.qsb_bar); + final ViewGroup tabs = (ViewGroup) launcher.findViewById(R.id.search_drop_target_bar); final ViewGroup hotseat = (ViewGroup) launcher.findViewById(R.id.hotseat); int pageIndex = workspace.indexOfChild(layout); int pageCount = workspace.getChildCount(); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 09c15a7a9..50bbe51a5 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -249,7 +249,7 @@ public class Launcher extends Activity private FolderInfo mFolderInfo; private Hotseat mHotseat; - private View mOverviewPanel; + private ViewGroup mOverviewPanel; private View mAllAppsButton; @@ -257,7 +257,7 @@ public class Launcher extends Activity private AppsCustomizeTabHost mAppsCustomizeTabHost; private AppsCustomizePagedView mAppsCustomizeContent; private boolean mAutoAdvanceRunning = false; - private View mQsbBar; + private View mQsb; private Bundle mSavedState; // We set the state in both onCreate and then onNewIntent in some cases, which causes both @@ -1069,6 +1069,10 @@ public class Launcher extends Activity public void onScrollProgressChanged(float progress); } + protected boolean hasSettings() { + return false; + } + protected void startSettings() { } @@ -1250,7 +1254,7 @@ public class Launcher extends Activity mHotseat.setOnLongClickListener(this); } - mOverviewPanel = findViewById(R.id.overview_panel); + mOverviewPanel = (ViewGroup) findViewById(R.id.overview_panel); View widgetButton = findViewById(R.id.widget_button); widgetButton.setOnClickListener(new OnClickListener() { @Override @@ -1274,15 +1278,23 @@ public class Launcher extends Activity wallpaperButton.setOnTouchListener(getHapticFeedbackTouchListener()); View settingsButton = findViewById(R.id.settings_button); - settingsButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View arg0) { - if (!mWorkspace.isSwitchingState()) { - startSettings(); - } - } - }); - settingsButton.setOnTouchListener(getHapticFeedbackTouchListener()); + if (hasSettings()) { + settingsButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + if (!mWorkspace.isSwitchingState()) { + startSettings(); + } + } + }); + settingsButton.setOnTouchListener(getHapticFeedbackTouchListener()); + } else { + settingsButton.setVisibility(View.GONE); + FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) widgetButton.getLayoutParams(); + lp.gravity = Gravity.END | Gravity.TOP; + widgetButton.requestLayout(); + } + mOverviewPanel.setAlpha(0f); // Setup the workspace @@ -1292,7 +1304,8 @@ public class Launcher extends Activity dragController.addDragListener(mWorkspace); // Get the search/delete bar - mSearchDropTargetBar = (SearchDropTargetBar) mDragLayer.findViewById(R.id.qsb_bar); + mSearchDropTargetBar = (SearchDropTargetBar) + mDragLayer.findViewById(R.id.search_drop_target_bar); // Setup AppsCustomize mAppsCustomizeTabHost = (AppsCustomizeTabHost) findViewById(R.id.apps_customize_pane); @@ -1754,7 +1767,7 @@ public class Launcher extends Activity return mHotseat; } - public View getOverviewPanel() { + public ViewGroup getOverviewPanel() { return mOverviewPanel; } @@ -2040,7 +2053,16 @@ public class Launcher extends Activity @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - showOverviewMode(true); + // Close any open folders + closeFolder(); + // Stop resizing any widgets + mWorkspace.exitWidgetResizeMode(); + if (!mWorkspace.isInOverviewMode()) { + // Show the overview mode + showOverviewMode(true); + } else { + showWorkspace(true); + } return false; } @@ -2789,7 +2811,8 @@ public class Launcher extends Activity // The hotseat touch handling does not go through Workspace, and we always allow long press // on hotseat items. final View itemUnderLongClick = longClickCellInfo.cell; - boolean allowLongPress = isHotseatLayout(v) || mWorkspace.allowLongPress(); + final boolean inHotseat = isHotseatLayout(v); + boolean allowLongPress = inHotseat || mWorkspace.allowLongPress(); if (allowLongPress && !mDragController.isDragging()) { if (itemUnderLongClick == null) { // User long pressed on empty space @@ -2802,7 +2825,11 @@ public class Launcher extends Activity mWorkspace.enterOverviewMode(); } } else { - if (!(itemUnderLongClick instanceof Folder)) { + final boolean isAllAppsButton = inHotseat && isAllAppsButtonRank( + mHotseat.getOrderInHotseat( + longClickCellInfo.cellX, + longClickCellInfo.cellY)); + if (!(itemUnderLongClick instanceof Folder || isAllAppsButton)) { // User long pressed on an item mWorkspace.startDrag(longClickCellInfo); } @@ -3461,11 +3488,11 @@ public class Launcher extends Activity } public View getQsbBar() { - if (mQsbBar == null) { - mQsbBar = mInflater.inflate(R.layout.search_bar, mSearchDropTargetBar, false); - mSearchDropTargetBar.addView(mQsbBar); + if (mQsb == null) { + mQsb = mInflater.inflate(R.layout.qsb, mSearchDropTargetBar, false); + mSearchDropTargetBar.addView(mQsb); } - return mQsbBar; + return mQsb; } protected boolean updateGlobalSearchIcon() { @@ -3924,9 +3951,11 @@ public class Launcher extends Activity // when we are loading right after we return to launcher. mWorkspace.postDelayed(new Runnable() { public void run() { - mWorkspace.snapToPage(newScreenIndex); - mWorkspace.postDelayed(startBounceAnimRunnable, - NEW_APPS_ANIMATION_DELAY); + if (mWorkspace != null) { + mWorkspace.snapToPage(newScreenIndex); + mWorkspace.postDelayed(startBounceAnimRunnable, + NEW_APPS_ANIMATION_DELAY); + } } }, NEW_APPS_PAGE_MOVE_DELAY); } else { @@ -4327,12 +4356,13 @@ public class Launcher extends Activity } private boolean shouldRunFirstRunActivity() { - return !ActivityManager.isRunningInTestHarness(); + return !ActivityManager.isRunningInTestHarness() && + !mSharedPrefs.getBoolean(FIRST_RUN_ACTIVITY_DISPLAYED, false); } public void showFirstRunActivity() { - if (shouldRunFirstRunActivity() && hasFirstRunActivity() - && !mSharedPrefs.getBoolean(FIRST_RUN_ACTIVITY_DISPLAYED, false)) { + if (shouldRunFirstRunActivity() && + hasFirstRunActivity()) { Intent firstRunIntent = getFirstRunActivity(); if (firstRunIntent != null) { startActivity(firstRunIntent); @@ -4348,17 +4378,17 @@ public class Launcher extends Activity } void showWorkspaceSearchAndHotseat() { - mWorkspace.setAlpha(1f); - mHotseat.setAlpha(1f); - mPageIndicators.setAlpha(1f); - mSearchDropTargetBar.showSearchBar(false); + if (mWorkspace != null) mWorkspace.setAlpha(1f); + if (mHotseat != null) mHotseat.setAlpha(1f); + if (mPageIndicators != null) mPageIndicators.setAlpha(1f); + if (mSearchDropTargetBar != null) mSearchDropTargetBar.showSearchBar(false); } void hideWorkspaceSearchAndHotseat() { - mWorkspace.setAlpha(0f); - mHotseat.setAlpha(0f); - mPageIndicators.setAlpha(0f); - mSearchDropTargetBar.hideSearchBar(false); + if (mWorkspace != null) mWorkspace.setAlpha(0f); + if (mHotseat != null) mHotseat.setAlpha(0f); + if (mPageIndicators != null) mPageIndicators.setAlpha(0f); + if (mSearchDropTargetBar != null) mSearchDropTargetBar.hideSearchBar(false); } diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 5e41fcad0..29e18f9c0 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -84,7 +84,7 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { mIsScreenLarge = isScreenLarge(sContext.getResources()); mScreenDensity = sContext.getResources().getDisplayMetrics().density; - mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(sContext); + recreateWidgetPreviewDb(); mIconCache = new IconCache(sContext); mAppFilter = AppFilter.loadByName(sContext.getString(R.string.app_filter_class)); @@ -115,6 +115,13 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true, mFavoritesObserver); } + + public void recreateWidgetPreviewDb() { + if (mWidgetPreviewCacheDb != null) { + mWidgetPreviewCacheDb.close(); + } + mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(sContext); + } /** * Call from Application.onTerminate(), which is not guaranteed to ever be called. @@ -238,4 +245,8 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { return getInstance().mBuildInfo.isDogfoodBuild() && Launcher.isPropertyEnabled(Launcher.DISABLE_ALL_APPS_PROPERTY); } + + public static boolean isDogfoodBuild() { + return getInstance().mBuildInfo.isDogfoodBuild(); + } } diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java index 83e4a60d4..de6aedddd 100644 --- a/src/com/android/launcher3/LauncherBackupAgentHelper.java +++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java @@ -21,13 +21,19 @@ import android.app.backup.BackupManager; import android.app.backup.SharedPreferencesBackupHelper; import android.content.Context; import android.content.SharedPreferences; +import android.provider.Settings; +import android.util.Log; public class LauncherBackupAgentHelper extends BackupAgentHelper { private static final String TAG = "LauncherBackupAgentHelper"; + static final boolean VERBOSE = true; + static final boolean DEBUG = false; private static BackupManager sBackupManager; + protected static final String SETTING_RESTORE_ENABLED = "launcher_restore_enabled"; + /** * Notify the backup manager that out database is dirty. * @@ -54,9 +60,15 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper { @Override public void onCreate() { + boolean restoreEnabled = 0 != Settings.Secure.getInt( + getContentResolver(), SETTING_RESTORE_ENABLED, 0); + if (VERBOSE) Log.v(TAG, "restore is " + (restoreEnabled ? "enabled" : "disabled")); + addHelper(LauncherBackupHelper.LAUNCHER_PREFS_PREFIX, - new SharedPreferencesBackupHelper(this, - LauncherAppState.getSharedPreferencesKey())); - addHelper(LauncherBackupHelper.LAUNCHER_PREFIX, new LauncherBackupHelper(this)); + new LauncherPreferencesBackupHelper(this, + LauncherAppState.getSharedPreferencesKey(), + restoreEnabled)); + addHelper(LauncherBackupHelper.LAUNCHER_PREFIX, + new LauncherBackupHelper(this, restoreEnabled)); } } diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index 68bef0077..4bb358114 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.android.launcher3; import com.google.protobuf.nano.InvalidProtocolBufferNanoException; @@ -38,6 +37,7 @@ import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; import android.content.ComponentName; import android.content.ContentResolver; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.database.Cursor; @@ -67,7 +67,8 @@ import java.util.zip.CRC32; public class LauncherBackupHelper implements BackupHelper { private static final String TAG = "LauncherBackupHelper"; - private static final boolean DEBUG = false; + private static final boolean VERBOSE = LauncherBackupAgentHelper.VERBOSE; + private static final boolean DEBUG = LauncherBackupAgentHelper.DEBUG; private static final boolean DEBUG_PAYLOAD = false; private static final int MAX_JOURNAL_SIZE = 1000000; @@ -137,12 +138,15 @@ public class LauncherBackupHelper implements BackupHelper { private final Context mContext; + private final boolean mRestoreEnabled; + private HashMap<ComponentName, AppWidgetProviderInfo> mWidgetMap; private ArrayList<Key> mKeys; - public LauncherBackupHelper(Context context) { + public LauncherBackupHelper(Context context, boolean restoreEnabled) { mContext = context; + mRestoreEnabled = restoreEnabled; } private void dataChanged() { @@ -167,7 +171,7 @@ public class LauncherBackupHelper implements BackupHelper { @Override public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) { - Log.v(TAG, "onBackup"); + if (VERBOSE) Log.v(TAG, "onBackup"); Journal in = readJournal(oldState); Journal out = new Journal(); @@ -177,7 +181,7 @@ public class LauncherBackupHelper implements BackupHelper { out.rows = 0; out.bytes = 0; - Log.v(TAG, "lastBackupTime=" + lastBackupTime); + Log.v(TAG, "lastBackupTime = " + lastBackupTime); ArrayList<Key> keys = new ArrayList<Key>(); try { @@ -203,7 +207,7 @@ public class LauncherBackupHelper implements BackupHelper { */ @Override public void restoreEntity(BackupDataInputStream data) { - Log.v(TAG, "restoreEntity"); + if (VERBOSE) Log.v(TAG, "restoreEntity"); if (mKeys == null) { mKeys = new ArrayList<Key>(); } @@ -219,10 +223,11 @@ public class LauncherBackupHelper implements BackupHelper { bytesRead = data.read(buffer, 0, dataSize); if (DEBUG) Log.d(TAG, "read " + bytesRead + " of " + dataSize + " available"); } catch (IOException e) { - Log.d(TAG, "failed to read entity from restore data", e); + Log.e(TAG, "failed to read entity from restore data", e); } try { key = backupKeyToKey(backupKey); + mKeys.add(key); switch (key.type) { case Key.FAVORITE: restoreFavorite(key, buffer, dataSize, mKeys); @@ -296,10 +301,13 @@ public class LauncherBackupHelper implements BackupHelper { final long updateTime = cursor.getLong(ID_MODIFIED); Key key = getKey(Key.FAVORITE, id); keys.add(key); - currentIds.add(keyToBackupKey(key)); - if (updateTime >= in.t) { + final String backupKey = keyToBackupKey(key); + currentIds.add(backupKey); + if (!savedIds.contains(backupKey) || updateTime >= in.t) { byte[] blob = packFavorite(cursor); writeRowToBackup(key, blob, out, data); + } else { + if (VERBOSE) Log.v(TAG, "favorite " + id + " was too old: " + updateTime); } } } finally { @@ -323,15 +331,21 @@ public class LauncherBackupHelper implements BackupHelper { * @param keys keys to mark as clean in the notes for next backup */ private void restoreFavorite(Key key, byte[] buffer, int dataSize, ArrayList<Key> keys) { - Log.v(TAG, "unpacking favorite " + key.id + " (" + dataSize + " bytes)"); + if (VERBOSE) Log.v(TAG, "unpacking favorite " + key.id); if (DEBUG) Log.d(TAG, "read (" + buffer.length + "): " + Base64.encodeToString(buffer, 0, dataSize, Base64.NO_WRAP)); + if (!mRestoreEnabled) { + if (VERBOSE) Log.v(TAG, "restore not enabled: skipping database mutation"); + return; + } + try { - Favorite favorite = unpackFavorite(buffer, 0, dataSize); - if (DEBUG) Log.d(TAG, "unpacked " + favorite.itemType); + ContentResolver cr = mContext.getContentResolver(); + ContentValues values = unpackFavorite(buffer, 0, dataSize); + cr.insert(Favorites.CONTENT_URI, values); } catch (InvalidProtocolBufferNanoException e) { - Log.w(TAG, "failed to decode proto", e); + Log.e(TAG, "failed to decode favorite", e); } } @@ -359,15 +373,19 @@ public class LauncherBackupHelper implements BackupHelper { Set<String> currentIds = new HashSet<String>(cursor.getCount()); try { cursor.moveToPosition(-1); + if (DEBUG) Log.d(TAG, "dumping screens after: " + in.t); while(cursor.moveToNext()) { final long id = cursor.getLong(ID_INDEX); final long updateTime = cursor.getLong(ID_MODIFIED); Key key = getKey(Key.SCREEN, id); keys.add(key); - currentIds.add(keyToBackupKey(key)); - if (updateTime >= in.t) { + final String backupKey = keyToBackupKey(key); + currentIds.add(backupKey); + if (!savedIds.contains(backupKey) || updateTime >= in.t) { byte[] blob = packScreen(cursor); writeRowToBackup(key, blob, out, data); + } else { + if (VERBOSE) Log.v(TAG, "screen " + id + " was too old: " + updateTime); } } } finally { @@ -391,14 +409,22 @@ public class LauncherBackupHelper implements BackupHelper { * @param keys keys to mark as clean in the notes for next backup */ private void restoreScreen(Key key, byte[] buffer, int dataSize, ArrayList<Key> keys) { - Log.v(TAG, "unpacking screen " + key.id); + if (VERBOSE) Log.v(TAG, "unpacking screen " + key.id); if (DEBUG) Log.d(TAG, "read (" + buffer.length + "): " + Base64.encodeToString(buffer, 0, dataSize, Base64.NO_WRAP)); + + if (!mRestoreEnabled) { + if (VERBOSE) Log.v(TAG, "restore not enabled: skipping database mutation"); + return; + } + try { - Screen screen = unpackScreen(buffer, 0, dataSize); - if (DEBUG) Log.d(TAG, "unpacked " + screen.rank); + ContentResolver cr = mContext.getContentResolver(); + ContentValues values = unpackScreen(buffer, 0, dataSize); + cr.insert(WorkspaceScreens.CONTENT_URI, values); + } catch (InvalidProtocolBufferNanoException e) { - Log.w(TAG, "failed to decode proto", e); + Log.e(TAG, "failed to decode screen", e); } } @@ -453,14 +479,14 @@ public class LauncherBackupHelper implements BackupHelper { Log.w(TAG, "empty intent on application favorite: " + id); } if (savedIds.contains(backupKey)) { - if (DEBUG) Log.d(TAG, "already saved icon " + backupKey); + if (VERBOSE) Log.v(TAG, "already saved icon " + backupKey); // remember that we already backed this up previously keys.add(key); } else if (backupKey != null) { if (DEBUG) Log.d(TAG, "I can count this high: " + out.rows); if ((out.rows - startRows) < MAX_ICONS_PER_PASS) { - if (DEBUG) Log.d(TAG, "saving icon " + backupKey); + if (VERBOSE) Log.v(TAG, "saving icon " + backupKey); Bitmap icon = iconCache.getIcon(intent); keys.add(key); if (icon != null && !iconCache.isDefaultIcon(icon)) { @@ -468,15 +494,15 @@ public class LauncherBackupHelper implements BackupHelper { writeRowToBackup(key, blob, out, data); } } else { - if (DEBUG) Log.d(TAG, "scheduling another run for icon " + backupKey); + if (VERBOSE) Log.d(TAG, "deferring icon backup " + backupKey); // too many icons for this pass, request another. dataChanged(); } } } catch (URISyntaxException e) { - Log.w(TAG, "invalid URI on application favorite: " + id); + Log.e(TAG, "invalid URI on application favorite: " + id); } catch (IOException e) { - Log.w(TAG, "unable to save application icon for favorite: " + id); + Log.e(TAG, "unable to save application icon for favorite: " + id); } } @@ -501,21 +527,28 @@ public class LauncherBackupHelper implements BackupHelper { * @param keys keys to mark as clean in the notes for next backup */ private void restoreIcon(Key key, byte[] buffer, int dataSize, ArrayList<Key> keys) { - Log.v(TAG, "unpacking icon " + key.id); + if (VERBOSE) Log.v(TAG, "unpacking icon " + key.id); if (DEBUG) Log.d(TAG, "read (" + buffer.length + "): " + Base64.encodeToString(buffer, 0, dataSize, Base64.NO_WRAP)); try { Resource res = unpackIcon(buffer, 0, dataSize); - if (DEBUG) Log.d(TAG, "unpacked " + res.dpi); - if (DEBUG) Log.d(TAG, "read " + + if (DEBUG) Log.d(TAG, "unpacked " + res.dpi + " dpi icon"); + if (DEBUG_PAYLOAD) Log.d(TAG, "read " + Base64.encodeToString(res.data, 0, res.data.length, Base64.NO_WRAP)); Bitmap icon = BitmapFactory.decodeByteArray(res.data, 0, res.data.length); if (icon == null) { Log.w(TAG, "failed to unpack icon for " + key.name); } + + if (!mRestoreEnabled) { + if (VERBOSE) Log.v(TAG, "restore not enabled: skipping database mutation"); + return; + } else { + // future site of icon cache mutation + } } catch (InvalidProtocolBufferNanoException e) { - Log.w(TAG, "failed to decode proto", e); + Log.e(TAG, "failed to decode icon", e); } } @@ -574,14 +607,14 @@ public class LauncherBackupHelper implements BackupHelper { Log.w(TAG, "empty intent on appwidget: " + id); } if (savedIds.contains(backupKey)) { - if (DEBUG) Log.d(TAG, "already saved widget " + backupKey); + if (VERBOSE) Log.v(TAG, "already saved widget " + backupKey); // remember that we already backed this up previously keys.add(key); } else if (backupKey != null) { if (DEBUG) Log.d(TAG, "I can count this high: " + out.rows); if ((out.rows - startRows) < MAX_WIDGETS_PER_PASS) { - if (DEBUG) Log.d(TAG, "saving widget " + backupKey); + if (VERBOSE) Log.v(TAG, "saving widget " + backupKey); previewLoader.setPreviewSize(spanX * profile.cellWidthPx, spanY * profile.cellHeightPx, widgetSpacingLayout); byte[] blob = packWidget(dpi, previewLoader, iconCache, provider); @@ -589,7 +622,7 @@ public class LauncherBackupHelper implements BackupHelper { writeRowToBackup(key, blob, out, data); } else { - if (DEBUG) Log.d(TAG, "scheduling another run for widget " + backupKey); + if (VERBOSE) Log.d(TAG, "deferring widget backup " + backupKey); // too many widgets for this pass, request another. dataChanged(); } @@ -616,7 +649,7 @@ public class LauncherBackupHelper implements BackupHelper { * @param keys keys to mark as clean in the notes for next backup */ private void restoreWidget(Key key, byte[] buffer, int dataSize, ArrayList<Key> keys) { - Log.v(TAG, "unpacking widget " + key.id); + if (VERBOSE) Log.v(TAG, "unpacking widget " + key.id); if (DEBUG) Log.d(TAG, "read (" + buffer.length + "): " + Base64.encodeToString(buffer, 0, dataSize, Base64.NO_WRAP)); try { @@ -629,8 +662,15 @@ public class LauncherBackupHelper implements BackupHelper { Log.w(TAG, "failed to unpack widget icon for " + key.name); } } + + if (!mRestoreEnabled) { + if (VERBOSE) Log.v(TAG, "restore not enabled: skipping database mutation"); + return; + } else { + // future site of widget table mutation + } } catch (InvalidProtocolBufferNanoException e) { - Log.w(TAG, "failed to decode proto", e); + Log.e(TAG, "failed to decode widget", e); } } @@ -765,11 +805,44 @@ public class LauncherBackupHelper implements BackupHelper { } /** Deserialize a Favorite from persistence, after verifying checksum wrapper. */ - private Favorite unpackFavorite(byte[] buffer, int offset, int dataSize) + private ContentValues unpackFavorite(byte[] buffer, int offset, int dataSize) throws InvalidProtocolBufferNanoException { Favorite favorite = new Favorite(); MessageNano.mergeFrom(favorite, readCheckedBytes(buffer, offset, dataSize)); - return favorite; + if (VERBOSE) Log.v(TAG, "unpacked favorite " + favorite.itemType + ", " + + (TextUtils.isEmpty(favorite.title) ? favorite.id : favorite.title)); + ContentValues values = new ContentValues(); + values.put(Favorites._ID, favorite.id); + values.put(Favorites.SCREEN, favorite.screen); + values.put(Favorites.CONTAINER, favorite.container); + values.put(Favorites.CELLX, favorite.cellX); + values.put(Favorites.CELLY, favorite.cellY); + values.put(Favorites.SPANX, favorite.spanX); + values.put(Favorites.SPANY, favorite.spanY); + values.put(Favorites.ICON_TYPE, favorite.iconType); + if (favorite.iconType == Favorites.ICON_TYPE_RESOURCE) { + values.put(Favorites.ICON_PACKAGE, favorite.iconPackage); + values.put(Favorites.ICON_RESOURCE, favorite.iconResource); + } + if (favorite.iconType == Favorites.ICON_TYPE_BITMAP) { + values.put(Favorites.ICON, favorite.icon); + } + if (!TextUtils.isEmpty(favorite.title)) { + values.put(Favorites.TITLE, favorite.title); + } else { + values.put(Favorites.TITLE, ""); + } + if (!TextUtils.isEmpty(favorite.intent)) { + values.put(Favorites.INTENT, favorite.intent); + } + values.put(Favorites.ITEM_TYPE, favorite.itemType); + if (favorite.itemType == Favorites.ITEM_TYPE_APPWIDGET) { + if (!TextUtils.isEmpty(favorite.appWidgetProvider)) { + values.put(Favorites.APPWIDGET_PROVIDER, favorite.appWidgetProvider); + } + values.put(Favorites.APPWIDGET_ID, favorite.appWidgetId); + } + return values; } /** Serialize a Screen for persistence, including a checksum wrapper. */ @@ -782,11 +855,15 @@ public class LauncherBackupHelper implements BackupHelper { } /** Deserialize a Screen from persistence, after verifying checksum wrapper. */ - private Screen unpackScreen(byte[] buffer, int offset, int dataSize) + private ContentValues unpackScreen(byte[] buffer, int offset, int dataSize) throws InvalidProtocolBufferNanoException { Screen screen = new Screen(); MessageNano.mergeFrom(screen, readCheckedBytes(buffer, offset, dataSize)); - return screen; + if (VERBOSE) Log.v(TAG, "unpacked screen " + screen.id + "/" + screen.rank); + ContentValues values = new ContentValues(); + values.put(WorkspaceScreens._ID, screen.id); + values.put(WorkspaceScreens.SCREEN_RANK, screen.rank); + return values; } /** Serialize an icon Resource for persistence, including a checksum wrapper. */ @@ -805,6 +882,7 @@ public class LauncherBackupHelper implements BackupHelper { throws InvalidProtocolBufferNanoException { Resource res = new Resource(); MessageNano.mergeFrom(res, readCheckedBytes(buffer, offset, dataSize)); + if (VERBOSE) Log.v(TAG, "unpacked icon " + res.dpi + "/" + res.data.length); return res; } @@ -843,6 +921,7 @@ public class LauncherBackupHelper implements BackupHelper { throws InvalidProtocolBufferNanoException { Widget widget = new Widget(); MessageNano.mergeFrom(widget, readCheckedBytes(buffer, offset, dataSize)); + if (VERBOSE) Log.v(TAG, "unpacked widget " + widget.provider); return widget; } @@ -853,7 +932,7 @@ public class LauncherBackupHelper implements BackupHelper { * in that case, do a full backup. * * @param oldState the read-0only file descriptor pointing to the old journal - * @return a Journal protocol bugffer + * @return a Journal protocol buffer */ private Journal readJournal(ParcelFileDescriptor oldState) { Journal journal = new Journal(); @@ -862,47 +941,61 @@ public class LauncherBackupHelper implements BackupHelper { } FileInputStream inStream = new FileInputStream(oldState.getFileDescriptor()); try { - int remaining = inStream.available(); - if (DEBUG) Log.d(TAG, "available " + remaining); - if (remaining < MAX_JOURNAL_SIZE) { - byte[] buffer = new byte[remaining]; + int availableBytes = inStream.available(); + if (DEBUG) Log.d(TAG, "available " + availableBytes); + if (availableBytes < MAX_JOURNAL_SIZE) { + byte[] buffer = new byte[availableBytes]; int bytesRead = 0; - while (remaining > 0) { + boolean valid = false; + InvalidProtocolBufferNanoException lastProtoException = null; + while (availableBytes > 0) { try { - int result = inStream.read(buffer, bytesRead, remaining); + // OMG what are you doing? This is crazy inefficient! + // If we read a byte that is not ours, we will cause trouble: b/12491813 + // However, we don't know how many bytes to expect (oops). + // So we have to step through *slowly*, watching for the end. + int result = inStream.read(buffer, bytesRead, 1); if (result > 0) { - if (DEBUG) Log.d(TAG, "read some bytes: " + result); - remaining -= result; + availableBytes -= result; bytesRead += result; + if (DEBUG && (bytesRead % 100 == 0)) { + Log.d(TAG, "read some bytes: " + bytesRead); + } } else { - // stop reading ands see what there is to parse - Log.w(TAG, "read error: " + result); - remaining = 0; + Log.w(TAG, "unexpected end of file while reading journal."); + // stop reading and see what there is to parse + availableBytes = 0; } } catch (IOException e) { - Log.w(TAG, "failed to read the journal", e); buffer = null; - remaining = 0; + availableBytes = 0; } - } - if (DEBUG) Log.d(TAG, "journal bytes read: " + bytesRead); - if (buffer != null) { + // check the buffer to see if we have a valid journal try { MessageNano.mergeFrom(journal, readCheckedBytes(buffer, 0, bytesRead)); + // if we are here, then we have read a valid, checksum-verified journal + valid = true; + availableBytes = 0; + if (VERBOSE) Log.v(TAG, "read " + bytesRead + " bytes of journal"); } catch (InvalidProtocolBufferNanoException e) { - Log.d(TAG, "failed to read the journal", e); + // if we don't have the whole journal yet, mergeFrom will throw. keep going. + lastProtoException = e; journal.clear(); } } + if (DEBUG) Log.d(TAG, "journal bytes read: " + bytesRead); + if (!valid) { + Log.w(TAG, "could not find a valid journal", lastProtoException); + } } } catch (IOException e) { - Log.d(TAG, "failed to close the journal", e); + Log.w(TAG, "failed to close the journal", e); } finally { try { inStream.close(); } catch (IOException e) { - Log.d(TAG, "failed to close the journal", e); + Log.w(TAG, "failed to close the journal", e); } } return journal; @@ -915,7 +1008,7 @@ public class LauncherBackupHelper implements BackupHelper { data.writeEntityData(blob, blob.length); out.rows++; out.bytes += blob.length; - Log.v(TAG, "saving " + geKeyType(key) + " " + backupKey + ": " + + if (VERBOSE) Log.v(TAG, "saving " + geKeyType(key) + " " + backupKey + ": " + getKeyName(key) + "/" + blob.length); if(DEBUG_PAYLOAD) { String encoded = Base64.encodeToString(blob, 0, blob.length, Base64.NO_WRAP); @@ -923,7 +1016,7 @@ public class LauncherBackupHelper implements BackupHelper { for (int offset = 0; offset < encoded.length(); offset += chunkSize) { int end = offset + chunkSize; end = Math.min(end, encoded.length()); - Log.d(TAG, "wrote " + encoded.substring(offset, end)); + Log.w(TAG, "wrote " + encoded.substring(offset, end)); } } } @@ -943,7 +1036,7 @@ public class LauncherBackupHelper implements BackupHelper { throws IOException { int rows = 0; for(String deleted: deletedIds) { - Log.v(TAG, "dropping icon " + deleted); + if (VERBOSE) Log.v(TAG, "dropping deleted item " + deleted); data.writeEntityHeader(deleted, -1); rows++; } @@ -963,10 +1056,12 @@ public class LauncherBackupHelper implements BackupHelper { FileOutputStream outStream = null; try { outStream = new FileOutputStream(newState.getFileDescriptor()); - outStream.write(writeCheckedBytes(journal)); + final byte[] journalBytes = writeCheckedBytes(journal); + outStream.write(journalBytes); outStream.close(); + if (VERBOSE) Log.v(TAG, "wrote " + journalBytes.length + " bytes of journal"); } catch (IOException e) { - Log.d(TAG, "failed to write backup journal", e); + Log.w(TAG, "failed to write backup journal", e); } } diff --git a/src/com/android/launcher3/LauncherClings.java b/src/com/android/launcher3/LauncherClings.java index 45f068b87..00711fe4b 100644 --- a/src/com/android/launcher3/LauncherClings.java +++ b/src/com/android/launcher3/LauncherClings.java @@ -23,6 +23,7 @@ import android.animation.AnimatorListenerAdapter; import android.app.ActivityManager; import android.content.Context; import android.content.SharedPreferences; +import android.graphics.Rect; import android.os.Bundle; import android.os.UserManager; import android.view.LayoutInflater; @@ -34,7 +35,8 @@ import android.widget.TextView; class LauncherClings { private static final String FIRST_RUN_CLING_DISMISSED_KEY = "cling_gel.first_run.dismissed"; private static final String MIGRATION_CLING_DISMISSED_KEY = "cling_gel.migration.dismissed"; - private static final String MIGRATION_WORKSPACE_CLING_DISMISSED_KEY = "cling_gel.migration.dismissed"; + private static final String MIGRATION_WORKSPACE_CLING_DISMISSED_KEY = + "cling_gel.migration_workspace.dismissed"; private static final String WORKSPACE_CLING_DISMISSED_KEY = "cling_gel.workspace.dismissed"; private static final String FOLDER_CLING_DISMISSED_KEY = "cling_gel.folder.dismissed"; @@ -61,7 +63,7 @@ class LauncherClings { Cling cling = (Cling) mLauncher.findViewById(clingId); View scrim = null; if (scrimId > 0) { - scrim = mLauncher.findViewById(R.id.cling_scrim); + scrim = mLauncher.findViewById(scrimId); } if (cling != null) { cling.init(mLauncher, scrim); @@ -76,21 +78,11 @@ class LauncherClings { } /** Returns whether the clings are enabled or should be shown */ - private boolean isClingsEnabled() { + private boolean areClingsEnabled() { if (DISABLE_CLINGS) { return false; } - // For now, limit only to phones - LauncherAppState app = LauncherAppState.getInstance(); - DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); - if (grid.isTablet()) { - return false; - } - if (grid.isLandscape) { - return false; - } - // disable clings when running in a test harness if(ActivityManager.isRunningInTestHarness()) return false; @@ -202,9 +194,10 @@ class LauncherClings { public boolean shouldShowFirstRunOrMigrationClings() { SharedPreferences sharedPrefs = mLauncher.getSharedPrefs(); - return isClingsEnabled() && + return areClingsEnabled() && !sharedPrefs.getBoolean(FIRST_RUN_CLING_DISMISSED_KEY, false) && - !sharedPrefs.getBoolean(MIGRATION_CLING_DISMISSED_KEY, false); + !sharedPrefs.getBoolean(MIGRATION_CLING_DISMISSED_KEY, false) && + LauncherAppState.getLauncherProvider().wasNewDbCreated(); } public void removeFirstRunAndMigrationClings() { @@ -271,7 +264,7 @@ class LauncherClings { public void showMigrationWorkspaceCling() { // Enable the clings only if they have not been dismissed before - if (isClingsEnabled() && !mLauncher.getSharedPrefs().getBoolean( + if (areClingsEnabled() && !mLauncher.getSharedPrefs().getBoolean( MIGRATION_WORKSPACE_CLING_DISMISSED_KEY, false)) { Cling c = initCling(R.id.migration_workspace_cling, 0, false, true); c.updateMigrationWorkspaceBubblePosition(); @@ -284,9 +277,10 @@ class LauncherClings { public void showWorkspaceCling() { // Enable the clings only if they have not been dismissed before - if (isClingsEnabled() && !mLauncher.getSharedPrefs().getBoolean( + if (areClingsEnabled() && !mLauncher.getSharedPrefs().getBoolean( WORKSPACE_CLING_DISMISSED_KEY, false)) { Cling c = initCling(R.id.workspace_cling, 0, false, true); + c.updateWorkspaceBubblePosition(); // Set the focused hotseat app if there is one c.setFocusedHotseatApp(mLauncher.getFirstRunFocusedHotseatAppDrawableId(), @@ -301,11 +295,18 @@ class LauncherClings { public Cling showFoldersCling() { SharedPreferences sharedPrefs = mLauncher.getSharedPrefs(); // Enable the clings only if they have not been dismissed before - if (isClingsEnabled() && + if (areClingsEnabled() && !sharedPrefs.getBoolean(FOLDER_CLING_DISMISSED_KEY, false) && !sharedPrefs.getBoolean(Launcher.USER_HAS_MIGRATED, false)) { Cling cling = initCling(R.id.folder_cling, R.id.cling_scrim, true, true); + Folder openFolder = mLauncher.getWorkspace().getOpenFolder(); + if (openFolder != null) { + Rect openFolderRect = new Rect(); + openFolder.getHitRect(openFolderRect); + cling.setOpenFolderRect(openFolderRect); + openFolder.bringToFront(); + } return cling; } else { removeCling(R.id.folder_cling); @@ -385,14 +386,14 @@ class LauncherClings { showMigrationWorkspaceCling(); } }; - dismissCling(cling, cb, WORKSPACE_CLING_DISMISSED_KEY, + dismissCling(cling, cb, MIGRATION_CLING_DISMISSED_KEY, DISMISS_CLING_DURATION, true); } }; mLauncher.getWorkspace().post(dismissCb); } - private void dismissAnyWorkspaceCling(Cling cling, View v) { + private void dismissAnyWorkspaceCling(Cling cling, String key, View v) { Runnable cb = null; if (v == null) { cb = new Runnable() { @@ -401,8 +402,7 @@ class LauncherClings { } }; } - dismissCling(cling, cb, WORKSPACE_CLING_DISMISSED_KEY, - DISMISS_CLING_DURATION, true); + dismissCling(cling, cb, key, DISMISS_CLING_DURATION, true); // Fade in the search bar mLauncher.getSearchBar().showSearchBar(true); @@ -440,12 +440,12 @@ class LauncherClings { public void dismissMigrationWorkspaceCling(View v) { Cling cling = (Cling) mLauncher.findViewById(R.id.migration_workspace_cling); - dismissAnyWorkspaceCling(cling, v); + dismissAnyWorkspaceCling(cling, MIGRATION_WORKSPACE_CLING_DISMISSED_KEY, v); } public void dismissWorkspaceCling(View v) { Cling cling = (Cling) mLauncher.findViewById(R.id.workspace_cling); - dismissAnyWorkspaceCling(cling, v); + dismissAnyWorkspaceCling(cling, WORKSPACE_CLING_DISMISSED_KEY, v); } public void dismissFolderCling(View v) { diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 4478e9bbd..2102a1fac 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2709,7 +2709,7 @@ public class LauncherModel extends BroadcastReceiver { return widgetsAndShortcuts; } - private boolean isPackageDisabled(PackageManager pm, String packageName) { + private static boolean isPackageDisabled(PackageManager pm, String packageName) { try { PackageInfo pi = pm.getPackageInfo(packageName, 0); return !pi.applicationInfo.enabled; @@ -2718,7 +2718,8 @@ public class LauncherModel extends BroadcastReceiver { } return false; } - private boolean isValidPackageComponent(PackageManager pm, ComponentName cn) { + + public static boolean isValidPackageComponent(PackageManager pm, ComponentName cn) { if (cn == null) { return false; } diff --git a/src/com/android/launcher3/LauncherPreferencesBackupHelper.java b/src/com/android/launcher3/LauncherPreferencesBackupHelper.java new file mode 100644 index 000000000..6f9c05c88 --- /dev/null +++ b/src/com/android/launcher3/LauncherPreferencesBackupHelper.java @@ -0,0 +1,44 @@ +/* + * 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. + */ + +package com.android.launcher3; + +import android.app.backup.BackupDataInputStream; +import android.app.backup.SharedPreferencesBackupHelper; +import android.content.Context; +import android.util.Log; + +public class LauncherPreferencesBackupHelper extends SharedPreferencesBackupHelper { + + private static final String TAG = "LauncherPreferencesBackupHelper"; + private static final boolean VERBOSE = LauncherBackupAgentHelper.VERBOSE; + + private final boolean mRestoreEnabled; + + public LauncherPreferencesBackupHelper(Context context, String sharedPreferencesKey, + boolean restoreEnabled) { + super(context, sharedPreferencesKey); + mRestoreEnabled = restoreEnabled; + } + + @Override + public void restoreEntity(BackupDataInputStream data) { + if (mRestoreEnabled) { + if (VERBOSE) Log.v(TAG, "restoring preferences"); + super.restoreEntity(data); + } + } +} diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 7adbadea1..52bcf98e7 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -108,6 +108,10 @@ public class LauncherProvider extends ContentProvider { return true; } + public boolean wasNewDbCreated() { + return mOpenHelper.wasNewDbCreated(); + } + @Override public String getType(Uri uri) { SqlArguments args = new SqlArguments(uri, null, null); @@ -138,9 +142,10 @@ public class LauncherProvider extends ContentProvider { if (values == null) { throw new RuntimeException("Error: attempting to insert null values"); } - if (!values.containsKey(LauncherSettings.Favorites._ID)) { + if (!values.containsKey(LauncherSettings.BaseLauncherColumns._ID)) { throw new RuntimeException("Error: attempting to add item without specifying an id"); } + helper.checkId(table, values); return db.insert(table, nullColumnHack, values); } @@ -271,6 +276,7 @@ public class LauncherProvider extends ContentProvider { SharedPreferences sp = getContext().getSharedPreferences(spKey, Context.MODE_PRIVATE); if (sp.getBoolean(EMPTY_DATABASE_CREATED, false)) { + Log.d(TAG, "loading default workspace"); int workspaceResId = origWorkspaceResId; // Use default workspace resource if none provided @@ -319,9 +325,11 @@ public class LauncherProvider extends ContentProvider { public void deleteDatabase() { // Are you sure? (y/n) final SQLiteDatabase db = mOpenHelper.getWritableDatabase(); - final String dbFile = db.getPath(); + final File dbFile = new File(db.getPath()); mOpenHelper.close(); - SQLiteDatabase.deleteDatabase(new File(dbFile)); + if (dbFile.exists()) { + SQLiteDatabase.deleteDatabase(dbFile); + } mOpenHelper = new DatabaseHelper(getContext()); } @@ -341,6 +349,8 @@ public class LauncherProvider extends ContentProvider { private long mMaxItemId = -1; private long mMaxScreenId = -1; + private boolean mNewDbCreated = false; + DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); mContext = context; @@ -356,6 +366,10 @@ public class LauncherProvider extends ContentProvider { } } + public boolean wasNewDbCreated() { + return mNewDbCreated; + } + /** * Send notification that we've deleted the {@link AppWidgetHost}, * probably as part of the initial database creation. The receiver may @@ -373,6 +387,7 @@ public class LauncherProvider extends ContentProvider { mMaxItemId = 1; mMaxScreenId = 0; + mNewDbCreated = true; db.execSQL("CREATE TABLE favorites (" + "_id INTEGER PRIMARY KEY," + @@ -882,6 +897,15 @@ public class LauncherProvider extends ContentProvider { mMaxItemId = id + 1; } + public void checkId(String table, ContentValues values) { + long id = values.getAsLong(LauncherSettings.BaseLauncherColumns._ID); + if (table == LauncherProvider.TABLE_WORKSPACE_SCREENS) { + mMaxScreenId = Math.max(id, mMaxScreenId); + } else { + mMaxItemId = Math.max(id, mMaxItemId); + } + } + private long initializeMaxItemId(SQLiteDatabase db) { Cursor c = db.rawQuery("SELECT MAX(_id) FROM favorites", null); @@ -1463,7 +1487,6 @@ public class LauncherProvider extends ContentProvider { // Ignore } - // We already have a favorites database in the old provider if (c != null) { try { @@ -1505,10 +1528,12 @@ public class LauncherProvider extends ContentProvider { final int width = (int) grid.numColumns; final int height = (int) grid.numRows; final int hotseatWidth = (int) grid.numHotseatIcons; + PackageManager pm = mContext.getPackageManager(); final HashSet<String> seenIntents = new HashSet<String>(c.getCount()); - final ContentValues[] rows = new ContentValues[c.getCount()]; + final ArrayList<ContentValues> shortcuts = new ArrayList<ContentValues>(); + final ArrayList<ContentValues> folders = new ArrayList<ContentValues>(); while (c.moveToNext()) { final int itemType = c.getInt(itemTypeIndex); @@ -1527,29 +1552,43 @@ public class LauncherProvider extends ContentProvider { + c.getString(titleIndex) + "\": " + intentStr, true); if (itemType != Favorites.ITEM_TYPE_FOLDER) { + + final Intent intent; + final ComponentName cn; + try { + intent = Intent.parseUri(intentStr, 0); + } catch (URISyntaxException e) { + // bogus intent? + Launcher.addDumpLog(TAG, + "skipping invalid intent uri", true); + continue; + } + + cn = intent.getComponent(); if (TextUtils.isEmpty(intentStr)) { // no intent? no icon Launcher.addDumpLog(TAG, "skipping empty intent", true); continue; - } else { - try { - // Canonicalize - final Intent intent = Intent.parseUri(intentStr, 0); - // the Play Store sets the package parameter, but Launcher - // does not, so we clear that out to keep them the same - intent.setPackage(null); - final String key = intent.toUri(0); - if (seenIntents.contains(key)) { - Launcher.addDumpLog(TAG, "skipping duplicate", true); - continue; - } else { - seenIntents.add(key); - } - } catch (URISyntaxException e) { - // bogus intent? - Launcher.addDumpLog(TAG, - "skipping invalid intent uri", true); + } else if (cn != null && + !LauncherModel.isValidPackageComponent(pm, cn)) { + // component no longer exists. + Launcher.addDumpLog(TAG, "skipping item whose component " + + "no longer exists.", true); + continue; + } else if (container == + LauncherSettings.Favorites.CONTAINER_DESKTOP) { + // Dedupe icons directly on the workspace + + // Canonicalize + // the Play Store sets the package parameter, but Launcher + // does not, so we clear that out to keep them the same + intent.setPackage(null); + final String key = intent.toUri(0); + if (seenIntents.contains(key)) { + Launcher.addDumpLog(TAG, "skipping duplicate", true); continue; + } else { + seenIntents.add(key); } } } @@ -1572,7 +1611,8 @@ public class LauncherProvider extends ContentProvider { c.getInt(displayModeIndex)); if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT - && screen >= hotseatWidth) { + && (screen >= hotseatWidth || + screen == grid.hotseatAllAppsRank)) { // no room for you in the hotseat? it's off to the desktop with you container = Favorites.CONTAINER_DESKTOP; } @@ -1583,32 +1623,53 @@ public class LauncherProvider extends ContentProvider { values.put(LauncherSettings.Favorites.CELLX, cellX); values.put(LauncherSettings.Favorites.CELLY, cellY); } else { - values.put(LauncherSettings.Favorites.SCREEN, curScreen); - values.put(LauncherSettings.Favorites.CELLX, curX); - values.put(LauncherSettings.Favorites.CELLY, curY); - curX = (curX + 1) % width; - if (curX == 0) { - curY = (curY + 1); - } - // Leave the last row of icons blank on screen 0 - if (curScreen == 0 && curY == height - 1 || curY == height) { - curScreen = (int) generateNewScreenId(); - curY = 0; - } + // For items contained directly on one of the workspace screen, + // we'll determine their location (screen, x, y) in a second pass. } values.put(LauncherSettings.Favorites.CONTAINER, container); - rows[i++] = values; + if (itemType != Favorites.ITEM_TYPE_FOLDER) { + shortcuts.add(values); + } else { + folders.add(values); + } + } + + final ArrayList<ContentValues> allItems = new ArrayList<ContentValues>(); + // Folders first + allItems.addAll(folders); + // Then shortcuts + allItems.addAll(shortcuts); + + // Layout all the folders + for (ContentValues values: allItems) { + if (values.getAsInteger(LauncherSettings.Favorites.CONTAINER) != + LauncherSettings.Favorites.CONTAINER_DESKTOP) { + // Hotseat items and folder items have already had their + // location information set. Nothing to be done here. + continue; + } + values.put(LauncherSettings.Favorites.SCREEN, curScreen); + values.put(LauncherSettings.Favorites.CELLX, curX); + values.put(LauncherSettings.Favorites.CELLY, curY); + curX = (curX + 1) % width; + if (curX == 0) { + curY = (curY + 1); + } + // Leave the last row of icons blank on every screen + if (curY == height - 1) { + curScreen = (int) generateNewScreenId(); + curY = 0; + } } - if (i > 0) { + if (allItems.size() > 0) { db.beginTransaction(); try { - final int N = rows.length; - for (i = 0; i < N; i++) { - if (rows[i] == null) continue; - if (dbInsertAndCheck(this, db, TABLE_FAVORITES, null, rows[i]) + for (ContentValues row: allItems) { + if (row == null) continue; + if (dbInsertAndCheck(this, db, TABLE_FAVORITES, null, row) < 0) { return; } else { diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index 7e1ad6d76..3db0b51ad 100644 --- a/src/com/android/launcher3/WidgetPreviewLoader.java +++ b/src/com/android/launcher3/WidgetPreviewLoader.java @@ -10,6 +10,7 @@ import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteDiskIOException; import android.database.sqlite.SQLiteOpenHelper; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; @@ -164,6 +165,12 @@ public class WidgetPreviewLoader { editor.commit(); } } + + public void recreateDb() { + LauncherAppState app = LauncherAppState.getInstance(); + app.recreateWidgetPreviewDb(); + mDb = app.getWidgetPreviewCacheDb(); + } public void setPreviewSize(int previewWidth, int previewHeight, PagedViewCellLayout widgetSpacingLayout) { @@ -347,13 +354,20 @@ public class WidgetPreviewLoader { preview.compress(Bitmap.CompressFormat.PNG, 100, stream); values.put(CacheDb.COLUMN_PREVIEW_BITMAP, stream.toByteArray()); values.put(CacheDb.COLUMN_SIZE, mSize); - db.insert(CacheDb.TABLE_NAME, null, values); + try { + db.insert(CacheDb.TABLE_NAME, null, values); + } catch (SQLiteDiskIOException e) { + recreateDb(); + } } private void clearDb() { SQLiteDatabase db = mDb.getWritableDatabase(); // Delete everything - db.delete(CacheDb.TABLE_NAME, null, null); + try { + db.delete(CacheDb.TABLE_NAME, null, null); + } catch (SQLiteDiskIOException e) { + } } public static void removePackageFromDb(final CacheDb cacheDb, final String packageName) { @@ -363,13 +377,17 @@ public class WidgetPreviewLoader { new AsyncTask<Void, Void, Void>() { public Void doInBackground(Void ... args) { SQLiteDatabase db = cacheDb.getWritableDatabase(); - db.delete(CacheDb.TABLE_NAME, - CacheDb.COLUMN_NAME + " LIKE ? OR " + - CacheDb.COLUMN_NAME + " LIKE ?", // SELECT query - new String[] { - WIDGET_PREFIX + packageName + "/%", - SHORTCUT_PREFIX + packageName + "/%"} // args to SELECT query - ); + try { + db.delete(CacheDb.TABLE_NAME, + CacheDb.COLUMN_NAME + " LIKE ? OR " + + CacheDb.COLUMN_NAME + " LIKE ?", // SELECT query + new String[] { + WIDGET_PREFIX + packageName + "/%", + SHORTCUT_PREFIX + packageName + "/%" + } // args to SELECT query + ); + } catch (SQLiteDiskIOException e) { + } synchronized(sInvalidPackages) { sInvalidPackages.remove(packageName); } @@ -382,9 +400,12 @@ public class WidgetPreviewLoader { new AsyncTask<Void, Void, Void>() { public Void doInBackground(Void ... args) { SQLiteDatabase db = cacheDb.getWritableDatabase(); - db.delete(CacheDb.TABLE_NAME, - CacheDb.COLUMN_NAME + " = ? ", // SELECT query - new String[] { objectName }); // args to SELECT query + try { + db.delete(CacheDb.TABLE_NAME, + CacheDb.COLUMN_NAME + " = ? ", // SELECT query + new String[] { objectName }); // args to SELECT query + } catch (SQLiteDiskIOException e) { + } return null; } }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); @@ -396,14 +417,20 @@ public class WidgetPreviewLoader { CacheDb.COLUMN_SIZE + " = ?"; } SQLiteDatabase db = mDb.getReadableDatabase(); - Cursor result = db.query(CacheDb.TABLE_NAME, - new String[] { CacheDb.COLUMN_PREVIEW_BITMAP }, // cols to return - mCachedSelectQuery, // select query - new String[] { name, mSize }, // args to select query - null, - null, - null, - null); + Cursor result; + try { + result = db.query(CacheDb.TABLE_NAME, + new String[] { CacheDb.COLUMN_PREVIEW_BITMAP }, // cols to return + mCachedSelectQuery, // select query + new String[] { name, mSize }, // args to select query + null, + null, + null, + null); + } catch (SQLiteDiskIOException e) { + recreateDb(); + return null; + } if (result.getCount() > 0) { result.moveToFirst(); byte[] blob = result.getBlob(0); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 2ce9eb3ad..359fd8640 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4051,7 +4051,13 @@ public class Workspace extends SmoothPagedView } else { cellLayout = getScreenWithId(mDragInfo.screenId); } - cellLayout.onDropChild(mDragInfo.cell); + if (cellLayout == null && LauncherAppState.isDogfoodBuild()) { + throw new RuntimeException("Invalid state: cellLayout == null in " + + "Workspace#onDropCompleted. Please file a bug. "); + } + if (cellLayout != null) { + cellLayout.onDropChild(mDragInfo.cell); + } } if ((d.cancelled || (beingCalledAfterUninstall && !mUninstallSuccessful)) && mDragInfo.cell != null) { |