Merge branch 'ub-launcher3-master' into launcher3merge2018-09-13
Test: none
Change-Id: I8dce25b79bf67c9af06ed362fc4153c711e8f788
diff --git a/res/layout/snackbar.xml b/res/layout/snackbar.xml
index 419fb82..bca3308 100644
--- a/res/layout/snackbar.xml
+++ b/res/layout/snackbar.xml
@@ -25,17 +25,23 @@
android:gravity="center_vertical"
android:paddingLeft="8dp"
android:paddingRight="8dp"
- android:textSize="14sp"
- android:textColor="?android:attr/textColorPrimary"/>
+ android:lines="1"
+ android:ellipsize="end"
+ android:textSize="@dimen/snackbar_max_text_size"
+ android:textColor="?android:attr/textColorPrimary"
+ android:theme="@style/TextTitle"/>
<TextView
android:id="@+id/action"
android:layout_height="@dimen/snackbar_content_height"
android:layout_width="wrap_content"
android:layout_weight="0"
android:gravity="center"
- android:padding="8dp"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
android:background="?android:attr/selectableItemBackground"
android:textStyle="bold"
- android:textColor="?android:attr/textColorPrimary"
- android:textAllCaps="true"/>
+ android:textSize="@dimen/snackbar_max_text_size"
+ android:textColor="?android:attr/colorAccent"
+ android:theme="@style/TextTitle"
+ android:capitalize="sentences"/>
</merge>
\ No newline at end of file
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index fae5dac..aea06aa 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -114,8 +114,7 @@
<string name="action_move_here" msgid="2170188780612570250">"මෙතනට අයිතමය ගෙන එන්න"</string>
<string name="item_added_to_workspace" msgid="4211073925752213539">"අයිතමය මුල් තිරය වෙත එකතු කරන ලදි"</string>
<string name="item_removed" msgid="851119963877842327">"අයිතමය ඉවත් කරන ලදි"</string>
- <!-- no translation found for undo (4151576204245173321) -->
- <skip />
+ <string name="undo" msgid="4151576204245173321">"අස් කරන්න"</string>
<string name="action_move" msgid="4339390619886385032">"අයිතමය ගෙනයන්න"</string>
<string name="move_to_empty_cell" msgid="2833711483015685619">"පේළිය <xliff:g id="NUMBER_0">%1$s</xliff:g> තීරුව <xliff:g id="NUMBER_1">%2$s</xliff:g> වෙත ගෙන යන්න"</string>
<string name="move_to_position" msgid="6750008980455459790">"<xliff:g id="NUMBER">%1$s</xliff:g> ස්ථානය වෙත ගෙන යන්න"</string>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index e7bd64c..8adae36 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -230,5 +230,10 @@
<dimen name="snackbar_height">48dp</dimen>
<dimen name="snackbar_content_height">32dp</dimen>
<dimen name="snackbar_padding">8dp</dimen>
- <dimen name="snackbar_margin">16dp</dimen>
+ <dimen name="snackbar_min_margin_left_right">6dp</dimen>
+ <dimen name="snackbar_max_margin_left_right">72dp</dimen>
+ <dimen name="snackbar_margin_bottom">30dp</dimen>
+ <dimen name="snackbar_elevation">3dp</dimen>
+ <dimen name="snackbar_min_text_size">12sp</dimen>
+ <dimen name="snackbar_max_text_size">14sp</dimen>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6d73dcb..eb6b284 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -262,7 +262,7 @@
<!-- Accessibility confirmation for item removed. [CHAR_LIMIT=50]-->
<string name="item_removed">Item removed</string>
- <!-- Action shown in snackbar to undo item removal. [CHAR_LIMIT=15] -->
+ <!-- Action shown in snackbar to undo item removal. [CHAR_LIMIT=20] -->
<string name="undo">Undo</string>
<!-- Accessibility action to move an item on the workspace. [CHAR_LIMIT=30] -->
diff --git a/src/com/android/launcher3/util/ConfigMonitor.java b/src/com/android/launcher3/util/ConfigMonitor.java
index 611931d..5dd0d08 100644
--- a/src/com/android/launcher3/util/ConfigMonitor.java
+++ b/src/com/android/launcher3/util/ConfigMonitor.java
@@ -111,8 +111,12 @@
private void killProcess() {
Log.d(TAG, "restarting launcher");
- mContext.unregisterReceiver(this);
- mContext.getSystemService(DisplayManager.class).unregisterDisplayListener(this);
+ try {
+ mContext.unregisterReceiver(this);
+ mContext.getSystemService(DisplayManager.class).unregisterDisplayListener(this);
+ } catch (Exception e) {
+ // We are going to die anyway, ignore any error die to race condition in registering.
+ }
android.os.Process.killProcess(android.os.Process.myPid());
}
diff --git a/src/com/android/launcher3/views/Snackbar.java b/src/com/android/launcher3/views/Snackbar.java
index f515360..04b637b 100644
--- a/src/com/android/launcher3/views/Snackbar.java
+++ b/src/com/android/launcher3/views/Snackbar.java
@@ -20,6 +20,7 @@
import android.content.res.Resources;
import android.graphics.Rect;
import android.util.AttributeSet;
+import android.util.TypedValue;
import android.view.Gravity;
import android.view.MotionEvent;
import android.widget.TextView;
@@ -60,7 +61,7 @@
snackbar.setOrientation(HORIZONTAL);
snackbar.setGravity(Gravity.CENTER_VERTICAL);
Resources res = launcher.getResources();
- snackbar.setElevation(res.getDimension(R.dimen.deep_shortcuts_elevation));
+ snackbar.setElevation(res.getDimension(R.dimen.snackbar_elevation));
int padding = res.getDimensionPixelSize(R.dimen.snackbar_padding);
snackbar.setPadding(padding, padding, padding, padding);
snackbar.setBackgroundResource(R.drawable.round_rect_primary);
@@ -72,14 +73,45 @@
DragLayer.LayoutParams params = (DragLayer.LayoutParams) snackbar.getLayoutParams();
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
params.height = res.getDimensionPixelSize(R.dimen.snackbar_height);
- int margin = res.getDimensionPixelSize(R.dimen.snackbar_margin);
+ int maxMarginLeftRight = res.getDimensionPixelSize(R.dimen.snackbar_max_margin_left_right);
+ int minMarginLeftRight = res.getDimensionPixelSize(R.dimen.snackbar_min_margin_left_right);
+ int marginBottom = res.getDimensionPixelSize(R.dimen.snackbar_margin_bottom);
Rect insets = launcher.getDeviceProfile().getInsets();
- params.width = dragLayer.getWidth() - margin * 2 - insets.left - insets.right;
- params.setMargins(0, margin + insets.top, 0, margin + insets.bottom);
+ int maxWidth = dragLayer.getWidth() - minMarginLeftRight * 2 - insets.left - insets.right;
+ int minWidth = dragLayer.getWidth() - maxMarginLeftRight * 2 - insets.left - insets.right;
+ params.width = minWidth;
+ params.setMargins(0, 0, 0, marginBottom + insets.bottom);
- ((TextView) snackbar.findViewById(R.id.label)).setText(labelStringResId);
- ((TextView) snackbar.findViewById(R.id.action)).setText(actionStringResId);
- snackbar.findViewById(R.id.action).setOnClickListener(v -> {
+ TextView labelView = snackbar.findViewById(R.id.label);
+ TextView actionView = snackbar.findViewById(R.id.action);
+ String labelText = res.getString(labelStringResId);
+ String actionText = res.getString(actionStringResId);
+ int totalContentWidth = (int) (labelView.getPaint().measureText(labelText)
+ + actionView.getPaint().measureText(actionText))
+ + labelView.getPaddingRight() + labelView.getPaddingLeft()
+ + actionView.getPaddingRight() + actionView.getPaddingLeft()
+ + padding * 2;
+ if (totalContentWidth > params.width) {
+ // The text doesn't fit in our standard width so update width to accommodate.
+ if (totalContentWidth <= maxWidth) {
+ params.width = totalContentWidth;
+ } else {
+ // One line will be cut off, fallback to 2 lines and smaller font. (This should only
+ // happen in some languages if system display and font size are set to largest.)
+ int textHeight = res.getDimensionPixelSize(R.dimen.snackbar_content_height);
+ float textSizePx = res.getDimension(R.dimen.snackbar_min_text_size);
+ labelView.setLines(2);
+ labelView.getLayoutParams().height = textHeight * 2;
+ actionView.getLayoutParams().height = textHeight * 2;
+ labelView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSizePx);
+ actionView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSizePx);
+ params.height += textHeight;
+ params.width = maxWidth;
+ }
+ }
+ labelView.setText(labelText);
+ actionView.setText(actionText);
+ actionView.setOnClickListener(v -> {
if (onActionClicked != null) {
onActionClicked.run();
}
diff --git a/tests/tapl/com/android/launcher3/tapl/AllAppsFromOverview.java b/tests/tapl/com/android/launcher3/tapl/AllAppsFromOverview.java
index dd286bd..42817c1 100644
--- a/tests/tapl/com/android/launcher3/tapl/AllAppsFromOverview.java
+++ b/tests/tapl/com/android/launcher3/tapl/AllAppsFromOverview.java
@@ -17,9 +17,9 @@
package com.android.launcher3.tapl;
import android.graphics.Point;
-import androidx.test.uiautomator.UiObject2;
import androidx.annotation.NonNull;
+import androidx.test.uiautomator.UiObject2;
/**
* Operations on AllApps opened from Overview.
@@ -44,6 +44,7 @@
allAppsContainer, "search_container_all_apps");
final Point start = qsb.getVisibleCenter();
final int endY = (int) (mLauncher.getDevice().getDisplayHeight() * 0.6);
+ LauncherInstrumentation.log("AllAppsFromOverview.switchBackToOverview before swipe");
mLauncher.swipe(start.x, start.y, start.x, endY);
return new Overview(mLauncher);
diff --git a/tests/tapl/com/android/launcher3/tapl/AppIcon.java b/tests/tapl/com/android/launcher3/tapl/AppIcon.java
index 17bf5fc..ea47503 100644
--- a/tests/tapl/com/android/launcher3/tapl/AppIcon.java
+++ b/tests/tapl/com/android/launcher3/tapl/AppIcon.java
@@ -43,6 +43,7 @@
* Clicks the icon to launch its app.
*/
public Background launch() {
+ LauncherInstrumentation.log("AppIcon.launch before click");
LauncherInstrumentation.assertTrue(
"Launching an app didn't open a new window: " + mIcon.getText(),
mIcon.clickAndWait(Until.newWindow(), LauncherInstrumentation.WAIT_TIME_MS));
diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
index 434e421..441fc65 100644
--- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
+++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
@@ -24,6 +24,7 @@
import android.os.Bundle;
import android.os.Parcelable;
import android.provider.Settings;
+import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import androidx.annotation.NonNull;
@@ -47,6 +48,8 @@
*/
public final class LauncherInstrumentation {
+ private static final String TAG = "Tapl";
+
// Types for launcher containers that the user is interacting with. "Background" is a
// pseudo-container corresponding to inactive launcher covered by another app.
enum ContainerType {
@@ -119,6 +122,10 @@
return mSwipeUpEnabledOverride != null ? mSwipeUpEnabledOverride : mSwipeUpEnabled;
}
+ static void log(String message) {
+ Log.d(TAG, message);
+ }
+
private static void fail(String message) {
Assert.fail("http://go/tapl : " + message);
}
@@ -144,6 +151,7 @@
}
private UiObject2 verifyContainerType(ContainerType containerType) {
+ log("verifyContainerType: " + containerType);
switch (containerType) {
case WORKSPACE: {
waitUntilGone(APPS_RES_ID);
diff --git a/tests/tapl/com/android/launcher3/tapl/Overview.java b/tests/tapl/com/android/launcher3/tapl/Overview.java
index db0e6c5..9841274 100644
--- a/tests/tapl/com/android/launcher3/tapl/Overview.java
+++ b/tests/tapl/com/android/launcher3/tapl/Overview.java
@@ -17,14 +17,14 @@
package com.android.launcher3.tapl;
import android.graphics.Point;
+
+import androidx.annotation.NonNull;
import androidx.test.uiautomator.Direction;
import androidx.test.uiautomator.UiObject2;
import java.util.Collections;
import java.util.List;
-import androidx.annotation.NonNull;
-
/**
* Overview pane.
*/
@@ -46,6 +46,7 @@
*/
public void flingForward() {
final UiObject2 overview = verifyActiveContainer();
+ LauncherInstrumentation.log("Overview.flingForward before fling");
overview.fling(Direction.LEFT, DEFAULT_FLING_SPEED);
mLauncher.waitForIdle();
verifyActiveContainer();
@@ -56,6 +57,7 @@
*/
public void flingBackward() {
final UiObject2 overview = verifyActiveContainer();
+ LauncherInstrumentation.log("Overview.flingBackward before fling");
overview.fling(Direction.RIGHT, DEFAULT_FLING_SPEED);
mLauncher.waitForIdle();
verifyActiveContainer();
@@ -95,6 +97,7 @@
// Swipe from navbar to the top.
final UiObject2 navBar = mLauncher.getSystemUiObject("navigation_bar_frame");
final Point start = navBar.getVisibleCenter();
+ LauncherInstrumentation.log("Overview.switchToAllApps before swipe");
mLauncher.swipe(start.x, start.y, start.x, 0);
return new AllAppsFromOverview(mLauncher);