summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2015-06-10 13:36:15 -0700
committerYorke Lee <yorkelee@google.com>2015-06-10 14:51:14 -0700
commit89e784b2673351e0d0a818124d02bcd5f81a14c0 (patch)
tree73a7c364debfa452162652a51e6f94a2580fcfa3
parent70486a1cc4ee0028a726d7b7777ee0a2fb6cd145 (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.java77
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(),