Merge "Center folders slightly less aggressively than before" into ub-launcher3-calgary
diff --git a/build.gradle b/build.gradle
index b5eeeb0..6620c10 100644
--- a/build.gradle
+++ b/build.gradle
@@ -40,7 +40,6 @@
androidTest {
java.srcDirs = ['tests/src']
- res.srcDirs = ['tests/res']
manifest.srcFile "tests/AndroidManifest.xml"
}
}
diff --git a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
index 54ce0fd..c5b3104 100644
--- a/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
+++ b/src/com/android/launcher3/AppWidgetsRestoredReceiver.java
@@ -9,17 +9,13 @@
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
-import android.os.AsyncTask;
import android.util.Log;
import com.android.launcher3.LauncherSettings.Favorites;
-import java.util.ArrayList;
-import java.util.List;
-
public class AppWidgetsRestoredReceiver extends BroadcastReceiver {
- private static final String TAG = "AppWidgetsRestoredReceiver";
+ private static final String TAG = "AWRestoredReceiver";
@Override
public void onReceive(Context context, Intent intent) {
@@ -39,8 +35,8 @@
*/
static void restoreAppWidgetIds(Context context, int[] oldWidgetIds, int[] newWidgetIds) {
final ContentResolver cr = context.getContentResolver();
- final List<Integer> idsToRemove = new ArrayList<Integer>();
final AppWidgetManager widgets = AppWidgetManager.getInstance(context);
+ AppWidgetHost appWidgetHost = new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID);
for (int i = 0; i < oldWidgetIds.length; i++) {
Log.i(TAG, "Widget state restore id " + oldWidgetIds[i] + " => " + newWidgetIds[i]);
@@ -69,28 +65,13 @@
try {
if (!cursor.moveToFirst()) {
// The widget no long exists.
- idsToRemove.add(newWidgetIds[i]);
+ appWidgetHost.deleteAppWidgetId(newWidgetIds[i]);
}
} finally {
cursor.close();
}
}
}
- // Unregister the widget IDs which are not present on the workspace. This could happen
- // when a widget place holder is removed from workspace, before this method is called.
- if (!idsToRemove.isEmpty()) {
- final AppWidgetHost appWidgetHost =
- new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID);
- new AsyncTask<Void, Void, Void>() {
- public Void doInBackground(Void ... args) {
- for (Integer id : idsToRemove) {
- appWidgetHost.deleteAppWidgetId(id);
- Log.e(TAG, "Widget no longer present, appWidgetId=" + id);
- }
- return null;
- }
- }.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR);
- }
LauncherAppState app = LauncherAppState.getInstanceNoCreate();
if (app != null) {
diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java
index d601322..0742df9 100644
--- a/src/com/android/launcher3/InvariantDeviceProfile.java
+++ b/src/com/android/launcher3/InvariantDeviceProfile.java
@@ -83,6 +83,8 @@
DeviceProfile landscapeProfile;
DeviceProfile portraitProfile;
+ public Point defaultWallpaperSize;
+
public InvariantDeviceProfile() {
}
@@ -166,6 +168,16 @@
largeSide, smallSide, true /* isLandscape */);
portraitProfile = new DeviceProfile(context, this, smallestSize, largestSize,
smallSide, largeSide, false /* isLandscape */);
+
+ // We need to ensure that there is enough extra space in the wallpaper
+ // for the intended parallax effects
+ if (context.getResources().getConfiguration().smallestScreenWidthDp >= 720) {
+ defaultWallpaperSize = new Point(
+ (int) (largeSide * wallpaperTravelToScreenWidthRatio(largeSide, smallSide)),
+ largeSide);
+ } else {
+ defaultWallpaperSize = new Point(Math.max(smallSide * 2, largeSide), largeSide);
+ }
}
ArrayList<InvariantDeviceProfile> getPredefinedDeviceProfiles() {
@@ -299,4 +311,34 @@
}
return (float) (WEIGHT_EFFICIENT / Math.pow(d, pow));
}
+
+ /**
+ * As a ratio of screen height, the total distance we want the parallax effect to span
+ * horizontally
+ */
+ private static float wallpaperTravelToScreenWidthRatio(int width, int height) {
+ float aspectRatio = width / (float) height;
+
+ // At an aspect ratio of 16/10, the wallpaper parallax effect should span 1.5 * screen width
+ // At an aspect ratio of 10/16, the wallpaper parallax effect should span 1.2 * screen width
+ // We will use these two data points to extrapolate how much the wallpaper parallax effect
+ // to span (ie travel) at any aspect ratio:
+
+ final float ASPECT_RATIO_LANDSCAPE = 16/10f;
+ final float ASPECT_RATIO_PORTRAIT = 10/16f;
+ final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE = 1.5f;
+ final float WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT = 1.2f;
+
+ // To find out the desired width at different aspect ratios, we use the following two
+ // formulas, where the coefficient on x is the aspect ratio (width/height):
+ // (16/10)x + y = 1.5
+ // (10/16)x + y = 1.2
+ // We solve for x and y and end up with a final formula:
+ final float x =
+ (WALLPAPER_WIDTH_TO_SCREEN_RATIO_LANDSCAPE - WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT) /
+ (ASPECT_RATIO_LANDSCAPE - ASPECT_RATIO_PORTRAIT);
+ final float y = WALLPAPER_WIDTH_TO_SCREEN_RATIO_PORTRAIT - x * ASPECT_RATIO_PORTRAIT;
+ return x * aspectRatio + y;
+ }
+
}
\ No newline at end of file
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 36b9ab0..fd614a4 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -120,7 +120,6 @@
import com.android.launcher3.widget.PendingAddWidgetInfo;
import com.android.launcher3.widget.WidgetHostViewLoader;
import com.android.launcher3.widget.WidgetsContainerView;
-import com.android.wallpaperpicker.WallpaperUtils;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -2742,7 +2741,7 @@
int pageScroll = mWorkspace.getScrollForPage(mWorkspace.getPageNearestToCenterOfScreen());
float offset = mWorkspace.mWallpaperOffset.wallpaperOffsetForScroll(pageScroll);
startActivityForResult(new Intent(Intent.ACTION_SET_WALLPAPER).setPackage(getPackageName())
- .putExtra(WallpaperUtils.EXTRA_WALLPAPER_OFFSET, offset),
+ .putExtra(Utilities.EXTRA_WALLPAPER_OFFSET, offset),
REQUEST_PICK_WALLPAPER);
if (mLauncherCallbacks != null) {
@@ -4495,17 +4494,6 @@
}
/**
- * This method indicates whether or not we should suggest default wallpaper dimensions
- * when our wallpaper cropper was not yet used to set a wallpaper.
- */
- protected boolean overrideWallpaperDimensions() {
- if (mLauncherCallbacks != null) {
- return mLauncherCallbacks.overrideWallpaperDimensions();
- }
- return true;
- }
-
- /**
* To be overridden by subclasses to indicate that there is an activity to launch
* before showing the standard launcher experience.
*/
diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java
index fc7ff70..635d413 100644
--- a/src/com/android/launcher3/LauncherCallbacks.java
+++ b/src/com/android/launcher3/LauncherCallbacks.java
@@ -105,6 +105,7 @@
public View getIntroScreen();
public boolean shouldMoveToDefaultScreenOnHomeIntent();
public boolean hasSettings();
+ @Deprecated
public boolean overrideWallpaperDimensions();
public boolean isLauncherPreinstalled();
public AllAppsSearchBarController getAllAppsSearchBarController();
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 47ceb8c..207121b 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -527,13 +527,8 @@
private long mMaxScreenId = -1;
DatabaseHelper(Context context, LauncherProvider provider) {
- super(new NoLocaleSqliteContext(context), LauncherFiles.LAUNCHER_DB,
- null, DATABASE_VERSION);
- mContext = context;
- mProvider = provider;
-
- mAppWidgetHost = new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID);
-
+ this(context, provider, LauncherFiles.LAUNCHER_DB,
+ new AppWidgetHost(context, Launcher.APPWIDGET_HOST_ID));
// Table creation sometimes fails silently, which leads to a crash loop.
// This way, we will try to create a table every time after crash, so the device
// would eventually be able to recover.
@@ -544,6 +539,21 @@
addWorkspacesTable(getWritableDatabase(), true);
}
+ initIds();
+ }
+
+ /**
+ * Constructor used only in tests.
+ */
+ public DatabaseHelper(
+ Context context, LauncherProvider provider, String tableName, AppWidgetHost host) {
+ super(new NoLocaleSqliteContext(context), tableName, null, DATABASE_VERSION);
+ mContext = context;
+ mProvider = provider;
+ mAppWidgetHost = host;
+ }
+
+ protected void initIds() {
// In the case where neither onCreate nor onUpgrade gets called, we read the maxId from
// the DB here
if (mMaxItemId == -1) {
@@ -554,19 +564,6 @@
}
}
- /**
- * Constructor used only in tests.
- */
- public DatabaseHelper(Context context, LauncherProvider provider, String tableName) {
- super(new NoLocaleSqliteContext(context), tableName, null, DATABASE_VERSION);
- mContext = context;
- mProvider = provider;
-
- mAppWidgetHost = null;
- mMaxItemId = initializeMaxItemId(getWritableDatabase());
- mMaxScreenId = initializeMaxScreenId(getWritableDatabase());
- }
-
private boolean tableExists(String tableName) {
Cursor c = getReadableDatabase().query(
true, "sqlite_master", new String[] {"tbl_name"},
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index ee25e81..3969d30 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -119,6 +119,9 @@
public static final boolean ATLEAST_JB_MR2 =
Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
+ // An intent extra to indicate the horizontal scroll of the wallpaper.
+ public static final String EXTRA_WALLPAPER_OFFSET = "com.android.launcher3.WALLPAPER_OFFSET";
+
// These values are same as that in {@link AsyncTask}.
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 89779d5..9f4c099 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -1382,17 +1382,17 @@
}
protected void setWallpaperDimension() {
- new AsyncTask<Void, Void, Void>() {
- public Void doInBackground(Void ... args) {
- if (Utilities.ATLEAST_KITKAT) {
- WallpaperUtils.suggestWallpaperDimension(mLauncher);
- } else {
- WallpaperUtils.suggestWallpaperDimensionPreK(mLauncher,
- mLauncher.overrideWallpaperDimensions());
+ Utilities.THREAD_POOL_EXECUTOR.execute(new Runnable() {
+ @Override
+ public void run() {
+ final Point size = LauncherAppState.getInstance()
+ .getInvariantDeviceProfile().defaultWallpaperSize;
+ if (size.x != mWallpaperManager.getDesiredMinimumWidth()
+ || size.y != mWallpaperManager.getDesiredMinimumHeight()) {
+ mWallpaperManager.suggestDesiredDimensions(size.x, size.y);
}
- return null;
}
- }.executeOnExecutor(Utilities.THREAD_POOL_EXECUTOR);
+ });
}
protected void snapToPage(int whichPage, Runnable r) {
diff --git a/tests/Android.mk b/tests/Android.mk
index d82f0b3..0c4b5ff 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -16,13 +16,10 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
-src_dirs := src
LOCAL_MODULE_TAGS := tests
LOCAL_STATIC_JAVA_LIBRARIES := android-support-test ub-uiautomator
LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
-LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_SDK_VERSION := 23
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 8acc5e9..afe8952 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -20,12 +20,14 @@
<uses-sdk tools:overrideLibrary="android.support.test.uiautomator.v18"/>
- <application>
+ <application android:debuggable="true">
<uses-library android:name="android.test.runner" />
</application>
<instrumentation
- android:name="android.test.InstrumentationTestRunner"
+ android:functionalTest="false"
+ android:handleProfiling="false"
+ android:name="android.support.test.runner.AndroidJUnitRunner"
android:targetPackage="com.android.launcher3" >
</instrumentation>
</manifest>
diff --git a/tests/res/values/string.xml b/tests/res/values/string.xml
deleted file mode 100644
index 3c1ec5c..0000000
--- a/tests/res/values/string.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!-- Copyright (C) 2015 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- Dummy string for tests. [DO NOT TRANSLATE] -->
- <string name="dummy" >Dummy string for tests.</string>
-
-</resources>
diff --git a/tests/src/com/android/launcher3/BindWidgetTest.java b/tests/src/com/android/launcher3/BindWidgetTest.java
index 06e1936..4e8881c 100644
--- a/tests/src/com/android/launcher3/BindWidgetTest.java
+++ b/tests/src/com/android/launcher3/BindWidgetTest.java
@@ -109,7 +109,7 @@
public void testUnboundWidget_removed() throws Exception {
LauncherAppWidgetProviderInfo info = findWidgetProvider(false);
LauncherAppWidgetInfo item = createWidgetInfo(info, false);
- item.appWidgetId = 33;
+ item.appWidgetId = -33;
// Since there is no widget to verify, just wait until the workspace is ready.
setupAndVerifyContents(item, Workspace.class, null);
@@ -253,6 +253,7 @@
runTestOnUiThread(new Runnable() {
@Override
public void run() {
+ LauncherClings.markFirstRunClingDismissed(mTargetContext);
ManagedProfileHeuristic.markExistingUsersForNoFolderCreation(mTargetContext);
LauncherAppState.getInstance().getModel().resetLoadedState(true, true);
}
diff --git a/tests/src/com/android/launcher3/util/TestLauncherProvider.java b/tests/src/com/android/launcher3/util/TestLauncherProvider.java
index aef3240..a11013f 100644
--- a/tests/src/com/android/launcher3/util/TestLauncherProvider.java
+++ b/tests/src/com/android/launcher3/util/TestLauncherProvider.java
@@ -26,7 +26,8 @@
private static class MyDatabaseHelper extends DatabaseHelper {
public MyDatabaseHelper(Context context, LauncherProvider provider) {
- super(context, provider, null);
+ super(context, provider, null, null);
+ initIds();
}
@Override