summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java87
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java38
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java31
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt80
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt13
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java10
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt42
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java6
10 files changed, 222 insertions, 108 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
index 86f6ff850409..9095d6f4e369 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
@@ -18,6 +18,7 @@ import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE_NEW;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI;
+import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI_NEW;
import android.annotation.Nullable;
import android.content.Context;
@@ -53,8 +54,9 @@ import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter;
import com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconsBinder;
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.wifi.ui.view.ModernStatusBarWifiView;
-import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel;
+import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel;
import com.android.systemui.util.Assert;
import java.util.ArrayList;
@@ -84,7 +86,18 @@ public interface StatusBarIconController {
/** */
void setIcon(String slot, StatusBarIcon icon);
/** */
- void setSignalIcon(String slot, WifiIconState state);
+ void setWifiIcon(String slot, WifiIconState state);
+
+ /**
+ * Sets up a wifi icon using the new data pipeline. No effect if the wifi icon has already been
+ * set up (inflated and added to the view hierarchy).
+ *
+ * This method completely replaces {@link #setWifiIcon} with the information from the new wifi
+ * data pipeline. Icons will automatically keep their state up to date, so we don't have to
+ * worry about funneling state objects through anymore.
+ */
+ void setNewWifiIcon();
+
/** */
void setMobileIcons(String slot, List<MobileIconState> states);
@@ -151,14 +164,14 @@ public interface StatusBarIconController {
LinearLayout linearLayout,
StatusBarLocation location,
StatusBarPipelineFlags statusBarPipelineFlags,
- WifiViewModel wifiViewModel,
+ WifiUiAdapter wifiUiAdapter,
MobileUiAdapter mobileUiAdapter,
MobileContextProvider mobileContextProvider,
DarkIconDispatcher darkIconDispatcher) {
super(linearLayout,
location,
statusBarPipelineFlags,
- wifiViewModel,
+ wifiUiAdapter,
mobileUiAdapter,
mobileContextProvider);
mIconHPadding = mContext.getResources().getDimensionPixelSize(
@@ -218,7 +231,7 @@ public interface StatusBarIconController {
@SysUISingleton
public static class Factory {
private final StatusBarPipelineFlags mStatusBarPipelineFlags;
- private final WifiViewModel mWifiViewModel;
+ private final WifiUiAdapter mWifiUiAdapter;
private final MobileContextProvider mMobileContextProvider;
private final MobileUiAdapter mMobileUiAdapter;
private final DarkIconDispatcher mDarkIconDispatcher;
@@ -226,12 +239,12 @@ public interface StatusBarIconController {
@Inject
public Factory(
StatusBarPipelineFlags statusBarPipelineFlags,
- WifiViewModel wifiViewModel,
+ WifiUiAdapter wifiUiAdapter,
MobileContextProvider mobileContextProvider,
MobileUiAdapter mobileUiAdapter,
DarkIconDispatcher darkIconDispatcher) {
mStatusBarPipelineFlags = statusBarPipelineFlags;
- mWifiViewModel = wifiViewModel;
+ mWifiUiAdapter = wifiUiAdapter;
mMobileContextProvider = mobileContextProvider;
mMobileUiAdapter = mobileUiAdapter;
mDarkIconDispatcher = darkIconDispatcher;
@@ -242,7 +255,7 @@ public interface StatusBarIconController {
group,
location,
mStatusBarPipelineFlags,
- mWifiViewModel,
+ mWifiUiAdapter,
mMobileUiAdapter,
mMobileContextProvider,
mDarkIconDispatcher);
@@ -260,14 +273,14 @@ public interface StatusBarIconController {
ViewGroup group,
StatusBarLocation location,
StatusBarPipelineFlags statusBarPipelineFlags,
- WifiViewModel wifiViewModel,
+ WifiUiAdapter wifiUiAdapter,
MobileUiAdapter mobileUiAdapter,
MobileContextProvider mobileContextProvider
) {
super(group,
location,
statusBarPipelineFlags,
- wifiViewModel,
+ wifiUiAdapter,
mobileUiAdapter,
mobileContextProvider);
}
@@ -302,19 +315,19 @@ public interface StatusBarIconController {
@SysUISingleton
public static class Factory {
private final StatusBarPipelineFlags mStatusBarPipelineFlags;
- private final WifiViewModel mWifiViewModel;
+ private final WifiUiAdapter mWifiUiAdapter;
private final MobileContextProvider mMobileContextProvider;
private final MobileUiAdapter mMobileUiAdapter;
@Inject
public Factory(
StatusBarPipelineFlags statusBarPipelineFlags,
- WifiViewModel wifiViewModel,
+ WifiUiAdapter wifiUiAdapter,
MobileUiAdapter mobileUiAdapter,
MobileContextProvider mobileContextProvider
) {
mStatusBarPipelineFlags = statusBarPipelineFlags;
- mWifiViewModel = wifiViewModel;
+ mWifiUiAdapter = wifiUiAdapter;
mMobileUiAdapter = mobileUiAdapter;
mMobileContextProvider = mobileContextProvider;
}
@@ -324,7 +337,7 @@ public interface StatusBarIconController {
group,
location,
mStatusBarPipelineFlags,
- mWifiViewModel,
+ mWifiUiAdapter,
mMobileUiAdapter,
mMobileContextProvider);
}
@@ -336,10 +349,9 @@ public interface StatusBarIconController {
*/
class IconManager implements DemoModeCommandReceiver {
protected final ViewGroup mGroup;
- private final StatusBarLocation mLocation;
private final StatusBarPipelineFlags mStatusBarPipelineFlags;
- private final WifiViewModel mWifiViewModel;
private final MobileContextProvider mMobileContextProvider;
+ private final LocationBasedWifiViewModel mWifiViewModel;
private final MobileIconsViewModel mMobileIconsViewModel;
protected final Context mContext;
@@ -359,14 +371,12 @@ public interface StatusBarIconController {
ViewGroup group,
StatusBarLocation location,
StatusBarPipelineFlags statusBarPipelineFlags,
- WifiViewModel wifiViewModel,
+ WifiUiAdapter wifiUiAdapter,
MobileUiAdapter mobileUiAdapter,
MobileContextProvider mobileContextProvider
) {
mGroup = group;
- mLocation = location;
mStatusBarPipelineFlags = statusBarPipelineFlags;
- mWifiViewModel = wifiViewModel;
mMobileContextProvider = mobileContextProvider;
mContext = group.getContext();
mIconSize = mContext.getResources().getDimensionPixelSize(
@@ -379,6 +389,12 @@ public interface StatusBarIconController {
} else {
mMobileIconsViewModel = null;
}
+
+ if (statusBarPipelineFlags.useNewWifiIcon()) {
+ mWifiViewModel = wifiUiAdapter.bindGroup(mGroup, location);
+ } else {
+ mWifiViewModel = null;
+ }
}
public boolean isDemoable() {
@@ -429,6 +445,9 @@ public interface StatusBarIconController {
case TYPE_WIFI:
return addWifiIcon(index, slot, holder.getWifiState());
+ case TYPE_WIFI_NEW:
+ return addNewWifiIcon(index, slot);
+
case TYPE_MOBILE:
return addMobileIcon(index, slot, holder.getMobileState());
@@ -450,16 +469,13 @@ public interface StatusBarIconController {
@VisibleForTesting
protected StatusIconDisplayable addWifiIcon(int index, String slot, WifiIconState state) {
- final BaseStatusBarFrameLayout view;
if (mStatusBarPipelineFlags.useNewWifiIcon()) {
- view = onCreateModernStatusBarWifiView(slot);
- // When [ModernStatusBarWifiView] is created, it will automatically apply the
- // correct view state so we don't need to call applyWifiState.
- } else {
- StatusBarWifiView wifiView = onCreateStatusBarWifiView(slot);
- wifiView.applyWifiState(state);
- view = wifiView;
+ throw new IllegalStateException("Attempting to add a mobile icon while the new "
+ + "icons are enabled is not supported");
}
+
+ final StatusBarWifiView view = onCreateStatusBarWifiView(slot);
+ view.applyWifiState(state);
mGroup.addView(view, index, onCreateLayoutParams());
if (mIsInDemoMode) {
@@ -468,6 +484,17 @@ public interface StatusBarIconController {
return view;
}
+ protected StatusIconDisplayable addNewWifiIcon(int index, String slot) {
+ if (!mStatusBarPipelineFlags.useNewWifiIcon()) {
+ throw new IllegalStateException("Attempting to add a wifi icon using the new"
+ + "pipeline, but the enabled flag is false.");
+ }
+
+ ModernStatusBarWifiView view = onCreateModernStatusBarWifiView(slot);
+ mGroup.addView(view, index, onCreateLayoutParams());
+ return view;
+ }
+
@VisibleForTesting
protected StatusIconDisplayable addMobileIcon(
int index,
@@ -523,8 +550,7 @@ public interface StatusBarIconController {
}
private ModernStatusBarWifiView onCreateModernStatusBarWifiView(String slot) {
- return ModernStatusBarWifiView.constructAndBind(
- mContext, slot, mWifiViewModel, mLocation);
+ return ModernStatusBarWifiView.constructAndBind(mContext, slot, mWifiViewModel);
}
private StatusBarMobileView onCreateStatusBarMobileView(int subId, String slot) {
@@ -600,7 +626,8 @@ public interface StatusBarIconController {
onSetMobileIcon(viewIndex, holder.getMobileState());
return;
case TYPE_MOBILE_NEW:
- // Nothing, the icon updates itself now
+ case TYPE_WIFI_NEW:
+ // Nothing, the new icons update themselves
return;
default:
break;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
index 31e960ad7d69..674e5747e331 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
@@ -195,12 +195,13 @@ public class StatusBarIconControllerImpl implements Tunable,
}
}
- /**
- * Signal icons need to be handled differently, because they can be
- * composite views
- */
@Override
- public void setSignalIcon(String slot, WifiIconState state) {
+ public void setWifiIcon(String slot, WifiIconState state) {
+ if (mStatusBarPipelineFlags.useNewWifiIcon()) {
+ Log.d(TAG, "ignoring old pipeline callback because the new wifi icon is enabled");
+ return;
+ }
+
if (state == null) {
removeIcon(slot, 0);
return;
@@ -216,6 +217,24 @@ public class StatusBarIconControllerImpl implements Tunable,
}
}
+
+ @Override
+ public void setNewWifiIcon() {
+ if (!mStatusBarPipelineFlags.useNewWifiIcon()) {
+ Log.d(TAG, "ignoring new pipeline callback because the new wifi icon is disabled");
+ return;
+ }
+
+ String slot = mContext.getString(com.android.internal.R.string.status_bar_wifi);
+ StatusBarIconHolder holder = mStatusBarIconList.getIconHolder(slot, /* tag= */ 0);
+ if (holder == null) {
+ holder = StatusBarIconHolder.forNewWifiIcon();
+ setIcon(slot, holder);
+ } else {
+ // Don't have to do anything in the new world
+ }
+ }
+
/**
* Accept a list of MobileIconStates, which all live in the same slot(?!), and then are sorted
* by subId. Don't worry this definitely makes sense and works.
@@ -225,7 +244,7 @@ public class StatusBarIconControllerImpl implements Tunable,
@Override
public void setMobileIcons(String slot, List<MobileIconState> iconStates) {
if (mStatusBarPipelineFlags.useNewMobileIcons()) {
- Log.d(TAG, "ignoring old pipeline callbacks, because the new "
+ Log.d(TAG, "ignoring old pipeline callbacks, because the new mobile "
+ "icons are enabled");
return;
}
@@ -251,10 +270,11 @@ public class StatusBarIconControllerImpl implements Tunable,
public void setNewMobileIconSubIds(List<Integer> subIds) {
if (!mStatusBarPipelineFlags.useNewMobileIcons()) {
Log.d(TAG, "ignoring new pipeline callback, "
- + "since the new icons are disabled");
+ + "since the new mobile icons are disabled");
return;
}
- Slot mobileSlot = mStatusBarIconList.getSlot("mobile");
+ String slotName = mContext.getString(com.android.internal.R.string.status_bar_mobile);
+ Slot mobileSlot = mStatusBarIconList.getSlot(slotName);
Collections.reverse(subIds);
@@ -262,7 +282,7 @@ public class StatusBarIconControllerImpl implements Tunable,
StatusBarIconHolder holder = mobileSlot.getHolderForTag(subId);
if (holder == null) {
holder = StatusBarIconHolder.fromSubIdForModernMobileIcon(subId);
- setIcon("mobile", holder);
+ setIcon(slotName, holder);
} else {
// Don't have to do anything in the new world
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java
index 68a203e30f98..f6c0da8da8c0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java
@@ -51,11 +51,24 @@ public class StatusBarIconHolder {
@Deprecated
public static final int TYPE_MOBILE_NEW = 3;
+ /**
+ * TODO (b/238425913): address this once the new pipeline is in place
+ * This type exists so that the new wifi pipeline can be used to inform the old view system
+ * about the existence of the wifi icon. The design of the new pipeline should allow for removal
+ * of this icon holder type, and obsolete the need for this entire class.
+ *
+ * @deprecated This field only exists so the new status bar pipeline can interface with the
+ * view holder system.
+ */
+ @Deprecated
+ public static final int TYPE_WIFI_NEW = 4;
+
@IntDef({
TYPE_ICON,
TYPE_WIFI,
TYPE_MOBILE,
- TYPE_MOBILE_NEW
+ TYPE_MOBILE_NEW,
+ TYPE_WIFI_NEW
})
@Retention(RetentionPolicy.SOURCE)
@interface IconType {}
@@ -95,6 +108,13 @@ public class StatusBarIconHolder {
return holder;
}
+ /** Creates a new holder with for the new wifi icon. */
+ public static StatusBarIconHolder forNewWifiIcon() {
+ StatusBarIconHolder holder = new StatusBarIconHolder();
+ holder.mType = TYPE_WIFI_NEW;
+ return holder;
+ }
+
/** */
public static StatusBarIconHolder fromMobileIconState(MobileIconState state) {
StatusBarIconHolder holder = new StatusBarIconHolder();
@@ -172,9 +192,10 @@ public class StatusBarIconHolder {
case TYPE_MOBILE:
return mMobileState.visible;
case TYPE_MOBILE_NEW:
- //TODO (b/249790733), the new pipeline can control visibility via the ViewModel
+ case TYPE_WIFI_NEW:
+ // The new pipeline controls visibilities via the view model and view binder, so
+ // this is effectively an unused return value.
return true;
-
default:
return true;
}
@@ -199,7 +220,9 @@ public class StatusBarIconHolder {
break;
case TYPE_MOBILE_NEW:
- //TODO (b/249790733), the new pipeline can control visibility via the ViewModel
+ case TYPE_WIFI_NEW:
+ // The new pipeline controls visibilities via the view model and view binder, so
+ // ignore setVisible.
break;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
index 492734e93dca..de7bf3c021dd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
@@ -212,7 +212,7 @@ public class StatusBarSignalPolicy implements SignalCallback,
private void updateWifiIconWithState(WifiIconState state) {
if (DEBUG) Log.d(TAG, "WifiIconState: " + state == null ? "" : state.toString());
if (state.visible && state.resId > 0) {
- mIconController.setSignalIcon(mSlotWifi, state);
+ mIconController.setWifiIcon(mSlotWifi, state);
mIconController.setIconVisibility(mSlotWifi, true);
} else {
mIconController.setIconVisibility(mSlotWifi, false);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt
new file mode 100644
index 000000000000..bce92b951d23
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/WifiUiAdapter.kt
@@ -0,0 +1,80 @@
+/*
+ * 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
+
+import android.view.ViewGroup
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.repeatOnLifecycle
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.lifecycle.repeatWhenAttached
+import com.android.systemui.statusbar.phone.StatusBarIconController
+import com.android.systemui.statusbar.phone.StatusBarLocation
+import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
+import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
+import javax.inject.Inject
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+
+/**
+ * This class serves as a bridge between the old UI classes and the new data pipeline.
+ *
+ * Once the new pipeline notifies [wifiViewModel] that the wifi icon should be visible, this class
+ * notifies [iconController] to inflate the wifi icon (if needed). After that, the [wifiViewModel]
+ * has sole responsibility for updating the wifi icon drawable, visibility, etc. and the
+ * [iconController] will not do any updates to the icon.
+ */
+@SysUISingleton
+class WifiUiAdapter
+@Inject
+constructor(
+ private val iconController: StatusBarIconController,
+ private val wifiViewModel: WifiViewModel,
+) {
+ /**
+ * Binds the container for all the status bar icons to a view model, so that we inflate the wifi
+ * view once we receive a valid icon from the data pipeline.
+ *
+ * NOTE: This should go away as we better integrate the data pipeline with the UI.
+ *
+ * @return the view model used for this particular group in the given [location].
+ */
+ fun bindGroup(
+ statusBarIconGroup: ViewGroup,
+ location: StatusBarLocation,
+ ): LocationBasedWifiViewModel {
+ val locationViewModel =
+ when (location) {
+ StatusBarLocation.HOME -> wifiViewModel.home
+ StatusBarLocation.KEYGUARD -> wifiViewModel.keyguard
+ StatusBarLocation.QS -> wifiViewModel.qs
+ }
+
+ statusBarIconGroup.repeatWhenAttached {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ launch {
+ locationViewModel.wifiIcon.collect { wifiIcon ->
+ if (wifiIcon != null) {
+ iconController.setNewWifiIcon()
+ }
+ }
+ }
+ }
+ }
+
+ return locationViewModel
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt
index 25537b948517..345f8cb75660 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/binder/WifiViewBinder.kt
@@ -30,9 +30,7 @@ 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.StatusBarIconView.STATE_ICON
-import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
-import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
import kotlinx.coroutines.InternalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.collect
@@ -62,26 +60,9 @@ object WifiViewBinder {
fun onVisibilityStateChanged(@StatusBarIconView.VisibleState state: Int)
}
- /**
- * Binds the view to the appropriate view-model based on the given location. The view will
- * continue to be updated following updates from the view-model.
- */
- @JvmStatic
- fun bind(
- view: ViewGroup,
- wifiViewModel: WifiViewModel,
- location: StatusBarLocation,
- ): Binding {
- return when (location) {
- StatusBarLocation.HOME -> bind(view, wifiViewModel.home)
- StatusBarLocation.KEYGUARD -> bind(view, wifiViewModel.keyguard)
- StatusBarLocation.QS -> bind(view, wifiViewModel.qs)
- }
- }
-
/** Binds the view to the view-model, continuing to update the former based on the latter. */
@JvmStatic
- private fun bind(
+ fun bind(
view: ViewGroup,
viewModel: LocationBasedWifiViewModel,
): Binding {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt
index 0cd9bd7d97b0..a45076b53356 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiView.kt
@@ -26,9 +26,8 @@ import com.android.systemui.statusbar.BaseStatusBarFrameLayout
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.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.wifi.ui.binder.WifiViewBinder
-import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
+import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
/**
* A new and more modern implementation of [com.android.systemui.statusbar.StatusBarWifiView] that
@@ -81,12 +80,11 @@ class ModernStatusBarWifiView(
private fun initView(
slotName: String,
- wifiViewModel: WifiViewModel,
- location: StatusBarLocation,
+ wifiViewModel: LocationBasedWifiViewModel,
) {
slot = slotName
initDotView()
- binding = WifiViewBinder.bind(this, wifiViewModel, location)
+ binding = WifiViewBinder.bind(this, wifiViewModel)
}
// Mostly duplicated from [com.android.systemui.statusbar.StatusBarWifiView].
@@ -116,14 +114,13 @@ class ModernStatusBarWifiView(
fun constructAndBind(
context: Context,
slot: String,
- wifiViewModel: WifiViewModel,
- location: StatusBarLocation,
+ wifiViewModel: LocationBasedWifiViewModel,
): ModernStatusBarWifiView {
return (
LayoutInflater.from(context).inflate(R.layout.new_status_bar_wifi_group, null)
as ModernStatusBarWifiView
).also {
- it.initView(slot, wifiViewModel, location)
+ it.initView(slot, wifiViewModel)
}
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java
index 9c56c2670c63..6fb68938b00d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java
@@ -45,7 +45,7 @@ import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconStat
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags;
import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter;
-import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel;
+import com.android.systemui.statusbar.pipeline.wifi.ui.WifiUiAdapter;
import com.android.systemui.utils.leaks.LeakCheckedTest;
import org.junit.Before;
@@ -80,7 +80,7 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
layout,
StatusBarLocation.HOME,
mock(StatusBarPipelineFlags.class),
- mock(WifiViewModel.class),
+ mock(WifiUiAdapter.class),
mock(MobileUiAdapter.class),
mMobileContextProvider,
mock(DarkIconDispatcher.class));
@@ -124,14 +124,14 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
LinearLayout group,
StatusBarLocation location,
StatusBarPipelineFlags statusBarPipelineFlags,
- WifiViewModel wifiViewModel,
+ WifiUiAdapter wifiUiAdapter,
MobileUiAdapter mobileUiAdapter,
MobileContextProvider contextProvider,
DarkIconDispatcher darkIconDispatcher) {
super(group,
location,
statusBarPipelineFlags,
- wifiViewModel,
+ wifiUiAdapter,
mobileUiAdapter,
contextProvider,
darkIconDispatcher);
@@ -172,7 +172,7 @@ public class StatusBarIconControllerTest extends LeakCheckedTest {
super(group,
StatusBarLocation.HOME,
mock(StatusBarPipelineFlags.class),
- mock(WifiViewModel.class),
+ mock(WifiUiAdapter.class),
mock(MobileUiAdapter.class),
contextProvider);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
index c5841098010a..37457b308597 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/view/ModernStatusBarWifiViewTest.kt
@@ -28,7 +28,6 @@ import com.android.systemui.lifecycle.InstantTaskExecutorRule
import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT
import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON
-import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
@@ -40,6 +39,7 @@ import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
+import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.CoroutineScope
@@ -70,7 +70,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
private lateinit var connectivityRepository: FakeConnectivityRepository
private lateinit var wifiRepository: FakeWifiRepository
private lateinit var interactor: WifiInteractor
- private lateinit var viewModel: WifiViewModel
+ private lateinit var viewModel: LocationBasedWifiViewModel
private lateinit var scope: CoroutineScope
private lateinit var airplaneModeViewModel: AirplaneModeViewModel
@@ -105,23 +105,19 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
scope,
statusBarPipelineFlags,
wifiConstants,
- )
+ ).home
}
@Test
fun constructAndBind_hasCorrectSlot() {
- val view = ModernStatusBarWifiView.constructAndBind(
- context, "slotName", viewModel, StatusBarLocation.HOME
- )
+ val view = ModernStatusBarWifiView.constructAndBind(context, "slotName", viewModel)
assertThat(view.slot).isEqualTo("slotName")
}
@Test
fun getVisibleState_icon_returnsIcon() {
- val view = ModernStatusBarWifiView.constructAndBind(
- context, SLOT_NAME, viewModel, StatusBarLocation.HOME
- )
+ val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
view.setVisibleState(STATE_ICON, /* animate= */ false)
@@ -130,9 +126,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
@Test
fun getVisibleState_dot_returnsDot() {
- val view = ModernStatusBarWifiView.constructAndBind(
- context, SLOT_NAME, viewModel, StatusBarLocation.HOME
- )
+ val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
view.setVisibleState(STATE_DOT, /* animate= */ false)
@@ -141,9 +135,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
@Test
fun getVisibleState_hidden_returnsHidden() {
- val view = ModernStatusBarWifiView.constructAndBind(
- context, SLOT_NAME, viewModel, StatusBarLocation.HOME
- )
+ val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
view.setVisibleState(STATE_HIDDEN, /* animate= */ false)
@@ -155,9 +147,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
@Test
fun setVisibleState_icon_iconShownDotHidden() {
- val view = ModernStatusBarWifiView.constructAndBind(
- context, SLOT_NAME, viewModel, StatusBarLocation.HOME
- )
+ val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
view.setVisibleState(STATE_ICON, /* animate= */ false)
@@ -172,9 +162,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
@Test
fun setVisibleState_dot_iconHiddenDotShown() {
- val view = ModernStatusBarWifiView.constructAndBind(
- context, SLOT_NAME, viewModel, StatusBarLocation.HOME
- )
+ val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
view.setVisibleState(STATE_DOT, /* animate= */ false)
@@ -189,9 +177,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
@Test
fun setVisibleState_hidden_iconAndDotHidden() {
- val view = ModernStatusBarWifiView.constructAndBind(
- context, SLOT_NAME, viewModel, StatusBarLocation.HOME
- )
+ val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
view.setVisibleState(STATE_HIDDEN, /* animate= */ false)
@@ -211,9 +197,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
WifiNetworkModel.Active(NETWORK_ID, isValidated = true, level = 2)
)
- val view = ModernStatusBarWifiView.constructAndBind(
- context, SLOT_NAME, viewModel, StatusBarLocation.HOME
- )
+ val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
ViewUtils.attachView(view)
testableLooper.processAllMessages()
@@ -230,9 +214,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
WifiNetworkModel.Active(NETWORK_ID, isValidated = true, level = 2)
)
- val view = ModernStatusBarWifiView.constructAndBind(
- context, SLOT_NAME, viewModel, StatusBarLocation.HOME
- )
+ val view = ModernStatusBarWifiView.constructAndBind(context, SLOT_NAME, viewModel)
ViewUtils.attachView(view)
testableLooper.processAllMessages()
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java
index 23c7a6139de8..2d6d29a50a74 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java
@@ -62,7 +62,11 @@ public class FakeStatusBarIconController extends BaseLeakChecker<IconManager>
}
@Override
- public void setSignalIcon(String slot, WifiIconState state) {
+ public void setWifiIcon(String slot, WifiIconState state) {
+ }
+
+ @Override
+ public void setNewWifiIcon() {
}
@Override