package com.boardgamegeek.ui; import android.os.Bundle; import android.support.design.widget.CollapsingToolbarLayout; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; import android.support.v7.app.ActionBar; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import com.boardgamegeek.R; import com.boardgamegeek.util.PresentationUtils; import com.boardgamegeek.util.UIUtils; import butterknife.BindView; /** * A navigation drawer activity that displays a hero image. */ public abstract class HeroActivity extends DrawerActivity implements OnRefreshListener { private static final String TAG_SINGLE_PANE = "single_pane"; private Fragment fragment; private boolean isRefreshing; @BindView(R.id.swipe_refresh) SwipeRefreshLayout swipeRefreshLayout; @BindView(R.id.coordinator) CoordinatorLayout coordinator; @BindView(R.id.collapsing_toolbar) CollapsingToolbarLayout collapsingToolbar; @BindView(R.id.toolbar_image) ImageView toolbarImage; @BindView(R.id.scrim) View scrimView; @BindView(R.id.fab) FloatingActionButton fab; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } if (savedInstanceState == null) { createFragment(); } else { fragment = getSupportFragmentManager().findFragmentByTag(TAG_SINGLE_PANE); } if (isRefreshable()) { swipeRefreshLayout.setOnRefreshListener(this); swipeRefreshLayout.setColorSchemeResources(PresentationUtils.getColorSchemeResources()); swipeRefreshLayout.setEnabled(true); } else { swipeRefreshLayout.setEnabled(false); } } protected boolean isRefreshable() { return true; } protected void createFragment() { fragment = onCreatePane(); if (fragment != null) { fragment.setArguments(UIUtils.intentToFragmentArguments(getIntent())); getSupportFragmentManager() .beginTransaction() .add(R.id.root_container, fragment, TAG_SINGLE_PANE) .commit(); } } /** * Called in <code>onCreate</code> when the fragment constituting this activity is needed. The returned fragment's * arguments will be set to the intent used to invoke this activity. */ protected abstract Fragment onCreatePane(); protected Fragment getFragment() { return fragment; } @Override protected int getLayoutResId() { return R.layout.activity_hero; } protected void safelySetTitle(String title) { if (!TextUtils.isEmpty(title)) { collapsingToolbar.setTitle(title); } } @Override public void onRefresh() { //No-op; just here for the children } protected void updateRefreshStatus(boolean refreshing) { this.isRefreshing = refreshing; if (swipeRefreshLayout != null) { swipeRefreshLayout.post(new Runnable() { @Override public void run() { swipeRefreshLayout.setRefreshing(isRefreshing); } }); } } }