3244931 ANR while in settings attempting to enable Accessibility->Talkabout (IKXEVEREST-1847)

Change-Id: Ifea9324671d0e80a417f4b2fe6dbbe981f8b0679
This commit is contained in:
Svetoslav Ganov
2010-12-09 14:53:02 -08:00
parent c8e6d03480
commit 749ba65227
2 changed files with 86 additions and 41 deletions

View File

@@ -23,7 +23,6 @@ import android.app.Fragment;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
@@ -49,9 +48,6 @@ public class SettingsPreferenceFragment extends PreferenceFragment
private SettingsDialogFragment mDialogFragment;
private int mResultCode = Activity.RESULT_CANCELED;
private Intent mResultData;
private Button mNextButton;
@Override
@@ -114,18 +110,55 @@ public class SettingsPreferenceFragment extends PreferenceFragment
}
public static class SettingsDialogFragment extends DialogFragment {
private static final String KEY_DIALOG_ID = "key_dialog_id";
private static final String KEY_PARENT_FRAGMENT_ID = "key_parent_fragment_id";
private int mDialogId;
private DialogCreatable mFragment;
private Fragment mParentFragment;
public SettingsDialogFragment() {
/* do nothing */
}
public SettingsDialogFragment(DialogCreatable fragment, int dialogId) {
mDialogId = dialogId;
mFragment = fragment;
if (!(fragment instanceof Fragment)) {
throw new IllegalArgumentException("fragment argument must be an instance of "
+ Fragment.class.getName());
}
mParentFragment = (Fragment) fragment;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (savedInstanceState != null) {
mDialogId = savedInstanceState.getInt(KEY_DIALOG_ID, 0);
int mParentFragmentId = savedInstanceState.getInt(KEY_PARENT_FRAGMENT_ID, -1);
if (mParentFragmentId > -1) {
mParentFragment = getFragmentManager().findFragmentById(mParentFragmentId);
if (!(mParentFragment instanceof DialogCreatable)) {
throw new IllegalArgumentException(
KEY_PARENT_FRAGMENT_ID + " must implement "
+ DialogCreatable.class.getName());
}
}
}
super.onActivityCreated(savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mParentFragment != null) {
outState.putInt(KEY_DIALOG_ID, mDialogId);
outState.putInt(KEY_PARENT_FRAGMENT_ID, mParentFragment.getId());
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return mFragment.onCreateDialog(mDialogId);
return ((DialogCreatable) mParentFragment).onCreateDialog(mDialogId);
}
public int getDialogId() {