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

Commit 310ac13a authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 9509315 from dea718c8 to tm-qpr3-release

Change-Id: I26b919989b1af9dc7abb76d02b171993dc5bdb11
parents 89fb69c2 dea718c8
Loading
Loading
Loading
Loading
+0 −59
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?><!--
  ~ Copyright (C) 2022 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  ~
  -->

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/picker_fragment_background"
    android:orientation="vertical"
    android:padding="24dp">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:tint="@color/color_accent_primary"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="16dp" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textAppearance="@style/TextAppearance.MaterialComponents.Headline4"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="16dp" />

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="38dp" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/ActionPrimaryButton"
        android:background="@drawable/button_background"
        android:layout_gravity="end" />

</LinearLayout>
+4 −7
Original line number Diff line number Diff line
@@ -22,24 +22,21 @@ import com.android.customization.picker.clock.ClockCustomDemoFragment
import com.android.customization.picker.clock.ClockSectionView
import com.android.customization.picker.clock.ui.binder.ClockSectionViewBinder
import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel
import com.android.systemui.shared.customization.data.content.CustomizationProviderClient
import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract
import com.android.wallpaper.R
import com.android.wallpaper.config.BaseFlags
import com.android.wallpaper.model.CustomizationSectionController
import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController
import kotlinx.coroutines.runBlocking

