22
33import android .content .Context ;
44import android .content .res .TypedArray ;
5+ import android .os .Parcel ;
56import android .os .Parcelable ;
67import android .util .AttributeSet ;
78import android .util .Log ;
@@ -49,8 +50,8 @@ private void parseAttrs(Context context, AttributeSet attrs) {
4950
5051 try {
5152 setLoadingLayoutResourceId (a .getResourceId (R .styleable .MultiStateView_msvLoadingLayout , R .layout .msv__loading ));
52- setErrorUnknownLayoutResourceId (a .getResourceId (R .styleable .MultiStateView_msvErrorUnknownLayout , R .layout .msv__error_unknown ));
53- setErrorNetworkLayoutResourceId (a .getResourceId (R .styleable .MultiStateView_msvErrorNetworkLayout , R .layout .msv__error_network ));
53+ setGeneralErrorLayoutResourceId (a .getResourceId (R .styleable .MultiStateView_msvErrorUnknownLayout , R .layout .msv__error_unknown ));
54+ setNetworkErrorLayoutResourceId (a .getResourceId (R .styleable .MultiStateView_msvErrorNetworkLayout , R .layout .msv__error_network ));
5455
5556 String tmpString ;
5657
@@ -60,15 +61,15 @@ private void parseAttrs(Context context, AttributeSet attrs) {
6061 tmpString = context .getString (R .string .error_title_network );
6162 }
6263
63- setErrorNetworkTitleString (tmpString );
64+ setNetworkErrorTitleString (tmpString );
6465
6566 tmpString = a .getString (R .styleable .MultiStateView_msvErrorTitleUnknownStringId );
6667
6768 if (tmpString == null ) {
6869 tmpString = context .getString (R .string .error_title_unknown );
6970 }
7071
71- setErrorUnknownTitleString (tmpString );
72+ setGeneralErrorTitleString (tmpString );
7273
7374 tmpString = a .getString (R .styleable .MultiStateView_msvErrorTapToRetryStringId );
7475
@@ -84,23 +85,23 @@ private void parseAttrs(Context context, AttributeSet attrs) {
8485 }
8586 }
8687
87- private void setErrorNetworkLayoutResourceId (int resourceId ) {
88+ private void setNetworkErrorLayoutResourceId (int resourceId ) {
8889 mViewState .networkErrorLayoutResId = resourceId ;
8990 }
9091
91- private void setErrorUnknownLayoutResourceId (int resourceId ) {
92+ private void setGeneralErrorLayoutResourceId (int resourceId ) {
9293 mViewState .generalErrorLayoutResId = resourceId ;
9394 }
9495
95- private void setErrorNetworkTitleString (String string ) {
96+ private void setNetworkErrorTitleString (String string ) {
9697 mViewState .networkErrorTitleString = string ;
9798 }
9899
99100 public String getNetworkErrorTitleString () {
100101 return mViewState .networkErrorTitleString ;
101102 }
102103
103- private void setErrorUnknownTitleString (String string ) {
104+ private void setGeneralErrorTitleString (String string ) {
104105 mViewState .generalErrorTitleString = string ;
105106 }
106107
@@ -326,6 +327,42 @@ private boolean isViewInternal(View view) {
326327 return view == mNetworkErrorView || view == mGeneralErrorView || view == mLoadingView ;
327328 }
328329
330+ @ Override
331+ protected Parcelable onSaveInstanceState () {
332+ Parcelable state = super .onSaveInstanceState ();
333+
334+ SavedState myState = new SavedState (state );
335+
336+ myState .state = mViewState ;
337+
338+ return myState ;
339+ }
340+
341+ @ Override
342+ protected void onRestoreInstanceState (Parcelable state ) {
343+ if (!(state instanceof SavedState )) {
344+ super .onRestoreInstanceState (state );
345+ return ;
346+ }
347+
348+ SavedState myState = (SavedState ) state ;
349+
350+ setViewState (myState .state );
351+
352+ super .onRestoreInstanceState (myState .getSuperState ());
353+ }
354+
355+ private void setViewState (MultiStateViewData state ) {
356+ setState (state .state );
357+ setTapToRetryString (state .tapToRetryString );
358+ setGeneralErrorTitleString (state .generalErrorTitleString );
359+ setNetworkErrorTitleString (state .networkErrorTitleString );
360+ setGeneralErrorLayoutResourceId (state .generalErrorLayoutResId );
361+ setNetworkErrorLayoutResourceId (state .networkErrorLayoutResId );
362+ setLoadingLayoutResourceId (state .loadingLayoutResId );
363+ setCustomErrorString (state .customErrorString );
364+ }
365+
329366 @ Override
330367 public void addView (View child ) {
331368 if (!isViewInternal (child )) {
@@ -422,7 +459,36 @@ private ContentState(int nativeValue) {
422459 }
423460 }
424461
425- public static class MultiStateViewData {
462+ public static class SavedState extends View .BaseSavedState {
463+ MultiStateViewData state ;
464+
465+ public SavedState (Parcelable superState ) {
466+ super (superState );
467+ }
468+
469+ private SavedState (Parcel in ) {
470+ super (in );
471+ state = in .readParcelable (null );
472+ }
473+
474+ @ Override
475+ public void writeToParcel (Parcel out , int flags ) {
476+ super .writeToParcel (out , flags );
477+ out .writeParcelable (state , 0 );
478+ }
479+
480+ public static final Parcelable .Creator <SavedState > CREATOR = new Parcelable .Creator <SavedState >() {
481+ public SavedState createFromParcel (Parcel in ) {
482+ return new SavedState (in );
483+ }
484+
485+ public SavedState [] newArray (int size ) {
486+ return new SavedState [size ];
487+ }
488+ };
489+ }
490+
491+ public static class MultiStateViewData implements Parcelable {
426492 public String customErrorString ;
427493 public int loadingLayoutResId ;
428494 public int generalErrorLayoutResId ;
@@ -432,8 +498,44 @@ public static class MultiStateViewData {
432498 public String tapToRetryString ;
433499 public ContentState state ;
434500
435- public MultiStateViewData (ContentState mState ) {
436- this . state = mState ;
501+ public MultiStateViewData (ContentState contentState ) {
502+ state = contentState ;
437503 }
504+
505+ private MultiStateViewData (Parcel in ) {
506+ customErrorString = in .readString ();
507+ loadingLayoutResId = in .readInt ();
508+ generalErrorLayoutResId = in .readInt ();
509+ networkErrorLayoutResId = in .readInt ();
510+ networkErrorTitleString = in .readString ();
511+ generalErrorTitleString = in .readString ();
512+ tapToRetryString = in .readString ();
513+ state = ContentState .valueOf (in .readString ());
514+ }
515+
516+ public int describeContents () {
517+ return 0 ;
518+ }
519+
520+ public void writeToParcel (Parcel dest , int flags ) {
521+ dest .writeString (customErrorString );
522+ dest .writeInt (loadingLayoutResId );
523+ dest .writeInt (generalErrorLayoutResId );
524+ dest .writeInt (networkErrorLayoutResId );
525+ dest .writeString (networkErrorTitleString );
526+ dest .writeString (generalErrorTitleString );
527+ dest .writeString (tapToRetryString );
528+ dest .writeString (state .name ());
529+ }
530+
531+ public static final Parcelable .Creator <MultiStateViewData > CREATOR = new Parcelable .Creator <MultiStateViewData >() {
532+ public MultiStateViewData createFromParcel (Parcel in ) {
533+ return new MultiStateViewData (in );
534+ }
535+
536+ public MultiStateViewData [] newArray (int size ) {
537+ return new MultiStateViewData [size ];
538+ }
539+ };
438540 }
439541}
0 commit comments