diff options
author | 2025-03-16 18:18:46 -0700 | |
---|---|---|
committer | 2025-03-16 18:18:46 -0700 | |
commit | 26865aff18a4f89587ca427661b91e957ec49d1c (patch) | |
tree | 3d64e0cee70160f9d59ae62c1e0e49e4e31c9704 | |
parent | edda7dd6c0784bec0f9fa5792ab096ff72d4c7b5 (diff) | |
parent | 308983f4d97281a8aafae960582b1e096ffed4a8 (diff) |
Merge changes Ic25e4c0b,I0ed8a4ba into main
* changes:
[Expressive Design] Support Loading_Indeterminate status for StatusBannerPreference
[Expressive Design] Support Loading_Determinate status for StatusBannerPreference.
3 files changed, 68 insertions, 3 deletions
diff --git a/packages/SettingsLib/StatusBannerPreference/res/layout/settingslib_expressive_preference_statusbanner.xml b/packages/SettingsLib/StatusBannerPreference/res/layout/settingslib_expressive_preference_statusbanner.xml index 083b862e8a5c..c778fb03e04f 100644 --- a/packages/SettingsLib/StatusBannerPreference/res/layout/settingslib_expressive_preference_statusbanner.xml +++ b/packages/SettingsLib/StatusBannerPreference/res/layout/settingslib_expressive_preference_statusbanner.xml @@ -55,6 +55,27 @@ android:layout_gravity="center" android:scaleType="centerInside"/> + <com.google.android.material.progressindicator.CircularProgressIndicator + android:id="@+id/progress_indicator" + style="@style/Widget.Material3.CircularProgressIndicator" + android:layout_width="@dimen/settingslib_expressive_space_medium4" + android:layout_height="@dimen/settingslib_expressive_space_medium4" + android:layout_gravity="center" + android:scaleType="centerInside" + android:indeterminate="false" + android:max="100" + android:progress="0" + android:visibility="gone" /> + + <com.google.android.material.loadingindicator.LoadingIndicator + android:id="@+id/loading_indicator" + style="@style/Widget.Material3.LoadingIndicator" + android:layout_width="@dimen/settingslib_expressive_space_medium4" + android:layout_height="@dimen/settingslib_expressive_space_medium4" + android:layout_gravity="center" + android:scaleType="centerInside" + android:visibility="gone" /> + </FrameLayout> <LinearLayout diff --git a/packages/SettingsLib/StatusBannerPreference/res/values/attrs.xml b/packages/SettingsLib/StatusBannerPreference/res/values/attrs.xml index deda2586c2e0..bb9a5ad689cd 100644 --- a/packages/SettingsLib/StatusBannerPreference/res/values/attrs.xml +++ b/packages/SettingsLib/StatusBannerPreference/res/values/attrs.xml @@ -22,6 +22,8 @@ <enum name="medium" value="2"/> <enum name="high" value="3"/> <enum name="off" value="4"/> + <enum name="loading_determinate" value="5"/> + <enum name="loading_indeterminate" value="6"/> </attr> <attr name="buttonLevel" format="enum"> <enum name="generic" value="0"/> diff --git a/packages/SettingsLib/StatusBannerPreference/src/com/android/settingslib/widget/StatusBannerPreference.kt b/packages/SettingsLib/StatusBannerPreference/src/com/android/settingslib/widget/StatusBannerPreference.kt index eda281c07053..e6c6638f7de4 100644 --- a/packages/SettingsLib/StatusBannerPreference/src/com/android/settingslib/widget/StatusBannerPreference.kt +++ b/packages/SettingsLib/StatusBannerPreference/src/com/android/settingslib/widget/StatusBannerPreference.kt @@ -28,6 +28,7 @@ import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import com.android.settingslib.widget.preference.statusbanner.R import com.google.android.material.button.MaterialButton +import com.google.android.material.progressindicator.CircularProgressIndicator class StatusBannerPreference @JvmOverloads constructor( context: Context, @@ -41,7 +42,9 @@ class StatusBannerPreference @JvmOverloads constructor( LOW, MEDIUM, HIGH, - OFF + OFF, + LOADING_DETERMINATE, // The loading progress is set by the caller. + LOADING_INDETERMINATE // No loading progress. Just loading animation } var iconLevel: BannerStatus = BannerStatus.GENERIC set(value) { @@ -60,6 +63,8 @@ class StatusBannerPreference @JvmOverloads constructor( } private var listener: View.OnClickListener? = null + private var circularProgressIndicator: CircularProgressIndicator? = null + init { layoutResource = R.layout.settingslib_expressive_preference_statusbanner isSelectable = false @@ -89,6 +94,8 @@ class StatusBannerPreference @JvmOverloads constructor( 2 -> BannerStatus.MEDIUM 3 -> BannerStatus.HIGH 4 -> BannerStatus.OFF + 5 -> BannerStatus.LOADING_DETERMINATE + 6 -> BannerStatus.LOADING_INDETERMINATE else -> BannerStatus.GENERIC } @@ -102,7 +109,38 @@ class StatusBannerPreference @JvmOverloads constructor( } holder.findViewById(android.R.id.icon_frame)?.apply { - visibility = if (icon != null) View.VISIBLE else View.GONE + visibility = + if ( + icon != null || iconLevel == BannerStatus.LOADING_DETERMINATE || + iconLevel == BannerStatus.LOADING_INDETERMINATE + ) + View.VISIBLE + else View.GONE + } + + holder.findViewById(android.R.id.icon)?.apply { + visibility = + if (iconLevel == BannerStatus.LOADING_DETERMINATE || + iconLevel == BannerStatus.LOADING_INDETERMINATE) + View.GONE + else View.VISIBLE + } + + circularProgressIndicator = holder.findViewById(R.id.progress_indicator) + as? CircularProgressIndicator + + (circularProgressIndicator)?.apply { + visibility = + if (iconLevel == BannerStatus.LOADING_DETERMINATE) + View.VISIBLE + else View.GONE + } + + holder.findViewById(R.id.loading_indicator)?.apply { + visibility = + if (iconLevel == BannerStatus.LOADING_INDETERMINATE) + View.VISIBLE + else View.GONE } (holder.findViewById(R.id.status_banner_button) as? MaterialButton)?.apply { @@ -116,6 +154,10 @@ class StatusBannerPreference @JvmOverloads constructor( } } + fun getProgressIndicator(): CircularProgressIndicator? { + return circularProgressIndicator + } + /** * Sets the text to be displayed in button. */ @@ -203,7 +245,7 @@ class StatusBannerPreference @JvmOverloads constructor( R.drawable.settingslib_expressive_background_level_high ) - // GENERIC and OFF are using the same background drawable. + // Using the same background drawable for other levels. else -> ContextCompat.getDrawable( context, R.drawable.settingslib_expressive_background_generic |