summaryrefslogtreecommitdiff
path: root/src/com/android/dialer/dialpad/DialpadFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/dialer/dialpad/DialpadFragment.java')
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java46
1 files changed, 38 insertions, 8 deletions
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index b862f7678..f70a279e7 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -25,6 +25,7 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
+import android.database.ContentObserver;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -33,6 +34,7 @@ import android.media.ToneGenerator;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.Handler;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
@@ -77,6 +79,7 @@ import com.android.contacts.common.util.StopWatch;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
import com.android.dialer.SpecialCharSequenceMgr;
+import com.android.dialer.dialpad.SmartDialCache.SmartDialContentObserver;
import com.android.dialer.interactions.PhoneNumberInteraction;
import com.android.dialer.util.OrientationUtil;
import com.android.internal.telephony.ITelephony;
@@ -148,6 +151,7 @@ public class DialpadFragment extends Fragment
* Will be set only if the view has the smart dialing section.
*/
private SmartDialAdapter mSmartDialAdapter;
+ private SmartDialContentObserver mSmartDialObserver;
/**
* Regular expression prohibiting manual phone call. Can be empty, which means "no rule".
@@ -276,7 +280,8 @@ public class DialpadFragment extends Fragment
mContactsPrefs = new ContactsPreferences(getActivity());
mCurrentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
- mSmartDialCache = new SmartDialCache(getActivity(), mContactsPrefs.getDisplayOrder());
+ mSmartDialCache = SmartDialCache.getInstance(getActivity(),
+ mContactsPrefs.getDisplayOrder());
try {
mHaptic.init(getActivity(),
getResources().getBoolean(R.bool.config_enable_dialer_key_vibration));
@@ -292,6 +297,10 @@ public class DialpadFragment extends Fragment
if (state != null) {
mDigitsFilledByIntent = state.getBoolean(PREF_DIGITS_FILLED_BY_INTENT);
}
+
+ mSmartDialObserver = new SmartDialContentObserver(new Handler(), mSmartDialCache);
+ this.getActivity().getContentResolver().registerContentObserver(
+ SmartDialCache.PhoneQuery.URI, true, mSmartDialObserver);
}
@Override
@@ -361,6 +370,7 @@ public class DialpadFragment extends Fragment
mSmartDialAdapter = new SmartDialAdapter(getActivity());
mSmartDialList.setAdapter(mSmartDialAdapter);
mSmartDialList.setOnItemClickListener(new OnSmartDialItemClick());
+ mSmartDialList.setOnItemLongClickListener(new OnSmartDialLongClick());
}
return fragmentView;
@@ -608,6 +618,9 @@ public class DialpadFragment extends Fragment
stopWatch.lap("bes");
stopWatch.stopAndLog(TAG, 50);
+
+ this.getActivity().getContentResolver().registerContentObserver(
+ SmartDialCache.PhoneQuery.URI, true, mSmartDialObserver);
}
@Override
@@ -635,6 +648,8 @@ public class DialpadFragment extends Fragment
mLastNumberDialed = EMPTY_NUMBER; // Since we are going to query again, free stale number.
SpecialCharSequenceMgr.cleanup();
+
+ getActivity().getContentResolver().unregisterContentObserver(mSmartDialObserver);
}
@Override
@@ -1668,7 +1683,7 @@ public class DialpadFragment extends Fragment
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
- mSmartDialCache.cacheIfNeeded();
+ mSmartDialCache.cacheIfNeeded(false);
}
}
@@ -1691,28 +1706,43 @@ public class DialpadFragment extends Fragment
mSmartDialAdapter.clear();
} else {
final SmartDialLoaderTask task = new SmartDialLoaderTask(this, digits, mSmartDialCache);
- // don't execute this in serial, otherwise we have to wait too long for results
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[] {});
}
}
@Override
- public void setSmartDialAdapterEntries(List<SmartDialEntry> data) {
- if (data == null) {
+ public void setSmartDialAdapterEntries(List<SmartDialEntry> data, String query) {
+ if (data == null || query == null || !query.equals(mLastDigitsForSmartDial)) {
return;
}
mSmartDialAdapter.setEntries(data);
}
+ private class OnSmartDialLongClick implements AdapterView.OnItemLongClickListener {
+ @Override
+ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
+ final SmartDialEntry entry = (SmartDialEntry) view.getTag();
+ if (entry == null) return false; // just in case.
+ mClearDigitsOnStop = true;
+ // Show the phone number disambiguation dialog without using the primary
+ // phone number so that the user can decide which number to call
+ PhoneNumberInteraction.startInteractionForPhoneCall(
+ (TransactionSafeActivity) getActivity(), entry.contactUri, false);
+ return true;
+ }
+ }
+
private class OnSmartDialItemClick implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final SmartDialEntry entry = (SmartDialEntry) view.getTag();
if (entry == null) return; // just in case.
-
+ // Dial the displayed phone number immediately
+ final Intent intent = CallUtil.getCallIntent(entry.phoneNumber.toString(),
+ (getActivity() instanceof DialtactsActivity ?
+ ((DialtactsActivity) getActivity()).getCallOrigin() : null));
+ startActivity(intent);
mClearDigitsOnStop = true;
- PhoneNumberInteraction.startInteractionForPhoneCall(
- (TransactionSafeActivity) getActivity(), entry.contactUri, getCallOrigin());
}
}
}