OpenSourceViewModel.java 3.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 *  Copyright (C) 2017 MINDORKS NEXTGEN PRIVATE LIMITED
 *
 *  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
 *
 *      https://mindorks.com/license/apache-v2
 *
 *  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 com.mindorks.framework.mvvm.ui.feed.opensource;

V
Vignesh150493 已提交
19
import android.arch.lifecycle.MutableLiveData;
20 21
import android.databinding.ObservableArrayList;

22 23 24 25 26
import com.mindorks.framework.mvvm.data.DataManager;
import com.mindorks.framework.mvvm.data.model.api.OpenSourceResponse;
import com.mindorks.framework.mvvm.ui.base.BaseViewModel;
import com.mindorks.framework.mvvm.utils.rx.SchedulerProvider;

V
Vignesh150493 已提交
27
import java.util.ArrayList;
28 29
import java.util.List;

30 31 32 33 34 35 36
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Consumer;

/**
 * Created by amitshekhar on 10/07/17.
 */

A
amitshekhariitbhu 已提交
37
public class OpenSourceViewModel extends BaseViewModel<OpenSourceNavigator> {
38

V
Vignesh150493 已提交
39 40 41
    private final ObservableArrayList<OpenSourceItemViewModel> openSourceItemViewModels = new ObservableArrayList<>();
    private final MutableLiveData<List<OpenSourceItemViewModel>> openSourceItemsLiveData;

42 43

    public OpenSourceViewModel(DataManager dataManager,
44 45
                               SchedulerProvider schedulerProvider) {
        super(dataManager, schedulerProvider);
V
Vignesh150493 已提交
46 47
        openSourceItemsLiveData = new MutableLiveData<>();
        fetchRepos();
48 49 50
    }

    public void fetchRepos() {
51
        setIsLoading(true);
52 53 54 55 56 57 58 59 60
        getCompositeDisposable().add(getDataManager()
                .getOpenSourceApiCall()
                .subscribeOn(getSchedulerProvider().io())
                .observeOn(getSchedulerProvider().ui())
                .subscribe(new Consumer<OpenSourceResponse>() {
                    @Override
                    public void accept(@NonNull OpenSourceResponse openSourceResponse)
                            throws Exception {
                        if (openSourceResponse != null && openSourceResponse.getData() != null) {
V
Vignesh150493 已提交
61
                            openSourceItemsLiveData.setValue(getViewModelList(openSourceResponse.getData()));
62
                        }
63
                        setIsLoading(false);
64 65 66 67 68
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(@NonNull Throwable throwable)
                            throws Exception {
69
                        setIsLoading(false);
A
amitshekhariitbhu 已提交
70
                        getNavigator().handleError(throwable);
71 72 73
                    }
                }));
    }
74 75


V
Vignesh150493 已提交
76 77
    public List<OpenSourceItemViewModel> getViewModelList(List<OpenSourceResponse.Repo> repoList) {
        ArrayList<OpenSourceItemViewModel> openSourceItemViewModels = new ArrayList<>();
78 79 80 81
        for (int i = 0; i < repoList.size(); i++) {
            openSourceItemViewModels.add(new OpenSourceItemViewModel(
                    repoList.get(i).getCoverImgUrl(), repoList.get(i).getTitle(),
                    repoList.get(i).getDescription(), repoList.get(i).getProjectUrl()));
82
        }
V
Vignesh150493 已提交
83 84 85 86 87 88 89 90 91 92 93
        return openSourceItemViewModels;
    }

    public MutableLiveData<List<OpenSourceItemViewModel>> getOpenSourceRepos() {
        return openSourceItemsLiveData;
    }

    public void addOpenSourceItemsToList(List<OpenSourceItemViewModel> openSourceItems) {
        openSourceItemViewModels.clear();
        openSourceItemViewModels.addAll(openSourceItems);
    }
94

V
Vignesh150493 已提交
95 96
    public ObservableArrayList<OpenSourceItemViewModel> getOpenSourceItemViewModels() {
        return openSourceItemViewModels;
97
    }
98
}