add flag for emergency calling notif changes

This CL gates the changes in ag/24212903 with a flag.

Fixes: 310010827
Bug: 290241725 (orignal bug)
Test: updated 2 tests
Change-Id: I1e4d065173f66df8fcba026d99e7217647f49c69
diff --git a/flags/misc.aconfig b/flags/misc.aconfig
index e9e3169..afe6980 100644
--- a/flags/misc.aconfig
+++ b/flags/misc.aconfig
@@ -16,6 +16,13 @@
 }
 
 flag {
+  name: "stop_spamming_emergency_notification"
+  namespace: "telephony"
+  description: "When set, the no wifi emergency calling availability notif will have a do not ask again button"
+  bug: "275225402"
+}
+
+flag {
   name: "enable_wps_check_api_flag"
   namespace: "telephony"
   description: "Enable system api isWpsCallNumber. Its an utility api to check if the dialed number is for Wireless Priority Service call."
diff --git a/src/java/com/android/internal/telephony/CarrierServiceStateTracker.java b/src/java/com/android/internal/telephony/CarrierServiceStateTracker.java
index 1fd7485..6b99b56 100644
--- a/src/java/com/android/internal/telephony/CarrierServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/CarrierServiceStateTracker.java
@@ -16,6 +16,7 @@
 
 package com.android.internal.telephony;
 
+import android.annotation.NonNull;
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -42,6 +43,7 @@
 import android.telephony.TelephonyManager.NetworkTypeBitMask;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.util.ArrayUtils;
 import com.android.internal.telephony.util.NotificationChannelController;
 import com.android.telephony.Rlog;
@@ -85,6 +87,7 @@
     private long mAllowedNetworkType = -1;
     private AllowedNetworkTypesListener mAllowedNetworkTypesListener;
     private TelephonyManager mTelephonyManager;
+    @NonNull private final FeatureFlags mFeatureFlags;
 
     /**
      * The listener for allowed network types changed
@@ -105,7 +108,9 @@
         }
     }
 
-    public CarrierServiceStateTracker(Phone phone, ServiceStateTracker sst) {
+    public CarrierServiceStateTracker(Phone phone, ServiceStateTracker sst,
+            @NonNull FeatureFlags featureFlags) {
+        mFeatureFlags = featureFlags;
         this.mPhone = phone;
         this.mSST = sst;
         mTelephonyManager = mPhone.getContext().getSystemService(
@@ -165,11 +170,13 @@
         mAllowedNetworkTypesListener = new AllowedNetworkTypesListener();
         registerAllowedNetworkTypesListener();
 
-        // register a receiver for notification actions
-        mPhone.getContext().registerReceiver(
-                mActionReceiver,
-                new IntentFilter(ACTION_NEVER_ASK_AGAIN),
-                Context.RECEIVER_NOT_EXPORTED);
+        if (mFeatureFlags.stopSpammingEmergencyNotification()) {
+            // register a receiver for notification actions
+            mPhone.getContext().registerReceiver(
+                    mActionReceiver,
+                    new IntentFilter(ACTION_NEVER_ASK_AGAIN),
+                    Context.RECEIVER_NOT_EXPORTED);
+        }
     }
 
     /**
@@ -402,7 +409,8 @@
             return;
         }
 
-        if (shouldSilenceEmrgNetNotif(notificationType, context)) {
+        if (mFeatureFlags.stopSpammingEmergencyNotification()
+                && shouldSilenceEmrgNetNotif(notificationType, context)) {
             Rlog.i(LOG_TAG, "sendNotification: silencing NOTIFICATION_EMERGENCY_NETWORK");
             return;
         }
@@ -681,13 +689,22 @@
                     com.android.internal.R.string.EmergencyCallWarningTitle);
             CharSequence details = res.getText(
                     com.android.internal.R.string.EmergencyCallWarningSummary);
-            return new Notification.Builder(context)
-                    .setContentTitle(title)
-                    .setStyle(new Notification.BigTextStyle().bigText(details))
-                    .setContentText(details)
-                    .setOngoing(true)
-                    .setActions(createDoNotShowAgainAction(context))
-                    .setChannelId(NotificationChannelController.CHANNEL_ID_WFC);
+            if (mFeatureFlags.stopSpammingEmergencyNotification()) {
+                return new Notification.Builder(context)
+                        .setContentTitle(title)
+                        .setStyle(new Notification.BigTextStyle().bigText(details))
+                        .setContentText(details)
+                        .setOngoing(true)
+                        .setActions(createDoNotShowAgainAction(context))
+                        .setChannelId(NotificationChannelController.CHANNEL_ID_WFC);
+            } else {
+                return new Notification.Builder(context)
+                        .setContentTitle(title)
+                        .setStyle(new Notification.BigTextStyle().bigText(details))
+                        .setContentText(details)
+                        .setOngoing(true)
+                        .setChannelId(NotificationChannelController.CHANNEL_ID_WFC);
+            }
         }
 
         /**
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index b5cc37b..d912187 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -354,7 +354,7 @@
         mSignalStrengthController = mTelephonyComponentFactory.inject(
                 SignalStrengthController.class.getName()).makeSignalStrengthController(this);
         mSST = mTelephonyComponentFactory.inject(ServiceStateTracker.class.getName())
-                .makeServiceStateTracker(this, this.mCi);
+                .makeServiceStateTracker(this, this.mCi, featureFlags);
         mEmergencyNumberTracker = mTelephonyComponentFactory
                 .inject(EmergencyNumberTracker.class.getName()).makeEmergencyNumberTracker(
                         this, this.mCi);
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index a94875d..01d6e4c 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -94,6 +94,7 @@
 import com.android.internal.telephony.data.AccessNetworksManager.AccessNetworksManagerCallback;
 import com.android.internal.telephony.data.DataNetwork;
 import com.android.internal.telephony.data.DataNetworkController.DataNetworkControllerCallback;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.metrics.RadioPowerStateStats;
 import com.android.internal.telephony.metrics.ServiceStateStats;
@@ -625,7 +626,8 @@
      */
     private AccessNetworksManagerCallback mAccessNetworksManagerCallback = null;
 
-    public ServiceStateTracker(GsmCdmaPhone phone, CommandsInterface ci) {
+    public ServiceStateTracker(GsmCdmaPhone phone, CommandsInterface ci,
+            FeatureFlags featureFlags) {
         mNitzState = TelephonyComponentFactory.getInstance()
                 .inject(NitzStateMachine.class.getName())
                 .makeNitzStateMachine(phone);
@@ -710,7 +712,7 @@
         mCi.setOnRestrictedStateChanged(this, EVENT_RESTRICTED_STATE_CHANGED, null);
         updatePhoneType();
 
-        mCSST = new CarrierServiceStateTracker(phone, this);
+        mCSST = new CarrierServiceStateTracker(phone, this, featureFlags);
 
         registerForNetworkAttached(mCSST,
                 CarrierServiceStateTracker.CARRIER_EVENT_VOICE_REGISTRATION, null);
diff --git a/src/java/com/android/internal/telephony/TelephonyComponentFactory.java b/src/java/com/android/internal/telephony/TelephonyComponentFactory.java
index 6e3e911..0f074a9 100644
--- a/src/java/com/android/internal/telephony/TelephonyComponentFactory.java
+++ b/src/java/com/android/internal/telephony/TelephonyComponentFactory.java
@@ -288,8 +288,9 @@
         return new SmsUsageMonitor(context);
     }
 
-    public ServiceStateTracker makeServiceStateTracker(GsmCdmaPhone phone, CommandsInterface ci) {
-        return new ServiceStateTracker(phone, ci);
+    public ServiceStateTracker makeServiceStateTracker(GsmCdmaPhone phone, CommandsInterface ci,
+            @NonNull FeatureFlags featureFlags) {
+        return new ServiceStateTracker(phone, ci, featureFlags);
     }
 
     /**
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierServiceStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierServiceStateTrackerTest.java
index 2302128..7345022 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierServiceStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierServiceStateTrackerTest.java
@@ -88,7 +88,7 @@
         // Capture listener to emulate the carrier config change notification used later
         ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> listenerArgumentCaptor =
                 ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class);
-        mCarrierSST = new CarrierServiceStateTracker(mPhone, mSST);
+        mCarrierSST = new CarrierServiceStateTracker(mPhone, mSST, mFeatureFlags);
         verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(),
                 listenerArgumentCaptor.capture());
         mCarrierConfigChangeListener = listenerArgumentCaptor.getAllValues().get(0);
@@ -285,6 +285,7 @@
     @Test
     @SmallTest
     public void testEmergencyNotificationBehaviorWhenSilenced() {
+        when(mFeatureFlags.stopSpammingEmergencyNotification()).thenReturn(true);
         logd(LOG_TAG + ":testEmergencyNotificationBehaviorWhenSilenced()");
         sendMessageOnHandler(CarrierServiceStateTracker.NOTIFICATION_EMERGENCY_NETWORK);
 
@@ -312,7 +313,8 @@
     public void testNotificationMapWhenDeviceIsWatch() {
         doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_WATCH);
 
-        CarrierServiceStateTracker tracker = new CarrierServiceStateTracker(mPhone, mSST);
+        CarrierServiceStateTracker tracker = new CarrierServiceStateTracker(mPhone, mSST,
+                mFeatureFlags);
 
         assertTrue(tracker.getNotificationTypeMap().isEmpty());
     }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/DisplayInfoControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/DisplayInfoControllerTest.java
index 8dd350f..8eb2de6 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/DisplayInfoControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/DisplayInfoControllerTest.java
@@ -91,7 +91,7 @@
             ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener>
                     listenerArgumentCaptor = ArgumentCaptor.forClass(
                     CarrierConfigManager.CarrierConfigChangeListener.class);
-            mSst = new ServiceStateTracker(mPhone, mSimulatedCommands);
+            mSst = new ServiceStateTracker(mPhone, mSimulatedCommands, mFeatureFlags);
             verify(mCarrierConfigManager, atLeast(2)).registerCarrierConfigChangeListener(any(),
                     listenerArgumentCaptor.capture());
             mCarrierConfigChangeListener = listenerArgumentCaptor.getAllValues().get(1);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
index 378907b..9e067a2 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
@@ -201,7 +201,7 @@
                     listenerArgumentCaptor =
                             ArgumentCaptor.forClass(
                                     CarrierConfigManager.CarrierConfigChangeListener.class);
-            sst = new ServiceStateTracker(mPhone, mSimulatedCommands);
+            sst = new ServiceStateTracker(mPhone, mSimulatedCommands, mFeatureFlags);
             verify(mCarrierConfigManager, atLeast(3)).registerCarrierConfigChangeListener(any(),
                     listenerArgumentCaptor.capture());
             mCarrierConfigChangeListener = listenerArgumentCaptor.getAllValues().get(2);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
index 1274aa3..23a7ee6 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
@@ -578,7 +578,7 @@
         doReturn(mTelephonyComponentFactory).when(mTelephonyComponentFactory).inject(anyString());
         doReturn(mSST).when(mTelephonyComponentFactory)
                 .makeServiceStateTracker(nullable(GsmCdmaPhone.class),
-                        nullable(CommandsInterface.class));
+                        nullable(CommandsInterface.class), nullable(FeatureFlags.class));
         doReturn(mEmergencyNumberTracker).when(mTelephonyComponentFactory)
                 .makeEmergencyNumberTracker(nullable(Phone.class),
                         nullable(CommandsInterface.class));