From 2777273a2a5c710f26726ada0fe4a8f33da57b52 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Mon, 11 Nov 2013 14:00:56 +0000 Subject: [PATCH 001/147] Add method to determine if Launcher is using vertical bars Change-Id: I7e9096cf81b49d213025c6f98708186330448fc0 --- src/com/android/launcher3/Launcher.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index d52ef9f7e4..ba334e304c 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3953,6 +3953,11 @@ public class Launcher extends Activity return bounceAnim; } + public boolean useVerticalBarLayout() { + return LauncherAppState.getInstance().getDynamicGrid(). + getDeviceProfile().isVerticalBarLayout(); + } + @Override public void bindSearchablesChanged() { boolean searchVisible = updateGlobalSearchIcon(); From ab087b9fbc56c78bf25a06068ff929f8a7ac7ae8 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Mon, 11 Nov 2013 15:37:21 +0000 Subject: [PATCH 002/147] Fix NPE we're seeing in feedback (issue 11626428) Change-Id: I848ca84b325339004ba8ea50a01f5240eea356f5 --- src/com/android/launcher3/DragController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/DragController.java b/src/com/android/launcher3/DragController.java index 5e733f08bf..ab4823343e 100644 --- a/src/com/android/launcher3/DragController.java +++ b/src/com/android/launcher3/DragController.java @@ -327,7 +327,7 @@ public class DragController { for (AppInfo info : appInfos) { // Added null checks to prevent NPE we've seen in the wild if (dragInfo != null && - dragInfo.intent != null) { + dragInfo.intent != null && info != null) { ComponentName cn = dragInfo.intent.getComponent(); boolean isSameComponent = cn.equals(info.componentName) || packageNames.contains(cn.getPackageName()); From 2d13e6934fd613a289a220b224d45e76f5dd211d Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Mon, 11 Nov 2013 16:44:44 +0100 Subject: [PATCH 003/147] Fix wallpaper cropping bugs - take into account that image decoder might not respect inSampleSize - check rounded values so we don't have crop rects that lie outside a bitmap's dimensions - correctly set initial scale on bitmaps that are larger than the screen size Change-Id: I42be79c68b883a6e329dcc5645d7db6cd6e3eeeb --- src/com/android/launcher3/CropView.java | 3 +- .../launcher3/WallpaperCropActivity.java | 29 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/CropView.java b/src/com/android/launcher3/CropView.java index 9224e3bb21..578b8eafd0 100644 --- a/src/com/android/launcher3/CropView.java +++ b/src/com/android/launcher3/CropView.java @@ -165,7 +165,8 @@ public class CropView extends TiledImageView implements OnScaleGestureListener { final float imageWidth = imageDims[0]; final float imageHeight = imageDims[1]; mMinScale = Math.max(w / imageWidth, h / imageHeight); - mRenderer.scale = Math.max(mMinScale, mRenderer.scale); + mRenderer.scale = + Math.max(mMinScale, resetScale ? Float.MIN_VALUE : mRenderer.scale); } } } diff --git a/src/com/android/launcher3/WallpaperCropActivity.java b/src/com/android/launcher3/WallpaperCropActivity.java index 276aba3061..65223ad22d 100644 --- a/src/com/android/launcher3/WallpaperCropActivity.java +++ b/src/com/android/launcher3/WallpaperCropActivity.java @@ -550,6 +550,8 @@ public class WallpaperCropActivity extends Activity { Rect roundedTrueCrop = new Rect(); Matrix rotateMatrix = new Matrix(); Matrix inverseRotateMatrix = new Matrix(); + + Point bounds = getImageBounds(); if (mRotation > 0) { rotateMatrix.setRotate(mRotation); inverseRotateMatrix.setRotate(-mRotation); @@ -557,7 +559,6 @@ public class WallpaperCropActivity extends Activity { mCropBounds.roundOut(roundedTrueCrop); mCropBounds = new RectF(roundedTrueCrop); - Point bounds = getImageBounds(); if (bounds == null) { Log.w(LOGTAG, "cannot get bounds for image"); failure = true; @@ -629,12 +630,38 @@ public class WallpaperCropActivity extends Activity { Utils.closeSilently(is); } if (fullSize != null) { + // Find out the true sample size that was used by the decoder + scaleDownSampleSize = bounds.x / fullSize.getWidth(); mCropBounds.left /= scaleDownSampleSize; mCropBounds.top /= scaleDownSampleSize; mCropBounds.bottom /= scaleDownSampleSize; mCropBounds.right /= scaleDownSampleSize; mCropBounds.roundOut(roundedTrueCrop); + // Adjust values to account for issues related to rounding + if (roundedTrueCrop.width() > fullSize.getWidth()) { + // Adjust the width + roundedTrueCrop.right = roundedTrueCrop.left + fullSize.getWidth(); + } + if (roundedTrueCrop.right > fullSize.getWidth()) { + // Adjust the left value + int adjustment = roundedTrueCrop.left - + Math.max(0, roundedTrueCrop.right - roundedTrueCrop.width()); + roundedTrueCrop.left -= adjustment; + roundedTrueCrop.right -= adjustment; + } + if (roundedTrueCrop.height() > fullSize.getHeight()) { + // Adjust the height + roundedTrueCrop.bottom = roundedTrueCrop.top + fullSize.getHeight(); + } + if (roundedTrueCrop.bottom > fullSize.getHeight()) { + // Adjust the top value + int adjustment = roundedTrueCrop.top - + Math.max(0, roundedTrueCrop.bottom - roundedTrueCrop.height()); + roundedTrueCrop.top -= adjustment; + roundedTrueCrop.bottom -= adjustment; + } + crop = Bitmap.createBitmap(fullSize, roundedTrueCrop.left, roundedTrueCrop.top, roundedTrueCrop.width(), roundedTrueCrop.height()); From 84a465aa0e795619b248047c5e21cd77c82b1ff1 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Mon, 11 Nov 2013 18:49:56 +0000 Subject: [PATCH 004/147] Small tweaks to custom content management -> Never allow the custom content overhang onto the viewport when it is not the current page -> Never fade the custom content screen as a consequence of scrolling Change-Id: I91a4cfb3f740ee8b429084fce1c96258bac8dd9e --- src/com/android/launcher3/PagedView.java | 20 +++++++++++++++++++- src/com/android/launcher3/Workspace.java | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 7b56625232..3eecedbccf 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -902,6 +902,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc int verticalPadding = getPaddingTop() + getPaddingBottom(); LayoutParams lp = (LayoutParams) getChildAt(startIndex).getLayoutParams(); + LayoutParams nextLp; int childLeft = offsetX + (lp.isFullScreenPage ? 0 : getPaddingLeft()); if (mPageScrolls == null || getChildCount() != mChildCountOnLastLayout) { @@ -931,7 +932,24 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc int scrollOffsetLeft = lp.isFullScreenPage ? 0 : getPaddingLeft(); mPageScrolls[i] = childLeft - scrollOffsetLeft - offsetX; - childLeft += childWidth + mPageSpacing; + + int pageGap = mPageSpacing; + int next = i + delta; + if (next != endIndex) { + nextLp = (LayoutParams) getPageAt(next).getLayoutParams(); + } else { + nextLp = null; + } + + // Prevent full screen pages from showing in the viewport + // when they are not the current page. + if (lp.isFullScreenPage) { + pageGap = getPaddingLeft(); + } else if (nextLp != null && nextLp.isFullScreenPage) { + pageGap = getPaddingRight(); + } + + childLeft += childWidth + pageGap; } } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 7692ae6d8c..f36c815da5 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1481,7 +1481,7 @@ public class Workspace extends SmoothPagedView mState == State.NORMAL && !mIsSwitchingState && !isInOverscroll) { - for (int i = 0; i < getChildCount(); i++) { + for (int i = numCustomPages(); i < getChildCount(); i++) { CellLayout child = (CellLayout) getChildAt(i); if (child != null) { float scrollProgress = getScrollProgress(screenCenter, child, i); From 8e15fdf60a103391839433ced3c0990d13ba5012 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 11 Nov 2013 15:47:45 -0800 Subject: [PATCH 005/147] Prevent launching Widgets when cycling between Overview/Shrink state and Home. (Bug 11439120) Change-Id: I21173f114228ba43172af9074d2ac1fadeee9886 --- src/com/android/launcher3/Launcher.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index ba334e304c..0c14ed93ce 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1191,7 +1191,9 @@ public class Launcher extends Activity widgetButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { - showAllApps(true, AppsCustomizePagedView.ContentType.Widgets, true); + if (!mWorkspace.isSwitchingState()) { + showAllApps(true, AppsCustomizePagedView.ContentType.Widgets, true); + } } }); widgetButton.setOnTouchListener(getHapticFeedbackTouchListener()); @@ -1200,7 +1202,9 @@ public class Launcher extends Activity wallpaperButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { - startWallpaper(); + if (!mWorkspace.isSwitchingState()) { + startWallpaper(); + } } }); wallpaperButton.setOnTouchListener(getHapticFeedbackTouchListener()); @@ -1209,7 +1213,9 @@ public class Launcher extends Activity settingsButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { - startSettings(); + if (!mWorkspace.isSwitchingState()) { + startSettings(); + } } }); settingsButton.setOnTouchListener(getHapticFeedbackTouchListener()); From f0f2ffaedc39b4657a3b7e24a4a3a90e08ed087f Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 12 Nov 2013 11:44:58 +0000 Subject: [PATCH 006/147] Fix issue where extra page hangs around (issue 11634172) Change-Id: Ia0900c9fc07bc587259e36ed17816eaf519b10dc --- src/com/android/launcher3/Folder.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index bd61010803..f26d01f5d0 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -758,6 +758,8 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList } completeDragExit(); } + } else { + mLauncher.getWorkspace().removeExtraEmptyScreen(true, null); } mDeleteFolderOnDropCompleted = false; From 1960ea4a7102bd0fa03cad1ea1e3a91f8e1bd9cd Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 12 Nov 2013 11:33:14 +0000 Subject: [PATCH 007/147] Fix CellLayout UNSPECIFIED exception (issue 11627191) Change-Id: Id2f840a804c51e8c61bb28882796059584e4c8bb --- src/com/android/launcher3/Folder.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index bd61010803..714c5abd2e 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -119,6 +119,11 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList private int DRAG_MODE_REORDER = 1; private int mDragMode = DRAG_MODE_NONE; + // We avoid measuring the scroll view with a 0 width or height, as this + // results in CellLayout being measured as UNSPECIFIED, which it does + // not support. + private static final int MIN_CONTENT_DIMEN = 5; + private boolean mDestroyed; private AutoScrollHelper mAutoScrollHelper; @@ -959,8 +964,13 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList int maxContentAreaHeight = grid.availableHeightPx - workspacePadding.top - workspacePadding.bottom - mFolderNameHeight; - return Math.min(maxContentAreaHeight, + int height = Math.min(maxContentAreaHeight, mContent.getDesiredHeight()); + return Math.max(height, MIN_CONTENT_DIMEN); + } + + private int getContentAreaWidth() { + return Math.max(mContent.getDesiredWidth(), MIN_CONTENT_DIMEN); } private int getFolderHeight() { @@ -972,11 +982,12 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = getPaddingLeft() + getPaddingRight() + mContent.getDesiredWidth(); int height = getFolderHeight(); - int contentAreaWidthSpec = MeasureSpec.makeMeasureSpec(mContent.getDesiredWidth(), + int contentAreaWidthSpec = MeasureSpec.makeMeasureSpec(getContentAreaWidth(), MeasureSpec.EXACTLY); int contentAreaHeightSpec = MeasureSpec.makeMeasureSpec(getContentAreaHeight(), MeasureSpec.EXACTLY); - mContent.setFixedSize(mContent.getDesiredWidth(), mContent.getDesiredHeight()); + + mContent.setFixedSize(getContentAreaWidth(), getContentAreaHeight()); mScrollView.measure(contentAreaWidthSpec, contentAreaHeightSpec); mFolderName.measure(contentAreaWidthSpec, MeasureSpec.makeMeasureSpec(mFolderNameHeight, MeasureSpec.EXACTLY)); From 2f32ad29075bf666199cc49fe20014e00991d1bb Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Wed, 13 Nov 2013 11:29:49 +0000 Subject: [PATCH 008/147] Add logging for NPE (issue 11627249) Change-Id: I75352f9eb1249fa5cc46d05cd7c168a868c6f7b7 --- src/com/android/launcher3/Workspace.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index f36c815da5..6c346c4b76 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2536,6 +2536,13 @@ public class Workspace extends SmoothPagedView icon.clearPressedOrFocusedBackground(); } + if (child.getTag() == null || !(child.getTag() instanceof ItemInfo)) { + String msg = "Drag started with a view that has no tag set. This " + + "will cause a crash (issue 11627249) down the line. " + + "View: " + child + " tag: " + child.getTag(); + throw new IllegalStateException(msg); + } + mDragController.startDrag(b, dragLayerX, dragLayerY, source, child.getTag(), DragController.DRAG_ACTION_MOVE, dragVisualizeOffset, dragRect, scale); From a120b8e304f1541529f26ef5af13f8bb5ac655f6 Mon Sep 17 00:00:00 2001 From: Adam Copp Date: Tue, 12 Nov 2013 16:26:04 +0000 Subject: [PATCH 009/147] Hooks for subclasses to react to home presses. This provides the nessecary hooks for GEL so that it can prevent scrolling to the home screen when a search is open, instead choosing to dismiss the search. Bug: 11128544 Change-Id: I3c1b67bc271c1342db4a0abac364f2923bdeba3a --- src/com/android/launcher3/Launcher.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index d52ef9f7e4..84173b01b8 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1698,7 +1698,7 @@ public class Launcher extends Activity // In all these cases, only animate if we're already on home mWorkspace.exitWidgetResizeMode(); if (alreadyOnHome && mState == State.WORKSPACE && !mWorkspace.isTouchActive() && - openFolder == null) { + openFolder == null && shouldMoveToDefaultScreenOnHomeIntent()) { mWorkspace.moveToDefaultScreen(true); } @@ -1724,6 +1724,8 @@ public class Launcher extends Activity if (mAppsCustomizeTabHost != null) { mAppsCustomizeTabHost.reset(); } + + onHomeIntent(); } if (DEBUG_RESUME_TIME) { @@ -1731,6 +1733,21 @@ public class Launcher extends Activity } } + /** + * Override point for subclasses to prevent movement to the default screen when the home + * button is pressed. Used (for example) in GEL, to prevent movement during a search. + */ + protected boolean shouldMoveToDefaultScreenOnHomeIntent() { + return true; + } + + /** + * Override point for subclasses to provide custom behaviour for when a home intent is fired. + */ + protected void onHomeIntent() { + // Do nothing + } + @Override public void onRestoreInstanceState(Bundle state) { super.onRestoreInstanceState(state); From 4346746ef37413168a5cbec46bb6db8f96b0123a Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Thu, 14 Nov 2013 12:03:58 +0100 Subject: [PATCH 010/147] Use AsyncTasks instead of creating new threads Change-Id: If166869dfbeb84d4dee2203f5b98a22b9d20719d --- .../android/launcher3/DeleteDropTarget.java | 8 +++-- src/com/android/launcher3/Launcher.java | 30 ++++++++++--------- .../android/launcher3/PreloadReceiver.java | 9 +++--- .../launcher3/WallpaperCropActivity.java | 7 +++-- 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index 4023dafb65..e3a154bb13 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -29,6 +29,7 @@ import android.content.res.Resources; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.drawable.TransitionDrawable; +import android.os.AsyncTask; import android.util.AttributeSet; import android.view.View; import android.view.ViewConfiguration; @@ -334,11 +335,12 @@ public class DeleteDropTarget extends ButtonDropTarget { if (appWidgetHost != null) { // Deleting an app widget ID is a void call but writes to disk before returning // to the caller... - new Thread("deleteAppWidgetId") { - public void run() { + new AsyncTask() { + public Void doInBackground(Void ... args) { appWidgetHost.deleteAppWidgetId(launcherAppWidgetInfo.appWidgetId); + return null; } - }.start(); + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); } } if (wasWaitingForUninstall && !mWaitingForUninstall) { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 0c14ed93ce..b76379add2 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -579,12 +579,12 @@ public class Launcher extends Activity mIconCache.flush(); final LocaleConfiguration localeConfiguration = sLocaleConfiguration; - new Thread("WriteLocaleConfiguration") { - @Override - public void run() { + new AsyncTask() { + public Void doInBackground(Void ... args) { writeConfiguration(Launcher.this, localeConfiguration); + return null; } - }.start(); + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); } } @@ -1453,11 +1453,12 @@ public class Launcher extends Activity if (appWidgetId != -1) { // Deleting an app widget ID is a void call but writes to disk before returning // to the caller... - new Thread("deleteAppWidgetId") { - public void run() { + new AsyncTask() { + public Void doInBackground(Void ... args) { mAppWidgetHost.deleteAppWidgetId(appWidgetId); + return null; } - }.start(); + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); } showOutOfSpaceMessage(isHotseatLayout(layout)); return; @@ -4207,13 +4208,14 @@ public class Launcher extends Activity public void run() { cling.cleanup(); // We should update the shared preferences on a background thread - new Thread("dismissClingThread") { - public void run() { + new AsyncTask() { + public Void doInBackground(Void ... args) { SharedPreferences.Editor editor = mSharedPrefs.edit(); editor.putBoolean(flag, true); editor.commit(); + return null; } - }.start(); + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); if (postAnimationCb != null) { postAnimationCb.run(); } @@ -4503,9 +4505,8 @@ public class Launcher extends Activity public void dumpLogsToLocalData() { if (DEBUG_DUMP_LOG) { - new Thread("DumpLogsToLocalData") { - @Override - public void run() { + new AsyncTask() { + public Void doInBackground(Void ... args) { boolean success = false; sDateStamp.setTime(sRunStart); String FILENAME = sDateStamp.getMonth() + "-" @@ -4543,8 +4544,9 @@ public class Launcher extends Activity } catch (IOException e) { e.printStackTrace(); } + return null; } - }.start(); + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); } } } diff --git a/src/com/android/launcher3/PreloadReceiver.java b/src/com/android/launcher3/PreloadReceiver.java index 75e5c98bc2..ca25746eb5 100644 --- a/src/com/android/launcher3/PreloadReceiver.java +++ b/src/com/android/launcher3/PreloadReceiver.java @@ -19,6 +19,7 @@ package com.android.launcher3; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.os.AsyncTask; import android.text.TextUtils; import android.util.Log; @@ -39,12 +40,12 @@ public class PreloadReceiver extends BroadcastReceiver { if (LOGD) { Log.d(TAG, "workspace name: " + name + " id: " + workspaceResId); } - new Thread(new Runnable() { - @Override - public void run() { + new AsyncTask() { + public Void doInBackground(Void ... args) { provider.loadDefaultFavoritesIfNecessary(workspaceResId); + return null; } - }).start(); + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); } } } diff --git a/src/com/android/launcher3/WallpaperCropActivity.java b/src/com/android/launcher3/WallpaperCropActivity.java index 65223ad22d..2102599eec 100644 --- a/src/com/android/launcher3/WallpaperCropActivity.java +++ b/src/com/android/launcher3/WallpaperCropActivity.java @@ -786,14 +786,15 @@ public class WallpaperCropActivity extends Activity { final WallpaperManager wallpaperManager) { final Point defaultWallpaperSize = getDefaultWallpaperSize(res, windowManager); - new Thread("suggestWallpaperDimension") { - public void run() { + new AsyncTask() { + public Void doInBackground(Void ... args) { // If we have saved a wallpaper width/height, use that instead int savedWidth = sharedPrefs.getInt(WALLPAPER_WIDTH_KEY, defaultWallpaperSize.x); int savedHeight = sharedPrefs.getInt(WALLPAPER_HEIGHT_KEY, defaultWallpaperSize.y); wallpaperManager.suggestDesiredDimensions(savedWidth, savedHeight); + return null; } - }.start(); + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); } protected static RectF getMaxCropRect( From c76e1dda0875c13131462d80d0c1721a6149e08d Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Thu, 14 Nov 2013 11:09:14 +0000 Subject: [PATCH 011/147] Change the way view ids are assigned (issue 11627801) Change-Id: I4d9c0542ea3ac581c4a9f4da68824f0b498ea337 --- src/com/android/launcher3/Launcher.java | 41 ++++++++++++++++++++++-- src/com/android/launcher3/Workspace.java | 6 ++-- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 0c14ed93ce..d1cdf5cd7d 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -45,7 +45,6 @@ import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; @@ -113,6 +112,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; /** * Default launcher application. @@ -181,8 +181,10 @@ public class Launcher extends Activity private static final String RUNTIME_STATE_PENDING_ADD_SPAN_Y = "launcher.add_span_y"; // Type: parcelable private static final String RUNTIME_STATE_PENDING_ADD_WIDGET_INFO = "launcher.add_widget_info"; - // Type: parcelable + // Type: parcelable private static final String RUNTIME_STATE_PENDING_ADD_WIDGET_ID = "launcher.add_widget_id"; + // Type: int[] + private static final String RUNTIME_STATE_VIEW_IDS = "launcher.view_ids"; private static final String TOOLBAR_ICON_METADATA_NAME = "com.android.launcher.toolbar_icon"; private static final String TOOLBAR_SEARCH_ICON_METADATA_NAME = @@ -207,6 +209,9 @@ public class Launcher extends Activity private static final Object sLock = new Object(); private static int sScreen = DEFAULT_SCREEN; + private HashMap mItemIdToViewId = new HashMap(); + private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1); + // How long to wait before the new-shortcut animation automatically pans the workspace private static int NEW_APPS_PAGE_MOVE_DELAY = 500; private static int NEW_APPS_ANIMATION_INACTIVE_TIMEOUT_SECONDS = 5; @@ -670,6 +675,34 @@ public class Launcher extends Activity } } + /** + * Copied from View -- the View version of the method isn't called + * anywhere else in our process and only exists for API level 17+, + * so it's ok to keep our own version with no API requirement. + */ + public static int generateViewId() { + for (;;) { + final int result = sNextGeneratedId.get(); + // aapt-generated IDs have the high byte nonzero; clamp to the range under that. + int newValue = result + 1; + if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0. + if (sNextGeneratedId.compareAndSet(result, newValue)) { + return result; + } + } + } + + public int getViewIdForItem(ItemInfo info) { + // This cast is safe given the > 2B range for int. + int itemId = (int) info.id; + if (mItemIdToViewId.containsKey(itemId)) { + return mItemIdToViewId.get(itemId); + } + int viewId = generateViewId(); + mItemIdToViewId.put(itemId, viewId); + return viewId; + } + /** * Returns whether we should delay spring loaded mode -- for shortcuts and widgets that have * a configuration step, this allows the proper animations to run after other transitions. @@ -1108,6 +1141,7 @@ public class Launcher extends Activity * * @param savedState The previous state. */ + @SuppressWarnings("unchecked") private void restoreState(Bundle savedState) { if (savedState == null) { return; @@ -1160,6 +1194,8 @@ public class Launcher extends Activity int currentIndex = savedState.getInt("apps_customize_currentIndex"); mAppsCustomizeContent.restorePageForIndex(currentIndex); } + mItemIdToViewId = (HashMap) + savedState.getSerializable(RUNTIME_STATE_VIEW_IDS); } /** @@ -1784,6 +1820,7 @@ public class Launcher extends Activity int currentIndex = mAppsCustomizeContent.getSaveInstanceStateIndex(); outState.putInt("apps_customize_currentIndex", currentIndex); } + outState.putSerializable(RUNTIME_STATE_VIEW_IDS, mItemIdToViewId); } @Override diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 6c346c4b76..500f2a911a 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -949,7 +949,9 @@ public class Workspace extends SmoothPagedView } // Get the canonical child id to uniquely represent this view in this screen - int childId = LauncherModel.getCellLayoutChildId(container, screenId, x, y, spanX, spanY); + ItemInfo info = (ItemInfo) child.getTag(); + int childId = mLauncher.getViewIdForItem(info); + boolean markCellsAsOccupied = !(child instanceof Folder); if (!layout.addViewToCellLayout(child, insert ? 0 : -1, childId, lp, markCellsAsOccupied)) { // TODO: This branch occurs when the workspace is adding views @@ -2890,8 +2892,6 @@ public class Workspace extends SmoothPagedView lp.cellHSpan = item.spanX; lp.cellVSpan = item.spanY; lp.isLockedToGrid = true; - cell.setId(LauncherModel.getCellLayoutChildId(container, mDragInfo.screenId, - mTargetCell[0], mTargetCell[1], mDragInfo.spanX, mDragInfo.spanY)); if (container != LauncherSettings.Favorites.CONTAINER_HOTSEAT && cell instanceof LauncherAppWidgetHostView) { From 76128b6359fc430542811fbb32e4a1d593a9ef07 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Thu, 14 Nov 2013 16:43:59 +0000 Subject: [PATCH 012/147] Fix issue where custom content would be invisible (issue 11644432) -> Also making sure to clear the widget frame when moving to custom content. Change-Id: I460c707f1b6ec34bc6d78c9df43a613d9bfced3c --- src/com/android/launcher3/Workspace.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 500f2a911a..9b6784c8d5 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2110,7 +2110,8 @@ public class Workspace extends SmoothPagedView if (stateIsSmall) { finalAlpha = 0f; } else if (stateIsNormal && mWorkspaceFadeInAdjacentScreens) { - finalAlpha = i == getNextPage() ? 1f : 0f; + + finalAlpha = (i == getNextPage() || i < numCustomPages()) ? 1f : 0f; } else { finalAlpha = 1f; } @@ -2351,6 +2352,11 @@ public class Workspace extends SmoothPagedView final CellLayout cl = (CellLayout) getChildAt(i); cl.setShortcutAndWidgetAlpha(1f); } + } else { + for (int i = 0; i < numCustomPages(); i++) { + final CellLayout cl = (CellLayout) getChildAt(i); + cl.setShortcutAndWidgetAlpha(1f); + } } showCustomContentIfNecessary(); } @@ -4568,6 +4574,7 @@ public class Workspace extends SmoothPagedView child.requestFocus(); } } + exitWidgetResizeMode(); } @Override From eeb5bbc9409978cc2ae52d48380399fcde3d9f85 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 13 Nov 2013 15:47:05 -0800 Subject: [PATCH 013/147] Use the icon bounds for all calculations. - Fixes a drag and drop issue when the dynamic grid scales icons down, due to the drawable bounds not being equal to their bitmap sizes. Change-Id: If7c68b51131de7bac3195a2619e22340f7789432 --- .../launcher3/AppsCustomizePagedView.java | 7 +++++ src/com/android/launcher3/DragController.java | 3 +- src/com/android/launcher3/DragLayer.java | 10 +++++-- src/com/android/launcher3/DragSource.java | 5 ++++ src/com/android/launcher3/DragView.java | 12 ++++++++ .../android/launcher3/FastBitmapDrawable.java | 28 ++++--------------- src/com/android/launcher3/Folder.java | 5 ++++ src/com/android/launcher3/Workspace.java | 8 +++++- 8 files changed, 50 insertions(+), 28 deletions(-) diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index d9ca1570b8..688ff82aa4 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -915,6 +915,13 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen return true; } + @Override + public float getIntrinsicIconScaleFactor() { + LauncherAppState app = LauncherAppState.getInstance(); + DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); + return (float) grid.allAppsIconSizePx / grid.iconSizePx; + } + @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); diff --git a/src/com/android/launcher3/DragController.java b/src/com/android/launcher3/DragController.java index ab4823343e..1bfaa233b3 100644 --- a/src/com/android/launcher3/DragController.java +++ b/src/com/android/launcher3/DragController.java @@ -198,7 +198,7 @@ public class DragController { * @param dragRegion Coordinates within the bitmap b for the position of item being dragged. * Makes dragging feel more precise, e.g. you can clip out a transparent border */ - public void startDrag(Bitmap b, int dragLayerX, int dragLayerY, + public DragView startDrag(Bitmap b, int dragLayerX, int dragLayerY, DragSource source, Object dragInfo, int dragAction, Point dragOffset, Rect dragRegion, float initialDragViewScale) { if (PROFILE_DRAWING_DURING_DRAG) { @@ -245,6 +245,7 @@ public class DragController { mLauncher.getDragLayer().performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); dragView.show(mMotionDownX, mMotionDownY); handleMoveEvent(mMotionDownX, mMotionDownY); + return dragView; } /** diff --git a/src/com/android/launcher3/DragLayer.java b/src/com/android/launcher3/DragLayer.java index 159d7d992a..dc0ba903f5 100644 --- a/src/com/android/launcher3/DragLayer.java +++ b/src/com/android/launcher3/DragLayer.java @@ -522,14 +522,18 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang scale *= childScale; int toX = coord[0]; int toY = coord[1]; + float toScale = scale; if (child instanceof TextView) { TextView tv = (TextView) child; + // Account for the source scale of the icon (ie. from AllApps to Workspace, in which + // the workspace may have smaller icon bounds). + toScale = scale / dragView.getIntrinsicIconScaleFactor(); // The child may be scaled (always about the center of the view) so to account for it, // we have to offset the position by the scaled size. Once we do that, we can center // the drag view about the scaled child view. - toY += Math.round(scale * tv.getPaddingTop()); - toY -= dragView.getMeasuredHeight() * (1 - scale) / 2; + toY += Math.round(toScale * tv.getPaddingTop()); + toY -= dragView.getMeasuredHeight() * (1 - toScale) / 2; toX -= (dragView.getMeasuredWidth() - Math.round(scale * child.getMeasuredWidth())) / 2; } else if (child instanceof FolderIcon) { // Account for holographic blur padding on the drag view @@ -555,7 +559,7 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang } } }; - animateViewIntoPosition(dragView, fromX, fromY, toX, toY, 1, 1, 1, scale, scale, + animateViewIntoPosition(dragView, fromX, fromY, toX, toY, 1, 1, 1, toScale, toScale, onCompleteRunnable, ANIMATION_END_DISAPPEAR, duration, anchorView); } diff --git a/src/com/android/launcher3/DragSource.java b/src/com/android/launcher3/DragSource.java index 2ef99ae08a..cca9ab1a40 100644 --- a/src/com/android/launcher3/DragSource.java +++ b/src/com/android/launcher3/DragSource.java @@ -30,6 +30,11 @@ public interface DragSource { */ boolean supportsFlingToDelete(); + /* + * @return the scale of the icons over the workspace icon size + */ + float getIntrinsicIconScaleFactor(); + /** * A callback specifically made back to the source after an item from this source has been flung * to be deleted on a DropTarget. In such a situation, this method will be called after diff --git a/src/com/android/launcher3/DragView.java b/src/com/android/launcher3/DragView.java index 686cf62ff0..b66b55c9dc 100644 --- a/src/com/android/launcher3/DragView.java +++ b/src/com/android/launcher3/DragView.java @@ -51,6 +51,9 @@ public class DragView extends View { private float mOffsetX = 0.0f; private float mOffsetY = 0.0f; private float mInitialScale = 1f; + // The intrinsic icon scale factor is the scale factor for a drag icon over the workspace + // size. This is ignored for non-icons. + private float mIntrinsicIconScale = 1f; /** * Construct the drag view. @@ -120,6 +123,15 @@ public class DragView extends View { mPaint = new Paint(Paint.FILTER_BITMAP_FLAG); } + /** Sets the scale of the view over the normal workspace icon size. */ + public void setIntrinsicIconScaleFactor(float scale) { + mIntrinsicIconScale = scale; + } + + public float getIntrinsicIconScaleFactor() { + return mIntrinsicIconScale; + } + public float getOffsetY() { return mOffsetY; } diff --git a/src/com/android/launcher3/FastBitmapDrawable.java b/src/com/android/launcher3/FastBitmapDrawable.java index bce6707da2..83be143695 100644 --- a/src/com/android/launcher3/FastBitmapDrawable.java +++ b/src/com/android/launcher3/FastBitmapDrawable.java @@ -27,19 +27,11 @@ import android.graphics.drawable.Drawable; class FastBitmapDrawable extends Drawable { private Bitmap mBitmap; private int mAlpha; - private int mWidth; - private int mHeight; private final Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG); FastBitmapDrawable(Bitmap b) { - mAlpha = 255; + mAlpha = 255; mBitmap = b; - if (b != null) { - mWidth = mBitmap.getWidth(); - mHeight = mBitmap.getHeight(); - } else { - mWidth = mHeight = 0; - } } @Override @@ -76,32 +68,22 @@ class FastBitmapDrawable extends Drawable { @Override public int getIntrinsicWidth() { - return mWidth; + return getBounds().width(); } @Override public int getIntrinsicHeight() { - return mHeight; + return getBounds().height(); } @Override public int getMinimumWidth() { - return mWidth; + return getBounds().width(); } @Override public int getMinimumHeight() { - return mHeight; - } - - public void setBitmap(Bitmap b) { - mBitmap = b; - if (b != null) { - mWidth = mBitmap.getWidth(); - mHeight = mBitmap.getHeight(); - } else { - mWidth = mHeight = 0; - } + return getBounds().height(); } public Bitmap getBitmap() { diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index f26d01f5d0..7fe83c54d2 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -786,6 +786,11 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList } } + @Override + public float getIntrinsicIconScaleFactor() { + return 1f; + } + @Override public boolean supportsFlingToDelete() { return true; diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index f36c815da5..9f4f9d9181 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2536,8 +2536,9 @@ public class Workspace extends SmoothPagedView icon.clearPressedOrFocusedBackground(); } - mDragController.startDrag(b, dragLayerX, dragLayerY, source, child.getTag(), + DragView dv = mDragController.startDrag(b, dragLayerX, dragLayerY, source, child.getTag(), DragController.DRAG_ACTION_MOVE, dragVisualizeOffset, dragRect, scale); + dv.setIntrinsicIconScaleFactor(source.getIntrinsicIconScaleFactor()); if (child.getParent() instanceof ShortcutAndWidgetContainer) { mDragSourceInternal = (ShortcutAndWidgetContainer) child.getParent(); @@ -4140,6 +4141,11 @@ public class Workspace extends SmoothPagedView } } + @Override + public float getIntrinsicIconScaleFactor() { + return 1f; + } + @Override public boolean supportsFlingToDelete() { return true; From fe9d96a39651de99819208e95c7ec7d432a402e0 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 14 Nov 2013 11:30:05 -0800 Subject: [PATCH 014/147] Require valid arrays when adding and binding new Apps. (Bug 11627095) Change-Id: I8f2a4dc70bf376d804885f433ab20064823ebaac --- src/com/android/launcher3/InstallShortcutReceiver.java | 2 +- src/com/android/launcher3/LauncherModel.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index 835c472d47..fb75161fe7 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -294,7 +294,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { // Add the new apps to the model and bind them if (!addShortcuts.isEmpty()) { LauncherAppState app = LauncherAppState.getInstance(); - app.getModel().addAndBindAddedApps(context, addShortcuts, null); + app.getModel().addAndBindAddedApps(context, addShortcuts, new ArrayList()); } } } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index dff1814267..ba1bcdb1ea 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -282,7 +282,10 @@ public class LauncherModel extends BroadcastReceiver { addAndBindAddedApps(context, workspaceApps, cb, allAppsApps); } public void addAndBindAddedApps(final Context context, final ArrayList workspaceApps, - final Callbacks callbacks, final ArrayList allAppsApps) { + final Callbacks callbacks, final ArrayList allAppsApps) { + if (workspaceApps == null || allAppsApps == null) { + throw new RuntimeException("workspaceApps and allAppsApps must not be null"); + } if (workspaceApps.isEmpty() && allAppsApps.isEmpty()) { return; } @@ -1508,7 +1511,7 @@ public class LauncherModel extends BroadcastReceiver { } if (!added.isEmpty()) { Callbacks cb = mCallbacks != null ? mCallbacks.get() : null; - addAndBindAddedApps(context, added, cb, null); + addAndBindAddedApps(context, added, cb, new ArrayList()); } } From b38002419dcb456b51f5d320b224737f16a07088 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 24 Oct 2013 11:01:54 -0700 Subject: [PATCH 015/147] Adding method to get the search bar bounds. Change-Id: Iec2fe0992cc666432ba6b9eac7ee8bf63e49b146 --- src/com/android/launcher3/DeviceProfile.java | 717 ++++++++++++++++++ src/com/android/launcher3/DynamicGrid.java | 662 +--------------- .../android/launcher3/LauncherAppState.java | 2 +- 3 files changed, 719 insertions(+), 662 deletions(-) create mode 100644 src/com/android/launcher3/DeviceProfile.java diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java new file mode 100644 index 0000000000..626ec42cba --- /dev/null +++ b/src/com/android/launcher3/DeviceProfile.java @@ -0,0 +1,717 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.appwidget.AppWidgetHostView; +import android.content.ComponentName; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.Paint; +import android.graphics.Paint.FontMetrics; +import android.graphics.Point; +import android.graphics.PointF; +import android.graphics.Rect; +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.Gravity; +import android.view.Surface; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.widget.FrameLayout; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + + +class DeviceProfileQuery { + float widthDps; + float heightDps; + float value; + PointF dimens; + + DeviceProfileQuery(float w, float h, float v) { + widthDps = w; + heightDps = h; + value = v; + dimens = new PointF(w, h); + } +} + +public class DeviceProfile { + public static interface DeviceProfileCallbacks { + public void onAvailableSizeChanged(DeviceProfile grid); + } + + String name; + float minWidthDps; + float minHeightDps; + float numRows; + float numColumns; + float numHotseatIcons; + private float iconSize; + private float iconTextSize; + private int iconDrawablePaddingOriginalPx; + private float hotseatIconSize; + + boolean isLandscape; + boolean isTablet; + boolean isLargeTablet; + boolean transposeLayoutWithOrientation; + + int desiredWorkspaceLeftRightMarginPx; + int edgeMarginPx; + Rect defaultWidgetPadding; + + int widthPx; + int heightPx; + int availableWidthPx; + int availableHeightPx; + int defaultPageSpacingPx; + + int overviewModeMinIconZoneHeightPx; + int overviewModeMaxIconZoneHeightPx; + int overviewModeMaxBarWidthPx; + float overviewModeIconZoneRatio; + float overviewModeScaleFactor; + + int iconSizePx; + int iconTextSizePx; + int iconDrawablePaddingPx; + int cellWidthPx; + int cellHeightPx; + int allAppsIconSizePx; + int allAppsIconTextSizePx; + int allAppsCellWidthPx; + int allAppsCellHeightPx; + int allAppsCellPaddingPx; + int folderBackgroundOffset; + int folderIconSizePx; + int folderCellWidthPx; + int folderCellHeightPx; + int hotseatCellWidthPx; + int hotseatCellHeightPx; + int hotseatIconSizePx; + int hotseatBarHeightPx; + int hotseatAllAppsRank; + int allAppsNumRows; + int allAppsNumCols; + int searchBarSpaceWidthPx; + int searchBarSpaceMaxWidthPx; + int searchBarSpaceHeightPx; + int searchBarHeightPx; + int pageIndicatorHeightPx; + + private ArrayList mCallbacks = new ArrayList(); + + DeviceProfile(String n, float w, float h, float r, float c, + float is, float its, float hs, float his) { + // Ensure that we have an odd number of hotseat items (since we need to place all apps) + if (!AppsCustomizePagedView.DISABLE_ALL_APPS && hs % 2 == 0) { + throw new RuntimeException("All Device Profiles must have an odd number of hotseat spaces"); + } + + name = n; + minWidthDps = w; + minHeightDps = h; + numRows = r; + numColumns = c; + iconSize = is; + iconTextSize = its; + numHotseatIcons = hs; + hotseatIconSize = his; + } + + DeviceProfile(Context context, + ArrayList profiles, + float minWidth, float minHeight, + int wPx, int hPx, + int awPx, int ahPx, + Resources res) { + DisplayMetrics dm = res.getDisplayMetrics(); + ArrayList points = + new ArrayList(); + transposeLayoutWithOrientation = + res.getBoolean(R.bool.hotseat_transpose_layout_with_orientation); + minWidthDps = minWidth; + minHeightDps = minHeight; + + ComponentName cn = new ComponentName(context.getPackageName(), + this.getClass().getName()); + defaultWidgetPadding = AppWidgetHostView.getDefaultPaddingForWidget(context, cn, null); + edgeMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_edge_margin); + desiredWorkspaceLeftRightMarginPx = 2 * edgeMarginPx; + pageIndicatorHeightPx = + res.getDimensionPixelSize(R.dimen.dynamic_grid_page_indicator_height); + defaultPageSpacingPx = + res.getDimensionPixelSize(R.dimen.dynamic_grid_workspace_page_spacing); + allAppsCellPaddingPx = + res.getDimensionPixelSize(R.dimen.dynamic_grid_all_apps_cell_padding); + overviewModeMinIconZoneHeightPx = + 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); + overviewModeIconZoneRatio = + res.getInteger(R.integer.config_dynamic_grid_overview_icon_zone_percentage) / 100f; + overviewModeScaleFactor = + res.getInteger(R.integer.config_dynamic_grid_overview_scale_percentage) / 100f; + + // Interpolate the rows + for (DeviceProfile p : profiles) { + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.numRows)); + } + numRows = Math.round(invDistWeightedInterpolate(minWidth, minHeight, points)); + // Interpolate the columns + points.clear(); + for (DeviceProfile p : profiles) { + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.numColumns)); + } + numColumns = Math.round(invDistWeightedInterpolate(minWidth, minHeight, points)); + // Interpolate the hotseat length + points.clear(); + for (DeviceProfile p : profiles) { + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.numHotseatIcons)); + } + numHotseatIcons = Math.round(invDistWeightedInterpolate(minWidth, minHeight, points)); + hotseatAllAppsRank = (int) (numHotseatIcons / 2); + + // Interpolate the icon size + points.clear(); + for (DeviceProfile p : profiles) { + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.iconSize)); + } + iconSize = invDistWeightedInterpolate(minWidth, minHeight, points); + // AllApps uses the original non-scaled icon size + allAppsIconSizePx = DynamicGrid.pxFromDp(iconSize, dm); + + // Interpolate the icon text size + points.clear(); + for (DeviceProfile p : profiles) { + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.iconTextSize)); + } + iconTextSize = invDistWeightedInterpolate(minWidth, minHeight, points); + iconDrawablePaddingOriginalPx = + res.getDimensionPixelSize(R.dimen.dynamic_grid_icon_drawable_padding); + // AllApps uses the original non-scaled icon text size + allAppsIconTextSizePx = DynamicGrid.pxFromDp(iconTextSize, dm); + + // Interpolate the hotseat icon size + points.clear(); + for (DeviceProfile p : profiles) { + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.hotseatIconSize)); + } + // Hotseat + hotseatIconSize = invDistWeightedInterpolate(minWidth, minHeight, points); + + // Calculate the remaining vars + updateFromConfiguration(context, res, wPx, hPx, awPx, ahPx); + updateAvailableDimensions(context); + } + + void addCallback(DeviceProfileCallbacks cb) { + mCallbacks.add(cb); + cb.onAvailableSizeChanged(this); + } + void removeCallback(DeviceProfileCallbacks cb) { + mCallbacks.remove(cb); + } + + private int getDeviceOrientation(Context context) { + WindowManager windowManager = (WindowManager) + context.getSystemService(Context.WINDOW_SERVICE); + Resources resources = context.getResources(); + DisplayMetrics dm = resources.getDisplayMetrics(); + Configuration config = resources.getConfiguration(); + int rotation = windowManager.getDefaultDisplay().getRotation(); + + boolean isLandscape = (config.orientation == Configuration.ORIENTATION_LANDSCAPE) && + (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180); + boolean isRotatedPortrait = (config.orientation == Configuration.ORIENTATION_PORTRAIT) && + (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270); + if (isLandscape || isRotatedPortrait) { + return CellLayout.LANDSCAPE; + } else { + return CellLayout.PORTRAIT; + } + } + + private void updateAvailableDimensions(Context context) { + WindowManager windowManager = (WindowManager) + context.getSystemService(Context.WINDOW_SERVICE); + Display display = windowManager.getDefaultDisplay(); + Resources resources = context.getResources(); + DisplayMetrics dm = resources.getDisplayMetrics(); + Configuration config = resources.getConfiguration(); + + // There are three possible configurations that the dynamic grid accounts for, portrait, + // landscape with the nav bar at the bottom, and landscape with the nav bar at the side. + // To prevent waiting for fitSystemWindows(), we make the observation that in landscape, + // the height is the smallest height (either with the nav bar at the bottom or to the + // side) and otherwise, the height is simply the largest possible height for a portrait + // device. + Point size = new Point(); + Point smallestSize = new Point(); + Point largestSize = new Point(); + display.getSize(size); + display.getCurrentSizeRange(smallestSize, largestSize); + availableWidthPx = size.x; + if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) { + availableHeightPx = smallestSize.y; + } else { + availableHeightPx = largestSize.y; + } + + // Check to see if the icons fit in the new available height. If not, then we need to + // shrink the icon size. + Rect workspacePadding = getWorkspacePadding(); + float scale = 1f; + int drawablePadding = iconDrawablePaddingOriginalPx; + updateIconSize(1f, drawablePadding, resources, dm); + float usedHeight = (cellHeightPx * numRows); + int maxHeight = (availableHeightPx - workspacePadding.top - workspacePadding.bottom); + if (usedHeight > maxHeight) { + scale = maxHeight / usedHeight; + drawablePadding = 0; + } + updateIconSize(scale, drawablePadding, resources, dm); + + // Make the callbacks + for (DeviceProfileCallbacks cb : mCallbacks) { + cb.onAvailableSizeChanged(this); + } + } + + private void updateIconSize(float scale, int drawablePadding, Resources resources, + DisplayMetrics dm) { + iconSizePx = (int) (DynamicGrid.pxFromDp(iconSize, dm) * scale); + iconTextSizePx = (int) (DynamicGrid.pxFromSp(iconTextSize, dm) * scale); + iconDrawablePaddingPx = drawablePadding; + hotseatIconSizePx = (int) (DynamicGrid.pxFromDp(hotseatIconSize, dm) * scale); + + // Search Bar + searchBarSpaceMaxWidthPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width); + searchBarHeightPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height); + searchBarSpaceWidthPx = Math.min(searchBarSpaceMaxWidthPx, widthPx); + searchBarSpaceHeightPx = searchBarHeightPx + 2 * edgeMarginPx; + + // Calculate the actual text height + Paint textPaint = new Paint(); + textPaint.setTextSize(iconTextSizePx); + FontMetrics fm = textPaint.getFontMetrics(); + cellWidthPx = iconSizePx; + cellHeightPx = iconSizePx + iconDrawablePaddingPx + (int) Math.ceil(fm.bottom - fm.top); + + // Hotseat + hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx; + hotseatCellWidthPx = iconSizePx; + hotseatCellHeightPx = iconSizePx; + + // Folder + folderCellWidthPx = cellWidthPx + 3 * edgeMarginPx; + folderCellHeightPx = cellHeightPx + edgeMarginPx; + folderBackgroundOffset = -edgeMarginPx; + folderIconSizePx = iconSizePx + 2 * -folderBackgroundOffset; + + // All Apps + Rect padding = getWorkspacePadding(isLandscape ? + CellLayout.LANDSCAPE : CellLayout.PORTRAIT); + int pageIndicatorOffset = + resources.getDimensionPixelSize(R.dimen.apps_customize_page_indicator_offset); + allAppsCellWidthPx = allAppsIconSizePx; + allAppsCellHeightPx = allAppsIconSizePx + drawablePadding + iconTextSizePx; + int maxLongEdgeCellCount = + resources.getInteger(R.integer.config_dynamic_grid_max_long_edge_cell_count); + int maxShortEdgeCellCount = + resources.getInteger(R.integer.config_dynamic_grid_max_short_edge_cell_count); + int minEdgeCellCount = + resources.getInteger(R.integer.config_dynamic_grid_min_edge_cell_count); + int maxRows = (isLandscape ? maxShortEdgeCellCount : maxLongEdgeCellCount); + int maxCols = (isLandscape ? maxLongEdgeCellCount : maxShortEdgeCellCount); + + allAppsNumRows = (availableHeightPx - pageIndicatorHeightPx) / + (allAppsCellHeightPx + allAppsCellPaddingPx); + allAppsNumRows = Math.max(minEdgeCellCount, Math.min(maxRows, allAppsNumRows)); + allAppsNumCols = (availableWidthPx) / + (allAppsCellWidthPx + allAppsCellPaddingPx); + allAppsNumCols = Math.max(minEdgeCellCount, Math.min(maxCols, allAppsNumCols)); + } + + void updateFromConfiguration(Context context, Resources resources, int wPx, int hPx, + int awPx, int ahPx) { + isLandscape = (resources.getConfiguration().orientation == + Configuration.ORIENTATION_LANDSCAPE); + isTablet = resources.getBoolean(R.bool.is_tablet); + isLargeTablet = resources.getBoolean(R.bool.is_large_tablet); + widthPx = wPx; + heightPx = hPx; + availableWidthPx = awPx; + availableHeightPx = ahPx; + + updateAvailableDimensions(context); + } + + private float dist(PointF p0, PointF p1) { + return (float) Math.sqrt((p1.x - p0.x)*(p1.x-p0.x) + + (p1.y-p0.y)*(p1.y-p0.y)); + } + + private float weight(PointF a, PointF b, + float pow) { + float d = dist(a, b); + if (d == 0f) { + return Float.POSITIVE_INFINITY; + } + return (float) (1f / Math.pow(d, pow)); + } + + private float invDistWeightedInterpolate(float width, float height, + ArrayList points) { + float sum = 0; + float weights = 0; + float pow = 5; + float kNearestNeighbors = 3; + final PointF xy = new PointF(width, height); + + ArrayList pointsByNearness = points; + Collections.sort(pointsByNearness, new Comparator() { + public int compare(DeviceProfileQuery a, DeviceProfileQuery b) { + return (int) (dist(xy, a.dimens) - dist(xy, b.dimens)); + } + }); + + for (int i = 0; i < pointsByNearness.size(); ++i) { + DeviceProfileQuery p = pointsByNearness.get(i); + if (i < kNearestNeighbors) { + float w = weight(xy, p.dimens, pow); + if (w == Float.POSITIVE_INFINITY) { + return p.value; + } + weights += w; + } + } + + for (int i = 0; i < pointsByNearness.size(); ++i) { + DeviceProfileQuery p = pointsByNearness.get(i); + if (i < kNearestNeighbors) { + float w = weight(xy, p.dimens, pow); + sum += w * p.value / weights; + } + } + + return sum; + } + + /** Returns the search bar bounds in the current orientation */ + Rect getSearchBarBounds() { + return getSearchBarBounds(isLandscape ? CellLayout.LANDSCAPE : CellLayout.PORTRAIT); + } + /** Returns the search bar bounds in the specified orientation */ + Rect getSearchBarBounds(int orientation) { + Rect bounds = new Rect(); + if (orientation == CellLayout.LANDSCAPE && + transposeLayoutWithOrientation) { + bounds.set(0, edgeMarginPx, searchBarSpaceHeightPx, availableHeightPx - edgeMarginPx); + } else { + if (isTablet()) { + // Pad the left and right of the workspace to ensure consistent spacing + // between all icons + int width = (orientation == CellLayout.LANDSCAPE) + ? Math.max(widthPx, heightPx) + : Math.min(widthPx, heightPx); + // XXX: If the icon size changes across orientations, we will have to take + // that into account here too. + int gap = (int) ((width - 2 * edgeMarginPx - + (numColumns * cellWidthPx)) / (2 * (numColumns + 1))); + bounds.set(edgeMarginPx + gap, 0, availableWidthPx - (edgeMarginPx + gap), + searchBarSpaceHeightPx); + } else { + bounds.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, 0, + availableWidthPx - (desiredWorkspaceLeftRightMarginPx - + defaultWidgetPadding.right), searchBarSpaceHeightPx); + } + } + return bounds; + } + + /** Returns the workspace padding in the specified orientation */ + Rect getWorkspacePadding() { + return getWorkspacePadding(isLandscape ? CellLayout.LANDSCAPE : CellLayout.PORTRAIT); + } + Rect getWorkspacePadding(int orientation) { + Rect searchBarBounds = getSearchBarBounds(orientation); + Rect padding = new Rect(); + if (orientation == CellLayout.LANDSCAPE && + transposeLayoutWithOrientation) { + // Pad the left and right of the workspace with search/hotseat bar sizes + padding.set(searchBarBounds.right, edgeMarginPx, + hotseatBarHeightPx, edgeMarginPx); + } else { + if (isTablet()) { + // Pad the left and right of the workspace to ensure consistent spacing + // between all icons + int width = (orientation == CellLayout.LANDSCAPE) + ? Math.max(widthPx, heightPx) + : Math.min(widthPx, heightPx); + // XXX: If the icon size changes across orientations, we will have to take + // that into account here too. + int gap = (int) ((width - 2 * edgeMarginPx - + (numColumns * cellWidthPx)) / (2 * (numColumns + 1))); + padding.set(edgeMarginPx + gap, + searchBarBounds.bottom, + edgeMarginPx + gap, + hotseatBarHeightPx + pageIndicatorHeightPx); + } else { + // Pad the top and bottom of the workspace with search/hotseat bar sizes + padding.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, + searchBarBounds.bottom, + desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.right, + hotseatBarHeightPx + pageIndicatorHeightPx); + } + } + return padding; + } + + int getWorkspacePageSpacing(int orientation) { + if (orientation == CellLayout.LANDSCAPE && + transposeLayoutWithOrientation) { + // In landscape mode the page spacing is set to the default. + return defaultPageSpacingPx; + } else { + // 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; + } + } + + Rect getOverviewModeButtonBarRect() { + int zoneHeight = (int) (overviewModeIconZoneRatio * availableHeightPx); + zoneHeight = Math.min(overviewModeMaxIconZoneHeightPx, + Math.max(overviewModeMinIconZoneHeightPx, zoneHeight)); + return new Rect(0, availableHeightPx - zoneHeight, 0, availableHeightPx); + } + + float getOverviewModeScale() { + Rect workspacePadding = getWorkspacePadding(); + Rect overviewBar = getOverviewModeButtonBarRect(); + int pageSpace = availableHeightPx - workspacePadding.top - workspacePadding.bottom; + return (overviewModeScaleFactor * (pageSpace - overviewBar.height())) / pageSpace; + } + + // The rect returned will be extended to below the system ui that covers the workspace + Rect getHotseatRect() { + if (isVerticalBarLayout()) { + return new Rect(availableWidthPx - hotseatBarHeightPx, 0, + Integer.MAX_VALUE, availableHeightPx); + } else { + return new Rect(0, availableHeightPx - hotseatBarHeightPx, + availableWidthPx, Integer.MAX_VALUE); + } + } + + int calculateCellWidth(int width, int countX) { + return width / countX; + } + int calculateCellHeight(int height, int countY) { + return height / countY; + } + + boolean isPhone() { + return !isTablet && !isLargeTablet; + } + boolean isTablet() { + return isTablet; + } + boolean isLargeTablet() { + return isLargeTablet; + } + + boolean isVerticalBarLayout() { + return isLandscape && transposeLayoutWithOrientation; + } + + boolean shouldFadeAdjacentWorkspaceScreens() { + return isVerticalBarLayout() || isLargeTablet(); + } + + public void layout(Launcher launcher) { + FrameLayout.LayoutParams lp; + Resources res = launcher.getResources(); + boolean hasVerticalBarLayout = isVerticalBarLayout(); + + // Layout the search bar space + View searchBar = launcher.getSearchBar(); + lp = (FrameLayout.LayoutParams) searchBar.getLayoutParams(); + if (hasVerticalBarLayout) { + // Vertical search bar + lp.gravity = Gravity.TOP | Gravity.LEFT; + lp.width = searchBarSpaceHeightPx; + lp.height = LayoutParams.MATCH_PARENT; + searchBar.setPadding( + 0, 2 * edgeMarginPx, 0, + 2 * edgeMarginPx); + } else { + // Horizontal search bar + lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; + lp.width = searchBarSpaceWidthPx; + lp.height = searchBarSpaceHeightPx; + searchBar.setPadding( + 2 * edgeMarginPx, + 2 * edgeMarginPx, + 2 * edgeMarginPx, 0); + } + 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) { + if (hasVerticalBarLayout) { + // TODO: MOVE THIS INTO SEARCH BAR MEASURE + } else { + lp = (FrameLayout.LayoutParams) voiceButtonProxy.getLayoutParams(); + lp.gravity = Gravity.TOP | Gravity.END; + lp.width = (widthPx - searchBarSpaceWidthPx) / 2 + + 2 * iconSizePx; + lp.height = searchBarSpaceHeightPx; + } + } + + // Layout the workspace + PagedView workspace = (PagedView) launcher.findViewById(R.id.workspace); + lp = (FrameLayout.LayoutParams) workspace.getLayoutParams(); + lp.gravity = Gravity.CENTER; + int orientation = isLandscape ? CellLayout.LANDSCAPE : CellLayout.PORTRAIT; + Rect padding = getWorkspacePadding(orientation); + workspace.setLayoutParams(lp); + workspace.setPadding(padding.left, padding.top, padding.right, padding.bottom); + workspace.setPageSpacing(getWorkspacePageSpacing(orientation)); + + // Layout the hotseat + View hotseat = launcher.findViewById(R.id.hotseat); + lp = (FrameLayout.LayoutParams) hotseat.getLayoutParams(); + if (hasVerticalBarLayout) { + // Vertical hotseat + lp.gravity = Gravity.RIGHT; + lp.width = hotseatBarHeightPx; + lp.height = LayoutParams.MATCH_PARENT; + hotseat.findViewById(R.id.layout).setPadding(0, 2 * edgeMarginPx, 0, 2 * edgeMarginPx); + } else if (isTablet()) { + // Pad the hotseat with the grid gap calculated above + int gridGap = (int) ((widthPx - 2 * edgeMarginPx - + (numColumns * cellWidthPx)) / (2 * (numColumns + 1))); + int gridWidth = (int) ((numColumns * cellWidthPx) + + ((numColumns - 1) * gridGap)); + int hotseatGap = (int) Math.max(0, + (gridWidth - (numHotseatIcons * hotseatCellWidthPx)) + / (numHotseatIcons - 1)); + lp.gravity = Gravity.BOTTOM; + lp.width = LayoutParams.MATCH_PARENT; + lp.height = hotseatBarHeightPx; + hotseat.setPadding(2 * edgeMarginPx + gridGap + hotseatGap, 0, + 2 * edgeMarginPx + gridGap + hotseatGap, + 2 * edgeMarginPx); + } else { + // For phones, layout the hotseat without any bottom margin + // to ensure that we have space for the folders + lp.gravity = Gravity.BOTTOM; + lp.width = LayoutParams.MATCH_PARENT; + lp.height = hotseatBarHeightPx; + hotseat.findViewById(R.id.layout).setPadding(2 * edgeMarginPx, 0, + 2 * edgeMarginPx, 0); + } + hotseat.setLayoutParams(lp); + + // Layout the page indicators + View pageIndicator = launcher.findViewById(R.id.page_indicator); + if (pageIndicator != null) { + if (hasVerticalBarLayout) { + // Hide the page indicators when we have vertical search/hotseat + pageIndicator.setVisibility(View.GONE); + } else { + // Put the page indicators above the hotseat + lp = (FrameLayout.LayoutParams) pageIndicator.getLayoutParams(); + lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + lp.width = LayoutParams.WRAP_CONTENT; + lp.height = LayoutParams.WRAP_CONTENT; + lp.bottomMargin = hotseatBarHeightPx; + pageIndicator.setLayoutParams(lp); + } + } + + // Layout AllApps + AppsCustomizeTabHost host = (AppsCustomizeTabHost) + launcher.findViewById(R.id.apps_customize_pane); + if (host != null) { + // Center the all apps page indicator + int pageIndicatorHeight = (int) (pageIndicatorHeightPx * Math.min(1f, + (allAppsIconSizePx / DynamicGrid.DEFAULT_ICON_SIZE_PX))); + pageIndicator = host.findViewById(R.id.apps_customize_page_indicator); + if (pageIndicator != null) { + lp = (FrameLayout.LayoutParams) pageIndicator.getLayoutParams(); + lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + lp.width = LayoutParams.WRAP_CONTENT; + lp.height = pageIndicatorHeight; + pageIndicator.setLayoutParams(lp); + } + + AppsCustomizePagedView pagedView = (AppsCustomizePagedView) + host.findViewById(R.id.apps_customize_pane_content); + padding = new Rect(); + if (pagedView != null) { + // Constrain the dimensions of all apps so that it does not span the full width + int paddingLR = (availableWidthPx - (allAppsCellWidthPx * allAppsNumCols)) / + (2 * (allAppsNumCols + 1)); + int paddingTB = (availableHeightPx - (allAppsCellHeightPx * allAppsNumRows)) / + (2 * (allAppsNumRows + 1)); + paddingLR = Math.min(paddingLR, (int)((paddingLR + paddingTB) * 0.75f)); + paddingTB = Math.min(paddingTB, (int)((paddingLR + paddingTB) * 0.75f)); + int maxAllAppsWidth = (allAppsNumCols * (allAppsCellWidthPx + 2 * paddingLR)); + int gridPaddingLR = (availableWidthPx - maxAllAppsWidth) / 2; + if (gridPaddingLR > (allAppsCellWidthPx / 4)) { + padding.left = padding.right = gridPaddingLR; + } + // The icons are centered, so we can't just offset by the page indicator height + // because the empty space will actually be pageIndicatorHeight + paddingTB + padding.bottom = Math.max(0, pageIndicatorHeight - paddingTB); + pagedView.setAllAppsPadding(padding); + pagedView.setWidgetsPageIndicatorPadding(pageIndicatorHeight); + } + } + + // Layout the Overview Mode + View 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.height = r.height(); + overviewMode.setLayoutParams(lp); + } + } +} diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java index 5f8c011f93..42aa20d7df 100644 --- a/src/com/android/launcher3/DynamicGrid.java +++ b/src/com/android/launcher3/DynamicGrid.java @@ -16,674 +16,14 @@ package com.android.launcher3; -import android.appwidget.AppWidgetHostView; -import android.content.ComponentName; import android.content.Context; -import android.content.res.Configuration; import android.content.res.Resources; -import android.graphics.Paint; -import android.graphics.Paint.FontMetrics; -import android.graphics.Point; -import android.graphics.PointF; -import android.graphics.Rect; import android.util.DisplayMetrics; import android.util.TypedValue; -import android.view.Display; -import android.view.Gravity; -import android.view.Surface; -import android.view.View; -import android.view.ViewGroup.LayoutParams; -import android.view.WindowManager; -import android.widget.FrameLayout; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -class DeviceProfileQuery { - float widthDps; - float heightDps; - float value; - PointF dimens; - - DeviceProfileQuery(float w, float h, float v) { - widthDps = w; - heightDps = h; - value = v; - dimens = new PointF(w, h); - } -} - -class DeviceProfile { - public static interface DeviceProfileCallbacks { - public void onAvailableSizeChanged(DeviceProfile grid); - } - - String name; - float minWidthDps; - float minHeightDps; - float numRows; - float numColumns; - float numHotseatIcons; - private float iconSize; - private float iconTextSize; - private int iconDrawablePaddingOriginalPx; - private float hotseatIconSize; - - boolean isLandscape; - boolean isTablet; - boolean isLargeTablet; - boolean transposeLayoutWithOrientation; - - int desiredWorkspaceLeftRightMarginPx; - int edgeMarginPx; - Rect defaultWidgetPadding; - - int widthPx; - int heightPx; - int availableWidthPx; - int availableHeightPx; - int defaultPageSpacingPx; - - int overviewModeMinIconZoneHeightPx; - int overviewModeMaxIconZoneHeightPx; - int overviewModeMaxBarWidthPx; - float overviewModeIconZoneRatio; - float overviewModeScaleFactor; - - int iconSizePx; - int iconTextSizePx; - int iconDrawablePaddingPx; - int cellWidthPx; - int cellHeightPx; - int allAppsIconSizePx; - int allAppsIconTextSizePx; - int allAppsCellWidthPx; - int allAppsCellHeightPx; - int allAppsCellPaddingPx; - int folderBackgroundOffset; - int folderIconSizePx; - int folderCellWidthPx; - int folderCellHeightPx; - int hotseatCellWidthPx; - int hotseatCellHeightPx; - int hotseatIconSizePx; - int hotseatBarHeightPx; - int hotseatAllAppsRank; - int allAppsNumRows; - int allAppsNumCols; - int searchBarSpaceWidthPx; - int searchBarSpaceMaxWidthPx; - int searchBarSpaceHeightPx; - int searchBarHeightPx; - int pageIndicatorHeightPx; - - private ArrayList mCallbacks = new ArrayList(); - - DeviceProfile(String n, float w, float h, float r, float c, - float is, float its, float hs, float his) { - // Ensure that we have an odd number of hotseat items (since we need to place all apps) - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && hs % 2 == 0) { - throw new RuntimeException("All Device Profiles must have an odd number of hotseat spaces"); - } - - name = n; - minWidthDps = w; - minHeightDps = h; - numRows = r; - numColumns = c; - iconSize = is; - iconTextSize = its; - numHotseatIcons = hs; - hotseatIconSize = his; - } - - DeviceProfile(Context context, - ArrayList profiles, - float minWidth, float minHeight, - int wPx, int hPx, - int awPx, int ahPx, - Resources res) { - DisplayMetrics dm = res.getDisplayMetrics(); - ArrayList points = - new ArrayList(); - transposeLayoutWithOrientation = - res.getBoolean(R.bool.hotseat_transpose_layout_with_orientation); - minWidthDps = minWidth; - minHeightDps = minHeight; - - ComponentName cn = new ComponentName(context.getPackageName(), - this.getClass().getName()); - defaultWidgetPadding = AppWidgetHostView.getDefaultPaddingForWidget(context, cn, null); - edgeMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_edge_margin); - desiredWorkspaceLeftRightMarginPx = 2 * edgeMarginPx; - pageIndicatorHeightPx = - res.getDimensionPixelSize(R.dimen.dynamic_grid_page_indicator_height); - defaultPageSpacingPx = - res.getDimensionPixelSize(R.dimen.dynamic_grid_workspace_page_spacing); - allAppsCellPaddingPx = - res.getDimensionPixelSize(R.dimen.dynamic_grid_all_apps_cell_padding); - overviewModeMinIconZoneHeightPx = - 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); - overviewModeIconZoneRatio = - res.getInteger(R.integer.config_dynamic_grid_overview_icon_zone_percentage) / 100f; - overviewModeScaleFactor = - res.getInteger(R.integer.config_dynamic_grid_overview_scale_percentage) / 100f; - - // Interpolate the rows - for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.numRows)); - } - numRows = Math.round(invDistWeightedInterpolate(minWidth, minHeight, points)); - // Interpolate the columns - points.clear(); - for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.numColumns)); - } - numColumns = Math.round(invDistWeightedInterpolate(minWidth, minHeight, points)); - // Interpolate the hotseat length - points.clear(); - for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.numHotseatIcons)); - } - numHotseatIcons = Math.round(invDistWeightedInterpolate(minWidth, minHeight, points)); - hotseatAllAppsRank = (int) (numHotseatIcons / 2); - - // Interpolate the icon size - points.clear(); - for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.iconSize)); - } - iconSize = invDistWeightedInterpolate(minWidth, minHeight, points); - // AllApps uses the original non-scaled icon size - allAppsIconSizePx = DynamicGrid.pxFromDp(iconSize, dm); - - // Interpolate the icon text size - points.clear(); - for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.iconTextSize)); - } - iconTextSize = invDistWeightedInterpolate(minWidth, minHeight, points); - iconDrawablePaddingOriginalPx = - res.getDimensionPixelSize(R.dimen.dynamic_grid_icon_drawable_padding); - // AllApps uses the original non-scaled icon text size - allAppsIconTextSizePx = DynamicGrid.pxFromDp(iconTextSize, dm); - - // Interpolate the hotseat icon size - points.clear(); - for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.hotseatIconSize)); - } - // Hotseat - hotseatIconSize = invDistWeightedInterpolate(minWidth, minHeight, points); - - // Calculate the remaining vars - updateFromConfiguration(context, res, wPx, hPx, awPx, ahPx); - updateAvailableDimensions(context); - } - - void addCallback(DeviceProfileCallbacks cb) { - mCallbacks.add(cb); - cb.onAvailableSizeChanged(this); - } - void removeCallback(DeviceProfileCallbacks cb) { - mCallbacks.remove(cb); - } - - private int getDeviceOrientation(Context context) { - WindowManager windowManager = (WindowManager) - context.getSystemService(Context.WINDOW_SERVICE); - Resources resources = context.getResources(); - DisplayMetrics dm = resources.getDisplayMetrics(); - Configuration config = resources.getConfiguration(); - int rotation = windowManager.getDefaultDisplay().getRotation(); - - boolean isLandscape = (config.orientation == Configuration.ORIENTATION_LANDSCAPE) && - (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180); - boolean isRotatedPortrait = (config.orientation == Configuration.ORIENTATION_PORTRAIT) && - (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270); - if (isLandscape || isRotatedPortrait) { - return CellLayout.LANDSCAPE; - } else { - return CellLayout.PORTRAIT; - } - } - - private void updateAvailableDimensions(Context context) { - WindowManager windowManager = (WindowManager) - context.getSystemService(Context.WINDOW_SERVICE); - Display display = windowManager.getDefaultDisplay(); - Resources resources = context.getResources(); - DisplayMetrics dm = resources.getDisplayMetrics(); - Configuration config = resources.getConfiguration(); - - // There are three possible configurations that the dynamic grid accounts for, portrait, - // landscape with the nav bar at the bottom, and landscape with the nav bar at the side. - // To prevent waiting for fitSystemWindows(), we make the observation that in landscape, - // the height is the smallest height (either with the nav bar at the bottom or to the - // side) and otherwise, the height is simply the largest possible height for a portrait - // device. - Point size = new Point(); - Point smallestSize = new Point(); - Point largestSize = new Point(); - display.getSize(size); - display.getCurrentSizeRange(smallestSize, largestSize); - availableWidthPx = size.x; - if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) { - availableHeightPx = smallestSize.y; - } else { - availableHeightPx = largestSize.y; - } - - // Check to see if the icons fit in the new available height. If not, then we need to - // shrink the icon size. - Rect workspacePadding = getWorkspacePadding(); - float scale = 1f; - int drawablePadding = iconDrawablePaddingOriginalPx; - updateIconSize(1f, drawablePadding, resources, dm); - float usedHeight = (cellHeightPx * numRows); - int maxHeight = (availableHeightPx - workspacePadding.top - workspacePadding.bottom); - if (usedHeight > maxHeight) { - scale = maxHeight / usedHeight; - drawablePadding = 0; - } - updateIconSize(scale, drawablePadding, resources, dm); - - // Make the callbacks - for (DeviceProfileCallbacks cb : mCallbacks) { - cb.onAvailableSizeChanged(this); - } - } - - private void updateIconSize(float scale, int drawablePadding, Resources resources, - DisplayMetrics dm) { - iconSizePx = (int) (DynamicGrid.pxFromDp(iconSize, dm) * scale); - iconTextSizePx = (int) (DynamicGrid.pxFromSp(iconTextSize, dm) * scale); - iconDrawablePaddingPx = drawablePadding; - hotseatIconSizePx = (int) (DynamicGrid.pxFromDp(hotseatIconSize, dm) * scale); - - // Search Bar - searchBarSpaceMaxWidthPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width); - searchBarHeightPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height); - searchBarSpaceWidthPx = Math.min(searchBarSpaceMaxWidthPx, widthPx); - searchBarSpaceHeightPx = searchBarHeightPx + 2 * edgeMarginPx; - - // Calculate the actual text height - Paint textPaint = new Paint(); - textPaint.setTextSize(iconTextSizePx); - FontMetrics fm = textPaint.getFontMetrics(); - cellWidthPx = iconSizePx; - cellHeightPx = iconSizePx + iconDrawablePaddingPx + (int) Math.ceil(fm.bottom - fm.top); - - // Hotseat - hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx; - hotseatCellWidthPx = iconSizePx; - hotseatCellHeightPx = iconSizePx; - - // Folder - folderCellWidthPx = cellWidthPx + 3 * edgeMarginPx; - folderCellHeightPx = cellHeightPx + edgeMarginPx; - folderBackgroundOffset = -edgeMarginPx; - folderIconSizePx = iconSizePx + 2 * -folderBackgroundOffset; - - // All Apps - Rect padding = getWorkspacePadding(isLandscape ? - CellLayout.LANDSCAPE : CellLayout.PORTRAIT); - int pageIndicatorOffset = - resources.getDimensionPixelSize(R.dimen.apps_customize_page_indicator_offset); - allAppsCellWidthPx = allAppsIconSizePx; - allAppsCellHeightPx = allAppsIconSizePx + drawablePadding + iconTextSizePx; - int maxLongEdgeCellCount = - resources.getInteger(R.integer.config_dynamic_grid_max_long_edge_cell_count); - int maxShortEdgeCellCount = - resources.getInteger(R.integer.config_dynamic_grid_max_short_edge_cell_count); - int minEdgeCellCount = - resources.getInteger(R.integer.config_dynamic_grid_min_edge_cell_count); - int maxRows = (isLandscape ? maxShortEdgeCellCount : maxLongEdgeCellCount); - int maxCols = (isLandscape ? maxLongEdgeCellCount : maxShortEdgeCellCount); - - allAppsNumRows = (availableHeightPx - pageIndicatorHeightPx) / - (allAppsCellHeightPx + allAppsCellPaddingPx); - allAppsNumRows = Math.max(minEdgeCellCount, Math.min(maxRows, allAppsNumRows)); - allAppsNumCols = (availableWidthPx) / - (allAppsCellWidthPx + allAppsCellPaddingPx); - allAppsNumCols = Math.max(minEdgeCellCount, Math.min(maxCols, allAppsNumCols)); - } - - void updateFromConfiguration(Context context, Resources resources, int wPx, int hPx, - int awPx, int ahPx) { - isLandscape = (resources.getConfiguration().orientation == - Configuration.ORIENTATION_LANDSCAPE); - isTablet = resources.getBoolean(R.bool.is_tablet); - isLargeTablet = resources.getBoolean(R.bool.is_large_tablet); - widthPx = wPx; - heightPx = hPx; - availableWidthPx = awPx; - availableHeightPx = ahPx; - - updateAvailableDimensions(context); - } - - private float dist(PointF p0, PointF p1) { - return (float) Math.sqrt((p1.x - p0.x)*(p1.x-p0.x) + - (p1.y-p0.y)*(p1.y-p0.y)); - } - - private float weight(PointF a, PointF b, - float pow) { - float d = dist(a, b); - if (d == 0f) { - return Float.POSITIVE_INFINITY; - } - return (float) (1f / Math.pow(d, pow)); - } - - private float invDistWeightedInterpolate(float width, float height, - ArrayList points) { - float sum = 0; - float weights = 0; - float pow = 5; - float kNearestNeighbors = 3; - final PointF xy = new PointF(width, height); - - ArrayList pointsByNearness = points; - Collections.sort(pointsByNearness, new Comparator() { - public int compare(DeviceProfileQuery a, DeviceProfileQuery b) { - return (int) (dist(xy, a.dimens) - dist(xy, b.dimens)); - } - }); - - for (int i = 0; i < pointsByNearness.size(); ++i) { - DeviceProfileQuery p = pointsByNearness.get(i); - if (i < kNearestNeighbors) { - float w = weight(xy, p.dimens, pow); - if (w == Float.POSITIVE_INFINITY) { - return p.value; - } - weights += w; - } - } - - for (int i = 0; i < pointsByNearness.size(); ++i) { - DeviceProfileQuery p = pointsByNearness.get(i); - if (i < kNearestNeighbors) { - float w = weight(xy, p.dimens, pow); - sum += w * p.value / weights; - } - } - - return sum; - } - - Rect getWorkspacePadding() { - return getWorkspacePadding(isLandscape ? CellLayout.LANDSCAPE : CellLayout.PORTRAIT); - } - - Rect getWorkspacePadding(int orientation) { - Rect padding = new Rect(); - if (orientation == CellLayout.LANDSCAPE && - transposeLayoutWithOrientation) { - // Pad the left and right of the workspace with search/hotseat bar sizes - padding.set(searchBarSpaceHeightPx, edgeMarginPx, - hotseatBarHeightPx, edgeMarginPx); - } else { - if (isTablet()) { - // Pad the left and right of the workspace to ensure consistent spacing - // between all icons - int width = (orientation == CellLayout.LANDSCAPE) - ? Math.max(widthPx, heightPx) - : Math.min(widthPx, heightPx); - // XXX: If the icon size changes across orientations, we will have to take - // that into account here too. - int gap = (int) ((width - 2 * edgeMarginPx - - (numColumns * cellWidthPx)) / (2 * (numColumns + 1))); - padding.set(edgeMarginPx + gap, - searchBarSpaceHeightPx, - edgeMarginPx + gap, - hotseatBarHeightPx + pageIndicatorHeightPx); - } else { - // Pad the top and bottom of the workspace with search/hotseat bar sizes - padding.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, - searchBarSpaceHeightPx, - desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.right, - hotseatBarHeightPx + pageIndicatorHeightPx); - } - } - return padding; - } - - int getWorkspacePageSpacing(int orientation) { - if (orientation == CellLayout.LANDSCAPE && - transposeLayoutWithOrientation) { - // In landscape mode the page spacing is set to the default. - return defaultPageSpacingPx; - } else { - // 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; - } - } - - Rect getOverviewModeButtonBarRect() { - int zoneHeight = (int) (overviewModeIconZoneRatio * availableHeightPx); - zoneHeight = Math.min(overviewModeMaxIconZoneHeightPx, - Math.max(overviewModeMinIconZoneHeightPx, zoneHeight)); - return new Rect(0, availableHeightPx - zoneHeight, 0, availableHeightPx); - } - - float getOverviewModeScale() { - Rect workspacePadding = getWorkspacePadding(); - Rect overviewBar = getOverviewModeButtonBarRect(); - int pageSpace = availableHeightPx - workspacePadding.top - workspacePadding.bottom; - return (overviewModeScaleFactor * (pageSpace - overviewBar.height())) / pageSpace; - } - - // The rect returned will be extended to below the system ui that covers the workspace - Rect getHotseatRect() { - if (isVerticalBarLayout()) { - return new Rect(availableWidthPx - hotseatBarHeightPx, 0, - Integer.MAX_VALUE, availableHeightPx); - } else { - return new Rect(0, availableHeightPx - hotseatBarHeightPx, - availableWidthPx, Integer.MAX_VALUE); - } - } - - int calculateCellWidth(int width, int countX) { - return width / countX; - } - int calculateCellHeight(int height, int countY) { - return height / countY; - } - - boolean isPhone() { - return !isTablet && !isLargeTablet; - } - boolean isTablet() { - return isTablet; - } - boolean isLargeTablet() { - return isLargeTablet; - } - - boolean isVerticalBarLayout() { - return isLandscape && transposeLayoutWithOrientation; - } - - boolean shouldFadeAdjacentWorkspaceScreens() { - return isVerticalBarLayout() || isLargeTablet(); - } - - public void layout(Launcher launcher) { - FrameLayout.LayoutParams lp; - Resources res = launcher.getResources(); - boolean hasVerticalBarLayout = isVerticalBarLayout(); - - // Layout the search bar space - View searchBar = launcher.getSearchBar(); - lp = (FrameLayout.LayoutParams) searchBar.getLayoutParams(); - if (hasVerticalBarLayout) { - // Vertical search bar - lp.gravity = Gravity.TOP | Gravity.LEFT; - lp.width = searchBarSpaceHeightPx; - lp.height = LayoutParams.MATCH_PARENT; - searchBar.setPadding( - 0, 2 * edgeMarginPx, 0, - 2 * edgeMarginPx); - } else { - // Horizontal search bar - lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; - lp.width = searchBarSpaceWidthPx; - lp.height = searchBarSpaceHeightPx; - searchBar.setPadding( - 2 * edgeMarginPx, - 2 * edgeMarginPx, - 2 * edgeMarginPx, 0); - } - 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) { - if (hasVerticalBarLayout) { - // TODO: MOVE THIS INTO SEARCH BAR MEASURE - } else { - lp = (FrameLayout.LayoutParams) voiceButtonProxy.getLayoutParams(); - lp.gravity = Gravity.TOP | Gravity.END; - lp.width = (widthPx - searchBarSpaceWidthPx) / 2 + - 2 * iconSizePx; - lp.height = searchBarSpaceHeightPx; - } - } - - // Layout the workspace - PagedView workspace = (PagedView) launcher.findViewById(R.id.workspace); - lp = (FrameLayout.LayoutParams) workspace.getLayoutParams(); - lp.gravity = Gravity.CENTER; - int orientation = isLandscape ? CellLayout.LANDSCAPE : CellLayout.PORTRAIT; - Rect padding = getWorkspacePadding(orientation); - workspace.setLayoutParams(lp); - workspace.setPadding(padding.left, padding.top, padding.right, padding.bottom); - workspace.setPageSpacing(getWorkspacePageSpacing(orientation)); - - // Layout the hotseat - View hotseat = launcher.findViewById(R.id.hotseat); - lp = (FrameLayout.LayoutParams) hotseat.getLayoutParams(); - if (hasVerticalBarLayout) { - // Vertical hotseat - lp.gravity = Gravity.RIGHT; - lp.width = hotseatBarHeightPx; - lp.height = LayoutParams.MATCH_PARENT; - hotseat.findViewById(R.id.layout).setPadding(0, 2 * edgeMarginPx, 0, 2 * edgeMarginPx); - } else if (isTablet()) { - // Pad the hotseat with the grid gap calculated above - int gridGap = (int) ((widthPx - 2 * edgeMarginPx - - (numColumns * cellWidthPx)) / (2 * (numColumns + 1))); - int gridWidth = (int) ((numColumns * cellWidthPx) + - ((numColumns - 1) * gridGap)); - int hotseatGap = (int) Math.max(0, - (gridWidth - (numHotseatIcons * hotseatCellWidthPx)) - / (numHotseatIcons - 1)); - lp.gravity = Gravity.BOTTOM; - lp.width = LayoutParams.MATCH_PARENT; - lp.height = hotseatBarHeightPx; - hotseat.setPadding(2 * edgeMarginPx + gridGap + hotseatGap, 0, - 2 * edgeMarginPx + gridGap + hotseatGap, - 2 * edgeMarginPx); - } else { - // For phones, layout the hotseat without any bottom margin - // to ensure that we have space for the folders - lp.gravity = Gravity.BOTTOM; - lp.width = LayoutParams.MATCH_PARENT; - lp.height = hotseatBarHeightPx; - hotseat.findViewById(R.id.layout).setPadding(2 * edgeMarginPx, 0, - 2 * edgeMarginPx, 0); - } - hotseat.setLayoutParams(lp); - - // Layout the page indicators - View pageIndicator = launcher.findViewById(R.id.page_indicator); - if (pageIndicator != null) { - if (hasVerticalBarLayout) { - // Hide the page indicators when we have vertical search/hotseat - pageIndicator.setVisibility(View.GONE); - } else { - // Put the page indicators above the hotseat - lp = (FrameLayout.LayoutParams) pageIndicator.getLayoutParams(); - lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; - lp.width = LayoutParams.WRAP_CONTENT; - lp.height = LayoutParams.WRAP_CONTENT; - lp.bottomMargin = hotseatBarHeightPx; - pageIndicator.setLayoutParams(lp); - } - } - - // Layout AllApps - AppsCustomizeTabHost host = (AppsCustomizeTabHost) - launcher.findViewById(R.id.apps_customize_pane); - if (host != null) { - // Center the all apps page indicator - int pageIndicatorHeight = (int) (pageIndicatorHeightPx * Math.min(1f, - (allAppsIconSizePx / DynamicGrid.DEFAULT_ICON_SIZE_PX))); - pageIndicator = host.findViewById(R.id.apps_customize_page_indicator); - if (pageIndicator != null) { - lp = (FrameLayout.LayoutParams) pageIndicator.getLayoutParams(); - lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; - lp.width = LayoutParams.WRAP_CONTENT; - lp.height = pageIndicatorHeight; - pageIndicator.setLayoutParams(lp); - } - - AppsCustomizePagedView pagedView = (AppsCustomizePagedView) - host.findViewById(R.id.apps_customize_pane_content); - padding = new Rect(); - if (pagedView != null) { - // Constrain the dimensions of all apps so that it does not span the full width - int paddingLR = (availableWidthPx - (allAppsCellWidthPx * allAppsNumCols)) / - (2 * (allAppsNumCols + 1)); - int paddingTB = (availableHeightPx - (allAppsCellHeightPx * allAppsNumRows)) / - (2 * (allAppsNumRows + 1)); - paddingLR = Math.min(paddingLR, (int)((paddingLR + paddingTB) * 0.75f)); - paddingTB = Math.min(paddingTB, (int)((paddingLR + paddingTB) * 0.75f)); - int maxAllAppsWidth = (allAppsNumCols * (allAppsCellWidthPx + 2 * paddingLR)); - int gridPaddingLR = (availableWidthPx - maxAllAppsWidth) / 2; - if (gridPaddingLR > (allAppsCellWidthPx / 4)) { - padding.left = padding.right = gridPaddingLR; - } - // The icons are centered, so we can't just offset by the page indicator height - // because the empty space will actually be pageIndicatorHeight + paddingTB - padding.bottom = Math.max(0, pageIndicatorHeight - paddingTB); - pagedView.setAllAppsPadding(padding); - pagedView.setWidgetsPageIndicatorPadding(pageIndicatorHeight); - } - } - - // Layout the Overview Mode - View 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.height = r.height(); - overviewMode.setLayoutParams(lp); - } - } -} - public class DynamicGrid { @SuppressWarnings("unused") private static final String TAG = "DynamicGrid"; @@ -755,7 +95,7 @@ public class DynamicGrid { resources); } - DeviceProfile getDeviceProfile() { + public DeviceProfile getDeviceProfile() { return mProfile; } diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index fe2b43fe4a..9a47eaa32c 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -191,7 +191,7 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { availableWidth, availableHeight); return grid; } - DynamicGrid getDynamicGrid() { + public DynamicGrid getDynamicGrid() { return mDynamicGrid; } From 1774a8a0c67ae225b31dfb37213d6cadc630e48c Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Fri, 15 Nov 2013 10:56:16 +0000 Subject: [PATCH 016/147] Fix for transparent CustomContent screen (issue 11549096) Change-Id: I8b371e3c556a80b7eb3e145a8d4b78f15421046a --- src/com/android/launcher3/Workspace.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 9b6784c8d5..558519f07c 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2336,7 +2336,9 @@ public class Workspace extends SmoothPagedView void hideCustomContentIfNecessary() { boolean hide = mState != Workspace.State.NORMAL; if (hide && hasCustomContent()) { + disableLayoutTransitions(); mWorkspaceScreens.get(CUSTOM_CONTENT_SCREEN_ID).setVisibility(INVISIBLE); + enableLayoutTransitions(); } } From 3a14eeb54eb6f901629b26bf9e2ccf2d5bc564dd Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Fri, 15 Nov 2013 16:51:22 +0000 Subject: [PATCH 017/147] Bit of code cleanup (issue 11648206) Change-Id: I2d04bbbdb037de089a16da236dadc4f5950504da --- src/com/android/launcher3/Workspace.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 7466a19bbe..d5c0c75b27 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -708,7 +708,12 @@ public class Workspace extends SmoothPagedView onComplete, stripEmptyScreens); } return; + } else if (stripEmptyScreens) { + // If we're not going to strip the empty screens after removing + // the extra empty screen, do it right away. + stripEmptyScreens(); } + if (onComplete != null) { onComplete.run(); } From a90303bb6fdad59e4a55855edba68c9902192599 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 15 Nov 2013 13:05:06 -0800 Subject: [PATCH 018/147] Adding logs to track down missing workspace screen. (Bug 11683562) Change-Id: I12ef3331ab81004c75229d33afa0a8dd0fa8521c --- src/com/android/launcher3/Launcher.java | 4 +++ src/com/android/launcher3/LauncherModel.java | 14 ++++++++++ .../android/launcher3/LauncherProvider.java | 6 ++++ src/com/android/launcher3/Workspace.java | 28 +++++++++++++++++++ 4 files changed, 52 insertions(+) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 0c14ed93ce..310024135e 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -3657,6 +3657,10 @@ public class Launcher extends Activity @Override public void bindAddScreens(ArrayList orderedScreenIds) { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - bindAddScreens()", true); + Launcher.addDumpLog(TAG, "11683562 - orderedScreenIds: " + + TextUtils.join(", ", orderedScreenIds), true); int count = orderedScreenIds.size(); for (int i = 0; i < count; i++) { mWorkspace.insertNewWorkspaceScreenBeforeEmptyScreen(orderedScreenIds.get(i)); diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index dff1814267..b89579e694 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -40,6 +40,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; import android.provider.BaseColumns; +import android.text.TextUtils; import android.util.Log; import android.util.Pair; import com.android.launcher3.InstallWidgetReceiver.WidgetMimeTypeHandlerData; @@ -955,6 +956,10 @@ public class LauncherModel extends BroadcastReceiver { * a list of screen ids in the order that they should appear. */ void updateWorkspaceScreenOrder(Context context, final ArrayList screens) { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - updateWorkspaceScreenOrder()", true); + Launcher.addDumpLog(TAG, "11683562 - screens: " + TextUtils.join(", ", screens), true); + final ArrayList screensCopy = new ArrayList(screens); final ContentResolver cr = context.getContentResolver(); final Uri uri = LauncherSettings.WorkspaceScreens.CONTENT_URI; @@ -1235,6 +1240,15 @@ public class LauncherModel extends BroadcastReceiver { } finally { sc.close(); } + + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - loadWorkspaceScreensDb()", true); + ArrayList orderedScreensPairs= new ArrayList(); + for (Integer i : orderedScreens.keySet()) { + orderedScreensPairs.add("{ " + i + ": " + orderedScreens.get(i) + " }"); + } + Launcher.addDumpLog(TAG, "11683562 - screens: " + + TextUtils.join(", ", orderedScreensPairs), true); return orderedScreens; } diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index e992706de9..b5db3386f8 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -868,10 +868,14 @@ public class LauncherProvider extends ContentProvider { throw new RuntimeException("Error: max screen id was not initialized"); } mMaxScreenId += 1; + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - generateNewScreenId(): " + mMaxScreenId, true); return mMaxScreenId; } public void updateMaxScreenId(long maxScreenId) { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - updateMaxScreenId(): " + maxScreenId, true); mMaxScreenId = maxScreenId; } @@ -892,6 +896,8 @@ public class LauncherProvider extends ContentProvider { throw new RuntimeException("Error: could not query max screen id"); } + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - initializeMaxScreenId(): " + id, true); return id; } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index f36c815da5..d517d8b9d3 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -534,6 +534,10 @@ public class Workspace extends SmoothPagedView } public long insertNewWorkspaceScreen(long screenId, int insertIndex) { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - insertNewWorkspaceScreen(): " + screenId + + " at index: " + insertIndex, true); + if (mWorkspaceScreens.containsKey(screenId)) { throw new RuntimeException("Screen id " + screenId + " already exists!"); } @@ -627,6 +631,9 @@ public class Workspace extends SmoothPagedView } public void addExtraEmptyScreenOnDrag() { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - addExtraEmptyScreenOnDrag()", true); + boolean lastChildOnScreen = false; boolean childOnFinalScreen = false; @@ -653,6 +660,9 @@ public class Workspace extends SmoothPagedView } public boolean addExtraEmptyScreen() { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - addExtraEmptyScreen()", true); + if (!mWorkspaceScreens.containsKey(EXTRA_EMPTY_SCREEN_ID)) { insertNewWorkspaceScreen(EXTRA_EMPTY_SCREEN_ID); return true; @@ -661,6 +671,9 @@ public class Workspace extends SmoothPagedView } private void convertFinalScreenToEmptyScreenIfNecessary() { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - convertFinalScreenToEmptyScreenIfNecessary()", true); + if (hasExtraEmptyScreen() || mScreenOrder.size() == 0) return; long finalScreenId = mScreenOrder.get(mScreenOrder.size() - 1); @@ -676,6 +689,9 @@ public class Workspace extends SmoothPagedView // if this is the last non-custom content screen, convert it to the empty screen mWorkspaceScreens.put(EXTRA_EMPTY_SCREEN_ID, finalScreen); mScreenOrder.add(EXTRA_EMPTY_SCREEN_ID); + + // XXX: Do we need to update LM workspace screens here? + Launcher.addDumpLog(TAG, "11683562 - extra empty screen: " + finalScreenId, true); } } @@ -685,6 +701,8 @@ public class Workspace extends SmoothPagedView public void removeExtraEmptyScreen(final boolean animate, final Runnable onComplete, final int delay, final boolean stripEmptyScreens) { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - removeExtraEmptyScreen()", true); if (delay > 0) { postDelayed(new Runnable() { @Override @@ -716,6 +734,9 @@ public class Workspace extends SmoothPagedView private void fadeAndRemoveEmptyScreen(int delay, int duration, final Runnable onComplete, final boolean stripEmptyScreens) { + // Log to disk + // XXX: Do we need to update LM workspace screens below? + Launcher.addDumpLog(TAG, "11683562 - fadeAndRemoveEmptyScreen()", true); PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat("alpha", 0f); PropertyValuesHolder bgAlpha = PropertyValuesHolder.ofFloat("backgroundAlpha", 0f); @@ -759,6 +780,9 @@ public class Workspace extends SmoothPagedView } public long commitExtraEmptyScreen() { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - commitExtraEmptyScreen()", true); + int index = getPageIndexForScreenId(EXTRA_EMPTY_SCREEN_ID); CellLayout cl = mWorkspaceScreens.get(EXTRA_EMPTY_SCREEN_ID); mWorkspaceScreens.remove(EXTRA_EMPTY_SCREEN_ID); @@ -811,6 +835,9 @@ public class Workspace extends SmoothPagedView } public void stripEmptyScreens() { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - stripEmptyScreens()", true); + if (isPageMoving()) { mStripScreensOnPageStopMoving = true; return; @@ -831,6 +858,7 @@ public class Workspace extends SmoothPagedView int pageShift = 0; for (Long id: removeScreens) { + Launcher.addDumpLog(TAG, "11683562 - removing id: " + id, true); CellLayout cl = mWorkspaceScreens.get(id); mWorkspaceScreens.remove(id); mScreenOrder.remove(id); From 9f9f00bca673ed491e623235314a5c4c22ff28c1 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 15 Nov 2013 13:27:00 -0800 Subject: [PATCH 019/147] Additional logs to track down missing workspace screen. (Bug 11683562) Change-Id: I4f6b3c3ae07e2069bad01940dfce6bdc9cdb0ae0 --- src/com/android/launcher3/LauncherModel.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index b89579e694..0c81de24d4 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1613,6 +1613,9 @@ public class LauncherModel extends BroadcastReceiver { /** Returns whether this is an upgradge path */ private boolean loadWorkspace() { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - loadWorkspace()", true); + final long t = DEBUG_LOADERS ? SystemClock.uptimeMillis() : 0; final Context context = mContext; @@ -1631,6 +1634,8 @@ public class LauncherModel extends BroadcastReceiver { // Check if we need to do any upgrade-path logic boolean loadedOldDb = LauncherAppState.getLauncherProvider().justLoadedOldDb(); + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - loadedOldDb: " + loadedOldDb, true); synchronized (sBgLock) { clearSBgDataStructures(); @@ -1947,6 +1952,10 @@ public class LauncherModel extends BroadcastReceiver { } } Collections.sort(sBgWorkspaceScreens); + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - maxScreenId: " + maxScreenId, true); + Launcher.addDumpLog(TAG, "11683562 - sBgWorkspaceScreens: " + + TextUtils.join(", ", sBgWorkspaceScreens), true); LauncherAppState.getLauncherProvider().updateMaxScreenId(maxScreenId); updateWorkspaceScreenOrder(context, sBgWorkspaceScreens); @@ -1963,6 +1972,9 @@ public class LauncherModel extends BroadcastReceiver { for (Integer i : orderedScreens.keySet()) { sBgWorkspaceScreens.add(orderedScreens.get(i)); } + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - sBgWorkspaceScreens: " + + TextUtils.join(", ", sBgWorkspaceScreens), true); // Remove any empty screens ArrayList unusedScreens = new ArrayList(sBgWorkspaceScreens); @@ -1976,6 +1988,10 @@ public class LauncherModel extends BroadcastReceiver { // If there are any empty screens remove them, and update. if (unusedScreens.size() != 0) { + // Log to disk + Launcher.addDumpLog(TAG, "11683562 - unusedScreens (to be removed): " + + TextUtils.join(", ", unusedScreens), true); + sBgWorkspaceScreens.removeAll(unusedScreens); updateWorkspaceScreenOrder(context, sBgWorkspaceScreens); } From 9b9fb967b2305413520dc676d6d3c472b2b6b25e Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 15 Nov 2013 15:39:34 -0800 Subject: [PATCH 020/147] Updating LauncherModel filtering to use screen ids. (Bug 11685286) - Fixes the issue with the current page not synchronously binding Change-Id: I3dfa45cc1777f846c77f3e86059dfb715553e1a3 --- src/com/android/launcher3/Launcher.java | 5 +- src/com/android/launcher3/LauncherModel.java | 53 +++++++++++--------- src/com/android/launcher3/PagedView.java | 3 ++ src/com/android/launcher3/Workspace.java | 2 +- 4 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 89abd9f2a0..7d84a3c88f 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -459,7 +459,7 @@ public class Launcher extends Activity } else { // We only load the page synchronously if the user rotates (or triggers a // configuration change) while launcher is in the foreground - mModel.startLoader(true, mWorkspace.getCurrentPage()); + mModel.startLoader(true, mWorkspace.getRestorePage()); } } @@ -1801,7 +1801,8 @@ public class Launcher extends Activity @Override protected void onSaveInstanceState(Bundle outState) { if (mWorkspace.getChildCount() > 0) { - outState.putInt(RUNTIME_STATE_CURRENT_SCREEN, mWorkspace.getRestorePage()); + outState.putInt(RUNTIME_STATE_CURRENT_SCREEN, + mWorkspace.getCurrentPageOffsetFromCustomContent()); } super.onSaveInstanceState(outState); diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 5a3b1b80fb..c3d4666447 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2026,7 +2026,7 @@ public class LauncherModel extends BroadcastReceiver { /** Filters the set of items who are directly or indirectly (via another container) on the * specified screen. */ - private void filterCurrentWorkspaceItems(int currentScreen, + private void filterCurrentWorkspaceItems(long currentScreenId, ArrayList allWorkspaceItems, ArrayList currentScreenItems, ArrayList otherScreenItems) { @@ -2041,8 +2041,8 @@ public class LauncherModel extends BroadcastReceiver { // If we aren't filtering on a screen, then the set of items to load is the full set of // items given. - if (currentScreen < 0) { - currentScreenItems.addAll(allWorkspaceItems); + if (currentScreenId < 0) { + throw new RuntimeException("Unexpected screen id"); } // Order the set of items by their containers first, this allows use to walk through the @@ -2057,7 +2057,7 @@ public class LauncherModel extends BroadcastReceiver { }); for (ItemInfo info : allWorkspaceItems) { if (info.container == LauncherSettings.Favorites.CONTAINER_DESKTOP) { - if (info.screenId == currentScreen) { + if (info.screenId == currentScreenId) { currentScreenItems.add(info); itemsOnScreen.add(info.id); } else { @@ -2078,20 +2078,20 @@ public class LauncherModel extends BroadcastReceiver { } /** Filters the set of widgets which are on the specified screen. */ - private void filterCurrentAppWidgets(int currentScreen, + private void filterCurrentAppWidgets(long currentScreenId, ArrayList appWidgets, ArrayList currentScreenWidgets, ArrayList otherScreenWidgets) { // If we aren't filtering on a screen, then the set of items to load is the full set of // widgets given. - if (currentScreen < 0) { - currentScreenWidgets.addAll(appWidgets); + if (currentScreenId < 0) { + throw new RuntimeException("Unexpected screen id"); } for (LauncherAppWidgetInfo widget : appWidgets) { if (widget == null) continue; if (widget.container == LauncherSettings.Favorites.CONTAINER_DESKTOP && - widget.screenId == currentScreen) { + widget.screenId == currentScreenId) { currentScreenWidgets.add(widget); } else { otherScreenWidgets.add(widget); @@ -2100,15 +2100,15 @@ public class LauncherModel extends BroadcastReceiver { } /** Filters the set of folders which are on the specified screen. */ - private void filterCurrentFolders(int currentScreen, + private void filterCurrentFolders(long currentScreenId, HashMap itemsIdMap, HashMap folders, HashMap currentScreenFolders, HashMap otherScreenFolders) { // If we aren't filtering on a screen, then the set of items to load is the full set of // widgets given. - if (currentScreen < 0) { - currentScreenFolders.putAll(folders); + if (currentScreenId < 0) { + throw new RuntimeException("Unexpected screen id"); } for (long id : folders.keySet()) { @@ -2116,7 +2116,7 @@ public class LauncherModel extends BroadcastReceiver { FolderInfo folder = folders.get(id); if (info == null || folder == null) continue; if (info.container == LauncherSettings.Favorites.CONTAINER_DESKTOP && - info.screenId == currentScreen) { + info.screenId == currentScreenId) { currentScreenFolders.put(id, folder); } else { otherScreenFolders.put(id, folder); @@ -2243,13 +2243,7 @@ public class LauncherModel extends BroadcastReceiver { return; } - final boolean isLoadingSynchronously = (synchronizeBindPage > -1); - final int currentScreen = isLoadingSynchronously ? synchronizeBindPage : - oldCallbacks.getCurrentWorkspaceScreen(); - - // Load all the items that are on the current page first (and in the process, unbind - // all the existing workspace items before we call startBinding() below. - unbindWorkspaceItemsOnMainThread(); + // Save a copy of all the bg-thread collections ArrayList workspaceItems = new ArrayList(); ArrayList appWidgets = new ArrayList(); @@ -2264,6 +2258,20 @@ public class LauncherModel extends BroadcastReceiver { orderedScreenIds.addAll(sBgWorkspaceScreens); } + final boolean isLoadingSynchronously = (synchronizeBindPage > -1); + final int currentScreen = isLoadingSynchronously ? synchronizeBindPage : + oldCallbacks.getCurrentWorkspaceScreen(); + if (currentScreen >= orderedScreenIds.size()) { + Log.w(TAG, "Invalid screen id to synchronously load"); + return; + } + final long currentScreenId = orderedScreenIds.get(currentScreen); + + // Load all the items that are on the current page first (and in the process, unbind + // all the existing workspace items before we call startBinding() below. + unbindWorkspaceItemsOnMainThread(); + + // Separate the items that are on the current screen, and all the other remaining items ArrayList currentWorkspaceItems = new ArrayList(); ArrayList otherWorkspaceItems = new ArrayList(); ArrayList currentAppWidgets = @@ -2273,12 +2281,11 @@ public class LauncherModel extends BroadcastReceiver { HashMap currentFolders = new HashMap(); HashMap otherFolders = new HashMap(); - // Separate the items that are on the current screen, and all the other remaining items - filterCurrentWorkspaceItems(currentScreen, workspaceItems, currentWorkspaceItems, + filterCurrentWorkspaceItems(currentScreenId, workspaceItems, currentWorkspaceItems, otherWorkspaceItems); - filterCurrentAppWidgets(currentScreen, appWidgets, currentAppWidgets, + filterCurrentAppWidgets(currentScreenId, appWidgets, currentAppWidgets, otherAppWidgets); - filterCurrentFolders(currentScreen, itemsIdMap, folders, currentFolders, + filterCurrentFolders(currentScreenId, itemsIdMap, folders, currentFolders, otherFolders); sortWorkspaceItemsSpatially(currentWorkspaceItems); sortWorkspaceItemsSpatially(otherWorkspaceItems); diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 3eecedbccf..e095c15d2b 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -564,6 +564,9 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc void setRestorePage(int restorePage) { mRestorePage = restorePage; } + int getRestorePage() { + return mRestorePage; + } protected void notifyPageSwitchListener() { if (mPageSwitchListener != null) { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 9b17fcd9e7..08a6e436a2 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -3956,7 +3956,7 @@ public class Workspace extends SmoothPagedView return mDragInfo; } - public int getRestorePage() { + public int getCurrentPageOffsetFromCustomContent() { return getNextPage() - numCustomPages(); } From f9618856d6910ac385ad37762f9f067ae59a8622 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Fri, 8 Nov 2013 06:45:03 -0800 Subject: [PATCH 021/147] Syncing up state transition with paging transition Change-Id: Id91e4c046cfe7d9aa6e7de10dbf57ee727ba160e --- .../android/launcher3/LauncherScroller.java | 559 ++++++++++++++++++ src/com/android/launcher3/PagedView.java | 58 +- src/com/android/launcher3/RampUpScroller.java | 120 ---- .../android/launcher3/SmoothPagedView.java | 3 +- src/com/android/launcher3/Workspace.java | 13 +- 5 files changed, 606 insertions(+), 147 deletions(-) create mode 100644 src/com/android/launcher3/LauncherScroller.java delete mode 100644 src/com/android/launcher3/RampUpScroller.java diff --git a/src/com/android/launcher3/LauncherScroller.java b/src/com/android/launcher3/LauncherScroller.java new file mode 100644 index 0000000000..3bd0a78c47 --- /dev/null +++ b/src/com/android/launcher3/LauncherScroller.java @@ -0,0 +1,559 @@ +/* + * Copyright (C) 2006 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.animation.TimeInterpolator; +import android.content.Context; +import android.hardware.SensorManager; +import android.os.Build; +import android.util.FloatMath; +import android.view.ViewConfiguration; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; + +/** + * This class differs from the framework {@link android.widget.Scroller} in that + * you can modify the Interpolator post-construction. + */ +public class LauncherScroller { + private int mMode; + + private int mStartX; + private int mStartY; + private int mFinalX; + private int mFinalY; + + private int mMinX; + private int mMaxX; + private int mMinY; + private int mMaxY; + + private int mCurrX; + private int mCurrY; + private long mStartTime; + private int mDuration; + private float mDurationReciprocal; + private float mDeltaX; + private float mDeltaY; + private boolean mFinished; + private TimeInterpolator mInterpolator; + private boolean mFlywheel; + + private float mVelocity; + private float mCurrVelocity; + private int mDistance; + + private float mFlingFriction = ViewConfiguration.getScrollFriction(); + + private static final int DEFAULT_DURATION = 250; + private static final int SCROLL_MODE = 0; + private static final int FLING_MODE = 1; + + private static float DECELERATION_RATE = (float) (Math.log(0.78) / Math.log(0.9)); + private static final float INFLEXION = 0.35f; // Tension lines cross at (INFLEXION, 1) + private static final float START_TENSION = 0.5f; + private static final float END_TENSION = 1.0f; + private static final float P1 = START_TENSION * INFLEXION; + private static final float P2 = 1.0f - END_TENSION * (1.0f - INFLEXION); + + private static final int NB_SAMPLES = 100; + private static final float[] SPLINE_POSITION = new float[NB_SAMPLES + 1]; + private static final float[] SPLINE_TIME = new float[NB_SAMPLES + 1]; + + private float mDeceleration; + private final float mPpi; + + // A context-specific coefficient adjusted to physical values. + private float mPhysicalCoeff; + + static { + float x_min = 0.0f; + float y_min = 0.0f; + for (int i = 0; i < NB_SAMPLES; i++) { + final float alpha = (float) i / NB_SAMPLES; + + float x_max = 1.0f; + float x, tx, coef; + while (true) { + x = x_min + (x_max - x_min) / 2.0f; + coef = 3.0f * x * (1.0f - x); + tx = coef * ((1.0f - x) * P1 + x * P2) + x * x * x; + if (Math.abs(tx - alpha) < 1E-5) break; + if (tx > alpha) x_max = x; + else x_min = x; + } + SPLINE_POSITION[i] = coef * ((1.0f - x) * START_TENSION + x) + x * x * x; + + float y_max = 1.0f; + float y, dy; + while (true) { + y = y_min + (y_max - y_min) / 2.0f; + coef = 3.0f * y * (1.0f - y); + dy = coef * ((1.0f - y) * START_TENSION + y) + y * y * y; + if (Math.abs(dy - alpha) < 1E-5) break; + if (dy > alpha) y_max = y; + else y_min = y; + } + SPLINE_TIME[i] = coef * ((1.0f - y) * P1 + y * P2) + y * y * y; + } + SPLINE_POSITION[NB_SAMPLES] = SPLINE_TIME[NB_SAMPLES] = 1.0f; + + // This controls the viscous fluid effect (how much of it) + sViscousFluidScale = 8.0f; + // must be set to 1.0 (used in viscousFluid()) + sViscousFluidNormalize = 1.0f; + sViscousFluidNormalize = 1.0f / viscousFluid(1.0f); + + } + + private static float sViscousFluidScale; + private static float sViscousFluidNormalize; + + public void setInterpolator(TimeInterpolator interpolator) { + mInterpolator = interpolator; + } + + /** + * Create a Scroller with the default duration and interpolator. + */ + public LauncherScroller(Context context) { + this(context, null); + } + + /** + * Create a Scroller with the specified interpolator. If the interpolator is + * null, the default (viscous) interpolator will be used. "Flywheel" behavior will + * be in effect for apps targeting Honeycomb or newer. + */ + public LauncherScroller(Context context, Interpolator interpolator) { + this(context, interpolator, + context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.HONEYCOMB); + } + + /** + * Create a Scroller with the specified interpolator. If the interpolator is + * null, the default (viscous) interpolator will be used. Specify whether or + * not to support progressive "flywheel" behavior in flinging. + */ + public LauncherScroller(Context context, Interpolator interpolator, boolean flywheel) { + mFinished = true; + mInterpolator = interpolator; + mPpi = context.getResources().getDisplayMetrics().density * 160.0f; + mDeceleration = computeDeceleration(ViewConfiguration.getScrollFriction()); + mFlywheel = flywheel; + + mPhysicalCoeff = computeDeceleration(0.84f); // look and feel tuning + } + + /** + * The amount of friction applied to flings. The default value + * is {@link ViewConfiguration#getScrollFriction}. + * + * @param friction A scalar dimension-less value representing the coefficient of + * friction. + */ + public final void setFriction(float friction) { + mDeceleration = computeDeceleration(friction); + mFlingFriction = friction; + } + + private float computeDeceleration(float friction) { + return SensorManager.GRAVITY_EARTH // g (m/s^2) + * 39.37f // inch/meter + * mPpi // pixels per inch + * friction; + } + + /** + * + * Returns whether the scroller has finished scrolling. + * + * @return True if the scroller has finished scrolling, false otherwise. + */ + public final boolean isFinished() { + return mFinished; + } + + /** + * Force the finished field to a particular value. + * + * @param finished The new finished value. + */ + public final void forceFinished(boolean finished) { + mFinished = finished; + } + + /** + * Returns how long the scroll event will take, in milliseconds. + * + * @return The duration of the scroll in milliseconds. + */ + public final int getDuration() { + return mDuration; + } + + /** + * Returns the current X offset in the scroll. + * + * @return The new X offset as an absolute distance from the origin. + */ + public final int getCurrX() { + return mCurrX; + } + + /** + * Returns the current Y offset in the scroll. + * + * @return The new Y offset as an absolute distance from the origin. + */ + public final int getCurrY() { + return mCurrY; + } + + /** + * Returns the current velocity. + * + * @return The original velocity less the deceleration. Result may be + * negative. + */ + public float getCurrVelocity() { + return mMode == FLING_MODE ? + mCurrVelocity : mVelocity - mDeceleration * timePassed() / 2000.0f; + } + + /** + * Returns the start X offset in the scroll. + * + * @return The start X offset as an absolute distance from the origin. + */ + public final int getStartX() { + return mStartX; + } + + /** + * Returns the start Y offset in the scroll. + * + * @return The start Y offset as an absolute distance from the origin. + */ + public final int getStartY() { + return mStartY; + } + + /** + * Returns where the scroll will end. Valid only for "fling" scrolls. + * + * @return The final X offset as an absolute distance from the origin. + */ + public final int getFinalX() { + return mFinalX; + } + + /** + * Returns where the scroll will end. Valid only for "fling" scrolls. + * + * @return The final Y offset as an absolute distance from the origin. + */ + public final int getFinalY() { + return mFinalY; + } + + /** + * Call this when you want to know the new location. If it returns true, + * the animation is not yet finished. + */ + public boolean computeScrollOffset() { + if (mFinished) { + return false; + } + + int timePassed = (int)(AnimationUtils.currentAnimationTimeMillis() - mStartTime); + + if (timePassed < mDuration) { + switch (mMode) { + case SCROLL_MODE: + float x = timePassed * mDurationReciprocal; + + if (mInterpolator == null) + x = viscousFluid(x); + else + x = mInterpolator.getInterpolation(x); + + mCurrX = mStartX + Math.round(x * mDeltaX); + mCurrY = mStartY + Math.round(x * mDeltaY); + break; + case FLING_MODE: + final float t = (float) timePassed / mDuration; + final int index = (int) (NB_SAMPLES * t); + float distanceCoef = 1.f; + float velocityCoef = 0.f; + if (index < NB_SAMPLES) { + final float t_inf = (float) index / NB_SAMPLES; + final float t_sup = (float) (index + 1) / NB_SAMPLES; + final float d_inf = SPLINE_POSITION[index]; + final float d_sup = SPLINE_POSITION[index + 1]; + velocityCoef = (d_sup - d_inf) / (t_sup - t_inf); + distanceCoef = d_inf + (t - t_inf) * velocityCoef; + } + + mCurrVelocity = velocityCoef * mDistance / mDuration * 1000.0f; + + mCurrX = mStartX + Math.round(distanceCoef * (mFinalX - mStartX)); + // Pin to mMinX <= mCurrX <= mMaxX + mCurrX = Math.min(mCurrX, mMaxX); + mCurrX = Math.max(mCurrX, mMinX); + + mCurrY = mStartY + Math.round(distanceCoef * (mFinalY - mStartY)); + // Pin to mMinY <= mCurrY <= mMaxY + mCurrY = Math.min(mCurrY, mMaxY); + mCurrY = Math.max(mCurrY, mMinY); + + if (mCurrX == mFinalX && mCurrY == mFinalY) { + mFinished = true; + } + + break; + } + } + else { + mCurrX = mFinalX; + mCurrY = mFinalY; + mFinished = true; + } + return true; + } + + /** + * Start scrolling by providing a starting point and the distance to travel. + * The scroll will use the default value of 250 milliseconds for the + * duration. + * + * @param startX Starting horizontal scroll offset in pixels. Positive + * numbers will scroll the content to the left. + * @param startY Starting vertical scroll offset in pixels. Positive numbers + * will scroll the content up. + * @param dx Horizontal distance to travel. Positive numbers will scroll the + * content to the left. + * @param dy Vertical distance to travel. Positive numbers will scroll the + * content up. + */ + public void startScroll(int startX, int startY, int dx, int dy) { + startScroll(startX, startY, dx, dy, DEFAULT_DURATION); + } + + /** + * Start scrolling by providing a starting point, the distance to travel, + * and the duration of the scroll. + * + * @param startX Starting horizontal scroll offset in pixels. Positive + * numbers will scroll the content to the left. + * @param startY Starting vertical scroll offset in pixels. Positive numbers + * will scroll the content up. + * @param dx Horizontal distance to travel. Positive numbers will scroll the + * content to the left. + * @param dy Vertical distance to travel. Positive numbers will scroll the + * content up. + * @param duration Duration of the scroll in milliseconds. + */ + public void startScroll(int startX, int startY, int dx, int dy, int duration) { + mMode = SCROLL_MODE; + mFinished = false; + mDuration = duration; + mStartTime = AnimationUtils.currentAnimationTimeMillis(); + mStartX = startX; + mStartY = startY; + mFinalX = startX + dx; + mFinalY = startY + dy; + mDeltaX = dx; + mDeltaY = dy; + mDurationReciprocal = 1.0f / (float) mDuration; + } + + /** + * Start scrolling based on a fling gesture. The distance travelled will + * depend on the initial velocity of the fling. + * + * @param startX Starting point of the scroll (X) + * @param startY Starting point of the scroll (Y) + * @param velocityX Initial velocity of the fling (X) measured in pixels per + * second. + * @param velocityY Initial velocity of the fling (Y) measured in pixels per + * second + * @param minX Minimum X value. The scroller will not scroll past this + * point. + * @param maxX Maximum X value. The scroller will not scroll past this + * point. + * @param minY Minimum Y value. The scroller will not scroll past this + * point. + * @param maxY Maximum Y value. The scroller will not scroll past this + * point. + */ + public void fling(int startX, int startY, int velocityX, int velocityY, + int minX, int maxX, int minY, int maxY) { + // Continue a scroll or fling in progress + if (mFlywheel && !mFinished) { + float oldVel = getCurrVelocity(); + + float dx = (float) (mFinalX - mStartX); + float dy = (float) (mFinalY - mStartY); + float hyp = FloatMath.sqrt(dx * dx + dy * dy); + + float ndx = dx / hyp; + float ndy = dy / hyp; + + float oldVelocityX = ndx * oldVel; + float oldVelocityY = ndy * oldVel; + if (Math.signum(velocityX) == Math.signum(oldVelocityX) && + Math.signum(velocityY) == Math.signum(oldVelocityY)) { + velocityX += oldVelocityX; + velocityY += oldVelocityY; + } + } + + mMode = FLING_MODE; + mFinished = false; + + float velocity = FloatMath.sqrt(velocityX * velocityX + velocityY * velocityY); + + mVelocity = velocity; + mDuration = getSplineFlingDuration(velocity); + mStartTime = AnimationUtils.currentAnimationTimeMillis(); + mStartX = startX; + mStartY = startY; + + float coeffX = velocity == 0 ? 1.0f : velocityX / velocity; + float coeffY = velocity == 0 ? 1.0f : velocityY / velocity; + + double totalDistance = getSplineFlingDistance(velocity); + mDistance = (int) (totalDistance * Math.signum(velocity)); + + mMinX = minX; + mMaxX = maxX; + mMinY = minY; + mMaxY = maxY; + + mFinalX = startX + (int) Math.round(totalDistance * coeffX); + // Pin to mMinX <= mFinalX <= mMaxX + mFinalX = Math.min(mFinalX, mMaxX); + mFinalX = Math.max(mFinalX, mMinX); + + mFinalY = startY + (int) Math.round(totalDistance * coeffY); + // Pin to mMinY <= mFinalY <= mMaxY + mFinalY = Math.min(mFinalY, mMaxY); + mFinalY = Math.max(mFinalY, mMinY); + } + + private double getSplineDeceleration(float velocity) { + return Math.log(INFLEXION * Math.abs(velocity) / (mFlingFriction * mPhysicalCoeff)); + } + + private int getSplineFlingDuration(float velocity) { + final double l = getSplineDeceleration(velocity); + final double decelMinusOne = DECELERATION_RATE - 1.0; + return (int) (1000.0 * Math.exp(l / decelMinusOne)); + } + + private double getSplineFlingDistance(float velocity) { + final double l = getSplineDeceleration(velocity); + final double decelMinusOne = DECELERATION_RATE - 1.0; + return mFlingFriction * mPhysicalCoeff * Math.exp(DECELERATION_RATE / decelMinusOne * l); + } + + static float viscousFluid(float x) + { + x *= sViscousFluidScale; + if (x < 1.0f) { + x -= (1.0f - (float)Math.exp(-x)); + } else { + float start = 0.36787944117f; // 1/e == exp(-1) + x = 1.0f - (float)Math.exp(1.0f - x); + x = start + x * (1.0f - start); + } + x *= sViscousFluidNormalize; + return x; + } + + /** + * Stops the animation. Contrary to {@link #forceFinished(boolean)}, + * aborting the animating cause the scroller to move to the final x and y + * position + * + * @see #forceFinished(boolean) + */ + public void abortAnimation() { + mCurrX = mFinalX; + mCurrY = mFinalY; + mFinished = true; + } + + /** + * Extend the scroll animation. This allows a running animation to scroll + * further and longer, when used with {@link #setFinalX(int)} or {@link #setFinalY(int)}. + * + * @param extend Additional time to scroll in milliseconds. + * @see #setFinalX(int) + * @see #setFinalY(int) + */ + public void extendDuration(int extend) { + int passed = timePassed(); + mDuration = passed + extend; + mDurationReciprocal = 1.0f / mDuration; + mFinished = false; + } + + /** + * Returns the time elapsed since the beginning of the scrolling. + * + * @return The elapsed time in milliseconds. + */ + public int timePassed() { + return (int)(AnimationUtils.currentAnimationTimeMillis() - mStartTime); + } + + /** + * Sets the final position (X) for this scroller. + * + * @param newX The new X offset as an absolute distance from the origin. + * @see #extendDuration(int) + * @see #setFinalY(int) + */ + public void setFinalX(int newX) { + mFinalX = newX; + mDeltaX = mFinalX - mStartX; + mFinished = false; + } + + /** + * Sets the final position (Y) for this scroller. + * + * @param newY The new Y offset as an absolute distance from the origin. + * @see #extendDuration(int) + * @see #setFinalX(int) + */ + public void setFinalY(int newY) { + mFinalY = newY; + mDeltaY = mFinalY - mStartY; + mFinished = false; + } + + /** + * @hide + */ + public boolean isScrollingInDirection(float xvel, float yvel) { + return !mFinished && Math.signum(xvel) == Math.signum(mFinalX - mStartX) && + Math.signum(yvel) == Math.signum(mFinalY - mStartY); + } +} diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 3eecedbccf..c854498099 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -122,7 +122,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc protected int mNextPage = INVALID_PAGE; protected int mMaxScrollX; - protected Scroller mScroller; + protected LauncherScroller mScroller; + private Interpolator mDefaultInterpolator; private VelocityTracker mVelocityTracker; private int mPageSpacing = 0; @@ -310,7 +311,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc protected void init() { mDirtyPageContent = new ArrayList(); mDirtyPageContent.ensureCapacity(32); - mScroller = new Scroller(getContext(), new ScrollInterpolator()); + mScroller = new LauncherScroller(getContext()); + setDefaultInterpolator(new ScrollInterpolator()); mCurrentPage = 0; mCenterPagesVertically = true; @@ -330,6 +332,11 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc setOnHierarchyChangeListener(this); } + protected void setDefaultInterpolator(Interpolator interpolator) { + mDefaultInterpolator = interpolator; + mScroller.setInterpolator(mDefaultInterpolator); + } + protected void onAttachedToWindow() { super.onAttachedToWindow(); @@ -1625,11 +1632,11 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } protected void enableFreeScroll() { - setEnableFreeScroll(true, -1); + setEnableFreeScroll(true); } - protected void disableFreeScroll(int snapPage) { - setEnableFreeScroll(false, snapPage); + protected void disableFreeScroll() { + setEnableFreeScroll(false); } void updateFreescrollBounds() { @@ -1643,16 +1650,10 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } } - private void setEnableFreeScroll(boolean freeScroll, int snapPage) { + private void setEnableFreeScroll(boolean freeScroll) { mFreeScroll = freeScroll; - if (snapPage == -1) { - snapPage = getPageNearestToCenterOfScreen(); - } - - if (!mFreeScroll) { - snapToPage(snapPage); - } else { + if (mFreeScroll) { updateFreescrollBounds(); getOverviewModePages(mTempVisiblePagesRange); if (getCurrentPage() < mTempVisiblePagesRange[0]) { @@ -1910,6 +1911,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc int vX = (int) (-velocityX * scaleX); int initialScrollX = (int) (getScrollX() * scaleX); + mScroller.setInterpolator(mDefaultInterpolator); mScroller.fling(initialScrollX, getScrollY(), vX, 0, Integer.MIN_VALUE, Integer.MAX_VALUE, 0, 0); invalidate(); @@ -2176,27 +2178,33 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } protected void snapToPageImmediately(int whichPage) { - snapToPage(whichPage, PAGE_SNAP_ANIMATION_DURATION, true); + snapToPage(whichPage, PAGE_SNAP_ANIMATION_DURATION, true, null); } protected void snapToPage(int whichPage, int duration) { - snapToPage(whichPage, duration, false); + snapToPage(whichPage, duration, false, null); } - protected void snapToPage(int whichPage, int duration, boolean immediate) { + protected void snapToPage(int whichPage, int duration, TimeInterpolator interpolator) { + snapToPage(whichPage, duration, false, interpolator); + } + + protected void snapToPage(int whichPage, int duration, boolean immediate, + TimeInterpolator interpolator) { whichPage = Math.max(0, Math.min(whichPage, getPageCount() - 1)); int newX = getScrollForPage(whichPage); final int sX = mUnboundedScrollX; final int delta = newX - sX; - snapToPage(whichPage, delta, duration, immediate); + snapToPage(whichPage, delta, duration, immediate, interpolator); } protected void snapToPage(int whichPage, int delta, int duration) { - snapToPage(whichPage, delta, duration, false); + snapToPage(whichPage, delta, duration, false, null); } - protected void snapToPage(int whichPage, int delta, int duration, boolean immediate) { + protected void snapToPage(int whichPage, int delta, int duration, boolean immediate, + TimeInterpolator interpolator) { mNextPage = whichPage; View focusedChild = getFocusedChild(); if (focusedChild != null && whichPage != mCurrentPage && @@ -2215,8 +2223,15 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } if (!mScroller.isFinished()) { - mScroller.abortAnimation(); + abortScrollerAnimation(false); } + + if (interpolator != null) { + mScroller.setInterpolator(interpolator); + } else { + mScroller.setInterpolator(mDefaultInterpolator); + } + mScroller.startScroll(mUnboundedScrollX, 0, delta, 0, duration); notifyPageSwitchListener(); @@ -2472,7 +2487,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc mDragView = getChildAt(dragViewIndex); mDragView.animate().scaleX(1.15f).scaleY(1.15f).setDuration(100).start(); mDragViewBaselineLeft = mDragView.getLeft(); - disableFreeScroll(-1); + snapToPage(getPageNearestToCenterOfScreen()); + disableFreeScroll(); onStartReordering(); return true; } diff --git a/src/com/android/launcher3/RampUpScroller.java b/src/com/android/launcher3/RampUpScroller.java deleted file mode 100644 index 89eb5798e6..0000000000 --- a/src/com/android/launcher3/RampUpScroller.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3; - -import android.view.animation.AccelerateInterpolator; -import android.view.animation.AnimationUtils; -import android.view.animation.Interpolator; - -/** - * Scroller that gradually reaches a target velocity. - */ -class RampUpScroller { - private final Interpolator mInterpolator; - private final long mRampUpTime; - - private long mStartTime; - private long mDeltaTime; - private float mTargetVelocityX; - private float mTargetVelocityY; - private int mDeltaX; - private int mDeltaY; - - /** - * Creates a new ramp-up scroller that reaches full velocity after a - * specified duration. - * - * @param rampUpTime Duration before the scroller reaches target velocity. - */ - public RampUpScroller(long rampUpTime) { - mInterpolator = new AccelerateInterpolator(); - mRampUpTime = rampUpTime; - } - - /** - * Starts the scroller at the current animation time. - */ - public void start() { - mStartTime = AnimationUtils.currentAnimationTimeMillis(); - mDeltaTime = mStartTime; - } - - /** - * Computes the current scroll deltas. This usually only be called after - * starting the scroller with {@link #start()}. - * - * @see #getDeltaX() - * @see #getDeltaY() - */ - public void computeScrollDelta() { - final long currentTime = AnimationUtils.currentAnimationTimeMillis(); - final long elapsedSinceStart = currentTime - mStartTime; - final float scale; - if (elapsedSinceStart < mRampUpTime) { - scale = mInterpolator.getInterpolation((float) elapsedSinceStart / mRampUpTime); - } else { - scale = 1f; - } - - final long elapsedSinceDelta = currentTime - mDeltaTime; - mDeltaTime = currentTime; - - mDeltaX = (int) (elapsedSinceDelta * scale * mTargetVelocityX); - mDeltaY = (int) (elapsedSinceDelta * scale * mTargetVelocityY); - } - - /** - * Sets the target velocity for this scroller. - * - * @param x The target X velocity in pixels per millisecond. - * @param y The target Y velocity in pixels per millisecond. - */ - public void setTargetVelocity(float x, float y) { - mTargetVelocityX = x; - mTargetVelocityY = y; - } - - /** - * @return The target X velocity for this scroller. - */ - public float getTargetVelocityX() { - return mTargetVelocityX; - } - - /** - * @return The target Y velocity for this scroller. - */ - public float getTargetVelocityY() { - return mTargetVelocityY; - } - - /** - * The distance traveled in the X-coordinate computed by the last call to - * {@link #computeScrollDelta()}. - */ - public int getDeltaX() { - return mDeltaX; - } - - /** - * The distance traveled in the Y-coordinate computed by the last call to - * {@link #computeScrollDelta()}. - */ - public int getDeltaY() { - return mDeltaY; - } -} diff --git a/src/com/android/launcher3/SmoothPagedView.java b/src/com/android/launcher3/SmoothPagedView.java index 64dcb34caa..4e331aa2c8 100644 --- a/src/com/android/launcher3/SmoothPagedView.java +++ b/src/com/android/launcher3/SmoothPagedView.java @@ -19,7 +19,6 @@ package com.android.launcher3; import android.content.Context; import android.util.AttributeSet; import android.view.animation.Interpolator; -import android.widget.Scroller; public abstract class SmoothPagedView extends PagedView { private static final float SMOOTHING_SPEED = 0.75f; @@ -100,7 +99,7 @@ public abstract class SmoothPagedView extends PagedView { mBaseLineFlingVelocity = 2500.0f; mFlingVelocityInfluence = 0.4f; mScrollInterpolator = new OvershootInterpolator(); - mScroller = new Scroller(getContext(), mScrollInterpolator); + setDefaultInterpolator(mScrollInterpolator); } } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 9b17fcd9e7..8602606fe9 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2108,11 +2108,12 @@ public class Workspace extends SmoothPagedView mNewScale = 1.0f; if (oldStateIsOverview) { - disableFreeScroll(snapPage); + disableFreeScroll(); } else if (stateIsOverview) { enableFreeScroll(); } + if (state != State.NORMAL) { if (stateIsSpringLoaded) { mNewScale = mSpringLoadedShrinkFactor; @@ -2135,16 +2136,20 @@ public class Workspace extends SmoothPagedView duration = getResources().getInteger(R.integer.config_appsCustomizeWorkspaceShrinkTime); } + if (snapPage == -1) { + snapPage = getPageNearestToCenterOfScreen(); + } + snapToPage(snapPage, duration, mZoomInInterpolator); + for (int i = 0; i < getChildCount(); i++) { final CellLayout cl = (CellLayout) getChildAt(i); - boolean isCurrentPage = (i == getNextPage()); + boolean isCurrentPage = (i == snapPage); float initialAlpha = cl.getShortcutsAndWidgets().getAlpha(); float finalAlpha; if (stateIsSmall) { finalAlpha = 0f; } else if (stateIsNormal && mWorkspaceFadeInAdjacentScreens) { - - finalAlpha = (i == getNextPage() || i < numCustomPages()) ? 1f : 0f; + finalAlpha = (i == snapPage || i < numCustomPages()) ? 1f : 0f; } else { finalAlpha = 1f; } From a765215280ef9e128da3fbab37b3d51a565941e3 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Mon, 18 Nov 2013 20:06:55 +0000 Subject: [PATCH 022/147] Allowing ability to pick up items / enter overview before full page settle -> Fixes issue 11701996 -> Fixes issue where if you tried to longpress a widget before the page settled, it would instead enter overview Change-Id: Ic6321805687dd5e8c69506c6cd6941a11d557ed6 --- src/com/android/launcher3/PagedView.java | 11 +++-------- src/com/android/launcher3/Workspace.java | 1 - 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index c854498099..370c629a36 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -153,7 +153,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc protected int mTouchState = TOUCH_STATE_REST; protected boolean mForceScreenScrolled = false; - private boolean mScrollAbortedFromIntercept = false; protected OnLongClickListener mLongClickListener; @@ -1392,13 +1391,13 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc * being flinged. */ final int xDist = Math.abs(mScroller.getFinalX() - mScroller.getCurrX()); - final boolean finishedScrolling = (mScroller.isFinished() || xDist < mTouchSlop); + final boolean finishedScrolling = (mScroller.isFinished() || xDist < mTouchSlop / 3); if (finishedScrolling) { mTouchState = TOUCH_STATE_REST; if (!mScroller.isFinished()) { - mScrollAbortedFromIntercept = true; - abortScrollerAnimation(false); + setCurrentPage(getNextPage()); + pageEndMoving(); } } else { if (isTouchPointInViewportWithBuffer((int) mDownMotionX, (int) mDownMotionY)) { @@ -1426,9 +1425,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: - if (mScrollAbortedFromIntercept) { - snapToDestination(); - } resetTouchState(); break; @@ -1997,7 +1993,6 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc releaseVelocityTracker(); endReordering(); mCancelTap = false; - mScrollAbortedFromIntercept = false; mTouchState = TOUCH_STATE_REST; mActivePointerId = INVALID_POINTER; } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 8602606fe9..4d72852ea3 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2113,7 +2113,6 @@ public class Workspace extends SmoothPagedView enableFreeScroll(); } - if (state != State.NORMAL) { if (stateIsSpringLoaded) { mNewScale = mSpringLoadedShrinkFactor; From 268f1c563f4179ee2fb6c87b662679451e23a7c8 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 18 Nov 2013 14:04:41 -0800 Subject: [PATCH 023/147] Initialize FastBitmapDrawable bounds with default bitmap dimensions. Change-Id: Ida9603e35b242a581b9401c6440875cd511725a1 --- src/com/android/launcher3/FastBitmapDrawable.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/android/launcher3/FastBitmapDrawable.java b/src/com/android/launcher3/FastBitmapDrawable.java index 83be143695..85e90202b3 100644 --- a/src/com/android/launcher3/FastBitmapDrawable.java +++ b/src/com/android/launcher3/FastBitmapDrawable.java @@ -32,6 +32,7 @@ class FastBitmapDrawable extends Drawable { FastBitmapDrawable(Bitmap b) { mAlpha = 255; mBitmap = b; + setBounds(0, 0, b.getWidth(), b.getHeight()); } @Override From f0716b7a7475fc80a97fd6f95efecab570d186fb Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 18 Nov 2013 16:09:54 -0800 Subject: [PATCH 024/147] Update the database when converting the final screen. (Bug 11683562, Bug 11034205) --- src/com/android/launcher3/Workspace.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 6c58a375be..f8db240e04 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -690,7 +690,8 @@ public class Workspace extends SmoothPagedView mWorkspaceScreens.put(EXTRA_EMPTY_SCREEN_ID, finalScreen); mScreenOrder.add(EXTRA_EMPTY_SCREEN_ID); - // XXX: Do we need to update LM workspace screens here? + // Update the model if we have changed any screens + mLauncher.getModel().updateWorkspaceScreenOrder(mLauncher, mScreenOrder); Launcher.addDumpLog(TAG, "11683562 - extra empty screen: " + finalScreenId, true); } } From f0b8dacf1516e0d901c71109c906dc15ef855fc5 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Tue, 19 Nov 2013 12:21:25 -0500 Subject: [PATCH 025/147] Disable importing workspaces from Launcher2. Bug: 9832552 Bug: 11761032 Change-Id: I4dfd16046e9d6d0d1d864dff4340b0ed13cc8b8f --- src/com/android/launcher3/LauncherModel.java | 2 + .../android/launcher3/LauncherProvider.java | 55 +++++++++++-------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index c3d4666447..6a6cb35383 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1636,7 +1636,9 @@ public class LauncherModel extends BroadcastReceiver { LauncherAppState.getLauncherProvider().loadDefaultFavoritesIfNecessary(0); // Check if we need to do any upgrade-path logic + // (Includes having just imported default favorites) boolean loadedOldDb = LauncherAppState.getLauncherProvider().justLoadedOldDb(); + // Log to disk Launcher.addDumpLog(TAG, "11683562 - loadedOldDb: " + loadedOldDb, true); diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index b5db3386f8..4eb30e746f 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -71,6 +71,9 @@ public class LauncherProvider extends ContentProvider { static final String OLD_AUTHORITY = "com.android.launcher2.settings"; static final String AUTHORITY = ProviderConfig.AUTHORITY; + // Should we attempt to load anything from the com.android.launcher2 provider? + static final boolean IMPORT_LAUNCHER2_DATABASE = false; + static final String TABLE_FAVORITES = "favorites"; static final String TABLE_WORKSPACE_SCREENS = "workspaceScreens"; static final String PARAMETER_NOTIFY = "notify"; @@ -366,32 +369,38 @@ public class LauncherProvider extends ContentProvider { sendAppWidgetResetNotify(); } - // Try converting the old database - ContentValuesCallback permuteScreensCb = new ContentValuesCallback() { - public void onRow(ContentValues values) { - int container = values.getAsInteger(LauncherSettings.Favorites.CONTAINER); - if (container == Favorites.CONTAINER_DESKTOP) { - int screen = values.getAsInteger(LauncherSettings.Favorites.SCREEN); - screen = (int) upgradeLauncherDb_permuteScreens(screen); - values.put(LauncherSettings.Favorites.SCREEN, screen); + if (IMPORT_LAUNCHER2_DATABASE) { + // Try converting the old database + ContentValuesCallback permuteScreensCb = new ContentValuesCallback() { + public void onRow(ContentValues values) { + int container = values.getAsInteger(LauncherSettings.Favorites.CONTAINER); + if (container == Favorites.CONTAINER_DESKTOP) { + int screen = values.getAsInteger(LauncherSettings.Favorites.SCREEN); + screen = (int) upgradeLauncherDb_permuteScreens(screen); + values.put(LauncherSettings.Favorites.SCREEN, screen); + } + } + }; + Uri uri = Uri.parse("content://" + Settings.AUTHORITY + + "/old_favorites?notify=true"); + if (!convertDatabase(db, uri, permuteScreensCb, true)) { + // Try and upgrade from the Launcher2 db + uri = LauncherSettings.Favorites.OLD_CONTENT_URI; + if (!convertDatabase(db, uri, permuteScreensCb, false)) { + // If we fail, then set a flag to load the default workspace + setFlagEmptyDbCreated(); + return; } } - }; - Uri uri = Uri.parse("content://" + Settings.AUTHORITY + - "/old_favorites?notify=true"); - if (!convertDatabase(db, uri, permuteScreensCb, true)) { - // Try and upgrade from the Launcher2 db - uri = LauncherSettings.Favorites.OLD_CONTENT_URI; - if (!convertDatabase(db, uri, permuteScreensCb, false)) { - // If we fail, then set a flag to load the default workspace - setFlagEmptyDbCreated(); - return; - } + // Right now, in non-default workspace cases, we want to run the final + // upgrade code (ie. to fix workspace screen indices -> ids, etc.), so + // set that flag too. + setFlagJustLoadedOldDb(); + } else { + // Fresh and clean launcher DB. + mMaxItemId = initializeMaxItemId(db); + setFlagEmptyDbCreated(); } - // Right now, in non-default workspace cases, we want to run the final - // upgrade code (ie. to fix workspace screen indices -> ids, etc.), so - // set that flag too. - setFlagJustLoadedOldDb(); } private void addWorkspacesTable(SQLiteDatabase db) { From 2c130e1f293c67275d78c862e3240a47fea0e2e7 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Tue, 19 Nov 2013 15:10:12 -0800 Subject: [PATCH 026/147] Reducing workspace grid for dogfooding. --- src/com/android/launcher3/DynamicGrid.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java index 42aa20d7df..ce7855362a 100644 --- a/src/com/android/launcher3/DynamicGrid.java +++ b/src/com/android/launcher3/DynamicGrid.java @@ -74,10 +74,10 @@ public class DynamicGrid { // The tablet profile is odd in that the landscape orientation // also includes the nav bar on the side deviceProfiles.add(new DeviceProfile("Nexus 7", - 575, 904, 6, 6, 72, 14.4f, 7, 60)); + 575, 904, 5, 5, 72, 14.4f, 7, 60)); // Larger tablet profiles always have system bars on the top & bottom deviceProfiles.add(new DeviceProfile("Nexus 10", - 727, 1207, 5, 8, 80, 14.4f, 9, 64)); + 727, 1207, 5, 5, 80, 14.4f, 7, 64)); /* deviceProfiles.add(new DeviceProfile("Nexus 7", 600, 960, 5, 5, 72, 14.4f, 5, 60)); From 72fbec17e09a1120971621587d5005f683baafd1 Mon Sep 17 00:00:00 2001 From: Mathew Inwood Date: Tue, 19 Nov 2013 15:45:07 +0000 Subject: [PATCH 027/147] Add support for initiating a drag from an overlay. This allows an overlay to create apps and shortcuts on the home screen. Change-Id: I63ee4ef02db3f4bc89726c394fd55ad26f50452c --- src/com/android/launcher3/ItemInfo.java | 2 +- src/com/android/launcher3/Launcher.java | 20 ++++++++++++++++++++ src/com/android/launcher3/ShortcutInfo.java | 9 ++++++++- src/com/android/launcher3/Utilities.java | 4 ++-- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/ItemInfo.java b/src/com/android/launcher3/ItemInfo.java index 8c4cefd5f2..36ba6c14f1 100644 --- a/src/com/android/launcher3/ItemInfo.java +++ b/src/com/android/launcher3/ItemInfo.java @@ -27,7 +27,7 @@ import java.io.IOException; /** * Represents an item in the launcher. */ -class ItemInfo { +public class ItemInfo { static final int NO_ID = -1; diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 7d84a3c88f..ba3ba93275 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -45,6 +45,7 @@ import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; @@ -4502,6 +4503,25 @@ public class Launcher extends Activity DISMISS_CLING_DURATION, true); } + public ItemInfo createAppDragInfo(Intent appLaunchIntent) { + ResolveInfo ri = getPackageManager().resolveActivity(appLaunchIntent, 0); + if (ri == null) { + return null; + } + return new AppInfo(getPackageManager(), ri, mIconCache, null); + } + + public ItemInfo createShortcutDragInfo(Intent shortcutIntent, CharSequence caption, + Bitmap icon) { + return new ShortcutInfo(shortcutIntent, caption, icon); + } + + public void startDrag(View dragView, ItemInfo dragInfo, DragSource source) { + dragView.setTag(dragInfo); + mWorkspace.onDragStartedWithItem(dragView); + mWorkspace.beginDragShared(dragView, source); + } + /** * Prints out out state for debugging. */ diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java index dafabb8d90..fc087a897b 100644 --- a/src/com/android/launcher3/ShortcutInfo.java +++ b/src/com/android/launcher3/ShortcutInfo.java @@ -71,7 +71,14 @@ class ShortcutInfo extends ItemInfo { protected Intent getIntent() { return intent; } - + + ShortcutInfo(Intent intent, CharSequence title, Bitmap icon) { + this(); + this.intent = intent; + this.title = title; + mIcon = icon; + } + public ShortcutInfo(Context context, ShortcutInfo info) { super(info); title = info.title.toString(); diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 21c546d04e..9ffd044b49 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -43,7 +43,7 @@ import java.util.ArrayList; /** * Various utilities shared amongst the Launcher's classes. */ -final class Utilities { +public final class Utilities { private static final String TAG = "Launcher.Utilities"; private static int sIconWidth = -1; @@ -111,7 +111,7 @@ final class Utilities { /** * Returns a bitmap suitable for the all apps view. */ - static Bitmap createIconBitmap(Drawable icon, Context context) { + public static Bitmap createIconBitmap(Drawable icon, Context context) { synchronized (sCanvas) { // we share the statics :-( if (sIconWidth == -1) { initStatics(context); From 5b3bdd394e4401d7e91d528ef1d424d1af271d97 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Thu, 21 Nov 2013 08:29:51 -0500 Subject: [PATCH 028/147] Enable Launcher2 workspace import. Bug: 11800663 Change-Id: I5c8963bde69e667bf726d1f926a913c347294e16 --- src/com/android/launcher3/LauncherProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 4eb30e746f..dbc1b1ce15 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -72,7 +72,7 @@ public class LauncherProvider extends ContentProvider { static final String AUTHORITY = ProviderConfig.AUTHORITY; // Should we attempt to load anything from the com.android.launcher2 provider? - static final boolean IMPORT_LAUNCHER2_DATABASE = false; + static final boolean IMPORT_LAUNCHER2_DATABASE = true; static final String TABLE_FAVORITES = "favorites"; static final String TABLE_WORKSPACE_SCREENS = "workspaceScreens"; From 853f5a46ebef0161737f5ddb7f63f43c5d7a99d5 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Mon, 25 Nov 2013 14:32:21 +0100 Subject: [PATCH 029/147] Making workspace->overview transition smoother - Also set interpolator on page indicators --- src/com/android/launcher3/Workspace.java | 46 ++++++++++++------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 9b17fcd9e7..94cec58946 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -31,7 +31,6 @@ import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetProviderInfo; import android.content.ComponentName; import android.content.Context; -import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.content.res.TypedArray; @@ -55,10 +54,7 @@ import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -import android.view.View.OnClickListener; -import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; -import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.widget.TextView; @@ -2176,6 +2172,7 @@ public class Workspace extends SmoothPagedView final View searchBar = mLauncher.getQsbBar(); final View overviewPanel = mLauncher.getOverviewPanel(); final View hotseat = mLauncher.getHotseat(); + final View pageIndicator = getPageIndicator(); if (animated) { anim.setDuration(duration); LauncherViewPropertyAnimator scale = new LauncherViewPropertyAnimator(this); @@ -2215,31 +2212,36 @@ public class Workspace extends SmoothPagedView } } } - ObjectAnimator pageIndicatorAlpha = null; - if (getPageIndicator() != null) { - pageIndicatorAlpha = ObjectAnimator.ofFloat(getPageIndicator(), "alpha", - finalHotseatAndPageIndicatorAlpha); + Animator pageIndicatorAlpha = null; + if (pageIndicator != null) { + pageIndicatorAlpha = new LauncherViewPropertyAnimator(pageIndicator) + .alpha(finalHotseatAndPageIndicatorAlpha).withLayer(); + } else { + // create a dummy animation so we don't need to do null checks later + pageIndicatorAlpha = ValueAnimator.ofFloat(0, 0); } - ObjectAnimator hotseatAlpha = ObjectAnimator.ofFloat(hotseat, "alpha", - finalHotseatAndPageIndicatorAlpha); - ObjectAnimator searchBarAlpha = ObjectAnimator.ofFloat(searchBar, - "alpha", finalSearchBarAlpha); - ObjectAnimator overviewPanelAlpha = ObjectAnimator.ofFloat(overviewPanel, - "alpha", finalOverviewPanelAlpha); + Animator hotseatAlpha = new LauncherViewPropertyAnimator(hotseat) + .alpha(finalHotseatAndPageIndicatorAlpha).withLayer(); + Animator searchBarAlpha = new LauncherViewPropertyAnimator(searchBar) + .alpha(finalSearchBarAlpha).withLayer(); + Animator overviewPanelAlpha = new LauncherViewPropertyAnimator(overviewPanel) + .alpha(finalOverviewPanelAlpha).withLayer(); - overviewPanelAlpha.addListener(new AlphaUpdateListener(overviewPanel)); + pageIndicatorAlpha.addListener(new AlphaUpdateListener(pageIndicator)); hotseatAlpha.addListener(new AlphaUpdateListener(hotseat)); searchBarAlpha.addListener(new AlphaUpdateListener(searchBar)); + overviewPanelAlpha.addListener(new AlphaUpdateListener(overviewPanel)); if (workspaceToOverview) { + pageIndicatorAlpha.setInterpolator(new DecelerateInterpolator(2)); hotseatAlpha.setInterpolator(new DecelerateInterpolator(2)); + overviewPanelAlpha.setInterpolator(null); } else if (overviewToWorkspace) { + pageIndicatorAlpha.setInterpolator(null); + hotseatAlpha.setInterpolator(null); overviewPanelAlpha.setInterpolator(new DecelerateInterpolator(2)); } - - if (getPageIndicator() != null) { - pageIndicatorAlpha.addListener(new AlphaUpdateListener(getPageIndicator())); - } + searchBarAlpha.setInterpolator(null); anim.play(overviewPanelAlpha); anim.play(hotseatAlpha); @@ -2251,9 +2253,9 @@ public class Workspace extends SmoothPagedView AlphaUpdateListener.updateVisibility(overviewPanel); hotseat.setAlpha(finalHotseatAndPageIndicatorAlpha); AlphaUpdateListener.updateVisibility(hotseat); - if (getPageIndicator() != null) { - getPageIndicator().setAlpha(finalHotseatAndPageIndicatorAlpha); - AlphaUpdateListener.updateVisibility(getPageIndicator()); + if (pageIndicator != null) { + pageIndicator.setAlpha(finalHotseatAndPageIndicatorAlpha); + AlphaUpdateListener.updateVisibility(pageIndicator); } searchBar.setAlpha(finalSearchBarAlpha); AlphaUpdateListener.updateVisibility(searchBar); From a6a296ba1ffba6c5b98e92f05254f0317f28290b Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Tue, 26 Nov 2013 12:48:01 -0500 Subject: [PATCH 030/147] Revert "Enable Launcher2 workspace import." This reverts commit 5b3bdd394e4401d7e91d528ef1d424d1af271d97. Bug: 11768766 Bug: 9832552 --- src/com/android/launcher3/LauncherProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index dbc1b1ce15..4eb30e746f 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -72,7 +72,7 @@ public class LauncherProvider extends ContentProvider { static final String AUTHORITY = ProviderConfig.AUTHORITY; // Should we attempt to load anything from the com.android.launcher2 provider? - static final boolean IMPORT_LAUNCHER2_DATABASE = true; + static final boolean IMPORT_LAUNCHER2_DATABASE = false; static final String TABLE_FAVORITES = "favorites"; static final String TABLE_WORKSPACE_SCREENS = "workspaceScreens"; From 37c717ffa626c6690ea45ba88e5dfc9bea39ed6e Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 26 Nov 2013 11:50:15 -0800 Subject: [PATCH 031/147] Fix NPE in case where workspace is null because Launcher has been destroyed Bug: 11765964 Change-Id: Iacd4db712c09940c05ccd2a64b25e376b63c6aee --- src/com/android/launcher3/Launcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 7d84a3c88f..ce6b20e039 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2663,7 +2663,7 @@ public class Launcher extends Activity } public void closeFolder() { - Folder folder = mWorkspace.getOpenFolder(); + Folder folder = mWorkspace != null ? mWorkspace.getOpenFolder() : null; if (folder != null) { if (folder.isEditingName()) { folder.dismissEditingName(); From d552dd90f1da32e1be2dd95ffed57c65d40cb651 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 26 Nov 2013 12:13:11 -0800 Subject: [PATCH 032/147] Fix NPE in Launcher onDestroy Bug: 11765296 Change-Id: I83299656cc90b8a744afb0db4b5ea08675c8db82 --- src/com/android/launcher3/Launcher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index ce6b20e039..0a630fe648 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1877,7 +1877,7 @@ public class Launcher extends Activity mDragLayer.clearAllResizeFrames(); ((ViewGroup) mWorkspace.getParent()).removeAllViews(); - mWorkspace.removeAllViews(); + mWorkspace.removeAllWorkspaceScreens(); mWorkspace = null; mDragController = null; From 166ebd4da5d85195bd1f562572f468726ade548f Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 26 Nov 2013 14:55:45 -0800 Subject: [PATCH 033/147] De-parent custom content view before adding to custom content screen Bug: 11666352 Change-Id: Ief35e6e8a16ec0217e0dd27434723ee7a7d5beef --- src/com/android/launcher3/Workspace.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index b1b50bf5ea..02949e7dd9 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -619,6 +619,12 @@ public class Workspace extends SmoothPagedView if (customContent instanceof Insettable) { ((Insettable)customContent).setInsets(mInsets); } + + // Verify that the child is removed from any existing parent. + if (customContent.getParent() instanceof ViewGroup) { + ViewGroup parent = (ViewGroup) customContent.getParent(); + parent.removeView(customContent); + } customScreen.removeAllViews(); customScreen.addViewToCellLayout(customContent, 0, 0, lp, true); mCustomContentDescription = description; From 6400b84d5594d7b9244e3b118f107033eb8b87a0 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 26 Nov 2013 15:45:38 -0800 Subject: [PATCH 034/147] Update custom content insets when Workspace insets are set -> Not sure if custom content can be added before insets are set, so this is just a speculative fix. Bug: 11875171 Change-Id: Ia8e07f51f527f464262b7ff99e4db245fe5a7906 --- src/com/android/launcher3/Workspace.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 02949e7dd9..b8af9ad5b6 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -334,6 +334,14 @@ public class Workspace extends SmoothPagedView @Override public void setInsets(Rect insets) { mInsets.set(insets); + + CellLayout customScreen = getScreenWithId(CUSTOM_CONTENT_SCREEN_ID); + if (customScreen != null) { + View customContent = customScreen.getShortcutsAndWidgets().getChildAt(0); + if (customContent instanceof Insettable) { + ((Insettable) customContent).setInsets(mInsets); + } + } } // estimate the size of a widget with spans hSpan, vSpan. return MAX_VALUE for each From d8dbb46468e0a8860468661a6edfb7969bfdf0a7 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Wed, 27 Nov 2013 11:55:48 -0800 Subject: [PATCH 035/147] Fix binding problem with no screens (issue 11768766) Change-Id: I0a296892d4964913f38bf6d7bd2c2b17e1e0e8e0 --- src/com/android/launcher3/LauncherModel.java | 28 +++++--------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 6a6cb35383..4d9dff93a4 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2041,12 +2041,6 @@ public class LauncherModel extends BroadcastReceiver { } } - // If we aren't filtering on a screen, then the set of items to load is the full set of - // items given. - if (currentScreenId < 0) { - throw new RuntimeException("Unexpected screen id"); - } - // Order the set of items by their containers first, this allows use to walk through the // list sequentially, build up a list of containers that are in the specified screen, // as well as all items in those containers. @@ -2084,11 +2078,6 @@ public class LauncherModel extends BroadcastReceiver { ArrayList appWidgets, ArrayList currentScreenWidgets, ArrayList otherScreenWidgets) { - // If we aren't filtering on a screen, then the set of items to load is the full set of - // widgets given. - if (currentScreenId < 0) { - throw new RuntimeException("Unexpected screen id"); - } for (LauncherAppWidgetInfo widget : appWidgets) { if (widget == null) continue; @@ -2107,11 +2096,6 @@ public class LauncherModel extends BroadcastReceiver { HashMap folders, HashMap currentScreenFolders, HashMap otherScreenFolders) { - // If we aren't filtering on a screen, then the set of items to load is the full set of - // widgets given. - if (currentScreenId < 0) { - throw new RuntimeException("Unexpected screen id"); - } for (long id : folders.keySet()) { ItemInfo info = itemsIdMap.get(id); @@ -2261,13 +2245,15 @@ public class LauncherModel extends BroadcastReceiver { } final boolean isLoadingSynchronously = (synchronizeBindPage > -1); - final int currentScreen = isLoadingSynchronously ? synchronizeBindPage : + int currScreen = isLoadingSynchronously ? synchronizeBindPage : oldCallbacks.getCurrentWorkspaceScreen(); - if (currentScreen >= orderedScreenIds.size()) { - Log.w(TAG, "Invalid screen id to synchronously load"); - return; + if (currScreen >= orderedScreenIds.size()) { + // There may be no workspace screens (just hotseat items and an empty page). + currScreen = -1; } - final long currentScreenId = orderedScreenIds.get(currentScreen); + final int currentScreen = currScreen; + final long currentScreenId = + currentScreen < 0 ? -1 : orderedScreenIds.get(currentScreen); // Load all the items that are on the current page first (and in the process, unbind // all the existing workspace items before we call startBinding() below. From 1eeb3fc9d874d98dfb43883d17efb4202d83d88a Mon Sep 17 00:00:00 2001 From: Mathew Inwood Date: Mon, 25 Nov 2013 17:01:34 +0000 Subject: [PATCH 036/147] Generalize support for 'App Info', 'Uninstall' and 'Delete' This allows other DragSource's to allow this behaviour, instead of it being tied to specific source types. Change-Id: I06b7c39b1b34a0ae141245bcc13b6a0873a4c0fd --- src/com/android/launcher3/AppsCustomizePagedView.java | 10 ++++++++++ src/com/android/launcher3/DeleteDropTarget.java | 9 ++++++--- src/com/android/launcher3/DragSource.java | 11 +++++++++++ src/com/android/launcher3/Folder.java | 10 ++++++++++ src/com/android/launcher3/InfoDropTarget.java | 6 +----- src/com/android/launcher3/Workspace.java | 10 ++++++++++ 6 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index 688ff82aa4..2865bc5d5c 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -915,6 +915,16 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen return true; } + @Override + public boolean supportsAppInfoDropTarget() { + return true; + } + + @Override + public boolean supportsDeleteDropTarget() { + return false; + } + @Override public float getIntrinsicIconScaleFactor() { LauncherAppState app = LauncherAppState.getInstance(); diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index 4023dafb65..7e0e5ebd7a 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -95,7 +95,7 @@ public class DeleteDropTarget extends ButtonDropTarget { } private boolean isAllAppsApplication(DragSource source, Object info) { - return (source instanceof AppsCustomizePagedView) && (info instanceof AppInfo); + return source.supportsAppInfoDropTarget() && (info instanceof AppInfo); } private boolean isAllAppsWidget(DragSource source, Object info) { if (source instanceof AppsCustomizePagedView) { @@ -175,6 +175,7 @@ public class DeleteDropTarget extends ButtonDropTarget { boolean isVisible = true; boolean useUninstallLabel = !AppsCustomizePagedView.DISABLE_ALL_APPS && isAllAppsApplication(source, info); + boolean useDeleteLabel = !useUninstallLabel && source.supportsDeleteDropTarget(); // If we are dragging an application from AppsCustomize, only show the control if we can // delete the app (it was downloaded), and rename the string to "uninstall" in such a case. @@ -185,15 +186,17 @@ public class DeleteDropTarget extends ButtonDropTarget { if (useUninstallLabel) { setCompoundDrawablesRelativeWithIntrinsicBounds(mUninstallDrawable, null, null, null); - } else { + } else if (useDeleteLabel) { setCompoundDrawablesRelativeWithIntrinsicBounds(mRemoveDrawable, null, null, null); + } else { + isVisible = false; } mCurrentDrawable = (TransitionDrawable) getCurrentDrawable(); mActive = isVisible; resetHoverColor(); ((ViewGroup) getParent()).setVisibility(isVisible ? View.VISIBLE : View.GONE); - if (getText().length() > 0) { + if (isVisible && getText().length() > 0) { setText(useUninstallLabel ? R.string.delete_target_uninstall_label : R.string.delete_target_label); } diff --git a/src/com/android/launcher3/DragSource.java b/src/com/android/launcher3/DragSource.java index cca9ab1a40..7369eeac2c 100644 --- a/src/com/android/launcher3/DragSource.java +++ b/src/com/android/launcher3/DragSource.java @@ -30,6 +30,17 @@ public interface DragSource { */ boolean supportsFlingToDelete(); + /** + * @return whether items dragged from this source supports 'App Info' + */ + boolean supportsAppInfoDropTarget(); + + /** + * @return whether items dragged from this source supports 'Delete' drop target (e.g. to remove + * a shortcut. + */ + boolean supportsDeleteDropTarget(); + /* * @return the scale of the icons over the workspace icon size */ diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 1d234ff8a1..50e2000926 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -801,6 +801,16 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList return true; } + @Override + public boolean supportsAppInfoDropTarget() { + return false; + } + + @Override + public boolean supportsDeleteDropTarget() { + return true; + } + public void onFlingToDelete(DragObject d, int x, int y, PointF vec) { // Do nothing } diff --git a/src/com/android/launcher3/InfoDropTarget.java b/src/com/android/launcher3/InfoDropTarget.java index 2ad43b6fff..374238c49f 100644 --- a/src/com/android/launcher3/InfoDropTarget.java +++ b/src/com/android/launcher3/InfoDropTarget.java @@ -62,10 +62,6 @@ public class InfoDropTarget extends ButtonDropTarget { } } - private boolean isFromAllApps(DragSource source) { - return (source instanceof AppsCustomizePagedView); - } - @Override public boolean acceptDrop(DragObject d) { // acceptDrop is called just before onDrop. We do the work here, rather than @@ -93,7 +89,7 @@ public class InfoDropTarget extends ButtonDropTarget { boolean isVisible = true; // Hide this button unless we are dragging something from AllApps - if (!isFromAllApps(source)) { + if (!source.supportsAppInfoDropTarget()) { isVisible = false; } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 02949e7dd9..4fd57c1b88 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4212,6 +4212,16 @@ public class Workspace extends SmoothPagedView return true; } + @Override + public boolean supportsAppInfoDropTarget() { + return false; + } + + @Override + public boolean supportsDeleteDropTarget() { + return true; + } + @Override public void onFlingToDelete(DragObject d, int x, int y, PointF vec) { // Do nothing From 6def4f900c8b92f61256bf33a158aba16d9aceee Mon Sep 17 00:00:00 2001 From: Mac Duy Hai Date: Thu, 28 Nov 2013 16:17:33 +0000 Subject: [PATCH 037/147] Add method to retrieve search box bounds. Change-Id: I67893f00990053415453490034ea7066d9f0f3b6 --- src/com/android/launcher3/Launcher.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 0a630fe648..82d67cc979 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4023,6 +4023,11 @@ public class Launcher extends Activity getDeviceProfile().isVerticalBarLayout(); } + protected Rect getSearchBarBounds() { + return LauncherAppState.getInstance().getDynamicGrid(). + getDeviceProfile().getSearchBarBounds(); + } + @Override public void bindSearchablesChanged() { boolean searchVisible = updateGlobalSearchIcon(); From d0e4118f2e87f890fb243c47d87dc47fcdd068ee Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Mon, 2 Dec 2013 15:55:50 -0500 Subject: [PATCH 038/147] Revert "Revert "Enable Launcher2 workspace import."" This reverts commit a6a296ba1ffba6c5b98e92f05254f0317f28290b. https://memegen.googleplex.com/5476445807706112 Bug: 9832552 --- src/com/android/launcher3/LauncherProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 4eb30e746f..dbc1b1ce15 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -72,7 +72,7 @@ public class LauncherProvider extends ContentProvider { static final String AUTHORITY = ProviderConfig.AUTHORITY; // Should we attempt to load anything from the com.android.launcher2 provider? - static final boolean IMPORT_LAUNCHER2_DATABASE = false; + static final boolean IMPORT_LAUNCHER2_DATABASE = true; static final String TABLE_FAVORITES = "favorites"; static final String TABLE_WORKSPACE_SCREENS = "workspaceScreens"; From 69e04ea5ab08ae923d5c8de079c7a36998e5e46a Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 2 Dec 2013 14:43:44 -0800 Subject: [PATCH 039/147] Modifying Workspace padding to account for Search Bar offsets. (Bug 11968598) Change-Id: I26b8488afd6d75777e1d881f1105b5c1a89021d7 --- src/com/android/launcher3/DeviceProfile.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 626ec42cba..930188587c 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -310,7 +310,7 @@ public class DeviceProfile { searchBarSpaceMaxWidthPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width); searchBarHeightPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height); searchBarSpaceWidthPx = Math.min(searchBarSpaceMaxWidthPx, widthPx); - searchBarSpaceHeightPx = searchBarHeightPx + 2 * edgeMarginPx; + searchBarSpaceHeightPx = searchBarHeightPx + getSearchBarTopOffset(); // Calculate the actual text height Paint textPaint = new Paint(); @@ -419,6 +419,15 @@ public class DeviceProfile { return sum; } + /** Returns the search bar top offset */ + int getSearchBarTopOffset() { + if (isTablet() && !isVerticalBarLayout()) { + return 4 * edgeMarginPx; + } else { + return 2 * edgeMarginPx; + } + } + /** Returns the search bar bounds in the current orientation */ Rect getSearchBarBounds() { return getSearchBarBounds(isLandscape ? CellLayout.LANDSCAPE : CellLayout.PORTRAIT); @@ -561,7 +570,7 @@ public class DeviceProfile { View searchBar = launcher.getSearchBar(); lp = (FrameLayout.LayoutParams) searchBar.getLayoutParams(); if (hasVerticalBarLayout) { - // Vertical search bar + // Vertical search bar space lp.gravity = Gravity.TOP | Gravity.LEFT; lp.width = searchBarSpaceHeightPx; lp.height = LayoutParams.MATCH_PARENT; @@ -569,13 +578,13 @@ public class DeviceProfile { 0, 2 * edgeMarginPx, 0, 2 * edgeMarginPx); } else { - // Horizontal search bar + // Horizontal search bar space lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; lp.width = searchBarSpaceWidthPx; lp.height = searchBarSpaceHeightPx; searchBar.setPadding( 2 * edgeMarginPx, - 2 * edgeMarginPx, + getSearchBarTopOffset(), 2 * edgeMarginPx, 0); } searchBar.setLayoutParams(lp); From 2cb2471e7fbade9a785c523df5941f2855e99041 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 2 Dec 2013 15:00:39 -0800 Subject: [PATCH 040/147] Ensure we pass search bar bounds to GoogleSearch. (Bug 11968598) Change-Id: I10027c2c10bbc5b2f2e63276dc91ceca0bf59a08 --- src/com/android/launcher3/DeviceProfile.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 930188587c..9e1f1a7b1b 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -449,10 +449,12 @@ public class DeviceProfile { // that into account here too. int gap = (int) ((width - 2 * edgeMarginPx - (numColumns * cellWidthPx)) / (2 * (numColumns + 1))); - bounds.set(edgeMarginPx + gap, 0, availableWidthPx - (edgeMarginPx + gap), + bounds.set(edgeMarginPx + gap, getSearchBarTopOffset(), + availableWidthPx - (edgeMarginPx + gap), searchBarSpaceHeightPx); } else { - bounds.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, 0, + bounds.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, + getSearchBarTopOffset(), availableWidthPx - (desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.right), searchBarSpaceHeightPx); } From 1c00fd0b045179c9e6cc2dfc344cddc1a8d5b383 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Mon, 2 Dec 2013 16:11:22 -0800 Subject: [PATCH 041/147] Fix NPE when going to All Apps in landscape --- src/com/android/launcher3/Workspace.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index b8af9ad5b6..3b7afc7619 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -2235,20 +2235,22 @@ public class Workspace extends SmoothPagedView if (pageIndicator != null) { pageIndicatorAlpha = new LauncherViewPropertyAnimator(pageIndicator) .alpha(finalHotseatAndPageIndicatorAlpha).withLayer(); + pageIndicatorAlpha.addListener(new AlphaUpdateListener(pageIndicator)); } else { // create a dummy animation so we don't need to do null checks later pageIndicatorAlpha = ValueAnimator.ofFloat(0, 0); } + Animator hotseatAlpha = new LauncherViewPropertyAnimator(hotseat) .alpha(finalHotseatAndPageIndicatorAlpha).withLayer(); + hotseatAlpha.addListener(new AlphaUpdateListener(hotseat)); + Animator searchBarAlpha = new LauncherViewPropertyAnimator(searchBar) .alpha(finalSearchBarAlpha).withLayer(); + searchBarAlpha.addListener(new AlphaUpdateListener(searchBar)); + Animator overviewPanelAlpha = new LauncherViewPropertyAnimator(overviewPanel) .alpha(finalOverviewPanelAlpha).withLayer(); - - pageIndicatorAlpha.addListener(new AlphaUpdateListener(pageIndicator)); - hotseatAlpha.addListener(new AlphaUpdateListener(hotseat)); - searchBarAlpha.addListener(new AlphaUpdateListener(searchBar)); overviewPanelAlpha.addListener(new AlphaUpdateListener(overviewPanel)); if (workspaceToOverview) { From 6dbe049431741a9dfa05f7eee144335e9da76281 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Mon, 2 Dec 2013 17:00:14 -0800 Subject: [PATCH 042/147] Only import workspaces for non-tablets (where grid hasn't changed) Change-Id: I832b6259477d6325c141fddfe9b50cb05aeff8d2 --- src/com/android/launcher3/LauncherProvider.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 4eb30e746f..54de63531f 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -290,6 +290,13 @@ public class LauncherProvider extends ContentProvider { public void onRow(ContentValues values); } + private static boolean shouldImportLauncher2Database(Context context) { + boolean isTablet = context.getResources().getBoolean(R.bool.is_tablet); + + // We don't import the old databse for tablets, as the grid size has changed. + return !isTablet && IMPORT_LAUNCHER2_DATABASE; + } + private static class DatabaseHelper extends SQLiteOpenHelper { private static final String TAG_FAVORITES = "favorites"; private static final String TAG_FAVORITE = "favorite"; @@ -369,7 +376,7 @@ public class LauncherProvider extends ContentProvider { sendAppWidgetResetNotify(); } - if (IMPORT_LAUNCHER2_DATABASE) { + if (shouldImportLauncher2Database(mContext)) { // Try converting the old database ContentValuesCallback permuteScreensCb = new ContentValuesCallback() { public void onRow(ContentValues values) { From b0ee08109ec89959d9bbd526c6e5f7ab96c8c3ea Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 3 Dec 2013 10:51:45 -0800 Subject: [PATCH 043/147] Add guards for restoreInstanceState (issue 11982812) Change-Id: Ic4c632a956130ab28843085490dc1badb39b0e8c --- src/com/android/launcher3/LauncherModel.java | 2 +- src/com/android/launcher3/Workspace.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index 4d9dff93a4..74f28b3041 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -2298,7 +2298,7 @@ public class LauncherModel extends BroadcastReceiver { r = new Runnable() { public void run() { Callbacks callbacks = tryGetCallbacks(oldCallbacks); - if (callbacks != null) { + if (callbacks != null && currentScreen >= 0) { callbacks.onPageBoundSynchronously(currentScreen); } } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 3b7afc7619..c6c6e1371d 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4254,7 +4254,9 @@ public class Workspace extends SmoothPagedView if (mSavedStates != null) { mRestoredPages.add(child); CellLayout cl = (CellLayout) getChildAt(child); - cl.restoreInstanceState(mSavedStates); + if (cl != null) { + cl.restoreInstanceState(mSavedStates); + } } } From a6a0547fa6df0769fcd107a2e5f7c7d527fa0700 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Wed, 13 Nov 2013 17:59:46 +0100 Subject: [PATCH 044/147] Update suggested wallpaper dimensions in onResume If another launcher runs in between, it might change the suggested dimensions. This fixes that case. Bug: 11667475 --- AndroidManifest.xml | 7 ++ .../android/launcher3/LauncherAppState.java | 11 +++ .../launcher3/WallpaperChangedReceiver.java | 28 ++++++++ .../launcher3/WallpaperCropActivity.java | 67 ++++++++++--------- src/com/android/launcher3/Workspace.java | 25 +++++-- 5 files changed, 100 insertions(+), 38 deletions(-) create mode 100644 src/com/android/launcher3/WallpaperChangedReceiver.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 901b63838d..1e418ec2f1 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -160,6 +160,13 @@ + + + + + + sLauncherProvider; private static Context sContext; @@ -217,6 +218,16 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { return mLongPressTimeout; } + public void onWallpaperChanged() { + mWallpaperChangedSinceLastCheck = true; + } + + public boolean hasWallpaperChangedSinceLastCheck() { + boolean result = mWallpaperChangedSinceLastCheck; + mWallpaperChangedSinceLastCheck = false; + return result; + } + @Override public void onAvailableSizeChanged(DeviceProfile grid) { Utilities.setIconSize(grid.iconSizePx); diff --git a/src/com/android/launcher3/WallpaperChangedReceiver.java b/src/com/android/launcher3/WallpaperChangedReceiver.java new file mode 100644 index 0000000000..28e41d8a5e --- /dev/null +++ b/src/com/android/launcher3/WallpaperChangedReceiver.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class WallpaperChangedReceiver extends BroadcastReceiver { + public void onReceive(Context context, Intent data) { + LauncherAppState appState = LauncherAppState.getInstance(); + appState.onWallpaperChanged(); + } +} diff --git a/src/com/android/launcher3/WallpaperCropActivity.java b/src/com/android/launcher3/WallpaperCropActivity.java index 2102599eec..b3ef073091 100644 --- a/src/com/android/launcher3/WallpaperCropActivity.java +++ b/src/com/android/launcher3/WallpaperCropActivity.java @@ -71,6 +71,8 @@ public class WallpaperCropActivity extends Activity { public static final int MAX_BMAP_IN_INTENT = 750000; private static final float WALLPAPER_SCREENS_SPAN = 2f; + protected static Point sDefaultWallpaperSize; + protected CropView mCropView; protected Uri mUri; @@ -204,32 +206,34 @@ public class WallpaperCropActivity extends Activity { } static protected Point getDefaultWallpaperSize(Resources res, WindowManager windowManager) { - Point minDims = new Point(); - Point maxDims = new Point(); - windowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims); + if (sDefaultWallpaperSize == null) { + Point minDims = new Point(); + Point maxDims = new Point(); + windowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims); - int maxDim = Math.max(maxDims.x, maxDims.y); - int minDim = Math.max(minDims.x, minDims.y); + int maxDim = Math.max(maxDims.x, maxDims.y); + int minDim = Math.max(minDims.x, minDims.y); - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { - Point realSize = new Point(); - windowManager.getDefaultDisplay().getRealSize(realSize); - maxDim = Math.max(realSize.x, realSize.y); - minDim = Math.min(realSize.x, realSize.y); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { + Point realSize = new Point(); + windowManager.getDefaultDisplay().getRealSize(realSize); + maxDim = Math.max(realSize.x, realSize.y); + minDim = Math.min(realSize.x, realSize.y); + } + + // We need to ensure that there is enough extra space in the wallpaper + // for the intended parallax effects + final int defaultWidth, defaultHeight; + if (isScreenLarge(res)) { + defaultWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim)); + defaultHeight = maxDim; + } else { + defaultWidth = Math.max((int) (minDim * WALLPAPER_SCREENS_SPAN), maxDim); + defaultHeight = maxDim; + } + sDefaultWallpaperSize = new Point(defaultWidth, defaultHeight); } - - // We need to ensure that there is enough extra space in the wallpaper - // for the intended - // parallax effects - final int defaultWidth, defaultHeight; - if (isScreenLarge(res)) { - defaultWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim)); - defaultHeight = maxDim; - } else { - defaultWidth = Math.max((int) (minDim * WALLPAPER_SCREENS_SPAN), maxDim); - defaultHeight = maxDim; - } - return new Point(defaultWidth, defaultHeight); + return sDefaultWallpaperSize; } public static int getRotationFromExif(String path) { @@ -785,16 +789,13 @@ public class WallpaperCropActivity extends Activity { WindowManager windowManager, final WallpaperManager wallpaperManager) { final Point defaultWallpaperSize = getDefaultWallpaperSize(res, windowManager); - - new AsyncTask() { - public Void doInBackground(Void ... args) { - // If we have saved a wallpaper width/height, use that instead - int savedWidth = sharedPrefs.getInt(WALLPAPER_WIDTH_KEY, defaultWallpaperSize.x); - int savedHeight = sharedPrefs.getInt(WALLPAPER_HEIGHT_KEY, defaultWallpaperSize.y); - wallpaperManager.suggestDesiredDimensions(savedWidth, savedHeight); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); + // If we have saved a wallpaper width/height, use that instead + int savedWidth = sharedPrefs.getInt(WALLPAPER_WIDTH_KEY, defaultWallpaperSize.x); + int savedHeight = sharedPrefs.getInt(WALLPAPER_HEIGHT_KEY, defaultWallpaperSize.y); + if (savedWidth != wallpaperManager.getDesiredMinimumWidth() || + savedHeight != wallpaperManager.getDesiredMinimumHeight()) { + wallpaperManager.suggestDesiredDimensions(savedWidth, savedHeight); + } } protected static RectF getMaxCropRect( diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index e4ba743beb..936d573bff 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -43,6 +43,7 @@ import android.graphics.Rect; import android.graphics.Region.Op; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.os.AsyncTask; import android.os.IBinder; import android.os.Parcelable; import android.support.v4.view.ViewCompat; @@ -437,6 +438,9 @@ public class Workspace extends SmoothPagedView mMaxDistanceForFolderCreation = (0.55f * grid.iconSizePx); mFlingThresholdVelocity = (int) (FLING_THRESHOLD_VELOCITY * mDensity); + + // Set the wallpaper dimensions when Launcher starts up + setWallpaperDimension(); } private void setupLayoutTransition() { @@ -1232,10 +1236,16 @@ public class Workspace extends SmoothPagedView } protected void setWallpaperDimension() { - String spKey = WallpaperCropActivity.getSharedPreferencesKey(); - SharedPreferences sp = mLauncher.getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS); - WallpaperPickerActivity.suggestWallpaperDimension(mLauncher.getResources(), - sp, mLauncher.getWindowManager(), mWallpaperManager); + new AsyncTask() { + public Void doInBackground(Void ... args) { + String spKey = WallpaperCropActivity.getSharedPreferencesKey(); + SharedPreferences sp = + mLauncher.getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS); + WallpaperPickerActivity.suggestWallpaperDimension(mLauncher.getResources(), + sp, mLauncher.getWindowManager(), mWallpaperManager); + return null; + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); } protected void snapToPage(int whichPage, Runnable r) { @@ -1693,6 +1703,12 @@ public class Workspace extends SmoothPagedView AccessibilityManager am = (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); sAccessibilityEnabled = am.isEnabled(); + + // Update wallpaper dimensions if they were changed since last onResume + // (we also always set the wallpaper dimensions in the constructor) + if (LauncherAppState.getInstance().hasWallpaperChangedSinceLastCheck()) { + setWallpaperDimension(); + } } @Override @@ -4001,7 +4017,6 @@ public class Workspace extends SmoothPagedView // hardware layers on children are enabled on startup, but should be disabled until // needed updateChildrenLayersEnabled(false); - setWallpaperDimension(); } /** From 45297f851af715b2a0367459089a7a8f9c39b8fd Mon Sep 17 00:00:00 2001 From: Chris Wren Date: Thu, 17 Oct 2013 15:16:48 -0400 Subject: [PATCH 045/147] backup launcher preferences Bug: 11267816 Change-Id: I12a32477164fe2205bc8cb02e0a23c561a7f9189 --- .../launcher3/LauncherBackupAgentHelper.java | 16 ++++++++++++++++ .../android/launcher3/LauncherBackupHelper.java | 2 ++ 2 files changed, 18 insertions(+) diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java index 2b5059b72c..83e4a60d45 100644 --- a/src/com/android/launcher3/LauncherBackupAgentHelper.java +++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java @@ -18,10 +18,14 @@ package com.android.launcher3; import android.app.backup.BackupAgentHelper; import android.app.backup.BackupManager; +import android.app.backup.SharedPreferencesBackupHelper; import android.content.Context; +import android.content.SharedPreferences; public class LauncherBackupAgentHelper extends BackupAgentHelper { + private static final String TAG = "LauncherBackupAgentHelper"; + private static BackupManager sBackupManager; /** @@ -38,9 +42,21 @@ public class LauncherBackupAgentHelper extends BackupAgentHelper { sBackupManager.dataChanged(); } + @Override + public void onDestroy() { + // There is only one process accessing this preference file, but the restore + // modifies the file outside the normal codepaths, so it looks like another + // process. This forces a reload of the file, in case this process persists. + String spKey = LauncherAppState.getSharedPreferencesKey(); + SharedPreferences sp = getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS); + super.onDestroy(); + } @Override public void onCreate() { + addHelper(LauncherBackupHelper.LAUNCHER_PREFS_PREFIX, + new SharedPreferencesBackupHelper(this, + LauncherAppState.getSharedPreferencesKey())); addHelper(LauncherBackupHelper.LAUNCHER_PREFIX, new LauncherBackupHelper(this)); } } diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index 8023fcd36a..2a5ed69615 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -82,6 +82,8 @@ public class LauncherBackupHelper implements BackupHelper { public static final String LAUNCHER_PREFIX = "L"; + public static final String LAUNCHER_PREFS_PREFIX = "LP"; + private static final Bitmap.CompressFormat IMAGE_FORMAT = android.graphics.Bitmap.CompressFormat.PNG; From 42b3c06849331aa5ba1f07f8c58915190d386aac Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 4 Dec 2013 12:09:59 -0800 Subject: [PATCH 046/147] Restoring Hotseat to the left-aligned in RTL. (Bug 11451335) Change-Id: I5451b1281e3f346f51677040775ae7bf76e303d1 --- src/com/android/launcher3/DeviceProfile.java | 25 +++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 9e1f1a7b1b..b84dbafb2d 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -73,6 +73,7 @@ public class DeviceProfile { boolean isLandscape; boolean isTablet; boolean isLargeTablet; + boolean isLayoutRtl; boolean transposeLayoutWithOrientation; int desiredWorkspaceLeftRightMarginPx; @@ -356,10 +357,11 @@ public class DeviceProfile { void updateFromConfiguration(Context context, Resources resources, int wPx, int hPx, int awPx, int ahPx) { - isLandscape = (resources.getConfiguration().orientation == - Configuration.ORIENTATION_LANDSCAPE); + Configuration configuration = resources.getConfiguration(); + isLandscape = (configuration.orientation == Configuration.ORIENTATION_LANDSCAPE); isTablet = resources.getBoolean(R.bool.is_tablet); isLargeTablet = resources.getBoolean(R.bool.is_large_tablet); + isLayoutRtl = (configuration.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL); widthPx = wPx; heightPx = hPx; availableWidthPx = awPx; @@ -437,7 +439,13 @@ public class DeviceProfile { Rect bounds = new Rect(); if (orientation == CellLayout.LANDSCAPE && transposeLayoutWithOrientation) { - bounds.set(0, edgeMarginPx, searchBarSpaceHeightPx, availableHeightPx - edgeMarginPx); + if (isLayoutRtl) { + bounds.set(availableWidthPx - searchBarSpaceHeightPx, edgeMarginPx, + availableWidthPx, availableHeightPx - edgeMarginPx); + } else { + bounds.set(0, edgeMarginPx, searchBarSpaceHeightPx, + availableHeightPx - edgeMarginPx); + } } else { if (isTablet()) { // Pad the left and right of the workspace to ensure consistent spacing @@ -472,8 +480,13 @@ public class DeviceProfile { if (orientation == CellLayout.LANDSCAPE && transposeLayoutWithOrientation) { // Pad the left and right of the workspace with search/hotseat bar sizes - padding.set(searchBarBounds.right, edgeMarginPx, - hotseatBarHeightPx, edgeMarginPx); + if (isLayoutRtl) { + padding.set(hotseatBarHeightPx, edgeMarginPx, + searchBarBounds.width(), edgeMarginPx); + } else { + padding.set(searchBarBounds.width(), edgeMarginPx, + hotseatBarHeightPx, edgeMarginPx); + } } else { if (isTablet()) { // Pad the left and right of the workspace to ensure consistent spacing @@ -627,7 +640,7 @@ public class DeviceProfile { lp = (FrameLayout.LayoutParams) hotseat.getLayoutParams(); if (hasVerticalBarLayout) { // Vertical hotseat - lp.gravity = Gravity.RIGHT; + lp.gravity = Gravity.END; lp.width = hotseatBarHeightPx; lp.height = LayoutParams.MATCH_PARENT; hotseat.findViewById(R.id.layout).setPadding(0, 2 * edgeMarginPx, 0, 2 * edgeMarginPx); From e7e97e65524977ad361811b95e8ee4557841d36a Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Mon, 2 Dec 2013 17:02:50 -0800 Subject: [PATCH 047/147] Retain current AllApps page if we never leave Launcher. (Bug 11468582) Change-Id: Id18b14f6fbb2598a8c1f4c714f79d1a4332a7868 --- src/com/android/launcher3/Launcher.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 12c087f276..e2301ba699 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1765,7 +1765,7 @@ public class Launcher extends Activity } // Reset the apps customize page - if (mAppsCustomizeTabHost != null) { + if (!alreadyOnHome && mAppsCustomizeTabHost != null) { mAppsCustomizeTabHost.reset(); } @@ -2375,7 +2375,7 @@ public class Launcher extends Activity * @param v The view that was clicked. */ public void onClickAllAppsButton(View v) { - showAllApps(true, AppsCustomizePagedView.ContentType.Applications, true); + showAllApps(true, AppsCustomizePagedView.ContentType.Applications, false); } public void onTouchDownAllAppsButton(View v) { From 495f44d5fcd877786ffa5e8eea055e18f28e3d85 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 4 Dec 2013 12:51:53 -0800 Subject: [PATCH 048/147] Limit AllApps insets to certain device configurations. (Bug 11451335) Change-Id: I0b7172bb8c2e8cfb06ef4ff097bdc632d6be0548 --- src/com/android/launcher3/DeviceProfile.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 9e1f1a7b1b..ec5e81f74e 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -703,7 +703,8 @@ public class DeviceProfile { paddingTB = Math.min(paddingTB, (int)((paddingLR + paddingTB) * 0.75f)); int maxAllAppsWidth = (allAppsNumCols * (allAppsCellWidthPx + 2 * paddingLR)); int gridPaddingLR = (availableWidthPx - maxAllAppsWidth) / 2; - if (gridPaddingLR > (allAppsCellWidthPx / 4)) { + // Only adjust the side paddings on landscape phones, or tablets + if ((isTablet() || isLandscape) && gridPaddingLR > (allAppsCellWidthPx / 4)) { padding.left = padding.right = gridPaddingLR; } // The icons are centered, so we can't just offset by the page indicator height From 59b5c79b6ff2de83209cf1425b8924d541e97266 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Wed, 4 Dec 2013 16:09:07 -0800 Subject: [PATCH 049/147] Fix page jumping regression in overview mode (issue 12003672) Change-Id: I4315d4e97c8df4db25e2d70be759b94a0348d644 --- src/com/android/launcher3/PagedView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 2c7114bc54..c216f926fd 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1398,7 +1398,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc if (finishedScrolling) { mTouchState = TOUCH_STATE_REST; - if (!mScroller.isFinished()) { + if (!mScroller.isFinished() && !mFreeScroll) { setCurrentPage(getNextPage()); pageEndMoving(); } From c39c3c4763db748731d7c070165a2bda55ca532b Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 4 Dec 2013 16:15:59 -0800 Subject: [PATCH 050/147] Fixing regression in drop target bar height. (Bug 11980757) Change-Id: I67ccc575b5c15a47ab7f41ceebfc86d9a212ddf3 --- res/values-land/styles.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml index ccb5fcb069..d18a57b955 100644 --- a/res/values-land/styles.xml +++ b/res/values-land/styles.xml @@ -27,7 +27,7 @@ - - - - - - - + diff --git a/wallpaper_picker_res/values/colors.xml b/wallpaper_picker_res/values/colors.xml new file mode 100644 index 0000000000..adae7cff6f --- /dev/null +++ b/wallpaper_picker_res/values/colors.xml @@ -0,0 +1,22 @@ + + + + #66000000 + diff --git a/wallpaper_picker_res/values/dimens.xml b/wallpaper_picker_res/values/dimens.xml new file mode 100644 index 0000000000..0447c6d1f7 --- /dev/null +++ b/wallpaper_picker_res/values/dimens.xml @@ -0,0 +1,22 @@ + + + + + + 106.5dp + 94.5dp + 32dp + diff --git a/wallpaper_picker_res/values/strings.xml b/wallpaper_picker_res/values/strings.xml new file mode 100644 index 0000000000..1ee3513f90 --- /dev/null +++ b/wallpaper_picker_res/values/strings.xml @@ -0,0 +1,53 @@ + + + + + + Set wallpaper + + Coudn\'t load image + + Couldn\'t load image as wallpaper + + + + %1$d selected + %1$d selected + %1$d selected + + + Wallpaper %1$d of %2$d + + Selected %1$s + + + Delete + + Pick image + + Wallpapers + + Crop wallpaper + diff --git a/wallpaper_picker_res/values/styles.xml b/wallpaper_picker_res/values/styles.xml new file mode 100644 index 0000000000..0e48ddac43 --- /dev/null +++ b/wallpaper_picker_res/values/styles.xml @@ -0,0 +1,37 @@ + + + + + + + + + + diff --git a/src/android/util/Pools.java b/wallpaper_picker_src/android/util/Pools.java similarity index 100% rename from src/android/util/Pools.java rename to wallpaper_picker_src/android/util/Pools.java diff --git a/src/com/android/gallery3d/common/BitmapUtils.java b/wallpaper_picker_src/com/android/gallery3d/common/BitmapUtils.java similarity index 100% rename from src/com/android/gallery3d/common/BitmapUtils.java rename to wallpaper_picker_src/com/android/gallery3d/common/BitmapUtils.java diff --git a/src/com/android/gallery3d/common/Utils.java b/wallpaper_picker_src/com/android/gallery3d/common/Utils.java similarity index 100% rename from src/com/android/gallery3d/common/Utils.java rename to wallpaper_picker_src/com/android/gallery3d/common/Utils.java diff --git a/src/com/android/gallery3d/exif/ByteBufferInputStream.java b/wallpaper_picker_src/com/android/gallery3d/exif/ByteBufferInputStream.java similarity index 100% rename from src/com/android/gallery3d/exif/ByteBufferInputStream.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ByteBufferInputStream.java diff --git a/src/com/android/gallery3d/exif/CountedDataInputStream.java b/wallpaper_picker_src/com/android/gallery3d/exif/CountedDataInputStream.java similarity index 100% rename from src/com/android/gallery3d/exif/CountedDataInputStream.java rename to wallpaper_picker_src/com/android/gallery3d/exif/CountedDataInputStream.java diff --git a/src/com/android/gallery3d/exif/ExifData.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifData.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifData.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifData.java diff --git a/src/com/android/gallery3d/exif/ExifInterface.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifInterface.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifInterface.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifInterface.java diff --git a/src/com/android/gallery3d/exif/ExifInvalidFormatException.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifInvalidFormatException.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifInvalidFormatException.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifInvalidFormatException.java diff --git a/src/com/android/gallery3d/exif/ExifModifier.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifModifier.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifModifier.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifModifier.java diff --git a/src/com/android/gallery3d/exif/ExifOutputStream.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifOutputStream.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifOutputStream.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifOutputStream.java diff --git a/src/com/android/gallery3d/exif/ExifParser.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifParser.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifParser.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifParser.java diff --git a/src/com/android/gallery3d/exif/ExifReader.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifReader.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifReader.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifReader.java diff --git a/src/com/android/gallery3d/exif/ExifTag.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifTag.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifTag.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifTag.java diff --git a/src/com/android/gallery3d/exif/IfdData.java b/wallpaper_picker_src/com/android/gallery3d/exif/IfdData.java similarity index 100% rename from src/com/android/gallery3d/exif/IfdData.java rename to wallpaper_picker_src/com/android/gallery3d/exif/IfdData.java diff --git a/src/com/android/gallery3d/exif/IfdId.java b/wallpaper_picker_src/com/android/gallery3d/exif/IfdId.java similarity index 100% rename from src/com/android/gallery3d/exif/IfdId.java rename to wallpaper_picker_src/com/android/gallery3d/exif/IfdId.java diff --git a/src/com/android/gallery3d/exif/JpegHeader.java b/wallpaper_picker_src/com/android/gallery3d/exif/JpegHeader.java similarity index 100% rename from src/com/android/gallery3d/exif/JpegHeader.java rename to wallpaper_picker_src/com/android/gallery3d/exif/JpegHeader.java diff --git a/src/com/android/gallery3d/exif/OrderedDataOutputStream.java b/wallpaper_picker_src/com/android/gallery3d/exif/OrderedDataOutputStream.java similarity index 100% rename from src/com/android/gallery3d/exif/OrderedDataOutputStream.java rename to wallpaper_picker_src/com/android/gallery3d/exif/OrderedDataOutputStream.java diff --git a/src/com/android/gallery3d/exif/Rational.java b/wallpaper_picker_src/com/android/gallery3d/exif/Rational.java similarity index 100% rename from src/com/android/gallery3d/exif/Rational.java rename to wallpaper_picker_src/com/android/gallery3d/exif/Rational.java diff --git a/src/com/android/gallery3d/glrenderer/BasicTexture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/BasicTexture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/BasicTexture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/BasicTexture.java diff --git a/src/com/android/gallery3d/glrenderer/BitmapTexture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/BitmapTexture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/BitmapTexture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/BitmapTexture.java diff --git a/src/com/android/gallery3d/glrenderer/GLCanvas.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLCanvas.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLCanvas.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLCanvas.java diff --git a/src/com/android/gallery3d/glrenderer/GLES20Canvas.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20Canvas.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLES20Canvas.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20Canvas.java diff --git a/src/com/android/gallery3d/glrenderer/GLES20IdImpl.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20IdImpl.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLES20IdImpl.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20IdImpl.java diff --git a/src/com/android/gallery3d/glrenderer/GLId.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLId.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLId.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLId.java diff --git a/src/com/android/gallery3d/glrenderer/GLPaint.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLPaint.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLPaint.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLPaint.java diff --git a/src/com/android/gallery3d/glrenderer/RawTexture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/RawTexture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/RawTexture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/RawTexture.java diff --git a/src/com/android/gallery3d/glrenderer/Texture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/Texture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/Texture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/Texture.java diff --git a/src/com/android/gallery3d/glrenderer/UploadedTexture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/UploadedTexture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/UploadedTexture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/UploadedTexture.java diff --git a/src/com/android/gallery3d/util/IntArray.java b/wallpaper_picker_src/com/android/gallery3d/util/IntArray.java similarity index 100% rename from src/com/android/gallery3d/util/IntArray.java rename to wallpaper_picker_src/com/android/gallery3d/util/IntArray.java diff --git a/src/com/android/launcher3/CropView.java b/wallpaper_picker_src/com/android/launcher3/CropView.java similarity index 100% rename from src/com/android/launcher3/CropView.java rename to wallpaper_picker_src/com/android/launcher3/CropView.java diff --git a/src/com/android/launcher3/WallpaperCropActivity.java b/wallpaper_picker_src/com/android/launcher3/WallpaperCropActivity.java similarity index 100% rename from src/com/android/launcher3/WallpaperCropActivity.java rename to wallpaper_picker_src/com/android/launcher3/WallpaperCropActivity.java diff --git a/src/com/android/launcher3/WallpaperPickerActivity.java b/wallpaper_picker_src/com/android/launcher3/WallpaperPickerActivity.java similarity index 100% rename from src/com/android/launcher3/WallpaperPickerActivity.java rename to wallpaper_picker_src/com/android/launcher3/WallpaperPickerActivity.java diff --git a/src/com/android/photos/BitmapRegionTileSource.java b/wallpaper_picker_src/com/android/photos/BitmapRegionTileSource.java similarity index 100% rename from src/com/android/photos/BitmapRegionTileSource.java rename to wallpaper_picker_src/com/android/photos/BitmapRegionTileSource.java diff --git a/src/com/android/photos/views/BlockingGLTextureView.java b/wallpaper_picker_src/com/android/photos/views/BlockingGLTextureView.java similarity index 100% rename from src/com/android/photos/views/BlockingGLTextureView.java rename to wallpaper_picker_src/com/android/photos/views/BlockingGLTextureView.java diff --git a/src/com/android/photos/views/TiledImageRenderer.java b/wallpaper_picker_src/com/android/photos/views/TiledImageRenderer.java similarity index 100% rename from src/com/android/photos/views/TiledImageRenderer.java rename to wallpaper_picker_src/com/android/photos/views/TiledImageRenderer.java diff --git a/src/com/android/photos/views/TiledImageView.java b/wallpaper_picker_src/com/android/photos/views/TiledImageView.java similarity index 100% rename from src/com/android/photos/views/TiledImageView.java rename to wallpaper_picker_src/com/android/photos/views/TiledImageView.java From 7aff399974c756930070d82d7b2df88f125dacd6 Mon Sep 17 00:00:00 2001 From: Derek Prothro Date: Tue, 10 Dec 2013 14:00:37 -0500 Subject: [PATCH 060/147] Bind the workspace synchronously if started on -1 screen. Previously, LoaderTask would be run asynchronously to bind the workspace when started on -1 which would cause the user's wallpaper to briefly flash when rotating the device on -1. Bug: 11802691 Change-Id: I3a1a7a32fa28a81e041a283a93d808d5a8884133 --- src/com/android/launcher3/Launcher.java | 4 ++-- src/com/android/launcher3/LauncherModel.java | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index e2301ba699..9aaee5aaf9 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -456,7 +456,7 @@ public class Launcher extends Activity if (DISABLE_SYNCHRONOUS_BINDING_CURRENT_PAGE || sPausedFromUserAction) { // If the user leaves launcher, then we should just load items asynchronously when // they return. - mModel.startLoader(true, -1); + mModel.startLoader(true, PagedView.INVALID_RESTORE_PAGE); } else { // We only load the page synchronously if the user rotates (or triggers a // configuration change) while launcher is in the foreground @@ -914,7 +914,7 @@ public class Launcher extends Activity sPausedFromUserAction = false; if (mRestoring || mOnResumeNeedsLoad) { mWorkspaceLoading = true; - mModel.startLoader(true, -1); + mModel.startLoader(true, PagedView.INVALID_RESTORE_PAGE); mRestoring = false; mOnResumeNeedsLoad = false; } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index a69617ac77..03511a4a6d 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -75,6 +75,7 @@ public class LauncherModel extends BroadcastReceiver { public static final boolean UPGRADE_USE_MORE_APPS_FOLDER = false; private static final int ITEMS_CHUNK = 6; // batch size for the workspace icons + private static final long INVALID_SCREEN_ID = -1L; private final boolean mAppsCanBeOnRemoveableStorage; private final LauncherAppState mApp; @@ -1158,7 +1159,7 @@ public class LauncherModel extends BroadcastReceiver { } } if (runLoader) { - startLoader(false, -1); + startLoader(false, PagedView.INVALID_RESTORE_PAGE); } } @@ -1192,7 +1193,8 @@ public class LauncherModel extends BroadcastReceiver { // also, don't downgrade isLaunching if we're already running isLaunching = isLaunching || stopLoaderLocked(); mLoaderTask = new LoaderTask(mApp.getContext(), isLaunching); - if (synchronousBindPage > -1 && mAllAppsLoaded && mWorkspaceLoaded) { + if (synchronousBindPage != PagedView.INVALID_RESTORE_PAGE + && mAllAppsLoaded && mWorkspaceLoaded) { mLoaderTask.runBindSynchronousPage(synchronousBindPage); } else { sWorkerThread.setPriority(Thread.NORM_PRIORITY); @@ -1360,7 +1362,7 @@ public class LauncherModel extends BroadcastReceiver { } void runBindSynchronousPage(int synchronousBindPage) { - if (synchronousBindPage < 0) { + if (synchronousBindPage == PagedView.INVALID_RESTORE_PAGE) { // Ensure that we have a valid page index to load synchronously throw new RuntimeException("Should not call runBindSynchronousPage() without " + "valid page index"); @@ -2245,16 +2247,17 @@ public class LauncherModel extends BroadcastReceiver { orderedScreenIds.addAll(sBgWorkspaceScreens); } - final boolean isLoadingSynchronously = (synchronizeBindPage > -1); + final boolean isLoadingSynchronously = + synchronizeBindPage != PagedView.INVALID_RESTORE_PAGE; int currScreen = isLoadingSynchronously ? synchronizeBindPage : oldCallbacks.getCurrentWorkspaceScreen(); if (currScreen >= orderedScreenIds.size()) { // There may be no workspace screens (just hotseat items and an empty page). - currScreen = -1; + currScreen = PagedView.INVALID_RESTORE_PAGE; } final int currentScreen = currScreen; - final long currentScreenId = - currentScreen < 0 ? -1 : orderedScreenIds.get(currentScreen); + final long currentScreenId = currentScreen < 0 + ? INVALID_SCREEN_ID : orderedScreenIds.get(currentScreen); // Load all the items that are on the current page first (and in the process, unbind // all the existing workspace items before we call startBinding() below. @@ -2299,7 +2302,7 @@ public class LauncherModel extends BroadcastReceiver { r = new Runnable() { public void run() { Callbacks callbacks = tryGetCallbacks(oldCallbacks); - if (callbacks != null && currentScreen >= 0) { + if (callbacks != null && currentScreen != PagedView.INVALID_RESTORE_PAGE) { callbacks.onPageBoundSynchronously(currentScreen); } } From 295ae18d0fa7c102c50cf95a2ea09e7f2e9b1539 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Tue, 10 Dec 2013 16:05:47 -0500 Subject: [PATCH 061/147] Size hotseat data structure appropriately. Bug: 12070213 Change-Id: I4df2f4bcc71bb4077c62cae91ed844ea8c43d421 --- src/com/android/launcher3/Launcher.java | 13 +++++++++-- src/com/android/launcher3/LauncherModel.java | 24 +++++++++++++------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index e2301ba699..fa3a5ced9d 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4576,13 +4576,22 @@ public class Launcher extends Activity } public static void addDumpLog(String tag, String log, boolean debugLog) { + addDumpLog(tag, log, null, debugLog); + } + + public static void addDumpLog(String tag, String log, Exception e, boolean debugLog) { if (debugLog) { - Log.d(tag, log); + if (e != null) { + Log.d(tag, log, e); + } else { + Log.d(tag, log); + } } if (DEBUG_DUMP_LOG) { sDateStamp.setTime(System.currentTimeMillis()); synchronized (sDumpLogs) { - sDumpLogs.add(sDateFormat.format(sDateStamp) + ": " + tag + ", " + log); + sDumpLogs.add(sDateFormat.format(sDateStamp) + ": " + tag + ", " + log + + (e == null ? "" : (", Exception: " + e))); } } } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index a69617ac77..3e6cf03c8f 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1542,8 +1542,8 @@ public class LauncherModel extends BroadcastReceiver { AtomicBoolean deleteOnItemOverlap) { LauncherAppState app = LauncherAppState.getInstance(); DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); - int countX = (int) grid.numColumns; - int countY = (int) grid.numRows; + final int countX = (int) grid.numColumns; + final int countY = (int) grid.numRows; long containerIndex = item.screenId; if (item.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) { @@ -1551,21 +1551,29 @@ public class LauncherModel extends BroadcastReceiver { if (mCallbacks == null || mCallbacks.get().isAllAppsButtonRank((int) item.screenId)) { deleteOnItemOverlap.set(true); + Log.e(TAG, "Error loading shortcut into hotseat " + item + + " into position (" + item.screenId + ":" + item.cellX + "," + + item.cellY + ") occupied by all apps"); return false; } - if (occupied.containsKey(LauncherSettings.Favorites.CONTAINER_HOTSEAT)) { - if (occupied.get(LauncherSettings.Favorites.CONTAINER_HOTSEAT) - [(int) item.screenId][0] != null) { + final ItemInfo[][] hotseatItems = + occupied.get((long) LauncherSettings.Favorites.CONTAINER_HOTSEAT); + + if (hotseatItems != null) { + if (hotseatItems[(int) item.screenId][0] != null) { Log.e(TAG, "Error loading shortcut into hotseat " + item + " into position (" + item.screenId + ":" + item.cellX + "," + item.cellY + ") occupied by " + occupied.get(LauncherSettings.Favorites.CONTAINER_HOTSEAT) [(int) item.screenId][0]); return false; + } else { + hotseatItems[(int) item.screenId][0] = item; + return true; } } else { - ItemInfo[][] items = new ItemInfo[countX + 1][countY + 1]; + final ItemInfo[][] items = new ItemInfo[(int) grid.numHotseatIcons + 1][1]; items[(int) item.screenId][0] = item; occupied.put((long) LauncherSettings.Favorites.CONTAINER_HOTSEAT, items); return true; @@ -1580,7 +1588,7 @@ public class LauncherModel extends BroadcastReceiver { occupied.put(item.screenId, items); } - ItemInfo[][] screens = occupied.get(item.screenId); + final ItemInfo[][] screens = occupied.get(item.screenId); // Check if any workspace icons overlap with each other for (int x = item.cellX; x < (item.cellX+item.spanX); x++) { for (int y = item.cellY; y < (item.cellY+item.spanY); y++) { @@ -1911,7 +1919,7 @@ public class LauncherModel extends BroadcastReceiver { break; } } catch (Exception e) { - Launcher.addDumpLog(TAG, "Desktop items loading interrupted: " + e, true); + Launcher.addDumpLog(TAG, "Desktop items loading interrupted", e, true); } } } finally { From ba2923a3912f266c8fa1691858db29c2ce597928 Mon Sep 17 00:00:00 2001 From: Chris Wren Date: Tue, 10 Dec 2013 15:48:47 -0500 Subject: [PATCH 062/147] expose the protoutil for launcher as an executable script Change-Id: Ie990262534d85b118c165589ecee55d64f3a58cc --- Android.mk | 24 +++++- util/com/android/launcher3/DecoderRing.java | 5 +- util/etc/launcher_protoutil | 83 +++++++++++++++++++++ util/etc/manifest.txt | 1 + 4 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 util/etc/launcher_protoutil create mode 100644 util/etc/manifest.txt diff --git a/Android.mk b/Android.mk index 6059a3f982..840b161c56 100644 --- a/Android.mk +++ b/Android.mk @@ -61,6 +61,28 @@ LOCAL_PROTOC_OPTIMIZE_TYPE := nano LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/protos/ LOCAL_MODULE_TAGS := optional -LOCAL_MODULE := protoutil +LOCAL_MODULE := launcher_protoutil_lib +LOCAL_IS_HOST_MODULE := true +LOCAL_JAR_MANIFEST := util/etc/manifest.txt +LOCAL_STATIC_JAVA_LIBRARIES := host-libprotobuf-java-2.3.0-nano include $(BUILD_HOST_JAVA_LIBRARY) + +# +# Protocol Buffer Debug Utility Wrapper Script +# +include $(CLEAR_VARS) +LOCAL_IS_HOST_MODULE := true +LOCAL_MODULE_CLASS := EXECUTABLES +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := launcher_protoutil + +include $(BUILD_SYSTEM)/base_rules.mk + +$(LOCAL_BUILT_MODULE): launcher_protoutil_lib +$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/util/etc/launcher_protoutil | $(ACP) + @echo "Copy: $(PRIVATE_MODULE) ($@)" + $(copy-file-to-new-target) + $(hide) chmod 755 $@ + +INTERNAL_DALVIK_MODULES += $(LOCAL_INSTALLED_MODULE) diff --git a/util/com/android/launcher3/DecoderRing.java b/util/com/android/launcher3/DecoderRing.java index 1d9e0defb1..bd0275e5fa 100644 --- a/util/com/android/launcher3/DecoderRing.java +++ b/util/com/android/launcher3/DecoderRing.java @@ -49,7 +49,7 @@ class DecoderRing { public static void main(String[ ] args) throws Exception { File source = null; - Class type = Key.class; + Class type = null; int skip = 0; for (int i = 0; i < args.length; i++) { @@ -79,6 +79,9 @@ class DecoderRing { } } + if (type == null) { + usage(args); + } // read in the bytes ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); diff --git a/util/etc/launcher_protoutil b/util/etc/launcher_protoutil new file mode 100644 index 0000000000..833b5835e8 --- /dev/null +++ b/util/etc/launcher_protoutil @@ -0,0 +1,83 @@ +#!/bin/bash +# +# Copyright (C) 2013 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Set up prog to be the path of this script, including following symlinks, +# and set up progdir to be the fully-qualified pathname of its directory. +prog="$0" +while [ -h "${prog}" ]; do + newProg=`/bin/ls -ld "${prog}"` + newProg=`expr "${newProg}" : ".* -> \(.*\)$"` + if expr "x${newProg}" : 'x/' >/dev/null; then + prog="${newProg}" + else + progdir=`dirname "${prog}"` + prog="${progdir}/${newProg}" + fi +done +oldwd=`pwd` +progdir=`dirname "${prog}"` +cd "${progdir}" +progdir=`pwd` +prog="${progdir}"/`basename "${prog}"` +cd "${oldwd}" + +jarfile=launcher_protoutil_lib.jar +libdir="$progdir" + +if [ ! -r "$libdir/$jarfile" ]; then + # set jar location for the Android tree case + libdir=`dirname "$progdir"`/framework +fi + +if [ ! -r "$libdir/$jarfile" ]; then + echo `basename "$prog"`": can't find $jarfile" + exit 1 +fi + +# By default, give decoder a max heap size of 1 gig. This can be overridden +# by using a "-J" option (see below). +defaultMx="-Xmx1024M" + +# The following will extract any initial parameters of the form +# "-J" from the command line and pass them to the Java +# invocation (instead of to the decoder). This makes it possible for +# you to add a command-line parameter such as "-JXmx256M" in your +# scripts, for example. "java" (with no args) and "java -X" give a +# summary of available options. + +javaOpts="" + +while expr "x$1" : 'x-J' >/dev/null; do + opt=`expr "x$1" : 'x-J\(.*\)'` + javaOpts="${javaOpts} -${opt}" + if expr "x${opt}" : "xXmx[0-9]" >/dev/null; then + defaultMx="no" + fi + shift +done + +if [ "${defaultMx}" != "no" ]; then + javaOpts="${javaOpts} ${defaultMx}" +fi + +if [ "$OSTYPE" = "cygwin" ]; then + # For Cygwin, convert the jarfile path into native Windows style. + jarpath=`cygpath -w "$libdir/$jarfile"` +else + jarpath="$libdir/$jarfile" +fi + +exec java $javaOpts -jar "$jarpath" "$@" diff --git a/util/etc/manifest.txt b/util/etc/manifest.txt new file mode 100644 index 0000000000..84842ed539 --- /dev/null +++ b/util/etc/manifest.txt @@ -0,0 +1 @@ +Main-Class: com.android.launcher3.DecoderRing From 39de459a8621abfc91382ce7b4cdd37d09aaac12 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Tue, 10 Dec 2013 23:47:28 +0100 Subject: [PATCH 063/147] Revert "Move wallpaper picker code to a separate directory" This reverts commit 8e88cb84781907afb7cca80581fea2277264fd2c. --- Android.mk | 4 -- CleanSpec.mk | 2 - .../drawable-hdpi/ic_actionbar_accept.png | Bin .../drawable-hdpi/ic_images.png | Bin .../drawable-hdpi/tile_picker_focused.9.png | Bin .../drawable-hdpi/tile_picker_pressed.9.png | Bin .../drawable-hdpi/tile_picker_selected.9.png | Bin .../drawable-hdpi/tile_shadow_bottom.9.png | Bin .../drawable-hdpi/tile_shadow_top.9.png | Bin .../drawable-mdpi/ic_actionbar_accept.png | Bin .../drawable-mdpi/ic_images.png | Bin .../drawable-mdpi/tile_picker_focused.9.png | Bin .../drawable-mdpi/tile_picker_pressed.9.png | Bin .../drawable-mdpi/tile_picker_selected.9.png | Bin .../drawable-mdpi/tile_shadow_bottom.9.png | Bin .../drawable-mdpi/tile_shadow_top.9.png | Bin .../drawable-xhdpi/ic_actionbar_accept.png | Bin .../drawable-xhdpi/ic_images.png | Bin .../drawable-xhdpi/tile_picker_focused.9.png | Bin .../drawable-xhdpi/tile_picker_pressed.9.png | Bin .../drawable-xhdpi/tile_picker_selected.9.png | Bin .../drawable-xhdpi/tile_shadow_bottom.9.png | Bin .../drawable-xhdpi/tile_shadow_top.9.png | Bin .../drawable-xxhdpi/ic_images.png | Bin .../drawable-xxhdpi/tile_picker_focused.9.png | Bin .../drawable-xxhdpi/tile_picker_pressed.9.png | Bin .../tile_picker_selected.9.png | Bin .../drawable-xxhdpi/tile_shadow_bottom.9.png | Bin .../drawable-xxhdpi/tile_shadow_top.9.png | Bin .../drawable/wallpaper_tile_fg.xml | 0 .../layout/actionbar_set_wallpaper.xml | 0 .../layout/wallpaper_cropper.xml | 0 .../layout/wallpaper_picker.xml | 0 .../wallpaper_picker_image_picker_item.xml | 0 .../layout/wallpaper_picker_item.xml | 0 .../wallpaper_picker_live_wallpaper_item.xml | 0 .../wallpaper_picker_third_party_item.xml | 0 .../menu/cab_delete_wallpapers.xml | 0 .../mipmap-hdpi/ic_launcher_wallpaper.png | Bin .../mipmap-mdpi/ic_launcher_wallpaper.png | Bin .../mipmap-xhdpi/ic_launcher_wallpaper.png | Bin .../mipmap-xxhdpi/ic_launcher_wallpaper.png | Bin .../values-nodpi/wallpapers.xml | 0 res/values-sw720dp/dimens.xml | 4 ++ res/values-sw720dp/styles.xml | 6 ++ res/values/colors.xml | 1 + res/values/dimens.xml | 5 ++ res/values/strings.xml | 32 +++++++++++ res/values/styles.xml | 17 ++++++ .../android/util/Pools.java | 0 .../android/gallery3d/common/BitmapUtils.java | 0 .../com/android/gallery3d/common/Utils.java | 0 .../gallery3d/exif/ByteBufferInputStream.java | 0 .../exif/CountedDataInputStream.java | 0 .../com/android/gallery3d/exif/ExifData.java | 0 .../android/gallery3d/exif/ExifInterface.java | 0 .../exif/ExifInvalidFormatException.java | 0 .../android/gallery3d/exif/ExifModifier.java | 0 .../gallery3d/exif/ExifOutputStream.java | 0 .../android/gallery3d/exif/ExifParser.java | 0 .../android/gallery3d/exif/ExifReader.java | 0 .../com/android/gallery3d/exif/ExifTag.java | 0 .../com/android/gallery3d/exif/IfdData.java | 0 .../com/android/gallery3d/exif/IfdId.java | 0 .../android/gallery3d/exif/JpegHeader.java | 0 .../exif/OrderedDataOutputStream.java | 0 .../com/android/gallery3d/exif/Rational.java | 0 .../gallery3d/glrenderer/BasicTexture.java | 0 .../gallery3d/glrenderer/BitmapTexture.java | 0 .../gallery3d/glrenderer/GLCanvas.java | 0 .../gallery3d/glrenderer/GLES20Canvas.java | 0 .../gallery3d/glrenderer/GLES20IdImpl.java | 0 .../android/gallery3d/glrenderer/GLId.java | 0 .../android/gallery3d/glrenderer/GLPaint.java | 0 .../gallery3d/glrenderer/RawTexture.java | 0 .../android/gallery3d/glrenderer/Texture.java | 0 .../gallery3d/glrenderer/UploadedTexture.java | 0 .../com/android/gallery3d/util/IntArray.java | 0 .../com/android/launcher3/CropView.java | 0 .../launcher3/WallpaperCropActivity.java | 0 .../launcher3/WallpaperPickerActivity.java | 0 .../photos/BitmapRegionTileSource.java | 0 .../photos/views/BlockingGLTextureView.java | 0 .../photos/views/TiledImageRenderer.java | 0 .../android/photos/views/TiledImageView.java | 0 .../values-sw720dp/dimens.xml | 28 --------- .../values-sw720dp/styles.xml | 26 --------- wallpaper_picker_res/values/colors.xml | 22 -------- wallpaper_picker_res/values/dimens.xml | 22 -------- wallpaper_picker_res/values/strings.xml | 53 ------------------ wallpaper_picker_res/values/styles.xml | 37 ------------ 91 files changed, 65 insertions(+), 194 deletions(-) rename {wallpaper_picker_res => res}/drawable-hdpi/ic_actionbar_accept.png (100%) rename {wallpaper_picker_res => res}/drawable-hdpi/ic_images.png (100%) rename {wallpaper_picker_res => res}/drawable-hdpi/tile_picker_focused.9.png (100%) rename {wallpaper_picker_res => res}/drawable-hdpi/tile_picker_pressed.9.png (100%) rename {wallpaper_picker_res => res}/drawable-hdpi/tile_picker_selected.9.png (100%) rename {wallpaper_picker_res => res}/drawable-hdpi/tile_shadow_bottom.9.png (100%) rename {wallpaper_picker_res => res}/drawable-hdpi/tile_shadow_top.9.png (100%) rename {wallpaper_picker_res => res}/drawable-mdpi/ic_actionbar_accept.png (100%) rename {wallpaper_picker_res => res}/drawable-mdpi/ic_images.png (100%) rename {wallpaper_picker_res => res}/drawable-mdpi/tile_picker_focused.9.png (100%) rename {wallpaper_picker_res => res}/drawable-mdpi/tile_picker_pressed.9.png (100%) rename {wallpaper_picker_res => res}/drawable-mdpi/tile_picker_selected.9.png (100%) rename {wallpaper_picker_res => res}/drawable-mdpi/tile_shadow_bottom.9.png (100%) rename {wallpaper_picker_res => res}/drawable-mdpi/tile_shadow_top.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xhdpi/ic_actionbar_accept.png (100%) rename {wallpaper_picker_res => res}/drawable-xhdpi/ic_images.png (100%) rename {wallpaper_picker_res => res}/drawable-xhdpi/tile_picker_focused.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xhdpi/tile_picker_pressed.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xhdpi/tile_picker_selected.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xhdpi/tile_shadow_bottom.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xhdpi/tile_shadow_top.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xxhdpi/ic_images.png (100%) rename {wallpaper_picker_res => res}/drawable-xxhdpi/tile_picker_focused.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xxhdpi/tile_picker_pressed.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xxhdpi/tile_picker_selected.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xxhdpi/tile_shadow_bottom.9.png (100%) rename {wallpaper_picker_res => res}/drawable-xxhdpi/tile_shadow_top.9.png (100%) rename {wallpaper_picker_res => res}/drawable/wallpaper_tile_fg.xml (100%) rename {wallpaper_picker_res => res}/layout/actionbar_set_wallpaper.xml (100%) rename {wallpaper_picker_res => res}/layout/wallpaper_cropper.xml (100%) rename {wallpaper_picker_res => res}/layout/wallpaper_picker.xml (100%) rename {wallpaper_picker_res => res}/layout/wallpaper_picker_image_picker_item.xml (100%) rename {wallpaper_picker_res => res}/layout/wallpaper_picker_item.xml (100%) rename {wallpaper_picker_res => res}/layout/wallpaper_picker_live_wallpaper_item.xml (100%) rename {wallpaper_picker_res => res}/layout/wallpaper_picker_third_party_item.xml (100%) rename {wallpaper_picker_res => res}/menu/cab_delete_wallpapers.xml (100%) rename {wallpaper_picker_res => res}/mipmap-hdpi/ic_launcher_wallpaper.png (100%) rename {wallpaper_picker_res => res}/mipmap-mdpi/ic_launcher_wallpaper.png (100%) rename {wallpaper_picker_res => res}/mipmap-xhdpi/ic_launcher_wallpaper.png (100%) rename {wallpaper_picker_res => res}/mipmap-xxhdpi/ic_launcher_wallpaper.png (100%) rename {wallpaper_picker_res => res}/values-nodpi/wallpapers.xml (100%) rename {wallpaper_picker_src => src}/android/util/Pools.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/common/BitmapUtils.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/common/Utils.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/ByteBufferInputStream.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/CountedDataInputStream.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/ExifData.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/ExifInterface.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/ExifInvalidFormatException.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/ExifModifier.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/ExifOutputStream.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/ExifParser.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/ExifReader.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/ExifTag.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/IfdData.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/IfdId.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/JpegHeader.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/OrderedDataOutputStream.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/exif/Rational.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/BasicTexture.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/BitmapTexture.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/GLCanvas.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/GLES20Canvas.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/GLES20IdImpl.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/GLId.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/GLPaint.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/RawTexture.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/Texture.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/glrenderer/UploadedTexture.java (100%) rename {wallpaper_picker_src => src}/com/android/gallery3d/util/IntArray.java (100%) rename {wallpaper_picker_src => src}/com/android/launcher3/CropView.java (100%) rename {wallpaper_picker_src => src}/com/android/launcher3/WallpaperCropActivity.java (100%) rename {wallpaper_picker_src => src}/com/android/launcher3/WallpaperPickerActivity.java (100%) rename {wallpaper_picker_src => src}/com/android/photos/BitmapRegionTileSource.java (100%) rename {wallpaper_picker_src => src}/com/android/photos/views/BlockingGLTextureView.java (100%) rename {wallpaper_picker_src => src}/com/android/photos/views/TiledImageRenderer.java (100%) rename {wallpaper_picker_src => src}/com/android/photos/views/TiledImageView.java (100%) delete mode 100644 wallpaper_picker_res/values-sw720dp/dimens.xml delete mode 100644 wallpaper_picker_res/values-sw720dp/styles.xml delete mode 100644 wallpaper_picker_res/values/colors.xml delete mode 100644 wallpaper_picker_res/values/dimens.xml delete mode 100644 wallpaper_picker_res/values/strings.xml delete mode 100644 wallpaper_picker_res/values/styles.xml diff --git a/Android.mk b/Android.mk index 6059a3f982..3bd20a7cd1 100644 --- a/Android.mk +++ b/Android.mk @@ -26,12 +26,8 @@ LOCAL_MODULE_TAGS := optional LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13 LOCAL_SRC_FILES := $(call all-java-files-under, src) \ - $(call all-java-files-under, wallpaper_picker_src) \ $(call all-renderscript-files-under, src) \ $(call all-proto-files-under, protos) -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/wallpaper_picker_res $(LOCAL_PATH)/res - -LOCAL_AAPT_FLAGS := --auto-add-overlay LOCAL_PROTOC_OPTIMIZE_TYPE := nano LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/protos/ diff --git a/CleanSpec.mk b/CleanSpec.mk index b2c5266fa2..c1323951be 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -50,8 +50,6 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_interm $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/Launcher2.apk) -$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates) -$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/Launcher2.apk) # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST diff --git a/wallpaper_picker_res/drawable-hdpi/ic_actionbar_accept.png b/res/drawable-hdpi/ic_actionbar_accept.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/ic_actionbar_accept.png rename to res/drawable-hdpi/ic_actionbar_accept.png diff --git a/wallpaper_picker_res/drawable-hdpi/ic_images.png b/res/drawable-hdpi/ic_images.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/ic_images.png rename to res/drawable-hdpi/ic_images.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_picker_focused.9.png b/res/drawable-hdpi/tile_picker_focused.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_picker_focused.9.png rename to res/drawable-hdpi/tile_picker_focused.9.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_picker_pressed.9.png b/res/drawable-hdpi/tile_picker_pressed.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_picker_pressed.9.png rename to res/drawable-hdpi/tile_picker_pressed.9.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_picker_selected.9.png b/res/drawable-hdpi/tile_picker_selected.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_picker_selected.9.png rename to res/drawable-hdpi/tile_picker_selected.9.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_shadow_bottom.9.png b/res/drawable-hdpi/tile_shadow_bottom.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_shadow_bottom.9.png rename to res/drawable-hdpi/tile_shadow_bottom.9.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_shadow_top.9.png b/res/drawable-hdpi/tile_shadow_top.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_shadow_top.9.png rename to res/drawable-hdpi/tile_shadow_top.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/ic_actionbar_accept.png b/res/drawable-mdpi/ic_actionbar_accept.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/ic_actionbar_accept.png rename to res/drawable-mdpi/ic_actionbar_accept.png diff --git a/wallpaper_picker_res/drawable-mdpi/ic_images.png b/res/drawable-mdpi/ic_images.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/ic_images.png rename to res/drawable-mdpi/ic_images.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_picker_focused.9.png b/res/drawable-mdpi/tile_picker_focused.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_picker_focused.9.png rename to res/drawable-mdpi/tile_picker_focused.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_picker_pressed.9.png b/res/drawable-mdpi/tile_picker_pressed.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_picker_pressed.9.png rename to res/drawable-mdpi/tile_picker_pressed.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_picker_selected.9.png b/res/drawable-mdpi/tile_picker_selected.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_picker_selected.9.png rename to res/drawable-mdpi/tile_picker_selected.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_shadow_bottom.9.png b/res/drawable-mdpi/tile_shadow_bottom.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_shadow_bottom.9.png rename to res/drawable-mdpi/tile_shadow_bottom.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_shadow_top.9.png b/res/drawable-mdpi/tile_shadow_top.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_shadow_top.9.png rename to res/drawable-mdpi/tile_shadow_top.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/ic_actionbar_accept.png b/res/drawable-xhdpi/ic_actionbar_accept.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/ic_actionbar_accept.png rename to res/drawable-xhdpi/ic_actionbar_accept.png diff --git a/wallpaper_picker_res/drawable-xhdpi/ic_images.png b/res/drawable-xhdpi/ic_images.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/ic_images.png rename to res/drawable-xhdpi/ic_images.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_picker_focused.9.png b/res/drawable-xhdpi/tile_picker_focused.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_picker_focused.9.png rename to res/drawable-xhdpi/tile_picker_focused.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_picker_pressed.9.png b/res/drawable-xhdpi/tile_picker_pressed.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_picker_pressed.9.png rename to res/drawable-xhdpi/tile_picker_pressed.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_picker_selected.9.png b/res/drawable-xhdpi/tile_picker_selected.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_picker_selected.9.png rename to res/drawable-xhdpi/tile_picker_selected.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_shadow_bottom.9.png b/res/drawable-xhdpi/tile_shadow_bottom.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_shadow_bottom.9.png rename to res/drawable-xhdpi/tile_shadow_bottom.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_shadow_top.9.png b/res/drawable-xhdpi/tile_shadow_top.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_shadow_top.9.png rename to res/drawable-xhdpi/tile_shadow_top.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/ic_images.png b/res/drawable-xxhdpi/ic_images.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/ic_images.png rename to res/drawable-xxhdpi/ic_images.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_picker_focused.9.png b/res/drawable-xxhdpi/tile_picker_focused.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_picker_focused.9.png rename to res/drawable-xxhdpi/tile_picker_focused.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_picker_pressed.9.png b/res/drawable-xxhdpi/tile_picker_pressed.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_picker_pressed.9.png rename to res/drawable-xxhdpi/tile_picker_pressed.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_picker_selected.9.png b/res/drawable-xxhdpi/tile_picker_selected.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_picker_selected.9.png rename to res/drawable-xxhdpi/tile_picker_selected.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_shadow_bottom.9.png b/res/drawable-xxhdpi/tile_shadow_bottom.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_shadow_bottom.9.png rename to res/drawable-xxhdpi/tile_shadow_bottom.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_shadow_top.9.png b/res/drawable-xxhdpi/tile_shadow_top.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_shadow_top.9.png rename to res/drawable-xxhdpi/tile_shadow_top.9.png diff --git a/wallpaper_picker_res/drawable/wallpaper_tile_fg.xml b/res/drawable/wallpaper_tile_fg.xml similarity index 100% rename from wallpaper_picker_res/drawable/wallpaper_tile_fg.xml rename to res/drawable/wallpaper_tile_fg.xml diff --git a/wallpaper_picker_res/layout/actionbar_set_wallpaper.xml b/res/layout/actionbar_set_wallpaper.xml similarity index 100% rename from wallpaper_picker_res/layout/actionbar_set_wallpaper.xml rename to res/layout/actionbar_set_wallpaper.xml diff --git a/wallpaper_picker_res/layout/wallpaper_cropper.xml b/res/layout/wallpaper_cropper.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_cropper.xml rename to res/layout/wallpaper_cropper.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker.xml b/res/layout/wallpaper_picker.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker.xml rename to res/layout/wallpaper_picker.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker_image_picker_item.xml b/res/layout/wallpaper_picker_image_picker_item.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker_image_picker_item.xml rename to res/layout/wallpaper_picker_image_picker_item.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker_item.xml b/res/layout/wallpaper_picker_item.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker_item.xml rename to res/layout/wallpaper_picker_item.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker_live_wallpaper_item.xml b/res/layout/wallpaper_picker_live_wallpaper_item.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker_live_wallpaper_item.xml rename to res/layout/wallpaper_picker_live_wallpaper_item.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker_third_party_item.xml b/res/layout/wallpaper_picker_third_party_item.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker_third_party_item.xml rename to res/layout/wallpaper_picker_third_party_item.xml diff --git a/wallpaper_picker_res/menu/cab_delete_wallpapers.xml b/res/menu/cab_delete_wallpapers.xml similarity index 100% rename from wallpaper_picker_res/menu/cab_delete_wallpapers.xml rename to res/menu/cab_delete_wallpapers.xml diff --git a/wallpaper_picker_res/mipmap-hdpi/ic_launcher_wallpaper.png b/res/mipmap-hdpi/ic_launcher_wallpaper.png similarity index 100% rename from wallpaper_picker_res/mipmap-hdpi/ic_launcher_wallpaper.png rename to res/mipmap-hdpi/ic_launcher_wallpaper.png diff --git a/wallpaper_picker_res/mipmap-mdpi/ic_launcher_wallpaper.png b/res/mipmap-mdpi/ic_launcher_wallpaper.png similarity index 100% rename from wallpaper_picker_res/mipmap-mdpi/ic_launcher_wallpaper.png rename to res/mipmap-mdpi/ic_launcher_wallpaper.png diff --git a/wallpaper_picker_res/mipmap-xhdpi/ic_launcher_wallpaper.png b/res/mipmap-xhdpi/ic_launcher_wallpaper.png similarity index 100% rename from wallpaper_picker_res/mipmap-xhdpi/ic_launcher_wallpaper.png rename to res/mipmap-xhdpi/ic_launcher_wallpaper.png diff --git a/wallpaper_picker_res/mipmap-xxhdpi/ic_launcher_wallpaper.png b/res/mipmap-xxhdpi/ic_launcher_wallpaper.png similarity index 100% rename from wallpaper_picker_res/mipmap-xxhdpi/ic_launcher_wallpaper.png rename to res/mipmap-xxhdpi/ic_launcher_wallpaper.png diff --git a/wallpaper_picker_res/values-nodpi/wallpapers.xml b/res/values-nodpi/wallpapers.xml similarity index 100% rename from wallpaper_picker_res/values-nodpi/wallpapers.xml rename to res/values-nodpi/wallpapers.xml diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml index 9ae155b3cc..01227e1470 100644 --- a/res/values-sw720dp/dimens.xml +++ b/res/values-sw720dp/dimens.xml @@ -21,6 +21,10 @@ 8dip 8dip + + 196dp + 140dp + 0dp diff --git a/res/values-sw720dp/styles.xml b/res/values-sw720dp/styles.xml index e1f9ab45af..9738a124b7 100644 --- a/res/values-sw720dp/styles.xml +++ b/res/values-sw720dp/styles.xml @@ -51,6 +51,12 @@ + + + + + + + - diff --git a/wallpaper_picker_res/values/colors.xml b/wallpaper_picker_res/values/colors.xml deleted file mode 100644 index adae7cff6f..0000000000 --- a/wallpaper_picker_res/values/colors.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - #66000000 - diff --git a/wallpaper_picker_res/values/dimens.xml b/wallpaper_picker_res/values/dimens.xml deleted file mode 100644 index 0447c6d1f7..0000000000 --- a/wallpaper_picker_res/values/dimens.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - 106.5dp - 94.5dp - 32dp - diff --git a/wallpaper_picker_res/values/strings.xml b/wallpaper_picker_res/values/strings.xml deleted file mode 100644 index 1ee3513f90..0000000000 --- a/wallpaper_picker_res/values/strings.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - Set wallpaper - - Coudn\'t load image - - Couldn\'t load image as wallpaper - - - - %1$d selected - %1$d selected - %1$d selected - - - Wallpaper %1$d of %2$d - - Selected %1$s - - - Delete - - Pick image - - Wallpapers - - Crop wallpaper - diff --git a/wallpaper_picker_res/values/styles.xml b/wallpaper_picker_res/values/styles.xml deleted file mode 100644 index 0e48ddac43..0000000000 --- a/wallpaper_picker_res/values/styles.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - From 59a488ac03aa122b75e9a358db74acf7bb4d2508 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Tue, 10 Dec 2013 12:32:14 -0800 Subject: [PATCH 064/147] Adjusting grid for tablets and fixing incorrect resources for large tablets. Change-Id: I4c2a058da934bef14f5be3c53ebda940aeb990ca --- res/drawable-sw720dp-hdpi/workspace_bg.9.png | Bin 0 -> 226 bytes res/drawable-sw720dp-mdpi/workspace_bg.9.png | Bin 0 -> 213 bytes res/drawable-sw720dp-xhdpi/workspace_bg.9.png | Bin 0 -> 255 bytes .../workspace_bg.9.png | Bin 0 -> 1126 bytes res/values-land/config.xml | 2 - res/values-sw340dp-port/config.xml | 3 -- res/values-sw720dp/config.xml | 2 - res/values/config.xml | 2 - src/com/android/launcher3/CellLayout.java | 7 ++- src/com/android/launcher3/DeviceProfile.java | 44 +++++++++--------- src/com/android/launcher3/DynamicGrid.java | 4 +- src/com/android/launcher3/Workspace.java | 11 +---- 12 files changed, 32 insertions(+), 43 deletions(-) create mode 100644 res/drawable-sw720dp-hdpi/workspace_bg.9.png create mode 100644 res/drawable-sw720dp-mdpi/workspace_bg.9.png create mode 100644 res/drawable-sw720dp-xhdpi/workspace_bg.9.png create mode 100644 res/drawable-sw720dp-xxhdpi/workspace_bg.9.png diff --git a/res/drawable-sw720dp-hdpi/workspace_bg.9.png b/res/drawable-sw720dp-hdpi/workspace_bg.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbfa4fff6bb6a864d6b897417d5a6fd66b8b86f GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^%nS^SdK_#(mUr%o$3Tju*vT`50|;t3QaXTq&H|6f zVg?58P7r1^KY4mBP_V_*#WBRA^X_y*z5@z8%v54wa^XPtFnGH9xvXaoQ~N)r@T}9yljc4iUOxY zN-2X^zrca*2ihu+Sgv%Gm40y~Sv&oadhRhcE5-FklwZusEb9tt)D%C)bKqOui}O7f zKPG%s@;x+bZpE5;H+PpAr#Y$d-gLVE``JM;;qs^Rk8zu^r~RLuc<>s~2@IaDelF{r G5}E)~15T*` literal 0 HcmV?d00001 diff --git a/res/drawable-sw720dp-xhdpi/workspace_bg.9.png b/res/drawable-sw720dp-xhdpi/workspace_bg.9.png new file mode 100644 index 0000000000000000000000000000000000000000..72269f207a5af6e545efb099fa67ddc343be1ff5 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^%nS^SlQ`IbEVb0?w?K-e*vT`50|;t3QaXTq&H|6f zVg?58P7r1^KY4mBP;jBAi(^Pc>(d#h`Hm>?FfXt9Sy#Dvx~;-j#ciHhvx>TN`WY{J z8yYh#j+Q@gE8n2u+UebgH|h#11b%sOW8S5iM`YI&U%Yp@_&WE+`6d&^eph{sU#z0M zaA)q)sS&po4$SRj&1tW@S$T|4)V#`Ar~XSto3?GIFVdQ&MBb@0IkMi AF8}}l literal 0 HcmV?d00001 diff --git a/res/drawable-sw720dp-xxhdpi/workspace_bg.9.png b/res/drawable-sw720dp-xxhdpi/workspace_bg.9.png new file mode 100644 index 0000000000000000000000000000000000000000..efc9b0465881383de73faf2cc77fab87eaa9c00f GIT binary patch literal 1126 zcmbVLPiPcZ7@tIFW5o92K~qbH3Fg$@d2eQSW@p%K*qzyl3vP^?#l|$0OlIC@hh*lB zGjF?-&_j$MRgw18(t~&q6hTBqPaZtwpb)4hOG-&86hu=>BT)?X}PCK&iaV2pb$3#i@ry# zuMMWXd$&*=NV8E72M&D{b4JHj!$lq`={b)6N!pIB8dA|Pw2Y?90+2EgW@Kn&iUqlt zkpxLe=i40HVMS_JWYm=hvThbX$AdhZLKv!e!pWmO; zwfdo?=d023>QBFQ&x0=Gw*2H}@BLR7&n`SL%DFpTSFHOFi+atbBXZT}s~|{XL88&Yz3>ztMgj zT$OHp+}Zf|ueyC?{g1JZ|91F&%f~)CFzmtV)5Un&mi*9sF0ZvZedaV-D< literal 0 HcmV?d00001 diff --git a/res/values-land/config.xml b/res/values-land/config.xml index 121bb0c146..31115c9cb6 100644 --- a/res/values-land/config.xml +++ b/res/values-land/config.xml @@ -18,6 +18,4 @@ false - - false diff --git a/res/values-sw340dp-port/config.xml b/res/values-sw340dp-port/config.xml index d31ee59690..5f71077c72 100644 --- a/res/values-sw340dp-port/config.xml +++ b/res/values-sw340dp-port/config.xml @@ -15,7 +15,4 @@ --> - - - false diff --git a/res/values-sw720dp/config.xml b/res/values-sw720dp/config.xml index 4f537a9f40..c00b5943f1 100644 --- a/res/values-sw720dp/config.xml +++ b/res/values-sw720dp/config.xml @@ -9,8 +9,6 @@ false - - true 18000 diff --git a/res/values/config.xml b/res/values/config.xml index 1538d9fab4..2a08216624 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -52,8 +52,6 @@ false - - false 0 diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index df16d41947..c5ad30a51e 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -100,6 +100,7 @@ public class CellLayout extends ViewGroup { private int mForegroundAlpha = 0; private float mBackgroundAlpha; private float mBackgroundAlphaMultiplier = 1.0f; + private boolean mDrawBackground = true; private Drawable mNormalBackground; private Drawable mActiveGlowBackground; @@ -387,6 +388,10 @@ public class CellLayout extends ViewGroup { mUseActiveGlowBackground = use; } + void disableBackground() { + mDrawBackground = false; + } + boolean getIsDragOverlapping() { return mIsDragOverlapping; } @@ -415,7 +420,7 @@ public class CellLayout extends ViewGroup { // When we're small, we are either drawn normally or in the "accepts drops" state (during // a drag). However, we also drag the mini hover background *over* one of those two // backgrounds - if (mBackgroundAlpha > 0.0f) { + if (mDrawBackground && mBackgroundAlpha > 0.0f) { Drawable bg; if (mUseActiveGlowBackground) { diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 511b7182f3..67b0933c9a 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -119,6 +119,8 @@ public class DeviceProfile { int searchBarHeightPx; int pageIndicatorHeightPx; + float dragViewScale; + private ArrayList mCallbacks = new ArrayList(); DeviceProfile(String n, float w, float h, float r, float c, @@ -282,11 +284,12 @@ public class DeviceProfile { // Check to see if the icons fit in the new available height. If not, then we need to // shrink the icon size. - Rect workspacePadding = getWorkspacePadding(); float scale = 1f; int drawablePadding = iconDrawablePaddingOriginalPx; updateIconSize(1f, drawablePadding, resources, dm); float usedHeight = (cellHeightPx * numRows); + + Rect workspacePadding = getWorkspacePadding(); int maxHeight = (availableHeightPx - workspacePadding.top - workspacePadding.bottom); if (usedHeight > maxHeight) { scale = maxHeight / usedHeight; @@ -319,6 +322,8 @@ public class DeviceProfile { FontMetrics fm = textPaint.getFontMetrics(); cellWidthPx = iconSizePx; cellHeightPx = iconSizePx + iconDrawablePaddingPx + (int) Math.ceil(fm.bottom - fm.top); + final float scaleDps = resources.getDimensionPixelSize(R.dimen.dragViewScale); + dragViewScale = (iconSizePx + scaleDps) / iconSizePx; // Hotseat hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx; @@ -491,17 +496,21 @@ public class DeviceProfile { if (isTablet()) { // Pad the left and right of the workspace to ensure consistent spacing // between all icons + float gapScale = 1f + (dragViewScale - 1f) / 2f; int width = (orientation == CellLayout.LANDSCAPE) ? Math.max(widthPx, heightPx) : Math.min(widthPx, heightPx); - // XXX: If the icon size changes across orientations, we will have to take - // that into account here too. - int gap = (int) ((width - 2 * edgeMarginPx - - (numColumns * cellWidthPx)) / (2 * (numColumns + 1))); - padding.set(edgeMarginPx + gap, - searchBarBounds.bottom, - edgeMarginPx + gap, - hotseatBarHeightPx + pageIndicatorHeightPx); + int height = (orientation != CellLayout.LANDSCAPE) + ? Math.max(widthPx, heightPx) + : Math.min(widthPx, heightPx); + int paddingTop = searchBarBounds.bottom; + int paddingBottom = hotseatBarHeightPx + pageIndicatorHeightPx; + int availableWidth = Math.max(0, width - (int) ((numColumns * cellWidthPx) + + (numColumns * gapScale * cellWidthPx))); + int availableHeight = Math.max(0, height - paddingTop - paddingBottom + - (int) (2 * numRows * cellHeightPx)); + padding.set(availableWidth / 2, paddingTop + availableHeight / 2, + availableWidth / 2, paddingBottom + availableHeight / 2); } else { // Pad the top and bottom of the workspace with search/hotseat bar sizes padding.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, @@ -514,8 +523,8 @@ public class DeviceProfile { } int getWorkspacePageSpacing(int orientation) { - if (orientation == CellLayout.LANDSCAPE && - transposeLayoutWithOrientation) { + if ((orientation == CellLayout.LANDSCAPE && + transposeLayoutWithOrientation) || isLargeTablet()) { // In landscape mode the page spacing is set to the default. return defaultPageSpacingPx; } else { @@ -645,19 +654,12 @@ public class DeviceProfile { lp.height = LayoutParams.MATCH_PARENT; hotseat.findViewById(R.id.layout).setPadding(0, 2 * edgeMarginPx, 0, 2 * edgeMarginPx); } else if (isTablet()) { - // Pad the hotseat with the grid gap calculated above - int gridGap = (int) ((widthPx - 2 * edgeMarginPx - - (numColumns * cellWidthPx)) / (2 * (numColumns + 1))); - int gridWidth = (int) ((numColumns * cellWidthPx) + - ((numColumns - 1) * gridGap)); - int hotseatGap = (int) Math.max(0, - (gridWidth - (numHotseatIcons * hotseatCellWidthPx)) - / (numHotseatIcons - 1)); + // Pad the hotseat with the workspace padding calculated above lp.gravity = Gravity.BOTTOM; lp.width = LayoutParams.MATCH_PARENT; lp.height = hotseatBarHeightPx; - hotseat.setPadding(2 * edgeMarginPx + gridGap + hotseatGap, 0, - 2 * edgeMarginPx + gridGap + hotseatGap, + hotseat.setPadding(edgeMarginPx + padding.left, 0, + edgeMarginPx + padding.right, 2 * edgeMarginPx); } else { // For phones, layout the hotseat without any bottom margin diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java index dc01c69331..22928ccf3a 100644 --- a/src/com/android/launcher3/DynamicGrid.java +++ b/src/com/android/launcher3/DynamicGrid.java @@ -74,10 +74,10 @@ public class DynamicGrid { // The tablet profile is odd in that the landscape orientation // also includes the nav bar on the side deviceProfiles.add(new DeviceProfile("Nexus 7", - 575, 904, 5, 5, 72, 14.4f, 7, 60)); + 575, 904, 5, 6, 72, 14.4f, 7, 60)); // Larger tablet profiles always have system bars on the top & bottom deviceProfiles.add(new DeviceProfile("Nexus 10", - 727, 1207, 5, 5, 80, 14.4f, 7, 64)); + 727, 1207, 5, 6, 76, 14.4f, 7, 64)); /* deviceProfiles.add(new DeviceProfile("Nexus 7", 600, 960, 5, 5, 72, 14.4f, 5, 60)); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index bf4f561e0a..3d1564a7a2 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -565,6 +565,7 @@ public class Workspace extends SmoothPagedView public void createCustomContentPage() { CellLayout customScreen = (CellLayout) mLauncher.getLayoutInflater().inflate(R.layout.workspace_screen, null); + customScreen.disableBackground(); mWorkspaceScreens.put(CUSTOM_CONTENT_SCREEN_ID, customScreen); mScreenOrder.add(0, CUSTOM_CONTENT_SCREEN_ID); @@ -1155,11 +1156,6 @@ public class Workspace extends SmoothPagedView } } - // Only show page outlines as we pan if we are on large screen - if (LauncherAppState.getInstance().isScreenLarge()) { - showOutlines(); - } - // If we are not fading in adjacent screens, we still need to restore the alpha in case the // user scrolls while we are transitioning (should not affect dispatchDraw optimizations) if (!mWorkspaceFadeInAdjacentScreens) { @@ -1184,11 +1180,6 @@ public class Workspace extends SmoothPagedView // is under a new page (to scroll to) mDragController.forceTouchMove(); } - } else { - // If we are not mid-dragging, hide the page outlines if we are on a large screen - if (LauncherAppState.getInstance().isScreenLarge()) { - hideOutlines(); - } } if (mDelayedResizeRunnable != null) { From 96749c13218aa1b783709dc82a4e16657ce9753f Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Wed, 11 Dec 2013 15:41:28 +0100 Subject: [PATCH 065/147] Revert "Revert "Move wallpaper picker code to a separate directory"" This reverts commit 39de459a8621abfc91382ce7b4cdd37d09aaac12. --- Android.mk | 4 ++ CleanSpec.mk | 2 + res/values-sw720dp/dimens.xml | 4 -- res/values-sw720dp/styles.xml | 6 -- res/values/colors.xml | 1 - res/values/dimens.xml | 5 -- res/values/strings.xml | 32 ----------- res/values/styles.xml | 17 ------ .../drawable-hdpi/ic_actionbar_accept.png | Bin .../drawable-hdpi/ic_images.png | Bin .../drawable-hdpi/tile_picker_focused.9.png | Bin .../drawable-hdpi/tile_picker_pressed.9.png | Bin .../drawable-hdpi/tile_picker_selected.9.png | Bin .../drawable-hdpi/tile_shadow_bottom.9.png | Bin .../drawable-hdpi/tile_shadow_top.9.png | Bin .../drawable-mdpi/ic_actionbar_accept.png | Bin .../drawable-mdpi/ic_images.png | Bin .../drawable-mdpi/tile_picker_focused.9.png | Bin .../drawable-mdpi/tile_picker_pressed.9.png | Bin .../drawable-mdpi/tile_picker_selected.9.png | Bin .../drawable-mdpi/tile_shadow_bottom.9.png | Bin .../drawable-mdpi/tile_shadow_top.9.png | Bin .../drawable-xhdpi/ic_actionbar_accept.png | Bin .../drawable-xhdpi/ic_images.png | Bin .../drawable-xhdpi/tile_picker_focused.9.png | Bin .../drawable-xhdpi/tile_picker_pressed.9.png | Bin .../drawable-xhdpi/tile_picker_selected.9.png | Bin .../drawable-xhdpi/tile_shadow_bottom.9.png | Bin .../drawable-xhdpi/tile_shadow_top.9.png | Bin .../drawable-xxhdpi/ic_images.png | Bin .../drawable-xxhdpi/tile_picker_focused.9.png | Bin .../drawable-xxhdpi/tile_picker_pressed.9.png | Bin .../tile_picker_selected.9.png | Bin .../drawable-xxhdpi/tile_shadow_bottom.9.png | Bin .../drawable-xxhdpi/tile_shadow_top.9.png | Bin .../drawable/wallpaper_tile_fg.xml | 0 .../layout/actionbar_set_wallpaper.xml | 0 .../layout/wallpaper_cropper.xml | 0 .../layout/wallpaper_picker.xml | 0 .../wallpaper_picker_image_picker_item.xml | 0 .../layout/wallpaper_picker_item.xml | 0 .../wallpaper_picker_live_wallpaper_item.xml | 0 .../wallpaper_picker_third_party_item.xml | 0 .../menu/cab_delete_wallpapers.xml | 0 .../mipmap-hdpi/ic_launcher_wallpaper.png | Bin .../mipmap-mdpi/ic_launcher_wallpaper.png | Bin .../mipmap-xhdpi/ic_launcher_wallpaper.png | Bin .../mipmap-xxhdpi/ic_launcher_wallpaper.png | Bin .../values-nodpi/wallpapers.xml | 0 .../values-sw720dp/dimens.xml | 28 +++++++++ .../values-sw720dp/styles.xml | 26 +++++++++ wallpaper_picker_res/values/colors.xml | 22 ++++++++ wallpaper_picker_res/values/dimens.xml | 22 ++++++++ wallpaper_picker_res/values/strings.xml | 53 ++++++++++++++++++ wallpaper_picker_res/values/styles.xml | 37 ++++++++++++ .../android/util/Pools.java | 0 .../android/gallery3d/common/BitmapUtils.java | 0 .../com/android/gallery3d/common/Utils.java | 0 .../gallery3d/exif/ByteBufferInputStream.java | 0 .../exif/CountedDataInputStream.java | 0 .../com/android/gallery3d/exif/ExifData.java | 0 .../android/gallery3d/exif/ExifInterface.java | 0 .../exif/ExifInvalidFormatException.java | 0 .../android/gallery3d/exif/ExifModifier.java | 0 .../gallery3d/exif/ExifOutputStream.java | 0 .../android/gallery3d/exif/ExifParser.java | 0 .../android/gallery3d/exif/ExifReader.java | 0 .../com/android/gallery3d/exif/ExifTag.java | 0 .../com/android/gallery3d/exif/IfdData.java | 0 .../com/android/gallery3d/exif/IfdId.java | 0 .../android/gallery3d/exif/JpegHeader.java | 0 .../exif/OrderedDataOutputStream.java | 0 .../com/android/gallery3d/exif/Rational.java | 0 .../gallery3d/glrenderer/BasicTexture.java | 0 .../gallery3d/glrenderer/BitmapTexture.java | 0 .../gallery3d/glrenderer/GLCanvas.java | 0 .../gallery3d/glrenderer/GLES20Canvas.java | 0 .../gallery3d/glrenderer/GLES20IdImpl.java | 0 .../android/gallery3d/glrenderer/GLId.java | 0 .../android/gallery3d/glrenderer/GLPaint.java | 0 .../gallery3d/glrenderer/RawTexture.java | 0 .../android/gallery3d/glrenderer/Texture.java | 0 .../gallery3d/glrenderer/UploadedTexture.java | 0 .../com/android/gallery3d/util/IntArray.java | 0 .../com/android/launcher3/CropView.java | 0 .../launcher3/WallpaperCropActivity.java | 0 .../launcher3/WallpaperPickerActivity.java | 0 .../photos/BitmapRegionTileSource.java | 0 .../photos/views/BlockingGLTextureView.java | 0 .../photos/views/TiledImageRenderer.java | 0 .../android/photos/views/TiledImageView.java | 0 91 files changed, 194 insertions(+), 65 deletions(-) rename {res => wallpaper_picker_res}/drawable-hdpi/ic_actionbar_accept.png (100%) rename {res => wallpaper_picker_res}/drawable-hdpi/ic_images.png (100%) rename {res => wallpaper_picker_res}/drawable-hdpi/tile_picker_focused.9.png (100%) rename {res => wallpaper_picker_res}/drawable-hdpi/tile_picker_pressed.9.png (100%) rename {res => wallpaper_picker_res}/drawable-hdpi/tile_picker_selected.9.png (100%) rename {res => wallpaper_picker_res}/drawable-hdpi/tile_shadow_bottom.9.png (100%) rename {res => wallpaper_picker_res}/drawable-hdpi/tile_shadow_top.9.png (100%) rename {res => wallpaper_picker_res}/drawable-mdpi/ic_actionbar_accept.png (100%) rename {res => wallpaper_picker_res}/drawable-mdpi/ic_images.png (100%) rename {res => wallpaper_picker_res}/drawable-mdpi/tile_picker_focused.9.png (100%) rename {res => wallpaper_picker_res}/drawable-mdpi/tile_picker_pressed.9.png (100%) rename {res => wallpaper_picker_res}/drawable-mdpi/tile_picker_selected.9.png (100%) rename {res => wallpaper_picker_res}/drawable-mdpi/tile_shadow_bottom.9.png (100%) rename {res => wallpaper_picker_res}/drawable-mdpi/tile_shadow_top.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xhdpi/ic_actionbar_accept.png (100%) rename {res => wallpaper_picker_res}/drawable-xhdpi/ic_images.png (100%) rename {res => wallpaper_picker_res}/drawable-xhdpi/tile_picker_focused.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xhdpi/tile_picker_pressed.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xhdpi/tile_picker_selected.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xhdpi/tile_shadow_bottom.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xhdpi/tile_shadow_top.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xxhdpi/ic_images.png (100%) rename {res => wallpaper_picker_res}/drawable-xxhdpi/tile_picker_focused.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xxhdpi/tile_picker_pressed.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xxhdpi/tile_picker_selected.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xxhdpi/tile_shadow_bottom.9.png (100%) rename {res => wallpaper_picker_res}/drawable-xxhdpi/tile_shadow_top.9.png (100%) rename {res => wallpaper_picker_res}/drawable/wallpaper_tile_fg.xml (100%) rename {res => wallpaper_picker_res}/layout/actionbar_set_wallpaper.xml (100%) rename {res => wallpaper_picker_res}/layout/wallpaper_cropper.xml (100%) rename {res => wallpaper_picker_res}/layout/wallpaper_picker.xml (100%) rename {res => wallpaper_picker_res}/layout/wallpaper_picker_image_picker_item.xml (100%) rename {res => wallpaper_picker_res}/layout/wallpaper_picker_item.xml (100%) rename {res => wallpaper_picker_res}/layout/wallpaper_picker_live_wallpaper_item.xml (100%) rename {res => wallpaper_picker_res}/layout/wallpaper_picker_third_party_item.xml (100%) rename {res => wallpaper_picker_res}/menu/cab_delete_wallpapers.xml (100%) rename {res => wallpaper_picker_res}/mipmap-hdpi/ic_launcher_wallpaper.png (100%) rename {res => wallpaper_picker_res}/mipmap-mdpi/ic_launcher_wallpaper.png (100%) rename {res => wallpaper_picker_res}/mipmap-xhdpi/ic_launcher_wallpaper.png (100%) rename {res => wallpaper_picker_res}/mipmap-xxhdpi/ic_launcher_wallpaper.png (100%) rename {res => wallpaper_picker_res}/values-nodpi/wallpapers.xml (100%) create mode 100644 wallpaper_picker_res/values-sw720dp/dimens.xml create mode 100644 wallpaper_picker_res/values-sw720dp/styles.xml create mode 100644 wallpaper_picker_res/values/colors.xml create mode 100644 wallpaper_picker_res/values/dimens.xml create mode 100644 wallpaper_picker_res/values/strings.xml create mode 100644 wallpaper_picker_res/values/styles.xml rename {src => wallpaper_picker_src}/android/util/Pools.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/common/BitmapUtils.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/common/Utils.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/ByteBufferInputStream.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/CountedDataInputStream.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/ExifData.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/ExifInterface.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/ExifInvalidFormatException.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/ExifModifier.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/ExifOutputStream.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/ExifParser.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/ExifReader.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/ExifTag.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/IfdData.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/IfdId.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/JpegHeader.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/OrderedDataOutputStream.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/exif/Rational.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/BasicTexture.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/BitmapTexture.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/GLCanvas.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/GLES20Canvas.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/GLES20IdImpl.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/GLId.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/GLPaint.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/RawTexture.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/Texture.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/glrenderer/UploadedTexture.java (100%) rename {src => wallpaper_picker_src}/com/android/gallery3d/util/IntArray.java (100%) rename {src => wallpaper_picker_src}/com/android/launcher3/CropView.java (100%) rename {src => wallpaper_picker_src}/com/android/launcher3/WallpaperCropActivity.java (100%) rename {src => wallpaper_picker_src}/com/android/launcher3/WallpaperPickerActivity.java (100%) rename {src => wallpaper_picker_src}/com/android/photos/BitmapRegionTileSource.java (100%) rename {src => wallpaper_picker_src}/com/android/photos/views/BlockingGLTextureView.java (100%) rename {src => wallpaper_picker_src}/com/android/photos/views/TiledImageRenderer.java (100%) rename {src => wallpaper_picker_src}/com/android/photos/views/TiledImageView.java (100%) diff --git a/Android.mk b/Android.mk index 3bd20a7cd1..6059a3f982 100644 --- a/Android.mk +++ b/Android.mk @@ -26,8 +26,12 @@ LOCAL_MODULE_TAGS := optional LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13 LOCAL_SRC_FILES := $(call all-java-files-under, src) \ + $(call all-java-files-under, wallpaper_picker_src) \ $(call all-renderscript-files-under, src) \ $(call all-proto-files-under, protos) +LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/wallpaper_picker_res $(LOCAL_PATH)/res + +LOCAL_AAPT_FLAGS := --auto-add-overlay LOCAL_PROTOC_OPTIMIZE_TYPE := nano LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/protos/ diff --git a/CleanSpec.mk b/CleanSpec.mk index c1323951be..b2c5266fa2 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -50,6 +50,8 @@ $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_interm $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates) $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates) $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/Launcher2.apk) +$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher2_intermediates) +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/Launcher2.apk) # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml index 01227e1470..9ae155b3cc 100644 --- a/res/values-sw720dp/dimens.xml +++ b/res/values-sw720dp/dimens.xml @@ -21,10 +21,6 @@ 8dip 8dip - - 196dp - 140dp - 0dp diff --git a/res/values-sw720dp/styles.xml b/res/values-sw720dp/styles.xml index 9738a124b7..e1f9ab45af 100644 --- a/res/values-sw720dp/styles.xml +++ b/res/values-sw720dp/styles.xml @@ -51,12 +51,6 @@ - - - - - - - + diff --git a/wallpaper_picker_res/values/colors.xml b/wallpaper_picker_res/values/colors.xml new file mode 100644 index 0000000000..adae7cff6f --- /dev/null +++ b/wallpaper_picker_res/values/colors.xml @@ -0,0 +1,22 @@ + + + + #66000000 + diff --git a/wallpaper_picker_res/values/dimens.xml b/wallpaper_picker_res/values/dimens.xml new file mode 100644 index 0000000000..0447c6d1f7 --- /dev/null +++ b/wallpaper_picker_res/values/dimens.xml @@ -0,0 +1,22 @@ + + + + + + 106.5dp + 94.5dp + 32dp + diff --git a/wallpaper_picker_res/values/strings.xml b/wallpaper_picker_res/values/strings.xml new file mode 100644 index 0000000000..1ee3513f90 --- /dev/null +++ b/wallpaper_picker_res/values/strings.xml @@ -0,0 +1,53 @@ + + + + + + Set wallpaper + + Coudn\'t load image + + Couldn\'t load image as wallpaper + + + + %1$d selected + %1$d selected + %1$d selected + + + Wallpaper %1$d of %2$d + + Selected %1$s + + + Delete + + Pick image + + Wallpapers + + Crop wallpaper + diff --git a/wallpaper_picker_res/values/styles.xml b/wallpaper_picker_res/values/styles.xml new file mode 100644 index 0000000000..0e48ddac43 --- /dev/null +++ b/wallpaper_picker_res/values/styles.xml @@ -0,0 +1,37 @@ + + + + + + + + + + diff --git a/src/android/util/Pools.java b/wallpaper_picker_src/android/util/Pools.java similarity index 100% rename from src/android/util/Pools.java rename to wallpaper_picker_src/android/util/Pools.java diff --git a/src/com/android/gallery3d/common/BitmapUtils.java b/wallpaper_picker_src/com/android/gallery3d/common/BitmapUtils.java similarity index 100% rename from src/com/android/gallery3d/common/BitmapUtils.java rename to wallpaper_picker_src/com/android/gallery3d/common/BitmapUtils.java diff --git a/src/com/android/gallery3d/common/Utils.java b/wallpaper_picker_src/com/android/gallery3d/common/Utils.java similarity index 100% rename from src/com/android/gallery3d/common/Utils.java rename to wallpaper_picker_src/com/android/gallery3d/common/Utils.java diff --git a/src/com/android/gallery3d/exif/ByteBufferInputStream.java b/wallpaper_picker_src/com/android/gallery3d/exif/ByteBufferInputStream.java similarity index 100% rename from src/com/android/gallery3d/exif/ByteBufferInputStream.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ByteBufferInputStream.java diff --git a/src/com/android/gallery3d/exif/CountedDataInputStream.java b/wallpaper_picker_src/com/android/gallery3d/exif/CountedDataInputStream.java similarity index 100% rename from src/com/android/gallery3d/exif/CountedDataInputStream.java rename to wallpaper_picker_src/com/android/gallery3d/exif/CountedDataInputStream.java diff --git a/src/com/android/gallery3d/exif/ExifData.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifData.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifData.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifData.java diff --git a/src/com/android/gallery3d/exif/ExifInterface.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifInterface.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifInterface.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifInterface.java diff --git a/src/com/android/gallery3d/exif/ExifInvalidFormatException.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifInvalidFormatException.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifInvalidFormatException.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifInvalidFormatException.java diff --git a/src/com/android/gallery3d/exif/ExifModifier.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifModifier.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifModifier.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifModifier.java diff --git a/src/com/android/gallery3d/exif/ExifOutputStream.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifOutputStream.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifOutputStream.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifOutputStream.java diff --git a/src/com/android/gallery3d/exif/ExifParser.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifParser.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifParser.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifParser.java diff --git a/src/com/android/gallery3d/exif/ExifReader.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifReader.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifReader.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifReader.java diff --git a/src/com/android/gallery3d/exif/ExifTag.java b/wallpaper_picker_src/com/android/gallery3d/exif/ExifTag.java similarity index 100% rename from src/com/android/gallery3d/exif/ExifTag.java rename to wallpaper_picker_src/com/android/gallery3d/exif/ExifTag.java diff --git a/src/com/android/gallery3d/exif/IfdData.java b/wallpaper_picker_src/com/android/gallery3d/exif/IfdData.java similarity index 100% rename from src/com/android/gallery3d/exif/IfdData.java rename to wallpaper_picker_src/com/android/gallery3d/exif/IfdData.java diff --git a/src/com/android/gallery3d/exif/IfdId.java b/wallpaper_picker_src/com/android/gallery3d/exif/IfdId.java similarity index 100% rename from src/com/android/gallery3d/exif/IfdId.java rename to wallpaper_picker_src/com/android/gallery3d/exif/IfdId.java diff --git a/src/com/android/gallery3d/exif/JpegHeader.java b/wallpaper_picker_src/com/android/gallery3d/exif/JpegHeader.java similarity index 100% rename from src/com/android/gallery3d/exif/JpegHeader.java rename to wallpaper_picker_src/com/android/gallery3d/exif/JpegHeader.java diff --git a/src/com/android/gallery3d/exif/OrderedDataOutputStream.java b/wallpaper_picker_src/com/android/gallery3d/exif/OrderedDataOutputStream.java similarity index 100% rename from src/com/android/gallery3d/exif/OrderedDataOutputStream.java rename to wallpaper_picker_src/com/android/gallery3d/exif/OrderedDataOutputStream.java diff --git a/src/com/android/gallery3d/exif/Rational.java b/wallpaper_picker_src/com/android/gallery3d/exif/Rational.java similarity index 100% rename from src/com/android/gallery3d/exif/Rational.java rename to wallpaper_picker_src/com/android/gallery3d/exif/Rational.java diff --git a/src/com/android/gallery3d/glrenderer/BasicTexture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/BasicTexture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/BasicTexture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/BasicTexture.java diff --git a/src/com/android/gallery3d/glrenderer/BitmapTexture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/BitmapTexture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/BitmapTexture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/BitmapTexture.java diff --git a/src/com/android/gallery3d/glrenderer/GLCanvas.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLCanvas.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLCanvas.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLCanvas.java diff --git a/src/com/android/gallery3d/glrenderer/GLES20Canvas.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20Canvas.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLES20Canvas.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20Canvas.java diff --git a/src/com/android/gallery3d/glrenderer/GLES20IdImpl.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20IdImpl.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLES20IdImpl.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20IdImpl.java diff --git a/src/com/android/gallery3d/glrenderer/GLId.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLId.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLId.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLId.java diff --git a/src/com/android/gallery3d/glrenderer/GLPaint.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLPaint.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/GLPaint.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/GLPaint.java diff --git a/src/com/android/gallery3d/glrenderer/RawTexture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/RawTexture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/RawTexture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/RawTexture.java diff --git a/src/com/android/gallery3d/glrenderer/Texture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/Texture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/Texture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/Texture.java diff --git a/src/com/android/gallery3d/glrenderer/UploadedTexture.java b/wallpaper_picker_src/com/android/gallery3d/glrenderer/UploadedTexture.java similarity index 100% rename from src/com/android/gallery3d/glrenderer/UploadedTexture.java rename to wallpaper_picker_src/com/android/gallery3d/glrenderer/UploadedTexture.java diff --git a/src/com/android/gallery3d/util/IntArray.java b/wallpaper_picker_src/com/android/gallery3d/util/IntArray.java similarity index 100% rename from src/com/android/gallery3d/util/IntArray.java rename to wallpaper_picker_src/com/android/gallery3d/util/IntArray.java diff --git a/src/com/android/launcher3/CropView.java b/wallpaper_picker_src/com/android/launcher3/CropView.java similarity index 100% rename from src/com/android/launcher3/CropView.java rename to wallpaper_picker_src/com/android/launcher3/CropView.java diff --git a/src/com/android/launcher3/WallpaperCropActivity.java b/wallpaper_picker_src/com/android/launcher3/WallpaperCropActivity.java similarity index 100% rename from src/com/android/launcher3/WallpaperCropActivity.java rename to wallpaper_picker_src/com/android/launcher3/WallpaperCropActivity.java diff --git a/src/com/android/launcher3/WallpaperPickerActivity.java b/wallpaper_picker_src/com/android/launcher3/WallpaperPickerActivity.java similarity index 100% rename from src/com/android/launcher3/WallpaperPickerActivity.java rename to wallpaper_picker_src/com/android/launcher3/WallpaperPickerActivity.java diff --git a/src/com/android/photos/BitmapRegionTileSource.java b/wallpaper_picker_src/com/android/photos/BitmapRegionTileSource.java similarity index 100% rename from src/com/android/photos/BitmapRegionTileSource.java rename to wallpaper_picker_src/com/android/photos/BitmapRegionTileSource.java diff --git a/src/com/android/photos/views/BlockingGLTextureView.java b/wallpaper_picker_src/com/android/photos/views/BlockingGLTextureView.java similarity index 100% rename from src/com/android/photos/views/BlockingGLTextureView.java rename to wallpaper_picker_src/com/android/photos/views/BlockingGLTextureView.java diff --git a/src/com/android/photos/views/TiledImageRenderer.java b/wallpaper_picker_src/com/android/photos/views/TiledImageRenderer.java similarity index 100% rename from src/com/android/photos/views/TiledImageRenderer.java rename to wallpaper_picker_src/com/android/photos/views/TiledImageRenderer.java diff --git a/src/com/android/photos/views/TiledImageView.java b/wallpaper_picker_src/com/android/photos/views/TiledImageView.java similarity index 100% rename from src/com/android/photos/views/TiledImageView.java rename to wallpaper_picker_src/com/android/photos/views/TiledImageView.java From fe69287b97d16c8941ab9463e4868fca45ad8152 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Wed, 11 Dec 2013 14:47:23 -0800 Subject: [PATCH 066/147] Fix new NPE relating to reorder hints Change-Id: I80ff327ee549caef5802eb7194d48b1e8424ce47 --- src/com/android/launcher3/CellLayout.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index a05dd90c05..75f6a196c0 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -2632,9 +2632,9 @@ public class CellLayout extends ViewGroup { } if (mode == MODE_SHOW_REORDER_HINT) { - beginOrAdjustReorderPreviewAnimations(finalSolution, dragView, 0, - ReorderPreviewAnimation.MODE_HINT); if (finalSolution != null) { + beginOrAdjustReorderPreviewAnimations(finalSolution, dragView, 0, + ReorderPreviewAnimation.MODE_HINT); result[0] = finalSolution.dragViewX; result[1] = finalSolution.dragViewY; resultSpan[0] = finalSolution.dragViewSpanX; From dcd27ba90940f29bfc185c86c1b5b789e0d8f2de Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 11 Dec 2013 15:28:15 -0800 Subject: [PATCH 067/147] Fixing issue with Widget sizes being icorrectly reported. Change-Id: I8474514cc3722d8450c707b7fd1ccea2ea344a59 --- src/com/android/launcher3/Workspace.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index bf4f561e0a..a1eb27dba2 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -3115,13 +3115,11 @@ public class Workspace extends SmoothPagedView display.getCurrentSizeRange(smallestSize, largestSize); int countX = (int) grid.numColumns; int countY = (int) grid.numRows; - int constrainedLongEdge = largestSize.y; - int constrainedShortEdge = smallestSize.y; if (orientation == CellLayout.LANDSCAPE) { if (mLandscapeCellLayoutMetrics == null) { Rect padding = grid.getWorkspacePadding(CellLayout.LANDSCAPE); - int width = constrainedLongEdge - padding.left - padding.right; - int height = constrainedShortEdge - padding.top - padding.bottom; + int width = largestSize.x - padding.left - padding.right; + int height = smallestSize.y - padding.top - padding.bottom; mLandscapeCellLayoutMetrics = new Rect(); mLandscapeCellLayoutMetrics.set( grid.calculateCellWidth(width, countX), @@ -3131,8 +3129,8 @@ public class Workspace extends SmoothPagedView } else if (orientation == CellLayout.PORTRAIT) { if (mPortraitCellLayoutMetrics == null) { Rect padding = grid.getWorkspacePadding(CellLayout.PORTRAIT); - int width = constrainedShortEdge - padding.left - padding.right; - int height = constrainedLongEdge - padding.top - padding.bottom; + int width = smallestSize.x - padding.left - padding.right; + int height = largestSize.y - padding.top - padding.bottom; mPortraitCellLayoutMetrics = new Rect(); mPortraitCellLayoutMetrics.set( grid.calculateCellWidth(width, countX), From ae4409dea97d03f0f0a9195ab648188efa2b5cc1 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 26 Nov 2013 10:34:59 -0800 Subject: [PATCH 068/147] Don't load items which exceed the grid bounds -> Unified location where this is managed (with other placement verification) -> For now, not deleting out of bounds items, but can turn it on in one line Change-Id: I5e1a5cd357d80475ae40af7b89a0cd372d5c241b --- src/com/android/launcher3/LauncherModel.java | 74 +++++++++----------- 1 file changed, 32 insertions(+), 42 deletions(-) diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index cb2d23b5fb..da805a05a6 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1532,16 +1532,9 @@ public class LauncherModel extends BroadcastReceiver { } } - private boolean checkItemDimensions(ItemInfo info) { - LauncherAppState app = LauncherAppState.getInstance(); - DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); - return (info.cellX + info.spanX) > (int) grid.numColumns || - (info.cellY + info.spanY) > (int) grid.numRows; - } - // check & update map of what's occupied; used to discard overlapping/invalid items private boolean checkItemPlacement(HashMap occupied, ItemInfo item, - AtomicBoolean deleteOnItemOverlap) { + AtomicBoolean deleteOnInvalidPlacement) { LauncherAppState app = LauncherAppState.getInstance(); DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); final int countX = (int) grid.numColumns; @@ -1552,7 +1545,7 @@ public class LauncherModel extends BroadcastReceiver { // Return early if we detect that an item is under the hotseat button if (mCallbacks == null || mCallbacks.get().isAllAppsButtonRank((int) item.screenId)) { - deleteOnItemOverlap.set(true); + deleteOnInvalidPlacement.set(true); Log.e(TAG, "Error loading shortcut into hotseat " + item + " into position (" + item.screenId + ":" + item.cellX + "," + item.cellY + ") occupied by all apps"); @@ -1562,6 +1555,14 @@ public class LauncherModel extends BroadcastReceiver { final ItemInfo[][] hotseatItems = occupied.get((long) LauncherSettings.Favorites.CONTAINER_HOTSEAT); + if (item.screenId >= grid.numHotseatIcons) { + Log.e(TAG, "Error loading shortcut " + item + + " into hotseat position " + item.screenId + + ", position out of bounds: (0 to " + (grid.numHotseatIcons - 1) + + ")"); + return false; + } + if (hotseatItems != null) { if (hotseatItems[(int) item.screenId][0] != null) { Log.e(TAG, "Error loading shortcut into hotseat " + item @@ -1575,7 +1576,7 @@ public class LauncherModel extends BroadcastReceiver { return true; } } else { - final ItemInfo[][] items = new ItemInfo[(int) grid.numHotseatIcons + 1][1]; + final ItemInfo[][] items = new ItemInfo[(int) grid.numHotseatIcons][1]; items[(int) item.screenId][0] = item; occupied.put((long) LauncherSettings.Favorites.CONTAINER_HOTSEAT, items); return true; @@ -1591,6 +1592,16 @@ public class LauncherModel extends BroadcastReceiver { } final ItemInfo[][] screens = occupied.get(item.screenId); + if (item.container == LauncherSettings.Favorites.CONTAINER_DESKTOP && + item.cellX < 0 || item.cellY < 0 || + item.cellX + item.spanX > countX || item.cellY + item.spanY > countY) { + Log.e(TAG, "Error loading shortcut " + item + + " into cell (" + containerIndex + "-" + item.screenId + ":" + + item.cellX + "," + item.cellY + + ") out of screen bounds ( " + countX + "x" + countY + ")"); + return false; + } + // Check if any workspace icons overlap with each other for (int x = item.cellX; x < (item.cellX+item.spanX); x++) { for (int y = item.cellY; y < (item.cellY+item.spanY); y++) { @@ -1709,7 +1720,7 @@ public class LauncherModel extends BroadcastReceiver { Intent intent; while (!mStopped && c.moveToNext()) { - AtomicBoolean deleteOnItemOverlap = new AtomicBoolean(false); + AtomicBoolean deleteOnInvalidPlacement = new AtomicBoolean(false); try { int itemType = c.getInt(itemTypeIndex); @@ -1770,18 +1781,11 @@ public class LauncherModel extends BroadcastReceiver { info.cellY = c.getInt(cellYIndex); info.spanX = 1; info.spanY = 1; - // Skip loading items that are out of bounds - if (container == LauncherSettings.Favorites.CONTAINER_DESKTOP) { - if (checkItemDimensions(info)) { - Launcher.addDumpLog(TAG, "Skipped loading out of bounds shortcut: " - + info + ", " + grid.numColumns + "x" + grid.numRows, true); - continue; - } - } + // check & update map of what's occupied - deleteOnItemOverlap.set(false); - if (!checkItemPlacement(occupied, info, deleteOnItemOverlap)) { - if (deleteOnItemOverlap.get()) { + deleteOnInvalidPlacement.set(false); + if (!checkItemPlacement(occupied, info, deleteOnInvalidPlacement)) { + if (deleteOnInvalidPlacement.get()) { itemsToRemove.add(id); } break; @@ -1823,18 +1827,11 @@ public class LauncherModel extends BroadcastReceiver { folderInfo.spanX = 1; folderInfo.spanY = 1; - // Skip loading items that are out of bounds - if (container == LauncherSettings.Favorites.CONTAINER_DESKTOP) { - if (checkItemDimensions(folderInfo)) { - Log.d(TAG, "Skipped loading out of bounds folder"); - continue; - } - } // check & update map of what's occupied - deleteOnItemOverlap.set(false); + deleteOnInvalidPlacement.set(false); if (!checkItemPlacement(occupied, folderInfo, - deleteOnItemOverlap)) { - if (deleteOnItemOverlap.get()) { + deleteOnInvalidPlacement)) { + if (deleteOnInvalidPlacement.get()) { itemsToRemove.add(id); } break; @@ -1890,18 +1887,11 @@ public class LauncherModel extends BroadcastReceiver { } appWidgetInfo.container = c.getInt(containerIndex); - // Skip loading items that are out of bounds - if (container == LauncherSettings.Favorites.CONTAINER_DESKTOP) { - if (checkItemDimensions(appWidgetInfo)) { - Log.d(TAG, "Skipped loading out of bounds app widget"); - continue; - } - } // check & update map of what's occupied - deleteOnItemOverlap.set(false); + deleteOnInvalidPlacement.set(false); if (!checkItemPlacement(occupied, appWidgetInfo, - deleteOnItemOverlap)) { - if (deleteOnItemOverlap.get()) { + deleteOnInvalidPlacement)) { + if (deleteOnInvalidPlacement.get()) { itemsToRemove.add(id); } break; From bd2243aca1ad6a21958923929dc376d36f8a87dc Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Wed, 11 Dec 2013 21:11:15 -0800 Subject: [PATCH 069/147] Import translations. DO NOT MERGE Change-Id: I82b885284a196a6e466640d7790dc3c977f247a5 Auto-generated-cl: translation import --- res/values-af/strings.xml | 14 -------------- res/values-am/strings.xml | 14 -------------- res/values-ar/strings.xml | 14 -------------- res/values-be/strings.xml | 21 --------------------- res/values-bg/strings.xml | 14 -------------- res/values-ca/strings.xml | 14 -------------- res/values-cs/strings.xml | 14 -------------- res/values-da/strings.xml | 14 -------------- res/values-de/strings.xml | 14 -------------- res/values-el/strings.xml | 14 -------------- res/values-en-rGB/strings.xml | 14 -------------- res/values-en-rIN/strings.xml | 14 -------------- res/values-es-rUS/strings.xml | 14 -------------- res/values-es/strings.xml | 14 -------------- res/values-et-rEE/strings.xml | 14 -------------- res/values-fa/strings.xml | 14 -------------- res/values-fi/strings.xml | 14 -------------- res/values-fr-rCA/strings.xml | 14 -------------- res/values-fr/strings.xml | 14 -------------- res/values-hi/strings.xml | 14 -------------- res/values-hr/strings.xml | 14 -------------- res/values-hu/strings.xml | 14 -------------- res/values-hy-rAM/strings.xml | 14 -------------- res/values-in/strings.xml | 14 -------------- res/values-it/strings.xml | 14 -------------- res/values-iw/strings.xml | 14 -------------- res/values-ja/strings.xml | 14 -------------- res/values-ka-rGE/strings.xml | 14 -------------- res/values-km-rKH/strings.xml | 14 -------------- res/values-ko/strings.xml | 14 -------------- res/values-lo-rLA/strings.xml | 14 -------------- res/values-lt/strings.xml | 14 -------------- res/values-lv/strings.xml | 14 -------------- res/values-mn-rMN/strings.xml | 14 -------------- res/values-ms-rMY/strings.xml | 14 -------------- res/values-nb/strings.xml | 14 -------------- res/values-nl/strings.xml | 14 -------------- res/values-pl/strings.xml | 14 -------------- res/values-pt-rPT/strings.xml | 14 -------------- res/values-pt/strings.xml | 14 -------------- res/values-rm/strings.xml | 21 --------------------- res/values-ro/strings.xml | 14 -------------- res/values-ru/strings.xml | 14 -------------- res/values-sk/strings.xml | 14 -------------- res/values-sl/strings.xml | 14 -------------- res/values-sr/strings.xml | 14 -------------- res/values-sv/strings.xml | 14 -------------- res/values-sw/strings.xml | 14 -------------- res/values-th/strings.xml | 14 -------------- res/values-tl/strings.xml | 14 -------------- res/values-tr/strings.xml | 14 -------------- res/values-uk/strings.xml | 14 -------------- res/values-vi/strings.xml | 14 -------------- res/values-zh-rCN/strings.xml | 14 -------------- res/values-zh-rHK/strings.xml | 14 -------------- res/values-zh-rTW/strings.xml | 14 -------------- res/values-zu/strings.xml | 14 -------------- 57 files changed, 812 deletions(-) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index de987bdb4c..34a5568dc2 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -23,20 +23,6 @@ "Tuis" "Android-kernprogramme" - "Stel muurpapier" - "Kon prent nie laai nie" - "Kon prent nie as muurpapier laai nie" - - "%1$d gekies" - "%1$d gekies" - "%1$d gekies" - - "Muurpapier %1$d van %2$d" - "Het %1$s gekies" - "Vee uit" - "Kies prent" - "Muurpapiere" - "Snoei muurpapier" "Program is nie geïnstalleer nie." "Legstukke" "Legstukke" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index dc64c5d76b..c6420d56bc 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -23,20 +23,6 @@ "መነሻ" "Android ዋና መተግበሪያዎች" - "የግድግዳ ወረቀት አዘጋጅ" - "ምስሉን መጫን አልተቻለም" - "ምስሉን እንደ ግድግዳ ወረቀት መጫን አልተቻለም" - - "%1$d ተመርጧል" - "%1$d ተመርጧል" - "%1$d ተመርጧል" - - "የግድግዳ ወረቀት %1$d ከ%2$d" - "%1$s ተመርጧል" - "ሰርዝ" - "ምስል ምረጥ" - "የግድግዳ ወረቀቶች" - "የግድግዳ ወረቀት ከርክም" "መተግበሪያ አልተጫነም።" "ፍርግሞች" "ፍርግሞች" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 84c157e2bc..aeca02532d 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -23,20 +23,6 @@ "الرئيسية" "‏تطبيقات Android الأساسية" - "تعيين خلفية" - "تعذر تحميل الصورة" - "تعذر تحميل الصورة كخلفية" - - "‏تم تحديد %1$d" - "‏تم تحديد %1$d" - "‏تم تحديد %1$d" - - "‏الخلفية %1$d من %2$d" - "تم تحديد %1$s" - "حذف" - "اختيار صورة" - "الخلفيات" - "اقتصاص الخلفية" "لم يتم تثبيت التطبيق." "الأدوات" "الأدوات" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index 2015158d9b..246553467b 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -26,27 +26,6 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index e57e9d2da6..2a2b72d290 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -23,20 +23,6 @@ "Начало" "Основни приложения на Android" - "Задаване на тапета" - "Изображението не можа да бъде заредено" - "Изображението не можа да бъде заредено като тапет" - - "Избрахте %1$d" - "Избрахте %1$d" - "Избрахте %1$d" - - "Тапет %1$d от %2$d" - "Избрахте %1$s" - "Изтриване" - "Избиране на изображение" - "Тапети" - "Подрязване на тапета" "Приложението не е инсталирано." "Приспособления" "Приспособления" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index a9eb99c1db..fa520ba678 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -23,20 +23,6 @@ "Inici" "Aplicacions principals d\'Android" - "Estableix el fons de pantalla" - "No s\'ha pogut carregar la imatge." - "No s\'ha pogut carregar la imatge com a fons de pantalla." - - "Seleccionats: %1$d" - "Seleccionats: %1$d" - "Seleccionats: %1$d" - - "Fons de pantalla %1$d de %2$d" - "S\'ha seleccionat %1$s" - "Suprimeix" - "Selecciona una imatge" - "Fons de pantalla" - "Retalla el fons de pantalla" "L\'aplicació no s\'ha instal·lat." "Widgets" "Widgets" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 258f645321..fdd48458c8 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -23,20 +23,6 @@ "Plocha" "Android Core Apps" - "Nastavit jako tapetu" - "Obrázek nelze načíst." - "Obrázek nelze načíst jako tapetu." - - "Vybráno: %1$d" - "Vybráno: %1$d" - "Vybráno: %1$d" - - "Tapeta %1$d z %2$d" - "Vybrána položka %1$s" - "Smazat" - "Vybrat obrázek" - "Tapety" - "Oříznutí tapety" "Aplikace není nainstalována." "Widgety" "Widgety" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 96b6af624a..9bf05f0b64 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -23,20 +23,6 @@ "Startskærm" "Kerneapps i Android" - "Angiv baggrund" - "Billedet kunne ikke indlæses" - "Billedet kunne ikke indlæses som baggrund" - - "%1$d er valgt" - "%1$d er valgt" - "%1$d er valgt" - - "Baggrund %1$d af %2$d" - "%1$s blev valgt" - "Slet" - "Vælg billede" - "Baggrunde" - "Beskær baggrund" "Appen er ikke installeret." "Widgets" "Widgets" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index b95d482700..249af37f34 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -23,20 +23,6 @@ "Startseite" "Android Core Apps" - "Hintergrund auswählen" - "Bild konnte nicht geladen werden." - "Bild konnte nicht als Hintergrund geladen werden." - - "%1$d ausgewählt" - "%1$d ausgewählt" - "%1$d ausgewählt" - - "Hintergrund %1$d von %2$d" - "%1$s ausgewählt" - "Entfernen" - "Bild auswählen" - "Hintergründe" - "Hintergrund zuschneiden" "App ist nicht installiert." "Widgets" "Widgets" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 2c3f3f5b1d..cfb97ece02 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -23,20 +23,6 @@ "Αρχική σελίδα" "Βασικές εφαρμογές Android" - "Ορισμός ταπετσαρίας" - "Δεν ήταν δυνατή η φόρτωση της εικόνας" - "Δεν ήταν δυνατή η φόρτωση της εικόνας ως ταπετσαρία" - - "%1$d επιλεγμένα" - "%1$d επιλεγμένα" - "%1$d επιλεγμένα" - - "Ταπετσαρία %1$d από %2$d" - "Επιλέχθηκε το %1$s" - "Διαγραφή" - "Επιλογή εικόνας" - "Ταπετσαρίες" - "Περικοπή ταπετσαρίας" "Η εφαρμογή δεν έχει εγκατασταθεί." "Γραφικά στοιχεία" "Γραφικά στοιχεία" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 0e3e5591aa..2ca832b330 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -23,20 +23,6 @@ "Home" "Android Core Apps" - "Set wallpaper" - "Coudn\'t load image" - "Couldn\'t load image as wallpaper" - - "%1$d selected" - "%1$d selected" - "%1$d selected" - - "Wallpaper %1$d of %2$d" - "Selected %1$s" - "Delete" - "Pick image" - "Wallpapers" - "Crop wallpaper" "App isn\'t installed." "Widgets" "Widgets" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 0e3e5591aa..2ca832b330 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -23,20 +23,6 @@ "Home" "Android Core Apps" - "Set wallpaper" - "Coudn\'t load image" - "Couldn\'t load image as wallpaper" - - "%1$d selected" - "%1$d selected" - "%1$d selected" - - "Wallpaper %1$d of %2$d" - "Selected %1$s" - "Delete" - "Pick image" - "Wallpapers" - "Crop wallpaper" "App isn\'t installed." "Widgets" "Widgets" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index fd37c32cd3..cec4c10a8c 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -23,20 +23,6 @@ "Pantalla principal" "Aplicaciones básicas de Android" - "Establecer como fondo de pantalla" - "No se pudo cargar la imagen." - "No se pudo cargar la imagen como fondo de pantalla." - - "%1$d seleccionados" - "%1$d seleccionado" - "%1$d seleccionados" - - "Fondo de pantalla %1$d de %2$d" - "%1$s seleccionado" - "Eliminar" - "Elegir imagen" - "Fondos de pantalla" - "Recortar fondo de pantalla" "No se instaló la aplicación." "Widgets" "Widgets" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index ad6b2200d1..73dae125f8 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -23,20 +23,6 @@ "Home" "Aplicaciones básicas de Android" - "Establecer fondo" - "No se ha podido cargar la imagen" - "No se ha podido cargar la imagen como fondo de pantalla" - - "Seleccionados: %1$d" - "Seleccionados: %1$d" - "Seleccionados: %1$d" - - "Fondo de pantalla %1$d de %2$d" - "%1$s seleccionado" - "Eliminar" - "Seleccionar imagen" - "Fondos de pantalla" - "Recortar fondo de pantalla" "La aplicación no está instalada." "Widgets" "Widgets" diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index ab4ad02cda..a68778a3ec 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -23,20 +23,6 @@ "Avaekraan" "Androidi tuumrakendused" - "Määra taustapilt" - "Kujutist ei õnnestunud laadida" - "Kujutist ei õnnestunud taustapildina laadida" - - "Valitud on %1$d" - "Valitud on %1$d" - "Valitud on %1$d" - - "%1$d/%2$d taustapildist" - "Valitud on %1$s" - "Kustuta" - "Vali kujutis" - "Taustapildid" - "Taustapildi kärpimine" "Rakendus pole installitud." "Vidinad" "Vidinad" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 2dd1bcea6f..f118c10144 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -23,20 +23,6 @@ "صفحه اصلی" "‏برنامه‌های Android Core" - "تنظیم کاغذدیواری" - "بارگیری تصویر انجام نشد" - "بارگیری تصویر به‌عنوان کاغذدیواری انجام نشد" - - "‏%1$d انتخاب شد" - "‏%1$d انتخاب شد" - "‏%1$d انتخاب شد" - - "‏کاغذ دیواری %1$d از %2$d" - "%1$s انتخاب شده" - "حذف" - "انتخاب تصویر" - "کاغذدیواری‌ها" - "برش کاغذ دیواری" "برنامه نصب نشده است." "ابزارک‌ها" "ابزارک‌ها" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index c5f478f2e6..549804d602 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -23,20 +23,6 @@ "Aloitusruutu" "Androidin ydinsovellukset" - "Aseta taustakuva" - "Kuvan lataus epäonnistui" - "Kuvaa ei voitu ladata taustakuvaksi" - - "%1$d valittu" - "%1$d valittu" - "%1$d valittu" - - "Taustakuva %1$d/%2$d" - "Valittu: %1$s" - "Poista" - "Valitse kuva" - "Taustakuvat" - "Rajaa taustakuva" "Sovellusta ei ole asennettu." "Widgetit" "Widgetit" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 49adaac94a..97c03fe15c 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -23,20 +23,6 @@ "Accueil" "Applications de base Android" - "Définir le fond d\'écran" - "Impossible de charger l\'image" - "Impossible de charger l\'image comme fond d\'écran" - - "%1$d sélectionné" - "%1$d sélectionné" - "%1$d sélectionné(s)" - - "Fond d\'écran %1$d sur %2$d" - "Sélection : %1$s" - "Supprimer" - "Sélectionner une image" - "Fonds d\'écran" - "Rogner le fond d\'écran" "L\'application n\'est pas installée." "Widgets" "Widgets" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index bb466ea6d2..0f9d836c43 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -23,20 +23,6 @@ "Accueil" "Applications de base Android" - "Définir comme fond d\'écran" - "Impossible de charger l\'image." - "Impossible de charger l\'image comme fond d\'écran." - - "%1$d fond d\'écran sélectionné" - "%1$d fond d\'écran sélectionné" - "%1$d fonds d\'écran sélectionnés" - - "Fond d\'écran %1$d sur %2$d" - "%1$s est sélectionné." - "Supprimer" - "Sélectionner une image" - "Fonds d\'écran" - "Rogner le fond d\'écran" "L\'application n\'est pas installée." "Widgets" "Widgets" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index b1060780c0..e149e0fcc6 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -23,20 +23,6 @@ "होम" "Android के मुख्य एप्लिकेशन" - "वॉलपेपर सेट करें" - "चित्र लोड नहीं किया जा सका" - "चित्र को वॉलपेपर के रूप में लोड नहीं किया जा सका" - - "%1$d चयनित" - "%1$d चयनित" - "%1$d चयनित" - - "वॉलपेपर %2$d में से %1$d" - "चयनित %1$s" - "हटाएं" - "चित्र चुनें" - "वॉलपेपर" - "वॉलपेपर काटें" "एप्‍लिकेशन इंस्‍टॉल नहीं है." "विजेट" "विजेट" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 9c7d38ee3e..c9b119fefc 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -23,20 +23,6 @@ "Početna" "Matične aplikacije za Android" - "Postavi pozadinsku sliku" - "Nije moguće učitati sliku" - "Nije moguće učitati sliku kao pozadinsku sliku" - - "Odabrano: %1$d" - "Odabrano: %1$d" - "Odabrano: %1$d" - - "%1$d. pozadinska slika od %2$d" - "Odabrana je stavka %1$s" - "Izbriši" - "Odaberi sliku" - "Pozadinske slike" - "Obreži pozadinsku sliku" "Aplikacija nije instalirana." "Widgeti" "Widgeti" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 89504ddcfc..2b33776438 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -23,20 +23,6 @@ "Főoldal" "Alap Android-alkalmazások" - "Háttérkép beállítása" - "A kép betöltése nem sikerült" - "A kép betöltése háttérképként nem sikerült" - - "%1$d kiválasztva" - "%1$d kiválasztva" - "%1$d kiválasztva" - - "%2$d/%1$d. háttérkép" - "%1$s kiválasztva" - "Törlés" - "Kép választása" - "Háttérképek" - "Háttérkép körbevágása" "Az alkalmazás nincs telepítve." "Modulok" "Modulok" diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 618193d27a..eb7396b15a 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -23,20 +23,6 @@ "Հիմնական" "Android Core Apps" - "Սահմանել պաստառը" - "Չհաջողվեց բեռնել նկարը" - "Չհաջողվեց նկարը սահմանել որպես պաստառ" - - "%1$d ընտրված" - "%1$d ընտրված" - "%1$d ընտրված" - - "%1$d պաստառ՝ %2$d-ից" - "Ընտրված է %1$s" - "Ջնջել" - "Ընտրել պատկեր" - "Պաստառներ" - "Եզրատել պաստառը" "Ծրագիրը տեղադրված չէ:" "Վիջեթներ" "Վիջեթներ" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index cb91c30893..87d163ac30 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -23,20 +23,6 @@ "Layar Utama" "Aplikasi Inti Android" - "Setel wallpaper" - "Tidak dapat memuat gambar" - "Tidak dapat memuat gambar sebagai wallpaper" - - "%1$d dipilih" - "%1$d dipilih" - "%1$d dipilih" - - "Wallpaper %1$d dari %2$d" - "%1$s terpilih" - "Hapus" - "Pilih gambar" - "Wallpaper" - "Pangkas wallpaper" "Aplikasi tidak dipasang." "Widget" "Widget" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index ba4067903e..92d79b0408 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -23,20 +23,6 @@ "Home page" "Applicazioni di base Android" - "Imposta sfondo" - "Impossibile caricare l\'immagine" - "Impossibile caricare l\'immagine come sfondo" - - "%1$d selezionati" - "%1$d selezionato" - "%1$d selezionati" - - "Sfondo %1$d di %2$d" - "Elemento selezionato: %1$s" - "Elimina" - "Scegli immagine" - "Sfondi" - "Ritaglia sfondo" "App non installata." "Widget" "Widget" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 8d70a252d7..a348646d31 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -23,20 +23,6 @@ "דף הבית" "‏אפליקציות הליבה של Android" - "בחר טפט" - "לא ניתן היה לטעון את התמונה" - "לא ניתן היה לטעון את התמונה כטפט" - - "‏%1$d נבחרו" - "‏%1$d נבחרו" - "‏%1$d נבחרו" - - "‏טפט %1$d מתוך %2$d" - "בחרת %1$s" - "מחק" - "בחר תמונה" - "טפטים" - "חתוך את הטפט" "האפליקציה לא מותקנת." "רכיבי ווידג\'ט" "רכיבי ווידג\'ט" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 3c2b2f0ba9..1de0be5c32 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -23,20 +23,6 @@ "ホーム" "Android Core Apps" - "壁紙を設定" - "画像を読み込めませんでした" - "画像を壁紙として読み込めませんでした" - - "%1$d件選択済み" - "%1$d件選択済み" - "%1$d件選択済み" - - "壁紙: %1$d/%2$d" - "選択: %1$s" - "削除" - "画像を選択" - "壁紙" - "壁紙をトリミング" "このアプリはインストールされていません。" "ウィジェット" "ウィジェット" diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index a68951a156..c004f07f1c 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -23,20 +23,6 @@ "მთავარი" "Android-ის ბირთვის აპები" - "ფონის დაყენება" - "სურათი ვერ ჩაიტვირთა." - "სურათი ფონად ვერ ჩაიტვირთა." - - "არჩეულია %1$d" - "არჩეულია %1$d" - "არჩეულია %1$d" - - "ფონი %1$d %2$d-დან" - "არჩეულია %1$s" - "წაშლა" - "სურათის ამორჩევა" - "ფონები" - "ფონის ჩამოჭრა" "აპი არ არის დაყენებული." "ვიჯეტები" "ვიჯეტები" diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index 6799f77550..84781bcc21 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -23,20 +23,6 @@ "ដើម" "កម្មវិធី​​សំខាន់​ៗ​របស់ Android" - "កំណត់​ផ្ទាំង​រូបភាព" - "មិន​អាច​ផ្ទុក​រូបភាព" - "មិន​អាច​ផ្ទុក​រូបភាព​ជា​ផ្ទាំង​រូបភាព" - - "បាន​ជ្រើស %1$d" - "បាន​ជ្រើស %1$d" - "បាន​ជ្រើស %1$d" - - "ផ្ទាំង​រូបភាព %1$d នៃ %2$d" - "​បាន​ជ្រើស %1$s" - "លុប" - "ជ្រើស​យក​រូបភាព" - "ផ្ទាំង​រូបភាព" - "ច្រឹប​ផ្ទាំង​រូបភាព" "មិន​បាន​ដំឡើង​កម្មវិធី។" "ធាតុ​ក្រាហ្វិក" "ធាតុ​ក្រាហ្វិក" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 82193d2d79..59f2103d89 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -23,20 +23,6 @@ "홈" "Android 핵심 앱" - "배경화면 설정" - "이미지를 로드할 수 없습니다." - "이미지를 배경화면으로 로드할 수 없습니다." - - "%1$d개 선택됨" - "%1$d개 선택됨" - "%1$d개 선택됨" - - "배경화면 %1$d/%2$d" - "%1$s 선택함" - "삭제" - "이미지 선택" - "배경화면" - "배경화면 잘라내기" "앱이 설치되지 않았습니다." "위젯" "위젯" diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index fac96e42f9..ad2feeab45 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -23,20 +23,6 @@ "ໜ້າຫຼັກ" "ແອັບພລິເຄຊັນຫຼັກຂອງ Android" - "ຕັ້ງເປັນພາບພື້ນຫຼັງ" - "ບໍ່ສາມາດໂຫຼດຮູບພາບໄດ້" - "ບໍ່​ສາ​ມາດ​ໂຫຼດ​ຮູບພາບ​ເປັນ​ຮູບພື້ນຫຼັງໄດ້" - - "ເລືອກ %1$d ລາຍການແລ້ວ" - "ເລືອກ %1$d ລາຍການແລ້ວ" - "ເລືອກ %1$d ລາຍການແລ້ວ" - - "ຮູບພືື້ນຫຼັງ %1$d ໃນ %2$d" - "ເລືອກແລ້ວ %1$s ອັນ" - "ລຶບ" - "ເລືອກຮູບ" - "ພາບພື້ນຫຼັງ" - "ຕັດຮູບພື້ນຫຼັງ" "ແອັບຯບໍ່ໄດ້ຖືກຕິດຕັ້ງ." "ວິດເຈັດ" "ວິດເຈັດ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 1d53bf1eff..8b1f396032 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -23,20 +23,6 @@ "Pagrindinis" "Pagrindinės „Android“ programos" - "Nustatyti ekrano foną" - "Nepavyko įkelti vaizdo" - "Nepavyko įkelti vaizdo kaip ekrano fono" - - "Pasirinkta: %1$d" - "Pasirinkta: %1$d" - "Pasirinkta: %1$d" - - "%1$d iš %2$d ekrano fonų" - "Pasirinkta: %1$s" - "Ištrinti" - "Pasirinkti vaizdą" - "Ekrano fonai" - "Ekrano fono apkirpimas" "Programa neįdiegta." "Valdikliai" "Valdikliai" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 856439b7a8..964d84d133 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -23,20 +23,6 @@ "Sākums" "Android pamatlietotnes" - "Iestatīt fona tapeti" - "Nevarēja ielādēt attēlu." - "Nevarēja ielādēt attēlu kā fona tapeti." - - "Atlasīti: %1$d" - "Atlasīti: %1$d" - "Atlasīti: %1$d" - - "%1$d. fona tapete no %2$d" - "Atlasīts: %1$s" - "Dzēst" - "Izvēlēties attēlu" - "Fona tapetes" - "Apgriezt fona tapeti" "Lietotne nav instalēta." "Logrīki" "Logrīki" diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 20af05e0d1..bed237a832 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -23,20 +23,6 @@ "Нүүр" "Андройд үндсэн апп" - "Ханын зургийг тохируулах" - "Зургийг ачааллаж чадсангүй" - "Зургийг ханын зураг болгож ачааллаж чадсангүй" - - "%1$d сонгогдсон" - "%1$d сонгогдсон" - "%1$d сонгогдсон" - - "%2$d ханын цаасны %1$d нь" - "%1$s сонгогдсон" - "Устгах" - "Зураг сонгох" - "Ханын зураг" - "Ханын зургийг тайрах" "Апп суугаагүй байна." "Виджет" "Виджет" diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index dca483d3e8..3558b25107 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -23,20 +23,6 @@ "Laman Utama" "Apl Teras Android" - "Tetapkan kertas dinding" - "Tidak dapat memuatkan imej" - "Tidak dapat memuatkan imej sebagai kertas dinding" - - "%1$d dipilih" - "%1$d dipilih" - "%1$d dipilih" - - "Kertas dinding %1$d daripada %2$d" - "Memilih %1$s" - "Padam" - "Pilih imej" - "Kertas dinding" - "Pangkas kertas dinding" "Apl tidak dipasang." "Widget" "Widget" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 9cb161fe2d..13d87591e1 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -23,20 +23,6 @@ "Startside" "Kjerneapper for Android" - "Angi bakgrunn" - "Kunne ikke laste inn bildet" - "Kunne ikke laste inn bildet som bakgrunn" - - "%1$d valgt" - "%1$d valgt" - "%1$d valgt" - - "Bakgrunn %1$d of %2$d" - "Valgt %1$s" - "Slett" - "Velg bilde" - "Bakgrunner" - "Beskjær bakgrunnen" "Appen er ikke installert." "Moduler" "Moduler" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index e28b3955c5..aa035a09ab 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -23,20 +23,6 @@ "Startpagina" "Android-kernapps" - "Achtergrond instellen" - "Kan afbeelding niet laden" - "Kan afbeelding niet laden als achtergrond" - - "%1$d geselecteerd" - "%1$d geselecteerd" - "%1$d geselecteerd" - - "Achtergrond %1$d van %2$d" - "%1$s is geselecteerd" - "Verwijderen" - "Afbeelding kiezen" - "Achtergronden" - "Achtergrond bijsnijden" "App is niet geïnstalleerd." "Widgets" "Widgets" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index ec72374d53..9eade81a9a 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -23,20 +23,6 @@ "Ekran główny" "Główne aplikacje Androida" - "Ustaw tapetę" - "Nie udało się załadować obrazu" - "Nie udało się załadować obrazu jako tapety" - - "Wybrane: %1$d" - "Wybrane: %1$d" - "Wybrane: %1$d" - - "Tapeta %1$d z %2$d" - "Wybrano %1$s" - "Usuń" - "Wybierz obraz" - "Tapety" - "Przytnij tapetę" "Aplikacja nie jest zainstalowana." "Widżety" "Widżety" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 510468e2ed..4c9401dc38 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -23,20 +23,6 @@ "Ecrã principal" "Aplicações principais do Android" - "Definir imagem fundo" - "Não foi possível carregar a imagem" - "Não foi possível carregar a imagem como imagem de fundo" - - "%1$d selecionado(s)" - "%1$d selecionado(s)" - "%1$d selecionado(s)" - - "Imagem de fundo %1$d de %2$d" - "%1$s selecionado" - "Eliminar" - "Escolher imagem" - "Imagens de fundo" - "Recortar imagem de fundo" "A aplicação não está instalada." "Widgets" "Widgets" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 1ac9f5b49a..d82d9ea1d2 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -23,20 +23,6 @@ "Início" "Principais aplicativos do Android" - "Definir plano de fundo" - "Não foi possível carregar a imagem" - "Não foi possível carregar a imagem como plano de fundo" - - "%1$d selecionados" - "%1$d selecionados" - "%1$d selecionados" - - "Plano de fundo %1$d de %2$d" - "%1$s selecionado" - "Excluir" - "Escolher imagem" - "Planos de fundo" - "Cortar plano de fundo" "O aplicativo não está instalado." "Widgets" "Widgets" diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml index 2015158d9b..246553467b 100644 --- a/res/values-rm/strings.xml +++ b/res/values-rm/strings.xml @@ -26,27 +26,6 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 85023c3d19..016dd918c2 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -23,20 +23,6 @@ "Ecran de pornire" "Android Core Apps" - "Setați imaginea de fundal" - "Nu s-a putut încărca imaginea" - "Nu s-a putut încărca imaginea ca fundal" - - "%1$d selectate" - "%1$d selectat" - "%1$d selectate" - - "Imaginea de fundal %1$d din %2$d" - "S-a selectat %1$s" - "Ștergeți" - "Alegeți imaginea" - "Imagini de fundal" - "Decupați imaginea de fundal" "Aplicația nu este instalată." "Widgeturi" "Widgeturi" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index c8a2287eb8..8d0984da29 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -23,20 +23,6 @@ "Главный экран" "Основные приложения Android" - "Установить как обои" - "Не удалось загрузить изображение" - "Не удалось загрузить изображение" - - "Выбрано: %1$d" - "Выбрано: %1$d" - "Выбрано: %1$d" - - "Обои %1$d из %2$d" - "Выбран элемент \"%1$s\"" - "Удалить" - "Выбрать изображение" - "Обои" - "Обрезать обои" "Приложение удалено" "Виджеты" "Виджеты" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 77fd07df4e..3a4b03348a 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -23,20 +23,6 @@ "Plocha" "Android Core Apps" - "Nastaviť tapetu" - "Obrázok nie je možné načítať" - "Obrázok nie je možné načítať ako tapetu" - - "Počet vybratých položiek: %1$d" - "Počet vybratých položiek: %1$d" - "Počet vybratých položiek: %1$d" - - "Tapeta %1$d z %2$d" - "Vybratá položka %1$s" - "Odstrániť" - "Vybrať obrázok" - "Tapety" - "Orezanie tapety" "Aplikácia nie je nainštalovaná." "Miniaplikácie" "Miniaplikácie" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 28392fe4cb..68086dbc1c 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -23,20 +23,6 @@ "Začetni zaslon" "Osnovne aplikacije sistema Android" - "Nastavi ozadje" - "Slike ni bilo mogoče naložiti" - "Slike ni bilo mogoče naložiti kot ozadja" - - "Št. izbranih: %1$d" - "Št. izbranih: %1$d" - "Št. izbranih: %1$d" - - "Ozadje %1$d od %2$d" - "Izbrano: %1$s" - "Izbriši" - "Izberi sliko" - "Ozadja" - "Obrezovanje ozadja" "Aplikacija ni nameščena." "Pripomočki" "Pripomočki" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 82c825b374..6ab175069d 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -23,20 +23,6 @@ "Почетна" "Основне Android апликације" - "Подеси позадину" - "Није могуће учитати слику" - "Није могуће учитати слику као позадину" - - "Изабранo je %1$d" - "Изабрана je %1$d" - "Изабранo je %1$d" - - "Позадина %1$d од %2$d" - "Изабрано је %1$s" - "Избриши" - "Изабери слику" - "Позадине" - "Опсецање позадине" "Апликација није инсталирана." "Виџети" "Виџети" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 9d9c544007..c6dcb18ff3 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -23,20 +23,6 @@ "Startskärm" "Android Core Apps" - "Ange bakgrund" - "Det gick inte att läsa in bilden" - "Det gick inte att läsa in bilden som bakgrund" - - "%1$d har valts" - "%1$d har valts" - "%1$d har valts" - - "Bakgrund %1$d av %2$d" - "%1$s har valts" - "Ta bort" - "Välj bild" - "Bakgrunder" - "Beskär bakgrund" "Appen är inte installerad." "Widgetar" "Widgetar" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index d83fc16871..e0ae27924d 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -23,20 +23,6 @@ "Mwanzo" "Programu Msingi za Android" - "Weka mandhari" - "Haikuweza kupakia picha" - "Haikuweza kupakia picha kama mandhari" - - "%1$d zimechaguliwa" - "%1$d zimechaguliwa" - "%1$d zimechaguliwa" - - "Mandhari %1$d ya %2$d" - "%1$s iliyochaguliwa" - "Futa" - "Chukua picha" - "Mandhari" - "Punguza mandhari" "Programu haijasakinishwa." "Wijeti" "Wijeti" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 9d78b3bdac..0a9ea784dc 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -23,20 +23,6 @@ "หน้าแรก" "แอปหลักของแอนดรอยด์" - "ตั้งค่าวอลเปเปอร์" - "ไม่สามารถโหลดรูปภาพ" - "ไม่สามารถโหลดรูปภาพเป็นวอลเปเปอร์" - - "เลือกไว้ %1$d" - "เลือกไว้ %1$d" - "เลือกไว้ %1$d" - - "วอลเปเปอร์ %1$d จาก %2$d" - "เลือก %1$s แล้ว" - "ลบ" - "เลือกภาพ" - "วอลเปเปอร์" - "ครอบตัดวอลล์เปเปอร์" "ไม่ได้ติดตั้งแอป" "วิดเจ็ต" "วิดเจ็ต" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index bdc23637d9..41de1c02c7 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -23,20 +23,6 @@ "Home" "Android Core Apps" - "Itakda ang wallpaper" - "Hindi ma-load ang larawan" - "Hindi ma-load ang larawan bilang wallpaper" - - "%1$d ang napili" - "%1$d ang napili" - "%1$d ang napili" - - "Wallpaper %1$d ng %2$d" - "Napili ang %1$s" - "Tanggalin" - "Pumili ng larawan" - "Mga Wallpaper" - "I-crop ang wallpaper" "Hindi naka-install ang app." "Mga Widget" "Mga Widget" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index e2fbf21253..e77d76b8e8 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -23,20 +23,6 @@ "Ana ekran" "Android Çekirdek Uygulamaları" - "Duvar kağıdını ayarla" - "Resim yüklenemedi" - "Resim duvar kağıdı olarak yüklenemedi" - - "%1$d tane seçildi" - "%1$d tane seçildi" - "%1$d tane seçildi" - - "Duvar kağıdı %1$d / %2$d" - "%1$s seçildi" - "Sil" - "Resim seç" - "Duvar Kağıtları" - "Duvar kağıdını kırp" "Uygulama yüklü değil." "Widget\'lar" "Widget\'lar" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 6b397a051e..5a32a479e6 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -23,20 +23,6 @@ "Головний екран" "Базові програми Android" - "Установити фон" - "Не вдалося завантажити зображення" - "Не вдалося завантажити зображення як фоновий малюнок" - - "Вибрано %1$d" - "Вибрано %1$d" - "Вибрано %1$d" - - "Фоновий малюнок %1$d з %2$d" - "Вибрано %1$s" - "Видалити" - "Вибрати зображення" - "Фонові малюнки" - "Обрізати фоновий малюнок" "Програму не встановлено." "Віджети" "Віджети" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index abe4dec23c..4c15bc80e4 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -23,20 +23,6 @@ "Màn hình chính" "Ứng dụng lõi Android" - "Đặt hình nền" - "Không thể tải hình ảnh" - "Không thể tải hình ảnh làm hình nền" - - "Đã chọn %1$d" - "Đã chọn %1$d" - "Đã chọn %1$d" - - "Hình nền %1$d / %2$d" - "%1$s được chọn" - "Xóa" - "Chọn hình ảnh" - "Hình nền" - "Cắt hình nền" "Ứng dụng chưa được cài đặt." "Tiện ích con" "Tiện ích con" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index d8d260d4ea..8a6d9c64c0 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -23,20 +23,6 @@ "主屏" "Android 核心应用" - "设置壁纸" - "无法加载图片" - "无法加载要设为壁纸的图片" - - "已选择%1$d项" - "已选择%1$d项" - "已选择%1$d项" - - "第%1$d张壁纸,共%2$d张" - "已选择%1$s" - "删除" - "选择图片" - "壁纸" - "剪裁壁纸" "未安装该应用。" "小部件" "小部件" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 56ea177256..9d1e305799 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -23,20 +23,6 @@ "主畫面" "Android 核心應用程式" - "設定桌布" - "無法載入圖片" - "無法載入圖片設為桌布" - - "已選取 %1$d 個" - "已選取 %1$d 個" - "已選取 %1$d 個" - - "第 %1$d 張桌布,共 %2$d 張" - "已選取「%1$s」" - "刪除" - "選擇圖片" - "桌布" - "裁剪桌布" "尚未安裝應用程式。" "小工具" "小工具" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 0520c9d649..6d82cf80e0 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -23,20 +23,6 @@ "主螢幕" "Android 核心應用程式" - "設定桌布" - "無法載入圖片" - "無法載入您要設為桌布的圖片" - - "已選取 %1$d 個項目" - "已選取 %1$d 個項目" - "已選取 %1$d 個項目" - - "第 %1$d 張桌布,共 %2$d 張" - "已選取%1$s" - "刪除" - "選擇圖片" - "桌布" - "裁剪桌布" "應用程式未安裝。" "小工具" "小工具" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index dafb95d177..2cde50a328 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -23,20 +23,6 @@ "Ikhaya" "Izinhlelo zokusebenza ze-Android Core" - "Setha isithombe sangemuva" - "Ayikwazanga ukulayisha isithombe" - "Ayikwazanga ukulayisha isithombe njengesithombe sangemuva" - - "%1$d khethiwe" - "%1$d khethiwe" - "%1$d khethiwe" - - "Isithombe sangemuva se-%1$d of %2$d" - "I-%1$s ekhethiwe" - "Susa" - "Thatha isithombe" - "Izithombe zangemuva" - "Nqampuna isithombe sangemuva" "Uhlelo lokusebenza alufakiwe." "Amawijethi" "Amawijethi" From 69413c91c5839fd061f2422ea603faf11a5dd629 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Wed, 11 Dec 2013 17:09:53 +0100 Subject: [PATCH 070/147] Move additional wallpaper picker files to special dir Change-Id: I3dd6f0ce4db72f9f30ed02e8c27039f68ab9a728 --- update_system_wallpaper_cropper.py | 71 ++++++++++--------- .../android/launcher3/DrawableTileSource.java | 0 .../launcher3/LiveWallpaperListAdapter.java | 0 .../launcher3/SavedWallpaperImages.java | 0 .../ThirdPartyWallpaperPickerListAdapter.java | 0 .../android/launcher3/WallpaperRootView.java | 0 6 files changed, 37 insertions(+), 34 deletions(-) rename {src => wallpaper_picker_src}/com/android/launcher3/DrawableTileSource.java (100%) rename {src => wallpaper_picker_src}/com/android/launcher3/LiveWallpaperListAdapter.java (100%) rename {src => wallpaper_picker_src}/com/android/launcher3/SavedWallpaperImages.java (100%) rename {src => wallpaper_picker_src}/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java (100%) rename {src => wallpaper_picker_src}/com/android/launcher3/WallpaperRootView.java (100%) diff --git a/update_system_wallpaper_cropper.py b/update_system_wallpaper_cropper.py index 5d24f6ffea..36904f2153 100644 --- a/update_system_wallpaper_cropper.py +++ b/update_system_wallpaper_cropper.py @@ -5,42 +5,43 @@ # necessary so do this with care import os import sys +src_dir = "wallpaper_picker_src/" files = """ src/android/util/Pools.java -src/com/android/gallery3d/util/IntArray.java -src/com/android/gallery3d/common/Utils.java -src/com/android/gallery3d/exif/ByteBufferInputStream.java -src/com/android/gallery3d/exif/CountedDataInputStream.java -src/com/android/gallery3d/exif/ExifData.java -src/com/android/gallery3d/exif/ExifInterface.java -src/com/android/gallery3d/exif/ExifInvalidFormatException.java -src/com/android/gallery3d/exif/ExifModifier.java -src/com/android/gallery3d/exif/ExifOutputStream.java -src/com/android/gallery3d/exif/ExifParser.java -src/com/android/gallery3d/exif/ExifReader.java -src/com/android/gallery3d/exif/ExifTag.java -src/com/android/gallery3d/exif/IfdData.java -src/com/android/gallery3d/exif/IfdId.java -src/com/android/gallery3d/exif/JpegHeader.java -src/com/android/gallery3d/exif/OrderedDataOutputStream.java -src/com/android/gallery3d/exif/Rational.java -src/com/android/gallery3d/glrenderer/BasicTexture.java -src/com/android/gallery3d/glrenderer/BitmapTexture.java -src/com/android/gallery3d/glrenderer/GLCanvas.java -src/com/android/gallery3d/glrenderer/GLES20Canvas.java -src/com/android/gallery3d/glrenderer/GLES20IdImpl.java -src/com/android/gallery3d/glrenderer/GLId.java -src/com/android/gallery3d/glrenderer/GLPaint.java -src/com/android/gallery3d/glrenderer/RawTexture.java -src/com/android/gallery3d/glrenderer/Texture.java -src/com/android/gallery3d/glrenderer/UploadedTexture.java -src/com/android/photos/BitmapRegionTileSource.java -src/com/android/photos/views/BlockingGLTextureView.java -src/com/android/photos/views/TiledImageRenderer.java -src/com/android/photos/views/TiledImageView.java -src/com/android/gallery3d/common/BitmapUtils.java -src/com/android/launcher3/CropView.java -src/com/android/launcher3/WallpaperCropActivity.java +com/android/gallery3d/util/IntArray.java +com/android/gallery3d/common/Utils.java +com/android/gallery3d/exif/ByteBufferInputStream.java +com/android/gallery3d/exif/CountedDataInputStream.java +com/android/gallery3d/exif/ExifData.java +com/android/gallery3d/exif/ExifInterface.java +com/android/gallery3d/exif/ExifInvalidFormatException.java +com/android/gallery3d/exif/ExifModifier.java +com/android/gallery3d/exif/ExifOutputStream.java +com/android/gallery3d/exif/ExifParser.java +com/android/gallery3d/exif/ExifReader.java +com/android/gallery3d/exif/ExifTag.java +com/android/gallery3d/exif/IfdData.java +com/android/gallery3d/exif/IfdId.java +com/android/gallery3d/exif/JpegHeader.java +com/android/gallery3d/exif/OrderedDataOutputStream.java +com/android/gallery3d/exif/Rational.java +com/android/gallery3d/glrenderer/BasicTexture.java +com/android/gallery3d/glrenderer/BitmapTexture.java +com/android/gallery3d/glrenderer/GLCanvas.java +com/android/gallery3d/glrenderer/GLES20Canvas.java +com/android/gallery3d/glrenderer/GLES20IdImpl.java +com/android/gallery3d/glrenderer/GLId.java +com/android/gallery3d/glrenderer/GLPaint.java +com/android/gallery3d/glrenderer/RawTexture.java +com/android/gallery3d/glrenderer/Texture.java +com/android/gallery3d/glrenderer/UploadedTexture.java +com/android/photos/BitmapRegionTileSource.java +com/android/photos/views/BlockingGLTextureView.java +com/android/photos/views/TiledImageRenderer.java +com/android/photos/views/TiledImageView.java +com/android/gallery3d/common/BitmapUtils.java +com/android/launcher3/CropView.java +com/android/launcher3/WallpaperCropActivity.java """ if len(sys.argv) != 2: @@ -48,8 +49,10 @@ if len(sys.argv) != 2: exit() framework_dir = sys.argv[1] + "/packages/WallpaperCropper" for file_path in files.split(): + file_path = src_dir + file_path dir = os.path.dirname(file_path) dir = dir.replace("launcher3", "wallpapercropper") + dir = dir.replace(src_dir, "src/") cmd = 'cp %s %s/%s' % (file_path, framework_dir, dir) print cmd os.system(cmd) diff --git a/src/com/android/launcher3/DrawableTileSource.java b/wallpaper_picker_src/com/android/launcher3/DrawableTileSource.java similarity index 100% rename from src/com/android/launcher3/DrawableTileSource.java rename to wallpaper_picker_src/com/android/launcher3/DrawableTileSource.java diff --git a/src/com/android/launcher3/LiveWallpaperListAdapter.java b/wallpaper_picker_src/com/android/launcher3/LiveWallpaperListAdapter.java similarity index 100% rename from src/com/android/launcher3/LiveWallpaperListAdapter.java rename to wallpaper_picker_src/com/android/launcher3/LiveWallpaperListAdapter.java diff --git a/src/com/android/launcher3/SavedWallpaperImages.java b/wallpaper_picker_src/com/android/launcher3/SavedWallpaperImages.java similarity index 100% rename from src/com/android/launcher3/SavedWallpaperImages.java rename to wallpaper_picker_src/com/android/launcher3/SavedWallpaperImages.java diff --git a/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java b/wallpaper_picker_src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java similarity index 100% rename from src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java rename to wallpaper_picker_src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java diff --git a/src/com/android/launcher3/WallpaperRootView.java b/wallpaper_picker_src/com/android/launcher3/WallpaperRootView.java similarity index 100% rename from src/com/android/launcher3/WallpaperRootView.java rename to wallpaper_picker_src/com/android/launcher3/WallpaperRootView.java From 306c1cf200d4e334b19e09a5a5a2026d9f6d12b2 Mon Sep 17 00:00:00 2001 From: Nilesh Agrawal Date: Thu, 12 Dec 2013 14:56:00 -0800 Subject: [PATCH 071/147] Show widgets when ALL_APPS is disabled. Change-Id: I367448df69a63ffd3412fe4c99137a21426d285c --- src/com/android/launcher3/Launcher.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 318066b568..9485cea249 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2908,8 +2908,9 @@ public class Launcher extends Activity // Shrink workspaces away if going to AppsCustomize from workspace Animator workspaceAnim = mWorkspace.getChangeStateAnimation(Workspace.State.SMALL, animated); - if (!AppsCustomizePagedView.DISABLE_ALL_APPS) { - // Set the content type for the all apps space + if (!AppsCustomizePagedView.DISABLE_ALL_APPS + || contentType == AppsCustomizePagedView.ContentType.Widgets) { + // Set the content type for the all apps/widgets space mAppsCustomizeTabHost.setContentTypeImmediate(contentType); } @@ -4053,6 +4054,10 @@ public class Launcher extends Activity } mIntentsOnWorkspaceFromUpgradePath = null; } + if (mAppsCustomizeContent != null) { + mAppsCustomizeContent.onPackagesUpdated( + LauncherModel.getSortedWidgetsAndShortcuts(this)); + } } else { if (mAppsCustomizeContent != null) { mAppsCustomizeContent.setApps(apps); @@ -4141,8 +4146,7 @@ public class Launcher extends Activity } // Update the widgets pane - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && - mAppsCustomizeContent != null) { + if (mAppsCustomizeContent != null) { mAppsCustomizeContent.onPackagesUpdated(widgetsAndShortcuts); } } From 4de0974c460ce6439cce7931fb0ba945095a4b94 Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Thu, 12 Dec 2013 16:16:39 -0800 Subject: [PATCH 072/147] Fix NPE from feedback (issue 12106858) Change-Id: I63f7f73b85d4c1652d1e722f94c51b567a83cc6b --- src/com/android/launcher3/PagedView.java | 26 ++++++++++++------------ src/com/android/launcher3/Workspace.java | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index c216f926fd..1e4f4fa7f6 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1152,22 +1152,22 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc @Override protected void dispatchDraw(Canvas canvas) { - int halfScreenSize = getViewportWidth() / 2; - // mOverScrollX is equal to getScrollX() when we're within the normal scroll range. - // Otherwise it is equal to the scaled overscroll position. - int screenCenter = mOverScrollX + halfScreenSize; - - if (screenCenter != mLastScreenCenter || mForceScreenScrolled) { - // set mForceScreenScrolled before calling screenScrolled so that screenScrolled can - // set it for the next frame - mForceScreenScrolled = false; - screenScrolled(screenCenter); - mLastScreenCenter = screenCenter; - } - // Find out which screens are visible; as an optimization we only call draw on them final int pageCount = getChildCount(); if (pageCount > 0) { + int halfScreenSize = getViewportWidth() / 2; + // mOverScrollX is equal to getScrollX() when we're within the normal scroll range. + // Otherwise it is equal to the scaled overscroll position. + int screenCenter = mOverScrollX + halfScreenSize; + + if (screenCenter != mLastScreenCenter || mForceScreenScrolled) { + // set mForceScreenScrolled before calling screenScrolled so that screenScrolled can + // set it for the next frame + mForceScreenScrolled = false; + screenScrolled(screenCenter); + mLastScreenCenter = screenCenter; + } + getVisiblePages(mTempVisiblePagesRange); final int leftScreen = mTempVisiblePagesRange[0]; final int rightScreen = mTempVisiblePagesRange[1]; diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 72399e4ece..52420b73b9 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1666,7 +1666,7 @@ public class Workspace extends SmoothPagedView cl.setOverscrollTransformsDirty(true); } } else { - if (mOverscrollTransformsSet) { + if (mOverscrollTransformsSet && getChildCount() > 0) { mOverscrollTransformsSet = false; ((CellLayout) getChildAt(0)).resetOverscrollTransforms(); ((CellLayout) getChildAt(getChildCount() - 1)).resetOverscrollTransforms(); From 7ad868b86e45d6f58c186d2731ab2beb84643757 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Thu, 12 Dec 2013 15:04:25 +0100 Subject: [PATCH 073/147] Create separate project for Wallpaper Picker Change-Id: Id9e855780b9fb68c63eb6e9f6c19bcbce28a6fd5 --- Android.mk | 4 +-- AndroidManifest.xml | 2 +- WallpaperPicker/AndroidManifest.xml | 10 ++++++ WallpaperPicker/README | 4 +++ .../drawable-hdpi/ic_actionbar_accept.png | Bin .../res}/drawable-hdpi/ic_images.png | Bin .../drawable-hdpi/tile_picker_focused.9.png | Bin .../drawable-hdpi/tile_picker_pressed.9.png | Bin .../drawable-hdpi/tile_picker_selected.9.png | Bin .../drawable-hdpi/tile_shadow_bottom.9.png | Bin .../res}/drawable-hdpi/tile_shadow_top.9.png | Bin .../drawable-mdpi/ic_actionbar_accept.png | Bin .../res}/drawable-mdpi/ic_images.png | Bin .../drawable-mdpi/tile_picker_focused.9.png | Bin .../drawable-mdpi/tile_picker_pressed.9.png | Bin .../drawable-mdpi/tile_picker_selected.9.png | Bin .../drawable-mdpi/tile_shadow_bottom.9.png | Bin .../res}/drawable-mdpi/tile_shadow_top.9.png | Bin .../drawable-xhdpi/ic_actionbar_accept.png | Bin .../res}/drawable-xhdpi/ic_images.png | Bin .../drawable-xhdpi/tile_picker_focused.9.png | Bin .../drawable-xhdpi/tile_picker_pressed.9.png | Bin .../drawable-xhdpi/tile_picker_selected.9.png | Bin .../drawable-xhdpi/tile_shadow_bottom.9.png | Bin .../res}/drawable-xhdpi/tile_shadow_top.9.png | Bin .../res}/drawable-xxhdpi/ic_images.png | Bin .../drawable-xxhdpi/tile_picker_focused.9.png | Bin .../drawable-xxhdpi/tile_picker_pressed.9.png | Bin .../tile_picker_selected.9.png | Bin .../drawable-xxhdpi/tile_shadow_bottom.9.png | Bin .../drawable-xxhdpi/tile_shadow_top.9.png | Bin .../res}/drawable/wallpaper_tile_fg.xml | 0 .../res}/layout/actionbar_set_wallpaper.xml | 0 .../res}/layout/wallpaper_cropper.xml | 0 .../res}/layout/wallpaper_picker.xml | 0 .../wallpaper_picker_image_picker_item.xml | 0 .../res}/layout/wallpaper_picker_item.xml | 0 .../wallpaper_picker_live_wallpaper_item.xml | 0 .../wallpaper_picker_third_party_item.xml | 0 .../res}/menu/cab_delete_wallpapers.xml | 0 .../mipmap-hdpi/ic_launcher_wallpaper.png | Bin .../mipmap-mdpi/ic_launcher_wallpaper.png | Bin .../mipmap-xhdpi/ic_launcher_wallpaper.png | Bin .../mipmap-xxhdpi/ic_launcher_wallpaper.png | Bin .../res}/values-nodpi/wallpapers.xml | 0 WallpaperPicker/res/values-sw600dp/config.xml | 18 ++++++++++ .../res}/values-sw720dp/dimens.xml | 0 .../res}/values-sw720dp/styles.xml | 0 .../res}/values/colors.xml | 0 WallpaperPicker/res/values/config.xml | 18 ++++++++++ .../res}/values/dimens.xml | 0 .../res}/values/strings.xml | 0 .../res}/values/styles.xml | 0 .../src}/android/util/Pools.java | 0 .../android/gallery3d/common/BitmapUtils.java | 0 .../com/android/gallery3d/common/Utils.java | 0 .../gallery3d/exif/ByteBufferInputStream.java | 0 .../exif/CountedDataInputStream.java | 0 .../com/android/gallery3d/exif/ExifData.java | 0 .../android/gallery3d/exif/ExifInterface.java | 0 .../exif/ExifInvalidFormatException.java | 0 .../android/gallery3d/exif/ExifModifier.java | 0 .../gallery3d/exif/ExifOutputStream.java | 0 .../android/gallery3d/exif/ExifParser.java | 0 .../android/gallery3d/exif/ExifReader.java | 0 .../com/android/gallery3d/exif/ExifTag.java | 0 .../com/android/gallery3d/exif/IfdData.java | 0 .../com/android/gallery3d/exif/IfdId.java | 0 .../android/gallery3d/exif/JpegHeader.java | 0 .../exif/OrderedDataOutputStream.java | 0 .../com/android/gallery3d/exif/Rational.java | 0 .../gallery3d/glrenderer/BasicTexture.java | 0 .../gallery3d/glrenderer/BitmapTexture.java | 0 .../gallery3d/glrenderer/GLCanvas.java | 0 .../gallery3d/glrenderer/GLES20Canvas.java | 0 .../gallery3d/glrenderer/GLES20IdImpl.java | 0 .../android/gallery3d/glrenderer/GLId.java | 0 .../android/gallery3d/glrenderer/GLPaint.java | 0 .../gallery3d/glrenderer/RawTexture.java | 0 .../android/gallery3d/glrenderer/Texture.java | 0 .../gallery3d/glrenderer/UploadedTexture.java | 0 .../com/android/gallery3d/util/IntArray.java | 0 .../launcher3/CheckableFrameLayout.java | 0 .../src}/com/android/launcher3/CropView.java | 0 .../android/launcher3/DrawableTileSource.java | 0 .../launcher3/LiveWallpaperListAdapter.java | 3 +- .../launcher3/SavedWallpaperImages.java | 0 .../ThirdPartyWallpaperPickerListAdapter.java | 4 +-- .../launcher3/WallpaperCropActivity.java | 0 .../launcher3/WallpaperPickerActivity.java | 34 +++++++++--------- .../android/launcher3/WallpaperRootView.java | 0 .../photos/BitmapRegionTileSource.java | 0 .../photos/views/BlockingGLTextureView.java | 0 .../photos/views/TiledImageRenderer.java | 0 .../android/photos/views/TiledImageView.java | 0 src/com/android/launcher3/Launcher.java | 2 +- .../LauncherWallpaperPickerActivity.java | 30 ++++++++++++++++ src/com/android/launcher3/Utilities.java | 16 +++++++++ src/com/android/launcher3/Workspace.java | 2 +- update_system_wallpaper_cropper.py | 2 +- 100 files changed, 122 insertions(+), 27 deletions(-) create mode 100644 WallpaperPicker/AndroidManifest.xml create mode 100644 WallpaperPicker/README rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-hdpi/ic_actionbar_accept.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-hdpi/ic_images.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-hdpi/tile_picker_focused.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-hdpi/tile_picker_pressed.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-hdpi/tile_picker_selected.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-hdpi/tile_shadow_bottom.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-hdpi/tile_shadow_top.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-mdpi/ic_actionbar_accept.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-mdpi/ic_images.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-mdpi/tile_picker_focused.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-mdpi/tile_picker_pressed.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-mdpi/tile_picker_selected.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-mdpi/tile_shadow_bottom.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-mdpi/tile_shadow_top.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xhdpi/ic_actionbar_accept.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xhdpi/ic_images.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xhdpi/tile_picker_focused.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xhdpi/tile_picker_pressed.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xhdpi/tile_picker_selected.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xhdpi/tile_shadow_bottom.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xhdpi/tile_shadow_top.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xxhdpi/ic_images.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xxhdpi/tile_picker_focused.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xxhdpi/tile_picker_pressed.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xxhdpi/tile_picker_selected.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xxhdpi/tile_shadow_bottom.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable-xxhdpi/tile_shadow_top.9.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/drawable/wallpaper_tile_fg.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/layout/actionbar_set_wallpaper.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/layout/wallpaper_cropper.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/layout/wallpaper_picker.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/layout/wallpaper_picker_image_picker_item.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/layout/wallpaper_picker_item.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/layout/wallpaper_picker_live_wallpaper_item.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/layout/wallpaper_picker_third_party_item.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/menu/cab_delete_wallpapers.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/mipmap-hdpi/ic_launcher_wallpaper.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/mipmap-mdpi/ic_launcher_wallpaper.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/mipmap-xhdpi/ic_launcher_wallpaper.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/mipmap-xxhdpi/ic_launcher_wallpaper.png (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/values-nodpi/wallpapers.xml (100%) create mode 100644 WallpaperPicker/res/values-sw600dp/config.xml rename {wallpaper_picker_res => WallpaperPicker/res}/values-sw720dp/dimens.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/values-sw720dp/styles.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/values/colors.xml (100%) create mode 100644 WallpaperPicker/res/values/config.xml rename {wallpaper_picker_res => WallpaperPicker/res}/values/dimens.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/values/strings.xml (100%) rename {wallpaper_picker_res => WallpaperPicker/res}/values/styles.xml (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/android/util/Pools.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/common/BitmapUtils.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/common/Utils.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/ByteBufferInputStream.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/CountedDataInputStream.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/ExifData.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/ExifInterface.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/ExifInvalidFormatException.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/ExifModifier.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/ExifOutputStream.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/ExifParser.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/ExifReader.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/ExifTag.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/IfdData.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/IfdId.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/JpegHeader.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/OrderedDataOutputStream.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/exif/Rational.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/BasicTexture.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/BitmapTexture.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/GLCanvas.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/GLES20Canvas.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/GLES20IdImpl.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/GLId.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/GLPaint.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/RawTexture.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/Texture.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/glrenderer/UploadedTexture.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/gallery3d/util/IntArray.java (100%) rename {src => WallpaperPicker/src}/com/android/launcher3/CheckableFrameLayout.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/launcher3/CropView.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/launcher3/DrawableTileSource.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/launcher3/LiveWallpaperListAdapter.java (98%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/launcher3/SavedWallpaperImages.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java (97%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/launcher3/WallpaperCropActivity.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/launcher3/WallpaperPickerActivity.java (97%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/launcher3/WallpaperRootView.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/photos/BitmapRegionTileSource.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/photos/views/BlockingGLTextureView.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/photos/views/TiledImageRenderer.java (100%) rename {wallpaper_picker_src => WallpaperPicker/src}/com/android/photos/views/TiledImageView.java (100%) create mode 100644 src/com/android/launcher3/LauncherWallpaperPickerActivity.java diff --git a/Android.mk b/Android.mk index 840b161c56..dbce33f8b4 100644 --- a/Android.mk +++ b/Android.mk @@ -26,10 +26,10 @@ LOCAL_MODULE_TAGS := optional LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13 LOCAL_SRC_FILES := $(call all-java-files-under, src) \ - $(call all-java-files-under, wallpaper_picker_src) \ + $(call all-java-files-under, WallpaperPicker/src) \ $(call all-renderscript-files-under, src) \ $(call all-proto-files-under, protos) -LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/wallpaper_picker_res $(LOCAL_PATH)/res +LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/WallpaperPicker/res $(LOCAL_PATH)/res LOCAL_AAPT_FLAGS := --auto-add-overlay diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 1e418ec2f1..4e27e6f27c 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -104,7 +104,7 @@ + + + + + diff --git a/WallpaperPicker/README b/WallpaperPicker/README new file mode 100644 index 0000000000..d8efb07f61 --- /dev/null +++ b/WallpaperPicker/README @@ -0,0 +1,4 @@ +This project contains the wallpaper picker for Launcher3. It's in a separate +folder to organize the code separately from the rest of the launcher, and has +a manifest so that a separate Eclipse project can exist for the wallpaper +picker (necessary to have the Eclipse build work) \ No newline at end of file diff --git a/wallpaper_picker_res/drawable-hdpi/ic_actionbar_accept.png b/WallpaperPicker/res/drawable-hdpi/ic_actionbar_accept.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/ic_actionbar_accept.png rename to WallpaperPicker/res/drawable-hdpi/ic_actionbar_accept.png diff --git a/wallpaper_picker_res/drawable-hdpi/ic_images.png b/WallpaperPicker/res/drawable-hdpi/ic_images.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/ic_images.png rename to WallpaperPicker/res/drawable-hdpi/ic_images.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_picker_focused.9.png b/WallpaperPicker/res/drawable-hdpi/tile_picker_focused.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_picker_focused.9.png rename to WallpaperPicker/res/drawable-hdpi/tile_picker_focused.9.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_picker_pressed.9.png b/WallpaperPicker/res/drawable-hdpi/tile_picker_pressed.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_picker_pressed.9.png rename to WallpaperPicker/res/drawable-hdpi/tile_picker_pressed.9.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_picker_selected.9.png b/WallpaperPicker/res/drawable-hdpi/tile_picker_selected.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_picker_selected.9.png rename to WallpaperPicker/res/drawable-hdpi/tile_picker_selected.9.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_shadow_bottom.9.png b/WallpaperPicker/res/drawable-hdpi/tile_shadow_bottom.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_shadow_bottom.9.png rename to WallpaperPicker/res/drawable-hdpi/tile_shadow_bottom.9.png diff --git a/wallpaper_picker_res/drawable-hdpi/tile_shadow_top.9.png b/WallpaperPicker/res/drawable-hdpi/tile_shadow_top.9.png similarity index 100% rename from wallpaper_picker_res/drawable-hdpi/tile_shadow_top.9.png rename to WallpaperPicker/res/drawable-hdpi/tile_shadow_top.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/ic_actionbar_accept.png b/WallpaperPicker/res/drawable-mdpi/ic_actionbar_accept.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/ic_actionbar_accept.png rename to WallpaperPicker/res/drawable-mdpi/ic_actionbar_accept.png diff --git a/wallpaper_picker_res/drawable-mdpi/ic_images.png b/WallpaperPicker/res/drawable-mdpi/ic_images.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/ic_images.png rename to WallpaperPicker/res/drawable-mdpi/ic_images.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_picker_focused.9.png b/WallpaperPicker/res/drawable-mdpi/tile_picker_focused.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_picker_focused.9.png rename to WallpaperPicker/res/drawable-mdpi/tile_picker_focused.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_picker_pressed.9.png b/WallpaperPicker/res/drawable-mdpi/tile_picker_pressed.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_picker_pressed.9.png rename to WallpaperPicker/res/drawable-mdpi/tile_picker_pressed.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_picker_selected.9.png b/WallpaperPicker/res/drawable-mdpi/tile_picker_selected.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_picker_selected.9.png rename to WallpaperPicker/res/drawable-mdpi/tile_picker_selected.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_shadow_bottom.9.png b/WallpaperPicker/res/drawable-mdpi/tile_shadow_bottom.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_shadow_bottom.9.png rename to WallpaperPicker/res/drawable-mdpi/tile_shadow_bottom.9.png diff --git a/wallpaper_picker_res/drawable-mdpi/tile_shadow_top.9.png b/WallpaperPicker/res/drawable-mdpi/tile_shadow_top.9.png similarity index 100% rename from wallpaper_picker_res/drawable-mdpi/tile_shadow_top.9.png rename to WallpaperPicker/res/drawable-mdpi/tile_shadow_top.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/ic_actionbar_accept.png b/WallpaperPicker/res/drawable-xhdpi/ic_actionbar_accept.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/ic_actionbar_accept.png rename to WallpaperPicker/res/drawable-xhdpi/ic_actionbar_accept.png diff --git a/wallpaper_picker_res/drawable-xhdpi/ic_images.png b/WallpaperPicker/res/drawable-xhdpi/ic_images.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/ic_images.png rename to WallpaperPicker/res/drawable-xhdpi/ic_images.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_picker_focused.9.png b/WallpaperPicker/res/drawable-xhdpi/tile_picker_focused.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_picker_focused.9.png rename to WallpaperPicker/res/drawable-xhdpi/tile_picker_focused.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_picker_pressed.9.png b/WallpaperPicker/res/drawable-xhdpi/tile_picker_pressed.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_picker_pressed.9.png rename to WallpaperPicker/res/drawable-xhdpi/tile_picker_pressed.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_picker_selected.9.png b/WallpaperPicker/res/drawable-xhdpi/tile_picker_selected.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_picker_selected.9.png rename to WallpaperPicker/res/drawable-xhdpi/tile_picker_selected.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_shadow_bottom.9.png b/WallpaperPicker/res/drawable-xhdpi/tile_shadow_bottom.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_shadow_bottom.9.png rename to WallpaperPicker/res/drawable-xhdpi/tile_shadow_bottom.9.png diff --git a/wallpaper_picker_res/drawable-xhdpi/tile_shadow_top.9.png b/WallpaperPicker/res/drawable-xhdpi/tile_shadow_top.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xhdpi/tile_shadow_top.9.png rename to WallpaperPicker/res/drawable-xhdpi/tile_shadow_top.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/ic_images.png b/WallpaperPicker/res/drawable-xxhdpi/ic_images.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/ic_images.png rename to WallpaperPicker/res/drawable-xxhdpi/ic_images.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_picker_focused.9.png b/WallpaperPicker/res/drawable-xxhdpi/tile_picker_focused.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_picker_focused.9.png rename to WallpaperPicker/res/drawable-xxhdpi/tile_picker_focused.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_picker_pressed.9.png b/WallpaperPicker/res/drawable-xxhdpi/tile_picker_pressed.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_picker_pressed.9.png rename to WallpaperPicker/res/drawable-xxhdpi/tile_picker_pressed.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_picker_selected.9.png b/WallpaperPicker/res/drawable-xxhdpi/tile_picker_selected.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_picker_selected.9.png rename to WallpaperPicker/res/drawable-xxhdpi/tile_picker_selected.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_shadow_bottom.9.png b/WallpaperPicker/res/drawable-xxhdpi/tile_shadow_bottom.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_shadow_bottom.9.png rename to WallpaperPicker/res/drawable-xxhdpi/tile_shadow_bottom.9.png diff --git a/wallpaper_picker_res/drawable-xxhdpi/tile_shadow_top.9.png b/WallpaperPicker/res/drawable-xxhdpi/tile_shadow_top.9.png similarity index 100% rename from wallpaper_picker_res/drawable-xxhdpi/tile_shadow_top.9.png rename to WallpaperPicker/res/drawable-xxhdpi/tile_shadow_top.9.png diff --git a/wallpaper_picker_res/drawable/wallpaper_tile_fg.xml b/WallpaperPicker/res/drawable/wallpaper_tile_fg.xml similarity index 100% rename from wallpaper_picker_res/drawable/wallpaper_tile_fg.xml rename to WallpaperPicker/res/drawable/wallpaper_tile_fg.xml diff --git a/wallpaper_picker_res/layout/actionbar_set_wallpaper.xml b/WallpaperPicker/res/layout/actionbar_set_wallpaper.xml similarity index 100% rename from wallpaper_picker_res/layout/actionbar_set_wallpaper.xml rename to WallpaperPicker/res/layout/actionbar_set_wallpaper.xml diff --git a/wallpaper_picker_res/layout/wallpaper_cropper.xml b/WallpaperPicker/res/layout/wallpaper_cropper.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_cropper.xml rename to WallpaperPicker/res/layout/wallpaper_cropper.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker.xml b/WallpaperPicker/res/layout/wallpaper_picker.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker.xml rename to WallpaperPicker/res/layout/wallpaper_picker.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker_image_picker_item.xml b/WallpaperPicker/res/layout/wallpaper_picker_image_picker_item.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker_image_picker_item.xml rename to WallpaperPicker/res/layout/wallpaper_picker_image_picker_item.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker_item.xml b/WallpaperPicker/res/layout/wallpaper_picker_item.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker_item.xml rename to WallpaperPicker/res/layout/wallpaper_picker_item.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker_live_wallpaper_item.xml b/WallpaperPicker/res/layout/wallpaper_picker_live_wallpaper_item.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker_live_wallpaper_item.xml rename to WallpaperPicker/res/layout/wallpaper_picker_live_wallpaper_item.xml diff --git a/wallpaper_picker_res/layout/wallpaper_picker_third_party_item.xml b/WallpaperPicker/res/layout/wallpaper_picker_third_party_item.xml similarity index 100% rename from wallpaper_picker_res/layout/wallpaper_picker_third_party_item.xml rename to WallpaperPicker/res/layout/wallpaper_picker_third_party_item.xml diff --git a/wallpaper_picker_res/menu/cab_delete_wallpapers.xml b/WallpaperPicker/res/menu/cab_delete_wallpapers.xml similarity index 100% rename from wallpaper_picker_res/menu/cab_delete_wallpapers.xml rename to WallpaperPicker/res/menu/cab_delete_wallpapers.xml diff --git a/wallpaper_picker_res/mipmap-hdpi/ic_launcher_wallpaper.png b/WallpaperPicker/res/mipmap-hdpi/ic_launcher_wallpaper.png similarity index 100% rename from wallpaper_picker_res/mipmap-hdpi/ic_launcher_wallpaper.png rename to WallpaperPicker/res/mipmap-hdpi/ic_launcher_wallpaper.png diff --git a/wallpaper_picker_res/mipmap-mdpi/ic_launcher_wallpaper.png b/WallpaperPicker/res/mipmap-mdpi/ic_launcher_wallpaper.png similarity index 100% rename from wallpaper_picker_res/mipmap-mdpi/ic_launcher_wallpaper.png rename to WallpaperPicker/res/mipmap-mdpi/ic_launcher_wallpaper.png diff --git a/wallpaper_picker_res/mipmap-xhdpi/ic_launcher_wallpaper.png b/WallpaperPicker/res/mipmap-xhdpi/ic_launcher_wallpaper.png similarity index 100% rename from wallpaper_picker_res/mipmap-xhdpi/ic_launcher_wallpaper.png rename to WallpaperPicker/res/mipmap-xhdpi/ic_launcher_wallpaper.png diff --git a/wallpaper_picker_res/mipmap-xxhdpi/ic_launcher_wallpaper.png b/WallpaperPicker/res/mipmap-xxhdpi/ic_launcher_wallpaper.png similarity index 100% rename from wallpaper_picker_res/mipmap-xxhdpi/ic_launcher_wallpaper.png rename to WallpaperPicker/res/mipmap-xxhdpi/ic_launcher_wallpaper.png diff --git a/wallpaper_picker_res/values-nodpi/wallpapers.xml b/WallpaperPicker/res/values-nodpi/wallpapers.xml similarity index 100% rename from wallpaper_picker_res/values-nodpi/wallpapers.xml rename to WallpaperPicker/res/values-nodpi/wallpapers.xml diff --git a/WallpaperPicker/res/values-sw600dp/config.xml b/WallpaperPicker/res/values-sw600dp/config.xml new file mode 100644 index 0000000000..62342dcc2f --- /dev/null +++ b/WallpaperPicker/res/values-sw600dp/config.xml @@ -0,0 +1,18 @@ + + + + true + diff --git a/wallpaper_picker_res/values-sw720dp/dimens.xml b/WallpaperPicker/res/values-sw720dp/dimens.xml similarity index 100% rename from wallpaper_picker_res/values-sw720dp/dimens.xml rename to WallpaperPicker/res/values-sw720dp/dimens.xml diff --git a/wallpaper_picker_res/values-sw720dp/styles.xml b/WallpaperPicker/res/values-sw720dp/styles.xml similarity index 100% rename from wallpaper_picker_res/values-sw720dp/styles.xml rename to WallpaperPicker/res/values-sw720dp/styles.xml diff --git a/wallpaper_picker_res/values/colors.xml b/WallpaperPicker/res/values/colors.xml similarity index 100% rename from wallpaper_picker_res/values/colors.xml rename to WallpaperPicker/res/values/colors.xml diff --git a/WallpaperPicker/res/values/config.xml b/WallpaperPicker/res/values/config.xml new file mode 100644 index 0000000000..1b24190735 --- /dev/null +++ b/WallpaperPicker/res/values/config.xml @@ -0,0 +1,18 @@ + + + + false + diff --git a/wallpaper_picker_res/values/dimens.xml b/WallpaperPicker/res/values/dimens.xml similarity index 100% rename from wallpaper_picker_res/values/dimens.xml rename to WallpaperPicker/res/values/dimens.xml diff --git a/wallpaper_picker_res/values/strings.xml b/WallpaperPicker/res/values/strings.xml similarity index 100% rename from wallpaper_picker_res/values/strings.xml rename to WallpaperPicker/res/values/strings.xml diff --git a/wallpaper_picker_res/values/styles.xml b/WallpaperPicker/res/values/styles.xml similarity index 100% rename from wallpaper_picker_res/values/styles.xml rename to WallpaperPicker/res/values/styles.xml diff --git a/wallpaper_picker_src/android/util/Pools.java b/WallpaperPicker/src/android/util/Pools.java similarity index 100% rename from wallpaper_picker_src/android/util/Pools.java rename to WallpaperPicker/src/android/util/Pools.java diff --git a/wallpaper_picker_src/com/android/gallery3d/common/BitmapUtils.java b/WallpaperPicker/src/com/android/gallery3d/common/BitmapUtils.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/common/BitmapUtils.java rename to WallpaperPicker/src/com/android/gallery3d/common/BitmapUtils.java diff --git a/wallpaper_picker_src/com/android/gallery3d/common/Utils.java b/WallpaperPicker/src/com/android/gallery3d/common/Utils.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/common/Utils.java rename to WallpaperPicker/src/com/android/gallery3d/common/Utils.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/ByteBufferInputStream.java b/WallpaperPicker/src/com/android/gallery3d/exif/ByteBufferInputStream.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/ByteBufferInputStream.java rename to WallpaperPicker/src/com/android/gallery3d/exif/ByteBufferInputStream.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/CountedDataInputStream.java b/WallpaperPicker/src/com/android/gallery3d/exif/CountedDataInputStream.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/CountedDataInputStream.java rename to WallpaperPicker/src/com/android/gallery3d/exif/CountedDataInputStream.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/ExifData.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifData.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/ExifData.java rename to WallpaperPicker/src/com/android/gallery3d/exif/ExifData.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/ExifInterface.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifInterface.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/ExifInterface.java rename to WallpaperPicker/src/com/android/gallery3d/exif/ExifInterface.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/ExifInvalidFormatException.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifInvalidFormatException.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/ExifInvalidFormatException.java rename to WallpaperPicker/src/com/android/gallery3d/exif/ExifInvalidFormatException.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/ExifModifier.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifModifier.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/ExifModifier.java rename to WallpaperPicker/src/com/android/gallery3d/exif/ExifModifier.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/ExifOutputStream.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifOutputStream.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/ExifOutputStream.java rename to WallpaperPicker/src/com/android/gallery3d/exif/ExifOutputStream.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/ExifParser.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifParser.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/ExifParser.java rename to WallpaperPicker/src/com/android/gallery3d/exif/ExifParser.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/ExifReader.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifReader.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/ExifReader.java rename to WallpaperPicker/src/com/android/gallery3d/exif/ExifReader.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/ExifTag.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifTag.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/ExifTag.java rename to WallpaperPicker/src/com/android/gallery3d/exif/ExifTag.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/IfdData.java b/WallpaperPicker/src/com/android/gallery3d/exif/IfdData.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/IfdData.java rename to WallpaperPicker/src/com/android/gallery3d/exif/IfdData.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/IfdId.java b/WallpaperPicker/src/com/android/gallery3d/exif/IfdId.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/IfdId.java rename to WallpaperPicker/src/com/android/gallery3d/exif/IfdId.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/JpegHeader.java b/WallpaperPicker/src/com/android/gallery3d/exif/JpegHeader.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/JpegHeader.java rename to WallpaperPicker/src/com/android/gallery3d/exif/JpegHeader.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/OrderedDataOutputStream.java b/WallpaperPicker/src/com/android/gallery3d/exif/OrderedDataOutputStream.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/OrderedDataOutputStream.java rename to WallpaperPicker/src/com/android/gallery3d/exif/OrderedDataOutputStream.java diff --git a/wallpaper_picker_src/com/android/gallery3d/exif/Rational.java b/WallpaperPicker/src/com/android/gallery3d/exif/Rational.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/exif/Rational.java rename to WallpaperPicker/src/com/android/gallery3d/exif/Rational.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/BasicTexture.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/BasicTexture.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/BasicTexture.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/BasicTexture.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/BitmapTexture.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/BitmapTexture.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/BitmapTexture.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/BitmapTexture.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLCanvas.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLCanvas.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/GLCanvas.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/GLCanvas.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20Canvas.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLES20Canvas.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20Canvas.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/GLES20Canvas.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20IdImpl.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLES20IdImpl.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/GLES20IdImpl.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/GLES20IdImpl.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLId.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLId.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/GLId.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/GLId.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/GLPaint.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLPaint.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/GLPaint.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/GLPaint.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/RawTexture.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/RawTexture.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/RawTexture.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/RawTexture.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/Texture.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/Texture.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/Texture.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/Texture.java diff --git a/wallpaper_picker_src/com/android/gallery3d/glrenderer/UploadedTexture.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/UploadedTexture.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/glrenderer/UploadedTexture.java rename to WallpaperPicker/src/com/android/gallery3d/glrenderer/UploadedTexture.java diff --git a/wallpaper_picker_src/com/android/gallery3d/util/IntArray.java b/WallpaperPicker/src/com/android/gallery3d/util/IntArray.java similarity index 100% rename from wallpaper_picker_src/com/android/gallery3d/util/IntArray.java rename to WallpaperPicker/src/com/android/gallery3d/util/IntArray.java diff --git a/src/com/android/launcher3/CheckableFrameLayout.java b/WallpaperPicker/src/com/android/launcher3/CheckableFrameLayout.java similarity index 100% rename from src/com/android/launcher3/CheckableFrameLayout.java rename to WallpaperPicker/src/com/android/launcher3/CheckableFrameLayout.java diff --git a/wallpaper_picker_src/com/android/launcher3/CropView.java b/WallpaperPicker/src/com/android/launcher3/CropView.java similarity index 100% rename from wallpaper_picker_src/com/android/launcher3/CropView.java rename to WallpaperPicker/src/com/android/launcher3/CropView.java diff --git a/wallpaper_picker_src/com/android/launcher3/DrawableTileSource.java b/WallpaperPicker/src/com/android/launcher3/DrawableTileSource.java similarity index 100% rename from wallpaper_picker_src/com/android/launcher3/DrawableTileSource.java rename to WallpaperPicker/src/com/android/launcher3/DrawableTileSource.java diff --git a/wallpaper_picker_src/com/android/launcher3/LiveWallpaperListAdapter.java b/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java similarity index 98% rename from wallpaper_picker_src/com/android/launcher3/LiveWallpaperListAdapter.java rename to WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java index 152a75dedb..60b253711b 100644 --- a/wallpaper_picker_src/com/android/launcher3/LiveWallpaperListAdapter.java +++ b/WallpaperPicker/src/com/android/launcher3/LiveWallpaperListAdapter.java @@ -123,8 +123,7 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter preview.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, mInfo.getComponent()); a.onLiveWallpaperPickerLaunch(); - Utilities.startActivityForResultSafely( - a, preview, WallpaperPickerActivity.PICK_LIVE_WALLPAPER); + a.startActivityForResultSafely(preview, WallpaperPickerActivity.PICK_LIVE_WALLPAPER); } } diff --git a/wallpaper_picker_src/com/android/launcher3/SavedWallpaperImages.java b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java similarity index 100% rename from wallpaper_picker_src/com/android/launcher3/SavedWallpaperImages.java rename to WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java diff --git a/wallpaper_picker_src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java similarity index 97% rename from wallpaper_picker_src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java rename to WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java index 494694cbd0..7a4d48ca93 100644 --- a/wallpaper_picker_src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java +++ b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java @@ -56,8 +56,8 @@ public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements mResolveInfo.activityInfo.packageName, mResolveInfo.activityInfo.name); Intent launchIntent = new Intent(Intent.ACTION_SET_WALLPAPER); launchIntent.setComponent(itemComponentName); - Utilities.startActivityForResultSafely( - a, launchIntent, WallpaperPickerActivity.PICK_WALLPAPER_THIRD_PARTY_ACTIVITY); + a.startActivityForResultSafely( + launchIntent, WallpaperPickerActivity.PICK_WALLPAPER_THIRD_PARTY_ACTIVITY); } } diff --git a/wallpaper_picker_src/com/android/launcher3/WallpaperCropActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java similarity index 100% rename from wallpaper_picker_src/com/android/launcher3/WallpaperCropActivity.java rename to WallpaperPicker/src/com/android/launcher3/WallpaperCropActivity.java diff --git a/wallpaper_picker_src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java similarity index 97% rename from wallpaper_picker_src/com/android/launcher3/WallpaperPickerActivity.java rename to WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java index 2da05c92bc..d3c779fe4b 100644 --- a/wallpaper_picker_src/com/android/launcher3/WallpaperPickerActivity.java +++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java @@ -57,6 +57,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLayoutChangeListener; import android.view.ViewGroup; +import android.view.ViewPropertyAnimator; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.animation.AccelerateInterpolator; @@ -125,7 +126,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { public void onClick(WallpaperPickerActivity a) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); - Utilities.startActivityForResultSafely(a, intent, IMAGE_PICK); + a.startActivityForResultSafely(intent, IMAGE_PICK); } } @@ -278,7 +279,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mCropView = (CropView) findViewById(R.id.cropView); mWallpaperStrip = findViewById(R.id.wallpaper_strip); mCropView.setTouchCallback(new CropView.TouchCallback() { - LauncherViewPropertyAnimator mAnim; + ViewPropertyAnimator mAnim; @Override public void onTouchDown() { if (mAnim != null) { @@ -287,17 +288,14 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { if (mWallpaperStrip.getAlpha() == 1f) { mIgnoreNextTap = true; } - mAnim = new LauncherViewPropertyAnimator(mWallpaperStrip); + mAnim = mWallpaperStrip.animate(); mAnim.alpha(0f) - .setDuration(150) - .addListener(new Animator.AnimatorListener() { - public void onAnimationStart(Animator animator) { } - public void onAnimationEnd(Animator animator) { - mWallpaperStrip.setVisibility(View.INVISIBLE); - } - public void onAnimationCancel(Animator animator) { } - public void onAnimationRepeat(Animator animator) { } - }); + .setDuration(150) + .withEndAction(new Runnable() { + public void run() { + mWallpaperStrip.setVisibility(View.INVISIBLE); + } + }); mAnim.setInterpolator(new AccelerateInterpolator(0.75f)); mAnim.start(); } @@ -314,7 +312,7 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { mAnim.cancel(); } mWallpaperStrip.setVisibility(View.VISIBLE); - mAnim = new LauncherViewPropertyAnimator(mWallpaperStrip); + mAnim = mWallpaperStrip.animate(); mAnim.alpha(1f) .setDuration(150) .setInterpolator(new DecelerateInterpolator(0.75f)); @@ -576,10 +574,6 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { } } - public boolean enableRotation() { - return super.enableRotation() || Launcher.sForceEnableRotation; - } - protected Bitmap getThumbnailOfLastPhoto() { Cursor cursor = MediaStore.Images.Media.query(getContentResolver(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI, @@ -1001,4 +995,10 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { return view; } + + // In Launcher3, we override this with a method that catches exceptions + // from starting activities; didn't want to copy and paste code into here + public void startActivityForResultSafely(Intent intent, int requestCode) { + startActivityForResult(intent, requestCode); + } } diff --git a/wallpaper_picker_src/com/android/launcher3/WallpaperRootView.java b/WallpaperPicker/src/com/android/launcher3/WallpaperRootView.java similarity index 100% rename from wallpaper_picker_src/com/android/launcher3/WallpaperRootView.java rename to WallpaperPicker/src/com/android/launcher3/WallpaperRootView.java diff --git a/wallpaper_picker_src/com/android/photos/BitmapRegionTileSource.java b/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java similarity index 100% rename from wallpaper_picker_src/com/android/photos/BitmapRegionTileSource.java rename to WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java diff --git a/wallpaper_picker_src/com/android/photos/views/BlockingGLTextureView.java b/WallpaperPicker/src/com/android/photos/views/BlockingGLTextureView.java similarity index 100% rename from wallpaper_picker_src/com/android/photos/views/BlockingGLTextureView.java rename to WallpaperPicker/src/com/android/photos/views/BlockingGLTextureView.java diff --git a/wallpaper_picker_src/com/android/photos/views/TiledImageRenderer.java b/WallpaperPicker/src/com/android/photos/views/TiledImageRenderer.java similarity index 100% rename from wallpaper_picker_src/com/android/photos/views/TiledImageRenderer.java rename to WallpaperPicker/src/com/android/photos/views/TiledImageRenderer.java diff --git a/wallpaper_picker_src/com/android/photos/views/TiledImageView.java b/WallpaperPicker/src/com/android/photos/views/TiledImageView.java similarity index 100% rename from wallpaper_picker_src/com/android/photos/views/TiledImageView.java rename to WallpaperPicker/src/com/android/photos/views/TiledImageView.java diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 9485cea249..a8dd99795a 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2174,7 +2174,7 @@ public class Launcher extends Activity } protected ComponentName getWallpaperPickerComponent() { - return new ComponentName(getPackageName(), WallpaperPickerActivity.class.getName()); + return new ComponentName(getPackageName(), LauncherWallpaperPickerActivity.class.getName()); } /** diff --git a/src/com/android/launcher3/LauncherWallpaperPickerActivity.java b/src/com/android/launcher3/LauncherWallpaperPickerActivity.java new file mode 100644 index 0000000000..10fe013eee --- /dev/null +++ b/src/com/android/launcher3/LauncherWallpaperPickerActivity.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.content.Intent; + +public class LauncherWallpaperPickerActivity extends WallpaperPickerActivity { + @Override + public void startActivityForResultSafely(Intent intent, int requestCode) { + Utilities.startActivityForResultSafely(this, intent, requestCode); + } + @Override + public boolean enableRotation() { + return Utilities.isRotationEnabled(this); + } +} diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java index 9ffd044b49..cbc978585a 100644 --- a/src/com/android/launcher3/Utilities.java +++ b/src/com/android/launcher3/Utilities.java @@ -65,6 +65,12 @@ public final class Utilities { static int sColors[] = { 0xffff0000, 0xff00ff00, 0xff0000ff }; static int sColorIndex = 0; + + // To turn on these properties, type + // adb shell setprop log.tag.PROPERTY_NAME [VERBOSE | SUPPRESS] + static final String FORCE_ENABLE_ROTATION_PROPERTY = "launcher_force_rotate"; + public static boolean sForceEnableRotation = isPropertyEnabled(FORCE_ENABLE_ROTATION_PROPERTY); + /** * Returns a FastBitmapDrawable with the icon, accurately sized. */ @@ -82,6 +88,16 @@ public final class Utilities { icon.setBounds(0, 0, sIconTextureWidth, sIconTextureHeight); } + private static boolean isPropertyEnabled(String propertyName) { + return Log.isLoggable(propertyName, Log.VERBOSE); + } + + public static boolean isRotationEnabled(Context c) { + boolean enableRotation = sForceEnableRotation || + c.getResources().getBoolean(R.bool.allow_rotation); + return enableRotation; + } + /** * Returns a bitmap suitable for the all apps view. Used to convert pre-ICS * icon bitmaps that are stored in the database (which were 74x74 pixels at hdpi size) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 9937fc5e31..e6550bc70d 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1232,7 +1232,7 @@ public class Workspace extends SmoothPagedView String spKey = WallpaperCropActivity.getSharedPreferencesKey(); SharedPreferences sp = mLauncher.getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS); - WallpaperPickerActivity.suggestWallpaperDimension(mLauncher.getResources(), + LauncherWallpaperPickerActivity.suggestWallpaperDimension(mLauncher.getResources(), sp, mLauncher.getWindowManager(), mWallpaperManager); return null; } diff --git a/update_system_wallpaper_cropper.py b/update_system_wallpaper_cropper.py index 36904f2153..44cbcc967c 100644 --- a/update_system_wallpaper_cropper.py +++ b/update_system_wallpaper_cropper.py @@ -5,7 +5,7 @@ # necessary so do this with care import os import sys -src_dir = "wallpaper_picker_src/" +src_dir = "WallpaperPicker/src/" files = """ src/android/util/Pools.java com/android/gallery3d/util/IntArray.java From 34c2e6cf7af328aba25c98158161dbad15ae986d Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Fri, 13 Dec 2013 16:07:45 +0100 Subject: [PATCH 074/147] Clean up imports --- .../src/com/android/gallery3d/exif/ExifModifier.java | 1 - .../src/com/android/gallery3d/glrenderer/GLCanvas.java | 2 -- .../src/com/android/photos/BitmapRegionTileSource.java | 2 -- src/com/android/launcher3/AddAdapter.java | 2 -- src/com/android/launcher3/AllAppsList.java | 6 +++--- src/com/android/launcher3/AppInfo.java | 2 +- src/com/android/launcher3/AppWidgetResizeFrame.java | 2 -- src/com/android/launcher3/BubbleTextView.java | 1 - src/com/android/launcher3/ButtonDropTarget.java | 2 -- src/com/android/launcher3/CellLayout.java | 2 -- src/com/android/launcher3/Cling.java | 3 +-- src/com/android/launcher3/DeferredHandler.java | 1 + src/com/android/launcher3/DragController.java | 1 - src/com/android/launcher3/DragView.java | 3 --- src/com/android/launcher3/DrawableStateProxyView.java | 2 -- src/com/android/launcher3/Folder.java | 4 ---- src/com/android/launcher3/FolderIcon.java | 3 +-- src/com/android/launcher3/InstallShortcutReceiver.java | 6 ++++-- src/com/android/launcher3/InstallWidgetReceiver.java | 4 +--- src/com/android/launcher3/LauncherAppState.java | 2 -- src/com/android/launcher3/LauncherModel.java | 1 + src/com/android/launcher3/PageIndicator.java | 10 ---------- src/com/android/launcher3/PageIndicatorMarker.java | 8 +------- src/com/android/launcher3/PagedView.java | 2 -- src/com/android/launcher3/PagedViewIconCache.java | 10 +++++----- src/com/android/launcher3/PagedViewWidget.java | 2 -- src/com/android/launcher3/ScrimView.java | 3 --- src/com/android/launcher3/ShortcutInfo.java | 2 +- 28 files changed, 20 insertions(+), 69 deletions(-) diff --git a/WallpaperPicker/src/com/android/gallery3d/exif/ExifModifier.java b/WallpaperPicker/src/com/android/gallery3d/exif/ExifModifier.java index f00362b6b0..0531cbad99 100644 --- a/WallpaperPicker/src/com/android/gallery3d/exif/ExifModifier.java +++ b/WallpaperPicker/src/com/android/gallery3d/exif/ExifModifier.java @@ -18,7 +18,6 @@ package com.android.gallery3d.exif; import android.util.Log; -import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; diff --git a/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLCanvas.java b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLCanvas.java index 305e905210..5b07477043 100644 --- a/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLCanvas.java +++ b/WallpaperPicker/src/com/android/gallery3d/glrenderer/GLCanvas.java @@ -20,8 +20,6 @@ import android.graphics.Bitmap; import android.graphics.Rect; import android.graphics.RectF; -import javax.microedition.khronos.opengles.GL11; - // // GLCanvas gives a convenient interface to draw using OpenGL. // diff --git a/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java b/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java index 8511de2da9..cdc5cdcbd6 100644 --- a/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java +++ b/WallpaperPicker/src/com/android/photos/BitmapRegionTileSource.java @@ -24,9 +24,7 @@ import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.Canvas; -import android.graphics.Matrix; import android.graphics.Paint; -import android.graphics.PorterDuff; import android.graphics.Rect; import android.net.Uri; import android.os.Build; diff --git a/src/com/android/launcher3/AddAdapter.java b/src/com/android/launcher3/AddAdapter.java index ad15e75c65..5308a3de45 100644 --- a/src/com/android/launcher3/AddAdapter.java +++ b/src/com/android/launcher3/AddAdapter.java @@ -27,8 +27,6 @@ import android.widget.TextView; import java.util.ArrayList; -import com.android.launcher3.R; - /** * Adapter showing the types of items that can be added to a {@link Workspace}. */ diff --git a/src/com/android/launcher3/AllAppsList.java b/src/com/android/launcher3/AllAppsList.java index d955e4eaee..b641eb5b3c 100644 --- a/src/com/android/launcher3/AllAppsList.java +++ b/src/com/android/launcher3/AllAppsList.java @@ -16,9 +16,6 @@ package com.android.launcher3; -import java.util.ArrayList; -import java.util.List; - import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -26,6 +23,9 @@ import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import java.util.ArrayList; +import java.util.List; + /** * Stores the list of all applications for the all apps view. diff --git a/src/com/android/launcher3/AppInfo.java b/src/com/android/launcher3/AppInfo.java index 53f81bb1cb..d5a7769018 100644 --- a/src/com/android/launcher3/AppInfo.java +++ b/src/com/android/launcher3/AppInfo.java @@ -18,9 +18,9 @@ package com.android.launcher3; import android.content.ComponentName; import android.content.Intent; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.PackageInfo; import android.content.pm.ResolveInfo; import android.graphics.Bitmap; import android.util.Log; diff --git a/src/com/android/launcher3/AppWidgetResizeFrame.java b/src/com/android/launcher3/AppWidgetResizeFrame.java index fcb04ea089..f57f4d0361 100644 --- a/src/com/android/launcher3/AppWidgetResizeFrame.java +++ b/src/com/android/launcher3/AppWidgetResizeFrame.java @@ -13,8 +13,6 @@ import android.view.Gravity; import android.widget.FrameLayout; import android.widget.ImageView; -import com.android.launcher3.R; - public class AppWidgetResizeFrame extends FrameLayout { private LauncherAppWidgetHostView mWidgetView; private CellLayout mCellLayout; diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 30016e5b3f..ee42904dd6 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -20,7 +20,6 @@ import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Rect; import android.graphics.Region; import android.graphics.Region.Op; diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index d51ae46e84..019f86c217 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -25,8 +25,6 @@ import android.util.AttributeSet; import android.view.View; import android.widget.TextView; -import com.android.launcher3.R; - /** * Implements a DropTarget. diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index 05e31af02b..fa6ce96314 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -35,7 +35,6 @@ import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.NinePatchDrawable; import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; @@ -48,7 +47,6 @@ import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.view.animation.LayoutAnimationController; -import com.android.launcher3.R; import com.android.launcher3.FolderIcon.FolderRingAnimator; import java.util.ArrayList; diff --git a/src/com/android/launcher3/Cling.java b/src/com/android/launcher3/Cling.java index 9974acde69..3af427139e 100644 --- a/src/com/android/launcher3/Cling.java +++ b/src/com/android/launcher3/Cling.java @@ -18,9 +18,8 @@ package com.android.launcher3; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; -import android.app.ActivityOptions; -import android.content.Context; import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.content.res.TypedArray; diff --git a/src/com/android/launcher3/DeferredHandler.java b/src/com/android/launcher3/DeferredHandler.java index 92ecf96438..a2d121d635 100644 --- a/src/com/android/launcher3/DeferredHandler.java +++ b/src/com/android/launcher3/DeferredHandler.java @@ -21,6 +21,7 @@ import android.os.Looper; import android.os.Message; import android.os.MessageQueue; import android.util.Pair; + import java.util.LinkedList; import java.util.ListIterator; diff --git a/src/com/android/launcher3/DragController.java b/src/com/android/launcher3/DragController.java index 1bfaa233b3..4c3ea2a0a4 100644 --- a/src/com/android/launcher3/DragController.java +++ b/src/com/android/launcher3/DragController.java @@ -28,7 +28,6 @@ import android.os.IBinder; import android.util.Log; import android.view.*; import android.view.inputmethod.InputMethodManager; -import com.android.launcher3.R; import java.util.ArrayList; diff --git a/src/com/android/launcher3/DragView.java b/src/com/android/launcher3/DragView.java index b66b55c9dc..ea34e46f9e 100644 --- a/src/com/android/launcher3/DragView.java +++ b/src/com/android/launcher3/DragView.java @@ -14,7 +14,6 @@ * limitations under the License. */ - package com.android.launcher3; import android.animation.ValueAnimator; @@ -30,8 +29,6 @@ import android.graphics.Rect; import android.view.View; import android.view.animation.DecelerateInterpolator; -import com.android.launcher3.R; - public class DragView extends View { private static float sDragAlpha = 1f; diff --git a/src/com/android/launcher3/DrawableStateProxyView.java b/src/com/android/launcher3/DrawableStateProxyView.java index 0758de1f77..c83659ad52 100644 --- a/src/com/android/launcher3/DrawableStateProxyView.java +++ b/src/com/android/launcher3/DrawableStateProxyView.java @@ -23,8 +23,6 @@ import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; -import com.android.launcher3.R; - public class DrawableStateProxyView extends LinearLayout { private View mView; diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 9637bbb48d..f292821f48 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -31,9 +31,7 @@ import android.text.InputType; import android.text.Selection; import android.text.Spannable; import android.util.AttributeSet; -import android.util.DisplayMetrics; import android.util.Log; -import android.util.TypedValue; import android.view.ActionMode; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -43,8 +41,6 @@ import android.view.MotionEvent; import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; -import android.view.animation.AccelerateInterpolator; -import android.view.animation.Interpolator; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.LinearLayout; diff --git a/src/com/android/launcher3/FolderIcon.java b/src/com/android/launcher3/FolderIcon.java index 5e461a7b51..644db47acf 100644 --- a/src/com/android/launcher3/FolderIcon.java +++ b/src/com/android/launcher3/FolderIcon.java @@ -36,11 +36,10 @@ import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; -import android.widget.ImageView; import android.widget.FrameLayout; +import android.widget.ImageView; import android.widget.TextView; -import com.android.launcher3.R; import com.android.launcher3.DropTarget.DragObject; import com.android.launcher3.FolderInfo.FolderListener; diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index fb75161fe7..140106af9c 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -28,13 +28,15 @@ import android.util.Base64; import android.util.Log; import android.widget.Toast; +import org.json.JSONObject; +import org.json.JSONStringer; +import org.json.JSONTokener; + import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import org.json.*; - public class InstallShortcutReceiver extends BroadcastReceiver { private static final String TAG = "InstallShortcutReceiver"; private static final boolean DBG = false; diff --git a/src/com/android/launcher3/InstallWidgetReceiver.java b/src/com/android/launcher3/InstallWidgetReceiver.java index 0ef478074c..74b9e3d99f 100644 --- a/src/com/android/launcher3/InstallWidgetReceiver.java +++ b/src/com/android/launcher3/InstallWidgetReceiver.java @@ -16,8 +16,6 @@ package com.android.launcher3; -import java.util.List; - import android.appwidget.AppWidgetProviderInfo; import android.content.ClipData; import android.content.Context; @@ -33,7 +31,7 @@ import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.TextView; -import com.android.launcher3.R; +import java.util.List; /** diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 5daa845f34..84a1d04118 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -22,9 +22,7 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; import android.os.Handler; -import android.provider.Settings; import android.util.Log; -import android.view.Display; import java.lang.ref.WeakReference; diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index da805a05a6..b4f7f5dbd7 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -43,6 +43,7 @@ import android.provider.BaseColumns; import android.text.TextUtils; import android.util.Log; import android.util.Pair; + import com.android.launcher3.InstallWidgetReceiver.WidgetMimeTypeHandlerData; import java.lang.ref.WeakReference; diff --git a/src/com/android/launcher3/PageIndicator.java b/src/com/android/launcher3/PageIndicator.java index 08e5f721a1..62ea03bcc8 100644 --- a/src/com/android/launcher3/PageIndicator.java +++ b/src/com/android/launcher3/PageIndicator.java @@ -16,22 +16,12 @@ package com.android.launcher3; -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; import android.animation.LayoutTransition; -import android.animation.TimeInterpolator; -import android.content.ComponentName; import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; import android.content.res.TypedArray; import android.util.AttributeSet; -import android.util.Log; import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; import android.widget.LinearLayout; -import com.android.launcher3.R; import java.util.ArrayList; diff --git a/src/com/android/launcher3/PageIndicatorMarker.java b/src/com/android/launcher3/PageIndicatorMarker.java index b1025d6fe7..f012db74b0 100644 --- a/src/com/android/launcher3/PageIndicatorMarker.java +++ b/src/com/android/launcher3/PageIndicatorMarker.java @@ -16,17 +16,11 @@ package com.android.launcher3; -import android.animation.AnimatorListenerAdapter; -import android.animation.LayoutTransition; import android.content.Context; import android.content.res.Resources; import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.FrameLayout; -import com.android.launcher3.R; +import android.widget.ImageView; public class PageIndicatorMarker extends FrameLayout { @SuppressWarnings("unused") diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 1e4f4fa7f6..196913ef63 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -32,7 +32,6 @@ import android.graphics.Rect; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; -import android.support.v4.view.accessibility.AccessibilityEventCompat; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; @@ -51,7 +50,6 @@ import android.view.animation.AnimationUtils; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.view.animation.LinearInterpolator; -import android.widget.Scroller; import java.util.ArrayList; diff --git a/src/com/android/launcher3/PagedViewIconCache.java b/src/com/android/launcher3/PagedViewIconCache.java index 8d8924b7ee..93887ea230 100644 --- a/src/com/android/launcher3/PagedViewIconCache.java +++ b/src/com/android/launcher3/PagedViewIconCache.java @@ -16,17 +16,17 @@ package com.android.launcher3; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; - import android.appwidget.AppWidgetProviderInfo; import android.content.ComponentName; import android.content.pm.ComponentInfo; import android.content.pm.ResolveInfo; import android.graphics.Bitmap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + /** * Simple cache mechanism for PagedView outlines. */ diff --git a/src/com/android/launcher3/PagedViewWidget.java b/src/com/android/launcher3/PagedViewWidget.java index d2f897a338..db4aeb9403 100644 --- a/src/com/android/launcher3/PagedViewWidget.java +++ b/src/com/android/launcher3/PagedViewWidget.java @@ -30,8 +30,6 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import com.android.launcher3.R; - /** * The linear layout used strictly for the widget/wallpaper tab of the customization tray */ diff --git a/src/com/android/launcher3/ScrimView.java b/src/com/android/launcher3/ScrimView.java index 6831fe3d4e..68200fe640 100644 --- a/src/com/android/launcher3/ScrimView.java +++ b/src/com/android/launcher3/ScrimView.java @@ -17,11 +17,8 @@ package com.android.launcher3; import android.content.Context; -import android.content.res.Resources; -import android.content.res.TypedArray; import android.graphics.Rect; import android.util.AttributeSet; -import android.view.View; import android.widget.FrameLayout; public class ScrimView extends FrameLayout implements Insettable { diff --git a/src/com/android/launcher3/ShortcutInfo.java b/src/com/android/launcher3/ShortcutInfo.java index fc087a897b..660f32c791 100644 --- a/src/com/android/launcher3/ShortcutInfo.java +++ b/src/com/android/launcher3/ShortcutInfo.java @@ -20,9 +20,9 @@ import android.content.ComponentName; import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.PackageInfo; import android.graphics.Bitmap; import android.util.Log; From 31ff527a4a489019803f7b6147c95630700f4bb9 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Fri, 13 Dec 2013 16:28:36 +0100 Subject: [PATCH 075/147] Update script to pull latest files from Gallery --- update_gallery_files.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update_gallery_files.py b/update_gallery_files.py index ef4e8c933c..738d225eb7 100644 --- a/update_gallery_files.py +++ b/update_gallery_files.py @@ -49,6 +49,6 @@ for file_path in files.split(): dir = os.path.dirname(file_path) if file_path.find('exif') != -1 or file_path.find('common') != -1: file_path = 'gallerycommon/' + file_path - cmd = 'cp %s/%s %s/' % (gallery_dir, file_path, dir) + cmd = 'cp %s/%s WallpaperPicker/%s/' % (gallery_dir, file_path, dir) print cmd os.system(cmd) From 674531f26196502db825838b21b9cbf34463088c Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Fri, 13 Dec 2013 15:07:14 -0800 Subject: [PATCH 076/147] Don't notifyPageSwitchListener until page settles (issue 12069757) -> Should address the dismiss timer not working quite right Change-Id: I63ad32d8f7c37f1a090ff1dd6024eeb7c0c6ce65 --- src/com/android/launcher3/PagedView.java | 17 +++++++++++++++-- src/com/android/launcher3/Workspace.java | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 1e4f4fa7f6..fa52f52b10 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -451,6 +451,10 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc return new PageIndicator.PageMarkerResources(); } + /** + * Add a page change listener which will be called when a page is _finished_ listening. + * + */ public void setPageSwitchListener(PageSwitchListener pageSwitchListener) { mPageSwitchListener = pageSwitchListener; if (mPageSwitchListener != null) { @@ -525,6 +529,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc */ void stopScrolling() { mCurrentPage = getNextPage(); + notifyPageSwitchListener(); forceFinishScroller(); } @@ -574,11 +579,19 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc return mRestorePage; } + /** + * Should be called whenever the page changes. In the case of a scroll, we wait until the page + * has settled. + */ protected void notifyPageSwitchListener() { if (mPageSwitchListener != null) { - mPageSwitchListener.onPageSwitch(getPageAt(mCurrentPage), mCurrentPage); + mPageSwitchListener.onPageSwitch(getPageAt(getNextPage()), getNextPage()); } + updatePageIndicator(); + } + + private void updatePageIndicator() { // Update the page indicator (when we aren't reordering) if (mPageIndicator != null && !isReordering(false)) { mPageIndicator.setActiveMarker(getNextPage()); @@ -2232,7 +2245,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc mScroller.startScroll(mUnboundedScrollX, 0, delta, 0, duration); - notifyPageSwitchListener(); + updatePageIndicator(); // Trigger a compute() to finish switching pages if necessary if (immediate) { diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 52420b73b9..6b719b2582 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1209,7 +1209,7 @@ public class Workspace extends SmoothPagedView @Override protected void notifyPageSwitchListener() { super.notifyPageSwitchListener(); - Launcher.setScreen(mCurrentPage); + Launcher.setScreen(getNextPage()); if (hasCustomContent() && getNextPage() == 0 && !mCustomContentShowing) { mCustomContentShowing = true; From 9c58d8269b3bdfdbe500b52ccce878ff2edb196b Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Fri, 13 Dec 2013 17:18:10 -0800 Subject: [PATCH 077/147] Fix issue where deleting item from folder leaves extra page Change-Id: Ie741dbe5341d8237c85f732b26661d084b99f6e2 --- src/com/android/launcher3/Folder.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 9637bbb48d..37a947c3ae 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -772,7 +772,11 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList } completeDragExit(); } - } else { + } + + // This is kind of hacky, but in general, dropping on the workspace handles removing + // the extra screen, but dropping elsewhere (back to self, or onto delete) doesn't. + if (target != mLauncher.getWorkspace()) { mLauncher.getWorkspace().removeExtraEmptyScreen(true, null); } From f6a22ada816ae4f63576679f03472b0a984e82be Mon Sep 17 00:00:00 2001 From: Chris Wren Date: Thu, 12 Dec 2013 11:20:09 -0500 Subject: [PATCH 078/147] Add auto-detection of payload type update docs and error messages use png extension of files, since they are don't create image files by default use input filename for image files Change-Id: I3e9c31a1de02976432d3f39cf82b5403055d620a --- util/com/android/launcher3/DecoderRing.java | 150 +++++++++++++++----- 1 file changed, 114 insertions(+), 36 deletions(-) diff --git a/util/com/android/launcher3/DecoderRing.java b/util/com/android/launcher3/DecoderRing.java index bd0275e5fa..6ad6bc5a55 100644 --- a/util/com/android/launcher3/DecoderRing.java +++ b/util/com/android/launcher3/DecoderRing.java @@ -15,6 +15,7 @@ */ package com.android.launcher3; +import com.android.launcher3.backup.BackupProtos; import com.android.launcher3.backup.BackupProtos.CheckedMessage; import com.android.launcher3.backup.BackupProtos.Favorite; import com.android.launcher3.backup.BackupProtos.Key; @@ -36,20 +37,46 @@ import java.io.IOException; import java.lang.System; import java.util.zip.CRC32; +import javax.xml.bind.DatatypeConverter; + + /** - * Commandline utility for decoding protos written to the android logs during debugging. + * Commandline utility for decoding Launcher3 backup protocol buffers. * - * base64 -D icon.log > icon.bin - * java -classpath $ANDROID_HOST_OUT/framework/protoutil.jar:$ANDROID_HOST_OUT/../common/obj/JAVA_LIBRARIES/host-libprotobuf-java-2.3.0-nano_intermediates/javalib.jar \ - * com.android.launcher3.DecoderRing -i icon.bin + *

When using com.android.internal.backup.LocalTransport, the file names are base64-encoded Key + * protocol buffers with a prefix, that have been base64-encoded again by the transport: + *

+ *     echo TDpDQUlnL0pxVTVnOD0= | base64 -D | dd bs=1 skip=2 | base64 -D | launcher_protoutil -k
+ * 
* - * TODO: write a wrapper to setup the classpath + *

This tool understands these file names and will use the embedded Key to detect the type and + * extract the payload automatically: + *

+ *     launcher_protoutil /tmp/TDpDQUlnL0pxVTVnOD0=
+ * 
+ * + *

With payload debugging enabled, base64-encoded protocol buffers will be written to the logs. + * Copy the encoded log snippet into a file, and specify the type explicitly: + *

+ *    base64 -D icon.log > icon.bin
+ *    launcher_protoutil -i icon.bin
+ * 
*/ class DecoderRing { + private static Class[] TYPES = { + Key.class, + Favorite.class, + Screen.class, + Resource.class, + Widget.class + }; + static final int ICON_TYPE_BITMAP = 1; + public static void main(String[ ] args) throws Exception { File source = null; Class type = null; + boolean extractImages = false; int skip = 0; for (int i = 0; i < args.length; i++) { @@ -71,6 +98,8 @@ class DecoderRing { } else { usage(args); } + } else if ("-x".equals(args[i])) { + extractImages = true; } else if (args[i] != null && !args[i].startsWith("-")) { source = new File(args[i]); } else { @@ -80,7 +109,35 @@ class DecoderRing { } if (type == null) { - usage(args); + if (source == null) { + usage(args); + } else { + Key key = new Key(); + try { + byte[] rawKey = DatatypeConverter.parseBase64Binary(source.getName()); + if (rawKey[0] != 'L' || rawKey[1] != ':') { + System.err.println("you must specify the payload type. " + + source.getName() + " is not a launcher backup key."); + System.exit(1); + } + String encodedPayload = new String(rawKey, 2, rawKey.length - 2); + byte[] keyProtoData = DatatypeConverter.parseBase64Binary(encodedPayload); + key = Key.parseFrom(keyProtoData); + } catch (InvalidProtocolBufferNanoException protoException) { + System.err.println("failed to extract key from filename: " + protoException); + System.exit(1); + } catch (IllegalArgumentException base64Exception) { + System.err.println("failed to extract key from filename: " + base64Exception); + System.exit(1); + } + // keys are self-checked + if (key.checksum != checkKey(key)) { + System.err.println("key ckecksum failed"); + System.exit(1); + } + type = TYPES[key.type]; + System.err.println("This is a " + type.getSimpleName() + " backup"); + } } // read in the bytes @@ -114,7 +171,6 @@ class DecoderRing { System.err.println("failed to read input: " + e); System.exit(1); } - System.err.println("read this many bytes: " + byteStream.size()); MessageNano proto = null; if (type == Key.class) { @@ -127,7 +183,7 @@ class DecoderRing { } // keys are self-checked if (key.checksum != checkKey(key)) { - System.err.println("key ckecksum failed"); + System.err.println("key checksum failed"); System.exit(1); } proto = key; @@ -143,7 +199,7 @@ class DecoderRing { CRC32 checksum = new CRC32(); checksum.update(wrapper.payload); if (wrapper.checksum != checksum.getValue()) { - System.err.println("wrapper ckecksum failed"); + System.err.println("wrapper checksum failed"); System.exit(1); } // decode the actual message @@ -159,32 +215,34 @@ class DecoderRing { // Generic string output System.out.println(proto.toString()); - // save off the icon bits in a file for inspection - if (proto instanceof Resource) { - Resource icon = (Resource) proto; - final String path = "icon.webp"; - FileOutputStream iconFile = new FileOutputStream(path); - iconFile.write(icon.data); - iconFile.close(); - System.err.println("wrote " + path); - } - - // save off the widget icon and preview bits in files for inspection - if (proto instanceof Widget) { - Widget widget = (Widget) proto; - if (widget.icon != null) { - final String path = "widget_icon.webp"; - FileOutputStream iconFile = new FileOutputStream(path); - iconFile.write(widget.icon.data); - iconFile.close(); - System.err.println("wrote " + path); + if (extractImages) { + String prefix = "stdin"; + if (source != null) { + prefix = source.getName(); } - if (widget.preview != null) { - final String path = "widget_preview.webp"; - FileOutputStream iconFile = new FileOutputStream(path); - iconFile.write(widget.preview.data); - iconFile.close(); - System.err.println("wrote " + path); + // save off the icon bits in a file for inspection + if (proto instanceof Resource) { + Resource icon = (Resource) proto; + writeImageData(icon.data, prefix + ".png"); + } + + // save off the icon bits in a file for inspection + if (proto instanceof Favorite) { + Favorite favorite = (Favorite) proto; + if (favorite.iconType == ICON_TYPE_BITMAP) { + writeImageData(favorite.icon, prefix + ".png"); + } + } + + // save off the widget icon and preview bits in files for inspection + if (proto instanceof Widget) { + Widget widget = (Widget) proto; + if (widget.icon != null) { + writeImageData(widget.icon.data, prefix + "_icon.png"); + } + if (widget.preview != null) { + writeImageData(widget.preview.data, prefix + "_preview.png"); + } } } @@ -192,6 +250,25 @@ class DecoderRing { System.exit(0); } + private static void writeImageData(byte[] data, String path) { + FileOutputStream iconFile = null; + try { + iconFile = new FileOutputStream(path); + iconFile.write(data); + System.err.println("wrote " + path); + } catch (IOException e) { + System.err.println("failed to write image file: " + e); + } finally { + if (iconFile != null) { + try { + iconFile.close(); + } catch (IOException e) { + System.err.println("failed to close the image file: " + e); + } + } + } + } + private static long checkKey(Key key) { CRC32 checksum = new CRC32(); checksum.update(key.type); @@ -204,13 +281,14 @@ class DecoderRing { } private static void usage(String[] args) { - System.err.println("DecoderRing type [input]"); + System.err.println("launcher_protoutil [-x] [-S b] [-k|-f|-i|-s|-w] [filename]"); System.err.println("\t-k\tdecode a key"); System.err.println("\t-f\tdecode a favorite"); System.err.println("\t-i\tdecode a icon"); System.err.println("\t-s\tdecode a screen"); System.err.println("\t-w\tdecode a widget"); - System.err.println("\t-s b\tskip b bytes"); + System.err.println("\t-S b\tskip b bytes"); + System.err.println("\t-x\textract image data to files"); System.err.println("\tfilename\tread from filename, not stdin"); System.exit(1); } From 10c29d30f97494c4516cd3c2078039e90c16dea3 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Mon, 16 Dec 2013 13:16:15 -0800 Subject: [PATCH 079/147] Import translations. DO NOT MERGE Change-Id: I40a264c567f7d0e599182ce68f5b844bd2856f9d Auto-generated-cl: translation import --- WallpaperPicker/res/values-af/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-am/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ar/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-bg/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ca/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-da/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-de/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-el/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-en-rGB/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-en-rIN/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-es/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-et-rEE/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-fi/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-hr/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-hu/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-hy-rAM/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-it/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-iw/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-km-rKH/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ko/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-lt/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-lv/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-mn-rMN/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-nl/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-pl/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-pt-rPT/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-pt/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ro/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ru/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-sr/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-th/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-tl/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-uk/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-vi/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-zh-rHK/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-zh-rTW/strings.xml | 36 +++++++++++++++++++ 36 files changed, 1296 insertions(+) create mode 100644 WallpaperPicker/res/values-af/strings.xml create mode 100644 WallpaperPicker/res/values-am/strings.xml create mode 100644 WallpaperPicker/res/values-ar/strings.xml create mode 100644 WallpaperPicker/res/values-bg/strings.xml create mode 100644 WallpaperPicker/res/values-ca/strings.xml create mode 100644 WallpaperPicker/res/values-da/strings.xml create mode 100644 WallpaperPicker/res/values-de/strings.xml create mode 100644 WallpaperPicker/res/values-el/strings.xml create mode 100644 WallpaperPicker/res/values-en-rGB/strings.xml create mode 100644 WallpaperPicker/res/values-en-rIN/strings.xml create mode 100644 WallpaperPicker/res/values-es/strings.xml create mode 100644 WallpaperPicker/res/values-et-rEE/strings.xml create mode 100644 WallpaperPicker/res/values-fi/strings.xml create mode 100644 WallpaperPicker/res/values-hr/strings.xml create mode 100644 WallpaperPicker/res/values-hu/strings.xml create mode 100644 WallpaperPicker/res/values-hy-rAM/strings.xml create mode 100644 WallpaperPicker/res/values-it/strings.xml create mode 100644 WallpaperPicker/res/values-iw/strings.xml create mode 100644 WallpaperPicker/res/values-km-rKH/strings.xml create mode 100644 WallpaperPicker/res/values-ko/strings.xml create mode 100644 WallpaperPicker/res/values-lt/strings.xml create mode 100644 WallpaperPicker/res/values-lv/strings.xml create mode 100644 WallpaperPicker/res/values-mn-rMN/strings.xml create mode 100644 WallpaperPicker/res/values-nl/strings.xml create mode 100644 WallpaperPicker/res/values-pl/strings.xml create mode 100644 WallpaperPicker/res/values-pt-rPT/strings.xml create mode 100644 WallpaperPicker/res/values-pt/strings.xml create mode 100644 WallpaperPicker/res/values-ro/strings.xml create mode 100644 WallpaperPicker/res/values-ru/strings.xml create mode 100644 WallpaperPicker/res/values-sr/strings.xml create mode 100644 WallpaperPicker/res/values-th/strings.xml create mode 100644 WallpaperPicker/res/values-tl/strings.xml create mode 100644 WallpaperPicker/res/values-uk/strings.xml create mode 100644 WallpaperPicker/res/values-vi/strings.xml create mode 100644 WallpaperPicker/res/values-zh-rHK/strings.xml create mode 100644 WallpaperPicker/res/values-zh-rTW/strings.xml diff --git a/WallpaperPicker/res/values-af/strings.xml b/WallpaperPicker/res/values-af/strings.xml new file mode 100644 index 0000000000..c17d26be0e --- /dev/null +++ b/WallpaperPicker/res/values-af/strings.xml @@ -0,0 +1,36 @@ + + + + + "Stel muurpapier" + "Kon nie prent laai nie" + "Kon nie prent as muurpapier laai nie" + + "%1$d gekies" + "%1$d gekies" + "%1$d gekies" + + "Muurpapier %1$d van %2$d" + "Het %1$s gekies" + "Vee uit" + "Kies prent" + "Muurpapiere" + "Snoei muurpapier" + diff --git a/WallpaperPicker/res/values-am/strings.xml b/WallpaperPicker/res/values-am/strings.xml new file mode 100644 index 0000000000..e4bcadbed8 --- /dev/null +++ b/WallpaperPicker/res/values-am/strings.xml @@ -0,0 +1,36 @@ + + + + + "የግድግዳ ወረቀት አዘጋጅ" + "ምስሉን መጫን አልተቻለም" + "ምስሉን እንደ ግድግዳ ወረቀት መጫን አልተቻለም" + + "%1$d ተመርጧል" + "%1$d ተመርጧል" + "%1$d ተመርጧል" + + "የግድግዳ ወረቀት %1$d የ%2$d" + "%1$s ተመርጧል" + "ሰርዝ" + "ምስል ይምረጡ" + "የግድግዳ ወረቀቶች" + "የግድግዳ ወረቀት ይቁረጡ" + diff --git a/WallpaperPicker/res/values-ar/strings.xml b/WallpaperPicker/res/values-ar/strings.xml new file mode 100644 index 0000000000..2075cc875d --- /dev/null +++ b/WallpaperPicker/res/values-ar/strings.xml @@ -0,0 +1,36 @@ + + + + + "تعيين الخلفية" + "تعذر تحميل الصورة" + "تعذر تحميل الصورة كخلفية" + + "‏تم تحديد %1$d" + "‏تم تحديد %1$d" + "‏تم تحديد %1$d" + + "‏الخلفية %1$d من %2$d" + "تم تحديد %1$s" + "حذف" + "اختيار صورة" + "الخلفيات" + "اقتصاص الخلفية" + diff --git a/WallpaperPicker/res/values-bg/strings.xml b/WallpaperPicker/res/values-bg/strings.xml new file mode 100644 index 0000000000..ce4fc651b0 --- /dev/null +++ b/WallpaperPicker/res/values-bg/strings.xml @@ -0,0 +1,36 @@ + + + + + "Задаване на тапета" + "Изображението не можа да бъде заредено" + "Изображението не можа да бъде заредено като тапет" + + "Избрахте %1$d" + "Избрахте %1$d" + "Избрахте %1$d" + + "Тапет %1$d от %2$d" + "Избрахте %1$s" + "Изтриване" + "Избиране на изображение" + "Тапети" + "Подрязване на тапета" + diff --git a/WallpaperPicker/res/values-ca/strings.xml b/WallpaperPicker/res/values-ca/strings.xml new file mode 100644 index 0000000000..89de81c30f --- /dev/null +++ b/WallpaperPicker/res/values-ca/strings.xml @@ -0,0 +1,36 @@ + + + + + "Estableix el fons de pantalla" + "No s\'ha pogut carregar la imatge." + "No s\'ha pogut carregar la imatge com a fons de pantalla." + + "Seleccionats: %1$d" + "Seleccionats: %1$d" + "Seleccionats: %1$d" + + "Fons de pantalla %1$d de %2$d" + "S\'ha seleccionat %1$s." + "Suprimeix" + "Tria una imatge" + "Fons de pantalla" + "Retallar fons de pantalla" + diff --git a/WallpaperPicker/res/values-da/strings.xml b/WallpaperPicker/res/values-da/strings.xml new file mode 100644 index 0000000000..5b233e1d0e --- /dev/null +++ b/WallpaperPicker/res/values-da/strings.xml @@ -0,0 +1,36 @@ + + + + + "Angiv baggrund" + "Billedet kunne ikke indlæses" + "Billedet kunne ikke indlæses som baggrund" + + "%1$d er valgt" + "%1$d er valgt" + "%1$d er valgt" + + "Baggrund %1$d af %2$d" + "%1$s blev valgt" + "Slet" + "Vælg et billede" + "Baggrunde" + "Beskær baggrunden" + diff --git a/WallpaperPicker/res/values-de/strings.xml b/WallpaperPicker/res/values-de/strings.xml new file mode 100644 index 0000000000..11c1cac6a3 --- /dev/null +++ b/WallpaperPicker/res/values-de/strings.xml @@ -0,0 +1,36 @@ + + + + + "Hintergrund auswählen" + "Bild konnte nicht geladen werden." + "Bild konnte nicht als Hintergrund geladen werden." + + "%1$d ausgewählt" + "%1$d ausgewählt" + "%1$d ausgewählt" + + "Hintergrund %1$d von %2$d" + "%1$s ausgewählt" + "Löschen" + "Bild auswählen" + "Hintergründe" + "Hintergrund zuschneiden" + diff --git a/WallpaperPicker/res/values-el/strings.xml b/WallpaperPicker/res/values-el/strings.xml new file mode 100644 index 0000000000..8e1e78fb94 --- /dev/null +++ b/WallpaperPicker/res/values-el/strings.xml @@ -0,0 +1,36 @@ + + + + + "Ορισμός ταπετσαρίας" + "Δεν ήταν δυνατή η φόρτωση της εικόνας" + "Δεν ήταν δυνατή η φόρτωση της εικόνας ως ταπετσαρία" + + "%1$d επιλεγμένα" + "%1$d επιλεγμένα" + "%1$d επιλεγμένα" + + "Ταπετσαρία %1$d από %2$d" + "Επιλέχθηκε το %1$s" + "Διαγραφή" + "Επιλογή εικόνας" + "Ταπετσαρίες" + "Περικοπή ταπετσαρίας" + diff --git a/WallpaperPicker/res/values-en-rGB/strings.xml b/WallpaperPicker/res/values-en-rGB/strings.xml new file mode 100644 index 0000000000..c057c0cb35 --- /dev/null +++ b/WallpaperPicker/res/values-en-rGB/strings.xml @@ -0,0 +1,36 @@ + + + + + "Set wallpaper" + "Couldn\'t load image" + "Couldn\'t load image as wallpaper" + + "%1$d selected" + "%1$d selected" + "%1$d selected" + + "Wallpaper %1$d of %2$d" + "Selected %1$s" + "Delete" + "Pick image" + "Wallpapers" + "Crop wallpaper" + diff --git a/WallpaperPicker/res/values-en-rIN/strings.xml b/WallpaperPicker/res/values-en-rIN/strings.xml new file mode 100644 index 0000000000..c057c0cb35 --- /dev/null +++ b/WallpaperPicker/res/values-en-rIN/strings.xml @@ -0,0 +1,36 @@ + + + + + "Set wallpaper" + "Couldn\'t load image" + "Couldn\'t load image as wallpaper" + + "%1$d selected" + "%1$d selected" + "%1$d selected" + + "Wallpaper %1$d of %2$d" + "Selected %1$s" + "Delete" + "Pick image" + "Wallpapers" + "Crop wallpaper" + diff --git a/WallpaperPicker/res/values-es/strings.xml b/WallpaperPicker/res/values-es/strings.xml new file mode 100644 index 0000000000..702b6d413f --- /dev/null +++ b/WallpaperPicker/res/values-es/strings.xml @@ -0,0 +1,36 @@ + + + + + "Establecer fondo" + "No se ha podido cargar la imagen" + "No se ha podido cargar la imagen como fondo de pantalla" + + "Seleccionados: %1$d" + "Seleccionados: %1$d" + "Seleccionados: %1$d" + + "Fondo de pantalla %1$d de %2$d" + "%1$s seleccionado" + "Eliminar" + "Seleccionar imagen" + "Fondos de pantalla" + "Recortar fondo de pantalla" + diff --git a/WallpaperPicker/res/values-et-rEE/strings.xml b/WallpaperPicker/res/values-et-rEE/strings.xml new file mode 100644 index 0000000000..c09e223d9e --- /dev/null +++ b/WallpaperPicker/res/values-et-rEE/strings.xml @@ -0,0 +1,36 @@ + + + + + "Määra taustapilt" + "Kujutist ei õnnestunud laadida" + "Kujutist ei õnnestunud taustapildina laadida" + + "Valitud on %1$d" + "Valitud on %1$d" + "Valitud on %1$d" + + "%1$d/%2$d taustapildist" + "Valitud on %1$s" + "Kustuta" + "Vali kujutis" + "Taustapildid" + "Taustapildi kärpimine" + diff --git a/WallpaperPicker/res/values-fi/strings.xml b/WallpaperPicker/res/values-fi/strings.xml new file mode 100644 index 0000000000..0fa4b7bcfc --- /dev/null +++ b/WallpaperPicker/res/values-fi/strings.xml @@ -0,0 +1,36 @@ + + + + + "Aseta taustakuva" + "Kuvan lataus epäonnistui" + "Kuvaa ei voitu ladata taustakuvaksi" + + "%1$d valittu" + "%1$d valittu" + "%1$d valittu" + + "Taustakuva %1$d/%2$d" + "Valittu: %1$s" + "Poista" + "Valitse kuva" + "Taustakuvat" + "Rajaa taustakuva" + diff --git a/WallpaperPicker/res/values-hr/strings.xml b/WallpaperPicker/res/values-hr/strings.xml new file mode 100644 index 0000000000..ff2eed2ccf --- /dev/null +++ b/WallpaperPicker/res/values-hr/strings.xml @@ -0,0 +1,36 @@ + + + + + "Postavi pozadinsku sliku" + "Nije moguće učitati sliku" + "Nije moguće učitati sliku kao pozadinsku sliku" + + "Odabrano je %1$d stavki" + "Odabrana je %1$d stavka" + "Odabrano stavki: %1$d" + + "%1$d. pozadinska slika od %2$d" + "Odabrana je %1$s" + "Izbriši" + "Odaberi sliku" + "Pozadinske slike" + "Obrezivanje pozadinske slike" + diff --git a/WallpaperPicker/res/values-hu/strings.xml b/WallpaperPicker/res/values-hu/strings.xml new file mode 100644 index 0000000000..703aa12eb2 --- /dev/null +++ b/WallpaperPicker/res/values-hu/strings.xml @@ -0,0 +1,36 @@ + + + + + "Háttérkép beállítása" + "A kép betöltése nem sikerült" + "A kép betöltése háttérképként nem sikerült" + + "%1$d kiválasztva" + "%1$d kiválasztva" + "%1$d kiválasztva" + + "%1$d/%2$d. háttérkép" + "%1$s kiválasztva" + "Törlés" + "Kép kiválasztása" + "Háttérképek" + "Háttérkép körbevágása" + diff --git a/WallpaperPicker/res/values-hy-rAM/strings.xml b/WallpaperPicker/res/values-hy-rAM/strings.xml new file mode 100644 index 0000000000..f3891dd35a --- /dev/null +++ b/WallpaperPicker/res/values-hy-rAM/strings.xml @@ -0,0 +1,36 @@ + + + + + "Սահմանել պաստառը" + "Չհաջողվեց բեռնել նկարը" + "Չհաջողվեց նկարը սահմանել որպես պաստառ" + + "%1$d ընտրված" + "%1$d ընտրված" + "%1$d ընտրված" + + "%1$d պաստառ՝ %2$d-ից" + "Ընտրված է %1$s" + "Ջնջել" + "Ընտրել պատկեր" + "Պաստառներ" + "Եզրատել պաստառը" + diff --git a/WallpaperPicker/res/values-it/strings.xml b/WallpaperPicker/res/values-it/strings.xml new file mode 100644 index 0000000000..fcd49bd291 --- /dev/null +++ b/WallpaperPicker/res/values-it/strings.xml @@ -0,0 +1,36 @@ + + + + + "Imposta sfondo" + "Impossibile caricare l\'immagine" + "Impossibile caricare l\'immagine come sfondo" + + "%1$d selezionato" + "%1$d selezionato" + "%1$d selezionato" + + "Sfondo %1$d di %2$d" + "Elemento selezionato: %1$s" + "Elimina" + "Scegli l\'immagine" + "Sfondi" + "Ritaglia sfondo" + diff --git a/WallpaperPicker/res/values-iw/strings.xml b/WallpaperPicker/res/values-iw/strings.xml new file mode 100644 index 0000000000..ddc96e92c5 --- /dev/null +++ b/WallpaperPicker/res/values-iw/strings.xml @@ -0,0 +1,36 @@ + + + + + "הגדר טפט" + "לא ניתן היה לטעון את התמונה" + "לא ניתן היה לטעון את התמונה כטפט" + + "‏%1$d נבחרו" + "‏%1$d נבחרו" + "‏%1$d נבחרו" + + "‏טפט %1$d מתוך %2$d" + "בחרת %1$s" + "מחק" + "בחר תמונה" + "טפטים" + "חתוך את הטפט" + diff --git a/WallpaperPicker/res/values-km-rKH/strings.xml b/WallpaperPicker/res/values-km-rKH/strings.xml new file mode 100644 index 0000000000..41722355f1 --- /dev/null +++ b/WallpaperPicker/res/values-km-rKH/strings.xml @@ -0,0 +1,36 @@ + + + + + "កំណត់​ផ្ទាំង​រូបភាព" + "មិន​អាច​ផ្ទុក​រូបភាព" + "មិន​អាច​ផ្ទុក​រូបភាព​ជា​ផ្ទាំង​រូបភាព" + + "បាន​ជ្រើស %1$d" + "បាន​ជ្រើស %1$d" + "បាន​ជ្រើស %1$d" + + "ផ្ទាំង​រូបភាព %1$d នៃ %2$d" + "បាន​ជ្រើស %1$s" + "លុប" + "ជ្រើស​យក​រូបភាព" + "ផ្ទាំង​រូបភាព" + "ច្រឹប​ផ្ទាំង​រូបភាព" + diff --git a/WallpaperPicker/res/values-ko/strings.xml b/WallpaperPicker/res/values-ko/strings.xml new file mode 100644 index 0000000000..a5a85b773d --- /dev/null +++ b/WallpaperPicker/res/values-ko/strings.xml @@ -0,0 +1,36 @@ + + + + + "배경화면 설정" + "이미지를 로드할 수 없습니다." + "이미지를 배경화면으로 로드할 수 없습니다." + + "%1$d개 선택됨" + "%1$d개 선택됨" + "%1$d개 선택됨" + + "배경화면 %1$d/%2$d" + "%1$s 선택함" + "삭제" + "이미지 선택" + "배경화면" + "배경화면 잘라내기" + diff --git a/WallpaperPicker/res/values-lt/strings.xml b/WallpaperPicker/res/values-lt/strings.xml new file mode 100644 index 0000000000..86035b8838 --- /dev/null +++ b/WallpaperPicker/res/values-lt/strings.xml @@ -0,0 +1,36 @@ + + + + + "Nustatyti ekrano foną" + "Nepavyko įkelti vaizdo" + "Nepavyko įkelti vaizdo kaip ekrano fono" + + "Pasirinkta: %1$d" + "Pasirinkta: %1$d" + "Pasirinkta: %1$d" + + "%1$d ekrano fonas iš %2$d" + "Pasirinkta: %1$s" + "Ištrinti" + "Pasirinkti vaizdą" + "Ekrano fonai" + "Apkirpti ekrano foną" + diff --git a/WallpaperPicker/res/values-lv/strings.xml b/WallpaperPicker/res/values-lv/strings.xml new file mode 100644 index 0000000000..02e5cfb22a --- /dev/null +++ b/WallpaperPicker/res/values-lv/strings.xml @@ -0,0 +1,36 @@ + + + + + "Iestatīt fona tapeti" + "Nevarēja ielādēt attēlu." + "Nevarēja ielādēt attēlu kā fona tapeti." + + "Atlasīts: %1$d" + "Atlasīta: %1$d" + "Atlasītas: %1$d" + + "%1$d. fona tapete no %2$d" + "Atlasīta: %1$s" + "Dzēst" + "Izvēlēties attēlu" + "Fona tapetes" + "Apgriezt fona tapeti" + diff --git a/WallpaperPicker/res/values-mn-rMN/strings.xml b/WallpaperPicker/res/values-mn-rMN/strings.xml new file mode 100644 index 0000000000..71ff9e0f72 --- /dev/null +++ b/WallpaperPicker/res/values-mn-rMN/strings.xml @@ -0,0 +1,36 @@ + + + + + "Ханын зургийг тохируулах" + "Зургийг ачаалж чадсангүй" + "Зургийг ханын зураг болгож ачаалж чадсангүй" + + "%1$d сонгогдсон" + "%1$d сонгогдсон" + "%1$d сонгогдсон" + + "%2$d ханын цаасны %1$d нь" + "%1$s сонгогдсон" + "Устгах" + "Зураг сонгох" + "Ханын зураг" + "Ханын зургийг тайрах" + diff --git a/WallpaperPicker/res/values-nl/strings.xml b/WallpaperPicker/res/values-nl/strings.xml new file mode 100644 index 0000000000..7dd4f22b07 --- /dev/null +++ b/WallpaperPicker/res/values-nl/strings.xml @@ -0,0 +1,36 @@ + + + + + "Achtergrond instellen" + "Kan afbeelding niet laden" + "Kan afbeelding niet laden als achtergrond" + + "%1$d geselecteerd" + "%1$d geselecteerd" + "%1$d geselecteerd" + + "Achtergrond %1$d van %2$d" + "%1$s is geselecteerd" + "Verwijderen" + "Afbeelding kiezen" + "Achtergronden" + "Achtergrond bijsnijden" + diff --git a/WallpaperPicker/res/values-pl/strings.xml b/WallpaperPicker/res/values-pl/strings.xml new file mode 100644 index 0000000000..bcdbb3dc7b --- /dev/null +++ b/WallpaperPicker/res/values-pl/strings.xml @@ -0,0 +1,36 @@ + + + + + "Ustaw tapetę" + "Nie udało się załadować obrazu" + "Nie udało się załadować obrazu jako tapety" + + "Wybranych %1$d" + "Wybrana %1$d" + "Wybrane: %1$d" + + "Tapeta %1$d z %2$d" + "Wybrano %1$s" + "Usuń" + "Wybierz obraz" + "Tapety" + "Przytnij tapetę" + diff --git a/WallpaperPicker/res/values-pt-rPT/strings.xml b/WallpaperPicker/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..83492327f9 --- /dev/null +++ b/WallpaperPicker/res/values-pt-rPT/strings.xml @@ -0,0 +1,36 @@ + + + + + "Definir imagem fundo" + "Não foi possível carregar a imagem" + "Não foi possível carregar a imagem como imagem de fundo" + + "%1$d selecionadas" + "%1$d selecionada" + "%1$d selecionadas" + + "Imagem de fundo %1$d de %2$d" + "%1$s selecionada" + "Eliminar" + "Escolher imagem" + "Imagens de fundo" + "Recortar imagem de fundo" + diff --git a/WallpaperPicker/res/values-pt/strings.xml b/WallpaperPicker/res/values-pt/strings.xml new file mode 100644 index 0000000000..2332fcbd13 --- /dev/null +++ b/WallpaperPicker/res/values-pt/strings.xml @@ -0,0 +1,36 @@ + + + + + "Definir plano de fundo" + "Não foi possível carregar a imagem" + "Não foi possível carregar a imagem como plano de fundo" + + "%1$d selecionados" + "%1$d selecionado" + "%1$d selecionados" + + "Plano de fundo %1$d de %2$d" + "%1$s selecionado" + "Excluir" + "Escolher imagem" + "Planos de fundo" + "Cortar plano de fundo" + diff --git a/WallpaperPicker/res/values-ro/strings.xml b/WallpaperPicker/res/values-ro/strings.xml new file mode 100644 index 0000000000..8ee1a5a391 --- /dev/null +++ b/WallpaperPicker/res/values-ro/strings.xml @@ -0,0 +1,36 @@ + + + + + "Setați imaginea de fundal" + "Nu s-a putut încărca imaginea" + "Nu s-a putut încărca imaginea ca fundal" + + "%1$d selectate" + "%1$d selectată" + "%1$d selectate" + + "Imaginea de fundal %1$d din %2$d" + "S-a selectat %1$s" + "Ștergeți" + "Alegeți imaginea" + "Imagini de fundal" + "Decupați imaginea de fundal" + diff --git a/WallpaperPicker/res/values-ru/strings.xml b/WallpaperPicker/res/values-ru/strings.xml new file mode 100644 index 0000000000..2ba2af2a5d --- /dev/null +++ b/WallpaperPicker/res/values-ru/strings.xml @@ -0,0 +1,36 @@ + + + + + "Установить как обои" + "Не удалось загрузить изображение" + "Не удалось загрузить изображение" + + "%1$d" + "%1$d" + "%1$d" + + "Обои %1$d из %2$d" + "Выбран элемент \"%1$s\"" + "Удалить" + "Выбрать обои" + "Обои" + "Кадрировать обои" + diff --git a/WallpaperPicker/res/values-sr/strings.xml b/WallpaperPicker/res/values-sr/strings.xml new file mode 100644 index 0000000000..fdfaaf60f0 --- /dev/null +++ b/WallpaperPicker/res/values-sr/strings.xml @@ -0,0 +1,36 @@ + + + + + "Подеси позадину" + "Није могуће учитати слику" + "Није могуће учитати слику као позадину" + + "Изабрано је %1$d" + "Изабрана је %1$d" + "Изабраних: %1$d" + + "Позадина %1$d од %2$d" + "Изабрана је %1$s" + "Избриши" + "Изабери слику" + "Позадине" + "Опсеци позадину" + diff --git a/WallpaperPicker/res/values-th/strings.xml b/WallpaperPicker/res/values-th/strings.xml new file mode 100644 index 0000000000..6b4c235361 --- /dev/null +++ b/WallpaperPicker/res/values-th/strings.xml @@ -0,0 +1,36 @@ + + + + + "ตั้งวอลเปเปอร์" + "ไม่สามารถโหลดรูปภาพ" + "ไม่สามารถโหลดรูปภาพเป็นวอลเปเปอร์" + + "เลือกไว้ %1$d" + "เลือกไว้ %1$d" + "เลือกไว้ %1$d" + + "วอลเปเปอร์ %1$d จาก %2$d" + "เลือก %1$s แล้ว" + "ลบ" + "เลือกรูปภาพ" + "วอลเปเปอร์" + "ครอบตัดวอลเปเปอร์" + diff --git a/WallpaperPicker/res/values-tl/strings.xml b/WallpaperPicker/res/values-tl/strings.xml new file mode 100644 index 0000000000..c9fe338d42 --- /dev/null +++ b/WallpaperPicker/res/values-tl/strings.xml @@ -0,0 +1,36 @@ + + + + + "Itakda ang wallpaper" + "Hindi ma-load ang larawan" + "Hindi ma-load ang larawan bilang wallpaper" + + "%1$d ang napili" + "%1$d ang napili" + "%1$d ang napili" + + "Wallpaper %1$d ng %2$d" + "Napili ang %1$s" + "Tanggalin" + "Pumili ng larawan" + "Mga Wallpaper" + "I-crop ang wallpaper" + diff --git a/WallpaperPicker/res/values-uk/strings.xml b/WallpaperPicker/res/values-uk/strings.xml new file mode 100644 index 0000000000..076c88238b --- /dev/null +++ b/WallpaperPicker/res/values-uk/strings.xml @@ -0,0 +1,36 @@ + + + + + "Установити фон" + "Не вдалося завантажити зображення" + "Не вдалося завантажити зображення як фоновий малюнок" + + "Вибрано %1$d" + "Вибрано %1$d" + "Вибрано %1$d" + + "Фоновий малюнок %1$d з %2$d" + "Вибрано %1$s" + "Видалити" + "Вибрати зображення" + "Фонові малюнки" + "Обрізати фоновий малюнок" + diff --git a/WallpaperPicker/res/values-vi/strings.xml b/WallpaperPicker/res/values-vi/strings.xml new file mode 100644 index 0000000000..d1efbe9892 --- /dev/null +++ b/WallpaperPicker/res/values-vi/strings.xml @@ -0,0 +1,36 @@ + + + + + "Đặt hình nền" + "Không thể tải hình ảnh" + "Không thể tải hình ảnh làm hình nền" + + "Đã chọn %1$d" + "Đã chọn %1$d" + "Đã chọn %1$d" + + "Hình nền %1$d / %2$d" + "%1$s được chọn" + "Xóa" + "Chọn hình ảnh" + "Hình nền" + "Cắt hình nền" + diff --git a/WallpaperPicker/res/values-zh-rHK/strings.xml b/WallpaperPicker/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000000..e7a12c1baf --- /dev/null +++ b/WallpaperPicker/res/values-zh-rHK/strings.xml @@ -0,0 +1,36 @@ + + + + + "設定桌布" + "無法載入圖片" + "無法載入圖片設為桌布" + + "已選取 %1$d 張" + "已選取 %1$d 張" + "已選取 %1$d 張" + + "第 %1$d 張桌布,共 %2$d 張" + "已選取「%1$s」" + "刪除" + "選擇圖片" + "桌布" + "裁剪桌布" + diff --git a/WallpaperPicker/res/values-zh-rTW/strings.xml b/WallpaperPicker/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000..4184976083 --- /dev/null +++ b/WallpaperPicker/res/values-zh-rTW/strings.xml @@ -0,0 +1,36 @@ + + + + + "設定桌布" + "無法載入圖片" + "無法載入您要設為桌布的圖片" + + "已選取 %1$d 個" + "已選取 %1$d 個" + "已選取 %1$d 個" + + "第 %1$d 張桌布,共 %2$d 張" + "已選取%1$s" + "刪除" + "選擇圖片" + "桌布" + "裁剪桌布" + From 99af01ae3aba809a08d103e7e8a83d56b137de8e Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Mon, 16 Dec 2013 13:18:55 -0800 Subject: [PATCH 080/147] Import translations. DO NOT MERGE Change-Id: If4f1706611c12995db7f3ff9349aaa08609848a1 Auto-generated-cl: translation import --- WallpaperPicker/res/values-af/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-am/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ar/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-bg/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ca/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-da/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-de/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-el/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-en-rGB/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-en-rIN/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-es/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-et-rEE/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-fi/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-hr/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-hu/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-hy-rAM/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-it/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-iw/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-km-rKH/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ko/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-lt/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-lv/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-mn-rMN/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-nl/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-pl/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-pt-rPT/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-pt/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ro/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ru/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-sr/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-th/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-tl/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-uk/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-vi/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-zh-rHK/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-zh-rTW/strings.xml | 36 +++++++++++++++++++ res/values-af/strings.xml | 14 -------- res/values-am/strings.xml | 14 -------- res/values-ar/strings.xml | 14 -------- res/values-bg/strings.xml | 14 -------- res/values-ca/strings.xml | 14 -------- res/values-cs/strings.xml | 14 -------- res/values-da/strings.xml | 14 -------- res/values-de/strings.xml | 14 -------- res/values-el/strings.xml | 14 -------- res/values-en-rGB/strings.xml | 14 -------- res/values-en-rIN/strings.xml | 14 -------- res/values-es-rUS/strings.xml | 14 -------- res/values-es/strings.xml | 14 -------- res/values-et-rEE/strings.xml | 14 -------- res/values-fa/strings.xml | 14 -------- res/values-fi/strings.xml | 14 -------- res/values-fr-rCA/strings.xml | 14 -------- res/values-fr/strings.xml | 14 -------- res/values-hi/strings.xml | 14 -------- res/values-hr/strings.xml | 14 -------- res/values-hu/strings.xml | 14 -------- res/values-hy-rAM/strings.xml | 14 -------- res/values-in/strings.xml | 14 -------- res/values-it/strings.xml | 14 -------- res/values-iw/strings.xml | 14 -------- res/values-ja/strings.xml | 14 -------- res/values-ka-rGE/strings.xml | 14 -------- res/values-km-rKH/strings.xml | 14 -------- res/values-ko/strings.xml | 14 -------- res/values-lo-rLA/strings.xml | 14 -------- res/values-lt/strings.xml | 14 -------- res/values-lv/strings.xml | 14 -------- res/values-mn-rMN/strings.xml | 14 -------- res/values-ms-rMY/strings.xml | 14 -------- res/values-nb/strings.xml | 14 -------- res/values-nl/strings.xml | 14 -------- res/values-pl/strings.xml | 14 -------- res/values-pt-rPT/strings.xml | 14 -------- res/values-pt/strings.xml | 14 -------- res/values-rm/strings.xml | 21 ----------- res/values-ro/strings.xml | 14 -------- res/values-ru/strings.xml | 14 -------- res/values-sk/strings.xml | 14 -------- res/values-sl/strings.xml | 14 -------- res/values-sr/strings.xml | 14 -------- res/values-sv/strings.xml | 14 -------- res/values-sw/strings.xml | 14 -------- res/values-th/strings.xml | 14 -------- res/values-tl/strings.xml | 14 -------- res/values-tr/strings.xml | 14 -------- res/values-uk/strings.xml | 14 -------- res/values-vi/strings.xml | 14 -------- res/values-zh-rCN/strings.xml | 14 -------- res/values-zh-rHK/strings.xml | 14 -------- res/values-zh-rTW/strings.xml | 14 -------- res/values-zu/strings.xml | 14 -------- 92 files changed, 1296 insertions(+), 791 deletions(-) create mode 100644 WallpaperPicker/res/values-af/strings.xml create mode 100644 WallpaperPicker/res/values-am/strings.xml create mode 100644 WallpaperPicker/res/values-ar/strings.xml create mode 100644 WallpaperPicker/res/values-bg/strings.xml create mode 100644 WallpaperPicker/res/values-ca/strings.xml create mode 100644 WallpaperPicker/res/values-da/strings.xml create mode 100644 WallpaperPicker/res/values-de/strings.xml create mode 100644 WallpaperPicker/res/values-el/strings.xml create mode 100644 WallpaperPicker/res/values-en-rGB/strings.xml create mode 100644 WallpaperPicker/res/values-en-rIN/strings.xml create mode 100644 WallpaperPicker/res/values-es/strings.xml create mode 100644 WallpaperPicker/res/values-et-rEE/strings.xml create mode 100644 WallpaperPicker/res/values-fi/strings.xml create mode 100644 WallpaperPicker/res/values-hr/strings.xml create mode 100644 WallpaperPicker/res/values-hu/strings.xml create mode 100644 WallpaperPicker/res/values-hy-rAM/strings.xml create mode 100644 WallpaperPicker/res/values-it/strings.xml create mode 100644 WallpaperPicker/res/values-iw/strings.xml create mode 100644 WallpaperPicker/res/values-km-rKH/strings.xml create mode 100644 WallpaperPicker/res/values-ko/strings.xml create mode 100644 WallpaperPicker/res/values-lt/strings.xml create mode 100644 WallpaperPicker/res/values-lv/strings.xml create mode 100644 WallpaperPicker/res/values-mn-rMN/strings.xml create mode 100644 WallpaperPicker/res/values-nl/strings.xml create mode 100644 WallpaperPicker/res/values-pl/strings.xml create mode 100644 WallpaperPicker/res/values-pt-rPT/strings.xml create mode 100644 WallpaperPicker/res/values-pt/strings.xml create mode 100644 WallpaperPicker/res/values-ro/strings.xml create mode 100644 WallpaperPicker/res/values-ru/strings.xml create mode 100644 WallpaperPicker/res/values-sr/strings.xml create mode 100644 WallpaperPicker/res/values-th/strings.xml create mode 100644 WallpaperPicker/res/values-tl/strings.xml create mode 100644 WallpaperPicker/res/values-uk/strings.xml create mode 100644 WallpaperPicker/res/values-vi/strings.xml create mode 100644 WallpaperPicker/res/values-zh-rHK/strings.xml create mode 100644 WallpaperPicker/res/values-zh-rTW/strings.xml diff --git a/WallpaperPicker/res/values-af/strings.xml b/WallpaperPicker/res/values-af/strings.xml new file mode 100644 index 0000000000..c17d26be0e --- /dev/null +++ b/WallpaperPicker/res/values-af/strings.xml @@ -0,0 +1,36 @@ + + + + + "Stel muurpapier" + "Kon nie prent laai nie" + "Kon nie prent as muurpapier laai nie" + + "%1$d gekies" + "%1$d gekies" + "%1$d gekies" + + "Muurpapier %1$d van %2$d" + "Het %1$s gekies" + "Vee uit" + "Kies prent" + "Muurpapiere" + "Snoei muurpapier" + diff --git a/WallpaperPicker/res/values-am/strings.xml b/WallpaperPicker/res/values-am/strings.xml new file mode 100644 index 0000000000..e4bcadbed8 --- /dev/null +++ b/WallpaperPicker/res/values-am/strings.xml @@ -0,0 +1,36 @@ + + + + + "የግድግዳ ወረቀት አዘጋጅ" + "ምስሉን መጫን አልተቻለም" + "ምስሉን እንደ ግድግዳ ወረቀት መጫን አልተቻለም" + + "%1$d ተመርጧል" + "%1$d ተመርጧል" + "%1$d ተመርጧል" + + "የግድግዳ ወረቀት %1$d የ%2$d" + "%1$s ተመርጧል" + "ሰርዝ" + "ምስል ይምረጡ" + "የግድግዳ ወረቀቶች" + "የግድግዳ ወረቀት ይቁረጡ" + diff --git a/WallpaperPicker/res/values-ar/strings.xml b/WallpaperPicker/res/values-ar/strings.xml new file mode 100644 index 0000000000..2075cc875d --- /dev/null +++ b/WallpaperPicker/res/values-ar/strings.xml @@ -0,0 +1,36 @@ + + + + + "تعيين الخلفية" + "تعذر تحميل الصورة" + "تعذر تحميل الصورة كخلفية" + + "‏تم تحديد %1$d" + "‏تم تحديد %1$d" + "‏تم تحديد %1$d" + + "‏الخلفية %1$d من %2$d" + "تم تحديد %1$s" + "حذف" + "اختيار صورة" + "الخلفيات" + "اقتصاص الخلفية" + diff --git a/WallpaperPicker/res/values-bg/strings.xml b/WallpaperPicker/res/values-bg/strings.xml new file mode 100644 index 0000000000..ce4fc651b0 --- /dev/null +++ b/WallpaperPicker/res/values-bg/strings.xml @@ -0,0 +1,36 @@ + + + + + "Задаване на тапета" + "Изображението не можа да бъде заредено" + "Изображението не можа да бъде заредено като тапет" + + "Избрахте %1$d" + "Избрахте %1$d" + "Избрахте %1$d" + + "Тапет %1$d от %2$d" + "Избрахте %1$s" + "Изтриване" + "Избиране на изображение" + "Тапети" + "Подрязване на тапета" + diff --git a/WallpaperPicker/res/values-ca/strings.xml b/WallpaperPicker/res/values-ca/strings.xml new file mode 100644 index 0000000000..89de81c30f --- /dev/null +++ b/WallpaperPicker/res/values-ca/strings.xml @@ -0,0 +1,36 @@ + + + + + "Estableix el fons de pantalla" + "No s\'ha pogut carregar la imatge." + "No s\'ha pogut carregar la imatge com a fons de pantalla." + + "Seleccionats: %1$d" + "Seleccionats: %1$d" + "Seleccionats: %1$d" + + "Fons de pantalla %1$d de %2$d" + "S\'ha seleccionat %1$s." + "Suprimeix" + "Tria una imatge" + "Fons de pantalla" + "Retallar fons de pantalla" + diff --git a/WallpaperPicker/res/values-da/strings.xml b/WallpaperPicker/res/values-da/strings.xml new file mode 100644 index 0000000000..5b233e1d0e --- /dev/null +++ b/WallpaperPicker/res/values-da/strings.xml @@ -0,0 +1,36 @@ + + + + + "Angiv baggrund" + "Billedet kunne ikke indlæses" + "Billedet kunne ikke indlæses som baggrund" + + "%1$d er valgt" + "%1$d er valgt" + "%1$d er valgt" + + "Baggrund %1$d af %2$d" + "%1$s blev valgt" + "Slet" + "Vælg et billede" + "Baggrunde" + "Beskær baggrunden" + diff --git a/WallpaperPicker/res/values-de/strings.xml b/WallpaperPicker/res/values-de/strings.xml new file mode 100644 index 0000000000..11c1cac6a3 --- /dev/null +++ b/WallpaperPicker/res/values-de/strings.xml @@ -0,0 +1,36 @@ + + + + + "Hintergrund auswählen" + "Bild konnte nicht geladen werden." + "Bild konnte nicht als Hintergrund geladen werden." + + "%1$d ausgewählt" + "%1$d ausgewählt" + "%1$d ausgewählt" + + "Hintergrund %1$d von %2$d" + "%1$s ausgewählt" + "Löschen" + "Bild auswählen" + "Hintergründe" + "Hintergrund zuschneiden" + diff --git a/WallpaperPicker/res/values-el/strings.xml b/WallpaperPicker/res/values-el/strings.xml new file mode 100644 index 0000000000..8e1e78fb94 --- /dev/null +++ b/WallpaperPicker/res/values-el/strings.xml @@ -0,0 +1,36 @@ + + + + + "Ορισμός ταπετσαρίας" + "Δεν ήταν δυνατή η φόρτωση της εικόνας" + "Δεν ήταν δυνατή η φόρτωση της εικόνας ως ταπετσαρία" + + "%1$d επιλεγμένα" + "%1$d επιλεγμένα" + "%1$d επιλεγμένα" + + "Ταπετσαρία %1$d από %2$d" + "Επιλέχθηκε το %1$s" + "Διαγραφή" + "Επιλογή εικόνας" + "Ταπετσαρίες" + "Περικοπή ταπετσαρίας" + diff --git a/WallpaperPicker/res/values-en-rGB/strings.xml b/WallpaperPicker/res/values-en-rGB/strings.xml new file mode 100644 index 0000000000..c057c0cb35 --- /dev/null +++ b/WallpaperPicker/res/values-en-rGB/strings.xml @@ -0,0 +1,36 @@ + + + + + "Set wallpaper" + "Couldn\'t load image" + "Couldn\'t load image as wallpaper" + + "%1$d selected" + "%1$d selected" + "%1$d selected" + + "Wallpaper %1$d of %2$d" + "Selected %1$s" + "Delete" + "Pick image" + "Wallpapers" + "Crop wallpaper" + diff --git a/WallpaperPicker/res/values-en-rIN/strings.xml b/WallpaperPicker/res/values-en-rIN/strings.xml new file mode 100644 index 0000000000..c057c0cb35 --- /dev/null +++ b/WallpaperPicker/res/values-en-rIN/strings.xml @@ -0,0 +1,36 @@ + + + + + "Set wallpaper" + "Couldn\'t load image" + "Couldn\'t load image as wallpaper" + + "%1$d selected" + "%1$d selected" + "%1$d selected" + + "Wallpaper %1$d of %2$d" + "Selected %1$s" + "Delete" + "Pick image" + "Wallpapers" + "Crop wallpaper" + diff --git a/WallpaperPicker/res/values-es/strings.xml b/WallpaperPicker/res/values-es/strings.xml new file mode 100644 index 0000000000..702b6d413f --- /dev/null +++ b/WallpaperPicker/res/values-es/strings.xml @@ -0,0 +1,36 @@ + + + + + "Establecer fondo" + "No se ha podido cargar la imagen" + "No se ha podido cargar la imagen como fondo de pantalla" + + "Seleccionados: %1$d" + "Seleccionados: %1$d" + "Seleccionados: %1$d" + + "Fondo de pantalla %1$d de %2$d" + "%1$s seleccionado" + "Eliminar" + "Seleccionar imagen" + "Fondos de pantalla" + "Recortar fondo de pantalla" + diff --git a/WallpaperPicker/res/values-et-rEE/strings.xml b/WallpaperPicker/res/values-et-rEE/strings.xml new file mode 100644 index 0000000000..c09e223d9e --- /dev/null +++ b/WallpaperPicker/res/values-et-rEE/strings.xml @@ -0,0 +1,36 @@ + + + + + "Määra taustapilt" + "Kujutist ei õnnestunud laadida" + "Kujutist ei õnnestunud taustapildina laadida" + + "Valitud on %1$d" + "Valitud on %1$d" + "Valitud on %1$d" + + "%1$d/%2$d taustapildist" + "Valitud on %1$s" + "Kustuta" + "Vali kujutis" + "Taustapildid" + "Taustapildi kärpimine" + diff --git a/WallpaperPicker/res/values-fi/strings.xml b/WallpaperPicker/res/values-fi/strings.xml new file mode 100644 index 0000000000..0fa4b7bcfc --- /dev/null +++ b/WallpaperPicker/res/values-fi/strings.xml @@ -0,0 +1,36 @@ + + + + + "Aseta taustakuva" + "Kuvan lataus epäonnistui" + "Kuvaa ei voitu ladata taustakuvaksi" + + "%1$d valittu" + "%1$d valittu" + "%1$d valittu" + + "Taustakuva %1$d/%2$d" + "Valittu: %1$s" + "Poista" + "Valitse kuva" + "Taustakuvat" + "Rajaa taustakuva" + diff --git a/WallpaperPicker/res/values-hr/strings.xml b/WallpaperPicker/res/values-hr/strings.xml new file mode 100644 index 0000000000..ff2eed2ccf --- /dev/null +++ b/WallpaperPicker/res/values-hr/strings.xml @@ -0,0 +1,36 @@ + + + + + "Postavi pozadinsku sliku" + "Nije moguće učitati sliku" + "Nije moguće učitati sliku kao pozadinsku sliku" + + "Odabrano je %1$d stavki" + "Odabrana je %1$d stavka" + "Odabrano stavki: %1$d" + + "%1$d. pozadinska slika od %2$d" + "Odabrana je %1$s" + "Izbriši" + "Odaberi sliku" + "Pozadinske slike" + "Obrezivanje pozadinske slike" + diff --git a/WallpaperPicker/res/values-hu/strings.xml b/WallpaperPicker/res/values-hu/strings.xml new file mode 100644 index 0000000000..703aa12eb2 --- /dev/null +++ b/WallpaperPicker/res/values-hu/strings.xml @@ -0,0 +1,36 @@ + + + + + "Háttérkép beállítása" + "A kép betöltése nem sikerült" + "A kép betöltése háttérképként nem sikerült" + + "%1$d kiválasztva" + "%1$d kiválasztva" + "%1$d kiválasztva" + + "%1$d/%2$d. háttérkép" + "%1$s kiválasztva" + "Törlés" + "Kép kiválasztása" + "Háttérképek" + "Háttérkép körbevágása" + diff --git a/WallpaperPicker/res/values-hy-rAM/strings.xml b/WallpaperPicker/res/values-hy-rAM/strings.xml new file mode 100644 index 0000000000..f3891dd35a --- /dev/null +++ b/WallpaperPicker/res/values-hy-rAM/strings.xml @@ -0,0 +1,36 @@ + + + + + "Սահմանել պաստառը" + "Չհաջողվեց բեռնել նկարը" + "Չհաջողվեց նկարը սահմանել որպես պաստառ" + + "%1$d ընտրված" + "%1$d ընտրված" + "%1$d ընտրված" + + "%1$d պաստառ՝ %2$d-ից" + "Ընտրված է %1$s" + "Ջնջել" + "Ընտրել պատկեր" + "Պաստառներ" + "Եզրատել պաստառը" + diff --git a/WallpaperPicker/res/values-it/strings.xml b/WallpaperPicker/res/values-it/strings.xml new file mode 100644 index 0000000000..fcd49bd291 --- /dev/null +++ b/WallpaperPicker/res/values-it/strings.xml @@ -0,0 +1,36 @@ + + + + + "Imposta sfondo" + "Impossibile caricare l\'immagine" + "Impossibile caricare l\'immagine come sfondo" + + "%1$d selezionato" + "%1$d selezionato" + "%1$d selezionato" + + "Sfondo %1$d di %2$d" + "Elemento selezionato: %1$s" + "Elimina" + "Scegli l\'immagine" + "Sfondi" + "Ritaglia sfondo" + diff --git a/WallpaperPicker/res/values-iw/strings.xml b/WallpaperPicker/res/values-iw/strings.xml new file mode 100644 index 0000000000..ddc96e92c5 --- /dev/null +++ b/WallpaperPicker/res/values-iw/strings.xml @@ -0,0 +1,36 @@ + + + + + "הגדר טפט" + "לא ניתן היה לטעון את התמונה" + "לא ניתן היה לטעון את התמונה כטפט" + + "‏%1$d נבחרו" + "‏%1$d נבחרו" + "‏%1$d נבחרו" + + "‏טפט %1$d מתוך %2$d" + "בחרת %1$s" + "מחק" + "בחר תמונה" + "טפטים" + "חתוך את הטפט" + diff --git a/WallpaperPicker/res/values-km-rKH/strings.xml b/WallpaperPicker/res/values-km-rKH/strings.xml new file mode 100644 index 0000000000..41722355f1 --- /dev/null +++ b/WallpaperPicker/res/values-km-rKH/strings.xml @@ -0,0 +1,36 @@ + + + + + "កំណត់​ផ្ទាំង​រូបភាព" + "មិន​អាច​ផ្ទុក​រូបភាព" + "មិន​អាច​ផ្ទុក​រូបភាព​ជា​ផ្ទាំង​រូបភាព" + + "បាន​ជ្រើស %1$d" + "បាន​ជ្រើស %1$d" + "បាន​ជ្រើស %1$d" + + "ផ្ទាំង​រូបភាព %1$d នៃ %2$d" + "បាន​ជ្រើស %1$s" + "លុប" + "ជ្រើស​យក​រូបភាព" + "ផ្ទាំង​រូបភាព" + "ច្រឹប​ផ្ទាំង​រូបភាព" + diff --git a/WallpaperPicker/res/values-ko/strings.xml b/WallpaperPicker/res/values-ko/strings.xml new file mode 100644 index 0000000000..a5a85b773d --- /dev/null +++ b/WallpaperPicker/res/values-ko/strings.xml @@ -0,0 +1,36 @@ + + + + + "배경화면 설정" + "이미지를 로드할 수 없습니다." + "이미지를 배경화면으로 로드할 수 없습니다." + + "%1$d개 선택됨" + "%1$d개 선택됨" + "%1$d개 선택됨" + + "배경화면 %1$d/%2$d" + "%1$s 선택함" + "삭제" + "이미지 선택" + "배경화면" + "배경화면 잘라내기" + diff --git a/WallpaperPicker/res/values-lt/strings.xml b/WallpaperPicker/res/values-lt/strings.xml new file mode 100644 index 0000000000..86035b8838 --- /dev/null +++ b/WallpaperPicker/res/values-lt/strings.xml @@ -0,0 +1,36 @@ + + + + + "Nustatyti ekrano foną" + "Nepavyko įkelti vaizdo" + "Nepavyko įkelti vaizdo kaip ekrano fono" + + "Pasirinkta: %1$d" + "Pasirinkta: %1$d" + "Pasirinkta: %1$d" + + "%1$d ekrano fonas iš %2$d" + "Pasirinkta: %1$s" + "Ištrinti" + "Pasirinkti vaizdą" + "Ekrano fonai" + "Apkirpti ekrano foną" + diff --git a/WallpaperPicker/res/values-lv/strings.xml b/WallpaperPicker/res/values-lv/strings.xml new file mode 100644 index 0000000000..02e5cfb22a --- /dev/null +++ b/WallpaperPicker/res/values-lv/strings.xml @@ -0,0 +1,36 @@ + + + + + "Iestatīt fona tapeti" + "Nevarēja ielādēt attēlu." + "Nevarēja ielādēt attēlu kā fona tapeti." + + "Atlasīts: %1$d" + "Atlasīta: %1$d" + "Atlasītas: %1$d" + + "%1$d. fona tapete no %2$d" + "Atlasīta: %1$s" + "Dzēst" + "Izvēlēties attēlu" + "Fona tapetes" + "Apgriezt fona tapeti" + diff --git a/WallpaperPicker/res/values-mn-rMN/strings.xml b/WallpaperPicker/res/values-mn-rMN/strings.xml new file mode 100644 index 0000000000..71ff9e0f72 --- /dev/null +++ b/WallpaperPicker/res/values-mn-rMN/strings.xml @@ -0,0 +1,36 @@ + + + + + "Ханын зургийг тохируулах" + "Зургийг ачаалж чадсангүй" + "Зургийг ханын зураг болгож ачаалж чадсангүй" + + "%1$d сонгогдсон" + "%1$d сонгогдсон" + "%1$d сонгогдсон" + + "%2$d ханын цаасны %1$d нь" + "%1$s сонгогдсон" + "Устгах" + "Зураг сонгох" + "Ханын зураг" + "Ханын зургийг тайрах" + diff --git a/WallpaperPicker/res/values-nl/strings.xml b/WallpaperPicker/res/values-nl/strings.xml new file mode 100644 index 0000000000..7dd4f22b07 --- /dev/null +++ b/WallpaperPicker/res/values-nl/strings.xml @@ -0,0 +1,36 @@ + + + + + "Achtergrond instellen" + "Kan afbeelding niet laden" + "Kan afbeelding niet laden als achtergrond" + + "%1$d geselecteerd" + "%1$d geselecteerd" + "%1$d geselecteerd" + + "Achtergrond %1$d van %2$d" + "%1$s is geselecteerd" + "Verwijderen" + "Afbeelding kiezen" + "Achtergronden" + "Achtergrond bijsnijden" + diff --git a/WallpaperPicker/res/values-pl/strings.xml b/WallpaperPicker/res/values-pl/strings.xml new file mode 100644 index 0000000000..bcdbb3dc7b --- /dev/null +++ b/WallpaperPicker/res/values-pl/strings.xml @@ -0,0 +1,36 @@ + + + + + "Ustaw tapetę" + "Nie udało się załadować obrazu" + "Nie udało się załadować obrazu jako tapety" + + "Wybranych %1$d" + "Wybrana %1$d" + "Wybrane: %1$d" + + "Tapeta %1$d z %2$d" + "Wybrano %1$s" + "Usuń" + "Wybierz obraz" + "Tapety" + "Przytnij tapetę" + diff --git a/WallpaperPicker/res/values-pt-rPT/strings.xml b/WallpaperPicker/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000..83492327f9 --- /dev/null +++ b/WallpaperPicker/res/values-pt-rPT/strings.xml @@ -0,0 +1,36 @@ + + + + + "Definir imagem fundo" + "Não foi possível carregar a imagem" + "Não foi possível carregar a imagem como imagem de fundo" + + "%1$d selecionadas" + "%1$d selecionada" + "%1$d selecionadas" + + "Imagem de fundo %1$d de %2$d" + "%1$s selecionada" + "Eliminar" + "Escolher imagem" + "Imagens de fundo" + "Recortar imagem de fundo" + diff --git a/WallpaperPicker/res/values-pt/strings.xml b/WallpaperPicker/res/values-pt/strings.xml new file mode 100644 index 0000000000..2332fcbd13 --- /dev/null +++ b/WallpaperPicker/res/values-pt/strings.xml @@ -0,0 +1,36 @@ + + + + + "Definir plano de fundo" + "Não foi possível carregar a imagem" + "Não foi possível carregar a imagem como plano de fundo" + + "%1$d selecionados" + "%1$d selecionado" + "%1$d selecionados" + + "Plano de fundo %1$d de %2$d" + "%1$s selecionado" + "Excluir" + "Escolher imagem" + "Planos de fundo" + "Cortar plano de fundo" + diff --git a/WallpaperPicker/res/values-ro/strings.xml b/WallpaperPicker/res/values-ro/strings.xml new file mode 100644 index 0000000000..8ee1a5a391 --- /dev/null +++ b/WallpaperPicker/res/values-ro/strings.xml @@ -0,0 +1,36 @@ + + + + + "Setați imaginea de fundal" + "Nu s-a putut încărca imaginea" + "Nu s-a putut încărca imaginea ca fundal" + + "%1$d selectate" + "%1$d selectată" + "%1$d selectate" + + "Imaginea de fundal %1$d din %2$d" + "S-a selectat %1$s" + "Ștergeți" + "Alegeți imaginea" + "Imagini de fundal" + "Decupați imaginea de fundal" + diff --git a/WallpaperPicker/res/values-ru/strings.xml b/WallpaperPicker/res/values-ru/strings.xml new file mode 100644 index 0000000000..2ba2af2a5d --- /dev/null +++ b/WallpaperPicker/res/values-ru/strings.xml @@ -0,0 +1,36 @@ + + + + + "Установить как обои" + "Не удалось загрузить изображение" + "Не удалось загрузить изображение" + + "%1$d" + "%1$d" + "%1$d" + + "Обои %1$d из %2$d" + "Выбран элемент \"%1$s\"" + "Удалить" + "Выбрать обои" + "Обои" + "Кадрировать обои" + diff --git a/WallpaperPicker/res/values-sr/strings.xml b/WallpaperPicker/res/values-sr/strings.xml new file mode 100644 index 0000000000..fdfaaf60f0 --- /dev/null +++ b/WallpaperPicker/res/values-sr/strings.xml @@ -0,0 +1,36 @@ + + + + + "Подеси позадину" + "Није могуће учитати слику" + "Није могуће учитати слику као позадину" + + "Изабрано је %1$d" + "Изабрана је %1$d" + "Изабраних: %1$d" + + "Позадина %1$d од %2$d" + "Изабрана је %1$s" + "Избриши" + "Изабери слику" + "Позадине" + "Опсеци позадину" + diff --git a/WallpaperPicker/res/values-th/strings.xml b/WallpaperPicker/res/values-th/strings.xml new file mode 100644 index 0000000000..6b4c235361 --- /dev/null +++ b/WallpaperPicker/res/values-th/strings.xml @@ -0,0 +1,36 @@ + + + + + "ตั้งวอลเปเปอร์" + "ไม่สามารถโหลดรูปภาพ" + "ไม่สามารถโหลดรูปภาพเป็นวอลเปเปอร์" + + "เลือกไว้ %1$d" + "เลือกไว้ %1$d" + "เลือกไว้ %1$d" + + "วอลเปเปอร์ %1$d จาก %2$d" + "เลือก %1$s แล้ว" + "ลบ" + "เลือกรูปภาพ" + "วอลเปเปอร์" + "ครอบตัดวอลเปเปอร์" + diff --git a/WallpaperPicker/res/values-tl/strings.xml b/WallpaperPicker/res/values-tl/strings.xml new file mode 100644 index 0000000000..c9fe338d42 --- /dev/null +++ b/WallpaperPicker/res/values-tl/strings.xml @@ -0,0 +1,36 @@ + + + + + "Itakda ang wallpaper" + "Hindi ma-load ang larawan" + "Hindi ma-load ang larawan bilang wallpaper" + + "%1$d ang napili" + "%1$d ang napili" + "%1$d ang napili" + + "Wallpaper %1$d ng %2$d" + "Napili ang %1$s" + "Tanggalin" + "Pumili ng larawan" + "Mga Wallpaper" + "I-crop ang wallpaper" + diff --git a/WallpaperPicker/res/values-uk/strings.xml b/WallpaperPicker/res/values-uk/strings.xml new file mode 100644 index 0000000000..076c88238b --- /dev/null +++ b/WallpaperPicker/res/values-uk/strings.xml @@ -0,0 +1,36 @@ + + + + + "Установити фон" + "Не вдалося завантажити зображення" + "Не вдалося завантажити зображення як фоновий малюнок" + + "Вибрано %1$d" + "Вибрано %1$d" + "Вибрано %1$d" + + "Фоновий малюнок %1$d з %2$d" + "Вибрано %1$s" + "Видалити" + "Вибрати зображення" + "Фонові малюнки" + "Обрізати фоновий малюнок" + diff --git a/WallpaperPicker/res/values-vi/strings.xml b/WallpaperPicker/res/values-vi/strings.xml new file mode 100644 index 0000000000..d1efbe9892 --- /dev/null +++ b/WallpaperPicker/res/values-vi/strings.xml @@ -0,0 +1,36 @@ + + + + + "Đặt hình nền" + "Không thể tải hình ảnh" + "Không thể tải hình ảnh làm hình nền" + + "Đã chọn %1$d" + "Đã chọn %1$d" + "Đã chọn %1$d" + + "Hình nền %1$d / %2$d" + "%1$s được chọn" + "Xóa" + "Chọn hình ảnh" + "Hình nền" + "Cắt hình nền" + diff --git a/WallpaperPicker/res/values-zh-rHK/strings.xml b/WallpaperPicker/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000000..e7a12c1baf --- /dev/null +++ b/WallpaperPicker/res/values-zh-rHK/strings.xml @@ -0,0 +1,36 @@ + + + + + "設定桌布" + "無法載入圖片" + "無法載入圖片設為桌布" + + "已選取 %1$d 張" + "已選取 %1$d 張" + "已選取 %1$d 張" + + "第 %1$d 張桌布,共 %2$d 張" + "已選取「%1$s」" + "刪除" + "選擇圖片" + "桌布" + "裁剪桌布" + diff --git a/WallpaperPicker/res/values-zh-rTW/strings.xml b/WallpaperPicker/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000..4184976083 --- /dev/null +++ b/WallpaperPicker/res/values-zh-rTW/strings.xml @@ -0,0 +1,36 @@ + + + + + "設定桌布" + "無法載入圖片" + "無法載入您要設為桌布的圖片" + + "已選取 %1$d 個" + "已選取 %1$d 個" + "已選取 %1$d 個" + + "第 %1$d 張桌布,共 %2$d 張" + "已選取%1$s" + "刪除" + "選擇圖片" + "桌布" + "裁剪桌布" + diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index de987bdb4c..34a5568dc2 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -23,20 +23,6 @@ "Tuis" "Android-kernprogramme" - "Stel muurpapier" - "Kon prent nie laai nie" - "Kon prent nie as muurpapier laai nie" - - "%1$d gekies" - "%1$d gekies" - "%1$d gekies" - - "Muurpapier %1$d van %2$d" - "Het %1$s gekies" - "Vee uit" - "Kies prent" - "Muurpapiere" - "Snoei muurpapier" "Program is nie geïnstalleer nie." "Legstukke" "Legstukke" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index dc64c5d76b..c6420d56bc 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -23,20 +23,6 @@ "መነሻ" "Android ዋና መተግበሪያዎች" - "የግድግዳ ወረቀት አዘጋጅ" - "ምስሉን መጫን አልተቻለም" - "ምስሉን እንደ ግድግዳ ወረቀት መጫን አልተቻለም" - - "%1$d ተመርጧል" - "%1$d ተመርጧል" - "%1$d ተመርጧል" - - "የግድግዳ ወረቀት %1$d ከ%2$d" - "%1$s ተመርጧል" - "ሰርዝ" - "ምስል ምረጥ" - "የግድግዳ ወረቀቶች" - "የግድግዳ ወረቀት ከርክም" "መተግበሪያ አልተጫነም።" "ፍርግሞች" "ፍርግሞች" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 84c157e2bc..aeca02532d 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -23,20 +23,6 @@ "الرئيسية" "‏تطبيقات Android الأساسية" - "تعيين خلفية" - "تعذر تحميل الصورة" - "تعذر تحميل الصورة كخلفية" - - "‏تم تحديد %1$d" - "‏تم تحديد %1$d" - "‏تم تحديد %1$d" - - "‏الخلفية %1$d من %2$d" - "تم تحديد %1$s" - "حذف" - "اختيار صورة" - "الخلفيات" - "اقتصاص الخلفية" "لم يتم تثبيت التطبيق." "الأدوات" "الأدوات" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index e57e9d2da6..2a2b72d290 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -23,20 +23,6 @@ "Начало" "Основни приложения на Android" - "Задаване на тапета" - "Изображението не можа да бъде заредено" - "Изображението не можа да бъде заредено като тапет" - - "Избрахте %1$d" - "Избрахте %1$d" - "Избрахте %1$d" - - "Тапет %1$d от %2$d" - "Избрахте %1$s" - "Изтриване" - "Избиране на изображение" - "Тапети" - "Подрязване на тапета" "Приложението не е инсталирано." "Приспособления" "Приспособления" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index a9eb99c1db..fa520ba678 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -23,20 +23,6 @@ "Inici" "Aplicacions principals d\'Android" - "Estableix el fons de pantalla" - "No s\'ha pogut carregar la imatge." - "No s\'ha pogut carregar la imatge com a fons de pantalla." - - "Seleccionats: %1$d" - "Seleccionats: %1$d" - "Seleccionats: %1$d" - - "Fons de pantalla %1$d de %2$d" - "S\'ha seleccionat %1$s" - "Suprimeix" - "Selecciona una imatge" - "Fons de pantalla" - "Retalla el fons de pantalla" "L\'aplicació no s\'ha instal·lat." "Widgets" "Widgets" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 258f645321..fdd48458c8 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -23,20 +23,6 @@ "Plocha" "Android Core Apps" - "Nastavit jako tapetu" - "Obrázek nelze načíst." - "Obrázek nelze načíst jako tapetu." - - "Vybráno: %1$d" - "Vybráno: %1$d" - "Vybráno: %1$d" - - "Tapeta %1$d z %2$d" - "Vybrána položka %1$s" - "Smazat" - "Vybrat obrázek" - "Tapety" - "Oříznutí tapety" "Aplikace není nainstalována." "Widgety" "Widgety" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 96b6af624a..9bf05f0b64 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -23,20 +23,6 @@ "Startskærm" "Kerneapps i Android" - "Angiv baggrund" - "Billedet kunne ikke indlæses" - "Billedet kunne ikke indlæses som baggrund" - - "%1$d er valgt" - "%1$d er valgt" - "%1$d er valgt" - - "Baggrund %1$d af %2$d" - "%1$s blev valgt" - "Slet" - "Vælg billede" - "Baggrunde" - "Beskær baggrund" "Appen er ikke installeret." "Widgets" "Widgets" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index b95d482700..249af37f34 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -23,20 +23,6 @@ "Startseite" "Android Core Apps" - "Hintergrund auswählen" - "Bild konnte nicht geladen werden." - "Bild konnte nicht als Hintergrund geladen werden." - - "%1$d ausgewählt" - "%1$d ausgewählt" - "%1$d ausgewählt" - - "Hintergrund %1$d von %2$d" - "%1$s ausgewählt" - "Entfernen" - "Bild auswählen" - "Hintergründe" - "Hintergrund zuschneiden" "App ist nicht installiert." "Widgets" "Widgets" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 2c3f3f5b1d..cfb97ece02 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -23,20 +23,6 @@ "Αρχική σελίδα" "Βασικές εφαρμογές Android" - "Ορισμός ταπετσαρίας" - "Δεν ήταν δυνατή η φόρτωση της εικόνας" - "Δεν ήταν δυνατή η φόρτωση της εικόνας ως ταπετσαρία" - - "%1$d επιλεγμένα" - "%1$d επιλεγμένα" - "%1$d επιλεγμένα" - - "Ταπετσαρία %1$d από %2$d" - "Επιλέχθηκε το %1$s" - "Διαγραφή" - "Επιλογή εικόνας" - "Ταπετσαρίες" - "Περικοπή ταπετσαρίας" "Η εφαρμογή δεν έχει εγκατασταθεί." "Γραφικά στοιχεία" "Γραφικά στοιχεία" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 0e3e5591aa..2ca832b330 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -23,20 +23,6 @@ "Home" "Android Core Apps" - "Set wallpaper" - "Coudn\'t load image" - "Couldn\'t load image as wallpaper" - - "%1$d selected" - "%1$d selected" - "%1$d selected" - - "Wallpaper %1$d of %2$d" - "Selected %1$s" - "Delete" - "Pick image" - "Wallpapers" - "Crop wallpaper" "App isn\'t installed." "Widgets" "Widgets" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 0e3e5591aa..2ca832b330 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -23,20 +23,6 @@ "Home" "Android Core Apps" - "Set wallpaper" - "Coudn\'t load image" - "Couldn\'t load image as wallpaper" - - "%1$d selected" - "%1$d selected" - "%1$d selected" - - "Wallpaper %1$d of %2$d" - "Selected %1$s" - "Delete" - "Pick image" - "Wallpapers" - "Crop wallpaper" "App isn\'t installed." "Widgets" "Widgets" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index fd37c32cd3..cec4c10a8c 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -23,20 +23,6 @@ "Pantalla principal" "Aplicaciones básicas de Android" - "Establecer como fondo de pantalla" - "No se pudo cargar la imagen." - "No se pudo cargar la imagen como fondo de pantalla." - - "%1$d seleccionados" - "%1$d seleccionado" - "%1$d seleccionados" - - "Fondo de pantalla %1$d de %2$d" - "%1$s seleccionado" - "Eliminar" - "Elegir imagen" - "Fondos de pantalla" - "Recortar fondo de pantalla" "No se instaló la aplicación." "Widgets" "Widgets" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index ad6b2200d1..73dae125f8 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -23,20 +23,6 @@ "Home" "Aplicaciones básicas de Android" - "Establecer fondo" - "No se ha podido cargar la imagen" - "No se ha podido cargar la imagen como fondo de pantalla" - - "Seleccionados: %1$d" - "Seleccionados: %1$d" - "Seleccionados: %1$d" - - "Fondo de pantalla %1$d de %2$d" - "%1$s seleccionado" - "Eliminar" - "Seleccionar imagen" - "Fondos de pantalla" - "Recortar fondo de pantalla" "La aplicación no está instalada." "Widgets" "Widgets" diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index ab4ad02cda..a68778a3ec 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -23,20 +23,6 @@ "Avaekraan" "Androidi tuumrakendused" - "Määra taustapilt" - "Kujutist ei õnnestunud laadida" - "Kujutist ei õnnestunud taustapildina laadida" - - "Valitud on %1$d" - "Valitud on %1$d" - "Valitud on %1$d" - - "%1$d/%2$d taustapildist" - "Valitud on %1$s" - "Kustuta" - "Vali kujutis" - "Taustapildid" - "Taustapildi kärpimine" "Rakendus pole installitud." "Vidinad" "Vidinad" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 2dd1bcea6f..f118c10144 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -23,20 +23,6 @@ "صفحه اصلی" "‏برنامه‌های Android Core" - "تنظیم کاغذدیواری" - "بارگیری تصویر انجام نشد" - "بارگیری تصویر به‌عنوان کاغذدیواری انجام نشد" - - "‏%1$d انتخاب شد" - "‏%1$d انتخاب شد" - "‏%1$d انتخاب شد" - - "‏کاغذ دیواری %1$d از %2$d" - "%1$s انتخاب شده" - "حذف" - "انتخاب تصویر" - "کاغذدیواری‌ها" - "برش کاغذ دیواری" "برنامه نصب نشده است." "ابزارک‌ها" "ابزارک‌ها" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index c5f478f2e6..549804d602 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -23,20 +23,6 @@ "Aloitusruutu" "Androidin ydinsovellukset" - "Aseta taustakuva" - "Kuvan lataus epäonnistui" - "Kuvaa ei voitu ladata taustakuvaksi" - - "%1$d valittu" - "%1$d valittu" - "%1$d valittu" - - "Taustakuva %1$d/%2$d" - "Valittu: %1$s" - "Poista" - "Valitse kuva" - "Taustakuvat" - "Rajaa taustakuva" "Sovellusta ei ole asennettu." "Widgetit" "Widgetit" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 49adaac94a..97c03fe15c 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -23,20 +23,6 @@ "Accueil" "Applications de base Android" - "Définir le fond d\'écran" - "Impossible de charger l\'image" - "Impossible de charger l\'image comme fond d\'écran" - - "%1$d sélectionné" - "%1$d sélectionné" - "%1$d sélectionné(s)" - - "Fond d\'écran %1$d sur %2$d" - "Sélection : %1$s" - "Supprimer" - "Sélectionner une image" - "Fonds d\'écran" - "Rogner le fond d\'écran" "L\'application n\'est pas installée." "Widgets" "Widgets" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index bb466ea6d2..0f9d836c43 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -23,20 +23,6 @@ "Accueil" "Applications de base Android" - "Définir comme fond d\'écran" - "Impossible de charger l\'image." - "Impossible de charger l\'image comme fond d\'écran." - - "%1$d fond d\'écran sélectionné" - "%1$d fond d\'écran sélectionné" - "%1$d fonds d\'écran sélectionnés" - - "Fond d\'écran %1$d sur %2$d" - "%1$s est sélectionné." - "Supprimer" - "Sélectionner une image" - "Fonds d\'écran" - "Rogner le fond d\'écran" "L\'application n\'est pas installée." "Widgets" "Widgets" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index b1060780c0..e149e0fcc6 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -23,20 +23,6 @@ "होम" "Android के मुख्य एप्लिकेशन" - "वॉलपेपर सेट करें" - "चित्र लोड नहीं किया जा सका" - "चित्र को वॉलपेपर के रूप में लोड नहीं किया जा सका" - - "%1$d चयनित" - "%1$d चयनित" - "%1$d चयनित" - - "वॉलपेपर %2$d में से %1$d" - "चयनित %1$s" - "हटाएं" - "चित्र चुनें" - "वॉलपेपर" - "वॉलपेपर काटें" "एप्‍लिकेशन इंस्‍टॉल नहीं है." "विजेट" "विजेट" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 9c7d38ee3e..c9b119fefc 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -23,20 +23,6 @@ "Početna" "Matične aplikacije za Android" - "Postavi pozadinsku sliku" - "Nije moguće učitati sliku" - "Nije moguće učitati sliku kao pozadinsku sliku" - - "Odabrano: %1$d" - "Odabrano: %1$d" - "Odabrano: %1$d" - - "%1$d. pozadinska slika od %2$d" - "Odabrana je stavka %1$s" - "Izbriši" - "Odaberi sliku" - "Pozadinske slike" - "Obreži pozadinsku sliku" "Aplikacija nije instalirana." "Widgeti" "Widgeti" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 89504ddcfc..2b33776438 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -23,20 +23,6 @@ "Főoldal" "Alap Android-alkalmazások" - "Háttérkép beállítása" - "A kép betöltése nem sikerült" - "A kép betöltése háttérképként nem sikerült" - - "%1$d kiválasztva" - "%1$d kiválasztva" - "%1$d kiválasztva" - - "%2$d/%1$d. háttérkép" - "%1$s kiválasztva" - "Törlés" - "Kép választása" - "Háttérképek" - "Háttérkép körbevágása" "Az alkalmazás nincs telepítve." "Modulok" "Modulok" diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml index 618193d27a..eb7396b15a 100644 --- a/res/values-hy-rAM/strings.xml +++ b/res/values-hy-rAM/strings.xml @@ -23,20 +23,6 @@ "Հիմնական" "Android Core Apps" - "Սահմանել պաստառը" - "Չհաջողվեց բեռնել նկարը" - "Չհաջողվեց նկարը սահմանել որպես պաստառ" - - "%1$d ընտրված" - "%1$d ընտրված" - "%1$d ընտրված" - - "%1$d պաստառ՝ %2$d-ից" - "Ընտրված է %1$s" - "Ջնջել" - "Ընտրել պատկեր" - "Պաստառներ" - "Եզրատել պաստառը" "Ծրագիրը տեղադրված չէ:" "Վիջեթներ" "Վիջեթներ" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index cb91c30893..87d163ac30 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -23,20 +23,6 @@ "Layar Utama" "Aplikasi Inti Android" - "Setel wallpaper" - "Tidak dapat memuat gambar" - "Tidak dapat memuat gambar sebagai wallpaper" - - "%1$d dipilih" - "%1$d dipilih" - "%1$d dipilih" - - "Wallpaper %1$d dari %2$d" - "%1$s terpilih" - "Hapus" - "Pilih gambar" - "Wallpaper" - "Pangkas wallpaper" "Aplikasi tidak dipasang." "Widget" "Widget" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index ba4067903e..92d79b0408 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -23,20 +23,6 @@ "Home page" "Applicazioni di base Android" - "Imposta sfondo" - "Impossibile caricare l\'immagine" - "Impossibile caricare l\'immagine come sfondo" - - "%1$d selezionati" - "%1$d selezionato" - "%1$d selezionati" - - "Sfondo %1$d di %2$d" - "Elemento selezionato: %1$s" - "Elimina" - "Scegli immagine" - "Sfondi" - "Ritaglia sfondo" "App non installata." "Widget" "Widget" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 8d70a252d7..a348646d31 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -23,20 +23,6 @@ "דף הבית" "‏אפליקציות הליבה של Android" - "בחר טפט" - "לא ניתן היה לטעון את התמונה" - "לא ניתן היה לטעון את התמונה כטפט" - - "‏%1$d נבחרו" - "‏%1$d נבחרו" - "‏%1$d נבחרו" - - "‏טפט %1$d מתוך %2$d" - "בחרת %1$s" - "מחק" - "בחר תמונה" - "טפטים" - "חתוך את הטפט" "האפליקציה לא מותקנת." "רכיבי ווידג\'ט" "רכיבי ווידג\'ט" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 3c2b2f0ba9..1de0be5c32 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -23,20 +23,6 @@ "ホーム" "Android Core Apps" - "壁紙を設定" - "画像を読み込めませんでした" - "画像を壁紙として読み込めませんでした" - - "%1$d件選択済み" - "%1$d件選択済み" - "%1$d件選択済み" - - "壁紙: %1$d/%2$d" - "選択: %1$s" - "削除" - "画像を選択" - "壁紙" - "壁紙をトリミング" "このアプリはインストールされていません。" "ウィジェット" "ウィジェット" diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index a68951a156..c004f07f1c 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -23,20 +23,6 @@ "მთავარი" "Android-ის ბირთვის აპები" - "ფონის დაყენება" - "სურათი ვერ ჩაიტვირთა." - "სურათი ფონად ვერ ჩაიტვირთა." - - "არჩეულია %1$d" - "არჩეულია %1$d" - "არჩეულია %1$d" - - "ფონი %1$d %2$d-დან" - "არჩეულია %1$s" - "წაშლა" - "სურათის ამორჩევა" - "ფონები" - "ფონის ჩამოჭრა" "აპი არ არის დაყენებული." "ვიჯეტები" "ვიჯეტები" diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml index 6799f77550..84781bcc21 100644 --- a/res/values-km-rKH/strings.xml +++ b/res/values-km-rKH/strings.xml @@ -23,20 +23,6 @@ "ដើម" "កម្មវិធី​​សំខាន់​ៗ​របស់ Android" - "កំណត់​ផ្ទាំង​រូបភាព" - "មិន​អាច​ផ្ទុក​រូបភាព" - "មិន​អាច​ផ្ទុក​រូបភាព​ជា​ផ្ទាំង​រូបភាព" - - "បាន​ជ្រើស %1$d" - "បាន​ជ្រើស %1$d" - "បាន​ជ្រើស %1$d" - - "ផ្ទាំង​រូបភាព %1$d នៃ %2$d" - "​បាន​ជ្រើស %1$s" - "លុប" - "ជ្រើស​យក​រូបភាព" - "ផ្ទាំង​រូបភាព" - "ច្រឹប​ផ្ទាំង​រូបភាព" "មិន​បាន​ដំឡើង​កម្មវិធី។" "ធាតុ​ក្រាហ្វិក" "ធាតុ​ក្រាហ្វិក" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 82193d2d79..59f2103d89 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -23,20 +23,6 @@ "홈" "Android 핵심 앱" - "배경화면 설정" - "이미지를 로드할 수 없습니다." - "이미지를 배경화면으로 로드할 수 없습니다." - - "%1$d개 선택됨" - "%1$d개 선택됨" - "%1$d개 선택됨" - - "배경화면 %1$d/%2$d" - "%1$s 선택함" - "삭제" - "이미지 선택" - "배경화면" - "배경화면 잘라내기" "앱이 설치되지 않았습니다." "위젯" "위젯" diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml index fac96e42f9..ad2feeab45 100644 --- a/res/values-lo-rLA/strings.xml +++ b/res/values-lo-rLA/strings.xml @@ -23,20 +23,6 @@ "ໜ້າຫຼັກ" "ແອັບພລິເຄຊັນຫຼັກຂອງ Android" - "ຕັ້ງເປັນພາບພື້ນຫຼັງ" - "ບໍ່ສາມາດໂຫຼດຮູບພາບໄດ້" - "ບໍ່​ສາ​ມາດ​ໂຫຼດ​ຮູບພາບ​ເປັນ​ຮູບພື້ນຫຼັງໄດ້" - - "ເລືອກ %1$d ລາຍການແລ້ວ" - "ເລືອກ %1$d ລາຍການແລ້ວ" - "ເລືອກ %1$d ລາຍການແລ້ວ" - - "ຮູບພືື້ນຫຼັງ %1$d ໃນ %2$d" - "ເລືອກແລ້ວ %1$s ອັນ" - "ລຶບ" - "ເລືອກຮູບ" - "ພາບພື້ນຫຼັງ" - "ຕັດຮູບພື້ນຫຼັງ" "ແອັບຯບໍ່ໄດ້ຖືກຕິດຕັ້ງ." "ວິດເຈັດ" "ວິດເຈັດ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 1d53bf1eff..8b1f396032 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -23,20 +23,6 @@ "Pagrindinis" "Pagrindinės „Android“ programos" - "Nustatyti ekrano foną" - "Nepavyko įkelti vaizdo" - "Nepavyko įkelti vaizdo kaip ekrano fono" - - "Pasirinkta: %1$d" - "Pasirinkta: %1$d" - "Pasirinkta: %1$d" - - "%1$d iš %2$d ekrano fonų" - "Pasirinkta: %1$s" - "Ištrinti" - "Pasirinkti vaizdą" - "Ekrano fonai" - "Ekrano fono apkirpimas" "Programa neįdiegta." "Valdikliai" "Valdikliai" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 856439b7a8..964d84d133 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -23,20 +23,6 @@ "Sākums" "Android pamatlietotnes" - "Iestatīt fona tapeti" - "Nevarēja ielādēt attēlu." - "Nevarēja ielādēt attēlu kā fona tapeti." - - "Atlasīti: %1$d" - "Atlasīti: %1$d" - "Atlasīti: %1$d" - - "%1$d. fona tapete no %2$d" - "Atlasīts: %1$s" - "Dzēst" - "Izvēlēties attēlu" - "Fona tapetes" - "Apgriezt fona tapeti" "Lietotne nav instalēta." "Logrīki" "Logrīki" diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml index 20af05e0d1..bed237a832 100644 --- a/res/values-mn-rMN/strings.xml +++ b/res/values-mn-rMN/strings.xml @@ -23,20 +23,6 @@ "Нүүр" "Андройд үндсэн апп" - "Ханын зургийг тохируулах" - "Зургийг ачааллаж чадсангүй" - "Зургийг ханын зураг болгож ачааллаж чадсангүй" - - "%1$d сонгогдсон" - "%1$d сонгогдсон" - "%1$d сонгогдсон" - - "%2$d ханын цаасны %1$d нь" - "%1$s сонгогдсон" - "Устгах" - "Зураг сонгох" - "Ханын зураг" - "Ханын зургийг тайрах" "Апп суугаагүй байна." "Виджет" "Виджет" diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index dca483d3e8..3558b25107 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -23,20 +23,6 @@ "Laman Utama" "Apl Teras Android" - "Tetapkan kertas dinding" - "Tidak dapat memuatkan imej" - "Tidak dapat memuatkan imej sebagai kertas dinding" - - "%1$d dipilih" - "%1$d dipilih" - "%1$d dipilih" - - "Kertas dinding %1$d daripada %2$d" - "Memilih %1$s" - "Padam" - "Pilih imej" - "Kertas dinding" - "Pangkas kertas dinding" "Apl tidak dipasang." "Widget" "Widget" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 9cb161fe2d..13d87591e1 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -23,20 +23,6 @@ "Startside" "Kjerneapper for Android" - "Angi bakgrunn" - "Kunne ikke laste inn bildet" - "Kunne ikke laste inn bildet som bakgrunn" - - "%1$d valgt" - "%1$d valgt" - "%1$d valgt" - - "Bakgrunn %1$d of %2$d" - "Valgt %1$s" - "Slett" - "Velg bilde" - "Bakgrunner" - "Beskjær bakgrunnen" "Appen er ikke installert." "Moduler" "Moduler" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index e28b3955c5..aa035a09ab 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -23,20 +23,6 @@ "Startpagina" "Android-kernapps" - "Achtergrond instellen" - "Kan afbeelding niet laden" - "Kan afbeelding niet laden als achtergrond" - - "%1$d geselecteerd" - "%1$d geselecteerd" - "%1$d geselecteerd" - - "Achtergrond %1$d van %2$d" - "%1$s is geselecteerd" - "Verwijderen" - "Afbeelding kiezen" - "Achtergronden" - "Achtergrond bijsnijden" "App is niet geïnstalleerd." "Widgets" "Widgets" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index ec72374d53..9eade81a9a 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -23,20 +23,6 @@ "Ekran główny" "Główne aplikacje Androida" - "Ustaw tapetę" - "Nie udało się załadować obrazu" - "Nie udało się załadować obrazu jako tapety" - - "Wybrane: %1$d" - "Wybrane: %1$d" - "Wybrane: %1$d" - - "Tapeta %1$d z %2$d" - "Wybrano %1$s" - "Usuń" - "Wybierz obraz" - "Tapety" - "Przytnij tapetę" "Aplikacja nie jest zainstalowana." "Widżety" "Widżety" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 510468e2ed..4c9401dc38 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -23,20 +23,6 @@ "Ecrã principal" "Aplicações principais do Android" - "Definir imagem fundo" - "Não foi possível carregar a imagem" - "Não foi possível carregar a imagem como imagem de fundo" - - "%1$d selecionado(s)" - "%1$d selecionado(s)" - "%1$d selecionado(s)" - - "Imagem de fundo %1$d de %2$d" - "%1$s selecionado" - "Eliminar" - "Escolher imagem" - "Imagens de fundo" - "Recortar imagem de fundo" "A aplicação não está instalada." "Widgets" "Widgets" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 1ac9f5b49a..d82d9ea1d2 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -23,20 +23,6 @@ "Início" "Principais aplicativos do Android" - "Definir plano de fundo" - "Não foi possível carregar a imagem" - "Não foi possível carregar a imagem como plano de fundo" - - "%1$d selecionados" - "%1$d selecionados" - "%1$d selecionados" - - "Plano de fundo %1$d de %2$d" - "%1$s selecionado" - "Excluir" - "Escolher imagem" - "Planos de fundo" - "Cortar plano de fundo" "O aplicativo não está instalado." "Widgets" "Widgets" diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml index 2015158d9b..246553467b 100644 --- a/res/values-rm/strings.xml +++ b/res/values-rm/strings.xml @@ -26,27 +26,6 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 85023c3d19..016dd918c2 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -23,20 +23,6 @@ "Ecran de pornire" "Android Core Apps" - "Setați imaginea de fundal" - "Nu s-a putut încărca imaginea" - "Nu s-a putut încărca imaginea ca fundal" - - "%1$d selectate" - "%1$d selectat" - "%1$d selectate" - - "Imaginea de fundal %1$d din %2$d" - "S-a selectat %1$s" - "Ștergeți" - "Alegeți imaginea" - "Imagini de fundal" - "Decupați imaginea de fundal" "Aplicația nu este instalată." "Widgeturi" "Widgeturi" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index c8a2287eb8..8d0984da29 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -23,20 +23,6 @@ "Главный экран" "Основные приложения Android" - "Установить как обои" - "Не удалось загрузить изображение" - "Не удалось загрузить изображение" - - "Выбрано: %1$d" - "Выбрано: %1$d" - "Выбрано: %1$d" - - "Обои %1$d из %2$d" - "Выбран элемент \"%1$s\"" - "Удалить" - "Выбрать изображение" - "Обои" - "Обрезать обои" "Приложение удалено" "Виджеты" "Виджеты" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 77fd07df4e..3a4b03348a 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -23,20 +23,6 @@ "Plocha" "Android Core Apps" - "Nastaviť tapetu" - "Obrázok nie je možné načítať" - "Obrázok nie je možné načítať ako tapetu" - - "Počet vybratých položiek: %1$d" - "Počet vybratých položiek: %1$d" - "Počet vybratých položiek: %1$d" - - "Tapeta %1$d z %2$d" - "Vybratá položka %1$s" - "Odstrániť" - "Vybrať obrázok" - "Tapety" - "Orezanie tapety" "Aplikácia nie je nainštalovaná." "Miniaplikácie" "Miniaplikácie" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 28392fe4cb..68086dbc1c 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -23,20 +23,6 @@ "Začetni zaslon" "Osnovne aplikacije sistema Android" - "Nastavi ozadje" - "Slike ni bilo mogoče naložiti" - "Slike ni bilo mogoče naložiti kot ozadja" - - "Št. izbranih: %1$d" - "Št. izbranih: %1$d" - "Št. izbranih: %1$d" - - "Ozadje %1$d od %2$d" - "Izbrano: %1$s" - "Izbriši" - "Izberi sliko" - "Ozadja" - "Obrezovanje ozadja" "Aplikacija ni nameščena." "Pripomočki" "Pripomočki" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 82c825b374..6ab175069d 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -23,20 +23,6 @@ "Почетна" "Основне Android апликације" - "Подеси позадину" - "Није могуће учитати слику" - "Није могуће учитати слику као позадину" - - "Изабранo je %1$d" - "Изабрана je %1$d" - "Изабранo je %1$d" - - "Позадина %1$d од %2$d" - "Изабрано је %1$s" - "Избриши" - "Изабери слику" - "Позадине" - "Опсецање позадине" "Апликација није инсталирана." "Виџети" "Виџети" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 9d9c544007..c6dcb18ff3 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -23,20 +23,6 @@ "Startskärm" "Android Core Apps" - "Ange bakgrund" - "Det gick inte att läsa in bilden" - "Det gick inte att läsa in bilden som bakgrund" - - "%1$d har valts" - "%1$d har valts" - "%1$d har valts" - - "Bakgrund %1$d av %2$d" - "%1$s har valts" - "Ta bort" - "Välj bild" - "Bakgrunder" - "Beskär bakgrund" "Appen är inte installerad." "Widgetar" "Widgetar" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index d83fc16871..e0ae27924d 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -23,20 +23,6 @@ "Mwanzo" "Programu Msingi za Android" - "Weka mandhari" - "Haikuweza kupakia picha" - "Haikuweza kupakia picha kama mandhari" - - "%1$d zimechaguliwa" - "%1$d zimechaguliwa" - "%1$d zimechaguliwa" - - "Mandhari %1$d ya %2$d" - "%1$s iliyochaguliwa" - "Futa" - "Chukua picha" - "Mandhari" - "Punguza mandhari" "Programu haijasakinishwa." "Wijeti" "Wijeti" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 9d78b3bdac..0a9ea784dc 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -23,20 +23,6 @@ "หน้าแรก" "แอปหลักของแอนดรอยด์" - "ตั้งค่าวอลเปเปอร์" - "ไม่สามารถโหลดรูปภาพ" - "ไม่สามารถโหลดรูปภาพเป็นวอลเปเปอร์" - - "เลือกไว้ %1$d" - "เลือกไว้ %1$d" - "เลือกไว้ %1$d" - - "วอลเปเปอร์ %1$d จาก %2$d" - "เลือก %1$s แล้ว" - "ลบ" - "เลือกภาพ" - "วอลเปเปอร์" - "ครอบตัดวอลล์เปเปอร์" "ไม่ได้ติดตั้งแอป" "วิดเจ็ต" "วิดเจ็ต" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index bdc23637d9..41de1c02c7 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -23,20 +23,6 @@ "Home" "Android Core Apps" - "Itakda ang wallpaper" - "Hindi ma-load ang larawan" - "Hindi ma-load ang larawan bilang wallpaper" - - "%1$d ang napili" - "%1$d ang napili" - "%1$d ang napili" - - "Wallpaper %1$d ng %2$d" - "Napili ang %1$s" - "Tanggalin" - "Pumili ng larawan" - "Mga Wallpaper" - "I-crop ang wallpaper" "Hindi naka-install ang app." "Mga Widget" "Mga Widget" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index e2fbf21253..e77d76b8e8 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -23,20 +23,6 @@ "Ana ekran" "Android Çekirdek Uygulamaları" - "Duvar kağıdını ayarla" - "Resim yüklenemedi" - "Resim duvar kağıdı olarak yüklenemedi" - - "%1$d tane seçildi" - "%1$d tane seçildi" - "%1$d tane seçildi" - - "Duvar kağıdı %1$d / %2$d" - "%1$s seçildi" - "Sil" - "Resim seç" - "Duvar Kağıtları" - "Duvar kağıdını kırp" "Uygulama yüklü değil." "Widget\'lar" "Widget\'lar" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 6b397a051e..5a32a479e6 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -23,20 +23,6 @@ "Головний екран" "Базові програми Android" - "Установити фон" - "Не вдалося завантажити зображення" - "Не вдалося завантажити зображення як фоновий малюнок" - - "Вибрано %1$d" - "Вибрано %1$d" - "Вибрано %1$d" - - "Фоновий малюнок %1$d з %2$d" - "Вибрано %1$s" - "Видалити" - "Вибрати зображення" - "Фонові малюнки" - "Обрізати фоновий малюнок" "Програму не встановлено." "Віджети" "Віджети" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index abe4dec23c..4c15bc80e4 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -23,20 +23,6 @@ "Màn hình chính" "Ứng dụng lõi Android" - "Đặt hình nền" - "Không thể tải hình ảnh" - "Không thể tải hình ảnh làm hình nền" - - "Đã chọn %1$d" - "Đã chọn %1$d" - "Đã chọn %1$d" - - "Hình nền %1$d / %2$d" - "%1$s được chọn" - "Xóa" - "Chọn hình ảnh" - "Hình nền" - "Cắt hình nền" "Ứng dụng chưa được cài đặt." "Tiện ích con" "Tiện ích con" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index d8d260d4ea..8a6d9c64c0 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -23,20 +23,6 @@ "主屏" "Android 核心应用" - "设置壁纸" - "无法加载图片" - "无法加载要设为壁纸的图片" - - "已选择%1$d项" - "已选择%1$d项" - "已选择%1$d项" - - "第%1$d张壁纸,共%2$d张" - "已选择%1$s" - "删除" - "选择图片" - "壁纸" - "剪裁壁纸" "未安装该应用。" "小部件" "小部件" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 56ea177256..9d1e305799 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -23,20 +23,6 @@ "主畫面" "Android 核心應用程式" - "設定桌布" - "無法載入圖片" - "無法載入圖片設為桌布" - - "已選取 %1$d 個" - "已選取 %1$d 個" - "已選取 %1$d 個" - - "第 %1$d 張桌布,共 %2$d 張" - "已選取「%1$s」" - "刪除" - "選擇圖片" - "桌布" - "裁剪桌布" "尚未安裝應用程式。" "小工具" "小工具" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 0520c9d649..6d82cf80e0 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -23,20 +23,6 @@ "主螢幕" "Android 核心應用程式" - "設定桌布" - "無法載入圖片" - "無法載入您要設為桌布的圖片" - - "已選取 %1$d 個項目" - "已選取 %1$d 個項目" - "已選取 %1$d 個項目" - - "第 %1$d 張桌布,共 %2$d 張" - "已選取%1$s" - "刪除" - "選擇圖片" - "桌布" - "裁剪桌布" "應用程式未安裝。" "小工具" "小工具" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index dafb95d177..2cde50a328 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -23,20 +23,6 @@ "Ikhaya" "Izinhlelo zokusebenza ze-Android Core" - "Setha isithombe sangemuva" - "Ayikwazanga ukulayisha isithombe" - "Ayikwazanga ukulayisha isithombe njengesithombe sangemuva" - - "%1$d khethiwe" - "%1$d khethiwe" - "%1$d khethiwe" - - "Isithombe sangemuva se-%1$d of %2$d" - "I-%1$s ekhethiwe" - "Susa" - "Thatha isithombe" - "Izithombe zangemuva" - "Nqampuna isithombe sangemuva" "Uhlelo lokusebenza alufakiwe." "Amawijethi" "Amawijethi" From dff0bfeb901e767ca9b57f9b8051c7fd077626e9 Mon Sep 17 00:00:00 2001 From: Nilesh Agrawal Date: Tue, 17 Dec 2013 15:20:50 -0800 Subject: [PATCH 081/147] Do not allow duplicate shortcuts when ALL_APPS is disabled. When DISABLE_ALL_APPS is true, we want to have only one shortcut for each activityexposed via the Application's manifest. We ignore INSTALL_SHORTCUT broadcasts which have launch intents with ACTION_MAIN and CATEGORY_LAUNCHER. Applications can still create shortcuts pointing to an already exposed component if they provide data or extras in the intent. Change-Id: I0b05283ea6c522d197e0262c2997f7298e08740b --- .../android/launcher3/DeleteDropTarget.java | 15 ++------- .../launcher3/InstallShortcutReceiver.java | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index a8ac0746c8..c76425a5ed 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -266,19 +266,8 @@ public class DeleteDropTarget extends ButtonDropTarget { private boolean isUninstallFromWorkspace(DragObject d) { if (AppsCustomizePagedView.DISABLE_ALL_APPS && isWorkspaceOrFolderApplication(d)) { ShortcutInfo shortcut = (ShortcutInfo) d.dragInfo; - if (shortcut.intent != null && shortcut.intent.getComponent() != null) { - Set categories = shortcut.intent.getCategories(); - boolean includesLauncherCategory = false; - if (categories != null) { - for (String category : categories) { - if (category.equals(Intent.CATEGORY_LAUNCHER)) { - includesLauncherCategory = true; - break; - } - } - } - return includesLauncherCategory; - } + // Only allow manifest shortcuts to initiate an un-install. + return !InstallShortcutReceiver.isValidShortcutLaunchIntent(shortcut.intent); } return false; } diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index 140106af9c..1ff94720ba 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -24,6 +24,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.text.TextUtils; import android.util.Base64; import android.util.Log; import android.widget.Toast; @@ -223,6 +224,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { if (intent == null) { return; } + // This name is only used for comparisons and notifications, so fall back to activity name // if not supplied String name = ensureValidName(context, intent, @@ -269,6 +271,12 @@ public class InstallShortcutReceiver extends BroadcastReceiver { //final Intent data = pendingInfo.data; final Intent intent = pendingInfo.launchIntent; final String name = pendingInfo.name; + + if (AppsCustomizePagedView.DISABLE_ALL_APPS && !isValidShortcutLaunchIntent(intent)) { + if (DBG) Log.d(TAG, "Ignoring shortcut with launchIntent:" + intent); + continue; + } + final boolean exists = LauncherModel.shortcutExists(context, name, intent); //final boolean allowDuplicate = data.getBooleanExtra(Launcher.EXTRA_SHORTCUT_DUPLICATE, true); @@ -301,6 +309,30 @@ public class InstallShortcutReceiver extends BroadcastReceiver { } } + /** + * Returns true if the intent is a valid launch intent for a shortcut. + * This is used to identify shortcuts which are different from the ones exposed by the + * applications' manifest file. + * + * When DISABLE_ALL_APPS is true, shortcuts exposed via the app's manifest should never be + * duplicated or removed(unless the app is un-installed). + * + * @param launchIntent The intent that will be launched when the shortcut is clicked. + */ + static boolean isValidShortcutLaunchIntent(Intent launchIntent) { + if (launchIntent != null + && Intent.ACTION_MAIN.equals(launchIntent.getAction()) + && launchIntent.getComponent() != null + && launchIntent.getCategories() != null + && launchIntent.getCategories().size() == 1 + && launchIntent.hasCategory(Intent.CATEGORY_LAUNCHER) + && launchIntent.getExtras() == null + && TextUtils.isEmpty(launchIntent.getDataString())) { + return false; + } + return true; + } + private static ShortcutInfo getShortcutInfo(Context context, Intent data, Intent launchIntent) { if (launchIntent.getAction() == null) { From 2fd318246fbf8639cdaf901798f267fb027fff12 Mon Sep 17 00:00:00 2001 From: Chris Wren Date: Wed, 18 Dec 2013 14:11:40 -0500 Subject: [PATCH 082/147] support multiple files and fix logcat smippets for launcher_protoutil plus some code cleanup Change-Id: I09b4a6aedbb1251a65d379464d830da694d38a38 --- util/com/android/launcher3/DecoderRing.java | 307 +++++++++++--------- 1 file changed, 171 insertions(+), 136 deletions(-) diff --git a/util/com/android/launcher3/DecoderRing.java b/util/com/android/launcher3/DecoderRing.java index 6ad6bc5a55..7098e189dd 100644 --- a/util/com/android/launcher3/DecoderRing.java +++ b/util/com/android/launcher3/DecoderRing.java @@ -15,7 +15,6 @@ */ package com.android.launcher3; -import com.android.launcher3.backup.BackupProtos; import com.android.launcher3.backup.BackupProtos.CheckedMessage; import com.android.launcher3.backup.BackupProtos.Favorite; import com.android.launcher3.backup.BackupProtos.Key; @@ -35,6 +34,8 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.lang.System; +import java.util.LinkedList; +import java.util.List; import java.util.zip.CRC32; import javax.xml.bind.DatatypeConverter; @@ -46,7 +47,7 @@ import javax.xml.bind.DatatypeConverter; *

When using com.android.internal.backup.LocalTransport, the file names are base64-encoded Key * protocol buffers with a prefix, that have been base64-encoded again by the transport: *

- *     echo TDpDQUlnL0pxVTVnOD0= | base64 -D | dd bs=1 skip=2 | base64 -D | launcher_protoutil -k
+ *     echo "TDpDQUlnL0pxVTVnOD0=" | launcher_protoutil -k
  * 
* *

This tool understands these file names and will use the embedded Key to detect the type and @@ -56,13 +57,19 @@ import javax.xml.bind.DatatypeConverter; * * *

With payload debugging enabled, base64-encoded protocol buffers will be written to the logs. - * Copy the encoded log snippet into a file, and specify the type explicitly: + * Copy the encoded snippet from the log, and specify the type explicitly, with the Logs flags: *

- *    base64 -D icon.log > icon.bin
- *    launcher_protoutil -i icon.bin
+ *    echo "CAEYLiCJ9JKsDw==" | launcher_protoutil -L -k
+ * 
+ * For backup payloads it is more convenient to copy the log snippet to a file: + *
+ *    launcher_protoutil -L -f favorite.log
  * 
*/ class DecoderRing { + + public static final String STANDARD_IN = "**stdin**"; + private static Class[] TYPES = { Key.class, Favorite.class, @@ -74,24 +81,25 @@ class DecoderRing { public static void main(String[ ] args) throws Exception { - File source = null; - Class type = null; + Class defaultType = null; boolean extractImages = false; + boolean fromLogs = false; int skip = 0; + List files = new LinkedList(); for (int i = 0; i < args.length; i++) { if ("-k".equals(args[i])) { - type = Key.class; + defaultType = Key.class; } else if ("-f".equals(args[i])) { - type = Favorite.class; + defaultType = Favorite.class; } else if ("-j".equals(args[i])) { - type = Journal.class; + defaultType = Journal.class; } else if ("-i".equals(args[i])) { - type = Resource.class; + defaultType = Resource.class; } else if ("-s".equals(args[i])) { - type = Screen.class; + defaultType = Screen.class; } else if ("-w".equals(args[i])) { - type = Widget.class; + defaultType = Widget.class; } else if ("-S".equals(args[i])) { if ((i + 1) < args.length) { skip = Integer.valueOf(args[++i]); @@ -100,154 +108,180 @@ class DecoderRing { } } else if ("-x".equals(args[i])) { extractImages = true; + } else if ("-L".equals(args[i])) { + fromLogs = true; } else if (args[i] != null && !args[i].startsWith("-")) { - source = new File(args[i]); + files.add(new File(args[i])); } else { System.err.println("Unsupported flag: " + args[i]); usage(args); } } - if (type == null) { - if (source == null) { - usage(args); - } else { - Key key = new Key(); - try { - byte[] rawKey = DatatypeConverter.parseBase64Binary(source.getName()); - if (rawKey[0] != 'L' || rawKey[1] != ':') { - System.err.println("you must specify the payload type. " + - source.getName() + " is not a launcher backup key."); - System.exit(1); - } - String encodedPayload = new String(rawKey, 2, rawKey.length - 2); - byte[] keyProtoData = DatatypeConverter.parseBase64Binary(encodedPayload); - key = Key.parseFrom(keyProtoData); - } catch (InvalidProtocolBufferNanoException protoException) { - System.err.println("failed to extract key from filename: " + protoException); - System.exit(1); - } catch (IllegalArgumentException base64Exception) { - System.err.println("failed to extract key from filename: " + base64Exception); - System.exit(1); - } - // keys are self-checked - if (key.checksum != checkKey(key)) { - System.err.println("key ckecksum failed"); - System.exit(1); - } - type = TYPES[key.type]; - System.err.println("This is a " + type.getSimpleName() + " backup"); - } + if (defaultType == null && files.isEmpty()) { + // can't infer file type without the key + usage(args); } - // read in the bytes - ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - BufferedInputStream input = null; - if (source == null) { - input = new BufferedInputStream(System.in); - } else { + if (files.size() > 1) { + System.err.println("Explicit type ignored for multiple files."); + defaultType = null; + } + + if (files.isEmpty()) { + files.add(new File(STANDARD_IN)); + } + + for (File source : files) { + Class type = null; + if (defaultType == null) { + Key key = decodeKey(source.getName().getBytes(), fromLogs); + type = TYPES[key.type]; + System.err.println("This is a " + type.getSimpleName() + " backup"); + } else { + type = defaultType; + } + + // read in the bytes + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + BufferedInputStream input = null; + if (source.getName() == STANDARD_IN) { + input = new BufferedInputStream(System.in); + } else { + try { + input = new BufferedInputStream(new FileInputStream(source)); + } catch (FileNotFoundException e) { + System.err.println("failed to open file: " + source + ", " + e); + System.exit(1); + } + } + byte[] buffer = new byte[1024]; try { - input = new BufferedInputStream(new FileInputStream(source)); - } catch (FileNotFoundException e) { - System.err.println("failed to open file: " + source + ", " + e); + while (input.available() > 0) { + int n = input.read(buffer); + int offset = 0; + if (skip > 0) { + offset = Math.min(skip, n); + n -= offset; + skip -= offset; + } + if (n > 0) { + byteStream.write(buffer, offset, n); + } + } + } catch (IOException e) { + System.err.println("failed to read input: " + e); System.exit(1); } - } - byte[] buffer = new byte[1024]; - try { - while (input.available() > 0) { - int n = input.read(buffer); - int offset = 0; - if (skip > 0) { - offset = Math.min(skip, n); - n -= offset; - skip -= offset; + + MessageNano proto = null; + byte[] payload = byteStream.toByteArray(); + if (type == Key.class) { + proto = decodeKey(payload, fromLogs); + } else { + proto = decodeBackupData(payload, type, fromLogs); + } + + // Generic string output + System.out.println(proto.toString()); + + if (extractImages) { + String prefix = "stdin"; + if (source != null) { + prefix = source.getName(); } - if (n > 0) { - byteStream.write(buffer, offset, n); + // save off the icon bits in a file for inspection + if (proto instanceof Resource) { + Resource icon = (Resource) proto; + writeImageData(icon.data, prefix + ".png"); + } + + // save off the icon bits in a file for inspection + if (proto instanceof Favorite) { + Favorite favorite = (Favorite) proto; + if (favorite.iconType == ICON_TYPE_BITMAP) { + writeImageData(favorite.icon, prefix + ".png"); + } + } + + // save off the widget icon and preview bits in files for inspection + if (proto instanceof Widget) { + Widget widget = (Widget) proto; + if (widget.icon != null) { + writeImageData(widget.icon.data, prefix + "_icon.png"); + } + if (widget.preview != null) { + writeImageData(widget.preview.data, prefix + "_preview.png"); + } } } - } catch (IOException e) { - System.err.println("failed to read input: " + e); + } + System.exit(0); + } + + // In logcat, backup data is base64 encoded, but in localtransport files it is raw + private static MessageNano decodeBackupData(byte[] payload, Class type, boolean fromLogs) + throws InstantiationException, IllegalAccessException { + MessageNano proto;// other types are wrapped in a checksum message + CheckedMessage wrapper = new CheckedMessage(); + try { + if (fromLogs) { + payload = DatatypeConverter.parseBase64Binary(new String(payload)); + } + MessageNano.mergeFrom(wrapper, payload); + } catch (InvalidProtocolBufferNanoException e) { + System.err.println("failed to parse wrapper: " + e); System.exit(1); } - MessageNano proto = null; - if (type == Key.class) { - Key key = new Key(); - try { - key = Key.parseFrom(byteStream.toByteArray()); - } catch (InvalidProtocolBufferNanoException e) { - System.err.println("failed to parse proto: " + e); - System.exit(1); - } - // keys are self-checked - if (key.checksum != checkKey(key)) { - System.err.println("key checksum failed"); - System.exit(1); - } - proto = key; - } else { - // other types are wrapped in a checksum message - CheckedMessage wrapper = new CheckedMessage(); - try { - MessageNano.mergeFrom(wrapper, byteStream.toByteArray()); - } catch (InvalidProtocolBufferNanoException e) { - System.err.println("failed to parse wrapper: " + e); - System.exit(1); - } - CRC32 checksum = new CRC32(); - checksum.update(wrapper.payload); - if (wrapper.checksum != checksum.getValue()) { - System.err.println("wrapper checksum failed"); - System.exit(1); - } - // decode the actual message - proto = (MessageNano) type.newInstance(); - try { - MessageNano.mergeFrom(proto, wrapper.payload); - } catch (InvalidProtocolBufferNanoException e) { - System.err.println("failed to parse proto: " + e); - System.exit(1); - } + CRC32 checksum = new CRC32(); + checksum.update(wrapper.payload); + if (wrapper.checksum != checksum.getValue()) { + System.err.println("wrapper checksum failed"); + System.exit(1); } - // Generic string output - System.out.println(proto.toString()); + // decode the actual message + proto = (MessageNano) type.newInstance(); + try { + MessageNano.mergeFrom(proto, wrapper.payload); + } catch (InvalidProtocolBufferNanoException e) { + System.err.println("failed to parse proto: " + e); + System.exit(1); + } + return proto; + } - if (extractImages) { - String prefix = "stdin"; - if (source != null) { - prefix = source.getName(); - } - // save off the icon bits in a file for inspection - if (proto instanceof Resource) { - Resource icon = (Resource) proto; - writeImageData(icon.data, prefix + ".png"); - } - - // save off the icon bits in a file for inspection - if (proto instanceof Favorite) { - Favorite favorite = (Favorite) proto; - if (favorite.iconType == ICON_TYPE_BITMAP) { - writeImageData(favorite.icon, prefix + ".png"); - } - } - - // save off the widget icon and preview bits in files for inspection - if (proto instanceof Widget) { - Widget widget = (Widget) proto; - if (widget.icon != null) { - writeImageData(widget.icon.data, prefix + "_icon.png"); - } - if (widget.preview != null) { - writeImageData(widget.preview.data, prefix + "_preview.png"); + // In logcat, keys are base64 encoded with no prefix. + // The localtransport adds a prefix and the base64 encodes the whole thing again. + private static Key decodeKey(byte[] payload, boolean fromLogs) { + Key key = new Key(); + try { + String encodedKey = new String(payload); + if (!fromLogs) { + byte[] rawKey = DatatypeConverter.parseBase64Binary(encodedKey); + if (rawKey[0] != 'L' || rawKey[1] != ':') { + System.err.println(encodedKey + " is not a launcher backup key."); + System.exit(1); } + encodedKey = new String(rawKey, 2, rawKey.length - 2); } + byte[] keyProtoData = DatatypeConverter.parseBase64Binary(encodedKey); + key = Key.parseFrom(keyProtoData); + } catch (InvalidProtocolBufferNanoException protoException) { + System.err.println("failed to extract key from filename: " + protoException); + System.exit(1); + } catch (IllegalArgumentException base64Exception) { + System.err.println("failed to extract key from filename: " + base64Exception); + System.exit(1); } - // success - System.exit(0); + // keys are self-checked + if (key.checksum != checkKey(key)) { + System.err.println("key ckecksum failed"); + System.exit(1); + } + return key; } private static void writeImageData(byte[] data, String path) { @@ -289,6 +323,7 @@ class DecoderRing { System.err.println("\t-w\tdecode a widget"); System.err.println("\t-S b\tskip b bytes"); System.err.println("\t-x\textract image data to files"); + System.err.println("\t-l\texpect data from logcat, instead of the local transport"); System.err.println("\tfilename\tread from filename, not stdin"); System.exit(1); } From deade303d1d141f395b1b5ae5314b210faf5baa1 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Wed, 18 Dec 2013 23:09:31 -0800 Subject: [PATCH 083/147] Import translations. DO NOT MERGE Change-Id: I3e93fc7096badc195c25f3456c13217ab2786b6f Auto-generated-cl: translation import --- WallpaperPicker/res/values-am/strings.xml | 2 +- WallpaperPicker/res/values-cs/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-es-rUS/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-fa/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-fr-rCA/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-fr/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-hi/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-in/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-it/strings.xml | 4 +-- WallpaperPicker/res/values-ja/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ka-rGE/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-lo-rLA/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ms-rMY/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-nb/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ru/strings.xml | 6 ++-- WallpaperPicker/res/values-sk/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-sl/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-sv/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-sw/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-tr/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-zh-rCN/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-zh-rHK/strings.xml | 2 +- WallpaperPicker/res/values-zu/strings.xml | 36 +++++++++++++++++++ res/values-de/strings.xml | 2 +- 24 files changed, 692 insertions(+), 8 deletions(-) create mode 100644 WallpaperPicker/res/values-cs/strings.xml create mode 100644 WallpaperPicker/res/values-es-rUS/strings.xml create mode 100644 WallpaperPicker/res/values-fa/strings.xml create mode 100644 WallpaperPicker/res/values-fr-rCA/strings.xml create mode 100644 WallpaperPicker/res/values-fr/strings.xml create mode 100644 WallpaperPicker/res/values-hi/strings.xml create mode 100644 WallpaperPicker/res/values-in/strings.xml create mode 100644 WallpaperPicker/res/values-ja/strings.xml create mode 100644 WallpaperPicker/res/values-ka-rGE/strings.xml create mode 100644 WallpaperPicker/res/values-lo-rLA/strings.xml create mode 100644 WallpaperPicker/res/values-ms-rMY/strings.xml create mode 100644 WallpaperPicker/res/values-nb/strings.xml create mode 100644 WallpaperPicker/res/values-sk/strings.xml create mode 100644 WallpaperPicker/res/values-sl/strings.xml create mode 100644 WallpaperPicker/res/values-sv/strings.xml create mode 100644 WallpaperPicker/res/values-sw/strings.xml create mode 100644 WallpaperPicker/res/values-tr/strings.xml create mode 100644 WallpaperPicker/res/values-zh-rCN/strings.xml create mode 100644 WallpaperPicker/res/values-zu/strings.xml diff --git a/WallpaperPicker/res/values-am/strings.xml b/WallpaperPicker/res/values-am/strings.xml index e4bcadbed8..3941616341 100644 --- a/WallpaperPicker/res/values-am/strings.xml +++ b/WallpaperPicker/res/values-am/strings.xml @@ -32,5 +32,5 @@ "ሰርዝ" "ምስል ይምረጡ" "የግድግዳ ወረቀቶች" - "የግድግዳ ወረቀት ይቁረጡ" + "የግድግዳ ወረቀት ይከርክሙ" diff --git a/WallpaperPicker/res/values-cs/strings.xml b/WallpaperPicker/res/values-cs/strings.xml new file mode 100644 index 0000000000..a07b9eda2a --- /dev/null +++ b/WallpaperPicker/res/values-cs/strings.xml @@ -0,0 +1,36 @@ + + + + + "Nastavit jako tapetu" + "Obrázek nelze načíst." + "Obrázek nelze načíst jako tapetu." + + "Vybráno: %1$d" + "Vybráno: %1$d" + "Vybráno: %1$d" + + "Tapeta %1$d z %2$d" + "Vybrána položka %1$s" + "Smazat" + "Vybrat obrázek" + "Tapety" + "Oříznutí tapety" + diff --git a/WallpaperPicker/res/values-es-rUS/strings.xml b/WallpaperPicker/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000..768385b9ee --- /dev/null +++ b/WallpaperPicker/res/values-es-rUS/strings.xml @@ -0,0 +1,36 @@ + + + + + "Establecer como fondo de pantalla" + "No se pudo cargar la imagen." + "No se pudo cargar la imagen como fondo de pantalla." + + "%1$d seleccionado" + "%1$d seleccionado" + "%1$d seleccionados" + + "Fondo de pantalla %1$d de %2$d" + "%1$s seleccionado" + "Eliminar" + "Elegir imagen" + "Fondos de pantalla" + "Recortar fondo de pantalla" + diff --git a/WallpaperPicker/res/values-fa/strings.xml b/WallpaperPicker/res/values-fa/strings.xml new file mode 100644 index 0000000000..eb330b515c --- /dev/null +++ b/WallpaperPicker/res/values-fa/strings.xml @@ -0,0 +1,36 @@ + + + + + "تنظیم کاغذدیواری" + "تصویر بارگیری نشد" + "تصویر به عنوان کاغذدیواری بارگیری نشد" + + "‏%1$d انتخاب شد" + "‏%1$d انتخاب شد" + "‏%1$d انتخاب شد" + + "‏کاغذدیواری %1$d از %2$d" + "%1$s انتخاب شده است" + "حذف" + "انتخاب تصویر" + "کاغذدیواری‌ها" + "برش کاغذدیواری" + diff --git a/WallpaperPicker/res/values-fr-rCA/strings.xml b/WallpaperPicker/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000000..e95670678a --- /dev/null +++ b/WallpaperPicker/res/values-fr-rCA/strings.xml @@ -0,0 +1,36 @@ + + + + + "Définir le fond d\'écran" + "Impossible de charger l\'image" + "Impossible de charger l\'image comme fond d\'écran" + + "%1$d sélectionné" + "%1$d sélectionné" + "%1$d sélectionné(s)" + + "Fond d\'écran %1$d de %2$d" + "Sélection : %1$s" + "Supprimer" + "Choisir une image" + "Fonds d\'écran" + "Rogner le fond d\'écran" + diff --git a/WallpaperPicker/res/values-fr/strings.xml b/WallpaperPicker/res/values-fr/strings.xml new file mode 100644 index 0000000000..ea07db1e54 --- /dev/null +++ b/WallpaperPicker/res/values-fr/strings.xml @@ -0,0 +1,36 @@ + + + + + "Définir comme fond d\'écran" + "Impossible de charger l\'image." + "Impossible de charger l\'image comme fond d\'écran." + + "%1$d élément sélectionné" + "%1$d élément sélectionné" + "%1$d éléments sélectionnés" + + "Fond d\'écran %1$d sur %2$d" + "%1$s sélectionné" + "Supprimer" + "Sélectionner une image" + "Fonds d\'écran" + "Rogner le fond d\'écran" + diff --git a/WallpaperPicker/res/values-hi/strings.xml b/WallpaperPicker/res/values-hi/strings.xml new file mode 100644 index 0000000000..fcb252eb55 --- /dev/null +++ b/WallpaperPicker/res/values-hi/strings.xml @@ -0,0 +1,36 @@ + + + + + "वॉलपेपर सेट करें" + "चित्र लोड नहीं किया जा सका" + "चित्र को वॉलपेपर के रूप में लोड नहीं किया जा सका" + + "%1$d चयनित" + "%1$d चयनित" + "%1$d चयनित" + + "वॉलपेपर %2$d में से %1$d" + "चयनित %1$s" + "हटाएं" + "चित्र चुनें" + "वॉलपेपर" + "वॉलपेपर काटें" + diff --git a/WallpaperPicker/res/values-in/strings.xml b/WallpaperPicker/res/values-in/strings.xml new file mode 100644 index 0000000000..f216cf3436 --- /dev/null +++ b/WallpaperPicker/res/values-in/strings.xml @@ -0,0 +1,36 @@ + + + + + "Setel wallpaper" + "Tidak dapat memuat gambar" + "Tidak dapat memuat gambar sebagai wallpaper" + + "%1$d dipilih" + "%1$d dipilih" + "%1$d dipilih" + + "Wallpaper %1$d dari %2$d" + "%1$s terpilih" + "Hapus" + "Pilih gambar" + "Wallpaper" + "Pangkas wallpaper" + diff --git a/WallpaperPicker/res/values-it/strings.xml b/WallpaperPicker/res/values-it/strings.xml index fcd49bd291..c29946f85a 100644 --- a/WallpaperPicker/res/values-it/strings.xml +++ b/WallpaperPicker/res/values-it/strings.xml @@ -23,9 +23,9 @@ "Impossibile caricare l\'immagine" "Impossibile caricare l\'immagine come sfondo" - "%1$d selezionato" + "%1$d selezionati" "%1$d selezionato" - "%1$d selezionato" + "%1$d selezionati" "Sfondo %1$d di %2$d" "Elemento selezionato: %1$s" diff --git a/WallpaperPicker/res/values-ja/strings.xml b/WallpaperPicker/res/values-ja/strings.xml new file mode 100644 index 0000000000..80b0944531 --- /dev/null +++ b/WallpaperPicker/res/values-ja/strings.xml @@ -0,0 +1,36 @@ + + + + + "壁紙を設定" + "画像を読み込めませんでした" + "画像を壁紙として読み込めませんでした" + + "%1$d個選択済み" + "%1$d個選択済み" + "%1$d個選択済み" + + "壁紙: %1$d/%2$d" + "選択: %1$s" + "削除" + "画像を選択" + "壁紙" + "壁紙のトリミング" + diff --git a/WallpaperPicker/res/values-ka-rGE/strings.xml b/WallpaperPicker/res/values-ka-rGE/strings.xml new file mode 100644 index 0000000000..2f59712d8b --- /dev/null +++ b/WallpaperPicker/res/values-ka-rGE/strings.xml @@ -0,0 +1,36 @@ + + + + + "ფონის დაყენება" + "სურათი ვერ ჩაიტვირთა." + "სურათი ფონად ვერ ჩაიტვირთა." + + "არჩეულია %1$d" + "არჩეულია %1$d" + "არჩეულია %1$d" + + "ფონი %1$d %2$d-დან" + "არჩეული %1$s" + "წაშლა" + "სურათის ამორჩევა" + "ფონები" + "ფონის ჩამოჭრა" + diff --git a/WallpaperPicker/res/values-lo-rLA/strings.xml b/WallpaperPicker/res/values-lo-rLA/strings.xml new file mode 100644 index 0000000000..e468591113 --- /dev/null +++ b/WallpaperPicker/res/values-lo-rLA/strings.xml @@ -0,0 +1,36 @@ + + + + + "ຕັ້ງເປັນພາບພື້ນຫຼັງ" + "ບໍ່ສາມາດໂຫຼດຮູບໄດ້" + "ບໍ່ສາມາດໂຫຼດຮູບເປັນພາບພື້ນຫຼັງໄດ້" + + "ເລືອກ %1$d" + "ເລືອກ %1$d" + "ເລືອກ %1$d" + + "ພາບພື້ນຫຼັງ %1$d ໃນ %2$d" + "ເລືອກ %1$s" + "ລຶບ" + "ເລືອກ​ຮູບ​ພາບ" + "ພາບພື້ນຫຼັງ" + "ຕັດພາບພື້ນຫຼັງ" + diff --git a/WallpaperPicker/res/values-ms-rMY/strings.xml b/WallpaperPicker/res/values-ms-rMY/strings.xml new file mode 100644 index 0000000000..950f4d0e1d --- /dev/null +++ b/WallpaperPicker/res/values-ms-rMY/strings.xml @@ -0,0 +1,36 @@ + + + + + "Tetapkan kertas dinding" + "Tidak dapat memuatkan imej" + "Tidak dapat memuatkan imej sebagai kertas dinding" + + "%1$d dipilih" + "%1$d dipilih" + "%1$d dipilih" + + "Kertas dinding %1$d daripada %2$d" + "Memilih %1$s" + "Padam" + "Pilih imej" + "Kertas dinding" + "Pangkas kertas dinding" + diff --git a/WallpaperPicker/res/values-nb/strings.xml b/WallpaperPicker/res/values-nb/strings.xml new file mode 100644 index 0000000000..3589e4bc86 --- /dev/null +++ b/WallpaperPicker/res/values-nb/strings.xml @@ -0,0 +1,36 @@ + + + + + "Angi bakgrunn" + "Kunne ikke laste inn bildet" + "Kunne ikke laste inn bildet som bakgrunn" + + "%1$d valgt" + "%1$d valgt" + "%1$d valgt" + + "Bakgrunn %1$d av %2$d" + "Valgt %1$s" + "Slett" + "Velg bilde" + "Bakgrunner" + "Beskjær bakgrunnen" + diff --git a/WallpaperPicker/res/values-ru/strings.xml b/WallpaperPicker/res/values-ru/strings.xml index 2ba2af2a5d..ff43ce8f64 100644 --- a/WallpaperPicker/res/values-ru/strings.xml +++ b/WallpaperPicker/res/values-ru/strings.xml @@ -23,9 +23,9 @@ "Не удалось загрузить изображение" "Не удалось загрузить изображение" - "%1$d" - "%1$d" - "%1$d" + "Выбрано: %1$d" + "Выбрано: %1$d" + "Выбрано: %1$d" "Обои %1$d из %2$d" "Выбран элемент \"%1$s\"" diff --git a/WallpaperPicker/res/values-sk/strings.xml b/WallpaperPicker/res/values-sk/strings.xml new file mode 100644 index 0000000000..33477a124a --- /dev/null +++ b/WallpaperPicker/res/values-sk/strings.xml @@ -0,0 +1,36 @@ + + + + + "Nastaviť tapetu" + "Obrázok nie je možné načítať" + "Obrázok nie je možné načítať ako tapetu" + + "Počet vybratých položiek: %1$d" + "Počet vybratých položiek: %1$d" + "Počet vybratých položiek: %1$d" + + "Tapeta %1$d z %2$d" + "Vybratá položka %1$s" + "Odstrániť" + "Vybrať obrázok" + "Tapety" + "Orezanie tapety" + diff --git a/WallpaperPicker/res/values-sl/strings.xml b/WallpaperPicker/res/values-sl/strings.xml new file mode 100644 index 0000000000..06a508a8c5 --- /dev/null +++ b/WallpaperPicker/res/values-sl/strings.xml @@ -0,0 +1,36 @@ + + + + + "Nastavi ozadje" + "Slike ni bilo mogoče naložiti" + "Slike ni bilo mogoče naložiti kot ozadje" + + "Št. izbranih: %1$d" + "Št. izbranih: %1$d" + "Št. izbranih: %1$d" + + "%1$d. ozadje od %2$d" + "Izbrano: %1$s" + "Izbriši" + "Izberi sliko" + "Ozadja" + "Obrezovanje ozadja" + diff --git a/WallpaperPicker/res/values-sv/strings.xml b/WallpaperPicker/res/values-sv/strings.xml new file mode 100644 index 0000000000..57db3a64d3 --- /dev/null +++ b/WallpaperPicker/res/values-sv/strings.xml @@ -0,0 +1,36 @@ + + + + + "Ange bakgrund" + "Det gick inte att läsa in bilden" + "Det gick inte att läsa in bilden som bakgrund" + + "%1$d har valts" + "%1$d har valts" + "%1$d har valts" + + "Bakgrund %1$d av %2$d" + "%1$s har valts" + "Ta bort" + "Välj bild" + "Bakgrunder" + "Beskär bakgrund" + diff --git a/WallpaperPicker/res/values-sw/strings.xml b/WallpaperPicker/res/values-sw/strings.xml new file mode 100644 index 0000000000..edea3de5b1 --- /dev/null +++ b/WallpaperPicker/res/values-sw/strings.xml @@ -0,0 +1,36 @@ + + + + + "Weka mandhari" + "Haikuweza kupakia picha" + "Haikuweza kupakia picha iwe mandhari" + + "%1$d zimechaguliwa" + "%1$d zimechaguliwa" + "%1$d zimechaguliwa" + + "Mandhari %1$d ya %2$d" + "%1$s iliyochaguliwa" + "Futa" + "Chagua picha" + "Mandhari" + "Punguza mandhari" + diff --git a/WallpaperPicker/res/values-tr/strings.xml b/WallpaperPicker/res/values-tr/strings.xml new file mode 100644 index 0000000000..3d03c6be8d --- /dev/null +++ b/WallpaperPicker/res/values-tr/strings.xml @@ -0,0 +1,36 @@ + + + + + "Duvar kağıdını ayarla" + "Resim yüklenemedi" + "Resim duvar kağıdı olarak yüklenemedi" + + "%1$d tane seçildi" + "%1$d tane seçildi" + "%1$d tane seçildi" + + "%2$d duvar kağıdı arasından duvar kağıdı %1$d" + "%1$s seçildi" + "Sil" + "Resim seç" + "Duvar kağıtları" + "Duvar kağıdını kırp" + diff --git a/WallpaperPicker/res/values-zh-rCN/strings.xml b/WallpaperPicker/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..1def9ed41b --- /dev/null +++ b/WallpaperPicker/res/values-zh-rCN/strings.xml @@ -0,0 +1,36 @@ + + + + + "设置壁纸" + "无法加载图片" + "无法加载要设为壁纸的图片" + + "已选择%1$d项" + "已选择%1$d项" + "已选择%1$d项" + + "第%1$d张壁纸,共%2$d张" + "已选择%1$s" + "删除" + "选择图片" + "壁纸" + "剪裁壁纸" + diff --git a/WallpaperPicker/res/values-zh-rHK/strings.xml b/WallpaperPicker/res/values-zh-rHK/strings.xml index e7a12c1baf..66ba0af180 100644 --- a/WallpaperPicker/res/values-zh-rHK/strings.xml +++ b/WallpaperPicker/res/values-zh-rHK/strings.xml @@ -28,7 +28,7 @@ "已選取 %1$d 張" "第 %1$d 張桌布,共 %2$d 張" - "已選取「%1$s」" + "已選取%1$s" "刪除" "選擇圖片" "桌布" diff --git a/WallpaperPicker/res/values-zu/strings.xml b/WallpaperPicker/res/values-zu/strings.xml new file mode 100644 index 0000000000..c7d3f33d1a --- /dev/null +++ b/WallpaperPicker/res/values-zu/strings.xml @@ -0,0 +1,36 @@ + + + + + "Setha isithombe sangemuva" + "Ayikwazanga ukulayisha isithombe" + "Ayikwazanga ukulayisha isithombe njengesithombe sangemuva" + + "%1$d khethiwe" + "%1$d khethiwe" + "%1$d khethiwe" + + "Isithombe sangemuva esingu-%1$d kwezingu-%2$d" + "I-%1$s ekhethiwe" + "Susa" + "Khetha isithombe" + "Izithombe zangemuva" + "Nqampuna isithombe sangemuva" + diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 249af37f34..4d70318bbc 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -84,7 +84,7 @@ "Startbildschirm %1$d von %2$d" "Apps-Seite %1$d von %2$d" "Widgets-Seite %1$d von %2$d" - "Willkommen!" + "Hallo!" "Gerät personalisieren" From d4d3d08741b2c183dbcba1fa25ca100783bfe1ee Mon Sep 17 00:00:00 2001 From: Sandeep Siddhartha Date: Thu, 26 Dec 2013 15:42:52 -0800 Subject: [PATCH 084/147] Allow changing search bar hint in the cling on-the-fly - This allows GEL to initially supply an empty string if hotword isn't active, and later on update the cling if and when the hotword becomes active. - This isn't expensive as it'll only be called if Launcher first calls getFirstRunClingSearchBarHint, i.e. once every fresh install/clear data Bug: 11116105 Change-Id: Ia963bb62d7b331afd0c34adfa6c4b6bdbac48349 --- src/com/android/launcher3/Launcher.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index a8dd99795a..802f5d022a 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -4418,6 +4418,20 @@ public class Launcher extends Activity } } + /** + * Called when the SearchBar hint should be changed. + * + * @param hint the hint to be displayed in the search bar. + */ + protected void onSearchBarHintChanged(String hint) { + Cling cling = (Cling) findViewById(R.id.first_run_cling); + if (cling != null && cling.getVisibility() == View.VISIBLE && !hint.isEmpty()) { + TextView sbHint = (TextView) cling.findViewById(R.id.search_bar_hint); + sbHint.setText(hint); + sbHint.setVisibility(View.VISIBLE); + } + } + protected String getFirstRunClingSearchBarHint() { return ""; } From cff2d6a2d904b7d88096650021aa428cfdc08632 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Thu, 26 Dec 2013 17:19:12 -0800 Subject: [PATCH 085/147] Import translations. DO NOT MERGE Change-Id: I5cbd143e531cfe8f1d131f0d7c91008758337013 Auto-generated-cl: translation import --- res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index b95d482700..c72576efa5 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -98,7 +98,7 @@ "Startbildschirm %1$d von %2$d" "Apps-Seite %1$d von %2$d" "Widgets-Seite %1$d von %2$d" - "Willkommen!" + "Hallo!" "Gerät personalisieren" From 37749ea37032043687c7dab552d961ba6245bd08 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Thu, 26 Dec 2013 17:20:10 -0800 Subject: [PATCH 086/147] Import translations. DO NOT MERGE Change-Id: I9ced3c60b831f09e8436f562d8c1fef1e2aa6156 Auto-generated-cl: translation import --- WallpaperPicker/res/values-am/strings.xml | 2 +- WallpaperPicker/res/values-cs/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-es-rUS/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-fa/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-fr-rCA/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-fr/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-hi/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-in/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-it/strings.xml | 4 +-- WallpaperPicker/res/values-ja/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ka-rGE/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-lo-rLA/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ms-rMY/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-nb/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-ru/strings.xml | 6 ++-- WallpaperPicker/res/values-sk/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-sl/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-sv/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-sw/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-tr/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-zh-rCN/strings.xml | 36 +++++++++++++++++++ WallpaperPicker/res/values-zh-rHK/strings.xml | 2 +- WallpaperPicker/res/values-zu/strings.xml | 36 +++++++++++++++++++ res/values-de/strings.xml | 2 +- 24 files changed, 692 insertions(+), 8 deletions(-) create mode 100644 WallpaperPicker/res/values-cs/strings.xml create mode 100644 WallpaperPicker/res/values-es-rUS/strings.xml create mode 100644 WallpaperPicker/res/values-fa/strings.xml create mode 100644 WallpaperPicker/res/values-fr-rCA/strings.xml create mode 100644 WallpaperPicker/res/values-fr/strings.xml create mode 100644 WallpaperPicker/res/values-hi/strings.xml create mode 100644 WallpaperPicker/res/values-in/strings.xml create mode 100644 WallpaperPicker/res/values-ja/strings.xml create mode 100644 WallpaperPicker/res/values-ka-rGE/strings.xml create mode 100644 WallpaperPicker/res/values-lo-rLA/strings.xml create mode 100644 WallpaperPicker/res/values-ms-rMY/strings.xml create mode 100644 WallpaperPicker/res/values-nb/strings.xml create mode 100644 WallpaperPicker/res/values-sk/strings.xml create mode 100644 WallpaperPicker/res/values-sl/strings.xml create mode 100644 WallpaperPicker/res/values-sv/strings.xml create mode 100644 WallpaperPicker/res/values-sw/strings.xml create mode 100644 WallpaperPicker/res/values-tr/strings.xml create mode 100644 WallpaperPicker/res/values-zh-rCN/strings.xml create mode 100644 WallpaperPicker/res/values-zu/strings.xml diff --git a/WallpaperPicker/res/values-am/strings.xml b/WallpaperPicker/res/values-am/strings.xml index e4bcadbed8..3941616341 100644 --- a/WallpaperPicker/res/values-am/strings.xml +++ b/WallpaperPicker/res/values-am/strings.xml @@ -32,5 +32,5 @@ "ሰርዝ" "ምስል ይምረጡ" "የግድግዳ ወረቀቶች" - "የግድግዳ ወረቀት ይቁረጡ" + "የግድግዳ ወረቀት ይከርክሙ" diff --git a/WallpaperPicker/res/values-cs/strings.xml b/WallpaperPicker/res/values-cs/strings.xml new file mode 100644 index 0000000000..a07b9eda2a --- /dev/null +++ b/WallpaperPicker/res/values-cs/strings.xml @@ -0,0 +1,36 @@ + + + + + "Nastavit jako tapetu" + "Obrázek nelze načíst." + "Obrázek nelze načíst jako tapetu." + + "Vybráno: %1$d" + "Vybráno: %1$d" + "Vybráno: %1$d" + + "Tapeta %1$d z %2$d" + "Vybrána položka %1$s" + "Smazat" + "Vybrat obrázek" + "Tapety" + "Oříznutí tapety" + diff --git a/WallpaperPicker/res/values-es-rUS/strings.xml b/WallpaperPicker/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000..768385b9ee --- /dev/null +++ b/WallpaperPicker/res/values-es-rUS/strings.xml @@ -0,0 +1,36 @@ + + + + + "Establecer como fondo de pantalla" + "No se pudo cargar la imagen." + "No se pudo cargar la imagen como fondo de pantalla." + + "%1$d seleccionado" + "%1$d seleccionado" + "%1$d seleccionados" + + "Fondo de pantalla %1$d de %2$d" + "%1$s seleccionado" + "Eliminar" + "Elegir imagen" + "Fondos de pantalla" + "Recortar fondo de pantalla" + diff --git a/WallpaperPicker/res/values-fa/strings.xml b/WallpaperPicker/res/values-fa/strings.xml new file mode 100644 index 0000000000..eb330b515c --- /dev/null +++ b/WallpaperPicker/res/values-fa/strings.xml @@ -0,0 +1,36 @@ + + + + + "تنظیم کاغذدیواری" + "تصویر بارگیری نشد" + "تصویر به عنوان کاغذدیواری بارگیری نشد" + + "‏%1$d انتخاب شد" + "‏%1$d انتخاب شد" + "‏%1$d انتخاب شد" + + "‏کاغذدیواری %1$d از %2$d" + "%1$s انتخاب شده است" + "حذف" + "انتخاب تصویر" + "کاغذدیواری‌ها" + "برش کاغذدیواری" + diff --git a/WallpaperPicker/res/values-fr-rCA/strings.xml b/WallpaperPicker/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000000..e95670678a --- /dev/null +++ b/WallpaperPicker/res/values-fr-rCA/strings.xml @@ -0,0 +1,36 @@ + + + + + "Définir le fond d\'écran" + "Impossible de charger l\'image" + "Impossible de charger l\'image comme fond d\'écran" + + "%1$d sélectionné" + "%1$d sélectionné" + "%1$d sélectionné(s)" + + "Fond d\'écran %1$d de %2$d" + "Sélection : %1$s" + "Supprimer" + "Choisir une image" + "Fonds d\'écran" + "Rogner le fond d\'écran" + diff --git a/WallpaperPicker/res/values-fr/strings.xml b/WallpaperPicker/res/values-fr/strings.xml new file mode 100644 index 0000000000..ea07db1e54 --- /dev/null +++ b/WallpaperPicker/res/values-fr/strings.xml @@ -0,0 +1,36 @@ + + + + + "Définir comme fond d\'écran" + "Impossible de charger l\'image." + "Impossible de charger l\'image comme fond d\'écran." + + "%1$d élément sélectionné" + "%1$d élément sélectionné" + "%1$d éléments sélectionnés" + + "Fond d\'écran %1$d sur %2$d" + "%1$s sélectionné" + "Supprimer" + "Sélectionner une image" + "Fonds d\'écran" + "Rogner le fond d\'écran" + diff --git a/WallpaperPicker/res/values-hi/strings.xml b/WallpaperPicker/res/values-hi/strings.xml new file mode 100644 index 0000000000..fcb252eb55 --- /dev/null +++ b/WallpaperPicker/res/values-hi/strings.xml @@ -0,0 +1,36 @@ + + + + + "वॉलपेपर सेट करें" + "चित्र लोड नहीं किया जा सका" + "चित्र को वॉलपेपर के रूप में लोड नहीं किया जा सका" + + "%1$d चयनित" + "%1$d चयनित" + "%1$d चयनित" + + "वॉलपेपर %2$d में से %1$d" + "चयनित %1$s" + "हटाएं" + "चित्र चुनें" + "वॉलपेपर" + "वॉलपेपर काटें" + diff --git a/WallpaperPicker/res/values-in/strings.xml b/WallpaperPicker/res/values-in/strings.xml new file mode 100644 index 0000000000..f216cf3436 --- /dev/null +++ b/WallpaperPicker/res/values-in/strings.xml @@ -0,0 +1,36 @@ + + + + + "Setel wallpaper" + "Tidak dapat memuat gambar" + "Tidak dapat memuat gambar sebagai wallpaper" + + "%1$d dipilih" + "%1$d dipilih" + "%1$d dipilih" + + "Wallpaper %1$d dari %2$d" + "%1$s terpilih" + "Hapus" + "Pilih gambar" + "Wallpaper" + "Pangkas wallpaper" + diff --git a/WallpaperPicker/res/values-it/strings.xml b/WallpaperPicker/res/values-it/strings.xml index fcd49bd291..c29946f85a 100644 --- a/WallpaperPicker/res/values-it/strings.xml +++ b/WallpaperPicker/res/values-it/strings.xml @@ -23,9 +23,9 @@ "Impossibile caricare l\'immagine" "Impossibile caricare l\'immagine come sfondo" - "%1$d selezionato" + "%1$d selezionati" "%1$d selezionato" - "%1$d selezionato" + "%1$d selezionati" "Sfondo %1$d di %2$d" "Elemento selezionato: %1$s" diff --git a/WallpaperPicker/res/values-ja/strings.xml b/WallpaperPicker/res/values-ja/strings.xml new file mode 100644 index 0000000000..80b0944531 --- /dev/null +++ b/WallpaperPicker/res/values-ja/strings.xml @@ -0,0 +1,36 @@ + + + + + "壁紙を設定" + "画像を読み込めませんでした" + "画像を壁紙として読み込めませんでした" + + "%1$d個選択済み" + "%1$d個選択済み" + "%1$d個選択済み" + + "壁紙: %1$d/%2$d" + "選択: %1$s" + "削除" + "画像を選択" + "壁紙" + "壁紙のトリミング" + diff --git a/WallpaperPicker/res/values-ka-rGE/strings.xml b/WallpaperPicker/res/values-ka-rGE/strings.xml new file mode 100644 index 0000000000..2f59712d8b --- /dev/null +++ b/WallpaperPicker/res/values-ka-rGE/strings.xml @@ -0,0 +1,36 @@ + + + + + "ფონის დაყენება" + "სურათი ვერ ჩაიტვირთა." + "სურათი ფონად ვერ ჩაიტვირთა." + + "არჩეულია %1$d" + "არჩეულია %1$d" + "არჩეულია %1$d" + + "ფონი %1$d %2$d-დან" + "არჩეული %1$s" + "წაშლა" + "სურათის ამორჩევა" + "ფონები" + "ფონის ჩამოჭრა" + diff --git a/WallpaperPicker/res/values-lo-rLA/strings.xml b/WallpaperPicker/res/values-lo-rLA/strings.xml new file mode 100644 index 0000000000..e468591113 --- /dev/null +++ b/WallpaperPicker/res/values-lo-rLA/strings.xml @@ -0,0 +1,36 @@ + + + + + "ຕັ້ງເປັນພາບພື້ນຫຼັງ" + "ບໍ່ສາມາດໂຫຼດຮູບໄດ້" + "ບໍ່ສາມາດໂຫຼດຮູບເປັນພາບພື້ນຫຼັງໄດ້" + + "ເລືອກ %1$d" + "ເລືອກ %1$d" + "ເລືອກ %1$d" + + "ພາບພື້ນຫຼັງ %1$d ໃນ %2$d" + "ເລືອກ %1$s" + "ລຶບ" + "ເລືອກ​ຮູບ​ພາບ" + "ພາບພື້ນຫຼັງ" + "ຕັດພາບພື້ນຫຼັງ" + diff --git a/WallpaperPicker/res/values-ms-rMY/strings.xml b/WallpaperPicker/res/values-ms-rMY/strings.xml new file mode 100644 index 0000000000..950f4d0e1d --- /dev/null +++ b/WallpaperPicker/res/values-ms-rMY/strings.xml @@ -0,0 +1,36 @@ + + + + + "Tetapkan kertas dinding" + "Tidak dapat memuatkan imej" + "Tidak dapat memuatkan imej sebagai kertas dinding" + + "%1$d dipilih" + "%1$d dipilih" + "%1$d dipilih" + + "Kertas dinding %1$d daripada %2$d" + "Memilih %1$s" + "Padam" + "Pilih imej" + "Kertas dinding" + "Pangkas kertas dinding" + diff --git a/WallpaperPicker/res/values-nb/strings.xml b/WallpaperPicker/res/values-nb/strings.xml new file mode 100644 index 0000000000..3589e4bc86 --- /dev/null +++ b/WallpaperPicker/res/values-nb/strings.xml @@ -0,0 +1,36 @@ + + + + + "Angi bakgrunn" + "Kunne ikke laste inn bildet" + "Kunne ikke laste inn bildet som bakgrunn" + + "%1$d valgt" + "%1$d valgt" + "%1$d valgt" + + "Bakgrunn %1$d av %2$d" + "Valgt %1$s" + "Slett" + "Velg bilde" + "Bakgrunner" + "Beskjær bakgrunnen" + diff --git a/WallpaperPicker/res/values-ru/strings.xml b/WallpaperPicker/res/values-ru/strings.xml index 2ba2af2a5d..ff43ce8f64 100644 --- a/WallpaperPicker/res/values-ru/strings.xml +++ b/WallpaperPicker/res/values-ru/strings.xml @@ -23,9 +23,9 @@ "Не удалось загрузить изображение" "Не удалось загрузить изображение" - "%1$d" - "%1$d" - "%1$d" + "Выбрано: %1$d" + "Выбрано: %1$d" + "Выбрано: %1$d" "Обои %1$d из %2$d" "Выбран элемент \"%1$s\"" diff --git a/WallpaperPicker/res/values-sk/strings.xml b/WallpaperPicker/res/values-sk/strings.xml new file mode 100644 index 0000000000..33477a124a --- /dev/null +++ b/WallpaperPicker/res/values-sk/strings.xml @@ -0,0 +1,36 @@ + + + + + "Nastaviť tapetu" + "Obrázok nie je možné načítať" + "Obrázok nie je možné načítať ako tapetu" + + "Počet vybratých položiek: %1$d" + "Počet vybratých položiek: %1$d" + "Počet vybratých položiek: %1$d" + + "Tapeta %1$d z %2$d" + "Vybratá položka %1$s" + "Odstrániť" + "Vybrať obrázok" + "Tapety" + "Orezanie tapety" + diff --git a/WallpaperPicker/res/values-sl/strings.xml b/WallpaperPicker/res/values-sl/strings.xml new file mode 100644 index 0000000000..06a508a8c5 --- /dev/null +++ b/WallpaperPicker/res/values-sl/strings.xml @@ -0,0 +1,36 @@ + + + + + "Nastavi ozadje" + "Slike ni bilo mogoče naložiti" + "Slike ni bilo mogoče naložiti kot ozadje" + + "Št. izbranih: %1$d" + "Št. izbranih: %1$d" + "Št. izbranih: %1$d" + + "%1$d. ozadje od %2$d" + "Izbrano: %1$s" + "Izbriši" + "Izberi sliko" + "Ozadja" + "Obrezovanje ozadja" + diff --git a/WallpaperPicker/res/values-sv/strings.xml b/WallpaperPicker/res/values-sv/strings.xml new file mode 100644 index 0000000000..57db3a64d3 --- /dev/null +++ b/WallpaperPicker/res/values-sv/strings.xml @@ -0,0 +1,36 @@ + + + + + "Ange bakgrund" + "Det gick inte att läsa in bilden" + "Det gick inte att läsa in bilden som bakgrund" + + "%1$d har valts" + "%1$d har valts" + "%1$d har valts" + + "Bakgrund %1$d av %2$d" + "%1$s har valts" + "Ta bort" + "Välj bild" + "Bakgrunder" + "Beskär bakgrund" + diff --git a/WallpaperPicker/res/values-sw/strings.xml b/WallpaperPicker/res/values-sw/strings.xml new file mode 100644 index 0000000000..edea3de5b1 --- /dev/null +++ b/WallpaperPicker/res/values-sw/strings.xml @@ -0,0 +1,36 @@ + + + + + "Weka mandhari" + "Haikuweza kupakia picha" + "Haikuweza kupakia picha iwe mandhari" + + "%1$d zimechaguliwa" + "%1$d zimechaguliwa" + "%1$d zimechaguliwa" + + "Mandhari %1$d ya %2$d" + "%1$s iliyochaguliwa" + "Futa" + "Chagua picha" + "Mandhari" + "Punguza mandhari" + diff --git a/WallpaperPicker/res/values-tr/strings.xml b/WallpaperPicker/res/values-tr/strings.xml new file mode 100644 index 0000000000..3d03c6be8d --- /dev/null +++ b/WallpaperPicker/res/values-tr/strings.xml @@ -0,0 +1,36 @@ + + + + + "Duvar kağıdını ayarla" + "Resim yüklenemedi" + "Resim duvar kağıdı olarak yüklenemedi" + + "%1$d tane seçildi" + "%1$d tane seçildi" + "%1$d tane seçildi" + + "%2$d duvar kağıdı arasından duvar kağıdı %1$d" + "%1$s seçildi" + "Sil" + "Resim seç" + "Duvar kağıtları" + "Duvar kağıdını kırp" + diff --git a/WallpaperPicker/res/values-zh-rCN/strings.xml b/WallpaperPicker/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000..1def9ed41b --- /dev/null +++ b/WallpaperPicker/res/values-zh-rCN/strings.xml @@ -0,0 +1,36 @@ + + + + + "设置壁纸" + "无法加载图片" + "无法加载要设为壁纸的图片" + + "已选择%1$d项" + "已选择%1$d项" + "已选择%1$d项" + + "第%1$d张壁纸,共%2$d张" + "已选择%1$s" + "删除" + "选择图片" + "壁纸" + "剪裁壁纸" + diff --git a/WallpaperPicker/res/values-zh-rHK/strings.xml b/WallpaperPicker/res/values-zh-rHK/strings.xml index e7a12c1baf..66ba0af180 100644 --- a/WallpaperPicker/res/values-zh-rHK/strings.xml +++ b/WallpaperPicker/res/values-zh-rHK/strings.xml @@ -28,7 +28,7 @@ "已選取 %1$d 張" "第 %1$d 張桌布,共 %2$d 張" - "已選取「%1$s」" + "已選取%1$s" "刪除" "選擇圖片" "桌布" diff --git a/WallpaperPicker/res/values-zu/strings.xml b/WallpaperPicker/res/values-zu/strings.xml new file mode 100644 index 0000000000..c7d3f33d1a --- /dev/null +++ b/WallpaperPicker/res/values-zu/strings.xml @@ -0,0 +1,36 @@ + + + + + "Setha isithombe sangemuva" + "Ayikwazanga ukulayisha isithombe" + "Ayikwazanga ukulayisha isithombe njengesithombe sangemuva" + + "%1$d khethiwe" + "%1$d khethiwe" + "%1$d khethiwe" + + "Isithombe sangemuva esingu-%1$d kwezingu-%2$d" + "I-%1$s ekhethiwe" + "Susa" + "Khetha isithombe" + "Izithombe zangemuva" + "Nqampuna isithombe sangemuva" + diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 249af37f34..4d70318bbc 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -84,7 +84,7 @@ "Startbildschirm %1$d von %2$d" "Apps-Seite %1$d von %2$d" "Widgets-Seite %1$d von %2$d" - "Willkommen!" + "Hallo!" "Gerät personalisieren" From 5f7099af8573c2229427318acd551b92efae02a3 Mon Sep 17 00:00:00 2001 From: Nilesh Agrawal Date: Thu, 2 Jan 2014 15:54:57 -0800 Subject: [PATCH 087/147] Allow scrolling folders in when all apps is disabled. Allows for more items to be added into a folder. Allows for scrolling by letting the content area inside the scroll view to be taller. The height of content area was capped in https://googleplex-android-review.git.corp.google.com/#/c/387583/ Change-Id: I8d7950ac9c155e26c5a299c17ae6a2bbf829dce6 --- src/com/android/launcher3/CellLayout.java | 2 +- src/com/android/launcher3/Folder.java | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index fa6ce96314..2436a51a36 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -199,7 +199,7 @@ public class CellLayout extends ViewGroup { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CellLayout, defStyle, 0); mCellWidth = mCellHeight = -1; - mFixedCellHeight = mFixedCellHeight = -1; + mFixedCellWidth = mFixedCellHeight = -1; mWidthGap = mOriginalWidthGap = 0; mHeightGap = mOriginalHeightGap = 0; mMaxGap = Integer.MAX_VALUE; diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index f292821f48..ca82bd1a71 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -145,8 +145,13 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList Resources res = getResources(); mMaxCountX = (int) grid.numColumns; - mMaxCountY = (int) grid.numRows; - mMaxNumItems = mMaxCountX * mMaxCountY; + // Allow scrolling folders when DISABLE_ALL_APPS is true. + if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + mMaxCountY = mMaxNumItems = Integer.MAX_VALUE; + } else { + mMaxCountY = (int) grid.numRows; + mMaxNumItems = mMaxCountX * mMaxCountY; + } mInputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); @@ -1009,7 +1014,13 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList int contentAreaHeightSpec = MeasureSpec.makeMeasureSpec(getContentAreaHeight(), MeasureSpec.EXACTLY); - mContent.setFixedSize(getContentAreaWidth(), getContentAreaHeight()); + if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + // Don't cap the height of the content to allow scrolling. + mContent.setFixedSize(getContentAreaWidth(), mContent.getDesiredHeight()); + } else { + mContent.setFixedSize(getContentAreaWidth(), getContentAreaHeight()); + } + mScrollView.measure(contentAreaWidthSpec, contentAreaHeightSpec); mFolderName.measure(contentAreaWidthSpec, MeasureSpec.makeMeasureSpec(mFolderNameHeight, MeasureSpec.EXACTLY)); From 83b0da1aed13b20562039ea00d68791beb46a090 Mon Sep 17 00:00:00 2001 From: Yura Date: Tue, 7 Jan 2014 18:15:46 +0000 Subject: [PATCH 088/147] Removed paddingStart and paddingEnd when they are the same. This is to help get us paddingStart free to be able to work on Samsung tablets, as they crash on paddingStart when it is used outside of -v17. Bug: 8166178 Change-Id: Ic0ea256aabb68b654a3942dd19dd30e67f1b2af9 --- res/layout-sw720dp/market_button.xml | 4 ++-- res/layout/add_list_item.xml | 4 ++-- res/layout/appwidget_error.xml | 4 ++-- res/layout/market_button.xml | 4 ++-- res/values-land/styles.xml | 4 ++-- res/values-sw600dp/styles.xml | 4 ++-- res/values-sw720dp/styles.xml | 12 ++++++------ res/values/styles.xml | 16 ++++++++-------- 8 files changed, 26 insertions(+), 26 deletions(-) diff --git a/res/layout-sw720dp/market_button.xml b/res/layout-sw720dp/market_button.xml index f1e99599e3..7eaeafac3c 100644 --- a/res/layout-sw720dp/market_button.xml +++ b/res/layout-sw720dp/market_button.xml @@ -18,8 +18,8 @@ style="@style/MarketButton" android:onClick="onClickAppMarketButton" android:gravity="center" - android:paddingStart="32dp" - android:paddingEnd="32dp" + android:paddingLeft="32dp" + android:paddingRight="32dp" android:drawablePadding="10dp" android:background="@drawable/tab_widget_indicator_selector" android:text="@string/market" diff --git a/res/layout/add_list_item.xml b/res/layout/add_list_item.xml index 0ae0113302..e937d7bc1d 100644 --- a/res/layout/add_list_item.xml +++ b/res/layout/add_list_item.xml @@ -21,5 +21,5 @@ android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_vertical" android:drawablePadding="14dip" - android:paddingStart="15dip" - android:paddingEnd="15dip" /> + android:paddingLeft="15dip" + android:paddingRight="15dip" /> diff --git a/res/layout/appwidget_error.xml b/res/layout/appwidget_error.xml index f5a9148196..03d4ae424c 100644 --- a/res/layout/appwidget_error.xml +++ b/res/layout/appwidget_error.xml @@ -19,8 +19,8 @@ android:layout_height="wrap_content" android:paddingTop="10dip" android:paddingBottom="10dip" - android:paddingStart="20dip" - android:paddingEnd="20dip" + android:paddingLeft="20dip" + android:paddingRight="20dip" android:gravity="center" android:background="@drawable/bg_appwidget_error" android:textAppearance="?android:attr/textAppearanceMediumInverse" diff --git a/res/layout/market_button.xml b/res/layout/market_button.xml index 4a718c3d61..41e6ec7cc6 100644 --- a/res/layout/market_button.xml +++ b/res/layout/market_button.xml @@ -18,8 +18,8 @@ style="@style/MarketButton" android:onClick="onClickAppMarketButton" android:gravity="center" - android:paddingStart="16dp" - android:paddingEnd="16dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" android:background="@drawable/tab_widget_indicator_selector" android:contentDescription="@string/market" android:shadowColor="@color/workspace_all_apps_and_delete_zone_text_shadow_color" diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml index d18a57b955..fa3801d601 100644 --- a/res/values-land/styles.xml +++ b/res/values-land/styles.xml @@ -36,8 +36,8 @@ center @dimen/toolbar_button_vertical_padding @dimen/toolbar_button_vertical_padding - @dimen/toolbar_button_horizontal_padding - @dimen/toolbar_button_horizontal_padding + @dimen/toolbar_button_horizontal_padding + @dimen/toolbar_button_horizontal_padding #DD000000 0.0 1.0 diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml index 375430417d..200c0a0bde 100644 --- a/res/values-sw600dp/styles.xml +++ b/res/values-sw600dp/styles.xml @@ -23,8 +23,8 @@ wrap_content 10dp 15dp - 35dp - 35dp + 35dp + 35dp @string/cling_dismiss bold @drawable/cling_button_bg diff --git a/res/values-sw720dp/styles.xml b/res/values-sw720dp/styles.xml index e1f9ab45af..b3afae399e 100644 --- a/res/values-sw720dp/styles.xml +++ b/res/values-sw720dp/styles.xml @@ -24,8 +24,8 @@ wrap_content 10dp 15dp - 35dp - 35dp + 35dp + 35dp @string/cling_dismiss 20sp bold @@ -52,8 +52,8 @@ @@ -75,8 +75,8 @@ center center_vertical 7.5dp - 60dp - 60dp + 60dp + 60dp #FFFFFFFF 16sp #393939 diff --git a/res/values/styles.xml b/res/values/styles.xml index 4aad5ebfaf..ed531f03a3 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -23,8 +23,8 @@ wrap_content 15dp 15dp - 50dp - 50dp + 50dp + 50dp @string/cling_dismiss #ffffff bold @@ -109,8 +109,8 @@ center center_vertical 7.5dp - 25dp - 25dp + 25dp + 25dp #FFFFFFFF 16sp true @@ -125,8 +125,8 @@ wrap_content match_parent center - 20dp - 20dp + 20dp + 20dp @drawable/tab_widget_indicator_selector ?android:attr/textColorPrimary 12sp @@ -140,8 +140,8 @@ + + diff --git a/res/values/styles.xml b/res/values/styles.xml index ed531f03a3..c9834f8b5e 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -155,4 +155,10 @@ + + From 8b51b173209a9627157172f22fa23fa36065b061 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Mon, 6 Jan 2014 14:33:50 -0800 Subject: [PATCH 093/147] Move saved wallpaper images from cache directory to data directory Bug: 12028275 Change-Id: Ia8fdd0ea50a4dad34e560287c50ae3fcc6d09cf9 --- .../android/launcher3/SavedWallpaperImages.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java b/WallpaperPicker/src/com/android/launcher3/SavedWallpaperImages.java index 58add7022d..44bfdf1f9d 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 + " (" + From 6e27f642ae66dd1920b25b527fced7268943d11a Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Tue, 10 Dec 2013 13:40:30 +0100 Subject: [PATCH 094/147] Recover when widget preview database is deleted Bug: 12109621 Change-Id: I8d59700d31d6856d6151b965786c87585801317b --- .../android/launcher3/LauncherAppState.java | 9 ++- .../launcher3/WidgetPreviewLoader.java | 67 +++++++++++++------ 2 files changed, 55 insertions(+), 21 deletions(-) diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 84a1d04118..d27cedcfc7 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -83,7 +83,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)); @@ -113,6 +113,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. diff --git a/src/com/android/launcher3/WidgetPreviewLoader.java b/src/com/android/launcher3/WidgetPreviewLoader.java index 7e1ad6d761..3db0b51ade 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() { 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() { 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); From 33f4c2df28228f93d96e9b1d1bfad52d715d917b Mon Sep 17 00:00:00 2001 From: Chris Wren Date: Thu, 9 Jan 2014 11:54:15 -0500 Subject: [PATCH 095/147] first backup should save things from the beginning of time Bug: 12455866 Change-Id: Ie9a97ed4110e7b1ded21f609179b5d6ee7f0ead5 --- src/com/android/launcher3/LauncherBackupHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/LauncherBackupHelper.java b/src/com/android/launcher3/LauncherBackupHelper.java index 2a5ed69615..a081c21911 100644 --- a/src/com/android/launcher3/LauncherBackupHelper.java +++ b/src/com/android/launcher3/LauncherBackupHelper.java @@ -297,7 +297,7 @@ public class LauncherBackupHelper implements BackupHelper { Key key = getKey(Key.FAVORITE, id); keys.add(key); currentIds.add(keyToBackupKey(key)); - if (updateTime > in.t) { + if (updateTime >= in.t) { byte[] blob = packFavorite(cursor); writeRowToBackup(key, blob, out, data); } @@ -365,7 +365,7 @@ public class LauncherBackupHelper implements BackupHelper { Key key = getKey(Key.SCREEN, id); keys.add(key); currentIds.add(keyToBackupKey(key)); - if (updateTime > in.t) { + if (updateTime >= in.t) { byte[] blob = packScreen(cursor); writeRowToBackup(key, blob, out, data); } From 8661761cb691d9bed446b87d55a4fa7043a3aa95 Mon Sep 17 00:00:00 2001 From: Chris Wren Date: Thu, 9 Jan 2014 11:08:37 -0500 Subject: [PATCH 096/147] better support for multiple files don't exit on error, just log. new verbose flag to print more information Change-Id: I5c4895a837cb8a31901aabceade3ab976abf4af0 --- util/com/android/launcher3/DecoderRing.java | 29 ++++++++++++++------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/util/com/android/launcher3/DecoderRing.java b/util/com/android/launcher3/DecoderRing.java index 7098e189dd..86431d9b7b 100644 --- a/util/com/android/launcher3/DecoderRing.java +++ b/util/com/android/launcher3/DecoderRing.java @@ -86,6 +86,7 @@ class DecoderRing { boolean fromLogs = false; int skip = 0; List files = new LinkedList(); + boolean verbose = false; for (int i = 0; i < args.length; i++) { if ("-k".equals(args[i])) { @@ -108,6 +109,8 @@ class DecoderRing { } } else if ("-x".equals(args[i])) { extractImages = true; + } else if ("-v".equals(args[i])) { + verbose = true; } else if ("-L".equals(args[i])) { fromLogs = true; } else if (args[i] != null && !args[i].startsWith("-")) { @@ -123,7 +126,7 @@ class DecoderRing { usage(args); } - if (files.size() > 1) { + if (files.size() > 1 && defaultType != null) { System.err.println("Explicit type ignored for multiple files."); defaultType = null; } @@ -136,8 +139,13 @@ class DecoderRing { Class type = null; if (defaultType == null) { Key key = decodeKey(source.getName().getBytes(), fromLogs); - type = TYPES[key.type]; - System.err.println("This is a " + type.getSimpleName() + " backup"); + if (key != null) { + type = TYPES[key.type]; + if (verbose) { + System.err.println(source.getName() + " is a " + type.getSimpleName()); + System.out.println(key.toString()); + } + } } else { type = defaultType; } @@ -178,12 +186,14 @@ class DecoderRing { byte[] payload = byteStream.toByteArray(); if (type == Key.class) { proto = decodeKey(payload, fromLogs); - } else { + } else if (type != null) { proto = decodeBackupData(payload, type, fromLogs); } // Generic string output - System.out.println(proto.toString()); + if (proto != null) { + System.out.println(proto.toString()); + } if (extractImages) { String prefix = "stdin"; @@ -262,7 +272,7 @@ class DecoderRing { byte[] rawKey = DatatypeConverter.parseBase64Binary(encodedKey); if (rawKey[0] != 'L' || rawKey[1] != ':') { System.err.println(encodedKey + " is not a launcher backup key."); - System.exit(1); + return null; } encodedKey = new String(rawKey, 2, rawKey.length - 2); } @@ -270,16 +280,16 @@ class DecoderRing { key = Key.parseFrom(keyProtoData); } catch (InvalidProtocolBufferNanoException protoException) { System.err.println("failed to extract key from filename: " + protoException); - System.exit(1); + return null; } catch (IllegalArgumentException base64Exception) { System.err.println("failed to extract key from filename: " + base64Exception); - System.exit(1); + return null; } // keys are self-checked if (key.checksum != checkKey(key)) { System.err.println("key ckecksum failed"); - System.exit(1); + return null; } return key; } @@ -323,6 +333,7 @@ class DecoderRing { System.err.println("\t-w\tdecode a widget"); System.err.println("\t-S b\tskip b bytes"); System.err.println("\t-x\textract image data to files"); + System.err.println("\t-v\tprint key type data, as well as payload"); System.err.println("\t-l\texpect data from logcat, instead of the local transport"); System.err.println("\tfilename\tread from filename, not stdin"); System.exit(1); From b54a5989a21bef4e6bac304591ca4030bfbe709d Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Wed, 8 Jan 2014 15:21:04 -0800 Subject: [PATCH 097/147] Adding optional first run activity to Launcher Change-Id: I146927d8a065f1cf5ef5cec41c8fb4f9ad09d25c --- src/com/android/launcher3/Alarm.java | 4 -- src/com/android/launcher3/Launcher.java | 54 +++++++++++++++---- .../android/launcher3/OnAlarmListener.java | 5 ++ 3 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 src/com/android/launcher3/OnAlarmListener.java diff --git a/src/com/android/launcher3/Alarm.java b/src/com/android/launcher3/Alarm.java index 91f9bd0913..e9f1fd963a 100644 --- a/src/com/android/launcher3/Alarm.java +++ b/src/com/android/launcher3/Alarm.java @@ -78,7 +78,3 @@ public class Alarm implements Runnable{ return mAlarmPending; } } - -interface OnAlarmListener { - public void onAlarm(Alarm alarm); -} diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c05769cfa2..269f53baaa 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -187,6 +187,9 @@ public class Launcher extends Activity // Type: int[] private static final String RUNTIME_STATE_VIEW_IDS = "launcher.view_ids"; + + static final String FIRST_RUN_ACTIVITY_DISPLAYED = "launcher.first_run_activity_displayed"; + private static final String TOOLBAR_ICON_METADATA_NAME = "com.android.launcher.toolbar_icon"; private static final String TOOLBAR_SEARCH_ICON_METADATA_NAME = "com.android.launcher.toolbar_search_icon"; @@ -476,6 +479,7 @@ public class Launcher extends Activity // On large interfaces, we want the screen to auto-rotate based on the current orientation unlockScreenOrientation(true); + showFirstRunActivity(); showFirstRunCling(); } @@ -497,6 +501,21 @@ public class Launcher extends Activity protected void addCustomContentToLeft() { } + /** + * To be overridden by subclasses to indicate that there is an activity to launch + * before showing the standard launcher experience. + */ + protected boolean hasFirstRunActivity() { + return false; + } + + /** + * To be overridden by subclasses to launch any first run activity + */ + protected Intent getFirstRunActivity() { + return null; + } + /** * Invoked by subclasses to signal a change to the {@link #addCustomContentToLeft} value to * ensure the custom content page is added or removed if necessary. @@ -4206,6 +4225,10 @@ public class Launcher extends Activity } } + private boolean shouldRunFirstRunActivity() { + return !ActivityManager.isRunningInTestHarness(); + } + /* Cling related */ private boolean isClingsEnabled() { if (DISABLE_CLINGS) { @@ -4274,15 +4297,9 @@ public class Launcher extends Activity final Runnable cleanUpClingCb = new Runnable() { public void run() { cling.cleanup(); - // We should update the shared preferences on a background thread - new AsyncTask() { - public Void doInBackground(Void ... args) { - SharedPreferences.Editor editor = mSharedPrefs.edit(); - editor.putBoolean(flag, true); - editor.commit(); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null); + SharedPreferences.Editor editor = mSharedPrefs.edit(); + editor.putBoolean(flag, true); + editor.apply(); if (postAnimationCb != null) { postAnimationCb.run(); } @@ -4379,10 +4396,29 @@ public class Launcher extends Activity } } + public void showFirstRunActivity() { + if (shouldRunFirstRunActivity() && hasFirstRunActivity() + && !mSharedPrefs.getBoolean(FIRST_RUN_ACTIVITY_DISPLAYED, false)) { + Intent firstRunIntent = getFirstRunActivity(); + if (firstRunIntent != null) { + startActivity(firstRunIntent); + markFirstRunActivityShown(); + } + } + } + + private void markFirstRunActivityShown() { + SharedPreferences.Editor editor = mSharedPrefs.edit(); + editor.putBoolean(FIRST_RUN_ACTIVITY_DISPLAYED, true); + editor.apply(); + } + public void showFirstRunCling() { if (isClingsEnabled() && !mSharedPrefs.getBoolean(Cling.FIRST_RUN_CLING_DISMISSED_KEY, false) && !skipCustomClingIfNoAccounts() ) { + + // If we're not using the default workspace layout, replace workspace cling // with a custom workspace cling (usually specified in an overlay) // For now, only do this on tablets diff --git a/src/com/android/launcher3/OnAlarmListener.java b/src/com/android/launcher3/OnAlarmListener.java new file mode 100644 index 0000000000..b5ef83e839 --- /dev/null +++ b/src/com/android/launcher3/OnAlarmListener.java @@ -0,0 +1,5 @@ +package com.android.launcher3; + +public interface OnAlarmListener { + public void onAlarm(Alarm alarm); +} From 16f3ea870aac47292cd6cbe1a4b4343173097aa9 Mon Sep 17 00:00:00 2001 From: Nilesh Agrawal Date: Thu, 9 Jan 2014 17:14:01 -0800 Subject: [PATCH 098/147] Allow DISABLE_ALL_APPS to be set using a system property. - Moving the property to LauncherAppState - The property is only read on dogfood builds. The property can be set using setprop or /data/local.prop Change-Id: I14c7354efb12edb93f97e81687a6f920cc634e9a --- res/values/config.xml | 3 ++ .../launcher3/AppsCustomizePagedView.java | 14 ++++---- src/com/android/launcher3/BuildInfo.java | 32 +++++++++++++++++++ .../android/launcher3/DeleteDropTarget.java | 10 +++--- src/com/android/launcher3/DeviceProfile.java | 2 +- src/com/android/launcher3/DynamicGrid.java | 2 +- src/com/android/launcher3/Folder.java | 4 +-- src/com/android/launcher3/Hotseat.java | 8 ++--- .../launcher3/InstallShortcutReceiver.java | 2 +- src/com/android/launcher3/Launcher.java | 13 ++++---- .../android/launcher3/LauncherAppState.java | 10 +++++- src/com/android/launcher3/LauncherModel.java | 4 +-- .../android/launcher3/LauncherProvider.java | 2 +- 13 files changed, 74 insertions(+), 32 deletions(-) create mode 100644 src/com/android/launcher3/BuildInfo.java diff --git a/res/values/config.xml b/res/values/config.xml index 2a08216624..b512ffe67b 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -94,4 +94,7 @@ filter the activities shown in the launcher. Can be empty. --> + + diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index 2865bc5d5c..37cdb9e137 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -199,8 +199,6 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen private AccelerateInterpolator mAlphaInterpolator = new AccelerateInterpolator(0.9f); private DecelerateInterpolator mLeftScreenAlphaInterpolator = new DecelerateInterpolator(4); - public static boolean DISABLE_ALL_APPS = false; - // Previews & outlines ArrayList mRunningTasks; private static final int sPageSleepDelay = 200; @@ -427,7 +425,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); if (!isDataReady()) { - if ((DISABLE_ALL_APPS || !mApps.isEmpty()) && !mWidgets.isEmpty()) { + if ((LauncherAppState.isDisableAllApps() || !mApps.isEmpty()) && !mWidgets.isEmpty()) { setDataIsReady(); setMeasuredDimension(width, height); onDataReady(width, height); @@ -1558,7 +1556,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } public void setApps(ArrayList list) { - if (!DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { mApps = list; Collections.sort(mApps, LauncherModel.getAppNameComparator()); updatePageCountsAndInvalidateData(); @@ -1576,7 +1574,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } } public void addApps(ArrayList list) { - if (!DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { addAppsWithoutInvalidate(list); updatePageCountsAndInvalidateData(); } @@ -1604,7 +1602,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } } public void removeApps(ArrayList appInfos) { - if (!DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { removeAppsWithoutInvalidate(appInfos); updatePageCountsAndInvalidateData(); } @@ -1613,7 +1611,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen // We remove and re-add the updated applications list because it's properties may have // changed (ie. the title), and this will ensure that the items will be in their proper // place in the list. - if (!DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { removeAppsWithoutInvalidate(list); addAppsWithoutInvalidate(list); updatePageCountsAndInvalidateData(); @@ -1727,4 +1725,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/BuildInfo.java b/src/com/android/launcher3/BuildInfo.java new file mode 100644 index 0000000000..b49ee0d9b8 --- /dev/null +++ b/src/com/android/launcher3/BuildInfo.java @@ -0,0 +1,32 @@ +package com.android.launcher3; + +import android.text.TextUtils; +import android.util.Log; + +public class BuildInfo { + private static final boolean DBG = false; + private static final String TAG = "BuildInfo"; + + public boolean isDogfoodBuild() { + return false; + } + + public static BuildInfo loadByName(String className) { + if (TextUtils.isEmpty(className)) return new BuildInfo(); + + if (DBG) Log.d(TAG, "Loading BuildInfo: " + className); + try { + Class cls = Class.forName(className); + return (BuildInfo) cls.newInstance(); + } catch (ClassNotFoundException e) { + Log.e(TAG, "Bad BuildInfo class", e); + } catch (InstantiationException e) { + Log.e(TAG, "Bad BuildInfo class", e); + } catch (IllegalAccessException e) { + Log.e(TAG, "Bad BuildInfo class", e); + } catch (ClassCastException e) { + Log.e(TAG, "Bad BuildInfo class", e); + } + return new BuildInfo(); + } +} diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java index c76425a5ed..75d906bc20 100644 --- a/src/com/android/launcher3/DeleteDropTarget.java +++ b/src/com/android/launcher3/DeleteDropTarget.java @@ -146,12 +146,12 @@ public class DeleteDropTarget extends ButtonDropTarget { return true; } - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && item.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) { return true; } - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION && item instanceof AppInfo) { AppInfo appInfo = (AppInfo) info; @@ -160,7 +160,7 @@ public class DeleteDropTarget extends ButtonDropTarget { if (item.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION && item instanceof ShortcutInfo) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { ShortcutInfo shortcutInfo = (ShortcutInfo) info; return (shortcutInfo.flags & AppInfo.DOWNLOADED_FLAG) != 0; } else { @@ -174,7 +174,7 @@ public class DeleteDropTarget extends ButtonDropTarget { @Override public void onDragStart(DragSource source, Object info, int dragAction) { boolean isVisible = true; - boolean useUninstallLabel = !AppsCustomizePagedView.DISABLE_ALL_APPS && + boolean useUninstallLabel = !LauncherAppState.isDisableAllApps() && isAllAppsApplication(source, info); boolean useDeleteLabel = !useUninstallLabel && source.supportsDeleteDropTarget(); @@ -264,7 +264,7 @@ public class DeleteDropTarget extends ButtonDropTarget { } private boolean isUninstallFromWorkspace(DragObject d) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS && isWorkspaceOrFolderApplication(d)) { + if (LauncherAppState.isDisableAllApps() && isWorkspaceOrFolderApplication(d)) { ShortcutInfo shortcut = (ShortcutInfo) d.dragInfo; // Only allow manifest shortcuts to initiate an un-install. return !InstallShortcutReceiver.isValidShortcutLaunchIntent(shortcut.intent); diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 67b0933c9a..a236b84db8 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -126,7 +126,7 @@ public class DeviceProfile { DeviceProfile(String n, float w, float h, float r, float c, float is, float its, float hs, float his) { // Ensure that we have an odd number of hotseat items (since we need to place all apps) - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && hs % 2 == 0) { + if (!LauncherAppState.isDisableAllApps() && hs % 2 == 0) { throw new RuntimeException("All Device Profiles must have an odd number of hotseat spaces"); } diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java index 22928ccf3a..3aced1faea 100644 --- a/src/com/android/launcher3/DynamicGrid.java +++ b/src/com/android/launcher3/DynamicGrid.java @@ -56,7 +56,7 @@ public class DynamicGrid { DisplayMetrics dm = resources.getDisplayMetrics(); ArrayList deviceProfiles = new ArrayList(); - boolean hasAA = !AppsCustomizePagedView.DISABLE_ALL_APPS; + boolean hasAA = !LauncherAppState.isDisableAllApps(); DEFAULT_ICON_SIZE_PX = pxFromDp(DEFAULT_ICON_SIZE_DP, dm); // Our phone profiles include the bar sizes in each orientation deviceProfiles.add(new DeviceProfile("Super Short Stubby", diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 758ee5baba..a98d121a6c 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -146,7 +146,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList Resources res = getResources(); mMaxCountX = (int) grid.numColumns; // Allow scrolling folders when DISABLE_ALL_APPS is true. - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { mMaxCountY = mMaxNumItems = Integer.MAX_VALUE; } else { mMaxCountY = (int) grid.numRows; @@ -1018,7 +1018,7 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList int contentAreaHeightSpec = MeasureSpec.makeMeasureSpec(getContentAreaHeight(), MeasureSpec.EXACTLY); - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { // Don't cap the height of the content to allow scrolling. mContent.setFixedSize(getContentAreaWidth(), mContent.getDesiredHeight()); } else { diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 094e188c77..59d60e3812 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -95,7 +95,7 @@ public class Hotseat extends FrameLayout { return hasVerticalHotseat() ? (mContent.getCountY() - (rank + 1)) : 0; } public boolean isAllAppsButtonRank(int rank) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { return false; } else { return rank == mAllAppsButtonRank; @@ -142,7 +142,7 @@ public class Hotseat extends FrameLayout { void resetLayout() { mContent.removeAllViewsInLayout(); - if (!AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { // Add the Apps button Context context = getContext(); @@ -189,7 +189,7 @@ public class Hotseat extends FrameLayout { void addAllAppsFolder(IconCache iconCache, ArrayList allApps, ArrayList onWorkspace, Launcher launcher, Workspace workspace) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { FolderInfo fi = new FolderInfo(); fi.cellX = getCellXFromOrder(mAllAppsButtonRank); @@ -219,7 +219,7 @@ public class Hotseat extends FrameLayout { } void addAppsToAllAppsFolder(ArrayList apps) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { View v = mContent.getChildAt(getCellXFromOrder(mAllAppsButtonRank), getCellYFromOrder(mAllAppsButtonRank)); FolderIcon fi = null; diff --git a/src/com/android/launcher3/InstallShortcutReceiver.java b/src/com/android/launcher3/InstallShortcutReceiver.java index 1ff94720ba..7ab4e0477c 100644 --- a/src/com/android/launcher3/InstallShortcutReceiver.java +++ b/src/com/android/launcher3/InstallShortcutReceiver.java @@ -272,7 +272,7 @@ public class InstallShortcutReceiver extends BroadcastReceiver { final Intent intent = pendingInfo.launchIntent; final String name = pendingInfo.name; - if (AppsCustomizePagedView.DISABLE_ALL_APPS && !isValidShortcutLaunchIntent(intent)) { + if (LauncherAppState.isDisableAllApps() && !isValidShortcutLaunchIntent(intent)) { if (DBG) Log.d(TAG, "Ignoring shortcut with launchIntent:" + intent); continue; } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index c05769cfa2..8ef28de711 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -155,6 +155,7 @@ public class Launcher extends Activity // adb shell setprop log.tag.PROPERTY_NAME [VERBOSE | SUPPRESS] static final String FORCE_ENABLE_ROTATION_PROPERTY = "launcher_force_rotate"; static final String DUMP_STATE_PROPERTY = "launcher_dump_state"; + static final String DISABLE_ALL_APPS_PROPERTY = "launcher_noallapps"; // The Intent extra that defines whether to ignore the launch animation static final String INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION = @@ -365,7 +366,7 @@ public class Launcher extends Activity private Stats mStats; - private static boolean isPropertyEnabled(String propertyName) { + static boolean isPropertyEnabled(String propertyName) { return Log.isLoggable(propertyName, Log.VERBOSE); } @@ -2906,7 +2907,7 @@ public class Launcher extends Activity // Shrink workspaces away if going to AppsCustomize from workspace Animator workspaceAnim = mWorkspace.getChangeStateAnimation(Workspace.State.SMALL, animated); - if (!AppsCustomizePagedView.DISABLE_ALL_APPS + if (!LauncherAppState.isDisableAllApps() || contentType == AppsCustomizePagedView.ContentType.Widgets) { // Set the content type for the all apps/widgets space mAppsCustomizeTabHost.setContentTypeImmediate(contentType); @@ -3777,7 +3778,7 @@ public class Launcher extends Activity // Remove the extra empty screen mWorkspace.removeExtraEmptyScreen(false, null); - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && addedApps != null && mAppsCustomizeContent != null) { mAppsCustomizeContent.addApps(addedApps); } @@ -4044,7 +4045,7 @@ public class Launcher extends Activity * Implementation of the method from LauncherModel.Callbacks. */ public void bindAllApplications(final ArrayList apps) { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { if (mIntentsOnWorkspaceFromUpgradePath != null) { if (LauncherModel.UPGRADE_USE_MORE_APPS_FOLDER) { getHotseat().addAllAppsFolder(mIconCache, apps, @@ -4084,7 +4085,7 @@ public class Launcher extends Activity mWorkspace.updateShortcuts(apps); } - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && mAppsCustomizeContent != null) { mAppsCustomizeContent.updateApps(apps); } @@ -4121,7 +4122,7 @@ public class Launcher extends Activity mDragController.onAppsRemoved(packageNames, appInfos); // Update AllApps - if (!AppsCustomizePagedView.DISABLE_ALL_APPS && + if (!LauncherAppState.isDisableAllApps() && mAppsCustomizeContent != null) { mAppsCustomizeContent.removeApps(appInfos); } diff --git a/src/com/android/launcher3/LauncherAppState.java b/src/com/android/launcher3/LauncherAppState.java index 84a1d04118..5e41fcad05 100644 --- a/src/com/android/launcher3/LauncherAppState.java +++ b/src/com/android/launcher3/LauncherAppState.java @@ -30,9 +30,10 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { private static final String TAG = "LauncherAppState"; private static final String SHARED_PREFERENCES_KEY = "com.android.launcher3.prefs"; + private final AppFilter mAppFilter; + private final BuildInfo mBuildInfo; private LauncherModel mModel; private IconCache mIconCache; - private AppFilter mAppFilter; private WidgetPreviewLoader.CacheDb mWidgetPreviewCacheDb; private boolean mIsScreenLarge; private float mScreenDensity; @@ -87,6 +88,7 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { mIconCache = new IconCache(sContext); mAppFilter = AppFilter.loadByName(sContext.getString(R.string.app_filter_class)); + mBuildInfo = BuildInfo.loadByName(sContext.getString(R.string.build_info_class)); mModel = new LauncherModel(this, mIconCache, mAppFilter); // Register intent receivers @@ -230,4 +232,10 @@ public class LauncherAppState implements DeviceProfile.DeviceProfileCallbacks { public void onAvailableSizeChanged(DeviceProfile grid) { Utilities.setIconSize(grid.iconSizePx); } + + public static boolean isDisableAllApps() { + // Returns false on non-dogfood builds. + return getInstance().mBuildInfo.isDogfoodBuild() && + Launcher.isPropertyEnabled(Launcher.DISABLE_ALL_APPS_PROPERTY); + } } diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java index b2cfb2456a..0c716a1f08 100644 --- a/src/com/android/launcher3/LauncherModel.java +++ b/src/com/android/launcher3/LauncherModel.java @@ -1466,7 +1466,7 @@ public class LauncherModel extends BroadcastReceiver { sBgDbIconCache.clear(); } - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { // Ensure that all the applications that are in the system are // represented on the home screen. if (!UPGRADE_USE_MORE_APPS_FOLDER || !isUpgrade) { @@ -2564,7 +2564,7 @@ public class LauncherModel extends BroadcastReceiver { if (added != null) { // Ensure that we add all the workspace applications to the db Callbacks cb = mCallbacks != null ? mCallbacks.get() : null; - if (!AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (!LauncherAppState.isDisableAllApps()) { addAndBindAddedApps(context, new ArrayList(), cb, added); } else { final ArrayList addedInfos = new ArrayList(added); diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java index 28efd01487..1fb58cc991 100644 --- a/src/com/android/launcher3/LauncherProvider.java +++ b/src/com/android/launcher3/LauncherProvider.java @@ -288,7 +288,7 @@ public class LauncherProvider extends ContentProvider { } private static int getDefaultWorkspaceResourceId() { - if (AppsCustomizePagedView.DISABLE_ALL_APPS) { + if (LauncherAppState.isDisableAllApps()) { return R.xml.default_workspace_no_all_apps; } else { return R.xml.default_workspace; From 0eb687fdc431e7eae4e8f2f4d5dd3a6e48779008 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Fri, 10 Jan 2014 13:24:55 -0500 Subject: [PATCH 099/147] Quick patch for b/12446428. Bug: 12446428 Change-Id: I5b9472e55a8919f5640c6e97fede9b5637819be0 --- src/com/android/launcher3/Folder.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/Folder.java b/src/com/android/launcher3/Folder.java index 758ee5baba..a9a161ab80 100644 --- a/src/com/android/launcher3/Folder.java +++ b/src/com/android/launcher3/Folder.java @@ -1107,7 +1107,10 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList if (getItemCount() <= 1) { // Remove the folder LauncherModel.deleteItemFromDatabase(mLauncher, mInfo); - cellLayout.removeView(mFolderIcon); + if (cellLayout != null) { + // b/12446428 -- sometimes the cell layout has already gone away? + cellLayout.removeView(mFolderIcon); + } if (mFolderIcon instanceof DropTarget) { mDragController.removeDropTarget((DropTarget) mFolderIcon); } From d502404a44fb7c4ea739622d7f8bdd2a764d97a1 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Thu, 9 Jan 2014 15:01:33 -0500 Subject: [PATCH 100/147] New launcher2 icon migration algorithm. The user will be able to request "icon migration", which is not a direct mapping of the old workspace, but rather follows this heuristic for bringing the user's favorite icons (by dint of their existence on the workspace) into Launcher3: Workspace shortcuts are placed in lexicographic order on the workspace starting at screen 0 (leaving the bottom row of screen 0 empty to make sure there's room to move things around). Folders are preserved and their contents sorted. Duplicate icons (that is, shortcuts with the same intent, pursuant to some cleanups) are removed. Hotseat icons are migrated in their original place, unless their new location is not accommodated by the hotseat (i.e. the L3 hotseat is too small on this device), in which case they're treated like any other shortcut and tossed into the workspace. To test, turn on Launcher.ENABLE_DEBUG_INTENTS and then: $ adb shell am broadcast -a com.android.launcher3.action.DELETE_DATABASE $ adb shell am broadcast -a com.android.launcher3.action.MIGRATE_DATABASE Bug: 12416411 Change-Id: Ia5c56f36c11455867ea20a39f70210f595020a87 --- AndroidManifest.xml | 1 + src/com/android/launcher3/Launcher.java | 20 ++ src/com/android/launcher3/LauncherModel.java | 32 ++- .../android/launcher3/LauncherProvider.java | 224 +++++++++++++++++- 4 files changed, 271 insertions(+), 6 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4e27e6f27c..36fa4c190a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -20,6 +20,7 @@ + 0) { + final int idIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites._ID); + final int intentIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.INTENT); + final int titleIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.TITLE); + final int iconTypeIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ICON_TYPE); + final int iconIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ICON); + final int iconPackageIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ICON_PACKAGE); + final int iconResourceIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ICON_RESOURCE); + final int containerIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.CONTAINER); + final int itemTypeIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ITEM_TYPE); + final int screenIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.SCREEN); + final int cellXIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.CELLX); + final int cellYIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.CELLY); + final int uriIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.URI); + final int displayModeIndex + = c.getColumnIndexOrThrow(LauncherSettings.Favorites.DISPLAY_MODE); + + int i = 0; + int curX = 0; + int curY = 0; + + final LauncherAppState app = LauncherAppState.getInstance(); + final DeviceProfile grid = app.getDynamicGrid().getDeviceProfile(); + final int width = (int) grid.numColumns; + final int height = (int) grid.numRows; + final int hotseatWidth = (int) grid.numHotseatIcons; + + final HashSet seenIntents = new HashSet(c.getCount()); + + final ContentValues[] rows = new ContentValues[c.getCount()]; + + while (c.moveToNext()) { + final int itemType = c.getInt(itemTypeIndex); + if (itemType != Favorites.ITEM_TYPE_APPLICATION + && itemType != Favorites.ITEM_TYPE_SHORTCUT + && itemType != Favorites.ITEM_TYPE_FOLDER) { + continue; + } + + final int cellX = c.getInt(cellXIndex); + final int cellY = c.getInt(cellYIndex); + final int screen = c.getInt(screenIndex); + int container = c.getInt(containerIndex); + final String intentStr = c.getString(intentIndex); + Launcher.addDumpLog(TAG, "migrating \"" + + c.getString(titleIndex) + "\": " + intentStr, true); + + if (itemType != Favorites.ITEM_TYPE_FOLDER) { + 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); + continue; + } + } + } + + ContentValues values = new ContentValues(c.getColumnCount()); + values.put(LauncherSettings.Favorites._ID, c.getInt(idIndex)); + values.put(LauncherSettings.Favorites.INTENT, intentStr); + values.put(LauncherSettings.Favorites.TITLE, c.getString(titleIndex)); + values.put(LauncherSettings.Favorites.ICON_TYPE, + c.getInt(iconTypeIndex)); + values.put(LauncherSettings.Favorites.ICON, c.getBlob(iconIndex)); + values.put(LauncherSettings.Favorites.ICON_PACKAGE, + c.getString(iconPackageIndex)); + values.put(LauncherSettings.Favorites.ICON_RESOURCE, + c.getString(iconResourceIndex)); + values.put(LauncherSettings.Favorites.ITEM_TYPE, itemType); + values.put(LauncherSettings.Favorites.APPWIDGET_ID, -1); + values.put(LauncherSettings.Favorites.URI, c.getString(uriIndex)); + values.put(LauncherSettings.Favorites.DISPLAY_MODE, + c.getInt(displayModeIndex)); + + if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT + && screen >= hotseatWidth) { + // no room for you in the hotseat? it's off to the desktop with you + container = Favorites.CONTAINER_DESKTOP; + } + + if (container != LauncherSettings.Favorites.CONTAINER_DESKTOP) { + // In a folder or in the hotseat, preserve position + values.put(LauncherSettings.Favorites.SCREEN, screen); + 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; + } + } + + values.put(LauncherSettings.Favorites.CONTAINER, container); + + rows[i++] = values; + } + + if (i > 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]) + < 0) { + return; + } else { + count++; + } + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + + db.beginTransaction(); + try { + for (i=0; i<=curScreen; i++) { + final ContentValues values = new ContentValues(); + values.put(LauncherSettings.WorkspaceScreens._ID, i); + values.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, i); + if (dbInsertAndCheck(this, db, TABLE_WORKSPACE_SCREENS, null, values) + < 0) { + return; + } + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + } finally { + c.close(); + } + } + + Launcher.addDumpLog(TAG, "migrated " + count + " icons from Launcher2 into " + + (curScreen+1) + " screens", true); + + // ensure that new screens are created to hold these icons + setFlagJustLoadedOldDb(); + + // Update max IDs; very important since we just grabbed IDs from another database + mMaxItemId = initializeMaxItemId(db); + mMaxScreenId = initializeMaxScreenId(db); + if (LOGD) Log.d(TAG, "mMaxItemId: " + mMaxItemId + " mMaxScreenId: " + mMaxScreenId); + } } /** From a694524047fda0a51dede4eefb1201a598d2d3a7 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 8 Jan 2014 14:04:34 -0800 Subject: [PATCH 101/147] Adding migration Clings. (Bug 11973614) - Refactoring Launcher cling code out to LauncherClings. Change-Id: Iff4f84f5b8bfeb69b1be0b4802022c3eb20b6f2c --- proguard.flags | 3 + res/layout-port/launcher.xml | 10 + res/layout-port/migration_cling.xml | 93 ++++ res/layout-port/migration_workspace_cling.xml | 70 +++ res/values/strings.xml | 8 + .../launcher3/AppsCustomizeTabHost.java | 2 +- src/com/android/launcher3/Cling.java | 79 +++- src/com/android/launcher3/DeviceProfile.java | 8 + src/com/android/launcher3/DragLayer.java | 3 +- src/com/android/launcher3/Folder.java | 4 +- src/com/android/launcher3/Launcher.java | 419 ++++------------- src/com/android/launcher3/LauncherClings.java | 444 ++++++++++++++++++ src/com/android/launcher3/LauncherModel.java | 13 +- src/com/android/launcher3/Workspace.java | 4 +- 14 files changed, 812 insertions(+), 348 deletions(-) create mode 100644 res/layout-port/migration_cling.xml create mode 100644 res/layout-port/migration_workspace_cling.xml create mode 100644 src/com/android/launcher3/LauncherClings.java diff --git a/proguard.flags b/proguard.flags index 9b59b217ec..a922e919d2 100644 --- a/proguard.flags +++ b/proguard.flags @@ -8,6 +8,9 @@ public void onClickAllAppsButton(android.view.View); public void onClickAppMarketButton(android.view.View); public void dismissFirstRunCling(android.view.View); + public void dismissMigrationClingCopyApps(android.view.View); + public void dismissMigrationClingUseDefault(android.view.View); + public void dismissMigrationWorkspaceCling(android.view.View); public void dismissWorkspaceCling(android.view.View); public void dismissAllAppsCling(android.view.View); } diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml index 2b3cf81a48..74005348cf 100644 --- a/res/layout-port/launcher.xml +++ b/res/layout-port/launcher.xml @@ -73,6 +73,16 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" /> + + + + + + + + + + + + + + + + + +