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.wifi.ui.view
18 
19 import android.annotation.SuppressLint
20 import android.content.Context
21 import android.util.AttributeSet
22 import android.view.LayoutInflater
23 import android.view.ViewGroup
24 import android.widget.ImageView
25 import com.android.settingslib.flags.Flags.newStatusBarIcons
26 import com.android.systemui.res.R
27 import com.android.systemui.statusbar.StatusBarIconView
28 import com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarView
29 import com.android.systemui.statusbar.pipeline.wifi.ui.binder.WifiViewBinder
30 import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
31 
32 /**
33  * A new and more modern implementation of [com.android.systemui.statusbar.StatusBarWifiView] that
34  * is updated by [WifiViewBinder].
35  */
36 class ModernStatusBarWifiView(
37     context: Context,
38     attrs: AttributeSet?,
39 ) : ModernStatusBarView(context, attrs) {
40 
toStringnull41     override fun toString(): String {
42         return "ModernStatusBarWifiView(" +
43             "slot='$slot', " +
44             "isCollecting=${binding.isCollecting()}, " +
45             "visibleState=${StatusBarIconView.getVisibleStateString(visibleState)}); " +
46             "viewString=${super.toString()}"
47     }
48 
49     companion object {
50         /**
51          * Inflates a new instance of [ModernStatusBarWifiView], binds it to a view model, and
52          * returns it.
53          */
54         @SuppressLint("InflateParams")
55         @JvmStatic
constructAndBindnull56         fun constructAndBind(
57             context: Context,
58             slot: String,
59             wifiViewModel: LocationBasedWifiViewModel,
60         ): ModernStatusBarWifiView {
61             return (LayoutInflater.from(context).inflate(R.layout.new_status_bar_wifi_group, null)
62                     as ModernStatusBarWifiView)
63                 .also {
64                     // Flag-specific configuration
65                     if (newStatusBarIcons()) {
66                         // The newer asset does not embed whitespace around it, and is therefore
67                         // rectangular. Use wrap_content for the width in this case
68                         val iconView = it.requireViewById<ImageView>(R.id.wifi_signal)
69                         val lp = iconView.layoutParams
70                         lp.width = ViewGroup.LayoutParams.WRAP_CONTENT
71                     }
72 
73                     it.initView(slot) { WifiViewBinder.bind(it, wifiViewModel) }
74                 }
75         }
76     }
77 }
78