package com.hannesdorfmann.mosby3.sample.mail.statistics; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatDialog; import android.support.v7.app.AppCompatDialogFragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import butterknife.BindView; import butterknife.ButterKnife; import com.hannesdorfmann.mosby3.mvp.delegate.FragmentMvpDelegate; import com.hannesdorfmann.mosby3.mvp.delegate.FragmentMvpViewStateDelegateImpl; import com.hannesdorfmann.mosby3.mvp.delegate.MvpViewStateDelegateCallback; import com.hannesdorfmann.mosby3.sample.mail.MailApplication; import com.hannesdorfmann.mosby3.sample.mail.R; import com.hannesdorfmann.mosby3.sample.mail.base.view.viewstate.AuthParcelableDataViewState; import com.hannesdorfmann.mosby3.sample.mail.model.mail.statistics.MailStatistics; /** * @author Hannes Dorfmann */ public class StatisticsDialog extends AppCompatDialogFragment implements StatisticsView, MvpViewStateDelegateCallback<StatisticsView, StatisticsPresenter, AuthParcelableDataViewState<MailStatistics, StatisticsView>> { @BindView(R.id.contentView) RecyclerView contentView; @BindView(R.id.loadingView) View loadingView; @BindView(R.id.errorView) TextView errorView; @BindView(R.id.authView) View authView; StatisticsPresenter presenter; AuthParcelableDataViewState<MailStatistics, StatisticsView> viewState; MailStatistics data; StatisticsAdapter adapter; private FragmentMvpDelegate<StatisticsView, StatisticsPresenter> delegate = new FragmentMvpViewStateDelegateImpl<>(this, this, true, true); // // DELEGATE callback // @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); delegate.onCreate(savedInstanceState); } @Override public void onDestroy() { super.onDestroy(); delegate.onDestroy(); } @Override public void onPause() { super.onPause(); delegate.onPause(); } @Override public void onResume() { super.onResume(); delegate.onResume(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_statistics, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); delegate.onViewCreated(view, savedInstanceState); ButterKnife.bind(this, view); adapter = new StatisticsAdapter(getActivity()); contentView.setAdapter(adapter); contentView.setLayoutManager(new LinearLayoutManager(getActivity())); } @Override public void onDestroyView() { super.onDestroyView(); delegate.onDestroyView(); } @Override public void onStart() { super.onStart(); delegate.onStart(); } @Override public void onStop() { super.onStop(); delegate.onStop(); } @Override public void onAttach(Activity activity) { super.onAttach(activity); delegate.onAttach(activity); } @Override public void onDetach() { super.onDetach(); delegate.onDetach(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); delegate.onActivityCreated(savedInstanceState); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); delegate.onSaveInstanceState(outState); } // // End delegates // @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AppCompatDialog dialog = new AppCompatDialog(getActivity(), getTheme()); dialog.setTitle(R.string.menu_statistics); return dialog; } @Override public void showAuthenticationRequired() { contentView.setVisibility(View.GONE); errorView.setVisibility(View.GONE); loadingView.setVisibility(View.GONE); authView.setVisibility(View.VISIBLE); ((AuthParcelableDataViewState<MailStatistics, StatisticsView>) viewState).setShowingAuthenticationRequired(); } @Override public void showLoading(boolean pullToRefresh) { contentView.setVisibility(View.GONE); errorView.setVisibility(View.GONE); loadingView.setVisibility(View.VISIBLE); authView.setVisibility(View.GONE); ((AuthParcelableDataViewState<MailStatistics, StatisticsView>) viewState).setStateShowLoading( pullToRefresh); } @Override public void showContent() { contentView.setVisibility(View.VISIBLE); errorView.setVisibility(View.GONE); loadingView.setVisibility(View.GONE); authView.setVisibility(View.GONE); ((AuthParcelableDataViewState<MailStatistics, StatisticsView>) viewState).setStateShowContent( data); } @Override public void showError(Throwable e, boolean pullToRefresh) { contentView.setVisibility(View.GONE); errorView.setVisibility(View.VISIBLE); loadingView.setVisibility(View.GONE); authView.setVisibility(View.GONE); ((AuthParcelableDataViewState<MailStatistics, StatisticsView>) viewState).setStateShowError(e, pullToRefresh); } @Override public void setData(MailStatistics data) { this.data = data; adapter.setItems(data.getMailsCounts()); adapter.notifyDataSetChanged(); } @Override public void loadData(boolean pullToRefresh) { presenter.loadStatistics(); } @Override public AuthParcelableDataViewState<MailStatistics, StatisticsView> getViewState() { return viewState; } @Override public void setViewState(AuthParcelableDataViewState<MailStatistics, StatisticsView> viewState) { this.viewState = viewState; } @Override public AuthParcelableDataViewState<MailStatistics, StatisticsView> createViewState() { return new AuthParcelableDataViewState<MailStatistics, StatisticsView>(); } @Override public void setRestoringViewState(boolean restoringViewState) { // Not needed } @Override public boolean isRestoringViewState() { // Not needed return false; } @Override public void onViewStateInstanceRestored(boolean instanceStateRetained) { // Not needed } @Override public void onNewViewStateInstance() { loadData(false); } @Override public StatisticsPresenter createPresenter() { return DaggerStatisticsComponent.builder() .mailAppComponent(MailApplication.getMailComponents()) .build() .presenter(); } @Override public StatisticsPresenter getPresenter() { return presenter; } @Override public void setPresenter(StatisticsPresenter presenter) { this.presenter = presenter; } @Override public StatisticsView getMvpView() { return this; } }