Add faster emergency dialer UI
If flag "faster_emergency_phone_call_enabled" is true, EmergencyDialer
will display emergency dialer shortcuts UI. Otherwise, EmergencyDialer
display original dialer UI.
Faster emergency dialer implement the part of user's Emergency
Infomation, and a button which is used to show dialpad.
Test: Manually
Bug: 80406570
Change-Id: I3637dab0059d6fa87417bb282163ebff04eae71d
Merged-In: I3637dab0059d6fa87417bb282163ebff04eae71d
diff --git a/src/com/android/phone/EmergencyDialer.java b/src/com/android/phone/EmergencyDialer.java
index 157cf1d..70ee5d6 100644
--- a/src/com/android/phone/EmergencyDialer.java
+++ b/src/com/android/phone/EmergencyDialer.java
@@ -18,6 +18,8 @@
import static android.telephony.ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -81,6 +83,13 @@
* moved into a shared base class that would live in the framework?
* Or could we figure out some way to move *this* class into apps/Contacts
* also?
+ *
+ * TODO: Implement emergency dialer shortcut.
+ * emergency dialer shortcut offer a local emergency number list. Directly click a number to
+ * make an emergency phone call without entering numbers from dialpad.
+ * TODO item:
+ * 1.implement emergency shortcut list UI.
+ * 2.integrate emergency phone number table.
*/
public class EmergencyDialer extends Activity implements View.OnClickListener,
View.OnLongClickListener, View.OnKeyListener, TextWatcher,
@@ -119,6 +128,8 @@
ResizingTextEditText mDigits;
private View mDialButton;
private View mDelete;
+ private View mEmergencyShortcutView;
+ private View mDialpadView;
private ToneGenerator mToneGenerator;
private Object mToneGeneratorLock = new Object();
@@ -148,6 +159,8 @@
private boolean mIsWfcEmergencyCallingWarningEnabled;
private float mDefaultDigitsTextSize;
+ private boolean mAreEmergencyDialerShortcutsEnabled;
+
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// Do nothing
@@ -273,6 +286,13 @@
registerReceiver(mBroadcastReceiver, intentFilter);
mEmergencyActionGroup = (EmergencyActionGroup) findViewById(R.id.emergency_action_group);
+
+ mAreEmergencyDialerShortcutsEnabled = Settings.Global.getInt(getContentResolver(),
+ Settings.Global.FASTER_EMERGENCY_PHONE_CALL_ENABLED, 0) != 0;
+
+ if (mAreEmergencyDialerShortcutsEnabled) {
+ setupEmergencyShortcutsView();
+ }
}
@Override
@@ -328,6 +348,19 @@
view.setOnLongClickListener(this);
}
+ @Override
+ public void onBackPressed() {
+ // If emergency dialer shortcut is enabled and Dialpad view is visible, pressing the
+ // back key will back to display FasterEmergencyDialer view.
+ // Otherwise, it would finish the activity.
+ if (mAreEmergencyDialerShortcutsEnabled && mDialpadView != null
+ && mDialpadView.getVisibility() == View.VISIBLE) {
+ switchView(mEmergencyShortcutView, mDialpadView, true);
+ return;
+ }
+ super.onBackPressed();
+ }
+
/**
* handle key events
*/
@@ -399,6 +432,17 @@
}
return;
}
+ case R.id.floating_action_button_dialpad: {
+ switchView(mDialpadView, mEmergencyShortcutView, true);
+ return;
+ }
+ case R.id.emergency_info_button: {
+ Intent intent = (Intent) view.getTag(R.id.tag_intent);
+ if (intent != null) {
+ startActivity(intent);
+ }
+ return;
+ }
}
}
@@ -792,4 +836,77 @@
Log.i(LOG_TAG, "hint - setting to " + mDigits.getScaledTextSize());
}
}
+
+ private void setupEmergencyShortcutsView() {
+ mEmergencyShortcutView = findViewById(R.id.emergency_dialer_shortcuts);
+ mDialpadView = findViewById(R.id.emergency_dialer);
+
+ final View dialpadButton = findViewById(R.id.floating_action_button_dialpad);
+ dialpadButton.setOnClickListener(this);
+
+ final View emergencyInfoButton = findViewById(R.id.emergency_info_button);
+ emergencyInfoButton.setOnClickListener(this);
+
+ // EmergencyActionGroup is replaced by EmergencyInfoGroup.
+ mEmergencyActionGroup.setVisibility(View.GONE);
+
+ // Setup dialpad title.
+ final View emergencyDialpadTitle = findViewById(R.id.emergency_dialpad_title_container);
+ emergencyDialpadTitle.setVisibility(View.VISIBLE);
+
+ switchView(mEmergencyShortcutView, mDialpadView, false);
+ }
+
+ /**
+ * Switch two view.
+ *
+ * @param displayView the view would be displayed.
+ * @param hideView the view would be hidden.
+ * @param hasAnimation is {@code true} when the view should be displayed with animation.
+ */
+ private void switchView(View displayView, View hideView, boolean hasAnimation) {
+ if (displayView == null || hideView == null) {
+ return;
+ }
+
+ if (displayView.getVisibility() == View.VISIBLE) {
+ return;
+ }
+
+ if (hasAnimation) {
+ crossfade(hideView, displayView);
+ } else {
+ hideView.setVisibility(View.GONE);
+ displayView.setVisibility(View.VISIBLE);
+ }
+ }
+
+ /**
+ * Fade out and fade in animation between two view transition.
+ */
+ private void crossfade(View fadeOutView, View fadeInView) {
+ if (fadeOutView == null || fadeInView == null) {
+ return;
+ }
+ final int shortAnimationDuration = getResources().getInteger(
+ android.R.integer.config_shortAnimTime);
+
+ fadeInView.setAlpha(0f);
+ fadeInView.setVisibility(View.VISIBLE);
+
+ fadeInView.animate()
+ .alpha(1f)
+ .setDuration(shortAnimationDuration)
+ .setListener(null);
+
+ fadeOutView.animate()
+ .alpha(0f)
+ .setDuration(shortAnimationDuration)
+ .setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ fadeOutView.setVisibility(View.GONE);
+ }
+ });
+ }
}