[Catalyst] Migrate WifiCallingScreen to parameterized screen
Bug: 388420844 Bug: 372732219 Flag: com.android.settings.flags.catalyst_wifi_calling Test: devtool Change-Id: I322001acc453eae0d69761f7a585c6f33087ef6a
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user