Merge "Use dark theme for alerts if device is in dark mode"
diff --git a/sip/src/com/android/services/telephony/sip/SipEditor.java b/sip/src/com/android/services/telephony/sip/SipEditor.java
index dd475e6..9efe5bf 100644
--- a/sip/src/com/android/services/telephony/sip/SipEditor.java
+++ b/sip/src/com/android/services/telephony/sip/SipEditor.java
@@ -16,7 +16,6 @@
 
 package com.android.services.telephony.sip;
 
-import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
 import android.content.Intent;
@@ -37,6 +36,8 @@
 import android.widget.Button;
 import android.widget.Toast;
 
+import com.android.phone.FrameworksUtils;
+
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.util.Arrays;
@@ -93,7 +94,7 @@
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             String message = getArguments().getString(KEY_MESSAGE);
 
-            return new AlertDialog.Builder(getActivity())
+            return FrameworksUtils.makeAlertDialogBuilder(getActivity())
                     .setTitle(android.R.string.dialog_alert_title)
                     .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setMessage(message)
diff --git a/sip/src/com/android/services/telephony/sip/SipSettings.java b/sip/src/com/android/services/telephony/sip/SipSettings.java
index 813ba51..5137963 100644
--- a/sip/src/com/android/services/telephony/sip/SipSettings.java
+++ b/sip/src/com/android/services/telephony/sip/SipSettings.java
@@ -17,7 +17,6 @@
 package com.android.services.telephony.sip;
 
 import android.app.ActionBar;
-import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -39,6 +38,7 @@
 import android.view.Menu;
 import android.view.MenuItem;
 
+import com.android.phone.FrameworksUtils;
 import com.android.phone.R;
 
 import java.io.IOException;
@@ -287,7 +287,7 @@
             startSipEditor(profile);
             return;
         }
