summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/RemoteFolderManager.java
diff options
context:
space:
mode:
authorArtem Shvadskiy <ashvadskiy@cyngn.com>2015-12-09 10:46:16 -0800
committerArtem Shvadskiy <ashvadskiy@cyngn.com>2015-12-09 16:10:41 -0800
commit57f0a5ecd4afd88659a36fdb698942b0c0cfda9e (patch)
treea76a6e10849fe730e5a38b3d9cf119916a394787 /src/com/android/launcher3/RemoteFolderManager.java
parentd69f636f145d8ff2b49348d179cfa0bbb8d4f83b (diff)
downloadandroid_packages_apps_Trebuchet-57f0a5ecd4afd88659a36fdb698942b0c0cfda9e.tar.gz
android_packages_apps_Trebuchet-57f0a5ecd4afd88659a36fdb698942b0c0cfda9e.tar.bz2
android_packages_apps_Trebuchet-57f0a5ecd4afd88659a36fdb698942b0c0cfda9e.zip
Add remote folder if it is not already present after OOBE, and enable toggle
in settings to hide remote folder if unwanted. Refactor RemoteFolderUpdater to hold static instance of itself. Refactor FolderInfo to use method for determining remote folder status, instead of manually comparing subType flag. Switch back from temp-coordinates after workspace drag/drop is completed. Remove disable button from remote folder UI. Patch 2: Pull remote folder code out of Launcher and into RemoteFolderManager. Patch 3: Remote @author from RemoteFolderManager Patch 4: 1. Remove delete button from folder. 2. Fix NPE when screens are full. Create a new screen and ad at (0,0). 3. Set default preference to false. 4. Clean up leftover imports and unnecessary conditionals. 5. Refactor Launcher.addFolder() method signature. Patch 5: Add missing parenthesis. Change-Id: I36b7a53175a568c5ebdc908d0256d9128e1bee65 issue-id: CYNGNOS-1378 issue-id: CYNGNOS-1331
Diffstat (limited to 'src/com/android/launcher3/RemoteFolderManager.java')
-rw-r--r--src/com/android/launcher3/RemoteFolderManager.java159
1 files changed, 159 insertions, 0 deletions
diff --git a/src/com/android/launcher3/RemoteFolderManager.java b/src/com/android/launcher3/RemoteFolderManager.java
new file mode 100644
index 000000000..efbc9159d
--- /dev/null
+++ b/src/com/android/launcher3/RemoteFolderManager.java
@@ -0,0 +1,159 @@
+package com.android.launcher3;
+
+import android.util.Log;
+import android.util.Pair;
+import android.view.View;
+import com.android.launcher3.settings.SettingsProvider;
+
+import java.util.ArrayList;
+
+/**
+ * Manages adding and removing the remote folder from the workspace.
+ */
+public class RemoteFolderManager {
+ private static final String TAG = "RemoteFolderManager";
+
+ private final Launcher mLauncher;
+
+ /** View which is displayed in the workspace **/
+ private FolderIcon mRemoteFolder;
+ /** Coordinates of the folder's position before being hidden **/
+ private int[] mRemoteFolderCell;
+
+ public RemoteFolderManager(final Launcher launcher) {
+ mLauncher = launcher;
+ mRemoteFolderCell = new int[2];
+ }
+
+ public void setRemoteFolder(final FolderIcon remoteFolder) {
+ mRemoteFolder = remoteFolder;
+ }
+
+ /**
+ * Called when Launcher finishes binding items from the model.
+ */
+ public void bindFinished() {
+ boolean remoteFolderEnabled = SettingsProvider.getBoolean(mLauncher,
+ SettingsProvider.SETTINGS_UI_HOMESCREEN_REMOTE_FOLDER,
+ R.bool.preferences_interface_homescreen_remote_folder_default);
+ if (remoteFolderEnabled && mRemoteFolder == null) {
+ showRemoteFolder();
+ } else if (!remoteFolderEnabled) {
+ // We might load the remote folder on startup, but we shouldn't show it
+ hideRemoteFolder();
+ }
+ }
+
+ /**
+ * Called when the setting for remote folder is updated.
+ * @param newValue the new setting for remote folder
+ */
+ public void onSettingChanged(final boolean newValue) {
+ if (newValue) {
+ showRemoteFolder();
+ } else {
+ hideRemoteFolder();
+ }
+ }
+
+ /**
+ * Called when the remote folder is dropped into the delete area on the workspace.
+ */
+ public void onFolderDeleted() {
+ hideRemoteFolder();
+ SettingsProvider.putBoolean(mLauncher,
+ SettingsProvider.SETTINGS_UI_HOMESCREEN_REMOTE_FOLDER, false);
+ mLauncher.mOverviewSettingsPanel.notifyDataSetInvalidated();
+ }
+
+ private void showRemoteFolder() {
+ int[] cell;
+ long screen;
+ long container;
+ boolean findNewSpace = true;
+ FolderInfo folderInfo = null;
+ Workspace workspace = mLauncher.getWorkspace();
+
+ // Check if we can re-add at our old location
+ if (mRemoteFolder != null) {
+ folderInfo = mRemoteFolder.getFolderInfo();
+ CellLayout cellLayout = mLauncher.getCellLayout(
+ folderInfo.container, folderInfo.screenId);
+ if (cellLayout != null
+ && !cellLayout.isOccupied(mRemoteFolderCell[0], mRemoteFolderCell[1])) {
+ findNewSpace = false;
+ }
+ }
+ if (findNewSpace) {
+ // Try to find a new space to add.
+ Pair<Long, int[]> space = LauncherModel.findNextAvailableIconSpace(mLauncher, null,
+ null, 0, new ArrayList<Long>(workspace.getWorkspaceScreenIds()));
+
+ // All screens are full. Create a new screen.
+ if (space == null) {
+ workspace.addExtraEmptyScreen();
+ screen = workspace.commitExtraEmptyScreen();
+ cell = new int[2];
+ } else {
+ screen = space.first;
+ cell = space.second;
+ }
+
+ container = LauncherSettings.Favorites.CONTAINER_DESKTOP;
+ } else {
+ screen = folderInfo.screenId;
+ cell = mRemoteFolderCell;
+ container = folderInfo.container;
+ }
+
+ // Create the folder if this is our first time showing it
+ if (mRemoteFolder == null) {
+ folderInfo = new FolderInfo();
+ folderInfo.setTitle(mLauncher.getString(R.string.recommendations_title));
+ folderInfo.setRemote(true);
+
+ CellLayout cellLayout = mLauncher.getCellLayout(container, screen);
+ mRemoteFolder = mLauncher.addFolder(cellLayout, container, screen,
+ cell[0], cell[1], folderInfo);
+
+ mLauncher.getModel().syncRemoteFolder(folderInfo, mLauncher);
+ } else {
+ // Folder may be hidden by drop delete animation, so force visibility.
+ mRemoteFolder.setVisibility(View.VISIBLE);
+ workspace.addInScreen(mRemoteFolder, container, screen,
+ cell[0], cell[1], 1, 1, mLauncher.isWorkspaceLocked());
+ mLauncher.getCellLayout(container, screen)
+ .getShortcutsAndWidgets().measureChild(mRemoteFolder);
+
+ // Update the model
+ folderInfo.cellX = cell[0];
+ folderInfo.cellY = cell[1];
+ folderInfo.container = container;
+ folderInfo.screenId = screen;
+ LauncherModel.updateItemInDatabase(mLauncher, folderInfo);
+ }
+ }
+
+ private void hideRemoteFolder() {
+ // Remote folder does not exist
+ if (mRemoteFolder == null) {
+ Log.e(TAG, "Remote folder is null");
+ return;
+ }
+
+ FolderInfo info = mRemoteFolder.getFolderInfo();
+
+ // Store our current location so we can try to re-add in the same spot later.
+ mRemoteFolderCell[0] = info.cellX;
+ mRemoteFolderCell[1] = info.cellY;
+
+ // Clear the spot
+ mLauncher.getCellLayout(info.container, info.screenId).removeView(mRemoteFolder);
+ info.cellX = -1;
+ info.cellY = -1;
+ LauncherModel.updateItemInDatabase(mLauncher, info);
+
+ // We may be removing from a screen we're on alone, so remove it if necessary.
+ mLauncher.getWorkspace().removeExtraEmptyScreen(false, true);
+ }
+}