/** A [CustomizationSectionController] for clock customization. */
class ClockSectionController(
    private val navigationController: CustomizationSectionNavigationController,
    private val customizationProviderClient: CustomizationProviderClient,
    private val viewModel: ClockSectionViewModel,
    private val lifecycleOwner: LifecycleOwner,
    private val flag: BaseFlags,
) : CustomizationSectionController<ClockSectionView?> {

    override fun isAvailable(context: Context?): Boolean {
        return runBlocking { customizationProviderClient.queryFlags() }
            .firstOrNull { it.name == Contract.FlagsTable.FLAG_NAME_CUSTOM_CLOCKS_ENABLED }
            ?.value == true
        return flag.isCustomClocksEnabled(context!!)
    }

    override fun createView(context: Context): ClockSectionView {
+0 −58
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package com.android.customization.picker.quickaffordance.ui.binder

import android.view.View
import android.widget.ImageView
import android.widget.TextView
import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel
import com.android.wallpaper.R

object KeyguardQuickAffordanceEnablementDialogBinder {

    fun bind(
        view: View,
        viewModel: KeyguardQuickAffordancePickerViewModel.DialogViewModel,
        onDismissed: () -> Unit,
    ) {
        view.requireViewById<ImageView>(R.id.icon).setImageDrawable(viewModel.icon)
        view.requireViewById<TextView>(R.id.title).text =
            view.context.getString(
                R.string.keyguard_affordance_enablement_dialog_title,
                viewModel.name
            )
        view.requireViewById<TextView>(R.id.message).text = buildString {
            viewModel.instructions.forEachIndexed { index, instruction ->
                append(instruction)
                if (index < viewModel.instructions.size - 1) {
                    append("\n")
                }
            }
        }
        view.requireViewById<TextView>(R.id.button).apply {
            text = viewModel.actionText
            setOnClickListener {
                if (viewModel.intent != null) {
                    view.context.startActivity(viewModel.intent)
                } else {
                    onDismissed()
                }
            }
        }
    }
}
+5 −16
Original line number Diff line number Diff line
@@ -17,11 +17,9 @@

package com.android.customization.picker.quickaffordance.ui.binder

import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.graphics.Rect
import android.view.LayoutInflater
import android.view.View
import androidx.core.view.ViewCompat
import androidx.lifecycle.Lifecycle
@@ -34,6 +32,8 @@ import com.android.customization.picker.quickaffordance.ui.adapter.AffordancesAd
import com.android.customization.picker.quickaffordance.ui.adapter.SlotTabAdapter
import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel
import com.android.wallpaper.R
import com.android.wallpaper.picker.common.dialog.ui.viewbinder.DialogViewBinder
import com.android.wallpaper.picker.common.dialog.ui.viewmodel.DialogViewModel
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
@@ -98,25 +98,14 @@ object KeyguardQuickAffordancePickerBinder {

    private fun showDialog(
        context: Context,
        request: KeyguardQuickAffordancePickerViewModel.DialogViewModel,
        request: DialogViewModel,
        onDismissed: () -> Unit,
    ): Dialog {
        val view: View =
            LayoutInflater.from(context)
                .inflate(
                    R.layout.keyguard_quick_affordance_enablement_dialog,
                    null,
                )
        KeyguardQuickAffordanceEnablementDialogBinder.bind(
            view = view,
        return DialogViewBinder.show(
            context = context,
            viewModel = request,
            onDismissed = onDismissed,
        )

        return AlertDialog.Builder(context, R.style.LightDialogTheme)
            .setView(view)
            .setOnDismissListener { onDismissed() }
            .show()
    }

    private class ItemSpacing : RecyclerView.ItemDecoration() {
+38 −28
Original line number Diff line number Diff line
@@ -32,6 +32,11 @@ import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordance
import com.android.systemui.shared.quickaffordance.shared.model.KeyguardQuickAffordancePreviewConstants
import com.android.wallpaper.R
import com.android.wallpaper.module.CurrentWallpaperInfoFactory
import com.android.wallpaper.picker.common.button.ui.viewmodel.ButtonStyle
import com.android.wallpaper.picker.common.button.ui.viewmodel.ButtonViewModel
import com.android.wallpaper.picker.common.dialog.ui.viewmodel.DialogViewModel
import com.android.wallpaper.picker.common.icon.ui.viewmodel.Icon
import com.android.wallpaper.picker.common.text.ui.viewmodel.Text
import com.android.wallpaper.picker.customization.ui.viewmodel.ScreenPreviewViewModel
import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor
import com.android.wallpaper.picker.undo.ui.viewmodel.UndoViewModel
@@ -262,14 +267,40 @@ private constructor(
    ) {
        _dialog.value =
            DialogViewModel(
                icon = icon,
                name = name,
                instructions = instructions,
                actionText = actionText
                        ?: applicationContext.getString(
                            R.string.keyguard_affordance_enablement_dialog_dismiss_button
                icon =
                    Icon.Loaded(
                        drawable = icon,
                        contentDescription = null,
                    ),
                title = Text.Loaded(name),
                message =
                    Text.Loaded(
                        buildString {
                            instructions.forEachIndexed { index, instruction ->
                                if (index > 0) {
                                    append('\n')
                                }

                                append(instruction)
                            }
                        }
                    ),
                buttons =
                    listOf(
                        ButtonViewModel(
                            text = actionText?.let { Text.Loaded(actionText) }
                                    ?: Text.Resource(
                                        R.string
                                            .keyguard_affordance_enablement_dialog_dismiss_button,
                                    ),
                            style = ButtonStyle.Primary,
                            onClicked = {
                                actionComponentName.toIntent()?.let { intent ->
                                    applicationContext.startActivity(intent)
                                }
                            }
                        ),
                    ),
                intent = actionComponentName.toIntent(),
            )
    }

@@ -326,27 +357,6 @@ private constructor(
        }
    }

    /** Encapsulates a request to show a dialog. */
    data class DialogViewModel(
        /** An icon to show. */
        val icon: Drawable,

        /** Name of the affordance. */
        val name: String,

        /** The set of instructions to show below the header. */
        val instructions: List<String>,

        /** Label for the dialog button. */
        val actionText: String,

        /**
         * Optional [Intent] to use to start an activity when the dialog button is clicked. If
         * `null`, the dialog should be dismissed.
         */
        val intent: Intent?,
    )

    private fun toDescriptionText(
        context: Context,
        slots: Map<String, KeyguardQuickAffordanceSlotViewModel>,
Loading