diff options
author | Richard MacGregor <rmacgregor@cyngn.com> | 2016-02-22 16:54:14 -0800 |
---|---|---|
committer | Stephen Bird <sbird@cyngn.com> | 2016-04-08 10:20:04 -0700 |
commit | 24e0a611c2f87930f9c7aa37987e8706e491f8cd (patch) | |
tree | 8e679842b96ff7f3ad49326552793a9496978390 | |
parent | 8bb7a411f00022df23c772ccf9c10598d3047a19 (diff) | |
download | android_packages_apps_Dialer-24e0a611c2f87930f9c7aa37987e8706e491f8cd.tar.gz android_packages_apps_Dialer-24e0a611c2f87930f9c7aa37987e8706e491f8cd.tar.bz2 android_packages_apps_Dialer-24e0a611c2f87930f9c7aa37987e8706e491f8cd.zip |
[2/2] fix spinner/hint issues
Tickets CD-389 & CD-393
Change-Id: Ia1f2314a45b4e9007d15d79a9cf05a8f01c829ca
4 files changed, 68 insertions, 29 deletions
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 3001320c7..ca9bd8618 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -303,21 +303,19 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O mLastKnownCallMethod = CallMethodSpinnerAdapter.getCallMethodKey(cmi); if (mCurrentCallMethod == null || !cmi.equals(mCurrentCallMethod)) { mCurrentCallMethod = cmi; - mSearchEditTextLayout.updateSpinner(mLastKnownCallMethod, mAvailableProviders); - if (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()) { - mSmartDialSearchFragment.setCurrentCallMethod(cmi); - } else if (mRegularSearchFragment != null && mRegularSearchFragment.isVisible()) { - mRegularSearchFragment.setCurrentCallMethod(cmi); + if (mSearchEditTextLayout != null) { + mSearchEditTextLayout.setCurrentCallMethod(mCurrentCallMethod); } - if (mIsDialpadShown) { - mDialpadFragment.updateSpinner(mLastKnownCallMethod, mAvailableProviders); - mDialpadFragment.onCallMethodChanged(cmi); + if (mDialpadFragment != null) { + mDialpadFragment.setCurrentCallMethod(mCurrentCallMethod); + if (mIsDialpadShown) { + mDialpadFragment.onCallMethodChanged(mCurrentCallMethod); + } } - } else if (cmi.mIsAuthenticated == mCurrentCallMethod.mIsAuthenticated || - cmi.mProviderCreditInfo == mCurrentCallMethod.mProviderCreditInfo) { - mCurrentCallMethod = cmi; - if (mIsDialpadShown) { - mDialpadFragment.onCallMethodChanged(cmi); + if (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()) { + mSmartDialSearchFragment.setCurrentCallMethod(mCurrentCallMethod); + } else if (mRegularSearchFragment != null && mRegularSearchFragment.isVisible()) { + mRegularSearchFragment.setCurrentCallMethod(mCurrentCallMethod); } } } @@ -335,6 +333,16 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O mSmartDialSearchFragment.setupEmptyView(); } break; + case TelephonyIntents.ACTION_SUBINFO_CONTENT_CHANGE: + case TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED: + if (mSearchEditTextLayout != null) { + mSearchEditTextLayout.updateSpinner(mLastKnownCallMethod, + mAvailableProviders); + } + if (mDialpadFragment != null) { + mDialpadFragment.updateSpinner(mLastKnownCallMethod, mAvailableProviders); + } + break; } } }; @@ -626,8 +634,9 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O Trace.endSection(); IntentFilter callStateIntentFilter = new IntentFilter(); - callStateIntentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); callStateIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + callStateIntentFilter.addAction(TelephonyIntents.ACTION_SUBINFO_CONTENT_CHANGE); + callStateIntentFilter.addAction(TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED); registerReceiver(mCallStateReceiver, callStateIntentFilter); } @@ -731,6 +740,12 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } @Override + public void onDestroy() { + unregisterReceiver(mCallStateReceiver); + super.onDestroy(); + } + + @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(KEY_SEARCH_QUERY, mSearchQuery); diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java index b36c9c5cb..a67d0d598 100644 --- a/src/com/android/dialer/dialpad/DialpadFragment.java +++ b/src/com/android/dialer/dialpad/DialpadFragment.java @@ -274,11 +274,6 @@ public class DialpadFragment extends Fragment showDialpadChooser(false); break; } - - case TelephonyIntents.ACTION_SUBINFO_CONTENT_CHANGE: - case TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED: - updateSpinner(null, mAllAvailableProviders); - break; } } } @@ -369,8 +364,6 @@ public class DialpadFragment extends Fragment if (mCallStateReceiver == null) { IntentFilter callStateIntentFilter = new IntentFilter(); callStateIntentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); - callStateIntentFilter.addAction(TelephonyIntents.ACTION_SUBINFO_CONTENT_CHANGE); - callStateIntentFilter.addAction(TelephonyIntents.ACTION_SUBINFO_RECORD_UPDATED); mCallStateReceiver = new CallStateReceiver(); ((Context) getActivity()).registerReceiver(mCallStateReceiver, callStateIntentFilter); } @@ -476,6 +469,11 @@ public class DialpadFragment extends Fragment } } + public void setCurrentCallMethod(CallMethodInfo callMethodInfo) { + mCurrentCallMethodInfo = callMethodInfo; + CallMethodSpinnerHelper.setSelectedCallMethod(mCallMethodSpinner, callMethodInfo); + } + public void providersUpdated(String lastKnownCallMethod, HashMap<ComponentName, CallMethodInfo> callMethodInfos) { mAllAvailableProviders.clear(); diff --git a/src/com/android/dialer/incall/CallMethodSpinnerHelper.java b/src/com/android/dialer/incall/CallMethodSpinnerHelper.java index caf12cb29..595302ed7 100644 --- a/src/com/android/dialer/incall/CallMethodSpinnerHelper.java +++ b/src/com/android/dialer/incall/CallMethodSpinnerHelper.java @@ -17,6 +17,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import static com.android.phone.common.incall.CallMethodSpinnerAdapter.POSITION_UNKNOWN; + /** * Helper class for generating and managing multiple provider selection spinners across the * Dialer UI @@ -73,6 +75,7 @@ public class CallMethodSpinnerHelper { availableProviders) { CallMethodSpinnerAdapter callMethodSpinnerAdapter = (CallMethodSpinnerAdapter) callMethodSpinner.getAdapter(); + int lastKnownPosition = callMethodSpinnerAdapter.getPosition(lastKnownCallMethod); callMethodSpinnerAdapter.clear(); List<CallMethodInfo> sims = new ArrayList<CallMethodInfo>(); @@ -103,11 +106,13 @@ public class CallMethodSpinnerHelper { changeListener.onCallMethodChangedListener(info); } else { // multiple call methods or single provider - int position = 0; + int position = POSITION_UNKNOWN; callMethodSpinner.setVisibility(View.VISIBLE); if (!TextUtils.isEmpty(lastKnownCallMethod)) { position = callMethodSpinnerAdapter.getPosition(lastKnownCallMethod); - } else { + } + + if (position == POSITION_UNKNOWN) { CallMethodInfo defaultSim = null; if (TelecomUtil.hasReadPhoneStatus(context)) { defaultSim = CallMethodUtils.getDefaultSimInfo(context); @@ -116,10 +121,32 @@ public class CallMethodSpinnerHelper { position = callMethodSpinnerAdapter.getPosition( CallMethodSpinnerAdapter.getCallMethodKey(defaultSim)); } + + if (position == POSITION_UNKNOWN) { + // If all else fails, first position + position = 0; + } } - callMethodSpinner.setSelection(position); + if (position < callMethodSpinnerAdapter.getCount()) { + if (lastKnownPosition != position) { + callMethodSpinner.setSelection(position); + } else { + // Adapter doesn't call onChanged if position dosn't change + CallMethodInfo info = callMethodSpinnerAdapter.getItem(position); + changeListener.onCallMethodChangedListener(info); + } + } } } + public static void setSelectedCallMethod(Spinner callMethodSpinner, + CallMethodInfo callMethodInfo) { + CallMethodSpinnerAdapter callMethodSpinnerAdapter = + (CallMethodSpinnerAdapter) callMethodSpinner.getAdapter(); + int position = callMethodSpinnerAdapter.getPosition(callMethodInfo); + if (position > POSITION_UNKNOWN && position < callMethodSpinnerAdapter.getCount()) { + callMethodSpinner.setSelection(position); + } + } } diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java index afebb7836..f694ce1c8 100644 --- a/src/com/android/dialer/widget/SearchEditTextLayout.java +++ b/src/com/android/dialer/widget/SearchEditTextLayout.java @@ -363,14 +363,13 @@ public class SearchEditTextLayout extends FrameLayout { public void updateSpinner(String lastKnownCallMethod, HashMap<ComponentName, CallMethodInfo> availableProviders) { if (mCallMethodChangedListener != null) { - CallMethodSpinnerHelper.setupCallMethodSpinner( - getContext(), - mCallMethodSpinner, - mCallMethodChangedListener); - CallMethodSpinnerHelper.updateCallMethodSpinnerAdapter(getContext(), mCallMethodSpinner, mCallMethodChangedListener, lastKnownCallMethod, availableProviders); } } + + public void setCurrentCallMethod(CallMethodInfo callMethodInfo) { + CallMethodSpinnerHelper.setSelectedCallMethod(mCallMethodSpinner, callMethodInfo); + } } |