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.systemui.keyboard.shortcut 18 19 import com.android.systemui.CoreStartable 20 import com.android.systemui.Flags.keyboardShortcutHelperRewrite 21 import com.android.systemui.keyboard.shortcut.data.repository.CustomShortcutCategoriesRepository 22 import com.android.systemui.keyboard.shortcut.data.repository.DefaultShortcutCategoriesRepository 23 import com.android.systemui.keyboard.shortcut.data.repository.ShortcutCategoriesRepository 24 import com.android.systemui.keyboard.shortcut.data.source.AccessibilityShortcutsSource 25 import com.android.systemui.keyboard.shortcut.data.source.AppCategoriesShortcutsSource 26 import com.android.systemui.keyboard.shortcut.data.source.CurrentAppShortcutsSource 27 import com.android.systemui.keyboard.shortcut.data.source.InputShortcutsSource 28 import com.android.systemui.keyboard.shortcut.data.source.KeyboardShortcutGroupsSource 29 import com.android.systemui.keyboard.shortcut.data.source.MultitaskingShortcutsSource 30 import com.android.systemui.keyboard.shortcut.data.source.SystemShortcutsSource 31 import com.android.systemui.keyboard.shortcut.qualifiers.AccessibilityShortcuts 32 import com.android.systemui.keyboard.shortcut.qualifiers.AppCategoriesShortcuts 33 import com.android.systemui.keyboard.shortcut.qualifiers.CurrentAppShortcuts 34 import com.android.systemui.keyboard.shortcut.qualifiers.CustomShortcutCategories 35 import com.android.systemui.keyboard.shortcut.qualifiers.DefaultShortcutCategories 36 import com.android.systemui.keyboard.shortcut.qualifiers.InputShortcuts 37 import com.android.systemui.keyboard.shortcut.qualifiers.MultitaskingShortcuts 38 import com.android.systemui.keyboard.shortcut.qualifiers.SystemShortcuts 39 import com.android.systemui.keyboard.shortcut.ui.ShortcutHelperDialogStarter 40 import dagger.Binds 41 import dagger.Lazy 42 import dagger.Module 43 import dagger.Provides 44 import dagger.multibindings.ClassKey 45 import dagger.multibindings.IntoMap 46 47 @Module 48 interface ShortcutHelperModule { 49 50 @Binds 51 @SystemShortcuts systemShortcutsSourcenull52 fun systemShortcutsSource(impl: SystemShortcutsSource): KeyboardShortcutGroupsSource 53 54 @Binds 55 @MultitaskingShortcuts 56 fun multitaskingShortcutsSource(impl: MultitaskingShortcutsSource): KeyboardShortcutGroupsSource 57 58 @Binds 59 @CurrentAppShortcuts 60 fun currentAppShortcutsSource(impl: CurrentAppShortcutsSource): KeyboardShortcutGroupsSource 61 62 @Binds 63 @InputShortcuts 64 fun inputShortcutsSources(impl: InputShortcutsSource): KeyboardShortcutGroupsSource 65 66 @Binds 67 @AppCategoriesShortcuts 68 fun appCategoriesShortcutsSource( 69 impl: AppCategoriesShortcutsSource 70 ): KeyboardShortcutGroupsSource 71 72 @Binds 73 @AccessibilityShortcuts 74 fun accessibilityShortcutsSource( 75 impl: AccessibilityShortcutsSource 76 ): KeyboardShortcutGroupsSource 77 78 @Binds 79 @DefaultShortcutCategories 80 fun defaultShortcutCategoriesRepository( 81 impl: DefaultShortcutCategoriesRepository 82 ): ShortcutCategoriesRepository 83 84 @Binds 85 @CustomShortcutCategories 86 fun customShortcutCategoriesRepository( 87 impl: CustomShortcutCategoriesRepository 88 ): ShortcutCategoriesRepository 89 90 companion object { 91 @Provides 92 @IntoMap 93 @ClassKey(ShortcutHelperDialogStarter::class) 94 fun starter(implLazy: Lazy<ShortcutHelperDialogStarter>): CoreStartable { 95 return if (keyboardShortcutHelperRewrite()) { 96 implLazy.get() 97 } else { 98 // No-op implementation when the flag is disabled. 99 NoOpStartable 100 } 101 } 102 103 @Provides 104 @IntoMap 105 @ClassKey(ShortcutHelperCoreStartable::class) 106 fun repo(implLazy: Lazy<ShortcutHelperCoreStartable>): CoreStartable { 107 return if (keyboardShortcutHelperRewrite()) { 108 implLazy.get() 109 } else { 110 // No-op implementation when the flag is disabled. 111 NoOpStartable 112 } 113 } 114 } 115 } 116 117 private object NoOpStartable : CoreStartable { startnull118 override fun start() {} 119 } 120