summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorge Ruesga <jorge@ruesga.com>2013-04-29 00:59:24 +0200
committerNebojsa Cvetkovic <nebkat@gmail.com>2013-04-29 13:48:59 +0100
commitbd9793a7c059a616745f636128c665860d78ed8d (patch)
tree7073cbedf336824693edf96dc66b8b6d6a4dcc9f
parentb76a4e1cd7734e35b779615d337e22b6c65648ee (diff)
downloadandroid_packages_apps_Trebuchet-bd9793a7c059a616745f636128c665860d78ed8d.tar.gz
android_packages_apps_Trebuchet-bd9793a7c059a616745f636128c665860d78ed8d.tar.bz2
android_packages_apps_Trebuchet-bd9793a7c059a616745f636128c665860d78ed8d.zip
Trebuchet: Lock homescreen
Allow lock shortcuts and folders positions in the workspace, hotseat and apps and widgets drawer. When is enabled the system avoids to move any shortcut or folder, change its names and access to widgets. Patchset 2: Fixed typo Change-Id: I832da526cf1eb32752218656a7c2dafc53010236 JIRA: CYAN-686 Issue: https://jira.cyanogenmod.org/browse/CYAN-686 Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
-rw-r--r--res/values/cm_strings.xml10
-rw-r--r--res/values/config.xml1
-rw-r--r--res/xml/preferences_general.xml6
-rw-r--r--src/com/cyanogenmod/trebuchet/Folder.java10
-rw-r--r--src/com/cyanogenmod/trebuchet/Launcher.java32
-rw-r--r--src/com/cyanogenmod/trebuchet/PagedViewWithDraggableItems.java11
-rw-r--r--src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java3
7 files changed, 65 insertions, 8 deletions
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 5446b0844..0090032fa 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -28,6 +28,11 @@
<!-- Label for the info icon. [CHAR_LIMIT=30] -->
<string name="edit_target_label">Edit</string>
+ <!-- Menu item used to lock workspace -->
+ <string name="menu_lock_workspace">Lock homescreen</string>
+ <!-- Menu item used to unlock workspace -->
+ <string name="menu_unlock_workspace">Unlock homescreen</string>
+
<!-- Noun, menu item used to show the launcher preferences -->
<string name="menu_preferences">Trebuchet settings</string>
@@ -51,6 +56,9 @@
<!-- Hidden apps -->
<string name="hidden_apps_title">Hidden apps</string>
+ <!-- Workspace is locked -->
+ <string name="workspace_locked">Homescreen is locked, unlock in settings to rearrange</string>
+
<!-- Settings -->
<string name="preferences_title">Settings</string>
<!-- UI -->
@@ -142,6 +150,8 @@
<!-- General -->
<string name="preferences_interface_general_title">General</string>
<string name="preferences_interface_general_orientation_title">Auto-rotate screen</string>
+ <string name="preferences_interface_general_lock_workspace_title">Lock homescreen</string>
+ <string name="preferences_interface_general_lock_workspace_summary">Lock shortcuts and folders positions in the homescreen, dock and apps and widgets drawer</string>
<string name="preferences_interface_general_fullscreen_title">Fullscreen mode</string>
<string name="preferences_interface_general_fullscreen_summary">Hide the status bar to extend the homescreen</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index f32e6b883..3164332ff 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -2,6 +2,7 @@
<bool name="config_largeHeap">false</bool>
<bool name="is_large_screen">false</bool>
<bool name="allow_rotation">false</bool>
+ <bool name="lock_workspace">false</bool>
<!-- DragController -->
<integer name="config_flingToDeleteMinVelocity">-1500</integer>
diff --git a/res/xml/preferences_general.xml b/res/xml/preferences_general.xml
index abe0cf881..61a297b16 100644
--- a/res/xml/preferences_general.xml
+++ b/res/xml/preferences_general.xml
@@ -20,7 +20,11 @@
android:title="@string/preferences_interface_general_title">
<CheckBoxPreference android:key="ui_general_orientation"
android:title="@string/preferences_interface_general_orientation_title" />
+ <CheckBoxPreference android:key="ui_general_lock_workspace"
+ android:title="@string/preferences_interface_general_lock_workspace_title"
+ android:summary="@string/preferences_interface_general_lock_workspace_summary"
+ android:defaultValue="@bool/lock_workspace" />
<CheckBoxPreference android:key="ui_general_fullscreen"
android:title="@string/preferences_interface_general_fullscreen_title"
android:summary="@string/preferences_interface_general_fullscreen_summary" />
-</PreferenceScreen> \ No newline at end of file
+</PreferenceScreen>
diff --git a/src/com/cyanogenmod/trebuchet/Folder.java b/src/com/cyanogenmod/trebuchet/Folder.java
index cdb4dd345..28a9aefdf 100644
--- a/src/com/cyanogenmod/trebuchet/Folder.java
+++ b/src/com/cyanogenmod/trebuchet/Folder.java
@@ -158,7 +158,12 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
mContent.getShortcutsAndWidgets().setMotionEventSplittingEnabled(false);
mFolderName = (FolderEditText) findViewById(R.id.folder_name);
mFolderName.setFolder(this);
- mFolderName.setOnFocusChangeListener(this);
+ if (mLauncher.getLockWorkspace()) {
+ mFolderName.setKeyListener(null);
+ mFolderName.setFocusable(false);
+ } else {
+ mFolderName.setOnFocusChangeListener(this);
+ }
// We find out how tall the text view wants to be (it is set to wrap_content), so that
// we can allocate the appropriate amount of space for it.
@@ -211,6 +216,9 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
}
public boolean onLongClick(View v) {
+ // Only if workspace is not locked
+ if (mLauncher.getLockWorkspace()) return false;
+
// Return if global dragging is not enabled
if (!mLauncher.isDraggingEnabled()) return true;
diff --git a/src/com/cyanogenmod/trebuchet/Launcher.java b/src/com/cyanogenmod/trebuchet/Launcher.java
index f90a1eb7e..c82c8fe2d 100644
--- a/src/com/cyanogenmod/trebuchet/Launcher.java
+++ b/src/com/cyanogenmod/trebuchet/Launcher.java
@@ -134,7 +134,8 @@ public final class Launcher extends Activity
private static final int MENU_GROUP_WALLPAPER = 1;
private static final int MENU_WALLPAPER_SETTINGS = Menu.FIRST + 1;
- private static final int MENU_MANAGE_APPS = MENU_WALLPAPER_SETTINGS + 1;
+ private static final int MENU_LOCK_WORKSPACE = MENU_WALLPAPER_SETTINGS + 1;
+ private static final int MENU_MANAGE_APPS = MENU_LOCK_WORKSPACE + 1;
private static final int MENU_PREFERENCES = MENU_MANAGE_APPS + 1;
private static final int MENU_SYSTEM_SETTINGS = MENU_PREFERENCES + 1;
private static final int MENU_HELP = MENU_SYSTEM_SETTINGS + 1;
@@ -319,6 +320,7 @@ public final class Launcher extends Activity
private boolean mShowDockDivider;
private boolean mHideIconLabels;
private boolean mAutoRotate;
+ private boolean mLockWorkspace;
private boolean mFullscreenMode;
private boolean mWallpaperVisible;
@@ -403,6 +405,7 @@ public final class Launcher extends Activity
mShowDockDivider = PreferencesProvider.Interface.Dock.getShowDivider() && mShowHotseat;
mHideIconLabels = PreferencesProvider.Interface.Homescreen.getHideIconLabels();
mAutoRotate = PreferencesProvider.Interface.General.getAutoRotate(getResources().getBoolean(R.bool.allow_rotation));
+ mLockWorkspace = PreferencesProvider.Interface.General.getLockWorkspace(getResources().getBoolean(R.bool.lock_workspace));
mFullscreenMode = PreferencesProvider.Interface.General.getFullscreenMode();
if (PROFILE_STARTUP) {
@@ -1775,6 +1778,8 @@ public final class Launcher extends Activity
menu.add(MENU_GROUP_WALLPAPER, MENU_WALLPAPER_SETTINGS, 0, R.string.menu_wallpaper)
.setIcon(android.R.drawable.ic_menu_gallery)
.setAlphabeticShortcut('W');
+ menu.add(0, MENU_LOCK_WORKSPACE, 0, !mLockWorkspace ? R.string.menu_lock_workspace : R.string.menu_unlock_workspace)
+ .setAlphabeticShortcut('L');
menu.add(0, MENU_MANAGE_APPS, 0, R.string.menu_manage_apps)
.setIcon(android.R.drawable.ic_menu_manage)
.setIntent(manageApps)
@@ -1808,6 +1813,8 @@ public final class Launcher extends Activity
boolean allAppsVisible = (mAppsCustomizeTabHost.getVisibility() == View.VISIBLE);
menu.setGroupVisible(MENU_GROUP_WALLPAPER, !allAppsVisible);
+ menu.findItem(MENU_LOCK_WORKSPACE).setTitle(!mLockWorkspace ? R.string.menu_lock_workspace : R.string.menu_unlock_workspace);
+
Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
launcherIntent.addCategory(Intent.CATEGORY_HOME);
launcherIntent.addCategory(Intent.CATEGORY_DEFAULT);
@@ -1823,11 +1830,18 @@ public final class Launcher extends Activity
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
- case MENU_WALLPAPER_SETTINGS:
- startWallpaper();
- return true;
+ case MENU_WALLPAPER_SETTINGS:
+ startWallpaper();
+ return true;
+ case MENU_LOCK_WORKSPACE:
+ mLockWorkspace = !mLockWorkspace;
+ SharedPreferences.Editor editor = mSharedPrefs.edit();
+ editor.putBoolean("ui_general_lock_workspace", mLockWorkspace);
+ editor.commit();
+ return true;
}
+
return super.onOptionsItemSelected(item);
}
@@ -2548,7 +2562,11 @@ public final class Launcher extends Activity
startWallpaper();
} else {
if (!(itemUnderLongClick instanceof Folder)) {
- // User long pressed on an item
+ // User long pressed on an item (only if workspace is not locked)
+ if (mLockWorkspace) {
+ Toast.makeText(this, getString(R.string.workspace_locked), Toast.LENGTH_SHORT).show();
+ return false;
+ }
mWorkspace.startDrag(longClickCellInfo);
}
}
@@ -2567,6 +2585,10 @@ public final class Launcher extends Activity
return mSearchDropTargetBar;
}
+ boolean getLockWorkspace() {
+ return mLockWorkspace;
+ }
+
/**
* Returns the CellLayout of the specified container at the specified screen.
*/
diff --git a/src/com/cyanogenmod/trebuchet/PagedViewWithDraggableItems.java b/src/com/cyanogenmod/trebuchet/PagedViewWithDraggableItems.java
index 1f0befa6c..1674060ff 100644
--- a/src/com/cyanogenmod/trebuchet/PagedViewWithDraggableItems.java
+++ b/src/com/cyanogenmod/trebuchet/PagedViewWithDraggableItems.java
@@ -20,6 +20,7 @@ import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
+import android.widget.Toast;
/* Class that does most of the work of enabling dragging items out of a PagedView by performing a
@@ -73,7 +74,10 @@ public abstract class PagedViewWithDraggableItems extends PagedView
break;
case MotionEvent.ACTION_MOVE:
if (mTouchState != TOUCH_STATE_SCROLLING && !mIsDragging && mIsDragEnabled) {
- determineDraggingStart(ev);
+ // Only if workspace is not locked
+ if (!mLauncher.getLockWorkspace()) {
+ determineDraggingStart(ev);
+ }
}
break;
}
@@ -100,6 +104,11 @@ public abstract class PagedViewWithDraggableItems extends PagedView
@Override
public boolean onLongClick(View v) {
+ // Only if workspace is not locked
+ if (mLauncher.getLockWorkspace()) {
+ Toast.makeText(mLauncher, mLauncher.getString(R.string.workspace_locked), Toast.LENGTH_SHORT).show();
+ return false;
+ }
// Return early if this is not initiated from a touch
if (!v.isInTouchMode()) return false;
// Return early if we are still animating the pages
diff --git a/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java b/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java
index ca034917d..c4039ffa9 100644
--- a/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java
+++ b/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java
@@ -204,6 +204,9 @@ public final class PreferencesProvider {
public static boolean getAutoRotate(boolean def) {
return getBoolean("ui_general_orientation", def);
}
+ public static boolean getLockWorkspace(boolean def) {
+ return getBoolean("ui_general_lock_workspace", def);
+ }
public static boolean getFullscreenMode() {
return getBoolean("ui_general_fullscreen", false);
}