diff options
-rw-r--r-- | res/layout-land/launcher.xml | 7 | ||||
-rw-r--r-- | res/layout-port/launcher.xml | 9 | ||||
-rw-r--r-- | res/xml/default_workspace.xml | 14 | ||||
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 6 | ||||
-rw-r--r-- | src/com/android/launcher2/LauncherProvider.java | 17 | ||||
-rw-r--r-- | src/com/android/launcher2/Workspace.java | 44 |
6 files changed, 73 insertions, 24 deletions
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml index 4f2709f6a..5ec7c6c17 100644 --- a/res/layout-land/launcher.xml +++ b/res/layout-land/launcher.xml @@ -39,12 +39,15 @@ android:id="@+id/workspace" android:layout_width="fill_parent" android:layout_height="fill_parent" - - launcher:defaultScreen="1"> + android:scrollbars="horizontal" + android:fadeScrollbars="true" + launcher:defaultScreen="2"> <include android:id="@+id/cell1" layout="@layout/workspace_screen" /> <include android:id="@+id/cell2" layout="@layout/workspace_screen" /> <include android:id="@+id/cell3" layout="@layout/workspace_screen" /> + <include android:id="@+id/cell4" layout="@layout/workspace_screen" /> + <include android:id="@+id/cell5" layout="@layout/workspace_screen" /> </com.android.launcher2.Workspace> diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml index 89b3b4306..d3069a178 100644 --- a/res/layout-port/launcher.xml +++ b/res/layout-port/launcher.xml @@ -40,13 +40,16 @@ android:id="@+id/workspace" android:layout_width="fill_parent" android:layout_height="fill_parent" - - launcher:defaultScreen="1"> + android:scrollbars="horizontal" + android:fadeScrollbars="true" + launcher:defaultScreen="2"> <include android:id="@+id/cell1" layout="@layout/workspace_screen" /> <include android:id="@+id/cell2" layout="@layout/workspace_screen" /> <include android:id="@+id/cell3" layout="@layout/workspace_screen" /> - + <include android:id="@+id/cell4" layout="@layout/workspace_screen" /> + <include android:id="@+id/cell5" layout="@layout/workspace_screen" /> + </com.android.launcher2.Workspace> <com.android.launcher2.HandleView diff --git a/res/xml/default_workspace.xml b/res/xml/default_workspace.xml index 7937c3bd9..acb9ba933 100644 --- a/res/xml/default_workspace.xml +++ b/res/xml/default_workspace.xml @@ -17,49 +17,49 @@ <favorites xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher2"> <search - launcher:screen="1" + launcher:screen="2" launcher:x="0" launcher:y="0" /> <favorite launcher:packageName="com.android.contacts" launcher:className="com.android.contacts.DialtactsActivity" - launcher:screen="1" + launcher:screen="2" launcher:x="0" launcher:y="3" /> <favorite launcher:packageName="com.android.contacts" launcher:className="com.android.contacts.DialtactsContactsEntryActivity" - launcher:screen="1" + launcher:screen="2" launcher:x="1" launcher:y="3" /> <favorite launcher:packageName="com.android.browser" launcher:className="com.android.browser.BrowserActivity" - launcher:screen="1" + launcher:screen="2" launcher:x="2" launcher:y="3" /> <favorite launcher:packageName="com.google.android.apps.maps" launcher:className="com.google.android.maps.MapsActivity" - launcher:screen="1" + launcher:screen="2" launcher:x="3" launcher:y="3" /> <favorite launcher:packageName="com.android.mms" launcher:className="com.android.mms.ui.ConversationList" - launcher:screen="1" + launcher:screen="2" launcher:x="0" launcher:y="2" /> <favorite launcher:packageName="com.android.vending" launcher:className="com.android.vending.AssetBrowserActivity" - launcher:screen="1" + launcher:screen="2" launcher:x="3" launcher:y="2" /> diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 1574be824..36d7da16e 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -108,8 +108,8 @@ public final class Launcher extends Activity static final String EXTRA_CUSTOM_WIDGET = "custom_widget"; static final String SEARCH_WIDGET = "search_widget"; - static final int SCREEN_COUNT = 3; - static final int DEFAULT_SCREN = 1; + static final int SCREEN_COUNT = 5; + static final int DEFAULT_SCREEN = 2; static final int NUMBER_CELLS_X = 4; static final int NUMBER_CELLS_Y = 4; @@ -148,7 +148,7 @@ public final class Launcher extends Activity static final int APPWIDGET_HOST_ID = 1024; private static final Object sLock = new Object(); - private static int sScreen = DEFAULT_SCREN; + private static int sScreen = DEFAULT_SCREEN; private LayoutInflater mInflater; diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java index 9226c2253..942b4beac 100644 --- a/src/com/android/launcher2/LauncherProvider.java +++ b/src/com/android/launcher2/LauncherProvider.java @@ -58,7 +58,7 @@ public class LauncherProvider extends ContentProvider { private static final String DATABASE_NAME = "launcher.db"; - private static final int DATABASE_VERSION = 4; + private static final int DATABASE_VERSION = 5; static final String AUTHORITY = "com.android.launcher2.settings"; @@ -393,6 +393,21 @@ public class LauncherProvider extends ContentProvider { } } + if (version < 5) { + // We went from 3 to 5 screens. Move everything 1 to the right + db.beginTransaction(); + try { + db.execSQL("UPDATE favorites SET screen=(screen + 1);"); + db.setTransactionSuccessful(); + version = 5; + } catch (SQLException ex) { + // Old version remains, which means we wipe old data + Log.e(LOG_TAG, ex.getMessage(), ex); + } finally { + db.endTransaction(); + } + } + if (version != DATABASE_VERSION) { Log.w(LOG_TAG, "Destroying all old data."); db.execSQL("DROP TABLE IF EXISTS " + TABLE_FAVORITES); diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index a0391d33e..a14a11f20 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -543,6 +543,14 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag if (restore) { canvas.restoreToCount(restoreCount); } + + onDrawScrollBars(canvas); + } + + @Override + protected int computeHorizontalScrollRange() { + final int count = getChildCount(); + return count == 0 ? getWidth() : (getChildAt(count - 1)).getRight(); } private float mScale = 1.0f; @@ -577,8 +585,11 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec); } + if (mFirstLayout) { + setHorizontalScrollBarEnabled(false); scrollTo(mCurrentScreen * width, 0); + setHorizontalScrollBarEnabled(true); updateWallpaperOffset(width * (getChildCount() - 1)); mFirstLayout = false; } @@ -725,7 +736,7 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag if (xMoved) { // Scroll if the user moved far enough along the X axis mTouchState = TOUCH_STATE_SCROLLING; - enableChildrenCache(); + enableChildrenCache(mCurrentScreen - 1, mCurrentScreen + 1); } // Either way, cancel any pending longpress if (mAllowLongPress) { @@ -781,9 +792,20 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag return mTouchState != TOUCH_STATE_REST; } - void enableChildrenCache() { + void enableChildrenCache(int fromScreen, int toScreen) { + if (fromScreen > toScreen) { + int temp = fromScreen; + fromScreen = toScreen; + toScreen = fromScreen; + } + final int count = getChildCount(); - for (int i = 0; i < count; i++) { + + fromScreen = Math.max(fromScreen, 0); + toScreen = Math.min(toScreen, count - 1); + + for (int i = fromScreen; i <= toScreen; i++) { + // Log.d("TAG", "enablingChildrenCache: " + i); final CellLayout layout = (CellLayout) getChildAt(i); layout.setChildrenDrawnWithCacheEnabled(true); layout.setChildrenDrawingCacheEnabled(true); @@ -852,6 +874,8 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag scrollBy(Math.min(availableToScroll, deltaX), 0); updateWallpaperOffset(); } + } else { + awakenScrollBars(); } } break; @@ -895,22 +919,26 @@ public class Workspace extends ViewGroup implements DropTarget, DragSource, Drag void snapToScreen(int whichScreen) { if (!mScroller.isFinished()) return; + whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1)); + clearVacantCache(); - enableChildrenCache(); + enableChildrenCache(mCurrentScreen, whichScreen); - whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1)); - boolean changingScreens = whichScreen != mCurrentScreen; + + final int screenDelta = Math.abs(whichScreen - mCurrentScreen); mNextScreen = whichScreen; View focusedChild = getFocusedChild(); - if (focusedChild != null && changingScreens && focusedChild == getChildAt(mCurrentScreen)) { + if (focusedChild != null && screenDelta != 0 && focusedChild == getChildAt(mCurrentScreen)) { focusedChild.clearFocus(); } final int newX = whichScreen * getWidth(); final int delta = newX - mScrollX; - mScroller.startScroll(mScrollX, 0, delta, 0, Math.abs(delta) * 2); + final int duration = screenDelta * 300; + awakenScrollBars(duration); + mScroller.startScroll(mScrollX, 0, delta, 0, duration); invalidate(); } |