Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed18e21d authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[SB Refactor] Remove the wifi-specific parts from ModernStatusBarView.

Bug: 238425913
Test: verify wifi icon still tints correctly
Test: atest ModernStatusBarViewTest ModernStatusBarWifiViewTest
Change-Id: I86a2ca1b7ddf05dc2942faf178e702abd1d5738f
parent 8d921138
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
** limitations under the License.
*/
-->
<com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarWifiView
<com.android.systemui.statusbar.pipeline.wifi.ui.view.ModernStatusBarWifiView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/wifi_combo"
    android:layout_width="wrap_content"
@@ -25,4 +25,4 @@

    <include layout="@layout/status_bar_wifi_group_inner" />

</com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarWifiView>
</com.android.systemui.statusbar.pipeline.wifi.ui.view.ModernStatusBarWifiView>
+1 −1
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconStat
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernStatusBarMobileView;
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel;
import com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarWifiView;
import com.android.systemui.statusbar.pipeline.wifi.ui.view.ModernStatusBarWifiView;
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel;

import java.util.ArrayList;
+1 −1
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ import com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconsBinde
import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernStatusBarMobileView;
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel;
import com.android.systemui.statusbar.pipeline.wifi.ui.WifiUiAdapter;
import com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarWifiView;
import com.android.systemui.statusbar.pipeline.wifi.ui.view.ModernStatusBarWifiView;
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel;
import com.android.systemui.util.Assert;

+29 −45
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.content.Context
import android.graphics.Rect
import android.util.AttributeSet
import android.view.Gravity
import android.view.LayoutInflater
import com.android.systemui.R
import com.android.systemui.plugins.DarkIconDispatcher
import com.android.systemui.statusbar.BaseStatusBarFrameLayout
@@ -28,17 +27,13 @@ import com.android.systemui.statusbar.StatusBarIconView
import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT
import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
import com.android.systemui.statusbar.pipeline.shared.ui.binder.ModernStatusBarViewBinding
import com.android.systemui.statusbar.pipeline.wifi.ui.binder.WifiViewBinder
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel

/**
 * A new and more modern implementation of [com.android.systemui.statusbar.StatusBarWifiView] that
 * is updated by [WifiViewBinder].
 * A new and more modern implementation of [BaseStatusBarFrameLayout] that gets updated by view
 * binders communicating via [ModernStatusBarViewBinding].
 */
class ModernStatusBarWifiView(
    context: Context,
    attrs: AttributeSet?
) : BaseStatusBarFrameLayout(context, attrs) {
open class ModernStatusBarView(context: Context, attrs: AttributeSet?) :
    BaseStatusBarFrameLayout(context, attrs) {

    private lateinit var slot: String
    private lateinit var binding: ModernStatusBarViewBinding
@@ -82,24 +77,33 @@ class ModernStatusBarWifiView(
        return binding.getShouldIconBeVisible()
    }

    private fun initView(
        slotName: String,
        wifiViewModel: LocationBasedWifiViewModel,
    ) {
        slot = slotName
    /**
     * Initializes this view.
     *
     * Creates a dot view, and uses [bindingCreator] to get and set the binding.
     */
    fun initView(slot: String, bindingCreator: () -> ModernStatusBarViewBinding) {
        // The dot view requires [slot] to be set, and the [binding] may require an instantiated dot
        // view. So, this is the required order.
        this.slot = slot
        initDotView()
        binding = WifiViewBinder.bind(this, wifiViewModel)
        this.binding = bindingCreator.invoke()
    }

    // Mostly duplicated from [com.android.systemui.statusbar.StatusBarWifiView].
    /**
     * Creates a [StatusBarIconView] that is always in DOT mode and adds it to this view.
     *
     * Mostly duplicated from [com.android.systemui.statusbar.StatusBarWifiView] and
     * [com.android.systemui.statusbar.StatusBarMobileView].
     */
    private fun initDotView() {
        // TODO(b/238425913): Could we just have this dot view be part of
        //   R.layout.new_status_bar_wifi_group with a dot drawable so we don't need to inflate it
        //   manually? Would that not work with animations?
        val dotView = StatusBarIconView(mContext, slot, null).also {
        // TODO(b/238425913): Could we just have this dot view be part of the layout with a dot
        //  drawable so we don't need to inflate it manually? Would that not work with animations?
        val dotView =
            StatusBarIconView(mContext, slot, null).also {
                it.id = R.id.status_bar_dot
            // Hard-code this view to always be in the DOT state so that whenever it's visible it
            // will show a dot
                // Hard-code this view to always be in the DOT state so that whenever it's visible
                // it will show a dot
                it.visibleState = STATE_DOT
            }

@@ -108,24 +112,4 @@ class ModernStatusBarWifiView(
        lp.gravity = Gravity.CENTER_VERTICAL or Gravity.START
        addView(dotView, lp)
    }

    companion object {
        /**
         * Inflates a new instance of [ModernStatusBarWifiView], binds it to a view model, and
         * returns it.
         */
        @JvmStatic
        fun constructAndBind(
            context: Context,
            slot: String,
            wifiViewModel: LocationBasedWifiViewModel,
        ): ModernStatusBarWifiView {
            return (
                LayoutInflater.from(context).inflate(R.layout.new_status_bar_wifi_group, null)
                    as ModernStatusBarWifiView
                ).also {
                    it.initView(slot, wifiViewModel)
                }
        }
    }
}
+56 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.pipeline.wifi.ui.view

import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import com.android.systemui.R
import com.android.systemui.statusbar.pipeline.shared.ui.view.ModernStatusBarView
import com.android.systemui.statusbar.pipeline.wifi.ui.binder.WifiViewBinder
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel

/**
 * A new and more modern implementation of [com.android.systemui.statusbar.StatusBarWifiView] that
 * is updated by [WifiViewBinder].
 */
class ModernStatusBarWifiView(
    context: Context,
    attrs: AttributeSet?,
) : ModernStatusBarView(context, attrs) {
    companion object {
        /**
         * Inflates a new instance of [ModernStatusBarWifiView], binds it to a view model, and
         * returns it.
         */
        @SuppressLint("InflateParams")
        @JvmStatic
        fun constructAndBind(
            context: Context,
            slot: String,
            wifiViewModel: LocationBasedWifiViewModel,
        ): ModernStatusBarWifiView {
            return (
                LayoutInflater.from(context).inflate(R.layout.new_status_bar_wifi_group, null)
                    as ModernStatusBarWifiView
                ).also {
                    it.initView(slot) { WifiViewBinder.bind(it, wifiViewModel) }
                }
        }
    }
}
Loading