/* * Copyright (c) 2015 Zelory. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package id.zelory.codepolitan.controller; import android.os.Bundle; import java.util.List; import id.zelory.benih.controller.BenihController; import id.zelory.benih.util.BenihScheduler; import id.zelory.codepolitan.R; import id.zelory.codepolitan.controller.event.ErrorEvent; import id.zelory.codepolitan.data.model.Category; import id.zelory.codepolitan.data.LocalDataManager; import id.zelory.codepolitan.data.model.Tag; import id.zelory.codepolitan.data.database.DataBaseHelper; import timber.log.Timber; /** * Created on : August 30, 2015 * Author : zetbaitsu * Name : Zetra * Email : zetra@mail.ugm.ac.id * GitHub : https://github.com/zetbaitsu * LinkedIn : https://id.linkedin.com/in/zetbaitsu */ public class FollowController extends BenihController<FollowController.Presenter> { public FollowController(Presenter presenter) { super(presenter); } public void loadFollowedCategories() { presenter.showLoading(); DataBaseHelper.pluck() .getFollowedCategories() .compose(BenihScheduler.pluck().applySchedulers(BenihScheduler.Type.IO)) .subscribe(categories -> { int p = categories.size(); LocalDataManager.setFollowAll(p >= 10); for (int i = 0; i < p; i++) { switch (categories.get(i).getName()) { case "Tokoh": categories.get(i).setImageResource(R.drawable.category_tokoh); break; case "Tools": categories.get(i).setImageResource(R.drawable.category_tools); break; case "Info": categories.get(i).setImageResource(R.drawable.category_info); break; case "Tips & Trik": categories.get(i).setImageResource(R.drawable.category_tips); break; case "Wawancara": categories.get(i).setImageResource(R.drawable.category_wawancara); break; case "Event": categories.get(i).setImageResource(R.drawable.category_event); break; case "Opini": categories.get(i).setImageResource(R.drawable.category_opini); break; case "Komunitas": categories.get(i).setImageResource(R.drawable.category_komunitas); break; case "Review KaryaLokal": categories.get(i).setImageResource(R.drawable.category_review); break; case "Lowongan Kerja": categories.get(i).setImageResource(R.drawable.category_lowongan); break; default: categories.get(i).setImageResource(R.drawable.category_lowongan); break; } } if (presenter != null) { presenter.showFollowedCategories(categories); presenter.dismissLoading(); } }, throwable -> { if (presenter != null) { Timber.d(throwable.getMessage()); presenter.showError(new Throwable(ErrorEvent.LOAD_FOLLOWED_CATEGORIES)); presenter.dismissLoading(); } }); } public void loadFollowedTags() { presenter.showLoading(); DataBaseHelper.pluck() .getFollowedTags() .compose(BenihScheduler.pluck().applySchedulers(BenihScheduler.Type.IO)) .subscribe(tags -> { if (presenter != null) { presenter.showFollowedTags(tags); presenter.dismissLoading(); } }, throwable -> { if (presenter != null) { Timber.d(throwable.getMessage()); presenter.showError(new Throwable(ErrorEvent.LOAD_FOLLOWED_TAGS)); presenter.dismissLoading(); } }); } public void follow(Category category) { if (!category.isFollowed()) { category.setFollowed(true); DataBaseHelper.pluck().follow(category); presenter.onFollow(category); } else { category.setFollowed(false); DataBaseHelper.pluck().unFollow(category); presenter.onUnFollow(category); } } public void follow(Tag tag) { if (!tag.isFollowed()) { tag.setFollowed(true); DataBaseHelper.pluck().follow(tag); presenter.onFollow(tag); } else { tag.setFollowed(false); DataBaseHelper.pluck().unFollow(tag); presenter.onUnFollow(tag); } } @Override public void saveState(Bundle bundle) { } @Override public void loadState(Bundle bundle) { } public interface Presenter extends BenihController.Presenter { void showFollowedCategories(List<Category> categories); void showFollowedTags(List<Tag> tags); void onFollow(Category category); void onFollow(Tag tag); void onUnFollow(Category category); void onUnFollow(Tag tag); } }