1 /* 2 * Copyright (C) 2020 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.qs.dagger; 18 19 import static com.android.systemui.util.Utils.useQsMediaPlayer; 20 21 import android.content.Context; 22 import android.view.LayoutInflater; 23 import android.view.View; 24 25 import com.android.systemui.R; 26 import com.android.systemui.dagger.qualifiers.RootView; 27 import com.android.systemui.plugins.qs.QS; 28 import com.android.systemui.qs.QSContainerImpl; 29 import com.android.systemui.qs.QSFooter; 30 import com.android.systemui.qs.QSFooterView; 31 import com.android.systemui.qs.QSFooterViewController; 32 import com.android.systemui.qs.QSFragment; 33 import com.android.systemui.qs.QSPanel; 34 import com.android.systemui.qs.QuickQSPanel; 35 import com.android.systemui.qs.QuickStatusBarHeader; 36 import com.android.systemui.qs.carrier.QSCarrierGroupController; 37 import com.android.systemui.qs.customize.QSCustomizer; 38 import com.android.systemui.statusbar.phone.MultiUserSwitch; 39 40 import javax.inject.Named; 41 42 import dagger.Binds; 43 import dagger.Module; 44 import dagger.Provides; 45 46 /** 47 * Dagger Module for {@link QSFragmentComponent}. 48 */ 49 @Module 50 public interface QSFragmentModule { 51 String QS_SECURITY_FOOTER_VIEW = "qs_security_footer"; 52 String QS_USING_MEDIA_PLAYER = "qs_using_media_player"; 53 54 /** 55 * Provide a context themed using the QS theme 56 */ 57 @Provides 58 @QSThemedContext provideThemedContext(@ootView View view)59 static Context provideThemedContext(@RootView View view) { 60 return view.getContext(); 61 } 62 63 /** */ 64 @Provides 65 @QSThemedContext provideThemedLayoutInflater(@SThemedContext Context context)66 static LayoutInflater provideThemedLayoutInflater(@QSThemedContext Context context) { 67 return LayoutInflater.from(context); 68 } 69 70 /** */ 71 @Provides 72 @RootView provideRootView(QSFragment qsFragment)73 static View provideRootView(QSFragment qsFragment) { 74 return qsFragment.getView(); 75 } 76 77 /** */ 78 @Provides providesMultiUserSWitch(QSFooterView qsFooterView)79 static MultiUserSwitch providesMultiUserSWitch(QSFooterView qsFooterView) { 80 return qsFooterView.findViewById(R.id.multi_user_switch); 81 } 82 83 /** */ 84 @Provides provideQSPanel(@ootView View view)85 static QSPanel provideQSPanel(@RootView View view) { 86 return view.findViewById(R.id.quick_settings_panel); 87 } 88 89 /** */ 90 @Provides providesQSContainerImpl(@ootView View view)91 static QSContainerImpl providesQSContainerImpl(@RootView View view) { 92 return view.findViewById(R.id.quick_settings_container); 93 } 94 95 /** */ 96 @Binds bindQS(QSFragment qsFragment)97 QS bindQS(QSFragment qsFragment); 98 99 /** */ 100 @Provides providesQuickStatusBarHeader(@ootView View view)101 static QuickStatusBarHeader providesQuickStatusBarHeader(@RootView View view) { 102 return view.findViewById(R.id.header); 103 } 104 105 /** */ 106 @Provides providesQuickQSPanel(QuickStatusBarHeader quickStatusBarHeader)107 static QuickQSPanel providesQuickQSPanel(QuickStatusBarHeader quickStatusBarHeader) { 108 return quickStatusBarHeader.findViewById(R.id.quick_qs_panel); 109 } 110 111 /** */ 112 @Provides providesQSFooterView(@ootView View view)113 static QSFooterView providesQSFooterView(@RootView View view) { 114 return view.findViewById(R.id.qs_footer); 115 } 116 117 /** */ 118 @Provides 119 @QSScope providesQSFooter(QSFooterViewController qsFooterViewController)120 static QSFooter providesQSFooter(QSFooterViewController qsFooterViewController) { 121 qsFooterViewController.init(); 122 return qsFooterViewController; 123 } 124 125 /** */ 126 @Provides 127 @QSScope providesQSCutomizer(@ootView View view)128 static QSCustomizer providesQSCutomizer(@RootView View view) { 129 return view.findViewById(R.id.qs_customize); 130 } 131 132 /** */ 133 @Provides 134 @QSScope 135 @Named(QS_SECURITY_FOOTER_VIEW) providesQSSecurityFooterView( @SThemedContext LayoutInflater layoutInflater, QSPanel qsPanel )136 static View providesQSSecurityFooterView( 137 @QSThemedContext LayoutInflater layoutInflater, 138 QSPanel qsPanel 139 ) { 140 return layoutInflater.inflate(R.layout.quick_settings_security_footer, qsPanel, false); 141 } 142 143 /** */ 144 @Provides 145 @Named(QS_USING_MEDIA_PLAYER) providesQSUsingMediaPlayer(Context context)146 static boolean providesQSUsingMediaPlayer(Context context) { 147 return useQsMediaPlayer(context); 148 } 149 150 /** */ 151 @Binds provideSlotIndexResolver( QSCarrierGroupController.SubscriptionManagerSlotIndexResolver impl)152 QSCarrierGroupController.SlotIndexResolver provideSlotIndexResolver( 153 QSCarrierGroupController.SubscriptionManagerSlotIndexResolver impl); 154 }