Fix crash on rotation while ICE dialog is open

Bug: 20096049
Change-Id: I90c5d98b26cc55d7178e6c154ff1788ccb4c3974
diff --git a/src/com/android/settings/applications/DefaultEmergencyPreference.java b/src/com/android/settings/applications/DefaultEmergencyPreference.java
index 08e6e94..1470f64 100644
--- a/src/com/android/settings/applications/DefaultEmergencyPreference.java
+++ b/src/com/android/settings/applications/DefaultEmergencyPreference.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.applications;
 
-import com.android.internal.util.ArrayUtils;
-
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
@@ -26,6 +24,8 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.os.AsyncTask;
+import android.os.Parcel;
+import android.os.Parcelable;
 import android.preference.ListPreference;
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
@@ -50,6 +50,25 @@
     }
 
     @Override
+    protected Parcelable onSaveInstanceState() {
+        Parcelable superState = super.onSaveInstanceState();
+        return new SavedState(getEntries(), getEntryValues(), getSummary(), superState);
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        if (state instanceof SavedState) {
+            SavedState savedState = (SavedState) state;
+            setEntries(savedState.entries);
+            setEntryValues(savedState.entryValues);
+            setSummary(savedState.summary);
+            super.onRestoreInstanceState(savedState.superState);
+        } else {
+            super.onRestoreInstanceState(state);
+        }
+    }
+
+    @Override
     protected boolean persistString(String value) {
         String previousValue = Settings.Secure.getString(mContentResolver,
                 Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
@@ -134,4 +153,49 @@
         return info.applicationInfo != null
                 && (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
     }
+
+    private static class SavedState implements Parcelable {
+
+        public final CharSequence[] entries;
+        public final CharSequence[] entryValues;
+        public final CharSequence summary;
+        public final Parcelable superState;
+
+        public SavedState(CharSequence[] entries, CharSequence[] entryValues,
+                CharSequence summary, Parcelable superState) {
+            this.entries = entries;
+            this.entryValues = entryValues;
+            this.summary = summary;
+            this.superState = superState;
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeCharSequenceArray(entries);
+            dest.writeCharSequenceArray(entryValues);
+            dest.writeCharSequence(summary);
+            dest.writeParcelable(superState, flags);
+        }
+
+        public Creator<SavedState> CREATOR = new Creator<SavedState>() {
+            @Override
+            public SavedState createFromParcel(Parcel source) {
+                CharSequence[] entries = source.readCharSequenceArray();
+                CharSequence[] entryValues = source.readCharSequenceArray();
+                CharSequence summary = source.readCharSequence();
+                Parcelable superState = source.readParcelable(getClass().getClassLoader());
+                return new SavedState(entries, entryValues, summary, superState);
+            }
+
+            @Override
+            public SavedState[] newArray(int size) {
+                return new SavedState[size];
+            }
+        };
+    }
 }