1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.intentresolver
18 
19 import android.content.Intent
20 import android.net.Uri
21 import androidx.lifecycle.ViewModel
22 import androidx.lifecycle.ViewModelProvider
23 import androidx.lifecycle.viewmodel.CreationExtras
24 import com.android.intentresolver.contentpreview.BasePreviewViewModel
25 import com.android.intentresolver.contentpreview.ImageLoader
26 
27 /** A test content preview model that supports image loader override. */
28 class TestContentPreviewViewModel(
29     private val viewModel: BasePreviewViewModel,
30     override val imageLoader: ImageLoader,
31 ) : BasePreviewViewModel() {
32 
33     override val previewDataProvider
34         get() = viewModel.previewDataProvider
35 
initnull36     override fun init(
37         targetIntent: Intent,
38         additionalContentUri: Uri?,
39         isPayloadTogglingEnabled: Boolean,
40     ) {
41         viewModel.init(targetIntent, additionalContentUri, isPayloadTogglingEnabled)
42     }
43 
44     companion object {
wrapnull45         fun wrap(
46             factory: ViewModelProvider.Factory,
47             imageLoader: ImageLoader?,
48         ): ViewModelProvider.Factory =
49             object : ViewModelProvider.Factory {
50                 @Suppress("UNCHECKED_CAST")
51                 override fun <T : ViewModel> create(
52                     modelClass: Class<T>,
53                     extras: CreationExtras
54                 ): T {
55                     val wrapped = factory.create(modelClass, extras) as BasePreviewViewModel
56                     return TestContentPreviewViewModel(
57                         wrapped,
58                         imageLoader ?: wrapped.imageLoader,
59                     )
60                         as T
61                 }
62             }
63     }
64 }
65