diff options
Diffstat (limited to 'src/com/android/launcher3/Launcher.java')
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 127 |
1 files changed, 59 insertions, 68 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 0253103ea..305f249d9 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -295,7 +295,7 @@ public class Launcher extends Activity // Holds the page that we need to animate to, and the icon views that we need to animate up // when we scroll to that page on resume. - private int mNewShortcutAnimatePage = -1; + private long mNewShortcutAnimateScreenId = -1; private ArrayList<View> mNewShortcutAnimateViews = new ArrayList<View>(); private ImageView mFolderIconImageView; private Bitmap mFolderIconBitmap; @@ -324,7 +324,7 @@ public class Launcher extends Activity int requestCode; Intent intent; long container; - int screen; + long screenId; int cellX; int cellY; } @@ -592,20 +592,20 @@ public class Launcher extends Activity boolean result = false; switch (args.requestCode) { case REQUEST_PICK_APPLICATION: - completeAddApplication(args.intent, args.container, args.screen, args.cellX, + completeAddApplication(args.intent, args.container, args.screenId, args.cellX, args.cellY); break; case REQUEST_PICK_SHORTCUT: processShortcut(args.intent); break; case REQUEST_CREATE_SHORTCUT: - completeAddShortcut(args.intent, args.container, args.screen, args.cellX, + completeAddShortcut(args.intent, args.container, args.screenId, args.cellX, args.cellY); result = true; break; case REQUEST_CREATE_APPWIDGET: int appWidgetId = args.intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1); - completeAddAppWidget(appWidgetId, args.container, args.screen, null, null); + completeAddAppWidget(appWidgetId, args.container, args.screenId, null, null); result = true; break; case REQUEST_PICK_WALLPAPER: @@ -661,7 +661,7 @@ public class Launcher extends Activity args.requestCode = requestCode; args.intent = data; args.container = mPendingAddInfo.container; - args.screen = mPendingAddInfo.screen; + args.screenId = mPendingAddInfo.screenId; args.cellX = mPendingAddInfo.cellX; args.cellY = mPendingAddInfo.cellY; if (isWorkspaceLocked()) { @@ -678,7 +678,7 @@ public class Launcher extends Activity private void completeTwoStageWidgetDrop(final int resultCode, final int appWidgetId) { CellLayout cellLayout = - (CellLayout) mWorkspace.getChildAt(mPendingAddInfo.screen); + (CellLayout) mWorkspace.getScreenWithId(mPendingAddInfo.screenId); Runnable onCompleteRunnable = null; int animationType = 0; @@ -692,7 +692,7 @@ public class Launcher extends Activity @Override public void run() { completeAddAppWidget(appWidgetId, mPendingAddInfo.container, - mPendingAddInfo.screen, layout, null); + mPendingAddInfo.screenId, layout, null); exitSpringLoadedDragModeDelayed((resultCode != RESULT_CANCELED), false, null); } @@ -826,22 +826,7 @@ public class Launcher extends Activity // Add a fullscreen unpadded view to the workspace to the left all other screens. public void addCustomContentToLeft(View customContent) { - CellLayout customScreen = (CellLayout) - getLayoutInflater().inflate(R.layout.workspace_custom_content, null); - - int spanX = customScreen.getCountX(); - int spanY = customScreen.getCountY(); - - CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, spanX, spanY); - lp.canReorder = false; - - customScreen.addViewToCellLayout(customContent, 0, 0, lp, true); - - mWorkspace.addView(customScreen, 0); - - // Ensure that the current page and default page are maintained. - mWorkspace.incrementNumScreensToLeft(); - mWorkspace.setCurrentPage(mWorkspace.getCurrentPage() + 1); + mWorkspace.addCustomContentToLeft(customContent); } @Override @@ -955,11 +940,11 @@ public class Launcher extends Activity } final long pendingAddContainer = savedState.getLong(RUNTIME_STATE_PENDING_ADD_CONTAINER, -1); - final int pendingAddScreen = savedState.getInt(RUNTIME_STATE_PENDING_ADD_SCREEN, -1); + final long pendingAddScreen = savedState.getLong(RUNTIME_STATE_PENDING_ADD_SCREEN, -1); if (pendingAddContainer != ItemInfo.NO_ID && pendingAddScreen > -1) { mPendingAddInfo.container = pendingAddContainer; - mPendingAddInfo.screen = pendingAddScreen; + mPendingAddInfo.screenId = pendingAddScreen; mPendingAddInfo.cellX = savedState.getInt(RUNTIME_STATE_PENDING_ADD_CELL_X); mPendingAddInfo.cellY = savedState.getInt(RUNTIME_STATE_PENDING_ADD_CELL_Y); mPendingAddInfo.spanX = savedState.getInt(RUNTIME_STATE_PENDING_ADD_SPAN_X); @@ -969,7 +954,6 @@ public class Launcher extends Activity mRestoring = true; } - boolean renameFolder = savedState.getBoolean(RUNTIME_STATE_PENDING_FOLDER_RENAME, false); if (renameFolder) { long id = savedState.getLong(RUNTIME_STATE_PENDING_FOLDER_RENAME_ID); @@ -977,7 +961,6 @@ public class Launcher extends Activity mRestoring = true; } - // Restore the AppsCustomize tab if (mAppsCustomizeTabHost != null) { String curTab = savedState.getString("apps_customize_currentTab"); @@ -1086,9 +1069,9 @@ public class Launcher extends Activity * @param data The intent describing the application. * @param cellInfo The position on screen where to create the shortcut. */ - void completeAddApplication(Intent data, long container, int screen, int cellX, int cellY) { + void completeAddApplication(Intent data, long container, long screenId, int cellX, int cellY) { final int[] cellXY = mTmpAddItemCellCoordinates; - final CellLayout layout = getCellLayout(container, screen); + final CellLayout layout = getCellLayout(container, screenId); // First we check if we already know the exact location where we want to add this item. if (cellX >= 0 && cellY >= 0) { @@ -1105,7 +1088,7 @@ public class Launcher extends Activity info.setActivity(data.getComponent(), Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); info.container = ItemInfo.NO_ID; - mWorkspace.addApplicationShortcut(info, layout, container, screen, cellXY[0], cellXY[1], + mWorkspace.addApplicationShortcut(info, layout, container, screenId, cellXY[0], cellXY[1], isWorkspaceLocked(), cellX, cellY); } else { Log.e(TAG, "Couldn't find ActivityInfo for selected application: " + data); @@ -1118,11 +1101,11 @@ public class Launcher extends Activity * @param data The intent describing the shortcut. * @param cellInfo The position on screen where to create the shortcut. */ - private void completeAddShortcut(Intent data, long container, int screen, int cellX, + private void completeAddShortcut(Intent data, long container, long screenId, int cellX, int cellY) { int[] cellXY = mTmpAddItemCellCoordinates; int[] touchXY = mPendingAddInfo.dropPos; - CellLayout layout = getCellLayout(container, screen); + CellLayout layout = getCellLayout(container, screenId); boolean foundCellSpan = false; @@ -1162,11 +1145,10 @@ public class Launcher extends Activity return; } - int adjustedScreen = screen - getWorkspace().mNumPagesToLeft; - LauncherModel.addItemToDatabase(this, info, container, adjustedScreen, cellXY[0], cellXY[1], false); + LauncherModel.addItemToDatabase(this, info, container, screenId, cellXY[0], cellXY[1], false); if (!mRestoring) { - mWorkspace.addInScreen(view, container, screen, cellXY[0], cellXY[1], 1, 1, + mWorkspace.addInScreen(view, container, screenId, cellXY[0], cellXY[1], 1, 1, isWorkspaceLocked()); } } @@ -1204,14 +1186,14 @@ public class Launcher extends Activity * @param appWidgetId The app widget id * @param cellInfo The position on screen where to create the widget. */ - private void completeAddAppWidget(final int appWidgetId, long container, int screen, + private void completeAddAppWidget(final int appWidgetId, long container, long screenId, AppWidgetHostView hostView, AppWidgetProviderInfo appWidgetInfo) { if (appWidgetInfo == null) { appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId); } // Calculate the grid spans needed to fit this widget - CellLayout layout = getCellLayout(container, screen); + CellLayout layout = getCellLayout(container, screenId); int[] minSpanXY = getMinSpanForWidget(this, appWidgetInfo); int[] spanXY = getSpanForWidget(this, appWidgetInfo); @@ -1263,9 +1245,8 @@ public class Launcher extends Activity launcherInfo.minSpanX = mPendingAddInfo.minSpanX; launcherInfo.minSpanY = mPendingAddInfo.minSpanY; - int adjustedScreen = screen - getWorkspace().mNumPagesToLeft; LauncherModel.addItemToDatabase(this, launcherInfo, - container, adjustedScreen, cellXY[0], cellXY[1], false); + container, screenId, cellXY[0], cellXY[1], false); if (!mRestoring) { if (hostView == null) { @@ -1281,7 +1262,7 @@ public class Launcher extends Activity launcherInfo.hostView.setVisibility(View.VISIBLE); launcherInfo.notifyWidgetSizeChanged(this); - mWorkspace.addInScreen(launcherInfo.hostView, container, screen, cellXY[0], cellXY[1], + mWorkspace.addInScreen(launcherInfo.hostView, container, screenId, cellXY[0], cellXY[1], launcherInfo.spanX, launcherInfo.spanY, isWorkspaceLocked()); addWidgetToAutoAdvanceIfNeeded(launcherInfo.hostView, appWidgetInfo); @@ -1560,10 +1541,10 @@ public class Launcher extends Activity // this state is reflected. closeFolder(); - if (mPendingAddInfo.container != ItemInfo.NO_ID && mPendingAddInfo.screen > -1 && + if (mPendingAddInfo.container != ItemInfo.NO_ID && mPendingAddInfo.screenId > -1 && mWaitingForResult) { outState.putLong(RUNTIME_STATE_PENDING_ADD_CONTAINER, mPendingAddInfo.container); - outState.putInt(RUNTIME_STATE_PENDING_ADD_SCREEN, mPendingAddInfo.screen); + outState.putLong(RUNTIME_STATE_PENDING_ADD_SCREEN, mPendingAddInfo.screenId); outState.putInt(RUNTIME_STATE_PENDING_ADD_CELL_X, mPendingAddInfo.cellX); outState.putInt(RUNTIME_STATE_PENDING_ADD_CELL_Y, mPendingAddInfo.cellY); outState.putInt(RUNTIME_STATE_PENDING_ADD_SPAN_X, mPendingAddInfo.spanX); @@ -1789,7 +1770,7 @@ public class Launcher extends Activity private void resetAddInfo() { mPendingAddInfo.container = ItemInfo.NO_ID; - mPendingAddInfo.screen = -1; + mPendingAddInfo.screenId = -1; mPendingAddInfo.cellX = mPendingAddInfo.cellY = -1; mPendingAddInfo.spanX = mPendingAddInfo.spanY = -1; mPendingAddInfo.minSpanX = mPendingAddInfo.minSpanY = -1; @@ -1808,7 +1789,7 @@ public class Launcher extends Activity startActivityForResultSafely(intent, REQUEST_CREATE_APPWIDGET); } else { // Otherwise just add it - completeAddAppWidget(appWidgetId, info.container, info.screen, boundWidget, + completeAddAppWidget(appWidgetId, info.container, info.screenId, boundWidget, appWidgetInfo); // Exit spring loaded mode if necessary after adding the widget exitSpringLoadedDragModeDelayed(true, false, null); @@ -1819,15 +1800,15 @@ public class Launcher extends Activity * Process a shortcut drop. * * @param componentName The name of the component - * @param screen The screen where it should be added + * @param screenId The ID of the screen where it should be added * @param cell The cell it should be added to, optional * @param position The location on the screen where it was dropped, optional */ - void processShortcutFromDrop(ComponentName componentName, long container, int screen, + void processShortcutFromDrop(ComponentName componentName, long container, long screenId, int[] cell, int[] loc) { resetAddInfo(); mPendingAddInfo.container = container; - mPendingAddInfo.screen = screen; + mPendingAddInfo.screenId = screenId; mPendingAddInfo.dropPos = loc; if (cell != null) { @@ -1844,15 +1825,15 @@ public class Launcher extends Activity * Process a widget drop. * * @param info The PendingAppWidgetInfo of the widget being added. - * @param screen The screen where it should be added + * @param screenId The ID of the screen where it should be added * @param cell The cell it should be added to, optional * @param position The location on the screen where it was dropped, optional */ - void addAppWidgetFromDrop(PendingAddWidgetInfo info, long container, int screen, + void addAppWidgetFromDrop(PendingAddWidgetInfo info, long container, long screenId, int[] cell, int[] span, int[] loc) { resetAddInfo(); mPendingAddInfo.container = info.container = container; - mPendingAddInfo.screen = info.screen = screen; + mPendingAddInfo.screenId = info.screenId = screenId; mPendingAddInfo.dropPos = loc; mPendingAddInfo.minSpanX = info.minSpanX; mPendingAddInfo.minSpanY = info.minSpanY; @@ -1921,20 +1902,20 @@ public class Launcher extends Activity startActivityForResult(intent, REQUEST_PICK_WALLPAPER); } - FolderIcon addFolder(CellLayout layout, long container, final int screen, int cellX, + FolderIcon addFolder(CellLayout layout, long container, final long screenId, int cellX, int cellY) { final FolderInfo folderInfo = new FolderInfo(); folderInfo.title = getText(R.string.folder_name); // Update the model - LauncherModel.addItemToDatabase(Launcher.this, folderInfo, container, screen, cellX, cellY, + LauncherModel.addItemToDatabase(Launcher.this, folderInfo, container, screenId, cellX, cellY, false); sFolders.put(folderInfo.id, folderInfo); // Create the view FolderIcon newFolder = FolderIcon.fromXml(R.layout.folder_icon, this, layout, folderInfo, mIconCache); - mWorkspace.addInScreen(newFolder, container, screen, cellX, cellY, 1, 1, + mWorkspace.addInScreen(newFolder, container, screenId, cellX, cellY, 1, 1, isWorkspaceLocked()); return newFolder; } @@ -2231,7 +2212,7 @@ public class Launcher extends Activity // it is actually opened. There have been a few instances where this gets out of sync. if (info.opened && openFolder == null) { Log.d(TAG, "Folder info marked as open, but associated folder is not open. Screen: " - + info.screen + " (" + info.cellX + ", " + info.cellY + ")"); + + info.screenId + " (" + info.cellX + ", " + info.cellY + ")"); info.opened = false; } @@ -2469,7 +2450,7 @@ public class Launcher extends Activity /** * Returns the CellLayout of the specified container at the specified screen. */ - CellLayout getCellLayout(long container, int screen) { + CellLayout getCellLayout(long container, long screenId) { if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) { if (mHotseat != null) { return mHotseat.getLayout(); @@ -2477,7 +2458,7 @@ public class Launcher extends Activity return null; } } else { - return (CellLayout) mWorkspace.getChildAt(screen); + return (CellLayout) mWorkspace.getScreenWithId(screenId); } } @@ -3440,7 +3421,7 @@ public class Launcher extends Activity mOnResumeCallbacks.clear(); final Workspace workspace = mWorkspace; - mNewShortcutAnimatePage = -1; + mNewShortcutAnimateScreenId = -1; mNewShortcutAnimateViews.clear(); mWorkspace.clearDropTargets(); int count = workspace.getChildCount(); @@ -3455,6 +3436,15 @@ public class Launcher extends Activity } } + @Override + public void bindScreens(ArrayList<Long> orderedScreenIds) { + int count = orderedScreenIds.size(); + for (int i = 0; i < count; i++) { + mWorkspace.insertNewWorkspaceScreenOnBind(orderedScreenIds.get(i)); + } + mWorkspace.addExtraEmptyScreen(); + } + /** * Bind the items start-end from the list. * @@ -3489,8 +3479,9 @@ public class Launcher extends Activity ShortcutInfo info = (ShortcutInfo) item; String uri = info.intent.toUri(0).toString(); View shortcut = createShortcut(info); - workspace.addInScreen(shortcut, item.container, item.screen, item.cellX, - item.cellY, 1, 1, false); + + workspace.addInScreenFromBind(shortcut, item.container, item.screenId, item.cellX, + item.cellY, 1, 1); boolean animateIconUp = false; synchronized (newApps) { if (newApps.contains(uri)) { @@ -3502,7 +3493,7 @@ public class Launcher extends Activity shortcut.setAlpha(0f); shortcut.setScaleX(0f); shortcut.setScaleY(0f); - mNewShortcutAnimatePage = item.screen; + mNewShortcutAnimateScreenId = item.screenId; if (!mNewShortcutAnimateViews.contains(shortcut)) { mNewShortcutAnimateViews.add(shortcut); } @@ -3512,8 +3503,8 @@ public class Launcher extends Activity FolderIcon newFolder = FolderIcon.fromXml(R.layout.folder_icon, this, (ViewGroup) workspace.getChildAt(workspace.getCurrentPage()), (FolderInfo) item, mIconCache); - workspace.addInScreen(newFolder, item.container, item.screen, item.cellX, - item.cellY, 1, 1, false); + workspace.addInScreenFromBind(newFolder, item.container, item.screenId, item.cellX, + item.cellY, 1, 1); break; } } @@ -3567,7 +3558,7 @@ public class Launcher extends Activity item.hostView.setTag(item); item.onBindAppWidget(this); - workspace.addInScreen(item.hostView, item.container, item.screen, item.cellX, + workspace.addInScreen(item.hostView, item.container, item.screenId, item.cellX, item.cellY, item.spanX, item.spanY, false); addWidgetToAutoAdvanceIfNeeded(item.hostView, appWidgetInfo); @@ -3625,13 +3616,13 @@ public class Launcher extends Activity } }; - boolean willSnapPage = mNewShortcutAnimatePage > -1 && - mNewShortcutAnimatePage != mWorkspace.getCurrentPage(); + boolean willSnapPage = mNewShortcutAnimateScreenId > -1 && + mNewShortcutAnimateScreenId != mWorkspace.getCurrentPage(); if (canRunNewAppsAnimation()) { // If the user has not interacted recently, then either snap to the new page to show // the new-apps animation or just run them if they are to appear on the current page if (willSnapPage) { - mWorkspace.snapToPage(mNewShortcutAnimatePage, newAppsRunnable); + mWorkspace.snapToScreenId(mNewShortcutAnimateScreenId, newAppsRunnable); } else { runNewAppsAnimation(false); } @@ -3715,7 +3706,7 @@ public class Launcher extends Activity } // Clean up - mNewShortcutAnimatePage = -1; + mNewShortcutAnimateScreenId = -1; mNewShortcutAnimateViews.clear(); new Thread("clearNewAppsThread") { public void run() { |