/* * Copyright (C) 2025 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.systemui.screencapture.common.ui.viewmodel import com.android.systemui.screencapture.common.domain.interactor.ScreenCaptureRecentTaskInteractor import com.android.systemui.screencapture.common.domain.model.ScreenCaptureRecentTask import javax.inject.Inject import kotlinx.coroutines.flow.Flow /** * Interface for view models concerned with recent tasks. * * Example Usage: * ``` * class FooViewModel(vm: RecentTasksViewModelImpl) : RecentTasksViewModel by vm * ``` * * And then in compose: * ``` * @Composable * fun Foo(viewModel: FooViewModel, modelFactory: RecentTaskViewModel.Factory) { * val recentTasks by viewModel.recentTasks.collectAsState() * LazyRow { * recentTasks?.let { * items(it) { task -> * val model by rememberViewModel("FooTraceName", task) { * modelFactory.create(task) * } * // ... * } * } * } * } * ``` */ interface RecentTasksViewModel { /** The current list of recent tasks. */ val recentTasks: Flow?> } /** The default implementation of [RecentTasksViewModel]. */ class RecentTasksViewModelImpl @Inject constructor(interactor: ScreenCaptureRecentTaskInteractor) : RecentTasksViewModel { override val recentTasks: Flow?> = interactor.recentTasks }