diff options
author | Yorke Lee <yorkelee@google.com> | 2015-06-10 13:36:15 -0700 |
---|---|---|
committer | Yorke Lee <yorkelee@google.com> | 2015-06-10 14:51:14 -0700 |
commit | 89e784b2673351e0d0a818124d02bcd5f81a14c0 (patch) | |
tree | 73a7c364debfa452162652a51e6f94a2580fcfa3 | |
parent | 70486a1cc4ee0028a726d7b7777ee0a2fb6cd145 (diff) |
Fix crash after rotation in SelectAccountDialogFragment
* Refactor code so that the callback can be parcelled and
persisted in the fragment after rotation.
* Make callbacks inner static classes to avoid potential
leaks
Bug: 21650435
Change-Id: Ie7c640f580233256c99d0e9e1643153d4c599d20
-rw-r--r-- | src/com/android/dialer/SpecialCharSequenceMgr.java | 77 |
1 files changed, 45 insertions, 32 deletions
diff --git a/src/com/android/dialer/SpecialCharSequenceMgr.java b/src/com/android/dialer/SpecialCharSequenceMgr.java index a57e2ee57..31aa5c3c7 100644 --- a/src/com/android/dialer/SpecialCharSequenceMgr.java +++ b/src/com/android/dialer/SpecialCharSequenceMgr.java @@ -90,6 +90,43 @@ public class SpecialCharSequenceMgr { */ private static QueryHandler sPreviousAdnQueryHandler; + public static class HandleAdnEntryAccountSelectedCallback extends SelectPhoneAccountListener{ + final private TelecomManager mTelecomManager; + final private QueryHandler mQueryHandler; + final private SimContactQueryCookie mCookie; + + public HandleAdnEntryAccountSelectedCallback(TelecomManager telecomManager, + QueryHandler queryHandler, SimContactQueryCookie cookie) { + mTelecomManager = telecomManager; + mQueryHandler = queryHandler; + mCookie = cookie; + } + + @Override + public void onPhoneAccountSelected(PhoneAccountHandle selectedAccountHandle, + boolean setDefault) { + Uri uri = mTelecomManager.getAdnUriForPhoneAccount(selectedAccountHandle); + handleAdnQuery(mQueryHandler, mCookie, uri); + // TODO: Show error dialog if result isn't valid. + } + + } + + public static class HandleMmiAccountSelectedCallback extends SelectPhoneAccountListener{ + final private Context mContext; + final private String mInput; + public HandleMmiAccountSelectedCallback(Context context, String input) { + mContext = context.getApplicationContext(); + mInput = input; + } + + @Override + public void onPhoneAccountSelected(PhoneAccountHandle selectedAccountHandle, + boolean setDefault) { + TelecomUtil.handleMmi(mContext, mInput, selectedAccountHandle); + } + } + /** This class is never instantiated. */ private SpecialCharSequenceMgr() { } @@ -155,9 +192,8 @@ public class SpecialCharSequenceMgr { * This code works alongside the Asynchronous query handler {@link QueryHandler} * and query cancel handler implemented in {@link SimContactQueryCookie}. */ - static boolean handleAdnEntry(final Context context, String input, EditText textField) { + static boolean handleAdnEntry(Context context, String input, EditText textField) { /* ADN entries are of the form "N(N)(N)#" */ - TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager == null @@ -221,23 +257,11 @@ public class SpecialCharSequenceMgr { Uri uri = telecomManager.getAdnUriForPhoneAccount(null); handleAdnQuery(handler, sc, uri); } else if (subscriptionAccountHandles.size() > 1){ - SelectPhoneAccountListener listener = new SelectPhoneAccountListener() { - @Override - public void onPhoneAccountSelected(PhoneAccountHandle selectedAccountHandle, - boolean setDefault) { - Uri uri = - telecomManager.getAdnUriForPhoneAccount(selectedAccountHandle); - handleAdnQuery(handler, sc, uri); - //TODO: show error dialog if result isn't valid - } - @Override - public void onDialogDismissed() {} - }; - - // NOTE: If you want to support rotation of this dialog need - // to refactor the listener and set it in DialpadFragment.onCreate() + SelectPhoneAccountListener callback = + new HandleAdnEntryAccountSelectedCallback(telecomManager, handler, sc); + DialogFragment dialogFragment = SelectPhoneAccountDialogFragment.newInstance( - subscriptionAccountHandles, listener); + subscriptionAccountHandles, callback); dialogFragment.show(((Activity) context).getFragmentManager(), TAG_SELECT_ACCT_FRAGMENT); } else { @@ -287,20 +311,9 @@ public class SpecialCharSequenceMgr { // a subscription account. return TelecomUtil.handleMmi(context, input, null); } else if (subscriptionAccountHandles.size() > 1){ - SelectPhoneAccountListener listener = new SelectPhoneAccountListener() { - @Override - public void onPhoneAccountSelected(PhoneAccountHandle selectedAccountHandle, - boolean setDefault) { - TelecomUtil.handleMmi(context.getApplicationContext(), - input, selectedAccountHandle); - //TODO: show error dialog if result isn't valid - } - @Override - public void onDialogDismissed() {} - }; - - // NOTE: If you want to support rotation of this dialog need - // to refactor the listener and set it in DialpadFragment.onCreate() + SelectPhoneAccountListener listener = + new HandleMmiAccountSelectedCallback(context, input); + DialogFragment dialogFragment = SelectPhoneAccountDialogFragment.newInstance( subscriptionAccountHandles, listener); dialogFragment.show(((Activity) context).getFragmentManager(), |