Hide emergency button when OOS

Hide emergency button when OOS in lock screen

Change-Id: Ia3c360755ab74b2c688833f9972710304a195f65
diff --git a/packages/Keyguard/res/values/bools.xml b/packages/Keyguard/res/values/bools.xml
index 2b83787..abf4f00 100644
--- a/packages/Keyguard/res/values/bools.xml
+++ b/packages/Keyguard/res/values/bools.xml
@@ -17,4 +17,5 @@
 <resources>
     <bool name="kg_show_ime_at_screen_on">true</bool>
     <bool name="kg_use_all_caps">true</bool>
+    <bool name="kg_hide_emgcy_btn_when_oos">false</bool>
 </resources>
diff --git a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java
index 1411aaa..e6497b5 100644
--- a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java
+++ b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java
@@ -25,6 +25,7 @@
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.telecom.TelecomManager;
+import android.telephony.ServiceState;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.Button;
@@ -58,6 +59,11 @@
         public void onPhoneStateChanged(int phoneState) {
             updateEmergencyCallButton();
         }
+
+        @Override
+        public void onServiceStateChanged(int sub, ServiceState state) {
+            updateEmergencyCallButton();
+        }
     };
 
     public interface EmergencyButtonCallback {
@@ -153,6 +159,11 @@
                     visible = mLockPatternUtils.isSecure(KeyguardUpdateMonitor.getCurrentUser()) ||
                             SystemProperties.getBoolean("persist.radio.emgcy_btn_onswipe", false);
                 }
+
+                if (mContext.getResources().getBoolean(R.bool.kg_hide_emgcy_btn_when_oos)) {
+                    KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
+                    visible = visible && !monitor.isOOS();
+                }
             }
         }
         if (visible) {
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index eabfc34..6d8b44c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -1197,6 +1197,7 @@
             KeyguardUpdateMonitorCallback cb = mCallbacks.get(j).get();
             if (cb != null) {
                 cb.onRefreshCarrierInfo();
+                cb.onServiceStateChanged(subId, serviceState);
             }
         }
     }
@@ -1423,6 +1424,21 @@
         }
     }
 
+    public boolean isOOS()
+    {
+        boolean ret = true;
+        for (int subId : mServiceStates.keySet()) {
+            ServiceState state = mServiceStates.get(subId);
+            if (((state.getVoiceRegState() != ServiceState.STATE_OUT_OF_SERVICE)
+                    && (state.getVoiceRegState() != ServiceState.STATE_POWER_OFF))
+                    || (state.isEmergencyOnly())) {
+                ret = false;
+                break;
+            }
+        }
+        return ret;
+    }
+
     /**
      * @return true if and only if the state has changed for the specified {@code slotId}
      */
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
index 0cdf999..91bca0e 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
@@ -20,6 +20,7 @@
 import android.media.AudioManager;
 import android.os.SystemClock;
 import android.hardware.fingerprint.FingerprintManager;
+import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
 import android.view.WindowManagerPolicy;
 
@@ -123,6 +124,13 @@
     public void onSimStateChanged(int subId, int slotId, IccCardConstants.State simState) { }
 
     /**
+     * Called when the sevice state changes.
+     * @param subId
+     * @param serviceState
+     */
+    public void onServiceStateChanged(int sub, ServiceState state) { }
+
+    /**
      * Called when the user's info changed.
      */
     public void onUserInfoChanged(int userId) { }