Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 26865aff authored by Fan Wu's avatar Fan Wu Committed by Android (Google) Code Review
Browse files

Merge changes Ic25e4c0b,I0ed8a4ba into main

* changes:
  [Expressive Design] Support Loading_Indeterminate status for StatusBannerPreference
  [Expressive Design] Support Loading_Determinate status for StatusBannerPreference.
parents edda7dd6 308983f4
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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"/>
+45 −3
Original line number Diff line number Diff line
@@ -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