-        new AlertDialog.Builder(this)
+        FrameworksUtils.makeAlertDialogBuilder(this)
                 .setTitle(R.string.alert_dialog_close)
                 .setIconAttribute(android.R.attr.alertDialogIcon)
                 .setPositiveButton(R.string.close_profile,
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index ec6ea2b..d249fae 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -220,7 +220,7 @@
             if (mImsMgr.isEnhanced4gLteModeSettingEnabledByUser()) {
                 mImsMgr.setVtSetting((boolean) objValue);
             } else {
-                AlertDialog.Builder builder = new AlertDialog.Builder(this);
+                AlertDialog.Builder builder = FrameworksUtils.makeAlertDialogBuilder(this);
                 DialogInterface.OnClickListener networkSettingsClickListener =
                         new Dialog.OnClickListener() {
                             @Override
diff --git a/src/com/android/phone/CallForwardEditPreference.java b/src/com/android/phone/CallForwardEditPreference.java
index bf296f9..db1c5b4 100644
--- a/src/com/android/phone/CallForwardEditPreference.java
+++ b/src/com/android/phone/CallForwardEditPreference.java
@@ -427,7 +427,8 @@
                                     default: // not reachable
                                         s = getContext().getText(R.string.disable_cfnrc_forbidden);
                                 }
-                                AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+                                AlertDialog.Builder builder =
+                                        FrameworksUtils.makeAlertDialogBuilder(getContext());
                                 builder.setNeutralButton(R.string.close_dialog, null);
                                 builder.setTitle(getContext()
                                         .getText(R.string.error_updating_title));
@@ -440,7 +441,8 @@
                                 // Handle the fail-to-enable case.
                                 CharSequence s = getContext()
                                     .getText(R.string.registration_cf_forbidden);
-                                AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
+                                AlertDialog.Builder builder =
+                                        FrameworksUtils.makeAlertDialogBuilder(getContext());
                                 builder.setNeutralButton(R.string.close_dialog, null);
                                 builder.setTitle(getContext()
                                         .getText(R.string.error_updating_title));
diff --git a/src/com/android/phone/CdmaCallWaitingPreference.java b/src/com/android/phone/CdmaCallWaitingPreference.java
index 3713b19..6ff47d2 100644
--- a/src/com/android/phone/CdmaCallWaitingPreference.java
+++ b/src/com/android/phone/CdmaCallWaitingPreference.java
@@ -78,7 +78,7 @@
     public void onClick() {
         super.onClick();
 
-        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
+        AlertDialog.Builder builder = FrameworksUtils.makeAlertDialogBuilder(mContext);
         builder.setTitle(mContext.getText(R.string.cdma_call_waiting));
         builder.setMessage(mContext.getText(R.string.enable_cdma_call_waiting_setting));
         builder.setPositiveButton(R.string.enable_cdma_cw, new DialogInterface.OnClickListener() {
diff --git a/src/com/android/phone/ChangeIccPinScreen.java b/src/com/android/phone/ChangeIccPinScreen.java
index 70bf431..5369aa3 100644
--- a/src/com/android/phone/ChangeIccPinScreen.java
+++ b/src/com/android/phone/ChangeIccPinScreen.java
@@ -277,7 +277,7 @@
     private AlertDialog mPUKAlert;
     private void displayPUKAlert () {
         if (mPUKAlert == null) {
-            mPUKAlert = new AlertDialog.Builder(this)
+            mPUKAlert = FrameworksUtils.makeAlertDialogBuilder(this)
             .setMessage (R.string.puk_requested)
             .setCancelable(false)
             .show();
diff --git a/src/com/android/phone/FrameworksUtils.java b/src/com/android/phone/FrameworksUtils.java
new file mode 100644
index 0000000..dcf10bd
--- /dev/null
+++ b/src/com/android/phone/FrameworksUtils.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2021 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.phone;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.res.Configuration;
+
+/**
+ * This class provides utility functions over framework APIs
+ */
+public class FrameworksUtils {
+    /**
+     * Create a new instance of {@link AlertDialog.Builder}.
+     * @param context reference to a Context
+     * @return an instance of AlertDialog.Builder
+     */
+    public static AlertDialog.Builder makeAlertDialogBuilder(Context context) {
+        boolean isDarkTheme = (context.getResources().getConfiguration().uiMode
+                & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
+        return new AlertDialog.Builder(context, isDarkTheme
+                ? android.R.style.Theme_DeviceDefault_Dialog_Alert : 0);
+    }
+}
diff --git a/src/com/android/phone/PhoneDisplayMessage.java b/src/com/android/phone/PhoneDisplayMessage.java
index 199fbb8..be7fc7f 100644
--- a/src/com/android/phone/PhoneDisplayMessage.java
+++ b/src/com/android/phone/PhoneDisplayMessage.java
@@ -68,7 +68,7 @@
         // displaying system alert dialog on the screen instead of
         // using another activity to display the message.  This
         // places the message at the forefront of the UI.
-        sDisplayMessageDialog = new AlertDialog.Builder(context)
+        sDisplayMessageDialog = FrameworksUtils.makeAlertDialogBuilder(context)
                 .setIcon(android.R.drawable.ic_dialog_info)
                 .setTitle(title)
                 .setMessage(msg)
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index c520063..35cfdd3 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -468,7 +468,8 @@
                     };
 
                 // build the dialog
-                final AlertDialog newDialog = new AlertDialog.Builder(contextThemeWrapper)
+                final AlertDialog newDialog =
+                        FrameworksUtils.makeAlertDialogBuilder(contextThemeWrapper)
                         .setMessage(text)
                         .setView(dialogView)
                         .setPositiveButton(R.string.send_button, mUSSDDialogListener)
diff --git a/src/com/android/phone/SpecialCharSequenceMgr.java b/src/com/android/phone/SpecialCharSequenceMgr.java
index 674449e..3bf0e1a 100644
--- a/src/com/android/phone/SpecialCharSequenceMgr.java
+++ b/src/com/android/phone/SpecialCharSequenceMgr.java
@@ -264,7 +264,7 @@
                 }
                 return isMMIHandled;
             } else {
-                AlertDialog dialog = new AlertDialog.Builder(context)
+                AlertDialog dialog = FrameworksUtils.makeAlertDialogBuilder(context)
                         .setMessage(R.string.pin_puk_system_user_only)
                         .setPositiveButton(R.string.ok, null)
                         .setCancelable(true).create();
@@ -294,7 +294,7 @@
         int labelId = TelephonyCapabilities.getDeviceIdLabel(phone);
         String deviceId = phone.getDeviceId();
 
-        AlertDialog alert = new AlertDialog.Builder(context)
+        AlertDialog alert = FrameworksUtils.makeAlertDialogBuilder(context)
                 .setTitle(labelId)
                 .setMessage(deviceId)
                 .setPositiveButton(R.string.ok, null)
diff --git a/src/com/android/phone/TimeConsumingPreferenceActivity.java b/src/com/android/phone/TimeConsumingPreferenceActivity.java
index 8c5ae6d..caef176 100644
--- a/src/com/android/phone/TimeConsumingPreferenceActivity.java
+++ b/src/com/android/phone/TimeConsumingPreferenceActivity.java
@@ -84,7 +84,7 @@
                 || id == FDN_CHECK_FAILURE || id == STK_CC_SS_TO_DIAL_ERROR
                 || id == STK_CC_SS_TO_USSD_ERROR || id == STK_CC_SS_TO_SS_ERROR
                 || id == STK_CC_SS_TO_DIAL_VIDEO_ERROR) {
-            AlertDialog.Builder builder = new AlertDialog.Builder(this);
+            AlertDialog.Builder builder = FrameworksUtils.makeAlertDialogBuilder(this);
 
             int msgId;
             int titleId = R.string.error_updating_title;
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 7a0d8c2..0d2b71b 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -65,6 +65,7 @@
 import com.android.internal.telephony.imsphone.ImsExternalCallTracker;
 import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.imsphone.ImsPhoneConnection;
+import com.android.phone.FrameworksUtils;
 import com.android.phone.MMIDialogActivity;
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
@@ -2459,7 +2460,7 @@
                 if (showDialog) {
                     Log.d(this, "Creating UT Data enable dialog");
                     String message = SuppServicesUiUtil.makeMessage(context, suppKey, phone);
-                    AlertDialog.Builder builder = new AlertDialog.Builder(context);
+                    AlertDialog.Builder builder = FrameworksUtils.makeAlertDialogBuilder(context);
                     DialogInterface.OnClickListener networkSettingsClickListener =
                             new Dialog.OnClickListener() {
                                 @Override