Merge "Fix app to folder icon animation." into ub-launcher3-master
diff --git a/quickstep/src/com/android/quickstep/OverviewInteractionState.java b/quickstep/src/com/android/quickstep/OverviewInteractionState.java
index 411e593..a0ab301 100644
--- a/quickstep/src/com/android/quickstep/OverviewInteractionState.java
+++ b/quickstep/src/com/android/quickstep/OverviewInteractionState.java
@@ -175,7 +175,7 @@
}
}
- public void notifySwipeUpSettingChanged(boolean swipeUpEnabled) {
+ private void notifySwipeUpSettingChanged(boolean swipeUpEnabled) {
mUiHandler.removeMessages(MSG_SET_SWIPE_UP_ENABLED);
mUiHandler.obtainMessage(MSG_SET_SWIPE_UP_ENABLED, swipeUpEnabled ? 1 : 0, 0).
sendToTarget();
diff --git a/quickstep/tests/src/com/android/quickstep/QuickStepOnOffRule.java b/quickstep/tests/src/com/android/quickstep/QuickStepOnOffRule.java
index 7274090..c5975a9 100644
--- a/quickstep/tests/src/com/android/quickstep/QuickStepOnOffRule.java
+++ b/quickstep/tests/src/com/android/quickstep/QuickStepOnOffRule.java
@@ -19,6 +19,11 @@
import static com.android.quickstep.QuickStepOnOffRule.Mode.BOTH;
import static com.android.quickstep.QuickStepOnOffRule.Mode.OFF;
import static com.android.quickstep.QuickStepOnOffRule.Mode.ON;
+import static com.android.systemui.shared.system.SettingsCompat.SWIPE_UP_SETTING_NAME;
+
+import static org.junit.Assert.assertTrue;
+
+import android.provider.Settings;
import androidx.test.InstrumentationRegistry;
@@ -69,38 +74,52 @@
@Override
public void evaluate() throws Throwable {
try {
- if (mode == ON || mode == BOTH) {
- evaluateWithQuickstepOn();
- }
- if (mode == OFF || mode == BOTH) {
- evaluateWithQuickstepOff();
+ if (SwipeUpSetting.isSwipeUpSettingAvailable()) {
+ if (mode == ON || mode == BOTH) {
+ evaluateWithQuickstepOn();
+ }
+ if (mode == OFF || mode == BOTH) {
+ evaluateWithQuickstepOff();
+ }
+ } else {
+ // Execute without changing the setting, if the requested mode is
+ // compatible.
+ final boolean swipeUpEnabledDefaultValue =
+ SwipeUpSetting.isSwipeUpEnabledDefaultValue();
+ if (mode == BOTH ||
+ mode == ON && swipeUpEnabledDefaultValue ||
+ mode == OFF && !swipeUpEnabledDefaultValue) {
+ evaluateWithoutChangingSetting(base);
+ }
}
} finally {
- overrideSwipeUpEnabled(null);
+ setSwipeUpSetting(null);
+
}
}
- private void evaluateWithQuickstepOff() throws Throwable {
- overrideSwipeUpEnabled(false);
+ public void setSwipeUpSetting(String value) {
+ assertTrue("Couldn't change Quickstep mode",
+ Settings.Secure.putString(
+ InstrumentationRegistry.getInstrumentation().getTargetContext().
+ getContentResolver(),
+ SWIPE_UP_SETTING_NAME,
+ value));
+ }
+
+ public void evaluateWithoutChangingSetting(Statement base) throws Throwable {
base.evaluate();
}
+ private void evaluateWithQuickstepOff() throws Throwable {
+ setSwipeUpSetting("0");
+ evaluateWithoutChangingSetting(base);
+ }
+
private void evaluateWithQuickstepOn() throws Throwable {
- overrideSwipeUpEnabled(true);
+ setSwipeUpSetting("1");
base.evaluate();
}
-
- private void overrideSwipeUpEnabled(Boolean swipeUpEnabledOverride)
- throws Throwable {
- mLauncher.overrideSwipeUpEnabled(swipeUpEnabledOverride);
- mMainThreadExecutor.execute(() -> OverviewInteractionState.INSTANCE.get(
- InstrumentationRegistry.getInstrumentation().getTargetContext()).
- notifySwipeUpSettingChanged(mLauncher.isSwipeUpEnabled()));
- // TODO(b/124236673): avoid using sleep().
- mLauncher.getDevice().waitForIdle();
- Thread.sleep(2000);
- mLauncher.getDevice().waitForIdle();
- }
};
} else {
return base;
diff --git a/res/drawable/horizontal_ellipsis.xml b/res/drawable/horizontal_ellipsis.xml
index ad08529..65e958d 100644
--- a/res/drawable/horizontal_ellipsis.xml
+++ b/res/drawable/horizontal_ellipsis.xml
@@ -22,6 +22,6 @@
android:tint="?android:attr/textColorSecondary" >
<path
- android:pathData="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"
+ android:pathData="M6 10c-1.1 0-2 0.9-2 2s0.9 2 2 2 2-0.9 2-2-0.9-2-2-2zm12 0c-1.1 0-2 0.9-2 2s0.9 2 2 2 2-0.9 2-2-0.9-2-2-2zm-6 0c-1.1 0-2 0.9-2 2s0.9 2 2 2 2-0.9 2-2-0.9-2-2-2z"
android:fillColor="@android:color/white" />
</vector>
\ No newline at end of file
diff --git a/src/com/android/launcher3/AutoInstallsLayout.java b/src/com/android/launcher3/AutoInstallsLayout.java
index e5b1448..62bc53a 100644
--- a/src/com/android/launcher3/AutoInstallsLayout.java
+++ b/src/com/android/launcher3/AutoInstallsLayout.java
@@ -24,7 +24,6 @@
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -33,9 +32,11 @@
import android.os.Process;
import android.text.TextUtils;
import android.util.ArrayMap;
+import android.util.AttributeSet;
import android.util.Log;
import android.util.Pair;
import android.util.Patterns;
+import android.util.Xml;
import com.android.launcher3.LauncherProvider.SqlArguments;
import com.android.launcher3.LauncherSettings.Favorites;
@@ -149,9 +150,6 @@
private static final String HOTSEAT_CONTAINER_NAME =
Favorites.containerToString(Favorites.CONTAINER_HOTSEAT);
- private static final String ACTION_APPWIDGET_DEFAULT_WORKSPACE_CONFIGURE =
- "com.android.launcher.action.APPWIDGET_DEFAULT_WORKSPACE_CONFIGURE";
-
@Thunk final Context mContext;
@Thunk final AppWidgetHost mAppWidgetHost;
protected final LayoutParserCallback mCallback;
@@ -207,7 +205,7 @@
*/
protected int parseLayout(int layoutId, IntArray screenIds)
throws XmlPullParserException, IOException {
- XmlResourceParser parser = mSourceRes.getXml(layoutId);
+ XmlPullParser parser = mSourceRes.getXml(layoutId);
beginDocument(parser, mRootTag);
final int depth = parser.getDepth();
int type;
@@ -228,7 +226,7 @@
* Parses container and screenId attribute from the current tag, and puts it in the out.
* @param out array of size 2.
*/
- protected void parseContainerAndScreen(XmlResourceParser parser, int[] out) {
+ protected void parseContainerAndScreen(XmlPullParser parser, int[] out) {
if (HOTSEAT_CONTAINER_NAME.equals(getAttributeValue(parser, ATTR_CONTAINER))) {
out[0] = Favorites.CONTAINER_HOTSEAT;
// Hack: hotseat items are stored using screen ids
@@ -243,7 +241,7 @@
* Parses the current node and returns the number of elements added.
*/
protected int parseAndAddNode(
- XmlResourceParser parser, ArrayMap<String, TagParser> tagParserMap, IntArray screenIds)
+ XmlPullParser parser, ArrayMap<String, TagParser> tagParserMap, IntArray screenIds)
throws XmlPullParserException, IOException {
if (TAG_INCLUDE.equals(parser.getName())) {
@@ -324,7 +322,7 @@
* Parses the tag and adds to the db
* @return the id of the row added or -1;
*/
- int parseAndAdd(XmlResourceParser parser)
+ int parseAndAdd(XmlPullParser parser)
throws XmlPullParserException, IOException;
}
@@ -334,7 +332,7 @@
protected class AppShortcutParser implements TagParser {
@Override
- public int parseAndAdd(XmlResourceParser parser) {
+ public int parseAndAdd(XmlPullParser parser) {
final String packageName = getAttributeValue(parser, ATTR_PACKAGE_NAME);
final String className = getAttributeValue(parser, ATTR_CLASS_NAME);
@@ -371,7 +369,7 @@
/**
* Helper method to allow extending the parser capabilities
*/
- protected int invalidPackageOrClass(XmlResourceParser parser) {
+ protected int invalidPackageOrClass(XmlPullParser parser) {
Log.w(TAG, "Skipping invalid <favorite> with no component");
return -1;
}
@@ -383,7 +381,7 @@
protected class AutoInstallParser implements TagParser {
@Override
- public int parseAndAdd(XmlResourceParser parser) {
+ public int parseAndAdd(XmlPullParser parser) {
final String packageName = getAttributeValue(parser, ATTR_PACKAGE_NAME);
final String className = getAttributeValue(parser, ATTR_CLASS_NAME);
if (TextUtils.isEmpty(packageName) || TextUtils.isEmpty(className)) {
@@ -414,7 +412,7 @@
}
@Override
- public int parseAndAdd(XmlResourceParser parser) {
+ public int parseAndAdd(XmlPullParser parser) {
final int titleResId = getAttributeResourceValue(parser, ATTR_TITLE, 0);
final int iconId = getAttributeResourceValue(parser, ATTR_ICON, 0);
@@ -449,7 +447,7 @@
intent, Favorites.ITEM_TYPE_SHORTCUT);
}
- protected Intent parseIntent(XmlResourceParser parser) {
+ protected Intent parseIntent(XmlPullParser parser) {
final String url = getAttributeValue(parser, ATTR_URL);
if (TextUtils.isEmpty(url) || !Patterns.WEB_URL.matcher(url).matches()) {
if (LOGD) Log.d(TAG, "Ignoring shortcut, invalid url: " + url);
@@ -470,7 +468,7 @@
protected class PendingWidgetParser implements TagParser {
@Override
- public int parseAndAdd(XmlResourceParser parser)
+ public int parseAndAdd(XmlPullParser parser)
throws XmlPullParserException, IOException {
final String packageName = getAttributeValue(parser, ATTR_PACKAGE_NAME);
final String className = getAttributeValue(parser, ATTR_CLASS_NAME);
@@ -541,7 +539,7 @@
}
@Override
- public int parseAndAdd(XmlResourceParser parser)
+ public int parseAndAdd(XmlPullParser parser)
throws XmlPullParserException, IOException {
final String title;
final int titleResId = getAttributeResourceValue(parser, ATTR_TITLE, 0);
@@ -649,7 +647,7 @@
* Return attribute value, attempting launcher-specific namespace first
* before falling back to anonymous attribute.
*/
- protected static String getAttributeValue(XmlResourceParser parser, String attribute) {
+ protected static String getAttributeValue(XmlPullParser parser, String attribute) {
String value = parser.getAttributeValue(
"http://schemas.android.com/apk/res-auto/com.android.launcher3", attribute);
if (value == null) {
@@ -662,13 +660,14 @@
* Return attribute resource value, attempting launcher-specific namespace
* first before falling back to anonymous attribute.
*/
- protected static int getAttributeResourceValue(XmlResourceParser parser, String attribute,
+ protected static int getAttributeResourceValue(XmlPullParser parser, String attribute,
int defaultValue) {
- int value = parser.getAttributeResourceValue(
+ AttributeSet attrs = Xml.asAttributeSet(parser);
+ int value = attrs.getAttributeResourceValue(
"http://schemas.android.com/apk/res-auto/com.android.launcher3", attribute,
defaultValue);
if (value == defaultValue) {
- value = parser.getAttributeResourceValue(null, attribute, defaultValue);
+ value = attrs.getAttributeResourceValue(null, attribute, defaultValue);
}
return value;
}
diff --git a/src/com/android/launcher3/DefaultLayoutParser.java b/src/com/android/launcher3/DefaultLayoutParser.java
index 44830e8..75297f6 100644
--- a/src/com/android/launcher3/DefaultLayoutParser.java
+++ b/src/com/android/launcher3/DefaultLayoutParser.java
@@ -10,7 +10,6 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
-import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -76,7 +75,7 @@
}
@Override
- protected void parseContainerAndScreen(XmlResourceParser parser, int[] out) {
+ protected void parseContainerAndScreen(XmlPullParser parser, int[] out) {
out[0] = LauncherSettings.Favorites.CONTAINER_DESKTOP;
String strContainer = getAttributeValue(parser, ATTR_CONTAINER);
if (strContainer != null) {
@@ -91,7 +90,7 @@
public class AppShortcutWithUriParser extends AppShortcutParser {
@Override
- protected int invalidPackageOrClass(XmlResourceParser parser) {
+ protected int invalidPackageOrClass(XmlPullParser parser) {
final String uri = getAttributeValue(parser, ATTR_URI);
if (TextUtils.isEmpty(uri)) {
Log.e(TAG, "Skipping invalid <favorite> with no component or uri");
@@ -185,7 +184,7 @@
}
@Override
- protected Intent parseIntent(XmlResourceParser parser) {
+ protected Intent parseIntent(XmlPullParser parser) {
String uri = null;
try {
uri = getAttributeValue(parser, ATTR_URI);
@@ -205,7 +204,7 @@
private final AppShortcutWithUriParser mChildParser = new AppShortcutWithUriParser();
@Override
- public int parseAndAdd(XmlResourceParser parser) throws XmlPullParserException,
+ public int parseAndAdd(XmlPullParser parser) throws XmlPullParserException,
IOException {
final int groupDepth = parser.getDepth();
int type;
@@ -233,7 +232,7 @@
@Thunk class PartnerFolderParser implements TagParser {
@Override
- public int parseAndAdd(XmlResourceParser parser) throws XmlPullParserException,
+ public int parseAndAdd(XmlPullParser parser) throws XmlPullParserException,
IOException {
// Folder contents come from an external XML resource
final Partner partner = Partner.get(mPackageManager);
@@ -242,7 +241,7 @@
final int resId = partnerRes.getIdentifier(Partner.RES_FOLDER,
"xml", partner.getPackageName());
if (resId != 0) {
- final XmlResourceParser partnerParser = partnerRes.getXml(resId);
+ final XmlPullParser partnerParser = partnerRes.getXml(resId);
beginDocument(partnerParser, TAG_FOLDER);
FolderParser folderParser = new FolderParser(getFolderElementsMap(partnerRes));
@@ -259,7 +258,7 @@
@Thunk class MyFolderParser extends FolderParser {
@Override
- public int parseAndAdd(XmlResourceParser parser) throws XmlPullParserException,
+ public int parseAndAdd(XmlPullParser parser) throws XmlPullParserException,
IOException {
final int resId = getAttributeResourceValue(parser, ATTR_FOLDER_ITEMS, 0);
if (resId != 0) {
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index 7c4a035..e699500 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -617,14 +617,14 @@
* eg {@link LauncherActivityInfo} or {@link ShortcutInfoCompat}.
*/
public static Drawable getFullDrawable(Launcher launcher, ItemInfo info, int width, int height,
- Object[] outObj) {
+ boolean flattenDrawable, Object[] outObj) {
LauncherAppState appState = LauncherAppState.getInstance(launcher);
if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION) {
LauncherActivityInfo activityInfo = LauncherAppsCompat.getInstance(launcher)
.resolveActivity(info.getIntent(), info.user);
outObj[0] = activityInfo;
return (activityInfo != null) ? appState.getIconCache()
- .getFullResIcon(activityInfo, false) : null;
+ .getFullResIcon(activityInfo, flattenDrawable) : null;
} else if (info.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT) {
if (info instanceof PendingAddShortcutInfo) {
ShortcutConfigActivityInfo activityInfo =
diff --git a/src/com/android/launcher3/config/BaseFlags.java b/src/com/android/launcher3/config/BaseFlags.java
index 8c57f46..b350767 100644
--- a/src/com/android/launcher3/config/BaseFlags.java
+++ b/src/com/android/launcher3/config/BaseFlags.java
@@ -116,7 +116,7 @@
"ENABLE_HINTS_IN_OVERVIEW", false,
"Show chip hints and gleams on the overview screen");
- public static final TogglableFlag ENABLE_ASSISTANT_GESTURE = new TogglableFlag(
+ public static final TogglableFlag ENABLE_ASSISTANT_GESTURE = new ToggleableGlobalSettingsFlag(
"ENABLE_ASSISTANT_GESTURE", false,
"Enable swipe up from the bottom right corner to start assistant");
diff --git a/src/com/android/launcher3/dragndrop/DragView.java b/src/com/android/launcher3/dragndrop/DragView.java
index 8a27f9d..bdbea29 100644
--- a/src/com/android/launcher3/dragndrop/DragView.java
+++ b/src/com/android/launcher3/dragndrop/DragView.java
@@ -199,7 +199,8 @@
Object[] outObj = new Object[1];
int w = mBitmap.getWidth();
int h = mBitmap.getHeight();
- Drawable dr = Utilities.getFullDrawable(mLauncher, info, w, h, outObj);
+ Drawable dr = Utilities.getFullDrawable(mLauncher, info, w, h,
+ false /* flattenDrawable */, outObj);
if (dr instanceof AdaptiveIconDrawable) {
int blurMargin = (int) mLauncher.getResources()
diff --git a/src/com/android/launcher3/views/FloatingIconView.java b/src/com/android/launcher3/views/FloatingIconView.java
index f6da014..23ddd98 100644
--- a/src/com/android/launcher3/views/FloatingIconView.java
+++ b/src/com/android/launcher3/views/FloatingIconView.java
@@ -188,7 +188,8 @@
private void getIcon(Launcher launcher, View v, ItemInfo info, boolean useDrawableAsIs,
float aspectRatio) {
final LayoutParams lp = (LayoutParams) getLayoutParams();
- mDrawable = Utilities.getFullDrawable(launcher, info, lp.width, lp.height, new Object[1]);
+ mDrawable = Utilities.getFullDrawable(launcher, info, lp.width, lp.height, useDrawableAsIs,
+ new Object[1]);
if (ADAPTIVE_ICON_WINDOW_ANIM.get() && !useDrawableAsIs
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
index 7473189..93b4cc6 100644
--- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
+++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
@@ -93,8 +93,6 @@
private static WeakReference<VisibleContainer> sActiveContainer = new WeakReference<>(null);
private final UiDevice mDevice;
- private final boolean mSwipeUpEnabled;
- private Boolean mSwipeUpEnabledOverride = null;
private final Instrumentation mInstrumentation;
private int mExpectedRotation = Surface.ROTATION_0;
@@ -104,13 +102,6 @@
public LauncherInstrumentation(Instrumentation instrumentation) {
mInstrumentation = instrumentation;
mDevice = UiDevice.getInstance(instrumentation);
- final boolean swipeUpEnabledDefaultValue = SwipeUpSetting.isSwipeUpEnabledDefaultValue();
- mSwipeUpEnabled = SwipeUpSetting.isSwipeUpSettingAvailable() ?
- Settings.Secure.getInt(
- instrumentation.getTargetContext().getContentResolver(),
- SWIPE_UP_SETTING_NAME,
- swipeUpEnabledDefaultValue ? 1 : 0) == 1 :
- swipeUpEnabledDefaultValue;
// Launcher should run in test harness so that custom accessibility protocol between
// Launcher and TAPL is enabled. In-process tests enable this protocol with a direct call
@@ -119,17 +110,18 @@
TestHelpers.isInLauncherProcess() || ActivityManager.isRunningInTestHarness());
}
- // Used only by TaplTests.
- public void overrideSwipeUpEnabled(Boolean swipeUpEnabledOverride) {
- mSwipeUpEnabledOverride = swipeUpEnabledOverride;
- }
-
void setActiveContainer(VisibleContainer container) {
sActiveContainer = new WeakReference<>(container);
}
public boolean isSwipeUpEnabled() {
- return mSwipeUpEnabledOverride != null ? mSwipeUpEnabledOverride : mSwipeUpEnabled;
+ final boolean swipeUpEnabledDefaultValue = SwipeUpSetting.isSwipeUpEnabledDefaultValue();
+ return SwipeUpSetting.isSwipeUpSettingAvailable() ?
+ Settings.Secure.getInt(
+ mInstrumentation.getTargetContext().getContentResolver(),
+ SWIPE_UP_SETTING_NAME,
+ swipeUpEnabledDefaultValue ? 1 : 0) == 1 :
+ swipeUpEnabledDefaultValue;
}
static void log(String message) {