merge in nyc-release history after reset to nyc-dev
diff --git a/library/main/src/com/android/setupwizardlib/SetupWizardLayout.java b/library/main/src/com/android/setupwizardlib/SetupWizardLayout.java
index 3906a9b..ce4896f 100644
--- a/library/main/src/com/android/setupwizardlib/SetupWizardLayout.java
+++ b/library/main/src/com/android/setupwizardlib/SetupWizardLayout.java
@@ -152,6 +152,12 @@
 
     @Override
     protected void onRestoreInstanceState(Parcelable state) {
+        if (!(state instanceof SavedState)) {
+            Log.w(TAG, "Ignoring restore instance state " + state);
+            super.onRestoreInstanceState(state);
+            return;
+        }
+
         final SavedState ss = (SavedState) state;
         super.onRestoreInstanceState(ss.getSuperState());
         final boolean isProgressBarShown = ss.mIsProgressBarShown;
diff --git a/library/test/src/com/android/setupwizardlib/test/SetupWizardLayoutTest.java b/library/test/src/com/android/setupwizardlib/test/SetupWizardLayoutTest.java
index fd26239..f71c794 100644
--- a/library/test/src/com/android/setupwizardlib/test/SetupWizardLayoutTest.java
+++ b/library/test/src/com/android/setupwizardlib/test/SetupWizardLayoutTest.java
@@ -19,8 +19,11 @@
 import android.content.Context;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
+import android.os.Parcelable;
 import android.test.InstrumentationTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
+import android.util.SparseArray;
+import android.view.AbsSavedState;
 import android.view.ContextThemeWrapper;
 import android.view.InflateException;
 import android.view.LayoutInflater;
@@ -159,6 +162,57 @@
         }
     }
 
+    @SmallTest
+    public void testOnRestoreFromInstanceState() {
+        final SetupWizardLayout layout = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout.setId(1234);
+
+        SparseArray<Parcelable> container = new SparseArray<>();
+        layout.saveHierarchyState(container);
+
+        final SetupWizardLayout layout2 = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout2.setId(1234);
+        layout2.restoreHierarchyState(container);
+
+        assertFalse("Progress bar should not be shown", layout2.isProgressBarShown());
+    }
+
+    @SmallTest
+    public void testOnRestoreFromInstanceStateProgressBarShown() {
+        final SetupWizardLayout layout = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout.setId(1234);
+
+        layout.setProgressBarShown(true);
+
+        SparseArray<Parcelable> container = new SparseArray<>();
+        layout.saveHierarchyState(container);
+
+        final SetupWizardLayout layout2 = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout2.setId(1234);
+        layout2.restoreHierarchyState(container);
+
+        assertTrue("Progress bar should be shown", layout2.isProgressBarShown());
+    }
+
+    @SmallTest
+    public void testOnRestoreFromIncompatibleInstanceState() {
+        final SetupWizardLayout layout = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout.setId(1234);
+
+        SparseArray<Parcelable> container = new SparseArray<>();
+        container.put(1234, AbsSavedState.EMPTY_STATE);
+        layout.restoreHierarchyState(container);
+
+        // SetupWizardLayout shouldn't crash with incompatible Parcelable
+
+        assertFalse("Progress bar should not be shown", layout.isProgressBarShown());
+    }
+
     private void assertDefaultTemplateInflated(SetupWizardLayout layout) {
         View decorView = layout.findViewById(R.id.suw_layout_decor);
         View navbar = layout.findViewById(R.id.suw_layout_navigation_bar);