/*
 * 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.android.permissioncontroller;

import android.os.AsyncTask;

import androidx.annotation.WorkerThread;
import androidx.lifecycle.LiveData;

/**
 * {@link LiveData} that uses {@link AsyncTask} to load value on a background thread.
 *
 * @param <T> type of the value
 */
public abstract class AsyncTaskLiveData<T> extends LiveData<T> {

    /**
     * Load the value on a background thread. The value will be reloaded even if already loaded.
     */
    public void loadValue() {
        AsyncTask.execute(() -> postValue(loadValueInBackground()));
    }

    @WorkerThread
    protected abstract T loadValueInBackground();
}
