diff --git a/src/com/android/phone/EmergencyDialer.java b/src/com/android/phone/EmergencyDialer.java
index b9a6471..ddc6f09 100644
--- a/src/com/android/phone/EmergencyDialer.java
+++ b/src/com/android/phone/EmergencyDialer.java
@@ -62,7 +62,6 @@
 import android.text.TextWatcher;
 import android.text.method.DialerKeyListener;
 import android.text.style.TtsSpan;
-import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.HapticFeedbackConstants;
@@ -213,9 +212,6 @@
 
     private static final int BAD_EMERGENCY_NUMBER_DIALOG = 0;
 
-    /** 90% opacity, different from other gradients **/
-    private static final int BACKGROUND_GRADIENT_ALPHA = 230;
-
     /** 85% opacity for black background **/
     private static final int BLACK_BACKGROUND_GRADIENT_ALPHA = 217;
 
@@ -262,8 +258,6 @@
     private boolean mIsWfcEmergencyCallingWarningEnabled;
     private float mDefaultDigitsTextSize;
 
-    private boolean mAreEmergencyDialerShortcutsEnabled;
-
     private MetricsWriter mMetricsWriter;
     private SensorManager mSensorManager;
     private Sensor mProximitySensor;
@@ -330,22 +324,11 @@
 
         getWindow().setAttributes(lp);
 
-        mAreEmergencyDialerShortcutsEnabled = FeatureFlagUtils
-                .isEnabled(this, FeatureFlagUtils.EMERGENCY_DIAL_SHORTCUTS);
-        Log.d(LOG_TAG, "Enable emergency dialer shortcut: "
-                + mAreEmergencyDialerShortcutsEnabled);
-
         mColorExtractor = new ColorExtractor(this);
 
         // It does not support dark text theme, when emergency dialer shortcuts are enabled.
         // And the background color is black with 85% opacity.
-        if (mAreEmergencyDialerShortcutsEnabled) {
-            updateTheme(false);
-        } else {
-            GradientColors lockScreenColors = mColorExtractor.getColors(WallpaperManager.FLAG_LOCK,
-                    ColorExtractor.TYPE_EXTRA_DARK);
-            updateTheme(lockScreenColors.supportsDarkText());
-        }
+        updateTheme(false);
 
         setContentView(R.layout.emergency_dialer);
 
@@ -363,8 +346,7 @@
         ((WindowManager) getSystemService(Context.WINDOW_SERVICE))
                 .getDefaultDisplay().getSize(displaySize);
         mBackgroundGradient.setScreenSize(displaySize.x, displaySize.y);
-        mBackgroundGradient.setAlpha(mAreEmergencyDialerShortcutsEnabled
-                ? BLACK_BACKGROUND_GRADIENT_ALPHA : BACKGROUND_GRADIENT_ALPHA);
+        mBackgroundGradient.setAlpha(BLACK_BACKGROUND_GRADIENT_ALPHA);
         getWindow().setBackgroundDrawable(mBackgroundGradient);
 
         // Check for the presence of the keypad
@@ -430,10 +412,8 @@
 
         mEmergencyActionGroup = (EmergencyActionGroup) findViewById(R.id.emergency_action_group);
 
-        if (mAreEmergencyDialerShortcutsEnabled) {
-            mEccInfoHelper = new EccInfoHelper(new IsoToEccProtobufRepository());
-            setupEmergencyShortcutsView();
-        }
+        mEccInfoHelper = new EccInfoHelper(new IsoToEccProtobufRepository());
+        setupEmergencyShortcutsView();
     }
 
     @Override
@@ -498,8 +478,7 @@
         // If emergency dialer shortcut is enabled and Dialpad view is visible, pressing the
         // back key will back to display EmergencyShortcutView view.
         // Otherwise, it would finish the activity.
-        if (mAreEmergencyDialerShortcutsEnabled && mDialpadView != null
-                && mDialpadView.getVisibility() == View.VISIBLE) {
+        if (mDialpadView != null && mDialpadView.getVisibility() == View.VISIBLE) {
             switchView(mEmergencyShortcutView, mDialpadView, true);
             return;
         }
@@ -716,21 +695,10 @@
         mUserActions = MetricsWriter.USER_ACTION_NONE;
         mMetricsWriter.writeMetricsForEnter();
 
-        // It does not support dark text theme, when emergency dialer shortcuts are enabled.
-        // And set background color to black.
-        if (mAreEmergencyDialerShortcutsEnabled) {
-            mBackgroundGradient.setColors(Color.BLACK, Color.BLACK, false);
-            updateTheme(false);
-        } else {
-            mColorExtractor.addOnColorsChangedListener(this);
-            GradientColors lockScreenColors = mColorExtractor.getColors(WallpaperManager.FLAG_LOCK,
-                    ColorExtractor.TYPE_EXTRA_DARK);
-            // Do not animate when view isn't visible yet, just set an initial state.
-            mBackgroundGradient.setColors(lockScreenColors, false);
-            updateTheme(lockScreenColors.supportsDarkText());
-        }
+        mBackgroundGradient.setColors(Color.BLACK, Color.BLACK, false);
+        updateTheme(false);
 
-        if (mAreEmergencyDialerShortcutsEnabled && mEccInfoHelper != null) {
+        if (mEccInfoHelper != null) {
             final Context context = this;
             mEccInfoHelper.getCountryEccInfoAsync(context,
                     new EccInfoHelper.CountryEccInfoResultCallback() {
