Download File
Download Project
Settings
Line Wrap
Themes
default
ambiance
bespin
dracula
eclipse
material
mbo
mdn-like
neat
solarized dark
ttcn
zenburn
UserViewModel.java
/* * Copyright (C) 2017 The Android Open Source Project * * 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 com.android.example.github.ui.user; import com.android.example.github.repository.RepoRepository; import com.android.example.github.repository.UserRepository; import com.android.example.github.util.AbsentLiveData; import com.android.example.github.util.Objects; import com.android.example.github.vo.Repo; import com.android.example.github.vo.Resource; import com.android.example.github.vo.User; import android.arch.lifecycle.LiveData; import android.arch.lifecycle.MutableLiveData; import android.arch.lifecycle.Transformations; import android.arch.lifecycle.ViewModel; import android.support.annotation.VisibleForTesting; import java.util.List; import javax.inject.Inject; public class UserViewModel extends ViewModel { @VisibleForTesting final MutableLiveData
login = new MutableLiveData<>(); private final LiveData
>> repositories; private final LiveData
> user; @SuppressWarnings("unchecked") @Inject public UserViewModel(UserRepository userRepository, RepoRepository repoRepository) { user = Transformations.switchMap(login, login -> { if (login == null) { return AbsentLiveData.create(); } else { return userRepository.loadUser(login); } }); repositories = Transformations.switchMap(login, login -> { if (login == null) { return AbsentLiveData.create(); } else { return repoRepository.loadRepos(login); } }); } @VisibleForTesting public void setLogin(String login) { if (Objects.equals(this.login.getValue(), login)) { return; } this.login.setValue(login); } @VisibleForTesting public LiveData
> getUser() { return user; } @VisibleForTesting public LiveData
>> getRepositories() { return repositories; } @VisibleForTesting public void retry() { if (this.login.getValue() != null) { this.login.setValue(this.login.getValue()); } } }