1 /*
<lambda>null2  * Copyright (C) 2024 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.contentpreview.payloadtoggle.domain.interactor
18 
19 import android.content.Intent
20 import com.android.intentresolver.contentpreview.payloadtoggle.domain.intent.CustomAction
21 import com.android.intentresolver.contentpreview.payloadtoggle.domain.intent.PendingIntentSender
22 import com.android.intentresolver.contentpreview.payloadtoggle.domain.intent.toCustomActionModel
23 import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.ShareouselUpdate
24 import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.onValue
25 import com.android.intentresolver.data.repository.ChooserRequestRepository
26 import com.android.intentresolver.domain.updateWith
27 import javax.inject.Inject
28 import kotlinx.coroutines.flow.update
29 
30 /** Updates the tracked chooser request. */
31 class UpdateChooserRequestInteractor
32 @Inject
33 constructor(
34     private val repository: ChooserRequestRepository,
35     @CustomAction private val pendingIntentSender: PendingIntentSender,
36 ) {
37     fun applyUpdate(targetIntent: Intent, update: ShareouselUpdate) {
38         repository.chooserRequest.update { it.updateWith(targetIntent, update) }
39         update.customActions.onValue { actions ->
40             repository.customActions.value =
41                 actions.map { it.toCustomActionModel(pendingIntentSender) }
42         }
43     }
44 
45     fun setTargetIntent(targetIntent: Intent) {
46         repository.chooserRequest.update { it.copy(targetIntent = targetIntent) }
47     }
48 }
49