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

Commit 8be6d98b authored by tom hsu's avatar tom hsu
Browse files

[Satelllite] Avoid using "add ESIM page"

 - When user clicks preference UI, show a dialog to nofity user
   satellite session.

Flag: EXEMPT bug fix
Fix: b/402544816
Test: atest pass
Test: Manual test

Change-Id: Ifeff9368fed906bc56abcc8eb23748a71f79ee4d
parent 14fe4f0f
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -12768,6 +12768,10 @@ Data usage charges may apply.</string>
    <string name="title_satellite_supported_app_list_entry">see all apps</string>
    <!-- Title for a page of apps list page with Satellite service supported.  [CHAR LIMIT=60] -->
    <string name="title_satellite_supported_app_list_page">Supported apps on your phone</string>
    <!-- Title for showing a dialog to notify user sim restriction.  [CHAR LIMIT=60] -->
    <string name="title_satellite_dialog_for_sim_restriction">Can\u2019t add a SIM</string>
    <!-- Description for showing a dialog to notify user sim restriction.  [CHAR LIMIT=NONE] -->
    <string name="description_satellite_dialog_for_sim_restriction">End the satellite connection before you add a SIM</string>
    <!-- Title for Apn settings in mobile network settings [CHAR LIMIT=60] -->
    <string name="mobile_network_apn_title">Access Point Names</string>
+7 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import androidx.preference.Preference.OnPreferenceClickListener
import com.android.settings.R
import com.android.settings.flags.Flags
import com.android.settings.network.AirplaneModePreference.Companion.isAirplaneModeOn
import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn
import com.android.settings.network.SubscriptionUtil.getUniqueSubscriptionDisplayName
import com.android.settings.network.telephony.SimRepository
import com.android.settings.network.telephony.SubscriptionRepository
@@ -32,6 +33,7 @@ import com.android.settings.network.telephony.euicc.EuiccRepository
import com.android.settings.restriction.PreferenceRestrictionMixin
import com.android.settings.spa.network.getAddSimIntent
import com.android.settings.spa.network.startAddSimFlow
import com.android.settings.spa.network.startSatelliteWarningDialogFlow
import com.android.settingslib.RestrictedPreference
import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyedObserver
@@ -120,7 +122,11 @@ class MobileNetworkListScreen :
        val summary = preference.summary ?: return true // no-op
        val context = preference.context
        if (summary == context.getString(R.string.mobile_network_summary_add_a_network)) {
            if (isSatelliteOn(context, 3000)) {
                startSatelliteWarningDialogFlow(context) // start intent
            } else {
                startAddSimFlow(context) // start intent
            }
            return true
        }
        return false // start fragment
