1 /*
2  * Copyright (C) 2021 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.statusbar.phone.fragment.dagger;
18 
19 import android.view.View;
20 
21 import com.android.systemui.R;
22 import com.android.systemui.battery.BatteryMeterView;
23 import com.android.systemui.dagger.qualifiers.RootView;
24 import com.android.systemui.statusbar.HeadsUpStatusBarView;
25 import com.android.systemui.statusbar.phone.PhoneStatusBarTransitions;
26 import com.android.systemui.statusbar.phone.PhoneStatusBarView;
27 import com.android.systemui.statusbar.phone.PhoneStatusBarViewController;
28 import com.android.systemui.statusbar.phone.StatusBarBoundsProvider;
29 import com.android.systemui.statusbar.phone.StatusBarLocation;
30 import com.android.systemui.statusbar.phone.SystemBarAttributesListener;
31 import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
32 import com.android.systemui.statusbar.phone.userswitcher.StatusBarUserSwitcherContainer;
33 import com.android.systemui.statusbar.policy.Clock;
34 import com.android.systemui.statusbar.window.StatusBarWindowController;
35 
36 import dagger.Binds;
37 import dagger.Module;
38 import dagger.Provides;
39 import dagger.multibindings.IntoSet;
40 import dagger.multibindings.Multibinds;
41 
42 import java.util.Optional;
43 import java.util.Set;
44 
45 import javax.inject.Named;
46 
47 /** Dagger module for {@link StatusBarFragmentComponent}. */
48 @Module
49 public interface StatusBarFragmentModule {
50 
51     String LIGHTS_OUT_NOTIF_VIEW = "lights_out_notif_view";
52     String OPERATOR_NAME_VIEW = "operator_name_view";
53     String OPERATOR_NAME_FRAME_VIEW = "operator_name_frame_view";
54     String START_SIDE_CONTENT = "start_side_content";
55     String END_SIDE_CONTENT = "end_side_content";
56 
57     /** */
58     @Provides
59     @RootView
60     @StatusBarFragmentScope
providePhoneStatusBarView( CollapsedStatusBarFragment collapsedStatusBarFragment)61     static PhoneStatusBarView providePhoneStatusBarView(
62             CollapsedStatusBarFragment collapsedStatusBarFragment) {
63         return (PhoneStatusBarView) collapsedStatusBarFragment.getView();
64     }
65 
66     /** */
67     @Provides
68     @StatusBarFragmentScope
provideBatteryMeterView(@ootView PhoneStatusBarView view)69     static BatteryMeterView provideBatteryMeterView(@RootView PhoneStatusBarView view) {
70         return view.findViewById(R.id.battery);
71     }
72 
73     /** */
74     @Provides
75     @StatusBarFragmentScope
getStatusBarLocation()76     static StatusBarLocation getStatusBarLocation() {
77         return StatusBarLocation.HOME;
78     }
79 
80     /** */
81     @Provides
82     @StatusBarFragmentScope
83     @Named(START_SIDE_CONTENT)
startSideContent(@ootView PhoneStatusBarView view)84     static View startSideContent(@RootView PhoneStatusBarView view) {
85         return view.findViewById(R.id.status_bar_start_side_content);
86     }
87 
88     /** */
89     @Provides
90     @StatusBarFragmentScope
91     @Named(END_SIDE_CONTENT)
endSideContent(@ootView PhoneStatusBarView view)92     static View endSideContent(@RootView PhoneStatusBarView view) {
93         return view.findViewById(R.id.status_bar_end_side_content);
94     }
95 
96     /** */
97     @Provides
98     @StatusBarFragmentScope
99     @Named(LIGHTS_OUT_NOTIF_VIEW)
provideLightsOutNotifView(@ootView PhoneStatusBarView view)100     static View provideLightsOutNotifView(@RootView PhoneStatusBarView view) {
101         return view.findViewById(R.id.notification_lights_out);
102     }
103 
104     /** */
105     @Provides
106     @StatusBarFragmentScope
107     @Named(OPERATOR_NAME_VIEW)
provideOperatorNameView(@ootView PhoneStatusBarView view)108     static View provideOperatorNameView(@RootView PhoneStatusBarView view) {
109         return view.findViewById(R.id.operator_name);
110     }
111 
112     /** */
113     @Provides
114     @StatusBarFragmentScope
115     @Named(OPERATOR_NAME_FRAME_VIEW)
provideOperatorFrameNameView(@ootView PhoneStatusBarView view)116     static Optional<View> provideOperatorFrameNameView(@RootView PhoneStatusBarView view) {
117         return Optional.ofNullable(view.findViewById(R.id.operator_name_frame));
118     }
119 
120     /** */
121     @Provides
122     @StatusBarFragmentScope
provideClock(@ootView PhoneStatusBarView view)123     static Clock provideClock(@RootView PhoneStatusBarView view) {
124         return view.findViewById(R.id.clock);
125     }
126 
127     /** */
128     @Provides
129     @StatusBarFragmentScope
provideStatusBarUserSwitcherContainer( @ootView PhoneStatusBarView view)130     static StatusBarUserSwitcherContainer provideStatusBarUserSwitcherContainer(
131             @RootView PhoneStatusBarView view) {
132         return view.findViewById(R.id.user_switcher_container);
133     }
134 
135     /** */
136     @Provides
137     @StatusBarFragmentScope
providePhoneStatusBarViewController( PhoneStatusBarViewController.Factory phoneStatusBarViewControllerFactory, @RootView PhoneStatusBarView phoneStatusBarView)138     static PhoneStatusBarViewController providePhoneStatusBarViewController(
139             PhoneStatusBarViewController.Factory phoneStatusBarViewControllerFactory,
140             @RootView PhoneStatusBarView phoneStatusBarView) {
141         return phoneStatusBarViewControllerFactory.create(
142                 phoneStatusBarView);
143     }
144 
145     /** */
146     @Provides
147     @StatusBarFragmentScope
providePhoneStatusBarTransitions( @ootView PhoneStatusBarView view, StatusBarWindowController statusBarWindowController )148     static PhoneStatusBarTransitions providePhoneStatusBarTransitions(
149             @RootView PhoneStatusBarView view,
150             StatusBarWindowController statusBarWindowController
151     ) {
152         return new PhoneStatusBarTransitions(view, statusBarWindowController.getBackgroundView());
153     }
154 
155     /** */
156     @Provides
157     @StatusBarFragmentScope
providesHeasdUpStatusBarView(@ootView PhoneStatusBarView view)158     static HeadsUpStatusBarView providesHeasdUpStatusBarView(@RootView PhoneStatusBarView view) {
159         return view.findViewById(R.id.heads_up_status_bar_view);
160     }
161 
162     /** */
163     @Multibinds
boundsChangeListeners()164     Set<StatusBarBoundsProvider.BoundsChangeListener> boundsChangeListeners();
165 
166     /** */
167     @Binds
168     @IntoSet
sysBarAttrsListenerAsBoundsListener( SystemBarAttributesListener systemBarAttributesListener)169     StatusBarBoundsProvider.BoundsChangeListener sysBarAttrsListenerAsBoundsListener(
170             SystemBarAttributesListener systemBarAttributesListener);
171 }
172