diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-03-15 18:27:07 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-03-15 18:27:07 +0000 |
commit | e899402cc861b47a05d1f5950d516b6a8b5b39a2 (patch) | |
tree | dbc0a7dc141a9bae1cd1e26de134437616ef43cf | |
parent | 0a0cee26cb8df5e5859097091930fd9441c42cff (diff) | |
parent | d95bc019784f9143d87163960786b3764637ba60 (diff) | |
download | setupdesign-e899402cc861b47a05d1f5950d516b6a8b5b39a2.tar.gz |
Snap for 9751898 from d95bc019784f9143d87163960786b3764637ba60 to simpleperf-release
Change-Id: I4a7f2b4a2f9259c47918a8d79f69d50147e83b87
-rw-r--r-- | main/res/values-v31/styles.xml | 2 | ||||
-rw-r--r-- | main/res/values/dimens.xml | 1 | ||||
-rw-r--r-- | main/src/com/google/android/setupdesign/span/LinkSpan.java | 9 | ||||
-rw-r--r-- | main/src/com/google/android/setupdesign/template/HeaderMixin.java | 92 | ||||
-rw-r--r-- | main/src/com/google/android/setupdesign/util/DeviceHelper.java | 63 |
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); } |