Loading src/com/android/settings/network/telephony/DeleteSimProfilePreferenceController.kt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,7 @@ import androidx.preference.PreferenceScreen import com.android.settings.R import com.android.settings.R import com.android.settings.core.BasePreferenceController import com.android.settings.core.BasePreferenceController import com.android.settings.network.SubscriptionUtil import com.android.settings.network.SubscriptionUtil import com.android.settings.wifi.dpp.WifiDppUtils import com.android.settings.network.telephony.MobileNetworkUtils import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle /** This controls a preference allowing the user to delete the profile for an eSIM. */ /** This controls a preference allowing the user to delete the profile for an eSIM. */ Loading Loading @@ -65,7 +65,7 @@ class DeleteSimProfilePreferenceController(context: Context, preferenceKey: Stri override fun handlePreferenceTreeClick(preference: Preference): Boolean { override fun handlePreferenceTreeClick(preference: Preference): Boolean { if (preference.key != preferenceKey) return false if (preference.key != preferenceKey) return false WifiDppUtils.showLockScreen(mContext) { deleteSim() } MobileNetworkUtils.showLockScreen(mContext) { deleteSim() } return true return true } } Loading src/com/android/settings/network/telephony/MobileNetworkUtils.java +56 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static com.android.settings.network.telephony.TelephonyConstants.Telephon import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO; import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO; import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA; import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA; import android.app.KeyguardManager; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; Loading @@ -41,13 +42,18 @@ import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable; import android.hardware.biometrics.BiometricPrompt; import android.net.ConnectivityManager; import android.net.ConnectivityManager; import android.net.Network; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkCapabilities; import android.os.Bundle; import android.os.Bundle; import android.os.CancellationSignal; import android.os.Handler; import android.os.Looper; import android.os.PersistableBundle; import android.os.PersistableBundle; import android.os.SystemClock; import android.os.SystemClock; import android.os.SystemProperties; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager; import android.provider.Settings; import android.provider.Settings; import android.telecom.PhoneAccountHandle; import android.telecom.PhoneAccountHandle; Loading @@ -68,6 +74,7 @@ import android.text.TextUtils; import android.util.Log; import android.util.Log; import android.view.Gravity; import android.view.Gravity; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; Loading Loading @@ -1049,4 +1056,53 @@ public class MobileNetworkUtils { .launch(); .launch(); } } /** * Shows authentication screen to confirm credentials (pin/pattern/password) for the current * user of the device. * * <p>Similar to WifiDppUtils.showLockScreen(), but doesn't check for the existence of * SIM PIN lock, only screen PIN lock. * * @param context The {@code Context} used to get {@link KeyguardManager} service * @param onSuccess The {@code Runnable} which will be executed if the user does not setup * device security or if lock screen is unlocked */ public static void showLockScreen(@NonNull Context context, @NonNull Runnable onSuccess) { final KeyguardManager keyguardManager = context.getSystemService(KeyguardManager.class); if (keyguardManager.isDeviceSecure()) { final BiometricPrompt.AuthenticationCallback authenticationCallback = new BiometricPrompt.AuthenticationCallback() { @Override public void onAuthenticationSucceeded( BiometricPrompt.AuthenticationResult result) { onSuccess.run(); } @Override public void onAuthenticationError(int errorCode, CharSequence errString) { // Do nothing } }; final int userId = UserHandle.myUserId(); final BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(context) .setTitle(context.getText(R.string.wifi_dpp_lockscreen_title)) .setDeviceCredentialAllowed(true) .setTextForDeviceCredential( /* title= */ null, Utils.getConfirmCredentialStringForUser( context, userId, Utils.getCredentialType(context, userId)), /* description= */ null) .build(); final Handler handler = new Handler(Looper.getMainLooper()); biometricPrompt.authenticate( new CancellationSignal(), handler::post, authenticationCallback); } else { onSuccess.run(); } } } } Loading
src/com/android/settings/network/telephony/DeleteSimProfilePreferenceController.kt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,7 @@ import androidx.preference.PreferenceScreen import com.android.settings.R import com.android.settings.R import com.android.settings.core.BasePreferenceController import com.android.settings.core.BasePreferenceController import com.android.settings.network.SubscriptionUtil import com.android.settings.network.SubscriptionUtil import com.android.settings.wifi.dpp.WifiDppUtils import com.android.settings.network.telephony.MobileNetworkUtils import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle /** This controls a preference allowing the user to delete the profile for an eSIM. */ /** This controls a preference allowing the user to delete the profile for an eSIM. */ Loading Loading @@ -65,7 +65,7 @@ class DeleteSimProfilePreferenceController(context: Context, preferenceKey: Stri override fun handlePreferenceTreeClick(preference: Preference): Boolean { override fun handlePreferenceTreeClick(preference: Preference): Boolean { if (preference.key != preferenceKey) return false if (preference.key != preferenceKey) return false WifiDppUtils.showLockScreen(mContext) { deleteSim() } MobileNetworkUtils.showLockScreen(mContext) { deleteSim() } return true return true } } Loading
src/com/android/settings/network/telephony/MobileNetworkUtils.java +56 −0 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static com.android.settings.network.telephony.TelephonyConstants.Telephon import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO; import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO; import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA; import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA; import android.app.KeyguardManager; import android.content.ContentResolver; import android.content.ContentResolver; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; Loading @@ -41,13 +42,18 @@ import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable; import android.hardware.biometrics.BiometricPrompt; import android.net.ConnectivityManager; import android.net.ConnectivityManager; import android.net.Network; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkCapabilities; import android.os.Bundle; import android.os.Bundle; import android.os.CancellationSignal; import android.os.Handler; import android.os.Looper; import android.os.PersistableBundle; import android.os.PersistableBundle; import android.os.SystemClock; import android.os.SystemClock; import android.os.SystemProperties; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.os.UserManager; import android.provider.Settings; import android.provider.Settings; import android.telecom.PhoneAccountHandle; import android.telecom.PhoneAccountHandle; Loading @@ -68,6 +74,7 @@ import android.text.TextUtils; import android.util.Log; import android.util.Log; import android.view.Gravity; import android.view.Gravity; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; Loading Loading @@ -1049,4 +1056,53 @@ public class MobileNetworkUtils { .launch(); .launch(); } } /** * Shows authentication screen to confirm credentials (pin/pattern/password) for the current * user of the device. * * <p>Similar to WifiDppUtils.showLockScreen(), but doesn't check for the existence of * SIM PIN lock, only screen PIN lock. * * @param context The {@code Context} used to get {@link KeyguardManager} service * @param onSuccess The {@code Runnable} which will be executed if the user does not setup * device security or if lock screen is unlocked */ public static void showLockScreen(@NonNull Context context, @NonNull Runnable onSuccess) { final KeyguardManager keyguardManager = context.getSystemService(KeyguardManager.class); if (keyguardManager.isDeviceSecure()) { final BiometricPrompt.AuthenticationCallback authenticationCallback = new BiometricPrompt.AuthenticationCallback() { @Override public void onAuthenticationSucceeded( BiometricPrompt.AuthenticationResult result) { onSuccess.run(); } @Override public void onAuthenticationError(int errorCode, CharSequence errString) { // Do nothing } }; final int userId = UserHandle.myUserId(); final BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(context) .setTitle(context.getText(R.string.wifi_dpp_lockscreen_title)) .setDeviceCredentialAllowed(true) .setTextForDeviceCredential( /* title= */ null, Utils.getConfirmCredentialStringForUser( context, userId, Utils.getCredentialType(context, userId)), /* description= */ null) .build(); final Handler handler = new Handler(Looper.getMainLooper()); biometricPrompt.authenticate( new CancellationSignal(), handler::post, authenticationCallback); } else { onSuccess.run(); } } } }