+10 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.settings.dashboard.DashboardFragment
import com.android.settings.network.telephony.SimRepository
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
import com.android.settings.spa.network.startAddSimFlow
import com.android.settings.spa.network.startSatelliteWarningDialogFlow
import com.android.settingslib.RestrictedPreference
import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
import com.android.settingslib.spaprivileged.settingsprovider.settingsGlobalBooleanFlow
@@ -51,11 +52,13 @@ constructor(
        MobileNetworkSummaryRepository(context),
    private val airplaneModeOnFlow: Flow<Boolean> =
        context.settingsGlobalBooleanFlow(Settings.Global.AIRPLANE_MODE_ON),
    private val satelliteIsStartedFlow: Flow<Boolean> = SatelliteRepository(context).getIsSessionStartedFlow()
) : BasePreferenceController(context, preferenceKey) {
    private val metricsFeatureProvider = featureFactory.metricsFeatureProvider
    private var preference: RestrictedPreference? = null

    private var isAirplaneModeOn = false
    private var isSatelliteOn = false

    override fun getAvailabilityStatus() =
        if (SimRepository(mContext).showMobileNetworkPageEntrance()) AVAILABLE
@@ -74,6 +77,9 @@ constructor(
            isAirplaneModeOn = it
            updateEnabled()
        }
        satelliteIsStartedFlow.collectLatestWithLifecycle(viewLifecycleOwner) {
            isSatelliteOn = it
        }
    }

    private fun update(state: MobileNetworkSummaryRepository.SubscriptionsState) {
@@ -87,6 +93,9 @@ constructor(
                preference.onPreferenceClickListener =
                    Preference.OnPreferenceClickListener {
                        logPreferenceClick()
                        if (isSatelliteOn)
                            startSatelliteWarningDialogFlow(context)
                        else
                            startAddSimFlow(context)
                        true
                    }
+56 −13
Original line number Diff line number Diff line
@@ -32,12 +32,21 @@ import com.android.settingslib.wifi.WifiUtils
/** A dialog to show the warning message when device is under satellite mode. */
class SatelliteWarningDialogActivity : SpaDialogWindowTypeActivity() {
    private var warningType = TYPE_IS_UNKNOWN

    private var customizedContent: HashMap<Int, String> = HashMap<Int, String>()
    private var isCustomizedContent = false
    override fun onCreate(savedInstanceState: Bundle?) {
        warningType = intent.getIntExtra(EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG, TYPE_IS_UNKNOWN)
        isCustomizedContent = intent.hasExtra(EXTRA_TYPE_OF_SATELLITE_CUSTOMIZED_CONTENT)
        if (isCustomizedContent) {
            customizedContent =
                intent.getSerializableExtra(EXTRA_TYPE_OF_SATELLITE_CUSTOMIZED_CONTENT)
                        as HashMap<Int, String>
        } else {
            warningType =
                intent.getIntExtra(EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG, TYPE_IS_UNKNOWN)
            if (warningType == TYPE_IS_UNKNOWN) {
                finish()
            }
        }
        super.onCreate(savedInstanceState)
    }

@@ -48,23 +57,52 @@ class SatelliteWarningDialogActivity : SpaDialogWindowTypeActivity() {
        )
    }

    fun getBodyString(): String {
        if (isCustomizedContent) {
            // For customized content
            return customizedContent.get(CUSTOM_CONTENT_DESCRIPTION).toString()
        } else {
            // For wifi, bluetooth, airplane mode
            return String.format(
                getString(R.string.satellite_warning_dialog_content),
                getTypeString(warningType)
            )
        }
    }

    fun getButtonString(): String {
        if (isCustomizedContent)
            // For customized content
            return customizedContent.get(CUSTOM_CONTENT_BUTTON_NAME).toString()
        else
            // For wifi, bluetooth, airplane mode
            return getString(com.android.settingslib.R.string.okay)
    }

    fun getTitleString(): String {
        if (isCustomizedContent)
            // For customized content
            return customizedContent.get(CUSTOM_CONTENT_TITLE).toString()
        else
            // For wifi, bluetooth, airplane mode
            return String.format(
                getString(R.string.satellite_warning_dialog_title),
                getTypeString(warningType)
            )

    }

    @Composable
    override fun Content() {
        SettingsAlertDialogContent(
            dismissButton = null,
            confirmButton = AlertDialogButton(
                getString(com.android.settingslib.R.string.okay)
                getButtonString()
            ) { finish() },
            title = String.format(
                getString(R.string.satellite_warning_dialog_title),
                getTypeString(warningType)
            ),
            title = getTitleString(),
            text = {
                Text(
                    String.format(
                        getString(R.string.satellite_warning_dialog_content),
                        getTypeString(warningType)
                    ),
                    getBodyString(),
                    modifier = Modifier.fillMaxWidth(),
                    textAlign = TextAlign.Center
                )
@@ -83,9 +121,14 @@ class SatelliteWarningDialogActivity : SpaDialogWindowTypeActivity() {
    companion object {
        const val EXTRA_TYPE_OF_SATELLITE_WARNING_DIALOG: String =
            "extra_type_of_satellite_warning_dialog"
        const val EXTRA_TYPE_OF_SATELLITE_CUSTOMIZED_CONTENT: String =
            "extra_type_of_satellite_customized_content"
        const val TYPE_IS_UNKNOWN = -1
        const val TYPE_IS_WIFI = 0
        const val TYPE_IS_BLUETOOTH = 1
        const val TYPE_IS_AIRPLANE_MODE = 2
        const val CUSTOM_CONTENT_TITLE = 0
        const val CUSTOM_CONTENT_DESCRIPTION = 1
        const val CUSTOM_CONTENT_BUTTON_NAME = 2
    }
}
 No newline at end of file
+15 −0
Original line number Diff line number Diff line
@@ -35,6 +35,10 @@ import androidx.compose.ui.res.stringResource
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.settings.R
import com.android.settings.Utils
import com.android.settings.network.SatelliteWarningDialogActivity
import com.android.settings.network.SatelliteWarningDialogActivity.Companion.CUSTOM_CONTENT_BUTTON_NAME
import com.android.settings.network.SatelliteWarningDialogActivity.Companion.CUSTOM_CONTENT_DESCRIPTION
import com.android.settings.network.SatelliteWarningDialogActivity.Companion.CUSTOM_CONTENT_TITLE
import com.android.settings.network.SubscriptionUtil
import com.android.settings.network.telephony.MobileNetworkUtils
import com.android.settings.network.telephony.SubscriptionActivationRepository
@@ -143,3 +147,14 @@ fun getAddSimIntent() = Intent(EuiccManager.ACTION_PROVISION_EMBEDDED_SUBSCRIPTI
    setPackage(Utils.PHONE_PACKAGE_NAME)
    putExtra(EuiccManager.EXTRA_FORCE_PROVISION, true)
}

fun startSatelliteWarningDialogFlow(context: Context) = context.startActivity(getSatelliteWarningDialogIntent(context))

fun getSatelliteWarningDialogIntent(context: Context) = Intent(context,
    SatelliteWarningDialogActivity::class.java).apply {
    val content = HashMap<Int, String>()
    content.put(CUSTOM_CONTENT_TITLE, context.getString(R.string.title_satellite_dialog_for_sim_restriction))
    content.put(CUSTOM_CONTENT_DESCRIPTION, context.getString(R.string.description_satellite_dialog_for_sim_restriction))
    content.put(CUSTOM_CONTENT_BUTTON_NAME, context.getString(R.string.okay))
    putExtra(SatelliteWarningDialogActivity.EXTRA_TYPE_OF_SATELLITE_CUSTOMIZED_CONTENT, content)
}
Loading