1 /*
2  * Copyright (C) 2022 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.pipeline.mobile.ui.view
18 
19 import android.content.Context
20 import android.util.AttributeSet
21 import android.view.LayoutInflater
22 import com.android.systemui.R
23 import com.android.systemui.statusbar.StatusBarIconView.getVisibleStateString
24 import com.android.systemui.statusbar.pipeline.mobile.ui.MobileViewLogger
25 import com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconBinder
26 import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.LocationBasedMobileViewModel
27 import com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarView
28 
29 class ModernStatusBarMobileView(
30     context: Context,
31     attrs: AttributeSet?,
32 ) : ModernStatusBarView(context, attrs) {
33 
34     var subId: Int = -1
35 
36     override fun toString(): String {
37         return "ModernStatusBarMobileView(" +
38             "slot='$slot', " +
39             "subId=$subId, " +
40             "isCollecting=${binding.isCollecting()}, " +
41             "visibleState=${getVisibleStateString(visibleState)}); " +
42             "viewString=${super.toString()}"
43     }
44 
45     companion object {
46 
47         /**
48          * Inflates a new instance of [ModernStatusBarMobileView], binds it to [viewModel], and
49          * returns it.
50          */
51         @JvmStatic
52         fun constructAndBind(
53             context: Context,
54             logger: MobileViewLogger,
55             slot: String,
56             viewModel: LocationBasedMobileViewModel,
57         ): ModernStatusBarMobileView {
58             return (LayoutInflater.from(context)
59                     .inflate(R.layout.status_bar_mobile_signal_group_new, null)
60                     as ModernStatusBarMobileView)
61                 .also {
62                     it.subId = viewModel.subscriptionId
63                     it.initView(slot) {
64                         MobileIconBinder.bind(view = it, viewModel = viewModel, logger = logger)
65                     }
66                     logger.logNewViewBinding(it, viewModel)
67                 }
68         }
69     }
70 }
71