Merge "Add velocity threshold so that fast pinches (flings) are detected." into ub-launcher3-calgary
diff --git a/res/drawable-hdpi/ic_setting_pressed.png b/res/drawable-hdpi/ic_setting_pressed.png
deleted file mode 100644
index b86fce1..0000000
--- a/res/drawable-hdpi/ic_setting_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wallpaper_pressed.png b/res/drawable-hdpi/ic_wallpaper_pressed.png
deleted file mode 100644
index 4bb1958..0000000
--- a/res/drawable-hdpi/ic_wallpaper_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_widget_pressed.png b/res/drawable-hdpi/ic_widget_pressed.png
deleted file mode 100644
index 7f31ab3..0000000
--- a/res/drawable-hdpi/ic_widget_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_setting_pressed.png b/res/drawable-mdpi/ic_setting_pressed.png
deleted file mode 100644
index 018bea3..0000000
--- a/res/drawable-mdpi/ic_setting_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wallpaper_pressed.png b/res/drawable-mdpi/ic_wallpaper_pressed.png
deleted file mode 100644
index 08794d9..0000000
--- a/res/drawable-mdpi/ic_wallpaper_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_widget_pressed.png b/res/drawable-mdpi/ic_widget_pressed.png
deleted file mode 100644
index 634b415..0000000
--- a/res/drawable-mdpi/ic_widget_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_setting_pressed.png b/res/drawable-xhdpi/ic_setting_pressed.png
deleted file mode 100644
index 949373f..0000000
--- a/res/drawable-xhdpi/ic_setting_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wallpaper_pressed.png b/res/drawable-xhdpi/ic_wallpaper_pressed.png
deleted file mode 100644
index e1e291d..0000000
--- a/res/drawable-xhdpi/ic_wallpaper_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_widget_pressed.png b/res/drawable-xhdpi/ic_widget_pressed.png
deleted file mode 100644
index 1dcaf37..0000000
--- a/res/drawable-xhdpi/ic_widget_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_setting_pressed.png b/res/drawable-xxhdpi/ic_setting_pressed.png
deleted file mode 100644
index d78cad6..0000000
--- a/res/drawable-xxhdpi/ic_setting_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wallpaper_pressed.png b/res/drawable-xxhdpi/ic_wallpaper_pressed.png
deleted file mode 100644
index 52c92cb..0000000
--- a/res/drawable-xxhdpi/ic_wallpaper_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_widget_pressed.png b/res/drawable-xxhdpi/ic_widget_pressed.png
deleted file mode 100644
index 0c9b02a..0000000
--- a/res/drawable-xxhdpi/ic_widget_pressed.png
+++ /dev/null
Binary files differ
diff --git a/src/com/android/launcher3/FolderInfo.java b/src/com/android/launcher3/FolderInfo.java
index 861a935..6c9d969 100644
--- a/src/com/android/launcher3/FolderInfo.java
+++ b/src/com/android/launcher3/FolderInfo.java
@@ -69,12 +69,12 @@
*
* @param item
*/
- public void add(ShortcutInfo item) {
+ public void add(ShortcutInfo item, boolean animate) {
contents.add(item);
for (int i = 0; i < listeners.size(); i++) {
listeners.get(i).onAdd(item);
}
- itemsChanged();
+ itemsChanged(animate);
}
/**
@@ -82,12 +82,12 @@
*
* @param item
*/
- public void remove(ShortcutInfo item) {
+ public void remove(ShortcutInfo item, boolean animate) {
contents.remove(item);
for (int i = 0; i < listeners.size(); i++) {
listeners.get(i).onRemove(item);
}
- itemsChanged();
+ itemsChanged(animate);
}
public void setTitle(CharSequence title) {
@@ -115,9 +115,9 @@
}
}
- void itemsChanged() {
+ public void itemsChanged(boolean animate) {
for (int i = 0; i < listeners.size(); i++) {
- listeners.get(i).onItemsChanged();
+ listeners.get(i).onItemsChanged(animate);
}
}
@@ -131,7 +131,7 @@
public void onAdd(ShortcutInfo item);
public void onRemove(ShortcutInfo item);
public void onTitleChanged(CharSequence title);
- public void onItemsChanged();
+ public void onItemsChanged(boolean animate);
}
@Override
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 7311cce..445831c 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -84,6 +84,7 @@
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
import android.view.animation.OvershootInterpolator;
import android.view.inputmethod.InputMethodManager;
import android.widget.Advanceable;
@@ -138,7 +139,8 @@
*/
public class Launcher extends Activity
implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks,
- View.OnTouchListener, PageSwitchListener, LauncherProviderChangeListener {
+ View.OnTouchListener, PageSwitchListener, LauncherProviderChangeListener,
+ AccessibilityManager.AccessibilityStateChangeListener {
public static final String TAG = "Launcher";
static final boolean LOGD = false;
@@ -288,8 +290,6 @@
private LauncherClings mClings;
- private static LongArrayMap<FolderInfo> sFolders = new LongArrayMap<>();
-
private View.OnTouchListener mHapticFeedbackTouchListener;
// Related to the auto-advancing of widgets
@@ -452,6 +452,9 @@
mExtractedColors = new ExtractedColors();
loadExtractedColorsAndColorItems();
+ ((AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE))
+ .addAccessibilityStateChangeListener(this);
+
lockAllApps();
mSavedState = savedInstanceState;
@@ -2011,6 +2014,9 @@
TextKeyListener.getInstance().release();
+ ((AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE))
+ .removeAccessibilityStateChangeListener(this);
+
unregisterReceiver(mCloseSystemDialogsReceiver);
LauncherAnimUtils.onDestroyActivity();
@@ -2349,7 +2355,6 @@
// Update the model
LauncherModel.addItemToDatabase(Launcher.this, folderInfo, container, screenId,
cellX, cellY);
- sFolders.put(folderInfo.id, folderInfo);
// Create the view
FolderIcon newFolder =
@@ -2372,9 +2377,9 @@
public boolean removeItem(View v, ItemInfo itemInfo, boolean deleteFromDb) {
if (itemInfo instanceof ShortcutInfo) {
// Remove the shortcut from the folder before removing it from launcher
- FolderInfo folderInfo = sFolders.get(itemInfo.container);
- if (folderInfo != null) {
- folderInfo.remove((ShortcutInfo) itemInfo);
+ View folderIcon = mWorkspace.getHomescreenIconByItemId(itemInfo.container);
+ if (folderIcon instanceof FolderIcon) {
+ ((FolderInfo) folderIcon.getTag()).remove((ShortcutInfo) itemInfo, true);
} else {
mWorkspace.removeWorkspaceItem(v);
}
@@ -2383,7 +2388,6 @@
}
} else if (itemInfo instanceof FolderInfo) {
final FolderInfo folderInfo = (FolderInfo) itemInfo;
- unbindFolder(folderInfo);
mWorkspace.removeWorkspaceItem(v);
if (deleteFromDb) {
LauncherModel.deleteFolderAndContentsFromDatabase(this, folderInfo);
@@ -2404,13 +2408,6 @@
}
/**
- * Unbinds any launcher references to the folder.
- */
- private void unbindFolder(FolderInfo folder) {
- sFolders.remove(folder.id);
- }
-
- /**
* Deletes the widget info and the widget id.
*/
private void deleteWidgetInfo(final LauncherAppWidgetInfo widgetInfo) {
@@ -2794,6 +2791,11 @@
return mHapticFeedbackTouchListener;
}
+ @Override
+ public void onAccessibilityStateChanged(boolean enabled) {
+ mDragLayer.onAccessibilityStateChanged(enabled);
+ }
+
public void onDragStarted(View view) {
if (isOnCustomContent()) {
// Custom content screen doesn't participate in drag and drop. If on custom
@@ -3905,21 +3907,6 @@
workspace.requestLayout();
}
- /**
- * Implementation of the method from LauncherModel.Callbacks.
- */
- public void bindFolders(final LongArrayMap<FolderInfo> folders) {
- Runnable r = new Runnable() {
- public void run() {
- bindFolders(folders);
- }
- };
- if (waitUntilResume(r)) {
- return;
- }
- sFolders = folders.clone();
- }
-
private void bindSafeModeWidget(LauncherAppWidgetInfo item) {
PendingAppWidgetHostView view = new PendingAppWidgetHostView(this, item, true);
view.updateIcon(mIconCache);
@@ -4698,7 +4685,6 @@
Log.d(TAG, "mWorkspaceLoading=" + mWorkspaceLoading);
Log.d(TAG, "mRestoring=" + mRestoring);
Log.d(TAG, "mWaitingForResult=" + mWaitingForResult);
- Log.d(TAG, "sFolders.size=" + sFolders.size());
mModel.dumpState();
// TODO(hyunyoungs): add mWidgetsView.dumpState(); or mWidgetsModel.dumpState();
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index c4c1946..f2b307b 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -184,7 +184,6 @@
boolean forceAnimateIcons);
public void bindScreens(ArrayList<Long> orderedScreenIds);
public void bindAddScreens(ArrayList<Long> orderedScreenIds);
- public void bindFolders(LongArrayMap<FolderInfo> folders);
public void finishBindingItems();
public void bindAppWidget(LauncherAppWidgetInfo info);
public void bindAllApplications(ArrayList<AppInfo> apps);
@@ -1987,7 +1986,7 @@
// Item is in a user folder
FolderInfo folderInfo =
findOrMakeFolder(sBgFolders, container);
- folderInfo.add(info);
+ folderInfo.add(info, false);
break;
}
sBgItemsIdMap.put(info.id, info);
@@ -2349,29 +2348,6 @@
}
}
- /** Filters the set of folders which are on the specified screen. */
- private void filterCurrentFolders(long currentScreenId,
- LongArrayMap<ItemInfo> itemsIdMap,
- LongArrayMap<FolderInfo> folders,
- LongArrayMap<FolderInfo> currentScreenFolders,
- LongArrayMap<FolderInfo> otherScreenFolders) {
-
- int total = folders.size();
- for (int i = 0; i < total; i++) {
- long id = folders.keyAt(i);
- FolderInfo folder = folders.valueAt(i);
-
- ItemInfo info = itemsIdMap.get(id);
- if (info == null || folder == null) continue;
- if (info.container == LauncherSettings.Favorites.CONTAINER_DESKTOP &&
- info.screenId == currentScreenId) {
- currentScreenFolders.put(id, folder);
- } else {
- otherScreenFolders.put(id, folder);
- }
- }
- }
-
/** Sorts the set of items by hotseat, workspace (spatially from top to bottom, left to
* right) */
private void sortWorkspaceItemsSpatially(ArrayList<ItemInfo> workspaceItems) {
@@ -2428,7 +2404,6 @@
private void bindWorkspaceItems(final Callbacks oldCallbacks,
final ArrayList<ItemInfo> workspaceItems,
final ArrayList<LauncherAppWidgetInfo> appWidgets,
- final LongArrayMap<FolderInfo> folders,
final Executor executor) {
// Bind the workspace items
@@ -2449,19 +2424,6 @@
executor.execute(r);
}
- // Bind the folders
- if (!folders.isEmpty()) {
- final Runnable r = new Runnable() {
- public void run() {
- Callbacks callbacks = tryGetCallbacks(oldCallbacks);
- if (callbacks != null) {
- callbacks.bindFolders(folders);
- }
- }
- };
- executor.execute(r);
- }
-
// Bind the widgets, one at a time
N = appWidgets.size();
for (int i = 0; i < N; i++) {
@@ -2495,21 +2457,14 @@
}
// Save a copy of all the bg-thread collections
- ArrayList<ItemInfo> workspaceItems = new ArrayList<ItemInfo>();
- ArrayList<LauncherAppWidgetInfo> appWidgets =
- new ArrayList<LauncherAppWidgetInfo>();
- ArrayList<Long> orderedScreenIds = new ArrayList<Long>();
-
- final LongArrayMap<FolderInfo> folders;
- final LongArrayMap<ItemInfo> itemsIdMap;
+ ArrayList<ItemInfo> workspaceItems = new ArrayList<>();
+ ArrayList<LauncherAppWidgetInfo> appWidgets = new ArrayList<>();
+ ArrayList<Long> orderedScreenIds = new ArrayList<>();
synchronized (sBgLock) {
workspaceItems.addAll(sBgWorkspaceItems);
appWidgets.addAll(sBgAppWidgets);
orderedScreenIds.addAll(sBgWorkspaceScreens);
-
- folders = sBgFolders.clone();
- itemsIdMap = sBgItemsIdMap.clone();
}
final boolean isLoadingSynchronously =
@@ -2529,21 +2484,15 @@
unbindWorkspaceItemsOnMainThread();
// Separate the items that are on the current screen, and all the other remaining items
- ArrayList<ItemInfo> currentWorkspaceItems = new ArrayList<ItemInfo>();
- ArrayList<ItemInfo> otherWorkspaceItems = new ArrayList<ItemInfo>();
- ArrayList<LauncherAppWidgetInfo> currentAppWidgets =
- new ArrayList<LauncherAppWidgetInfo>();
- ArrayList<LauncherAppWidgetInfo> otherAppWidgets =
- new ArrayList<LauncherAppWidgetInfo>();
- LongArrayMap<FolderInfo> currentFolders = new LongArrayMap<>();
- LongArrayMap<FolderInfo> otherFolders = new LongArrayMap<>();
+ ArrayList<ItemInfo> currentWorkspaceItems = new ArrayList<>();
+ ArrayList<ItemInfo> otherWorkspaceItems = new ArrayList<>();
+ ArrayList<LauncherAppWidgetInfo> currentAppWidgets = new ArrayList<>();
+ ArrayList<LauncherAppWidgetInfo> otherAppWidgets = new ArrayList<>();
filterCurrentWorkspaceItems(currentScreenId, workspaceItems, currentWorkspaceItems,
otherWorkspaceItems);
filterCurrentAppWidgets(currentScreenId, appWidgets, currentAppWidgets,
otherAppWidgets);
- filterCurrentFolders(currentScreenId, itemsIdMap, folders, currentFolders,
- otherFolders);
sortWorkspaceItemsSpatially(currentWorkspaceItems);
sortWorkspaceItemsSpatially(otherWorkspaceItems);
@@ -2563,8 +2512,7 @@
Executor mainExecutor = new DeferredMainThreadExecutor();
// Load items on the current page.
- bindWorkspaceItems(oldCallbacks, currentWorkspaceItems, currentAppWidgets,
- currentFolders, mainExecutor);
+ bindWorkspaceItems(oldCallbacks, currentWorkspaceItems, currentAppWidgets, mainExecutor);
// In case of isLoadingSynchronously, only bind the first screen, and defer binding the
// remaining screens after first onDraw is called. This ensures that the first screen
@@ -2573,8 +2521,7 @@
final Executor deferredExecutor = isLoadingSynchronously ?
new ViewOnDrawExecutor(mHandler) : mainExecutor;
- bindWorkspaceItems(oldCallbacks, otherWorkspaceItems, otherAppWidgets,
- otherFolders, deferredExecutor);
+ bindWorkspaceItems(oldCallbacks, otherWorkspaceItems, otherAppWidgets, deferredExecutor);
// Tell the workspace that we're done binding items
r = new Runnable() {
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index ede4279..3969d30 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -19,7 +19,6 @@
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.SearchManager;
-import android.app.WallpaperManager;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ActivityNotFoundException;
@@ -64,13 +63,10 @@
import com.android.launcher3.compat.UserHandleCompat;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.config.ProviderConfig;
-import com.android.launcher3.dynamicui.ColorExtractionService;
import com.android.launcher3.util.IconNormalizer;
-import com.android.wallpaperpicker.common.WallpaperManagerCompat;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Locale;
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 7cceba4..f04244f 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -3873,7 +3873,7 @@
return getFirstMatch(new ItemOperator() {
@Override
- public boolean evaluate(ItemInfo info, View v, View parent) {
+ public boolean evaluate(ItemInfo info, View v) {
return info != null && info.id == id;
}
});
@@ -3883,7 +3883,7 @@
return getFirstMatch(new ItemOperator() {
@Override
- public boolean evaluate(ItemInfo info, View v, View parent) {
+ public boolean evaluate(ItemInfo info, View v) {
return info == tag;
}
});
@@ -3893,7 +3893,7 @@
return (LauncherAppWidgetHostView) getFirstMatch(new ItemOperator() {
@Override
- public boolean evaluate(ItemInfo info, View v, View parent) {
+ public boolean evaluate(ItemInfo info, View v) {
return (info instanceof LauncherAppWidgetInfo) &&
((LauncherAppWidgetInfo) info).appWidgetId == appWidgetId;
}
@@ -3904,8 +3904,8 @@
final View[] value = new View[1];
mapOverItems(MAP_NO_RECURSE, new ItemOperator() {
@Override
- public boolean evaluate(ItemInfo info, View v, View parent) {
- if (operator.evaluate(info, v, parent)) {
+ public boolean evaluate(ItemInfo info, View v) {
+ if (operator.evaluate(info, v)) {
value[0] = v;
return true;
}
@@ -3918,7 +3918,7 @@
void clearDropTargets() {
mapOverItems(MAP_NO_RECURSE, new ItemOperator() {
@Override
- public boolean evaluate(ItemInfo info, View v, View parent) {
+ public boolean evaluate(ItemInfo info, View v) {
if (v instanceof DropTarget) {
mDragController.removeDropTarget((DropTarget) v);
}
@@ -4014,7 +4014,7 @@
for (FolderInfo folder : folderAppsToRemove.keySet()) {
ArrayList<ShortcutInfo> appsToRemove = folderAppsToRemove.get(folder);
for (ShortcutInfo info : appsToRemove) {
- folder.remove(info);
+ folder.remove(info, false);
}
}
@@ -4044,10 +4044,9 @@
*
* @param info info for the shortcut
* @param view view for the shortcut
- * @param parent containing folder, or null
* @return true if done, false to continue the map
*/
- public boolean evaluate(ItemInfo info, View view, View parent);
+ public boolean evaluate(ItemInfo info, View view);
}
/**
@@ -4074,12 +4073,12 @@
for (int childIdx = 0; childIdx < childCount; childIdx++) {
View child = folderChildren.get(childIdx);
info = (ItemInfo) child.getTag();
- if (op.evaluate(info, child, folder)) {
+ if (op.evaluate(info, child)) {
return;
}
}
} else {
- if (op.evaluate(info, item, null)) {
+ if (op.evaluate(info, item)) {
return;
}
}
@@ -4088,10 +4087,19 @@
}
void updateShortcuts(ArrayList<ShortcutInfo> shortcuts) {
- final HashSet<ShortcutInfo> updates = new HashSet<ShortcutInfo>(shortcuts);
+ int total = shortcuts.size();
+ final HashSet<ShortcutInfo> updates = new HashSet<ShortcutInfo>(total);
+ final HashSet<Long> folderIds = new HashSet<>();
+
+ for (int i = 0; i < total; i++) {
+ ShortcutInfo s = shortcuts.get(i);
+ updates.add(s);
+ folderIds.add(s.container);
+ }
+
mapOverItems(MAP_RECURSE, new ItemOperator() {
@Override
- public boolean evaluate(ItemInfo info, View v, View parent) {
+ public boolean evaluate(ItemInfo info, View v) {
if (info instanceof ShortcutInfo && v instanceof BubbleTextView &&
updates.contains(info)) {
ShortcutInfo si = (ShortcutInfo) info;
@@ -4101,10 +4109,18 @@
&& ((PreloadIconDrawable) oldIcon).hasNotCompleted();
shortcut.applyFromShortcutInfo(si, mIconCache,
si.isPromise() != oldPromiseState);
+ }
+ // process all the shortcuts
+ return false;
+ }
+ });
- if (parent != null) {
- parent.invalidate();
- }
+ // Update folder icons
+ mapOverItems(MAP_NO_RECURSE, new ItemOperator() {
+ @Override
+ public boolean evaluate(ItemInfo info, View v) {
+ if (info instanceof FolderInfo && folderIds.contains(info.id)) {
+ ((FolderInfo) info).itemsChanged(false);
}
// process all the shortcuts
return false;
@@ -4122,7 +4138,7 @@
public void updateRestoreItems(final HashSet<ItemInfo> updates) {
mapOverItems(MAP_RECURSE, new ItemOperator() {
@Override
- public boolean evaluate(ItemInfo info, View v, View parent) {
+ public boolean evaluate(ItemInfo info, View v) {
if (info instanceof ShortcutInfo && v instanceof BubbleTextView
&& updates.contains(info)) {
((BubbleTextView) v).applyState(false);
diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
index c699479..aa6e08e 100644
--- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
+++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
@@ -174,7 +174,7 @@
Folder folder = mLauncher.getWorkspace().getOpenFolder();
mLauncher.closeFolder(folder, true);
ShortcutInfo info = (ShortcutInfo) item;
- folder.getInfo().remove(info);
+ folder.getInfo().remove(info, false);
final int[] coordinates = new int[2];
final long screenId = findSpaceOnWorkspace(item, coordinates);
diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java
index 58f98bf..33ce683 100644
--- a/src/com/android/launcher3/dragndrop/DragLayer.java
+++ b/src/com/android/launcher3/dragndrop/DragLayer.java
@@ -29,6 +29,7 @@
import android.graphics.Region;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.DragEvent;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -43,7 +44,6 @@
import com.android.launcher3.AppWidgetResizeFrame;
import com.android.launcher3.CellLayout;
-import com.android.launcher3.Hotseat;
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.Launcher;
@@ -142,9 +142,9 @@
mLauncher = launcher;
mDragController = controller;
- if (!FeatureFlags.LAUNCHER3_DISABLE_PINCH_TO_OVERVIEW) {
- mPinchListener = new PinchToOverviewListener(mLauncher);
- }
+ boolean isAccessibilityEnabled = ((AccessibilityManager) mLauncher.getSystemService(
+ Context.ACCESSIBILITY_SERVICE)).isEnabled();
+ onAccessibilityStateChanged(isAccessibilityEnabled);
}
@Override
@@ -152,6 +152,11 @@
return mDragController.dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
}
+ public void onAccessibilityStateChanged(boolean isAccessibilityEnabled) {
+ mPinchListener = FeatureFlags.LAUNCHER3_DISABLE_PINCH_TO_OVERVIEW || isAccessibilityEnabled
+ ? null : new PinchToOverviewListener(mLauncher);
+ }
+
public void showOverlayView(View overlayView) {
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mOverlayView = overlayView;
diff --git a/src/com/android/launcher3/dynamicui/ExtractionUtils.java b/src/com/android/launcher3/dynamicui/ExtractionUtils.java
index a2ff607..0b28ba6 100644
--- a/src/com/android/launcher3/dynamicui/ExtractionUtils.java
+++ b/src/com/android/launcher3/dynamicui/ExtractionUtils.java
@@ -22,7 +22,6 @@
import android.content.SharedPreferences;
import com.android.launcher3.Utilities;
-import com.android.wallpaperpicker.common.WallpaperManagerCompat;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -34,6 +33,8 @@
public static final String EXTRACTED_COLORS_PREFERENCE_KEY = "pref_extractedColors";
public static final String WALLPAPER_ID_PREFERENCE_KEY = "pref_wallpaperId";
+ private static final int FLAG_SET_SYSTEM = 1 << 0; // TODO: use WallpaperManager.FLAG_SET_SYSTEM
+
/**
* Extract colors in the :wallpaper-chooser process, if the wallpaper id has changed.
* When the new colors are saved in the LauncherProvider,
@@ -66,8 +67,7 @@
// TODO: use WallpaperManager#getWallpaperId(WallpaperManager.FLAG_SET_SYSTEM) directly.
try {
Method getWallpaperId = WallpaperManager.class.getMethod("getWallpaperId", int.class);
- return (int) getWallpaperId.invoke(wallpaperManager,
- WallpaperManagerCompat.FLAG_SET_SYSTEM);
+ return (int) getWallpaperId.invoke(wallpaperManager, FLAG_SET_SYSTEM);
} catch (InvocationTargetException | NoSuchMethodException | IllegalAccessException e) {
return -1;
}
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index 087670e..09a92a9 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -300,7 +300,7 @@
mCurrentDragView = v;
mContent.removeItem(mCurrentDragView);
- mInfo.remove(mCurrentDragInfo);
+ mInfo.remove(mCurrentDragInfo, true);
mDragInProgress = true;
mItemAddedBackToSelfViaIcon = false;
}
@@ -426,8 +426,9 @@
// If our folder has too many items we prune them from the list. This is an issue
// when upgrading from the old Folders implementation which could contain an unlimited
// number of items.
+ // TODO: Remove this, as with multi-page folders, there will never be any overflow
for (ShortcutInfo item: overflow) {
- mInfo.remove(item);
+ mInfo.remove(item, false);
LauncherModel.deleteItemFromDatabase(mLauncher, item);
}
@@ -1330,7 +1331,7 @@
// Temporarily suppress the listener, as we did all the work already here.
mSuppressOnAdd = true;
- mInfo.add(si);
+ mInfo.add(si, false);
mSuppressOnAdd = false;
// Clear the drag info, as it is no longer being dragged.
mCurrentDragInfo = null;
@@ -1390,13 +1391,14 @@
return mContent.iterateOverItems(new ItemOperator() {
@Override
- public boolean evaluate(ItemInfo info, View view, View parent) {
+ public boolean evaluate(ItemInfo info, View view) {
return info == item;
}
});
}
- public void onItemsChanged() {
+ @Override
+ public void onItemsChanged(boolean animate) {
updateTextViewFocus();
}
@@ -1409,7 +1411,7 @@
mContent.iterateOverItems(new ItemOperator() {
@Override
- public boolean evaluate(ItemInfo info, View view, View parent) {
+ public boolean evaluate(ItemInfo info, View view) {
mItemsInReadingOrder.add(view);
return false;
}
diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java
index b7e11f1..d76608a 100644
--- a/src/com/android/launcher3/folder/FolderIcon.java
+++ b/src/com/android/launcher3/folder/FolderIcon.java
@@ -224,7 +224,7 @@
}
public void addItem(ShortcutInfo item) {
- mInfo.add(item);
+ mInfo.add(item, true);
}
public void onDragEnter(ItemInfo dragInfo) {
@@ -937,8 +937,9 @@
}
}
- public void onItemsChanged() {
- updateItemDrawingParams(true);
+ @Override
+ public void onItemsChanged(boolean animate) {
+ updateItemDrawingParams(animate);
invalidate();
requestLayout();
}
diff --git a/src/com/android/launcher3/folder/FolderPagedView.java b/src/com/android/launcher3/folder/FolderPagedView.java
index c25444e..1af1485 100644
--- a/src/com/android/launcher3/folder/FolderPagedView.java
+++ b/src/com/android/launcher3/folder/FolderPagedView.java
@@ -454,7 +454,7 @@
for (int j = 0; j < page.getCountY(); j++) {
for (int i = 0; i < page.getCountX(); i++) {
View v = page.getChildAt(i, j);
- if ((v != null) && op.evaluate((ItemInfo) v.getTag(), v, this)) {
+ if ((v != null) && op.evaluate((ItemInfo) v.getTag(), v)) {
return v;
}
}
diff --git a/src/com/android/launcher3/util/ManagedProfileHeuristic.java b/src/com/android/launcher3/util/ManagedProfileHeuristic.java
index fb9bbb2..3925c40 100644
--- a/src/com/android/launcher3/util/ManagedProfileHeuristic.java
+++ b/src/com/android/launcher3/util/ManagedProfileHeuristic.java
@@ -188,7 +188,7 @@
@Override
public void run() {
for (ShortcutInfo info : shortcuts) {
- workFolder.add(info);
+ workFolder.add(info, false);
}
}
});
@@ -200,7 +200,7 @@
// Add all shortcuts before adding it to the UI, as an empty folder might get deleted.
for (ShortcutInfo info : mWorkFolderApps) {
- workFolder.add(info);
+ workFolder.add(info, false);
}
// Add the item to home screen and DB. This also generates an item id synchronously.