Loading res/xml/my_device_info.xml +1 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ settings:controller="com.android.settings.deviceinfo.HardwareInfoPreferenceController"/> <!-- EID --> <com.android.settings.network.telephony.TelephonyPreferenceDialog <com.android.settingslib.CustomDialogPreferenceCompat android:key="eid_info" android:order="31" android:title="@string/status_eid" Loading src/com/android/settings/deviceinfo/simstatus/SimEidPreferenceController.kt +70 −29 Original line number Diff line number Diff line Loading @@ -21,16 +21,24 @@ import android.util.Log import android.view.WindowManager import android.widget.ImageView import android.widget.TextView import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.preference.Preference import androidx.preference.PreferenceScreen import com.android.settings.R import com.android.settings.core.BasePreferenceController import com.android.settings.deviceinfo.PhoneNumberUtil import com.android.settings.network.SubscriptionUtil import com.android.settings.network.telephony.TelephonyPreferenceDialog import com.android.settingslib.CustomDialogPreferenceCompat import com.android.settingslib.Utils import com.android.settingslib.qrcode.QrCodeGenerator import com.android.settingslib.spaprivileged.framework.common.userManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext /** * This is to show a preference regarding EID of SIM card. Loading @@ -41,7 +49,8 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : BasePreferenceController(context, preferenceKey) { private var slotSimStatus: SlotSimStatus? = null private var eidStatus: EidStatus? = null private lateinit var preference: TelephonyPreferenceDialog private lateinit var preference: CustomDialogPreferenceCompat private var coroutineScope: CoroutineScope? = null private lateinit var eid: String fun init(slotSimStatus: SlotSimStatus?, eidStatus: EidStatus?) { Loading @@ -49,21 +58,51 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : this.eidStatus = eidStatus } override fun getAvailabilityStatus(): Int { if (!SubscriptionUtil.isSimHardwareVisible(mContext)) return UNSUPPORTED_ON_DEVICE eid = eidStatus?.eid ?: "" val isAvailable = mContext.userManager.isAdminUser && !Utils.isWifiOnly(mContext) && eid.isNotEmpty() return if (isAvailable) AVAILABLE else CONDITIONALLY_UNAVAILABLE } /** * Returns available here, but UI availability is retrieved asynchronously later. * * Check [updateNonIndexableKeys] for search availability. */ override fun getAvailabilityStatus() = AVAILABLE override fun displayPreference(screen: PreferenceScreen) { super.displayPreference(screen) preference = screen.findPreference(preferenceKey)!! val title = getTitle() } override fun onViewCreated(viewLifecycleOwner: LifecycleOwner) { coroutineScope = viewLifecycleOwner.lifecycleScope coroutineScope?.launch { viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { update() } } } private suspend fun update() { val isAvailable = withContext(Dispatchers.Default) { getIsAvailableAndUpdateEid() } preference.isVisible = isAvailable if (isAvailable) { val title = withContext(Dispatchers.Default) { getTitle() } preference.title = title preference.dialogTitle = title updateDialog() } } private fun getIsAvailableAndUpdateEid(): Boolean { if (!SubscriptionUtil.isSimHardwareVisible(mContext) || !mContext.userManager.isAdminUser || Utils.isWifiOnly(mContext) ) { return false } eid = eidStatus?.eid ?: "" return eid.isNotEmpty() } /** Constructs title string. */ Loading @@ -82,13 +121,7 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : return mContext.getString(R.string.status_eid) } override fun updateState(preference: Preference?) { super.updateState(preference) updateDialog() } private fun updateDialog() { private suspend fun updateDialog() { val dialog = preference.dialog ?: return dialog.window?.setFlags( WindowManager.LayoutParams.FLAG_SECURE, Loading @@ -106,11 +139,17 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : } override fun handlePreferenceTreeClick(preference: Preference): Boolean { if (preference.key == preferenceKey) { this.preference.setOnShowListener { updateDialog() } if (preference.key != preferenceKey) return false this.preference.setOnShowListener { coroutineScope?.launch { updateDialog() } } return true } return super.handlePreferenceTreeClick(preference) override fun updateNonIndexableKeys(keys: MutableList<String>) { if (!getIsAvailableAndUpdateEid()) { keys.add(preferenceKey) } } companion object { Loading @@ -122,11 +161,13 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : * @param eid is the EID string * @return a Bitmap of QR code */ private fun getEidQrCode(eid: String): Bitmap? = try { QrCodeGenerator.encodeQrCode(eid, QR_CODE_SIZE) private suspend fun getEidQrCode(eid: String): Bitmap? = withContext(Dispatchers.Default) { try { QrCodeGenerator.encodeQrCode(contents = eid, size = QR_CODE_SIZE) } catch (exception: Exception) { Log.w(TAG, "Error when creating QR code width $QR_CODE_SIZE", exception) null } } } } src/com/android/settings/network/telephony/TelephonyPreferenceDialog.javadeleted 100644 → 0 +0 −44 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.settings.network.telephony; import android.content.Context; import android.util.AttributeSet; import com.android.settingslib.CustomDialogPreferenceCompat; /** * This is DialogPreference for supporting connectivity features. */ public class TelephonyPreferenceDialog extends CustomDialogPreferenceCompat { public TelephonyPreferenceDialog(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } public TelephonyPreferenceDialog(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public TelephonyPreferenceDialog(Context context, AttributeSet attrs) { super(context, attrs); } public TelephonyPreferenceDialog(Context context) { super(context); } } Loading
res/xml/my_device_info.xml +1 −1 Original line number Diff line number Diff line Loading @@ -114,7 +114,7 @@ settings:controller="com.android.settings.deviceinfo.HardwareInfoPreferenceController"/> <!-- EID --> <com.android.settings.network.telephony.TelephonyPreferenceDialog <com.android.settingslib.CustomDialogPreferenceCompat android:key="eid_info" android:order="31" android:title="@string/status_eid" Loading
src/com/android/settings/deviceinfo/simstatus/SimEidPreferenceController.kt +70 −29 Original line number Diff line number Diff line Loading @@ -21,16 +21,24 @@ import android.util.Log import android.view.WindowManager import android.widget.ImageView import android.widget.TextView import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.preference.Preference import androidx.preference.PreferenceScreen import com.android.settings.R import com.android.settings.core.BasePreferenceController import com.android.settings.deviceinfo.PhoneNumberUtil import com.android.settings.network.SubscriptionUtil import com.android.settings.network.telephony.TelephonyPreferenceDialog import com.android.settingslib.CustomDialogPreferenceCompat import com.android.settingslib.Utils import com.android.settingslib.qrcode.QrCodeGenerator import com.android.settingslib.spaprivileged.framework.common.userManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext /** * This is to show a preference regarding EID of SIM card. Loading @@ -41,7 +49,8 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : BasePreferenceController(context, preferenceKey) { private var slotSimStatus: SlotSimStatus? = null private var eidStatus: EidStatus? = null private lateinit var preference: TelephonyPreferenceDialog private lateinit var preference: CustomDialogPreferenceCompat private var coroutineScope: CoroutineScope? = null private lateinit var eid: String fun init(slotSimStatus: SlotSimStatus?, eidStatus: EidStatus?) { Loading @@ -49,21 +58,51 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : this.eidStatus = eidStatus } override fun getAvailabilityStatus(): Int { if (!SubscriptionUtil.isSimHardwareVisible(mContext)) return UNSUPPORTED_ON_DEVICE eid = eidStatus?.eid ?: "" val isAvailable = mContext.userManager.isAdminUser && !Utils.isWifiOnly(mContext) && eid.isNotEmpty() return if (isAvailable) AVAILABLE else CONDITIONALLY_UNAVAILABLE } /** * Returns available here, but UI availability is retrieved asynchronously later. * * Check [updateNonIndexableKeys] for search availability. */ override fun getAvailabilityStatus() = AVAILABLE override fun displayPreference(screen: PreferenceScreen) { super.displayPreference(screen) preference = screen.findPreference(preferenceKey)!! val title = getTitle() } override fun onViewCreated(viewLifecycleOwner: LifecycleOwner) { coroutineScope = viewLifecycleOwner.lifecycleScope coroutineScope?.launch { viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { update() } } } private suspend fun update() { val isAvailable = withContext(Dispatchers.Default) { getIsAvailableAndUpdateEid() } preference.isVisible = isAvailable if (isAvailable) { val title = withContext(Dispatchers.Default) { getTitle() } preference.title = title preference.dialogTitle = title updateDialog() } } private fun getIsAvailableAndUpdateEid(): Boolean { if (!SubscriptionUtil.isSimHardwareVisible(mContext) || !mContext.userManager.isAdminUser || Utils.isWifiOnly(mContext) ) { return false } eid = eidStatus?.eid ?: "" return eid.isNotEmpty() } /** Constructs title string. */ Loading @@ -82,13 +121,7 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : return mContext.getString(R.string.status_eid) } override fun updateState(preference: Preference?) { super.updateState(preference) updateDialog() } private fun updateDialog() { private suspend fun updateDialog() { val dialog = preference.dialog ?: return dialog.window?.setFlags( WindowManager.LayoutParams.FLAG_SECURE, Loading @@ -106,11 +139,17 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : } override fun handlePreferenceTreeClick(preference: Preference): Boolean { if (preference.key == preferenceKey) { this.preference.setOnShowListener { updateDialog() } if (preference.key != preferenceKey) return false this.preference.setOnShowListener { coroutineScope?.launch { updateDialog() } } return true } return super.handlePreferenceTreeClick(preference) override fun updateNonIndexableKeys(keys: MutableList<String>) { if (!getIsAvailableAndUpdateEid()) { keys.add(preferenceKey) } } companion object { Loading @@ -122,11 +161,13 @@ class SimEidPreferenceController(context: Context, preferenceKey: String) : * @param eid is the EID string * @return a Bitmap of QR code */ private fun getEidQrCode(eid: String): Bitmap? = try { QrCodeGenerator.encodeQrCode(eid, QR_CODE_SIZE) private suspend fun getEidQrCode(eid: String): Bitmap? = withContext(Dispatchers.Default) { try { QrCodeGenerator.encodeQrCode(contents = eid, size = QR_CODE_SIZE) } catch (exception: Exception) { Log.w(TAG, "Error when creating QR code width $QR_CODE_SIZE", exception) null } } } }
src/com/android/settings/network/telephony/TelephonyPreferenceDialog.javadeleted 100644 → 0 +0 −44 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.settings.network.telephony; import android.content.Context; import android.util.AttributeSet; import com.android.settingslib.CustomDialogPreferenceCompat; /** * This is DialogPreference for supporting connectivity features. */ public class TelephonyPreferenceDialog extends CustomDialogPreferenceCompat { public TelephonyPreferenceDialog(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } public TelephonyPreferenceDialog(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public TelephonyPreferenceDialog(Context context, AttributeSet attrs) { super(context, attrs); } public TelephonyPreferenceDialog(Context context) { super(context); } }