Merge "Fixing Search drop target bar stays visible, until the first time an item is picked up" into ub-launcher3-burnaby-polish
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 1025aba..076853e 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -20,13 +20,16 @@
<!-- Dynamic Grid -->
<dimen name="dynamic_grid_edge_margin">6dp</dimen>
<dimen name="dynamic_grid_search_bar_height">48dp</dimen>
- <!-- We want 32dp extra for the tall search bar. -->
- <dimen name="dynamic_grid_search_bar_height_tall">80dp</dimen>
+ <!-- We want 46dp extra for the tall search bar. -->
+ <dimen name="dynamic_grid_search_bar_height_tall">94dp</dimen>
<dimen name="qsb_internal_padding_top">8dp</dimen>
<dimen name="qsb_internal_padding_bottom">8dp</dimen>
+ <dimen name="dynamic_grid_search_bar_extra_top_padding">0dp</dimen>
+ <!-- Reduce the space between the status bar and the search bar when the search bar is tall -->
+ <dimen name="dynamic_grid_search_bar_negative_top_padding_short">-4dp</dimen>
<dimen name="dynamic_grid_search_bar_bottom_padding">4dp</dimen>
<!-- Reduce the padding between the search bar and workspace when the search bar is tall -->
- <dimen name="dynamic_grid_search_bar_bottom_padding_short">-6dp</dimen>
+ <dimen name="dynamic_grid_search_bar_bottom_negative_padding_short">-6dp</dimen>
<dimen name="dynamic_grid_search_bar_bottom_padding_tablet">16dp</dimen>
<dimen name="dynamic_grid_page_indicator_height">20dp</dimen>
<dimen name="dynamic_grid_icon_drawable_padding">4dp</dimen>
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index c6da584..61c4b1a 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -103,6 +103,8 @@
// QSB
private int searchBarWidgetInternalPaddingTop, searchBarWidgetInternalPaddingBottom;
private int searchBarTopPaddingPx;
+ private int tallSearchBarNegativeTopPaddingPx, normalSearchBarTopExtraPaddingPx;
+ private int searchBarTopExtraPaddingPx; // One of the above.
private int normalSearchBarBottomPaddingPx, tallSearchBarBottomPaddingPx;
private int searchBarBottomPaddingPx; // One of the above.
private int normalSearchBarSpaceHeightPx, tallSearchBarSpaceHeightPx;
@@ -216,6 +218,10 @@
R.dimen.qsb_internal_padding_top);
searchBarWidgetInternalPaddingBottom = res.getDimensionPixelSize(
R.dimen.qsb_internal_padding_bottom);
+ normalSearchBarTopExtraPaddingPx = res.getDimensionPixelSize(
+ R.dimen.dynamic_grid_search_bar_extra_top_padding);
+ tallSearchBarNegativeTopPaddingPx = res.getDimensionPixelSize(
+ R.dimen.dynamic_grid_search_bar_negative_top_padding_short);
if (isTablet && !isVerticalBarLayout()) {
searchBarTopPaddingPx = searchBarWidgetInternalPaddingTop;
normalSearchBarBottomPaddingPx = searchBarWidgetInternalPaddingBottom +
@@ -225,8 +231,9 @@
searchBarTopPaddingPx = searchBarWidgetInternalPaddingTop;
normalSearchBarBottomPaddingPx = searchBarWidgetInternalPaddingBottom +
res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_bottom_padding);
- tallSearchBarBottomPaddingPx = searchBarWidgetInternalPaddingBottom +
- res.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_bottom_padding_short);
+ tallSearchBarBottomPaddingPx = searchBarWidgetInternalPaddingBottom
+ + res.getDimensionPixelSize(
+ R.dimen.dynamic_grid_search_bar_bottom_negative_padding_short);
}
// Calculate the actual text height
@@ -272,7 +279,7 @@
/** Returns the amount of extra space to allocate to the search bar for vertical padding. */
private int getSearchBarTotalVerticalPadding() {
- return searchBarTopPaddingPx + searchBarBottomPaddingPx;
+ return searchBarTopPaddingPx + searchBarTopExtraPaddingPx + searchBarBottomPaddingPx;
}
/** Returns the width and height of the search bar, ignoring any padding. */
@@ -427,10 +434,13 @@
hotseatBarHeightPx = shortHotseatBarHeightPx;
searchBarSpaceHeightPx = tallSearchBarSpaceHeightPx;
searchBarBottomPaddingPx = tallSearchBarBottomPaddingPx;
+ searchBarTopExtraPaddingPx = isPhone ? tallSearchBarNegativeTopPaddingPx
+ : normalSearchBarTopExtraPaddingPx;
} else {
hotseatBarHeightPx = normalHotseatBarHeightPx;
searchBarSpaceHeightPx = normalSearchBarSpaceHeightPx;
searchBarBottomPaddingPx = normalSearchBarBottomPaddingPx;
+ searchBarTopExtraPaddingPx = normalSearchBarTopExtraPaddingPx;
}
}
@@ -445,6 +455,7 @@
lp = (FrameLayout.LayoutParams) searchBar.getLayoutParams();
lp.width = searchBarBounds.width();
lp.height = searchBarBounds.height();
+ lp.topMargin = searchBarTopExtraPaddingPx;
if (hasVerticalBarLayout) {
// Vertical search bar space -- The search bar is fixed in the layout to be on the left
// of the screen regardless of RTL
diff --git a/src/com/android/launcher3/LauncherBackupAgentHelper.java b/src/com/android/launcher3/LauncherBackupAgentHelper.java
index 6619aaf..2177f52 100644
--- a/src/com/android/launcher3/LauncherBackupAgentHelper.java
+++ b/src/com/android/launcher3/LauncherBackupAgentHelper.java
@@ -20,6 +20,7 @@
import android.app.backup.BackupDataInput;
import android.app.backup.BackupManager;
import android.content.Context;
+import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.ParcelFileDescriptor;
import android.util.Log;
@@ -32,13 +33,13 @@
private static final String TAG = "LauncherBAHelper";
+ private static final String KEY_LAST_NOTIFIED_TIME = "backup_manager_last_notified";
+
private static final String LAUNCHER_DATA_PREFIX = "L";
static final boolean VERBOSE = false;
static final boolean DEBUG = false;
- private static BackupManager sBackupManager;
-
/**
* Notify the backup manager that out database is dirty.
*
@@ -47,10 +48,29 @@
* @param context application context
*/
public static void dataChanged(Context context) {
- if (sBackupManager == null) {
- sBackupManager = new BackupManager(context);
+ dataChanged(context, 0);
+ }
+
+ /**
+ * Notify the backup manager that out database is dirty.
+ *
+ * <P>This does not force an immediate backup.
+ *
+ * @param context application context
+ * @param throttleMs duration in ms for which two consecutive calls to backup manager should
+ * not be made.
+ */
+ public static void dataChanged(Context context, long throttleMs) {
+ SharedPreferences prefs = Utilities.getPrefs(context);
+ long now = System.currentTimeMillis();
+ long lastTime = prefs.getLong(KEY_LAST_NOTIFIED_TIME, 0);
+
+ // User can manually change the system time, which could lead to now < lastTime.
+ // Re-backup in that case, as the backup will have a wrong lastModifiedTime.
+ if (now < lastTime || now >= (lastTime + throttleMs)) {
+ BackupManager.dataChanged(context.getPackageName());
+ prefs.edit().putLong(KEY_LAST_NOTIFIED_TIME, now).apply();
}
- sBackupManager.dataChanged();
}
private LauncherBackupHelper mHelper;
diff --git a/src/com/android/launcher3/LauncherProvider.java b/src/com/android/launcher3/LauncherProvider.java
index 7674d2a..4760930 100644
--- a/src/com/android/launcher3/LauncherProvider.java
+++ b/src/com/android/launcher3/LauncherProvider.java
@@ -270,6 +270,9 @@
if (mListener != null) {
mListener.onSettingsChanged(arg, value);
}
+ if (extras.getBoolean(LauncherSettings.Settings.NOTIFY_BACKUP)) {
+ LauncherBackupAgentHelper.dataChanged(getContext());
+ }
Bundle result = new Bundle();
result.putBoolean(LauncherSettings.Settings.EXTRA_VALUE, value);
return result;
diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java
index 8a5804f..01d670d 100644
--- a/src/com/android/launcher3/LauncherSettings.java
+++ b/src/com/android/launcher3/LauncherSettings.java
@@ -324,5 +324,8 @@
public static final String EXTRA_VALUE = "value";
public static final String EXTRA_DEFAULT_VALUE = "default_value";
+
+ // Extra for set_boolean method to also notify the backup manager of the change.
+ public static final String NOTIFY_BACKUP = "notify_backup";
}
}
diff --git a/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java
index db3f72f..21df601 100644
--- a/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java
+++ b/tests/src/com/android/launcher3/InvariantDeviceProfileTest.java
@@ -108,15 +108,9 @@
if (!android.os.Build.DEVICE.equals("hammerhead")) {
return;
}
- assertEquals(mInvariantProfile.numRows, 4);
- assertEquals(mInvariantProfile.numColumns, 4);
- assertEquals((int) mInvariantProfile.numHotseatIcons, 5);
-
- DeviceProfile landscapeProfile = mInvariantProfile.landscapeProfile;
- DeviceProfile portraitProfile = mInvariantProfile.portraitProfile;
-
- assertEquals(portraitProfile.allAppsNumCols, 3);
- assertEquals(landscapeProfile.allAppsNumCols, 5); // not used
+ assertEquals(4, mInvariantProfile.numRows);
+ assertEquals(4, mInvariantProfile.numColumns);
+ assertEquals(5, mInvariantProfile.numHotseatIcons);
}
// Add more tests for other devices, however, running them once on a single device is enough
@@ -172,10 +166,11 @@
Rect landscapeBounds = landscapeProfile.getSearchBarBounds(true); // RTL shouldn't matter.
int landscapeHeight = (int) Utilities.dpiFromPx(landscapeBounds.height(),
resources.getDisplayMetrics());
- if (portraitProfile.isTablet) {
- assertEquals(8 + 80 + 24, portraitHeight);
+ if (portraitProfile.isPhone) {
+ // This fails on some devices due to http://b/26884580 (portraitHeight is 101, not 100).
+ assertEquals(4 + 94 + 2, portraitHeight);
} else {
- assertEquals(8 + 80 + 2, portraitHeight);
+ assertEquals(8 + 94 + 24, portraitHeight);
}
// Make sure the height that we pass in the widget options bundle is the height of the
// search bar + 8dps padding top and bottom.
@@ -183,7 +178,7 @@
int portraitWidgetOptsHeight = portraitDimens.y;
Point landscapeDimens = landscapeProfile.getSearchBarDimensForWidgetOpts(resources);
int landscapeWidgetOptsHeight = landscapeDimens.y;
- assertEquals(8 + 80 + 8, (int) Utilities.dpiFromPx(portraitWidgetOptsHeight,
+ assertEquals(8 + 94 + 8, (int) Utilities.dpiFromPx(portraitWidgetOptsHeight,
resources.getDisplayMetrics()));
if (!landscapeProfile.isVerticalBarLayout()) {
assertEquals(portraitHeight, landscapeHeight);