summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-03-15 18:27:07 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-03-15 18:27:07 +0000
commite899402cc861b47a05d1f5950d516b6a8b5b39a2 (patch)
treedbc0a7dc141a9bae1cd1e26de134437616ef43cf
parent0a0cee26cb8df5e5859097091930fd9441c42cff (diff)
parentd95bc019784f9143d87163960786b3764637ba60 (diff)
downloadsetupdesign-e899402cc861b47a05d1f5950d516b6a8b5b39a2.tar.gz
Snap for 9751898 from d95bc019784f9143d87163960786b3764637ba60 to simpleperf-release
Change-Id: I4a7f2b4a2f9259c47918a8d79f69d50147e83b87
-rw-r--r--main/res/values-v31/styles.xml2
-rw-r--r--main/res/values/dimens.xml1
-rw-r--r--main/src/com/google/android/setupdesign/span/LinkSpan.java9
-rw-r--r--main/src/com/google/android/setupdesign/template/HeaderMixin.java92
-rw-r--r--main/src/com/google/android/setupdesign/util/DeviceHelper.java63
5 files changed, 114 insertions, 53 deletions
diff --git a/main/res/values-v31/styles.xml b/main/res/values-v31/styles.xml
index 1be5b13..5fab1c1 100644
--- a/main/res/values-v31/styles.xml
+++ b/main/res/values-v31/styles.xml
@@ -198,6 +198,8 @@
</style>
<style name="SudAppCompatButtonButtonBarAlertDialog" parent="Widget.AppCompat.ButtonBar.AlertDialog">
+ <item name="android:layout_marginStart">@dimen/sud_glif_alert_dialog_footer_bar_padding_start</item>
+ <item name="android:layout_marginLeft">@dimen/sud_glif_alert_dialog_footer_bar_padding_start</item>
<item name="android:textAppearance">@style/SudTextAppearanceDeviceDefaultMedium</item>
<item name="android:minWidth">@dimen/sud_alert_dialog_button_bar_width</item>
<item name="android:minHeight">@dimen/sud_alert_dialog_button_bar_height</item>
diff --git a/main/res/values/dimens.xml b/main/res/values/dimens.xml
index 1562cc5..d3f0d02 100644
--- a/main/res/values/dimens.xml
+++ b/main/res/values/dimens.xml
@@ -56,6 +56,7 @@
<dimen name="sud_horizontal_icon_height">32dp</dimen>
<dimen name="sud_glif_alert_dialog_corner_radius">8dp</dimen>
+ <dimen name="sud_glif_alert_dialog_footer_bar_padding_start">8dp</dimen>
<dimen name="sud_glif_v3_button_corner_radius">4dp</dimen>
<dimen name="sud_glif_device_default_dialog_corner_radius">28dp</dimen>
<dimen name="sud_glif_land_header_area_weight">1</dimen>
diff --git a/main/src/com/google/android/setupdesign/span/LinkSpan.java b/main/src/com/google/android/setupdesign/span/LinkSpan.java
index 7defbf9..3bb1617 100644
--- a/main/src/com/google/android/setupdesign/span/LinkSpan.java
+++ b/main/src/com/google/android/setupdesign/span/LinkSpan.java
@@ -140,13 +140,4 @@ public class LinkSpan extends ClickableSpan {
public String getLink() {
return link;
}
-
- /**
- * @deprecated Method's return type clashes with its superclass. Use {@link #getLink()} instead.
- * This will be removed in the future.
- */
- @Deprecated
- public String getId() {
- return link;
- }
}
diff --git a/main/src/com/google/android/setupdesign/template/HeaderMixin.java b/main/src/com/google/android/setupdesign/template/HeaderMixin.java
index 814f873..2a6114d 100644
--- a/main/src/com/google/android/setupdesign/template/HeaderMixin.java
+++ b/main/src/com/google/android/setupdesign/template/HeaderMixin.java
@@ -27,6 +27,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.ViewTreeObserver;
+import android.view.ViewTreeObserver.OnPreDrawListener;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.AttrRes;
@@ -42,6 +43,7 @@ import com.google.android.setupdesign.util.HeaderAreaStyler;
import com.google.android.setupdesign.util.LayoutStyler;
import com.google.android.setupdesign.util.PartnerStyleHelper;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
+import java.util.ArrayList;
/**
* A {@link com.google.android.setupcompat.template.Mixin} for setting and getting the header text.
@@ -54,7 +56,10 @@ public class HeaderMixin implements Mixin {
private float headerAutoSizeMinTextSizeInPx;
private float headerAutoSizeLineExtraSpacingInPx;
private int headerAutoSizeMaxLineOfMaxSize;
+ private float defaultTextSize = 0;
+ private int defaultLineHeight = 0;
private static final int AUTO_SIZE_DEFAULT_MAX_LINES = 6;
+ ArrayList<OnPreDrawListener> titlePreDrawListeners = new ArrayList<>();
/**
* A {@link com.google.android.setupcompat.template.Mixin} for setting and getting the Header.
@@ -78,8 +83,11 @@ public class HeaderMixin implements Mixin {
a.getColorStateList(R.styleable.SucHeaderMixin_sucHeaderTextColor);
a.recycle();
-
- // Try to update the flag of the uto size config settings
+ if (getTextView() != null) {
+ defaultTextSize = getTextView().getTextSize();
+ defaultLineHeight = getTextView().getLineHeight();
+ }
+ // Try to update the flag of the auto size config settings
tryUpdateAutoTextSizeFlagWithPartnerConfig();
// Set the header text
@@ -109,7 +117,11 @@ public class HeaderMixin implements Mixin {
if (!autoTextSizeEnabled) {
return;
}
+ tryUpdateAutoTextConfigWithPartnerConfig();
+ }
+ private void tryUpdateAutoTextConfigWithPartnerConfig() {
+ Context context = templateLayout.getContext();
if (PartnerConfigHelper.get(context)
.isPartnerConfigAvailable(PartnerConfig.CONFIG_HEADER_AUTO_SIZE_MAX_TEXT_SIZE)) {
headerAutoSizeMaxTextSizeInPx =
@@ -207,36 +219,66 @@ public class HeaderMixin implements Mixin {
}
// preset as the max size
titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, headerAutoSizeMaxTextSizeInPx);
+ defaultTextSize = titleView.getTextSize();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
titleView.setLineHeight(
Math.round(headerAutoSizeLineExtraSpacingInPx + headerAutoSizeMaxTextSizeInPx));
+ defaultLineHeight = titleView.getLineHeight();
}
titleView.setMaxLines(AUTO_SIZE_DEFAULT_MAX_LINES);
-
// reset text size if the line count for max text size > headerAutoSizeMaxLineOfMaxTextSize
- titleView
- .getViewTreeObserver()
- .addOnPreDrawListener(
- new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- // Remove listener to avoid this called every frame
- titleView.getViewTreeObserver().removeOnPreDrawListener(this);
- int lineCount = titleView.getLineCount();
- if (lineCount > headerAutoSizeMaxLineOfMaxSize) {
- // reset text size
- titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, headerAutoSizeMinTextSizeInPx);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
- titleView.setLineHeight(
- Math.round(
- headerAutoSizeLineExtraSpacingInPx + headerAutoSizeMinTextSizeInPx));
- }
- titleView.invalidate();
- return false; // false to skip this frame
- }
- return true;
+ OnPreDrawListener titlePreDrawListener =
+ new ViewTreeObserver.OnPreDrawListener() {
+ @Override
+ public boolean onPreDraw() {
+ // Remove listener to avoid this called every frame
+ titleView.getViewTreeObserver().removeOnPreDrawListener(this);
+ int lineCount = titleView.getLineCount();
+ if (lineCount > headerAutoSizeMaxLineOfMaxSize) {
+ // reset text size
+ titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, headerAutoSizeMinTextSizeInPx);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ titleView.setLineHeight(
+ Math.round(headerAutoSizeLineExtraSpacingInPx + headerAutoSizeMinTextSizeInPx));
}
- });
+ titleView.invalidate();
+ return false; // false to skip this frame
+ }
+ return true;
+ }
+ };
+ titleView.getViewTreeObserver().addOnPreDrawListener(titlePreDrawListener);
+ titlePreDrawListeners.add(titlePreDrawListener);
+ }
+
+ private void resetTextSize(TextView titleView) {
+ if (titleView == null) {
+ return;
+ }
+ titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, defaultTextSize);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ titleView.setLineHeight(defaultLineHeight);
+ }
+ for (OnPreDrawListener titlePreDrawListener : titlePreDrawListeners) {
+ titleView.getViewTreeObserver().removeOnPreDrawListener(titlePreDrawListener);
+ }
+ titlePreDrawListeners.clear();
+ }
+
+ /**
+ * Enable or disable the auto size for header string. Which will adjust the font size of header
+ * string to fit the limitation of headerAutoSizeMaxLineOfMaxSize.
+ */
+ public void setAutoTextSizeEnabled(boolean autoTextSizeEnabled) {
+ this.autoTextSizeEnabled = autoTextSizeEnabled;
+ if (autoTextSizeEnabled) {
+ tryUpdateAutoTextConfigWithPartnerConfig();
+ if (autoTextSizeEnabled) {
+ autoAdjustTextSize(getTextView());
+ }
+ } else {
+ resetTextSize(getTextView());
+ }
}
/** Returns the current header text. */
diff --git a/main/src/com/google/android/setupdesign/util/DeviceHelper.java b/main/src/com/google/android/setupdesign/util/DeviceHelper.java
index 5845cbb..37c5144 100644
--- a/main/src/com/google/android/setupdesign/util/DeviceHelper.java
+++ b/main/src/com/google/android/setupdesign/util/DeviceHelper.java
@@ -16,26 +16,34 @@
package com.google.android.setupdesign.util;
+import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.res.Resources.NotFoundException;
import android.net.Uri;
import android.os.Bundle;
+import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
+import com.google.android.setupcompat.util.Logger;
import com.google.android.setupdesign.R;
/** Helper class to get attributes of the device, like a friendly display name. */
public final class DeviceHelper {
+ private static final Logger LOG = new Logger("DeviceHelper");
private static final String TAG = DeviceHelper.class.getSimpleName();
@VisibleForTesting
public static final String SUW_AUTHORITY = "com.google.android.setupwizard.partner";
+ @VisibleForTesting public static final String DEVICE_NAME = "device_name";
+ private static final String STRING = "string";
@VisibleForTesting public static final String GET_DEVICE_NAME_METHOD = "getDeviceName";
+ @VisibleForTesting public static Bundle deviceName = null;
+
/**
* Get the device name text from these resources, if they are unavailable or setupwizard apk is
* older which does not contains {@link DeviceHelper#GET_DEVICE_NAME_METHOD} method, return the
@@ -45,30 +53,47 @@ public final class DeviceHelper {
* com.google.android.setupwizard.util.PartnerResource#DEVICE_NAME}) > {@link
* android.provider.Settings.Global#DEVICE_NAME} > system property ro.product.model)
*/
- @Nullable
+ @NonNull
+ @SuppressLint("DiscouragedApi")
public static CharSequence getDeviceName(@NonNull Context context) {
- Bundle deviceName = null;
-
- try {
- deviceName =
- context
- .getContentResolver()
- .call(
- new Uri.Builder()
- .scheme(ContentResolver.SCHEME_CONTENT)
- .authority(SUW_AUTHORITY)
- .build(),
- GET_DEVICE_NAME_METHOD,
- /* arg= */ null,
- /* extras= */ null);
- } catch (IllegalArgumentException | SecurityException exception) {
- Log.w(TAG, "device name unknown; return the device name as default value");
+ if (deviceName == null || deviceName.isEmpty()) {
+ try {
+ deviceName =
+ context
+ .getContentResolver()
+ .call(
+ new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(SUW_AUTHORITY)
+ .build(),
+ GET_DEVICE_NAME_METHOD,
+ /* arg= */ null,
+ /* extras= */ null);
+ } catch (IllegalArgumentException | SecurityException exception) {
+ Log.w(TAG, "device name unknown; return the device name as default value");
+ }
}
- if (deviceName != null) {
+ if (deviceName != null && !deviceName.isEmpty()) {
return deviceName.getCharSequence(GET_DEVICE_NAME_METHOD, null);
}
+ Partner partner = Partner.get(context);
+ if (partner != null) {
+ try {
+ int resId =
+ partner.getResources().getIdentifier(DEVICE_NAME, STRING, partner.getPackageName());
+ String overlayDeviceName = partner.getResources().getString(resId);
+ if (!TextUtils.isEmpty(overlayDeviceName)) {
+ return overlayDeviceName;
+ } else {
+ LOG.w("The overlayDeviceName is null!");
+ }
+ } catch (NotFoundException ex) {
+ // fall through
+ }
+ }
+
return context.getString(R.string.sud_default_device_name);
}