diff options
-rw-r--r-- | res/layout-land/launcher.xml | 10 | ||||
-rw-r--r-- | res/layout-port/launcher.xml | 10 | ||||
-rw-r--r-- | res/layout-sw720dp/workspace.xml | 9 | ||||
-rw-r--r-- | res/values/attrs.xml | 2 | ||||
-rw-r--r-- | res/values/strings.xml | 4 | ||||
-rw-r--r-- | res/xml/preferences.xml | 13 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/InstallShortcutReceiver.java | 4 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/Launcher.java | 4 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/LauncherModel.java | 10 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/Workspace.java | 51 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java | 8 |
11 files changed, 70 insertions, 55 deletions
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml index 1e458e8..4b89ca3 100644 --- a/res/layout-land/launcher.xml +++ b/res/layout-land/launcher.xml @@ -32,19 +32,11 @@ android:paddingRight="@dimen/workspace_right_padding" android:paddingTop="@dimen/workspace_top_padding" android:paddingBottom="@dimen/workspace_bottom_padding" - launcher:defaultScreen="2" launcher:cellCountX="@integer/cell_count_x" launcher:cellCountY="@integer/cell_count_y" launcher:pageSpacing="@dimen/workspace_page_spacing" launcher:scrollIndicatorPaddingLeft="@dimen/qsb_bar_height" - launcher:scrollIndicatorPaddingRight="@dimen/button_bar_height"> - - <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.cyanogenmod.trebuchet.Workspace> + launcher:scrollIndicatorPaddingRight="@dimen/button_bar_height" /> <include android:id="@+id/qsb_divider" diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml index 6f79617..b4ec30c 100644 --- a/res/layout-port/launcher.xml +++ b/res/layout-port/launcher.xml @@ -49,19 +49,11 @@ android:paddingRight="@dimen/workspace_right_padding" android:paddingTop="@dimen/workspace_top_padding" android:paddingBottom="@dimen/workspace_bottom_padding" - launcher:defaultScreen="2" launcher:cellCountX="@integer/cell_count_x" launcher:cellCountY="@integer/cell_count_y" launcher:pageSpacing="@dimen/workspace_page_spacing" launcher:scrollIndicatorPaddingLeft="@dimen/workspace_divider_padding_left" - launcher:scrollIndicatorPaddingRight="@dimen/workspace_divider_padding_right"> - - <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.cyanogenmod.trebuchet.Workspace> + launcher:scrollIndicatorPaddingRight="@dimen/workspace_divider_padding_right" /> <include layout="@layout/hotseat" android:id="@+id/hotseat" diff --git a/res/layout-sw720dp/workspace.xml b/res/layout-sw720dp/workspace.xml index 352c4d7..db2c3a6 100644 --- a/res/layout-sw720dp/workspace.xml +++ b/res/layout-sw720dp/workspace.xml @@ -23,11 +23,4 @@ android:paddingRight="@dimen/workspace_right_padding" android:paddingTop="@dimen/workspace_top_padding" android:paddingBottom="@dimen/workspace_bottom_padding" - launcher:defaultScreen="2" - launcher:pageSpacing="@dimen/workspace_page_spacing"> - <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.cyanogenmod.trebuchet.Workspace>
\ No newline at end of file + launcher:pageSpacing="@dimen/workspace_page_spacing" /> diff --git a/res/values/attrs.xml b/res/values/attrs.xml index 9e39813..f8fbf21 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -44,8 +44,6 @@ <!-- Workspace specific attributes. These attributes are used to customize the workspace in XML files. --> <declare-styleable name="Workspace"> - <!-- The first screen the workspace should display. --> - <attr name="defaultScreen" format="integer" /> <!-- The number of horizontal cells in the CellLayout --> <attr name="cellCountX" format="integer" /> <!-- The number of vertical cells in the CellLayout --> diff --git a/res/values/strings.xml b/res/values/strings.xml index c4ca1f8..e956403 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -294,6 +294,10 @@ s --> <!-- Homescreen --> <string name="preferences_interface_homescreen_title">Homescreen</string> <string name="preferences_interface_homescreen_general_category">General</string> + <string name="preferences_interface_homescreen_general_screens_title">Homescreens</string> + <string name="preferences_interface_homescreen_general_screens_summary">Number of screens on the homescreen</string> + <string name="preferences_interface_homescreen_general_default_screen_title">Default Screen</string> + <string name="preferences_interface_homescreen_general_default_screen_summary">Choose the default homescreen</string> <string name="preferences_interface_homescreen_general_search_title">Search Bar</string> <string name="preferences_interface_homescreen_general_grid_title">Grid Size</string> <string name="preferences_interface_homescreen_general_grid_summary">Choose the number of rows/columns on the homescreen</string> diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index dcb6379..1e10bb3 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -33,6 +33,19 @@ launcher:min1="3" launcher:max2="7" launcher:min2="3" /> + <com.cyanogenmod.trebuchet.preference.NumberPickerPreference android:key="ui_homescreen_screens" + android:title="@string/preferences_interface_homescreen_general_screens_title" + android:summary="@string/preferences_interface_homescreen_general_screens_summary" + android:defaultValue="5" + launcher:max="7" + launcher:min="1" /> + <com.cyanogenmod.trebuchet.preference.NumberPickerPreference android:key="ui_homescreen_default_screen" + android:title="@string/preferences_interface_homescreen_general_default_screen_title" + android:summary="@string/preferences_interface_homescreen_general_default_screen_summary" + android:defaultValue="3" + launcher:maxExternal="ui_homescreen_screens" + launcher:max="7" + launcher:min="1" /> <CheckBoxPreference android:key="ui_homescreen_general_search" android:title="@string/preferences_interface_homescreen_general_search_title" android:summary="@string/preferences_interface_homescreen_general_search_summary" diff --git a/src/com/cyanogenmod/trebuchet/InstallShortcutReceiver.java b/src/com/cyanogenmod/trebuchet/InstallShortcutReceiver.java index 04cc61e..9b9418a 100644 --- a/src/com/cyanogenmod/trebuchet/InstallShortcutReceiver.java +++ b/src/com/cyanogenmod/trebuchet/InstallShortcutReceiver.java @@ -137,9 +137,9 @@ public class InstallShortcutReceiver extends BroadcastReceiver { // Try adding to the workspace screens incrementally, starting at the default or center // screen and alternating between +1, -1, +2, -2, etc. (using ~ ceil(i/2f)*(-1)^(i-1)) final int screen = Launcher.DEFAULT_SCREEN; - for (int i = 0; i < (2 * Launcher.SCREEN_COUNT) + 1 && !found; ++i) { + for (int i = 0; i < (2 * Launcher.MAX_SCREEN_COUNT) + 1 && !found; ++i) { int si = screen + (int) ((i / 2f) + 0.5f) * ((i % 2 == 1) ? 1 : -1); - if (0 <= si && si < Launcher.SCREEN_COUNT) { + if (0 <= si && si < Launcher.MAX_SCREEN_COUNT) { found = installShortcut(context, data, items, name, intent, si, exists, sp, result); } diff --git a/src/com/cyanogenmod/trebuchet/Launcher.java b/src/com/cyanogenmod/trebuchet/Launcher.java index 2975983..8d9a3d5 100644 --- a/src/com/cyanogenmod/trebuchet/Launcher.java +++ b/src/com/cyanogenmod/trebuchet/Launcher.java @@ -144,7 +144,7 @@ public final class Launcher extends Activity static final String EXTRA_SHORTCUT_DUPLICATE = "duplicate"; - static final int SCREEN_COUNT = 5; + static final int MAX_SCREEN_COUNT = 7; static final int DEFAULT_SCREEN = 2; private static final String PREFERENCES = "launcher.preferences"; @@ -3294,7 +3294,7 @@ public final class Launcher extends Activity if (mWorkspace != null) { return mWorkspace.getCurrentPage(); } else { - return SCREEN_COUNT / 2; + return DEFAULT_SCREEN; } } diff --git a/src/com/cyanogenmod/trebuchet/LauncherModel.java b/src/com/cyanogenmod/trebuchet/LauncherModel.java index 00fa227..095b907 100644 --- a/src/com/cyanogenmod/trebuchet/LauncherModel.java +++ b/src/com/cyanogenmod/trebuchet/LauncherModel.java @@ -1181,13 +1181,13 @@ public class LauncherModel extends BroadcastReceiver { // We use the last index to refer to the hotseat and the screen as the rank, so // test and update the occupied state accordingly - if (occupied[Launcher.SCREEN_COUNT][item.screen][0] != null) { + if (occupied[Launcher.MAX_SCREEN_COUNT][item.screen][0] != null) { Log.e(TAG, "Error loading shortcut into hotseat " + item + " into position (" + item.screen + ":" + item.cellX + "," + item.cellY - + ") occupied by " + occupied[Launcher.SCREEN_COUNT][item.screen][0]); + + ") occupied by " + occupied[Launcher.MAX_SCREEN_COUNT][item.screen][0]); return false; } else { - occupied[Launcher.SCREEN_COUNT][item.screen][0] = item; + occupied[Launcher.MAX_SCREEN_COUNT][item.screen][0] = item; return true; } } else if (item.container != LauncherSettings.Favorites.CONTAINER_DESKTOP) { @@ -1245,7 +1245,7 @@ public class LauncherModel extends BroadcastReceiver { // Load workspace in reverse order to ensure that latest items are loaded first (and // before any earlier duplicates) final ItemInfo occupied[][][] = - new ItemInfo[Launcher.SCREEN_COUNT + 1][mCellCountX + 1][mCellCountY + 1]; + new ItemInfo[Launcher.MAX_SCREEN_COUNT + 1][mCellCountX + 1][mCellCountY + 1]; try { final int idIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites._ID); @@ -1593,7 +1593,7 @@ public class LauncherModel extends BroadcastReceiver { int cellCountX = LauncherModel.getCellCountX(); int cellCountY = LauncherModel.getCellCountY(); int screenOffset = cellCountX * cellCountY; - int containerOffset = screenOffset * (Launcher.SCREEN_COUNT + 1); // +1 hotseat + int containerOffset = screenOffset * (Launcher.MAX_SCREEN_COUNT + 1); // +1 hotseat long lr = (lhs.container * containerOffset + lhs.screen * screenOffset + lhs.cellY * cellCountX + lhs.cellX); long rr = (rhs.container * containerOffset + rhs.screen * screenOffset + diff --git a/src/com/cyanogenmod/trebuchet/Workspace.java b/src/com/cyanogenmod/trebuchet/Workspace.java index 669a41f..2405356 100644 --- a/src/com/cyanogenmod/trebuchet/Workspace.java +++ b/src/com/cyanogenmod/trebuchet/Workspace.java @@ -48,6 +48,7 @@ import android.util.AttributeSet; import android.util.Log; import android.util.SparseArray; import android.view.Display; +import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -107,8 +108,6 @@ public class Workspace extends SmoothPagedView private IBinder mWindowToken; private static final float WALLPAPER_SCREENS_SPAN = 2f; - private int mDefaultPage; - /** * CellInfo for the cell that is currently being dragged */ @@ -264,6 +263,8 @@ public class Workspace extends SmoothPagedView } }; // Preferences + private int mNumberHomescreens; + private int mDefaultHomescreen; private boolean mShowSearchBar; private boolean mResizeAnyWidget; @@ -320,7 +321,6 @@ public class Workspace extends SmoothPagedView // if the value is manually specified, use that instead cellCountX = a.getInt(R.styleable.Workspace_cellCountX, cellCountX); cellCountY = a.getInt(R.styleable.Workspace_cellCountY, cellCountY); - mDefaultPage = a.getInt(R.styleable.Workspace_defaultScreen, 1); a.recycle(); setOnHierarchyChangeListener(this); @@ -335,6 +335,12 @@ public class Workspace extends SmoothPagedView setHapticFeedbackEnabled(false); // Preferences + mNumberHomescreens = PreferencesProvider.Interface.Homescreen.getNumberHomescreens(context); + mDefaultHomescreen = PreferencesProvider.Interface.Homescreen.getDefaultHomescreen(context, + mNumberHomescreens / 2); + if (mDefaultHomescreen >= mNumberHomescreens) { + mDefaultHomescreen = mNumberHomescreens / 2; + } mShowSearchBar = PreferencesProvider.Interface.Homescreen.getShowSearchBar(context); mResizeAnyWidget = PreferencesProvider.Interface.Homescreen.getResizeAnyWidget(context); @@ -431,7 +437,7 @@ public class Workspace extends SmoothPagedView */ protected void initWorkspace() { Context context = getContext(); - mCurrentPage = mDefaultPage; + mCurrentPage = mDefaultHomescreen; Launcher.setScreen(mCurrentPage); LauncherApplication app = (LauncherApplication)context.getApplicationContext(); mIconCache = app.getIconCache(); @@ -439,6 +445,13 @@ public class Workspace extends SmoothPagedView setChildrenDrawnWithCacheEnabled(true); final Resources res = getResources(); + + LayoutInflater inflater = + (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + for (int i = 0; i < mNumberHomescreens; i++) { + inflater.inflate(R.layout.workspace_screen, this); + } + try { mBackground = res.getDrawable(R.drawable.apps_customize_bg); } catch (Resources.NotFoundException e) { @@ -1269,17 +1282,19 @@ public class Workspace extends SmoothPagedView if (mOverScrollX < 0 || mOverScrollX > mMaxScrollX) { int index = mOverScrollX < 0 ? 0 : getChildCount() - 1; CellLayout cl = (CellLayout) getChildAt(index); - float scrollProgress = getScrollProgress(screenCenter, cl, index); - cl.setOverScrollAmount(Math.abs(scrollProgress), index == 0); - float rotation = - WORKSPACE_OVERSCROLL_ROTATION * scrollProgress; - cl.setRotationY(rotation); - setFadeForOverScroll(Math.abs(scrollProgress)); - if (!mOverscrollTransformsSet) { - mOverscrollTransformsSet = true; - cl.setCameraDistance(mDensity * mCameraDistance); - cl.setPivotX(cl.getMeasuredWidth() * (index == 0 ? 0.75f : 0.25f)); - cl.setPivotY(cl.getMeasuredHeight() * 0.5f); - cl.setOverscrollTransformsDirty(true); + if (getChildCount() > 1) { + float scrollProgress = getScrollProgress(screenCenter, cl, index); + cl.setOverScrollAmount(Math.abs(scrollProgress), index == 0); + float rotation = - WORKSPACE_OVERSCROLL_ROTATION * scrollProgress; + cl.setRotationY(rotation); + setFadeForOverScroll(Math.abs(scrollProgress)); + if (!mOverscrollTransformsSet) { + mOverscrollTransformsSet = true; + cl.setCameraDistance(mDensity * mCameraDistance); + cl.setPivotX(cl.getMeasuredWidth() * (index == 0 ? 0.75f : 0.25f)); + cl.setPivotY(cl.getMeasuredHeight() * 0.5f); + cl.setOverscrollTransformsDirty(true); + } } } else { if (mOverscrollFade != 0) { @@ -3824,12 +3839,12 @@ public class Workspace extends SmoothPagedView void moveToDefaultScreen(boolean animate) { if (!isSmall()) { if (animate) { - snapToPage(mDefaultPage); + snapToPage(mDefaultHomescreen); } else { - setCurrentPage(mDefaultPage); + setCurrentPage(mDefaultHomescreen); } } - getChildAt(mDefaultPage).requestFocus(); + getChildAt(mDefaultHomescreen).requestFocus(); } @Override diff --git a/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java b/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java index ab4e06e..acb84fa 100644 --- a/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java +++ b/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java @@ -25,6 +25,14 @@ public final class PreferencesProvider { public static final String PREFERENCES_CHANGED = "preferences_changed"; public static class Interface { public static class Homescreen { + public static int getNumberHomescreens(Context context) { + final SharedPreferences preferences = context.getSharedPreferences(PREFERENCES_KEY, 0); + return preferences.getInt("ui_homescreen_screens", 5); + } + public static int getDefaultHomescreen(Context context, int def) { + final SharedPreferences preferences = context.getSharedPreferences(PREFERENCES_KEY, 0); + return preferences.getInt("ui_homescreen_default_screen", def + 1) - 1; + } public static int getCellCountX(Context context, int def) { final SharedPreferences preferences = context.getSharedPreferences(PREFERENCES_KEY, 0); String[] values = preferences.getString("ui_homescreen_grid", "0|" + def).split("\\|"); |