package com.jparkie.aizoban.presenters; import android.database.Cursor; import android.os.Bundle; import com.jparkie.aizoban.BuildConfig; import com.jparkie.aizoban.R; import com.jparkie.aizoban.controllers.AizobanManager; import com.jparkie.aizoban.controllers.QueryManager; import com.jparkie.aizoban.controllers.events.NavigationItemSelectEvent; import com.jparkie.aizoban.models.Manga; import com.jparkie.aizoban.presenters.mapper.NavigationMapper; import com.jparkie.aizoban.utils.NavigationUtils; import com.jparkie.aizoban.utils.wrappers.NavigationWrapper; import com.jparkie.aizoban.views.NavigationView; import com.jparkie.aizoban.views.adapters.NavigationAdapter; import com.jparkie.aizoban.views.fragments.NavigationFragment; import java.util.ArrayList; import java.util.List; import de.greenrobot.event.EventBus; import rx.Observer; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import static nl.qbusict.cupboard.CupboardFactory.cupboard; public class NavigationPresenterImpl implements NavigationPresenter { public static final String TAG = NavigationPresenterImpl.class.getSimpleName(); private static final String POSITION_PARCELABLE_KEY = TAG + ":" + "PositionParcelableKey"; private NavigationView mNavigationView; private NavigationMapper mNavigationMapper; private NavigationAdapter mNavigationAdapter; private int mCurrentPosition; private Subscription mQueryRandomMangaSubscription; public NavigationPresenterImpl(NavigationView navigationView, NavigationMapper navigationMapper) { mNavigationView = navigationView; mNavigationMapper = navigationMapper; } @Override public void handleInitialArguments(Bundle arguments) { if (arguments != null) { if (arguments.containsKey(NavigationFragment.POSITION_ARGUMENT_KEY)) { mCurrentPosition = arguments.getInt(NavigationFragment.POSITION_ARGUMENT_KEY); arguments.remove(NavigationFragment.POSITION_ARGUMENT_KEY); } } } @Override public void initializeViews() { mNavigationView.initializeAbsListView(); mNavigationView.initializeSourceTextView(AizobanManager.getNameFromPreferenceSource().toBlocking().single()); initializeThumbnailImageView(); } @Override public void initializeNavigationFromResources() { List<NavigationWrapper> navigationItems = new ArrayList<NavigationWrapper>(); navigationItems.add(NavigationUtils.POSITION_CATALOGUE, new NavigationWrapper(R.drawable.ic_photo_library_white_24dp, R.string.navigation_catalogue_title)); navigationItems.add(NavigationUtils.POSITION_LATEST, new NavigationWrapper(R.drawable.ic_new_releases_white_24dp, R.string.navigation_latest_title)); navigationItems.add(NavigationUtils.POSITION_EXPLORE, new NavigationWrapper(R.drawable.ic_explore_white_24dp, R.string.navigation_explore_title)); navigationItems.add(NavigationUtils.POSITION_DOWNLOAD, new NavigationWrapper(R.drawable.ic_file_download_white_24dp, R.string.navigation_download_title)); navigationItems.add(NavigationUtils.POSITION_FAVOURITE, new NavigationWrapper(R.drawable.ic_favourite_white_24dp, R.string.navigation_favourite_title)); navigationItems.add(NavigationUtils.POSITION_RECENT, new NavigationWrapper(R.drawable.ic_history_white_24dp, R.string.navigation_recent_title)); navigationItems.add(NavigationUtils.POSITION_QUEUE, new NavigationWrapper(R.drawable.ic_cloud_queue_white_24dp, R.string.navigation_queue_title)); navigationItems.add(NavigationUtils.POSITION_SETTINGS, new NavigationWrapper(R.drawable.ic_settings_applications_white_24dp, R.string.navigation_settings_title)); mNavigationAdapter = new NavigationAdapter(mNavigationView.getContext(), navigationItems, mCurrentPosition); mNavigationMapper.registerAdapter(mNavigationAdapter); mNavigationView.highlightPosition(mCurrentPosition); } @Override public void saveState(Bundle outState) { outState.putInt(POSITION_PARCELABLE_KEY, mCurrentPosition); } @Override public void restoreState(Bundle savedState) { if (savedState.containsKey(POSITION_PARCELABLE_KEY)) { mCurrentPosition = savedState.getInt(POSITION_PARCELABLE_KEY); savedState.remove(POSITION_PARCELABLE_KEY); } } @Override public void destroyAllSubscriptions() { if (mQueryRandomMangaSubscription != null) { mQueryRandomMangaSubscription.unsubscribe(); mQueryRandomMangaSubscription = null; } } @Override public void onNavigationItemClick(int position) { if (position != mCurrentPosition) { if (mCurrentPosition == NavigationUtils.POSITION_SETTINGS && position != NavigationUtils.POSITION_SETTINGS) { mNavigationView.initializeSourceTextView(AizobanManager.getNameFromPreferenceSource().toBlocking().single()); } if (position != NavigationUtils.POSITION_EXPLORE) { mCurrentPosition = position; mNavigationAdapter.setCurrentPosition(mCurrentPosition); } mNavigationView.highlightPosition(mCurrentPosition); EventBus.getDefault().post(new NavigationItemSelectEvent(position)); } } private void initializeThumbnailImageView() { mQueryRandomMangaSubscription = QueryManager .queryExploreMangaFromPreferenceSource() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Cursor>() { @Override public void onCompleted() { // Do Nothing. } @Override public void onError(Throwable e) { if (BuildConfig.DEBUG) { e.printStackTrace(); } } @Override public void onNext(Cursor randomCursor) { if (randomCursor != null && randomCursor.getCount() != 0) { Manga manga = cupboard().withCursor(randomCursor).get(Manga.class); if (manga != null) { mNavigationView.setThumbnail(manga.getThumbnailUrl()); } } } }); } }