Loading res/layout/dialog_sim_status.xml +6 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout Loading Loading @@ -168,6 +169,11 @@ android:layout_height="wrap_content" android:textIsSelectable="true" android:text="@string/device_info_not_available"/> <ImageView android:id="@+id/esim_id_qrcode" android:layout_width="match_parent" android:layout_height="wrap_content" tools:ignore="ContentDescription" /> <TextView style="@style/device_info_dialog_label" Loading src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java +32 −5 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; Loading Loading @@ -72,7 +73,8 @@ import java.util.concurrent.atomic.AtomicReference; /** * Controller for Sim Status information within the About Phone Settings page. */ public class SimStatusDialogController implements LifecycleObserver { public class SimStatusDialogController implements LifecycleObserver, DialogInterface.OnShowListener { private final static String TAG = "SimStatusDialogCtrl"; Loading Loading @@ -107,6 +109,8 @@ public class SimStatusDialogController implements LifecycleObserver { @VisibleForTesting final static int EID_INFO_VALUE_ID = R.id.esim_id_value; @VisibleForTesting final static int EID_INFO_QRCODE_ID = R.id.esim_id_qrcode; @VisibleForTesting final static int IMS_REGISTRATION_STATE_LABEL_ID = R.id.ims_reg_state_label; @VisibleForTesting final static int IMS_REGISTRATION_STATE_VALUE_ID = R.id.ims_reg_state_value; Loading Loading @@ -158,6 +162,7 @@ public class SimStatusDialogController implements LifecycleObserver { private boolean mShowLatestAreaInfo; private boolean mIsRegisteredListener = false; private AtomicReference<String> mEid = null; private final BroadcastReceiver mAreaInfoReceiver = new BroadcastReceiver() { @Override Loading Loading @@ -263,6 +268,19 @@ public class SimStatusDialogController implements LifecycleObserver { updateImsRegistrationState(); } /** * Callback when dialog end of show(). */ public void onShow(DialogInterface dialog) { if (mEid != null) { String eidText = mEid.get(); if (eidText != null) { // Present QR code after the completion of layout mDialog.setQrCode(EID_INFO_QRCODE_ID, eidText); } } } /** * Deinitialization works */ Loading Loading @@ -618,8 +636,8 @@ public class SimStatusDialogController implements LifecycleObserver { @VisibleForTesting protected void requestForUpdateEid() { ThreadUtils.postOnBackgroundThread(() -> { final AtomicReference<String> eid = getEid(mSlotIndex); ThreadUtils.postOnMainThread(() -> updateEid(eid)); mEid = getEid(mSlotIndex); ThreadUtils.postOnMainThread(() -> updateEid(mEid)); }); } Loading Loading @@ -663,11 +681,20 @@ public class SimStatusDialogController implements LifecycleObserver { @VisibleForTesting protected void updateEid(AtomicReference<String> eid) { boolean removeQrCode = true; if (eid == null) { mDialog.removeSettingFromScreen(EID_INFO_LABEL_ID); mDialog.removeSettingFromScreen(EID_INFO_VALUE_ID); } else if (eid.get() != null) { mDialog.setText(EID_INFO_VALUE_ID, eid.get()); mDialog.removeSettingFromScreen(EID_INFO_QRCODE_ID); } else { String eidText = eid.get(); if (eidText != null) { mDialog.setText(EID_INFO_VALUE_ID, eidText); removeQrCode = (eidText == ""); } } if (removeQrCode) { mDialog.removeSettingFromScreen(EID_INFO_QRCODE_ID); } } Loading src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java +25 −0 Original line number Diff line number Diff line Loading @@ -19,11 +19,14 @@ package com.android.settings.deviceinfo.simstatus; import android.app.Dialog; import android.app.settings.SettingsEnums; import android.os.Bundle; import android.graphics.Bitmap; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; import android.util.Log; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; Loading @@ -32,6 +35,7 @@ import androidx.fragment.app.FragmentManager; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.deviceinfo.PhoneNumberUtil; import com.android.settingslib.qrcode.QrCodeGenerator; import java.util.Arrays; import java.util.stream.IntStream; Loading Loading @@ -80,6 +84,7 @@ public class SimStatusDialogFragment extends InstrumentedDialogFragment { Dialog dlg = builder.setView(mRootView).create(); dlg.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); dlg.setOnShowListener(mController); return dlg; } Loading Loading @@ -107,6 +112,10 @@ public class SimStatusDialogFragment extends InstrumentedDialogFragment { .sorted().toArray(); public void setText(int viewId, CharSequence text) { setText(viewId, text, true); } public void setText(int viewId, CharSequence text, boolean enableCopy) { final TextView textView = mRootView.findViewById(viewId); if (textView == null) { return; Loading @@ -117,5 +126,21 @@ public class SimStatusDialogFragment extends InstrumentedDialogFragment { text = PhoneNumberUtil.expandByTts(text); } textView.setText(text); textView.setTextIsSelectable(enableCopy); } public void setQrCode(int viewId, String qrcodeText) { ImageView qrCodeView = (ImageView) mRootView.findViewById(viewId); Bitmap qrCodeBitmap = null; try { qrCodeBitmap = QrCodeGenerator.encodeQrCode(qrcodeText, qrCodeView.getWidth()); } catch (Exception exception) { Log.w(TAG, "Error when presenting QR code in + " + qrCodeView, exception); } if (qrCodeBitmap == null) { return; } qrCodeView.setImageBitmap(qrCodeBitmap); } } Loading
res/layout/dialog_sim_status.xml +6 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout Loading Loading @@ -168,6 +169,11 @@ android:layout_height="wrap_content" android:textIsSelectable="true" android:text="@string/device_info_not_available"/> <ImageView android:id="@+id/esim_id_qrcode" android:layout_width="match_parent" android:layout_height="wrap_content" tools:ignore="ContentDescription" /> <TextView style="@style/device_info_dialog_label" Loading
src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java +32 −5 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; Loading Loading @@ -72,7 +73,8 @@ import java.util.concurrent.atomic.AtomicReference; /** * Controller for Sim Status information within the About Phone Settings page. */ public class SimStatusDialogController implements LifecycleObserver { public class SimStatusDialogController implements LifecycleObserver, DialogInterface.OnShowListener { private final static String TAG = "SimStatusDialogCtrl"; Loading Loading @@ -107,6 +109,8 @@ public class SimStatusDialogController implements LifecycleObserver { @VisibleForTesting final static int EID_INFO_VALUE_ID = R.id.esim_id_value; @VisibleForTesting final static int EID_INFO_QRCODE_ID = R.id.esim_id_qrcode; @VisibleForTesting final static int IMS_REGISTRATION_STATE_LABEL_ID = R.id.ims_reg_state_label; @VisibleForTesting final static int IMS_REGISTRATION_STATE_VALUE_ID = R.id.ims_reg_state_value; Loading Loading @@ -158,6 +162,7 @@ public class SimStatusDialogController implements LifecycleObserver { private boolean mShowLatestAreaInfo; private boolean mIsRegisteredListener = false; private AtomicReference<String> mEid = null; private final BroadcastReceiver mAreaInfoReceiver = new BroadcastReceiver() { @Override Loading Loading @@ -263,6 +268,19 @@ public class SimStatusDialogController implements LifecycleObserver { updateImsRegistrationState(); } /** * Callback when dialog end of show(). */ public void onShow(DialogInterface dialog) { if (mEid != null) { String eidText = mEid.get(); if (eidText != null) { // Present QR code after the completion of layout mDialog.setQrCode(EID_INFO_QRCODE_ID, eidText); } } } /** * Deinitialization works */ Loading Loading @@ -618,8 +636,8 @@ public class SimStatusDialogController implements LifecycleObserver { @VisibleForTesting protected void requestForUpdateEid() { ThreadUtils.postOnBackgroundThread(() -> { final AtomicReference<String> eid = getEid(mSlotIndex); ThreadUtils.postOnMainThread(() -> updateEid(eid)); mEid = getEid(mSlotIndex); ThreadUtils.postOnMainThread(() -> updateEid(mEid)); }); } Loading Loading @@ -663,11 +681,20 @@ public class SimStatusDialogController implements LifecycleObserver { @VisibleForTesting protected void updateEid(AtomicReference<String> eid) { boolean removeQrCode = true; if (eid == null) { mDialog.removeSettingFromScreen(EID_INFO_LABEL_ID); mDialog.removeSettingFromScreen(EID_INFO_VALUE_ID); } else if (eid.get() != null) { mDialog.setText(EID_INFO_VALUE_ID, eid.get()); mDialog.removeSettingFromScreen(EID_INFO_QRCODE_ID); } else { String eidText = eid.get(); if (eidText != null) { mDialog.setText(EID_INFO_VALUE_ID, eidText); removeQrCode = (eidText == ""); } } if (removeQrCode) { mDialog.removeSettingFromScreen(EID_INFO_QRCODE_ID); } } Loading
src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java +25 −0 Original line number Diff line number Diff line Loading @@ -19,11 +19,14 @@ package com.android.settings.deviceinfo.simstatus; import android.app.Dialog; import android.app.settings.SettingsEnums; import android.os.Bundle; import android.graphics.Bitmap; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; import android.util.Log; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; Loading @@ -32,6 +35,7 @@ import androidx.fragment.app.FragmentManager; import com.android.settings.R; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.deviceinfo.PhoneNumberUtil; import com.android.settingslib.qrcode.QrCodeGenerator; import java.util.Arrays; import java.util.stream.IntStream; Loading Loading @@ -80,6 +84,7 @@ public class SimStatusDialogFragment extends InstrumentedDialogFragment { Dialog dlg = builder.setView(mRootView).create(); dlg.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); dlg.setOnShowListener(mController); return dlg; } Loading Loading @@ -107,6 +112,10 @@ public class SimStatusDialogFragment extends InstrumentedDialogFragment { .sorted().toArray(); public void setText(int viewId, CharSequence text) { setText(viewId, text, true); } public void setText(int viewId, CharSequence text, boolean enableCopy) { final TextView textView = mRootView.findViewById(viewId); if (textView == null) { return; Loading @@ -117,5 +126,21 @@ public class SimStatusDialogFragment extends InstrumentedDialogFragment { text = PhoneNumberUtil.expandByTts(text); } textView.setText(text); textView.setTextIsSelectable(enableCopy); } public void setQrCode(int viewId, String qrcodeText) { ImageView qrCodeView = (ImageView) mRootView.findViewById(viewId); Bitmap qrCodeBitmap = null; try { qrCodeBitmap = QrCodeGenerator.encodeQrCode(qrcodeText, qrCodeView.getWidth()); } catch (Exception exception) { Log.w(TAG, "Error when presenting QR code in + " + qrCodeView, exception); } if (qrCodeBitmap == null) { return; } qrCodeView.setImageBitmap(qrCodeBitmap); } }