summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout-land/launcher.xml10
-rw-r--r--res/layout-port/launcher.xml10
-rw-r--r--res/layout-sw720dp/workspace.xml9
-rw-r--r--res/values/attrs.xml2
-rw-r--r--res/values/strings.xml4
-rw-r--r--res/xml/preferences.xml13
-rw-r--r--src/com/cyanogenmod/trebuchet/InstallShortcutReceiver.java4
-rw-r--r--src/com/cyanogenmod/trebuchet/Launcher.java4
-rw-r--r--src/com/cyanogenmod/trebuchet/LauncherModel.java12
-rw-r--r--src/com/cyanogenmod/trebuchet/Workspace.java51
-rw-r--r--src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java8
11 files changed, 71 insertions, 56 deletions
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml
index ff25506ce..1a1f908b1 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 6f7961779..b4ec30c3a 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 352c4d709..db2c3a62d 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 9e3981305..f8fbf21d1 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 86a1a8533..689efdc70 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -292,6 +292,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 dcb637991..1e10bb37b 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 d40ceba58..d67d6abcd 100644
--- a/src/com/cyanogenmod/trebuchet/InstallShortcutReceiver.java
+++ b/src/com/cyanogenmod/trebuchet/InstallShortcutReceiver.java
@@ -138,9 +138,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 dc5a070ac..4392f8502 100644
--- a/src/com/cyanogenmod/trebuchet/Launcher.java
+++ b/src/com/cyanogenmod/trebuchet/Launcher.java
@@ -143,7 +143,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";
@@ -3172,7 +3172,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 7e0df1435..94fbd29ba 100644
--- a/src/com/cyanogenmod/trebuchet/LauncherModel.java
+++ b/src/com/cyanogenmod/trebuchet/LauncherModel.java
@@ -960,13 +960,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) {
@@ -1023,7 +1023,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);
@@ -1246,7 +1246,7 @@ public class LauncherModel extends BroadcastReceiver {
Log.d(TAG, "workspace layout: ");
for (int y = 0; y < mCellCountY; y++) {
String line = "";
- for (int s = 0; s < Launcher.SCREEN_COUNT; s++) {
+ for (int s = 0; s < Launcher.MAX_SCREEN_COUNT; s++) {
if (s > 0) {
line += " | ";
}
@@ -1285,7 +1285,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 12f9d5de7..5b6ab474f 100644
--- a/src/com/cyanogenmod/trebuchet/Workspace.java
+++ b/src/com/cyanogenmod/trebuchet/Workspace.java
@@ -50,6 +50,7 @@ import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
+import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
@@ -108,8 +109,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
*/
@@ -260,6 +259,8 @@ public class Workspace extends SmoothPagedView
private float mTransitionProgress;
// Preferences
+ private int mNumberHomescreens;
+ private int mDefaultHomescreen;
private boolean mShowSearchBar;
private boolean mResizeAnyWidget;
@@ -314,7 +315,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);
@@ -329,6 +329,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);
@@ -436,7 +442,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();
@@ -444,6 +450,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) {
@@ -1302,17 +1315,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) {
@@ -3771,12 +3786,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 ab4e06eda..acb84fa65 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("\\|");