From e0b601cda2a89662fe5b07e1da438e659b0f269c Mon Sep 17 00:00:00 2001 From: Mykhailo Shchurov Date: Sun, 3 Apr 2016 00:13:31 +0300 Subject: [PATCH] Saving view states --- .../view/fragment/UserDetailsFragment.java | 39 ++++++++++++++++-- .../view/fragment/UserListFragment.java | 40 +++++++++++++++++-- 2 files changed, 73 insertions(+), 6 deletions(-) diff --git a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserDetailsFragment.java b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserDetailsFragment.java index e5c51334..bcdf106a 100644 --- a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserDetailsFragment.java +++ b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserDetailsFragment.java @@ -12,22 +12,30 @@ import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; -import butterknife.Bind; -import butterknife.ButterKnife; -import butterknife.OnClick; + import com.fernandocejas.android10.sample.presentation.R; import com.fernandocejas.android10.sample.presentation.internal.di.components.UserComponent; import com.fernandocejas.android10.sample.presentation.model.UserModel; import com.fernandocejas.android10.sample.presentation.presenter.UserDetailsPresenter; import com.fernandocejas.android10.sample.presentation.view.UserDetailsView; import com.fernandocejas.android10.sample.presentation.view.component.AutoLoadImageView; + import javax.inject.Inject; +import butterknife.Bind; +import butterknife.ButterKnife; +import butterknife.OnClick; + /** * Fragment that shows details of a certain user. */ public class UserDetailsFragment extends BaseFragment implements UserDetailsView { + private static final String INSTANCE_STATE_PARAM_SHOW_LOADING + = "org.android10.STATE_PARAM_SHOW_LOADING"; + private static final String INSTANCE_STATE_PARAM_SHOW_RETRY + = "org.android10.STATE_PARAM_SHOW_RETRY"; + @Inject UserDetailsPresenter userDetailsPresenter; @Bind(R.id.iv_cover) AutoLoadImageView iv_cover; @@ -63,6 +71,22 @@ public UserDetailsFragment() { } } + @Override + public void onViewStateRestored(Bundle savedInstanceState) { + super.onViewStateRestored(savedInstanceState); + if (savedInstanceState == null) { + return; + } + boolean loadingVisible = savedInstanceState.getBoolean(INSTANCE_STATE_PARAM_SHOW_LOADING); + boolean retryVisible = savedInstanceState.getBoolean(INSTANCE_STATE_PARAM_SHOW_RETRY); + if (loadingVisible) { + showLoading(); + } + if (retryVisible) { + showRetry(); + } + } + @Override public void onResume() { super.onResume(); this.userDetailsPresenter.resume(); @@ -73,6 +97,15 @@ public UserDetailsFragment() { this.userDetailsPresenter.pause(); } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + boolean loadingVisible = rl_progress.getVisibility() == View.VISIBLE; + boolean retryVisible = rl_retry.getVisibility() == View.VISIBLE; + outState.putBoolean(INSTANCE_STATE_PARAM_SHOW_LOADING, loadingVisible); + outState.putBoolean(INSTANCE_STATE_PARAM_SHOW_RETRY, retryVisible); + } + @Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this); diff --git a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserListFragment.java b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserListFragment.java index 6da47c9a..35126ce4 100644 --- a/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserListFragment.java +++ b/presentation/src/main/java/com/fernandocejas/android10/sample/presentation/view/fragment/UserListFragment.java @@ -14,9 +14,7 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.RelativeLayout; -import butterknife.Bind; -import butterknife.ButterKnife; -import butterknife.OnClick; + import com.fernandocejas.android10.sample.presentation.R; import com.fernandocejas.android10.sample.presentation.internal.di.components.UserComponent; import com.fernandocejas.android10.sample.presentation.model.UserModel; @@ -24,14 +22,25 @@ import com.fernandocejas.android10.sample.presentation.view.UserListView; import com.fernandocejas.android10.sample.presentation.view.adapter.UsersAdapter; import com.fernandocejas.android10.sample.presentation.view.adapter.UsersLayoutManager; + import java.util.Collection; + import javax.inject.Inject; +import butterknife.Bind; +import butterknife.ButterKnife; +import butterknife.OnClick; + /** * Fragment that shows a list of Users. */ public class UserListFragment extends BaseFragment implements UserListView { + private static final String INSTANCE_STATE_PARAM_SHOW_LOADING + = "org.android10.STATE_PARAM_SHOW_LOADING"; + private static final String INSTANCE_STATE_PARAM_SHOW_RETRY + = "org.android10.STATE_PARAM_SHOW_RETRY"; + /** * Interface for listening user list events. */ @@ -81,6 +90,22 @@ public UserListFragment() { } } + @Override + public void onViewStateRestored(Bundle savedInstanceState) { + super.onViewStateRestored(savedInstanceState); + if (savedInstanceState == null) { + return; + } + boolean loadingVisible = savedInstanceState.getBoolean(INSTANCE_STATE_PARAM_SHOW_LOADING); + boolean retryVisible = savedInstanceState.getBoolean(INSTANCE_STATE_PARAM_SHOW_RETRY); + if (loadingVisible) { + showLoading(); + } + if (retryVisible) { + showRetry(); + } + } + @Override public void onResume() { super.onResume(); this.userListPresenter.resume(); @@ -91,6 +116,15 @@ public UserListFragment() { this.userListPresenter.pause(); } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + boolean loadingVisible = rl_progress.getVisibility() == View.VISIBLE; + boolean retryVisible = rl_retry.getVisibility() == View.VISIBLE; + outState.putBoolean(INSTANCE_STATE_PARAM_SHOW_LOADING, loadingVisible); + outState.putBoolean(INSTANCE_STATE_PARAM_SHOW_RETRY, retryVisible); + } + @Override public void onDestroyView() { super.onDestroyView(); rv_users.setAdapter(null);