package com.battlelancer.seriesguide.ui; import android.annotation.TargetApi; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.view.ViewPager; import android.view.Menu; import android.view.MenuItem; import android.view.View; import butterknife.BindView; import butterknife.ButterKnife; import com.battlelancer.seriesguide.R; import com.battlelancer.seriesguide.adapters.TabStripAdapter; import com.battlelancer.seriesguide.settings.DisplaySettings; import com.battlelancer.seriesguide.settings.TraktCredentials; import com.battlelancer.seriesguide.widgets.SlidingTabLayout; import org.greenrobot.eventbus.EventBus; /** * Movie section of the app, displays various movie tabs. */ public class MoviesActivity extends BaseTopActivity { public class MoviesTabClickEvent { public final int position; public final boolean showingNowTab; public MoviesTabClickEvent(int position, boolean showingNowTab) { this.position = position; this.showingNowTab = showingNowTab; } } public static final int SEARCH_LOADER_ID = 100; public static final int NOW_TRAKT_USER_LOADER_ID = 101; public static final int NOW_TRAKT_FRIENDS_LOADER_ID = 102; public static final int WATCHLIST_LOADER_ID = 103; public static final int COLLECTION_LOADER_ID = 104; public static final int TAB_POSITION_DISCOVER = 0; public static final int TAB_POSITION_WATCHLIST_DEFAULT = 1; public static final int TAB_POSITION_COLLECTION_DEFAULT = 2; public static final int TAB_POSITION_NOW = 1; public static final int TAB_POSITION_WATCHLIST_WITH_NOW = 2; public static final int TAB_POSITION_COLLECTION_WITH_NOW = 3; private static final int TAB_COUNT_WITH_TRAKT = 4; @BindView(R.id.viewPagerTabs) ViewPager viewPager; @BindView(R.id.tabLayoutTabs) SlidingTabLayout tabs; private TabStripAdapter tabsAdapter; private boolean showNowTab; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tabs_drawer); setupActionBar(); setupNavDrawer(); setupViews(savedInstanceState); setupSyncProgressBar(R.id.progressBarTabs); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (savedInstanceState != null) { postponeEnterTransition(); viewPager.post(new Runnable() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public void run() { // Allow the adapters to repopulate during the next layout pass before starting the transition animation startPostponedEnterTransition(); } }); } } } private void setupViews(Bundle savedInstanceState) { ButterKnife.bind(this); // tabs showNowTab = TraktCredentials.get(this).hasCredentials(); tabs.setOnTabClickListener(new SlidingTabLayout.OnTabClickListener() { @Override public void onTabClick(int position) { if (viewPager.getCurrentItem() == position) { EventBus.getDefault().post(new MoviesTabClickEvent(position, showNowTab)); } } }); tabsAdapter = new TabStripAdapter(getSupportFragmentManager(), this, viewPager, tabs); // discover tabsAdapter.addTab(R.string.title_discover, MoviesDiscoverFragment.class, null); // trakt-only tabs should only be visible if connected if (showNowTab) { // (what to watch) now tabsAdapter.addTab(R.string.now_tab, MoviesNowFragment.class, null); } // watchlist tabsAdapter.addTab(R.string.movies_watchlist, MoviesWatchListFragment.class, null); // collection tabsAdapter.addTab(R.string.movies_collection, MoviesCollectionFragment.class, null); tabsAdapter.notifyTabsChanged(); if (savedInstanceState == null) { viewPager.setCurrentItem(DisplaySettings.getLastMoviesTabPosition(this), false); } } @Override protected void onStart() { super.onStart(); setDrawerSelectedItem(R.id.navigation_item_movies); // add trakt-only tab if user just signed in maybeAddNowTab(); } @Override protected void onPause() { super.onPause(); PreferenceManager.getDefaultSharedPreferences(this).edit() .putInt(DisplaySettings.KEY_LAST_ACTIVE_MOVIES_TAB, viewPager.getCurrentItem()) .apply(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.movies_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); if (itemId == R.id.menu_action_movies_search) { startActivity(new Intent(this, MoviesSearchActivity.class)); return true; } return super.onOptionsItemSelected(item); } private void maybeAddNowTab() { int currentTabCount = tabsAdapter.getCount(); showNowTab = TraktCredentials.get(this).hasCredentials(); if (showNowTab && currentTabCount != TAB_COUNT_WITH_TRAKT) { tabsAdapter.addTab(R.string.now_tab, MoviesNowFragment.class, null); // update tabs tabsAdapter.notifyTabsChanged(); } } @Override protected View getSnackbarParentView() { return findViewById(R.id.rootLayoutTabs); } }