package org.petabytes.awesomeblogs.feeds; import android.content.Context; import android.graphics.Typeface; import android.support.annotation.NonNull; import android.support.annotation.StringDef; import android.support.v4.util.Pair; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.annimon.stream.Optional; import com.f2prateek.rx.preferences.Preference; import org.petabytes.awesomeblogs.R; import org.petabytes.awesomeblogs.history.HistoryActivity; import org.petabytes.awesomeblogs.settings.SettingsActivity; import org.petabytes.awesomeblogs.util.Analytics; import org.petabytes.awesomeblogs.util.Preferences; import org.petabytes.coordinator.Coordinator; import java.lang.annotation.Retention; import butterknife.BindViews; import butterknife.OnClick; import rx.functions.Action1; import static java.lang.annotation.RetentionPolicy.SOURCE; class DrawerCoordinator extends Coordinator { @Retention(SOURCE) @StringDef({ALL, DEVELOPER, TECH_COMPANY, INSIGHTFUL}) @interface Category {} static final String ALL = "all"; static final String DEVELOPER = "dev"; static final String TECH_COMPANY = "company"; static final String INSIGHTFUL = "insightful"; @BindViews({R.id.all, R.id.developer, R.id.company, R.id.insightful}) ViewGroup[] categoryViews; private final Context context; private final Action1<String> onCategorySelect; private final Preference<String> categoryPreference; DrawerCoordinator(@NonNull Context context, @NonNull Pair<Optional<String>, Integer> digestPair, @NonNull Action1<String> onCategorySelect) { this.context = context; this.onCategorySelect = onCategorySelect; this.categoryPreference = Preferences.category(); digestPair.first.ifPresent(category -> { categoryPreference.set(category); Analytics.event(Analytics.Event.VIEW_DIGEST, Analytics.Param.SIZE, String.valueOf(digestPair.second)); }); } @Override public void attach(@NonNull View view) { super.attach(view); @Category String category = categoryPreference.get(); selectView(getView(category)); bind(categoryPreference.asObservable(), onCategorySelect); } @OnClick({R.id.all, R.id.developer, R.id.company, R.id.insightful}) void onCategoryClick(@NonNull ViewGroup view) { selectView(view); categoryPreference.set(getCategory(view)); } @OnClick(R.id.history) void onHistoryClick() { context.startActivity(HistoryActivity.intent(context)); } @OnClick(R.id.settings) void onSettingsClick() { context.startActivity(SettingsActivity.intent(context)); } private void selectView(@NonNull ViewGroup view) { for (ViewGroup categoryView : categoryViews) { categoryView.setSelected(false); TextView textView = (TextView) categoryView.getChildAt(0); textView.setTypeface(textView.getTypeface(), Typeface.NORMAL); } view.setSelected(true); TextView textView = (TextView) view.getChildAt(0); textView.setTypeface(textView.getTypeface(), Typeface.BOLD); } private ViewGroup getView(@Category String category) { switch (category) { case ALL: return categoryViews[0]; case DEVELOPER: return categoryViews[1]; case TECH_COMPANY: return categoryViews[2]; case INSIGHTFUL: return categoryViews[3]; } throw new IllegalArgumentException("Invalid category"); } @Category private String getCategory(@NonNull View view) { switch (view.getId()) { case R.id.all: Analytics.event(Analytics.Event.VIEW_ALL); return ALL; case R.id.developer: Analytics.event(Analytics.Event.VIEW_DEVELOPER); return DEVELOPER; case R.id.company: Analytics.event(Analytics.Event.VIEW_TECH_COMPANY); return TECH_COMPANY; case R.id.insightful: Analytics.event(Analytics.Event.VIEW_INSIGHTFUL); return INSIGHTFUL; } throw new IllegalArgumentException("Invalid view"); } }