diff options
author | Jorge Ruesga <jorge@ruesga.com> | 2013-04-29 00:59:24 +0200 |
---|---|---|
committer | Nebojsa Cvetkovic <nebkat@gmail.com> | 2013-04-29 13:48:59 +0100 |
commit | bd9793a7c059a616745f636128c665860d78ed8d (patch) | |
tree | 7073cbedf336824693edf96dc66b8b6d6a4dcc9f | |
parent | b76a4e1cd7734e35b779615d337e22b6c65648ee (diff) | |
download | packages_apps_trebuchet-bd9793a7c059a616745f636128c665860d78ed8d.zip packages_apps_trebuchet-bd9793a7c059a616745f636128c665860d78ed8d.tar.gz packages_apps_trebuchet-bd9793a7c059a616745f636128c665860d78ed8d.tar.bz2 |
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.xml | 10 | ||||
-rw-r--r-- | res/values/config.xml | 1 | ||||
-rw-r--r-- | res/xml/preferences_general.xml | 6 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/Folder.java | 10 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/Launcher.java | 32 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/PagedViewWithDraggableItems.java | 11 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java | 3 |
7 files changed, 65 insertions, 8 deletions
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index 5446b08..0090032 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 f32e6b8..3164332 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 abe0cf8..61a297b 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 cdb4dd3..28a9aef 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 f90a1eb..c82c8fe 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 1f0befa..1674060 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 ca03491..c4039ff 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); } |