diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 36fa4c190a..d4cd6a2bea 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -25,7 +25,7 @@ + android:protectionLevel="signatureOrSystem" /> @@ -106,7 +106,7 @@ - - - + android:layout_height="match_parent" + android:paddingRight="20dp" + android:drawableLeft="@drawable/ic_actionbar_accept" + android:drawablePadding="8dp" + android:gravity="start|center_vertical" + android:text="@string/wallpaper_instructions"> + diff --git a/WallpaperPicker/res/values/styles.xml b/WallpaperPicker/res/values/styles.xml index 6d600bcdc0..16b11f279f 100644 --- a/WallpaperPicker/res/values/styles.xml +++ b/WallpaperPicker/res/values/styles.xml @@ -24,6 +24,12 @@ true + + + + diff --git a/WallpaperPicker/src/com/android/launcher3/AlphaDisableableButton.java b/WallpaperPicker/src/com/android/launcher3/AlphaDisableableButton.java new file mode 100644 index 0000000000..f0796c36fa --- /dev/null +++ b/WallpaperPicker/src/com/android/launcher3/AlphaDisableableButton.java @@ -0,0 +1,50 @@ +/* + * 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.content.Context; +import android.util.AttributeSet; +import android.widget.Button; + +/** + * A Button which becomes translucent when it is disabled + */ +public class AlphaDisableableButton extends Button { + public static float DISABLED_ALPHA_VALUE = 0.4f; + public AlphaDisableableButton(Context context) { + this(context, null); + } + + public AlphaDisableableButton(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public AlphaDisableableButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + setLayerType(LAYER_TYPE_HARDWARE, null); + } + + @Override + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + if(enabled) { + setAlpha(1.0f); + } else { + setAlpha(DISABLED_ALPHA_VALUE); + } + } +} diff --git a/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java b/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java index 60b253711b..88f4461bfa 100644 --- a/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java +++ b/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java @@ -122,7 +122,7 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter Intent preview = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER); preview.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, mInfo.getComponent()); - a.onLiveWallpaperPickerLaunch(); + a.onLiveWallpaperPickerLaunch(mInfo); a.startActivityForResultSafely(preview, WallpaperPickerActivity.PICK_LIVE_WALLPAPER); } } diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java index 23fbe73a32..561c4bb6a3 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java @@ -75,7 +75,7 @@ public class WallpaperCropActivity extends Activity { protected CropView mCropView; protected Uri mUri; - private View mSetWallpaperButton; + protected View mSetWallpaperButton; @Override protected void onCreate(Bundle savedInstanceState) { @@ -117,7 +117,7 @@ public class WallpaperCropActivity extends Activity { // Load image in background final BitmapRegionTileSource.UriBitmapSource bitmapSource = new BitmapRegionTileSource.UriBitmapSource(this, imageUri, 1024); - mSetWallpaperButton.setVisibility(View.INVISIBLE); + mSetWallpaperButton.setEnabled(false); Runnable onLoad = new Runnable() { public void run() { if (bitmapSource.getLoadingState() != BitmapSource.State.LOADED) { @@ -126,7 +126,7 @@ public class WallpaperCropActivity extends Activity { Toast.LENGTH_LONG).show(); finish(); } else { - mSetWallpaperButton.setVisibility(View.VISIBLE); + mSetWallpaperButton.setEnabled(true); } } }; diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index aa43def66f..013606a50f 100644 --- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -16,7 +16,6 @@ package com.android.launcher3; -import android.animation.Animator; import android.animation.LayoutTransition; import android.app.ActionBar; import android.app.Activity; @@ -33,7 +32,6 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; -import android.graphics.Paint; import android.graphics.Point; import android.graphics.PorterDuff; import android.graphics.Rect; @@ -60,6 +58,7 @@ import android.view.ViewGroup; import android.view.ViewPropertyAnimator; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; +import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.widget.BaseAdapter; @@ -88,9 +87,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { 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"; + private static final int FLAG_POST_DELAY_MILLIS = 200; private View mSelectedTile; - private View mSetWallpaperButton; private boolean mIgnoreNextTap; private OnClickListener mThumbnailOnClickListener; @@ -105,7 +104,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { ArrayList mTempWallpaperTiles = new ArrayList(); private SavedWallpaperImages mSavedImages; private WallpaperInfo mLiveWallpaperInfoOnPickerLaunch; - private int mSelectedIndex; + private int mSelectedIndex = -1; + private WallpaperInfo mLastClickedLiveWallpaperInfo; public static abstract class WallpaperTileInfo { protected View mView; @@ -147,13 +147,13 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { onLoad = null; } else { mFirstClick = false; - a.mSetWallpaperButton.setVisibility(View.INVISIBLE); + a.mSetWallpaperButton.setEnabled(false); onLoad = new Runnable() { public void run() { if (mBitmapSource != null && mBitmapSource.getLoadingState() == BitmapSource.State.LOADED) { a.selectTile(mView); - a.mSetWallpaperButton.setVisibility(View.VISIBLE); + a.mSetWallpaperButton.setEnabled(true); } else { ViewGroup parent = (ViewGroup) mView.getParent(); if (parent != null) { @@ -220,6 +220,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { wallpaperSize.x, wallpaperSize.y, false); v.setScale(wallpaperSize.x / crop.width()); v.setTouchEnabled(false); + a.setSystemWallpaperVisiblity(false); } @Override public void onSave(WallpaperPickerActivity a) { @@ -248,15 +249,23 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { Drawable defaultWallpaper = WallpaperManager.getInstance(a).getBuiltInDrawable( c.getWidth(), c.getHeight(), false, 0.5f, 0.5f); + if (defaultWallpaper == null) { + Log.w(TAG, "Null default wallpaper encountered."); + c.setTileSource(null, null); + return; + } + c.setTileSource( new DrawableTileSource(a, defaultWallpaper, DrawableTileSource.MAX_PREVIEW_SIZE), null); c.setScale(1f); c.setTouchEnabled(false); + a.setSystemWallpaperVisiblity(false); } @Override public void onSave(WallpaperPickerActivity a) { try { WallpaperManager.getInstance(a).clear(); + a.setResult(RESULT_OK); } catch (IOException e) { Log.w("Setting wallpaper to default threw exception", e); } @@ -276,11 +285,70 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mWallpaperStrip.setPadding(0, 0, 0, (int) offset); } + /** + * shows the system wallpaper behind the window and hides the {@link + * #mCropView} if visible + * @param visible should the system wallpaper be shown + */ + protected void setSystemWallpaperVisiblity(final boolean visible) { + // hide our own wallpaper preview if necessary + if(!visible) { + mCropView.setVisibility(View.VISIBLE); + } else { + changeWallpaperFlags(visible); + } + // the change of the flag must be delayed in order to avoid flickering, + // a simple post / double post does not suffice here + mCropView.postDelayed(new Runnable() { + @Override + public void run() { + if(!visible) { + changeWallpaperFlags(visible); + } else { + mCropView.setVisibility(View.INVISIBLE); + } + } + }, FLAG_POST_DELAY_MILLIS); + } + + private void changeWallpaperFlags(boolean visible) { + int desiredWallpaperFlag = visible ? WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER : 0; + int currentWallpaperFlag = getWindow().getAttributes().flags + & WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; + if (desiredWallpaperFlag != currentWallpaperFlag) { + getWindow().setFlags(desiredWallpaperFlag, + WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER); + } + } + + @Override + public void setCropViewTileSource(BitmapSource bitmapSource, + boolean touchEnabled, + boolean moveToLeft, + final Runnable postExecute) { + // we also want to show our own wallpaper instead of the one in the background + Runnable showPostExecuteRunnable = new Runnable() { + @Override + public void run() { + if(postExecute != null) { + postExecute.run(); + } + setSystemWallpaperVisiblity(false); + } + }; + super.setCropViewTileSource(bitmapSource, + touchEnabled, + moveToLeft, + showPostExecuteRunnable); + } + // called by onCreate; this is subclassed to overwrite WallpaperCropActivity protected void init() { setContentView(R.layout.wallpaper_picker); mCropView = (CropView) findViewById(R.id.cropView); + mCropView.setVisibility(View.INVISIBLE); + mWallpaperStrip = findViewById(R.id.wallpaper_strip); mCropView.setTouchCallback(new CropView.TouchCallback() { ViewPropertyAnimator mAnim; @@ -334,6 +402,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } return; } + mSetWallpaperButton.setEnabled(true); WallpaperTileInfo info = (WallpaperTileInfo) v.getTag(); if (info.isSelectable() && v.getVisibility() == View.VISIBLE) { selectTile(v); @@ -418,13 +487,15 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { // Add a tile for the default wallpaper if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { DefaultWallpaperInfo defaultWallpaperInfo = getDefaultWallpaper(); - FrameLayout defaultWallpaperTile = (FrameLayout) createImageTileView( - getLayoutInflater(), 0, null, mWallpapersView, defaultWallpaperInfo.mThumb); - setWallpaperItemPaddingToZero(defaultWallpaperTile); - defaultWallpaperTile.setTag(defaultWallpaperInfo); - mWallpapersView.addView(defaultWallpaperTile, 0); - defaultWallpaperTile.setOnClickListener(mThumbnailOnClickListener); - defaultWallpaperInfo.setView(defaultWallpaperTile); + if (defaultWallpaperInfo != null) { + FrameLayout defaultWallpaperTile = (FrameLayout) createImageTileView( + getLayoutInflater(), 0, null, mWallpapersView, defaultWallpaperInfo.mThumb); + setWallpaperItemPaddingToZero(defaultWallpaperTile); + defaultWallpaperTile.setTag(defaultWallpaperInfo); + mWallpapersView.addView(defaultWallpaperTile, 0); + defaultWallpaperTile.setOnClickListener(mThumbnailOnClickListener); + defaultWallpaperInfo.setView(defaultWallpaperTile); + } } // Select the first item; wait for a layout pass so that we initialize the dimensions of @@ -437,6 +508,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (mSelectedIndex >= 0 && mSelectedIndex < mWallpapersView.getChildCount()) { mThumbnailOnClickListener.onClick( mWallpapersView.getChildAt(mSelectedIndex)); + setSystemWallpaperVisiblity(false); } v.removeOnLayoutChangeListener(this); } @@ -466,6 +538,10 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (mSelectedTile != null) { WallpaperTileInfo info = (WallpaperTileInfo) mSelectedTile.getTag(); info.onSave(WallpaperPickerActivity.this); + } else { + // no tile was selected, so we just finish the activity and go back + setResult(Activity.RESULT_OK); + finish(); } } }); @@ -516,6 +592,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (itemId == R.id.menu_delete) { int childCount = mWallpapersView.getChildCount(); ArrayList viewsToRemove = new ArrayList(); + boolean selectedTileRemoved = false; for (int i = 0; i < childCount; i++) { CheckableFrameLayout c = (CheckableFrameLayout) mWallpapersView.getChildAt(i); @@ -523,11 +600,19 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { WallpaperTileInfo info = (WallpaperTileInfo) c.getTag(); info.onDelete(WallpaperPickerActivity.this); viewsToRemove.add(c); + if (i == mSelectedIndex) { + selectedTileRemoved = true; + } } } for (View v : viewsToRemove) { mWallpapersView.removeView(v); } + if (selectedTileRemoved) { + mSelectedIndex = -1; + mSelectedTile = null; + setSystemWallpaperVisiblity(true); + } updateTileIndices(); mode.finish(); // Action picked, so close the CAB return true; @@ -544,7 +629,9 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { CheckableFrameLayout c = (CheckableFrameLayout) mWallpapersView.getChildAt(i); c.setChecked(false); } - mSelectedTile.setSelected(true); + if (mSelectedTile != null) { + mSelectedTile.setSelected(true); + } mActionMode = null; } }; @@ -616,7 +703,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { for (Uri uri : uris) { addTemporaryWallpaperTile(uri, true); } - mSelectedIndex = savedInstanceState.getInt(SELECTED_INDEX, 0); + mSelectedIndex = savedInstanceState.getInt(SELECTED_INDEX, -1); } private void populateWallpapersFromAdapter(ViewGroup parent, BaseAdapter adapter, @@ -774,11 +861,15 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } else if (requestCode == PICK_LIVE_WALLPAPER) { WallpaperManager wm = WallpaperManager.getInstance(this); final WallpaperInfo oldLiveWallpaper = mLiveWallpaperInfoOnPickerLaunch; + final WallpaperInfo clickedWallpaper = mLastClickedLiveWallpaperInfo; WallpaperInfo newLiveWallpaper = wm.getWallpaperInfo(); // Try to figure out if a live wallpaper was set; if (newLiveWallpaper != null && - (oldLiveWallpaper == null || - !oldLiveWallpaper.getComponent().equals(newLiveWallpaper.getComponent()))) { + (oldLiveWallpaper == null + || !oldLiveWallpaper.getComponent() + .equals(newLiveWallpaper.getComponent()) + || clickedWallpaper.getComponent() + .equals(oldLiveWallpaper.getComponent()))) { // Return if a live wallpaper was set setResult(RESULT_OK); finish(); @@ -938,7 +1029,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { return mSavedImages; } - public void onLiveWallpaperPickerLaunch() { + public void onLiveWallpaperPickerLaunch(WallpaperInfo info) { + mLastClickedLiveWallpaperInfo = info; mLiveWallpaperInfoOnPickerLaunch = WallpaperManager.getInstance(this).getWallpaperInfo(); } diff --git a/WallpaperPicker/src/com/android/photos/views/TiledImageView.java b/WallpaperPicker/src/com/android/photos/views/TiledImageView.java index af4199c91e..94063b0277 100644 --- a/WallpaperPicker/src/com/android/photos/views/TiledImageView.java +++ b/WallpaperPicker/src/com/android/photos/views/TiledImageView.java @@ -112,6 +112,18 @@ public class TiledImageView extends FrameLayout { //setTileSource(new ColoredTiles()); } + @Override + public void setVisibility(int visibility) { + super.setVisibility(visibility); + // need to update inner view's visibility because it seems like we're causing it to draw + // from {@link #dispatchDraw} or {@link #invalidate} even if we are invisible. + if (USE_TEXTURE_VIEW) { + mTextureView.setVisibility(visibility); + } else { + mGLSurfaceView.setVisibility(visibility); + } + } + public void destroy() { if (!IS_SUPPORTED) { return; diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 53b5b5a88c..b5c17c5d1d 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -104,10 +104,6 @@ "Vouer is gesluit" "Vouer hernoem na %1$s" "Vouer: %1$s" - - - - "Legstukke" "Muurpapiere" "Instellings" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index b0c862d144..ea64f6f3da 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -104,10 +104,6 @@ "አቃፊ ተዘግቷል" "አቃፊ %1$s ተብሎ ዳግም ተሰይሟል" "አቃፊ፦ %1$s" - - - - "ፍርግሞች" "የግድግዳ ወረቀቶች" "ቅንብሮች" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 98dce5fbda..7eb37d3e9f 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -104,10 +104,6 @@ "تم إغلاق المجلد" "تمت إعادة تسمية المجلد إلى %1$s" "المجلد: %1$s" - - - - "الأدوات" "الخلفيات" "الإعدادات" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 9082929d16..13c0118597 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -104,10 +104,6 @@ "Папката бе затворена" "Папката е преименувана на „%1$s“" "Папка: „%1$s“" - - - - "Приспособления" "Тапети" "Настройки" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 865d0e0ee7..3e6bedba93 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -104,10 +104,6 @@ "Carpeta tancada" "S\'ha canviat el nom de la carpeta a %1$s" "Carpeta: %1$s" - - - - "Widgets" "Fons de pantalla" "Configuració" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 0255709260..3a0e6721c7 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -104,10 +104,6 @@ "Složka je uzavřena" "Složka přejmenována na %1$s" "Složka: %1$s" - - - - "Widgety" "Tapety" "Nastavení" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 68ceb5bec2..7d4148950d 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -104,10 +104,6 @@ "Mappen er lukket" "Mappen er omdøbt til %1$s" "Mappe: %1$s" - - - - "Widgets" "Baggrunde" "Indstillinger" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 4bd04b208b..c11a651729 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -104,10 +104,6 @@ "Ordner geschlossen" "Ordner umbenannt in %1$s" "Ordner: %1$s" - - - - "Widgets" "Hintergründe" "Einstellungen" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index b6a9855e4b..ec05ae57c3 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -104,10 +104,6 @@ "Ο φάκελος έκλεισε" "Ο φάκελος μετονομάστηκε σε %1$s" "Φάκελος: %1$s" - - - - "Γραφικά στοιχεία" "Ταπετσαρίες" "Ρυθμίσεις" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 9f732e09d8..cab17077a5 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -104,10 +104,6 @@ "Folder closed" "Folder renamed to %1$s" "Folder: %1$s" - - - - "Widgets" "Wallpapers" "Settings" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 9f732e09d8..cab17077a5 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -104,10 +104,6 @@ "Folder closed" "Folder renamed to %1$s" "Folder: %1$s" - - - - "Widgets" "Wallpapers" "Settings" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 95e4a997bd..278f0d82f2 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -104,10 +104,6 @@ "Carpeta cerrada" "El nombre de la carpeta se cambió a %1$s." "Carpeta: %1$s" - - - - "Widgets" "Fondos de pantalla" "Configuración" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index e5beb909eb..f9cf809b20 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -104,10 +104,6 @@ "Carpeta cerrada" "Se ha cambiado el nombre de la carpeta a %1$s" "Carpeta: %1$s" - - - - "Widgets" "Fondos de pantalla" "Ajustes" diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index a2f3125bb6..92985d2296 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -104,10 +104,6 @@ "Kaust on suletud" "Kausta uus nimi: %1$s" "Kaust: %1$s" - - - - "Vidinad" "Taustapildid" "Seaded" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 9f22f933d6..a01ea79325 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -104,10 +104,6 @@ "پوشه بسته شد" "نام پوشه به %1$s تغییر کرد" "پوشه: %1$s" - - - - "ابزارک‌ها" "کاغذدیواری‌ها" "تنظیمات" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index af461a5d29..9a48ab3596 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -104,10 +104,6 @@ "Kansio on suljettu" "Kansion nimeksi vaihdettiin %1$s" "Kansio: %1$s" - - - - "Widgetit" "Taustakuvat" "Asetukset" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 03343510c5..92c5cc4896 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -104,10 +104,6 @@ "Dossier fermé" "Nouveau nom du dossier : %1$s" "Dossier : %1$s" - - - - "Widgets" "Fonds d\'écran" "Paramètres" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 5f0607e1ab..18732f8499 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -104,10 +104,6 @@ "Dossier fermé" "Nouveau nom du dossier : %1$s" "Dossier \"%1$s\"" - - - - "Widgets" "Fonds d\'écran" "Paramètres" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 058f5340ac..a5481a12d6 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -104,10 +104,6 @@ "फ़ोल्डर बंद किया गया" "फ़ोल्डर का नाम बदलकर %1$s किया गया" "फ़ोल्डर: %1$s" - - - - "विजेट" "वॉलपेपर" "सेटिंग" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 52a91a3e12..32f3feb2f2 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -104,10 +104,6 @@ "Mapa je zatvorena" "Mapa je preimenovana u %1$s" "Mapa: %1$s" - - - - "Widgeti" "Pozadinske slike" "Postavke" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 38b6b5c6d0..37d5059452 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -104,10 +104,6 @@ "Mappa lezárva" "A mappa új neve: %1$s" "Mappa: %1$s" - - - - "Modulok" "Háttérképek" "Beállítások" diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 1faae76274..6e9491bcad 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -104,10 +104,6 @@ "Թղթապանակը փակ է" "Թղթապանակը վերանվանվեց %1$s" "Թղթապանակ՝ %1$s" - - - - "Վիջեթներ" "Պաստառներ" "Կարգավորումներ" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 732dd4574d..d5df63bfad 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -104,10 +104,6 @@ "Folder ditutup" "Folder diganti namanya menjadi %1$s" "Folder: %1$s" - - - - "Widget" "Wallpaper" "Setelan" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index f379ae7b1b..20451d135c 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -104,10 +104,6 @@ "Cartella chiusa" "Nome della cartella sostituito con %1$s" "Cartella: %1$s" - - - - "Widget" "Sfondi" "Impostazioni" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index af853a85b9..08d965399e 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -104,10 +104,6 @@ "התיקיה נסגרה" "שם התיקיה שונה ל-%1$s" "תיקיה: %1$s" - - - - "רכיבי ווידג\'ט" "טפטים" "הגדרות" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index b396893b1f..ad5e8ff703 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -104,10 +104,6 @@ "フォルダは閉じています" "フォルダの名前を「%1$s」に変更しました" "フォルダ: %1$s" - - - - "ウィジェット" "壁紙" "設定" diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 4c53cc81e9..086df7222f 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -104,10 +104,6 @@ "საქაღალდე დაიხურა" "საქაღალდეს შეეცვალა სახელი „%1$s“-ად" "საქაღალდე: %1$s" - - - - "ვიჯეტები" "ფონები" "პარამეტრები" diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index eb30a16da7..bf2f01c01e 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -104,10 +104,6 @@ "បាន​បិទ​ថត" "បាន​ប្ដូរ​ឈ្មោះ​ថត​ជា %1$s" "ថត៖ %1$s" - - - - "ធាតុ​ក្រាហ្វិក" "ផ្ទាំង​រូបភាព" "ការកំណត់" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 656c9728a9..dde4eb7819 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -104,10 +104,6 @@ "폴더 닫음" "폴더 이름 변경: %1$s" "폴더: %1$s" - - - - "위젯" "배경화면" "설정" diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index 5ced01ab02..092098b94e 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -104,10 +104,6 @@ "ປິດໂຟນເດີແລ້ວ" "ປ່ຽນຊື່ໂຟນເດີເປັນ %1$s ແລ້ວ" "ໂຟນເດີ: %1$s" - - - - "ວິດເຈັດ" "ພາບພື້ນຫຼັງ" "ການຕັ້ງຄ່າ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index aed0e84d5e..aba231d859 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -104,10 +104,6 @@ "Aplankas uždarytas" "Aplankas pervardytas kaip „%1$s“" "Aplankas: „%1$s“" - - - - "Valdikliai" "Ekrano fonai" "Nustatymai" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 74ae7a4657..6d4888d8c6 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -104,10 +104,6 @@ "Mape aizvērta" "Mape pārdēvēta par: %1$s" "Mape: %1$s" - - - - "Logrīki" "Fona tapetes" "Iestatījumi" diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 0430ac5b3b..db92a5c81d 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -104,10 +104,6 @@ "Фолдер хаагдав" "Фолдерын нэр %1$s болов" "Фолдер: %1$s" - - - - "Виджет" "Ханын зураг" "Тохиргоо" diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index 802aa952dc..678eeb46a3 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -104,10 +104,6 @@ "Folder ditutup" "Folder dinamakan semula kepada %1$s" "Folder: %1$s" - - - - "Widget" "Kertas dinding" "Tetapan" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 0e163753aa..dd89a4f600 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -104,10 +104,6 @@ "Mappen ble lukket" "Mappen heter nå %1$s" "Mappe: %1$s" - - - - "Moduler" "Bakgrunner" "Innstillinger" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index f6c1b09c95..d39c1ea113 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -104,10 +104,6 @@ "Map gesloten" "De naam van de map is gewijzigd in %1$s" "Map: %1$s" - - - - "Widgets" "Achtergronden" "Instellingen" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 5a2efbfbc6..b428a95ca6 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -104,10 +104,6 @@ "Folder zamknięty" "Nazwa folderu zmieniona na %1$s" "Folder: %1$s" - - - - "Widżety" "Tapety" "Ustawienia" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index c6f5710414..b8e51d6d20 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -104,10 +104,6 @@ "Pasta fechada" "Nome de pasta alterado para %1$s" "Pasta: %1$s" - - - - "Widgets" "Imagens de fundo" "Definições" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 0252d61c30..03c621af27 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -104,10 +104,6 @@ "Pasta fechada" "Pasta renomeada para %1$s" "Pasta: %1$s" - - - - "Widgets" "Planos de fundo" "Configurações" diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml index 8563d7da40..36000956fc 100644 --- a/res/values-rm/strings.xml +++ b/res/values-rm/strings.xml @@ -186,10 +186,6 @@ - - - - diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 75479ed577..a667ffdc5a 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -104,10 +104,6 @@ "Dosar închis" "Dosar redenumit %1$s" "Dosar: %1$s" - - - - "Widgeturi" "Imagini de fundal" "Setări" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index a93583db41..c2e8bc718e 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -104,10 +104,6 @@ "Папка закрыта" "Папка переименована в \"%1$s\"" "Папка: %1$s" - - - - "Виджеты" "Обои" "Настройки" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 485a2ec4fa..acd8e051c7 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -104,10 +104,6 @@ "Priečinok je uzavretý" "Priečinok bol premenovaný na %1$s" "Priečinok: %1$s" - - - - "Miniaplikácie" "Tapety" "Nastavenia" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index dfd63e2c0f..afbd6202e7 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -104,10 +104,6 @@ "Mapa je zaprta" "Mapa je preimenovana v %1$s" "Mapa: %1$s" - - - - "Pripomočki" "Ozadja" "Nastavitve" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index dd28fa3b98..bf71b2821b 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -104,10 +104,6 @@ "Директоријум је затворен" "Директоријум је преименован у %1$s" "Директоријум: %1$s" - - - - "Виџети" "Позадине" "Подешавања" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 4005b7e6ea..5825eecbde 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -104,10 +104,6 @@ "Mappen är stängd" "Mappen har bytt namn till %1$s" "Mapp: %1$s" - - - - "Widgetar" "Bakgrunder" "Inställningar" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 4397d3bae5..37d0708928 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -106,10 +106,6 @@ "Folda imefungwa" "Folda imebadilishwa jina kuwa %1$s" "Folda: %1$s" - - - - "Wijeti" "Mandhari" "Mipangilio" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 413c78af6b..87e82371fa 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -104,10 +104,6 @@ "โฟลเดอร์ปิดอยู่" "เปลี่ยนชื่อโฟลเดอร์เป็น %1$s" "โฟลเดอร์: %1$s" - - - - "วิดเจ็ต" "วอลเปเปอร์" "การตั้งค่า" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 897631a7c2..5be9d85a8c 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -104,10 +104,6 @@ "Nakasara ang folder" "Pinalitan ang pangalan ng folder ng %1$s" "Folder: %1$s" - - - - "Mga Widget" "Mga Wallpaper" "Mga Setting" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 42fa17242a..01f79a2e58 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -104,10 +104,6 @@ "Klasör kapatıldı" "Klasörün adı %1$s olarak değiştirildi" "Klasör: %1$s" - - - - "Widget\'lar" "Duvar Kağıtları" "Ayarlar" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 7cef32139f..f266eeab56 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -104,10 +104,6 @@ "Папку закрито" "Папку перейменовано на %1$s" "Папка %1$s" - - - - "Віджети" "Фонові малюнки" "Налаштування" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 20a9b3a62e..9d4ed413c0 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -104,10 +104,6 @@ "Đã đóng thư mục" "Đã đổi tên thư mục thành %1$s" "Thư mục: %1$s" - - - - "Tiện ích con" "Hình nền" "Cài đặt" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 540291e0fb..3a2638e34b 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -104,10 +104,6 @@ "文件夹已关闭" "已将文件夹重命名为“%1$s”" "文件夹:%1$s" - - - - "小部件" "壁纸" "设置" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index c1486ef9b4..cad95f27c0 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -104,10 +104,6 @@ "已關閉資料夾" "資料夾已重新命名為「%1$s」" "資料夾:%1$s" - - - - "小工具" "桌布" "設定" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index d4acb20736..5f482430ef 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -104,10 +104,6 @@ "資料夾已關閉" "已將資料夾重新命名為「%1$s」" "資料夾:%1$s" - - - - "小工具" "桌布" "設定" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index c07f6a96c5..e982eb419c 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -104,10 +104,6 @@ "Ifolda ivaliwe" "Ifolda iqanjwe kabusha ngo-%1$s" "Ifolda: %1$s" - - - - "Amawijethi" "Izithombe zangemuva" "Izilungiselelo" diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index 251ae2108e..5c8828aaf7 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -828,6 +828,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } }); } else { + mLauncher.getWorkspace().removeExtraEmptyScreen(true, null); mLauncher.unlockScreenOrientation(false); } } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c87f9e2f0b..c22a6bf3fd 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2078,6 +2078,10 @@ public class Launcher extends Activity return mWorkspaceLoading || mWaitingForResult; } + public boolean isWorkspaceLoading() { + return mWorkspaceLoading; + } + private void resetAddInfo() { mPendingAddInfo.container = ItemInfo.NO_ID; mPendingAddInfo.screenId = -1; @@ -2887,7 +2891,7 @@ public class Launcher extends Activity mWorkspaceBackgroundDrawable : null); } - protected void changeWallpaperVisiblity(boolean visible) { + void updateWallpaperVisibility(boolean visible) { int wpflags = visible ? WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER : 0; int curflags = getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER; @@ -3771,6 +3775,8 @@ public class Launcher extends Activity * Implementation of the method from LauncherModel.Callbacks. */ public void startBinding() { + mWorkspaceLoading = true; + // If we're starting binding all over again, clear any bind calls we'd postponed in // the past (see waitUntilResume) -- we don't need them since we're starting binding // from scratch again diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index c706cf1745..62e6f3102b 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -50,9 +50,7 @@ import android.util.Base64; import android.util.Log; import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.URISyntaxException; @@ -188,16 +186,20 @@ public class LauncherBackupHelper implements BackupHelper { Log.v(TAG, "lastBackupTime = " + lastBackupTime); ArrayList keys = new ArrayList(); - try { - backupFavorites(in, data, out, keys); - backupScreens(in, data, out, keys); - backupIcons(in, data, out, keys); - backupWidgets(in, data, out, keys); - } catch (IOException e) { - Log.e(TAG, "launcher backup has failed", e); + if (launcherIsReady()) { + try { + backupFavorites(in, data, out, keys); + backupScreens(in, data, out, keys); + backupIcons(in, data, out, keys); + backupWidgets(in, data, out, keys); + } catch (IOException e) { + Log.e(TAG, "launcher backup has failed", e); + } + out.key = keys.toArray(new BackupProtos.Key[keys.size()]); + } else { + out = in; } - out.key = keys.toArray(new BackupProtos.Key[keys.size()]); writeJournal(newState, out); Log.v(TAG, "onBackup: wrote " + out.bytes + "b in " + out.rows + " rows."); } @@ -1129,6 +1131,26 @@ public class LauncherBackupHelper implements BackupHelper { return mIconCache != null; } + + // check if the launcher is in a state to support backup + private boolean launcherIsReady() { + ContentResolver cr = mContext.getContentResolver(); + Cursor cursor = cr.query(Favorites.CONTENT_URI, FAVORITE_PROJECTION, null, null, null); + if (cursor == null) { + // launcher data has been wiped, do nothing + return false; + } + cursor.close(); + + if (!initializeIconCache()) { + // launcher services are unavailable, try again later + dataChanged(); + return false; + } + + return true; + } + private class KeyParsingException extends Throwable { private KeyParsingException(Throwable cause) { super(cause); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 50d29ed296..86c603e875 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -863,6 +863,12 @@ public class Workspace extends SmoothPagedView // Log to disk Launcher.addDumpLog(TAG, "11683562 - stripEmptyScreens()", true); + if (mLauncher.isWorkspaceLoading()) { + // Don't strip empty screens if the workspace is still loading + Launcher.addDumpLog(TAG, " - workspace loading, skip", true); + return; + } + if (isPageMoving()) { mStripScreensOnPageStopMoving = true; return;