/* * Copyright (C) 2018 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.example.android.intentplayground; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import java.util.List; import java.util.function.Consumer; public class BaseActivityViewModel extends ViewModel { enum FabAction {Show, Hide} private final MutableLiveData mFabActions; /** * Republish {@link BaseActivity#addTrackerListener(Consumer)} in a lifecycle safe manner. * The {@link BaseActivity#addTrackerListener(Consumer)} that is registered in this class, * forwards the value to this, to enjoy all the guarantees {@link import * androidx.lifecycle.LiveData;} gives. */ private final MutableLiveData> mRefreshTree; private final Consumer> mTrackingListener; public BaseActivityViewModel() { mFabActions = new MutableLiveData<>(); mRefreshTree = new MutableLiveData<>(); mTrackingListener = tasks -> mRefreshTree.setValue(tasks); BaseActivity.addTrackerListener(mTrackingListener); } public void actOnFab(FabAction action) { mFabActions.setValue(action); } public LiveData getFabActions() { return mFabActions; } /** * @return LiveData that publishes the new state of {@link com.android.server.wm.Task} and * {@link android.app.Activity}-s whenever that state has been changed. */ public LiveData> getRefresh() { return mRefreshTree; } @Override public void onCleared() { BaseActivity.removeTrackerListener(mTrackingListener); } }