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

Commit 4f5ccc67 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic "catalyst" into main

* changes:
  [Catalyst] Migrate WifiCallingScreen to parameterized screen
  [Catalyst] Support parameterized screens
parents 3114fdfa 7a24cd61
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -157,11 +157,10 @@ fun transformFrameworkSetValueRequest(request: SetValueRequest): PreferenceSette
        SettingsPreferenceValue.TYPE_INT -> preferenceValueProto {
            intValue = request.preferenceValue.intValue
        }
        else -> null
    }
    return valueProto?.let {
        PreferenceSetterRequest(request.screenKey, request.preferenceKey, it)
        else -> return null
    }
    // TODO: support parameterized screen
    return PreferenceSetterRequest(request.screenKey, null, request.preferenceKey, valueProto)
}

/** Translate Catalyst SET VALUE result to Framework SET VALUE result */
+50 −9
Original line number Diff line number Diff line
@@ -16,15 +16,32 @@
package com.android.settings.wifi.calling

import android.content.Context
import android.telephony.SubscriptionManager
import android.os.Bundle
import android.telephony.SubscriptionManager.getDefaultSubscriptionId
import android.telephony.SubscriptionManager.isValidSubscriptionId
import com.android.settings.R
import com.android.settings.flags.Flags
import com.android.settings.network.SubscriptionUtil
import com.android.settings.network.telephony.wificalling.WifiCallingRepository
import com.android.settings.wifi.calling.WifiCallingSettingsForSub.EXTRA_SUB_ID
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge

@ProvidePreferenceScreen(WifiCallingScreen.KEY, parameterized = true, parameterizedMigration = true)
class WifiCallingScreen(override val arguments: Bundle) :
    PreferenceScreenCreator, PreferenceAvailabilityProvider {

    private val subId = arguments.getInt(EXTRA_SUB_ID, getDefaultSubscriptionId())

@ProvidePreferenceScreen(WifiCallingScreen.KEY)
class WifiCallingScreen : PreferenceScreenCreator {
    override val key: String
        get() = KEY

@@ -34,6 +51,8 @@ class WifiCallingScreen : PreferenceScreenCreator {
    override val summary: Int
        get() = R.string.wifi_calling_summary

    override fun isAvailable(context: Context) = isValidSubscriptionId(subId)

    override fun isFlagEnabled(context: Context) = Flags.catalystWifiCalling()

    override fun fragmentClass() = WifiCallingSettingsForSub::class.java
@@ -41,14 +60,36 @@ class WifiCallingScreen : PreferenceScreenCreator {
    override fun hasCompleteHierarchy() = false

    override fun getPreferenceHierarchy(context: Context) =
        preferenceHierarchy(context, this) {
            val subId = SubscriptionManager.getDefaultSubscriptionId()
            if (SubscriptionManager.isValidSubscriptionId(subId)) {
                +WifiCallingMainSwitchPreference(subId)
            }
        }
        preferenceHierarchy(context, this) { +WifiCallingMainSwitchPreference(subId) }

    companion object {
        const val KEY = "wifi_calling"

        /**
         * Provides arguments to generate [WifiCallingScreen].
         *
         * This method is used by annotation processor to produce
         * `PreferenceScreenMetadataParameterizedFactory`).
         */
        @JvmStatic
        fun parameters(context: Context): Flow<Bundle> {
            fun Int.toArguments() = Bundle(1).also { it.putInt(EXTRA_SUB_ID, this) }
            // handle backward compatibility with default subscription id
            val defaultSubId = getDefaultSubscriptionId()
            val flow =
                SubscriptionUtil.getSelectableSubscriptionInfoList(context)
                    .asFlow()
                    .filter {
                        val subId = it.subscriptionId
                        subId != defaultSubId &&
                            WifiCallingRepository(context, subId).wifiCallingReadyFlow().first()
                    }
                    .map { it.subscriptionId.toArguments() }
            // Bundle.EMPTY is for backward compatibility
            return when {
                isValidSubscriptionId(defaultSubId) -> merge(flowOf(Bundle.EMPTY), flow)
                else -> flow
            }
        }
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.settings.wifi.calling

import android.os.Bundle
import com.android.settings.flags.Flags
import com.android.settingslib.preference.CatalystScreenTestCase
import com.google.common.truth.Truth.assertThat
@@ -22,7 +23,7 @@ import org.junit.Test

class WifiCallingScreenTest : CatalystScreenTestCase() {

    override val preferenceScreenCreator = WifiCallingScreen()
    override val preferenceScreenCreator = WifiCallingScreen(Bundle.EMPTY)

    override val flagName: String
        get() = Flags.FLAG_CATALYST_WIFI_CALLING