OSDN Git Service

If 3 screens are good 5 will be better
authorMike Cleron <mcleron@google.com>
Fri, 6 Nov 2009 01:17:42 +0000 (17:17 -0800)
committerMike Cleron <mcleron@google.com>
Fri, 6 Nov 2009 01:17:50 +0000 (17:17 -0800)
res/layout-land/launcher.xml
res/layout-port/launcher.xml
res/xml/default_workspace.xml
src/com/android/launcher2/Launcher.java
src/com/android/launcher2/LauncherProvider.java
src/com/android/launcher2/Workspace.java

index 4f2709f..5ec7c6c 100644 (file)
         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>
 
index 89b3b43..d3069a1 100644 (file)
         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
index 7937c3b..acb9ba9 100644 (file)
 <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" />
 
index 1574be8..36d7da1 100644 (file)
@@ -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;
 
index 9226c22..942b4be 100644 (file)
@@ -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);
index a0391d3..a14a11f 100644 (file)
@@ -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();
     }