/* * This program is part of the OpenLMIS logistics management information * system platform software. * * Copyright © 2015 ThoughtWorks, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. This program is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Affero General Public License for more details. You should * have received a copy of the GNU Affero General Public License along with * this program. If not, see http://www.gnu.org/licenses. For additional * information contact info@OpenLMIS.org */ package org.openlmis.core.view.fragment; import android.os.Bundle; import org.openlmis.core.exceptions.ViewNotMatchException; import org.openlmis.core.presenter.DummyPresenter; import org.openlmis.core.presenter.Presenter; import org.openlmis.core.utils.ToastUtil; import org.openlmis.core.view.BaseView; import org.openlmis.core.view.activity.BaseActivity; import java.util.ArrayList; import java.util.List; import roboguice.fragment.provided.RoboFragment; import rx.Subscription; public abstract class BaseFragment extends RoboFragment implements BaseView { protected boolean isSavedInstanceState; protected Presenter presenter; protected List<Subscription> subscriptions = new ArrayList<>(); /* * Life cycle of Fragment: onAttach -> onCreate -> onCreateView -> onViewCreated -> onActivityCreated -> onPause -> onStop * */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // retain this fragment setRetainInstance(true); isSavedInstanceState = false; setPresenter(); attachPresenterView(); } private void setPresenter() { presenter = initPresenter(); if (presenter == null) { presenter = new DummyPresenter(); } } private void attachPresenterView() { try { presenter.attachView(this); } catch (ViewNotMatchException e) { e.reportToFabric(); ToastUtil.show(e.getMessage()); } } @Override public void onSaveInstanceState(Bundle outState) { isSavedInstanceState = true; super.onSaveInstanceState(outState); } public abstract Presenter initPresenter(); @Override public void onStart() { super.onStart(); presenter.onStart(); } @Override public void onDestroyView() { super.onDestroyView(); presenter.onStop(); } @Override public void loading() { if (getActivity() instanceof BaseActivity) { ((BaseActivity) getActivity()).loading(); } } @Override public void loading(String message) { if (getActivity() instanceof BaseActivity) { ((BaseActivity) getActivity()).loading(message); } } @Override public void loaded() { if (getActivity() instanceof BaseActivity) { ((BaseActivity) getActivity()).loaded(); } } protected void hideImm() { if (getActivity() instanceof BaseActivity) { ((BaseActivity) getActivity()).hideImm(); } } @Override public void onDestroy() { unSubscribeSubscriptions(); super.onDestroy(); } private void unSubscribeSubscriptions() { for (Subscription subscription : subscriptions) { if (subscription != null) { subscription.unsubscribe(); } } } }