summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fan Wu <cechkahn@google.com> 2025-03-16 18:18:46 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-16 18:18:46 -0700
commit26865aff18a4f89587ca427661b91e957ec49d1c (patch)
tree3d64e0cee70160f9d59ae62c1e0e49e4e31c9704
parentedda7dd6c0784bec0f9fa5792ab096ff72d4c7b5 (diff)
parent308983f4d97281a8aafae960582b1e096ffed4a8 (diff)
Merge changes Ic25e4c0b,I0ed8a4ba into main
* changes: [Expressive Design] Support Loading_Indeterminate status for StatusBannerPreference [Expressive Design] Support Loading_Determinate status for StatusBannerPreference.
-rw-r--r--packages/SettingsLib/StatusBannerPreference/res/layout/settingslib_expressive_preference_statusbanner.xml21
-rw-r--r--packages/SettingsLib/StatusBannerPreference/res/values/attrs.xml2
-rw-r--r--packages/SettingsLib/StatusBannerPreference/src/com/android/settingslib/widget/StatusBannerPreference.kt48
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