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.getOrDefault
25 import com.android.intentresolver.contentpreview.payloadtoggle.domain.model.onValue
26 import com.android.intentresolver.data.repository.ChooserRequestRepository
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 { current ->
39             current.copy(
40                 targetIntent = targetIntent,
41                 callerChooserTargets =
42                     update.callerTargets.getOrDefault(current.callerChooserTargets),
43                 modifyShareAction =
44                     update.modifyShareAction.getOrDefault(current.modifyShareAction),
45                 additionalTargets = update.alternateIntents.getOrDefault(current.additionalTargets),
46                 chosenComponentSender =
47                     update.resultIntentSender.getOrDefault(current.chosenComponentSender),
48                 refinementIntentSender =
49                     update.refinementIntentSender.getOrDefault(current.refinementIntentSender),
50                 metadataText = update.metadataText.getOrDefault(current.metadataText),
51                 chooserActions = update.customActions.getOrDefault(current.chooserActions),
52             )
53         }
54         update.customActions.onValue { actions ->
55             repository.customActions.value =
56                 actions.map { it.toCustomActionModel(pendingIntentSender) }
57         }
58     }
59 
60     fun setTargetIntent(targetIntent: Intent) {
61         repository.chooserRequest.update { it.copy(targetIntent = targetIntent) }
62     }
63 }
64