From a7d31e8164aa1ca1d8bf86a7421c11780be7ceeb Mon Sep 17 00:00:00 2001 From: PauloftheWest Date: Thu, 25 Sep 2014 12:36:09 -0700 Subject: [PATCH] Fixed a crash when rotating a WPS dialog. Bug: 17635632 Change-Id: Ibd4497362dc61a2f82c098889145430740207638 --- .../settings/wifi/AdvancedWifiSettings.java | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/wifi/AdvancedWifiSettings.java b/src/com/android/settings/wifi/AdvancedWifiSettings.java index f86cc4563d7..bda13ffcd7c 100644 --- a/src/com/android/settings/wifi/AdvancedWifiSettings.java +++ b/src/com/android/settings/wifi/AdvancedWifiSettings.java @@ -16,6 +16,8 @@ package com.android.settings.wifi; +import android.app.Dialog; +import android.app.DialogFragment; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -151,8 +153,8 @@ public class AdvancedWifiSettings extends SettingsPreferenceFragment Preference wpsPushPref = findPreference(KEY_WPS_PUSH); wpsPushPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference arg0) { - WpsDialog wpsDialog = new WpsDialog(context, WpsInfo.PBC); - wpsDialog.show(); + WpsFragment wpsFragment = new WpsFragment(WpsInfo.PBC); + wpsFragment.show(getFragmentManager(), KEY_WPS_PUSH); return true; } }); @@ -161,8 +163,8 @@ public class AdvancedWifiSettings extends SettingsPreferenceFragment Preference wpsPinPref = findPreference(KEY_WPS_PIN); wpsPinPref.setOnPreferenceClickListener(new OnPreferenceClickListener(){ public boolean onPreferenceClick(Preference arg0) { - WpsDialog wpsDialog = new WpsDialog(context, WpsInfo.DISPLAY); - wpsDialog.show(); + WpsFragment wpsFragment = new WpsFragment(WpsInfo.DISPLAY); + wpsFragment.show(getFragmentManager(), KEY_WPS_PIN); return true; } }); @@ -315,4 +317,24 @@ public class AdvancedWifiSettings extends SettingsPreferenceFragment wifiIpAddressPref.setSelectable(false); } + /* Wrapper class for the WPS dialog to properly handle life cycle events like rotation. */ + public static class WpsFragment extends DialogFragment { + private static int mWpsSetup; + + // Public default constructor is required for rotation. + public WpsFragment() { + super(); + } + + public WpsFragment(int wpsSetup) { + super(); + mWpsSetup = wpsSetup; + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + return new WpsDialog(getActivity(), mWpsSetup); + } + } + }