1 /*
2  * 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.platform
18 
19 import android.content.ComponentName
20 import android.content.res.Resources
21 import androidx.annotation.StringRes
22 import com.android.intentresolver.R
23 import com.android.intentresolver.inject.ApplicationOwned
24 import dagger.Module
25 import dagger.Provides
26 import dagger.hilt.InstallIn
27 import dagger.hilt.components.SingletonComponent
28 import java.util.Optional
29 import javax.inject.Qualifier
30 import javax.inject.Singleton
31 
componentNamenull32 internal fun Resources.componentName(@StringRes resId: Int): ComponentName? {
33     check(getResourceTypeName(resId) == "string") { "resId must be a string" }
34     return ComponentName.unflattenFromString(getString(resId))
35 }
36 
37 @Qualifier @MustBeDocumented @Retention(AnnotationRetention.RUNTIME) annotation class ImageEditor
38 
39 @Module
40 @InstallIn(SingletonComponent::class)
41 object ImageEditorModule {
42     /**
43      * The name of the preferred Activity to launch for editing images. This is added to Intents to
44      * edit images using Intent.ACTION_EDIT.
45      */
46     @Provides
47     @Singleton
48     @ImageEditor
imageEditorComponentnull49     fun imageEditorComponent(@ApplicationOwned resources: Resources) =
50         Optional.ofNullable(resources.componentName(R.string.config_systemImageEditor))
51 }
52