summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoremancebo <emancebo@cyngn.com>2014-07-24 15:54:10 -0700
committerEd Mancebo <emancebo@cyngn.com>2015-01-06 21:40:54 +0000
commitfe57f36d843b3c973aa44621602a57d0b1e208a7 (patch)
tree3f9abd496ca6e5f526490619485d6434e12a4861
parent7d23a38654b9c0a2abcfadf02bd0cb2ee3d95aec (diff)
downloadandroid_packages_apps_Dialer-fe57f36d843b3c973aa44621602a57d0b1e208a7.tar.gz
android_packages_apps_Dialer-fe57f36d843b3c973aa44621602a57d0b1e208a7.tar.bz2
android_packages_apps_Dialer-fe57f36d843b3c973aa44621602a57d0b1e208a7.zip
Read option for t9 search input locale and refresh smart dial db when locale changes
Change-Id: I3cd942741310f16678ed9eb675bbba2cbc72d5e8
-rw-r--r--src/com/android/dialer/DialtactsActivity.java26
-rw-r--r--src/com/android/dialer/database/DialerDatabaseHelper.java42
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java8
-rw-r--r--src/com/android/dialer/dialpad/SmartDialPrefix.java46
4 files changed, 107 insertions, 15 deletions
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 962986194..4b56c6a7a 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -22,6 +22,7 @@ import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
@@ -29,6 +30,10 @@ import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemProperties;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.preference.PreferenceManager;
+import android.provider.CallLog.Calls;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents;
import android.speech.RecognizerIntent;
@@ -90,6 +95,7 @@ import com.android.dialer.widget.SearchEditTextLayout.OnBackButtonClickedListene
import com.android.dialerbind.DatabaseHelperManager;
import com.android.incallui.CallCardFragment;
import com.android.phone.common.animation.AnimUtils;
+import com.android.phone.common.util.SettingsUtil;
import com.android.ims.ImsManager;
import com.android.internal.telephony.TelephonyProperties;
import com.android.phone.common.animation.AnimationListenerAdapter;
@@ -97,6 +103,7 @@ import com.android.phone.common.animation.AnimationListenerAdapter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
/**
* The dialer tab's title is 'phone', a more common name (see strings.xml).
@@ -118,6 +125,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
public static final String SHARED_PREFS_NAME = "com.android.dialer_preferences";
+ private static final String PREF_LAST_T9_LOCALE = "smart_dial_prefix_last_t9_locale";
/** @see #getCallOrigin() */
private static final String CALL_ORIGIN_DIALTACTS =
@@ -456,7 +464,6 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
setupActivityOverlay();
mDialerDatabaseHelper = DatabaseHelperManager.getDatabaseHelper(this);
- SmartDialPrefix.initializeNanpSettings(this);
}
private void setupActivityOverlay() {
@@ -491,7 +498,24 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
setConferenceDialButtonImage(false);
setConferenceDialButtonVisibility(true);
+ // make this call on resume in case user changed t9 locale in settings
SmartDialPrefix.initializeNanpSettings(this);
+
+ // if locale has changed since last time, refresh the smart dial db
+ Locale locale = SettingsUtil.getT9SearchInputLocale(this);
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ String prevLocale = prefs.getString(PREF_LAST_T9_LOCALE, null);
+
+ if (!TextUtils.equals(locale.toString(), prevLocale)) {
+ mDialerDatabaseHelper.recreateSmartDialDatabaseInBackground();
+ if (mDialpadFragment != null)
+ mDialpadFragment.refreshKeypad();
+
+ prefs.edit().putString(PREF_LAST_T9_LOCALE, locale.toString()).apply();
+ }
+ else {
+ mDialerDatabaseHelper.startSmartDialUpdateThread();
+ }
}
@Override
diff --git a/src/com/android/dialer/database/DialerDatabaseHelper.java b/src/com/android/dialer/database/DialerDatabaseHelper.java
index 737999707..b4ca31d6a 100644
--- a/src/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/src/com/android/dialer/database/DialerDatabaseHelper.java
@@ -546,6 +546,48 @@ public class DialerDatabaseHelper extends SQLiteOpenHelper {
super.onPostExecute(o);
}
}
+
+ /**
+ * Deletes all smart dial data and recreates it from contacts
+ */
+ public void recreateSmartDialDatabaseInBackground() { new SmartDialRecreateAsyncTask().execute(); }
+
+ private class SmartDialRecreateAsyncTask extends AsyncTask {
+ @Override
+ protected Object doInBackground(Object[] objects) {
+ if (DEBUG) {
+ Log.v(TAG, "Recreating database");
+ }
+
+ // reset last updated so that we query for all contacts
+ resetSmartDialLastUpdatedTime();
+
+ // clear all contacts
+ final SQLiteDatabase db = getWritableDatabase();
+ removeAllContacts(db);
+
+ // repopulate
+ updateSmartDialDatabase();
+ return null;
+ }
+
+ @Override
+ protected void onCancelled() {
+ if (DEBUG) {
+ Log.v(TAG, "Recreate Cancelled");
+ }
+ super.onCancelled();
+ }
+
+ @Override
+ protected void onPostExecute(Object o) {
+ if (DEBUG) {
+ Log.v(TAG, "Recreate Finished");
+ }
+ super.onPostExecute(o);
+ }
+ }
+
/**
* Removes rows in the smartdial database that matches the contacts that have been deleted
* by other apps since last update.
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index ac86ae7ea..c0ac5e957 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -25,6 +25,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
@@ -94,6 +95,7 @@ import com.android.phone.common.dialpad.DialpadView;
import com.google.common.annotations.VisibleForTesting;
import java.util.HashSet;
+import java.util.Locale;
/**
* Fragment that displays a twelve-key phone dialpad.
@@ -619,6 +621,12 @@ public class DialpadFragment extends AnalyticsFragment
pound.setOnLongClickListener(this);
}
+ public void refreshKeypad() {
+ if (mDialpadView != null) {
+ mDialpadView.refreshKeypad();
+ }
+ }
+
@Override
public void onResume() {
super.onResume();
diff --git a/src/com/android/dialer/dialpad/SmartDialPrefix.java b/src/com/android/dialer/dialpad/SmartDialPrefix.java
index 6d2893b71..e80e133e3 100644
--- a/src/com/android/dialer/dialpad/SmartDialPrefix.java
+++ b/src/com/android/dialer/dialpad/SmartDialPrefix.java
@@ -23,12 +23,20 @@ import android.preference.PreferenceManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
+import com.android.dialer.database.DialerDatabaseHelper;
+import com.android.dialerbind.DatabaseHelperManager;
+import com.android.phone.common.util.SettingsUtil;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
+import java.util.Locale;
+import java.util.Map;
+import java.util.HashMap;
+
+import android.util.Log;
/**
* Smart Dial utility class to find prefixes of contacts. It contains both methods to find supported
@@ -69,6 +77,24 @@ public class SmartDialPrefix {
private static boolean sNanpInitialized = false;
+ private static final Map<String, SmartDialMap> languageToSmartDialMap = new HashMap<String, SmartDialMap>();
+ static {
+ languageToSmartDialMap.put("ko", new KoreanSmartDialMap());
+ languageToSmartDialMap.put("el", new GreekSmartDialMap());
+ languageToSmartDialMap.put("ru", new RussianSmartDialMap());
+ languageToSmartDialMap.put("he", new HebrewSmartDialMap());
+ languageToSmartDialMap.put("zh", new ChineseSmartDialMap());
+ }
+
+ private static final Map<String, SmartDialMap> countryToSmartDialMap = new HashMap<String, SmartDialMap>();
+ static {
+ languageToSmartDialMap.put("KR", new KoreanSmartDialMap());
+ languageToSmartDialMap.put("GR", new GreekSmartDialMap());
+ languageToSmartDialMap.put("RU", new RussianSmartDialMap());
+ languageToSmartDialMap.put("IL", new HebrewSmartDialMap());
+ languageToSmartDialMap.put("CN", new ChineseSmartDialMap());
+ }
+
/** Initializes the Nanp settings, and finds out whether user is in a NANP region.*/
public static void initializeNanpSettings(Context context){
final TelephonyManager manager = (TelephonyManager) context.getSystemService(
@@ -90,21 +116,13 @@ public class SmartDialPrefix {
/** Queries the NANP country list to find out whether user is in a NANP region.*/
sUserInNanpRegion = isCountryNanp(sUserSimCountryCode);
- /** Sets a layout for SmartDial depending on current UI language.*/
- String locale = context.getResources().getConfiguration().locale.getCountry();
- if (locale.equals("RU")) {
- mMap = new RussianSmartDialMap();
- } else if (locale.equals("GR")) {
- mMap = new GreekSmartDialMap();
- } else if (locale.equals("IL")) {
- mMap = new HebrewSmartDialMap();
- } else if (locale.equals("KR")) {
- mMap = new KoreanSmartDialMap();
- } else if (locale.equals("CN")) {
- mMap = new ChineseSmartDialMap();
- } else {
+ /** Sets a layout for SmartDial based on locale. Lookup by language first and fallback to country */
+ Locale locale = SettingsUtil.getT9SearchInputLocale(context);
+ mMap = languageToSmartDialMap.get(locale.getLanguage());
+ if (mMap == null)
+ mMap = countryToSmartDialMap.get(locale.getCountry());
+ if (mMap == null)
mMap = new LatinSmartDialMap();
- }
sNanpInitialized = true;
}