Skip to content

Commit 60eef26

Browse files
author
Dallas Gutauckis
committed
Adding state saving/restoration
1 parent 21cbacf commit 60eef26

1 file changed

Lines changed: 113 additions & 11 deletions

File tree

library/src/com/meetme/android/multistateview/MultiStateView.java

Lines changed: 113 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.content.Context;
44
import android.content.res.TypedArray;
5+
import android.os.Parcel;
56
import android.os.Parcelable;
67
import android.util.AttributeSet;
78
import 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

Comments
 (0)