Get emergency info name from EmergencyInfo
If user have set emergency name in EmergencyInfo, the name will be used to show on
emergency info button. The content description of emergency info button
become "userName's emergency information".
Test: Manually
Bug: 80406570
Change-Id: I622d46e9646528f9d9383964b742377bb380b5a2
Merged-In: I622d46e9646528f9d9383964b742377bb380b5a2
diff --git a/src/com/android/phone/EmergencyDialer.java b/src/com/android/phone/EmergencyDialer.java
index ea9eae1..19c4983 100644
--- a/src/com/android/phone/EmergencyDialer.java
+++ b/src/com/android/phone/EmergencyDialer.java
@@ -25,21 +25,26 @@
import android.app.Dialog;
import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.database.ContentObserver;
+import android.database.Cursor;
import android.graphics.Point;
import android.media.AudioManager;
import android.media.ToneGenerator;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.Handler;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.telecom.PhoneAccount;
import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneNumberUtils;
+import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -168,6 +173,25 @@
private boolean mAreEmergencyDialerShortcutsEnabled;
+ /** Key of emergency information user name */
+ private static final String KEY_EMERGENCY_INFO_NAME = "name";
+
+ /** Authority of emergency information */
+ private static final String AUTHORITY = "com.android.emergency.info.name";
+
+ /** Content path of emergency information name */
+ private static final String CONTENT_PATH = "name";
+
+ /** Content URI of emergency information */
+ private static final Uri CONTENT_URI = new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(AUTHORITY)
+ .path(CONTENT_PATH)
+ .build();
+
+ /** ContentObserver for monitoring emergency info name changes */
+ private ContentObserver mEmergencyInfoNameObserver;
+
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// Do nothing
@@ -312,6 +336,10 @@
}
}
unregisterReceiver(mBroadcastReceiver);
+ if (mEmergencyInfoNameObserver != null) {
+ getContentResolver().unregisterContentObserver(mEmergencyInfoNameObserver);
+ mEmergencyInfoNameObserver = null;
+ }
}
@Override
@@ -358,7 +386,7 @@
@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.
+ // back key will back to display EmergencyShortcutView view.
// Otherwise, it would finish the activity.
if (mAreEmergencyDialerShortcutsEnabled && mDialpadView != null
&& mDialpadView.getVisibility() == View.VISIBLE) {
@@ -428,7 +456,7 @@
String phoneNumber = button.getPhoneNumber();
if (!TextUtils.isEmpty(phoneNumber)) {
- Log.d(LOG_TAG, "dial emergency number: " + phoneNumber);
+ if (DBG) Log.d(LOG_TAG, "dial emergency number: " + Rlog.pii(LOG_TAG, phoneNumber));
TelecomManager tm = (TelecomManager) getSystemService(TELECOM_SERVICE);
tm.placeCall(Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null), null);
} else {
@@ -884,6 +912,19 @@
setupEmergencyCallShortcutButton();
switchView(mEmergencyShortcutView, mDialpadView, false);
+
+ mEmergencyInfoNameObserver = new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ super.onChange(selfChange);
+ getEmergencyInfoNameAsync();
+ }
+ };
+ // Register ContentProvider for monitoring emergency info name changes.
+ getContentResolver().registerContentObserver(CONTENT_URI, false,
+ mEmergencyInfoNameObserver);
+ // Query emergency info name.
+ getEmergencyInfoNameAsync();
}
private void setLocationInfo(String country) {
@@ -1004,4 +1045,38 @@
}
});
}
+
+ /**
+ * Get emergency info name from EmergencyInfo and then update EmergencyInfoGroup.
+ */
+ private void getEmergencyInfoNameAsync() {
+ new AsyncTask<Void, Void, String>() {
+ @Override
+ protected String doInBackground(Void... params) {
+ String name = "";
+ try (Cursor cursor = getContentResolver().query(CONTENT_URI, null, null, null,
+ null)) {
+ if (cursor != null && cursor.moveToFirst()) {
+ int index = cursor.getColumnIndex(KEY_EMERGENCY_INFO_NAME);
+ name = index > -1 ? cursor.getString(index) : "";
+ }
+ } catch (IllegalArgumentException ex) {
+ Log.w(LOG_TAG, "getEmergencyInfoNameAsync failed", ex);
+ }
+ return name;
+ }
+
+ @Override
+ protected void onPostExecute(String result) {
+ super.onPostExecute(result);
+ if (!isFinishing() && !isDestroyed()) {
+ // Update emergency info with emergency info name
+ EmergencyInfoGroup group = findViewById(R.id.emergency_info_group);
+ if (group != null) {
+ group.updateEmergencyInfo(result);
+ }
+ }
+ }
+ }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
}