Trebuchet: allow disabling workspace edit
Co-authored-by: Michael W <baddaemon87@gmail.com>
Co-authored-by: Han Wang <416810799@qq.com>
Change-Id: I503e19cbc512eac0e4a8c8bccc16a6ccc0e805da
diff --git a/res/values/lineage_strings.xml b/res/values/lineage_strings.xml
index 9281cfa..6891f12 100644
--- a/res/values/lineage_strings.xml
+++ b/res/values/lineage_strings.xml
@@ -17,6 +17,14 @@
<!-- Application name -->
<string name="lineageos_app_name" translatable="false">Trebuchet</string>
+ <!-- Settings -->
+
+ <!-- Edit workspace -->
+ <string name="settings_lock_layout_title">Lock layout</string>
+ <string name="settings_lock_layout_summary_on">Icons and widgets can\'t be added, removed and moved on the homescreen</string>
+ <string name="settings_lock_layout_summary_off">Icons and widgets can be added, removed and moved on the homescreen</string>
+ <string name="settings_edit_widgets_error">It\'s not possible to add widgets to the home screen</string>
+
<!-- Folder titles -->
<string name="google_folder_title" translatable="false">Google</string>
</resources>
diff --git a/res/xml/launcher_preferences.xml b/res/xml/launcher_preferences.xml
index 284ab9e..bdb8eaf 100644
--- a/res/xml/launcher_preferences.xml
+++ b/res/xml/launcher_preferences.xml
@@ -18,6 +18,14 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:launcher="http://schemas.android.com/apk/res-auto">
+ <SwitchPreference
+ android:defaultValue="false"
+ android:key="pref_workspace_lock"
+ android:persistent="true"
+ android:title="@string/settings_lock_layout_title"
+ android:summaryOn="@string/settings_lock_layout_summary_on"
+ android:summaryOff="@string/settings_lock_layout_summary_off" />
+
<com.android.launcher3.settings.NotificationDotsPreference
android:key="pref_icon_badging"
android:title="@string/notification_dots_title"
diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java
index 376f54d..4bd1e9a 100644
--- a/src/com/android/launcher3/InvariantDeviceProfile.java
+++ b/src/com/android/launcher3/InvariantDeviceProfile.java
@@ -90,6 +90,8 @@
private static final float ICON_SIZE_DEFINED_IN_APP_DP = 48;
+ public static final String KEY_WORKSPACE_LOCK = "pref_workspace_lock";
+
// Constants that affects the interpolation curve between statically defined device profile
// buckets.
private static final float KNEARESTNEIGHBOR = 3;
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index 709c57c..97077ec 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -27,6 +27,7 @@
import android.app.Person;
import android.app.WallpaperManager;
import android.content.Context;
+import android.content.SharedPreferences;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.content.pm.ShortcutInfo;
@@ -802,4 +803,9 @@
// No-Op
}
}
+
+ public static boolean isWorkspaceEditAllowed(Context context) {
+ SharedPreferences prefs = LauncherPrefs.getPrefs(context.getApplicationContext());
+ return !prefs.getBoolean(InvariantDeviceProfile.KEY_WORKSPACE_LOCK, false);
+ }
}
diff --git a/src/com/android/launcher3/dragndrop/DragController.java b/src/com/android/launcher3/dragndrop/DragController.java
index 9867268..941a5a2 100644
--- a/src/com/android/launcher3/dragndrop/DragController.java
+++ b/src/com/android/launcher3/dragndrop/DragController.java
@@ -30,6 +30,7 @@
import com.android.launcher3.DragSource;
import com.android.launcher3.DropTarget;
+import com.android.launcher3.Utilities;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.logging.InstanceId;
import com.android.launcher3.model.data.ItemInfo;
@@ -393,6 +394,11 @@
return false;
}
+ if (!Utilities.isWorkspaceEditAllowed(mActivity.getDragLayer().getContext())) {
+ cancelDrag();
+ return false;
+ }
+
Point dragLayerPos = getClampedDragLayerPos(getX(ev), getY(ev));
mLastTouch.set(dragLayerPos.x, dragLayerPos.y);
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
index 1f26bab..e600837 100644
--- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java
+++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
@@ -53,6 +53,7 @@
import com.android.launcher3.DropTarget.DragObject;
import com.android.launcher3.Launcher;
import com.android.launcher3.R;
+import com.android.launcher3.Utilities;
import com.android.launcher3.accessibility.LauncherAccessibilityDelegate;
import com.android.launcher3.accessibility.ShortcutMenuAccessibilityDelegate;
import com.android.launcher3.dot.DotInfo;
@@ -775,6 +776,8 @@
if (!ItemLongClickListener.canStartDrag(mLauncher)) return false;
// Return early if not the correct view
if (!(v.getParent() instanceof DeepShortcutView)) return false;
+ // Return early if workspace edit is disabled
+ if (!Utilities.isWorkspaceEditAllowed(mLauncher.getApplicationContext())) return false;
// Long clicked on a shortcut.
DeepShortcutView sv = (DeepShortcutView) v.getParent();
diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java
index 69bba69..6535a55 100644
--- a/src/com/android/launcher3/popup/SystemShortcut.java
+++ b/src/com/android/launcher3/popup/SystemShortcut.java
@@ -134,6 +134,7 @@
@Override
public void onClick(View view) {
+ if (!Utilities.isWorkspaceEditAllowed(mTarget.getApplicationContext())) return;
AbstractFloatingView.closeAllOpenViews(mTarget);
WidgetsBottomSheet widgetsBottomSheet =
(WidgetsBottomSheet) mTarget.getLayoutInflater().inflate(
diff --git a/src/com/android/launcher3/views/OptionsPopupView.java b/src/com/android/launcher3/views/OptionsPopupView.java
index 4641e31..ac0333b 100644
--- a/src/com/android/launcher3/views/OptionsPopupView.java
+++ b/src/com/android/launcher3/views/OptionsPopupView.java
@@ -200,7 +200,7 @@
resDrawable,
IGNORE,
OptionsPopupView::startWallpaperPicker));
- if (!WidgetsModel.GO_DISABLE_WIDGETS) {
+ if (!WidgetsModel.GO_DISABLE_WIDGETS && Utilities.isWorkspaceEditAllowed(launcher)) {
options.add(new OptionItem(launcher,
R.string.widget_button_text,
R.drawable.ic_widget,
diff --git a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java
index bc3889f..e8773a9 100644
--- a/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java
+++ b/src/com/android/launcher3/widget/LauncherAppWidgetHostView.java
@@ -119,6 +119,7 @@
@Override
public boolean onLongClick(View view) {
+ if (!Utilities.isWorkspaceEditAllowed(mLauncher.getApplicationContext())) return true;
if (mIsScrollable) {
DragLayer dragLayer = mLauncher.getDragLayer();
dragLayer.requestDisallowInterceptTouchEvent(false);