Loading packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewControllerTest.java +56 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,9 @@ import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider; import com.android.systemui.kosmos.KosmosJavaAdapter; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.core.FakeLogBuffer; import com.android.systemui.privacy.PrivacyItem; import com.android.systemui.privacy.PrivacyItemController; import com.android.systemui.privacy.PrivacyType; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository; Loading @@ -66,8 +69,10 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.concurrent.Executor; Loading Loading @@ -107,6 +112,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { DreamOverlayStateController mDreamOverlayStateController; @Mock UserTracker mUserTracker; @Mock PrivacyItemController mPrivacyItemController; LogBuffer mLogBuffer = FakeLogBuffer.Factory.Companion.create(); Loading Loading @@ -146,6 +153,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { mDreamOverlayStateController, mUserTracker, mKosmos.getWifiInteractor(), mPrivacyItemController, mKosmos.getCommunalSceneInteractor(), mLogBuffer); mController.onInit(); Loading @@ -160,6 +168,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { verify(mDreamOverlayNotificationCountProvider).addCallback(any()); verify(mDreamOverlayStatusBarItemsProvider).addCallback(any()); verify(mDreamOverlayStateController).addCallback(any()); verify(mPrivacyItemController).addCallback(any()); } @Test Loading @@ -171,6 +180,52 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { AmbientStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null); } @Test public void testLocationIconShownWhenLocationActive() { mController.onViewAttached(); final ArgumentCaptor<PrivacyItemController.Callback> callbackCaptor = ArgumentCaptor.forClass(PrivacyItemController.Callback.class); verify(mPrivacyItemController).addCallback(callbackCaptor.capture()); final PrivacyItem item = Mockito.mock(PrivacyItem.class); when(item.getPrivacyType()).thenReturn(PrivacyType.TYPE_LOCATION); callbackCaptor.getValue().onPrivacyItemsChanged(Arrays.asList(item)); verify(mView).showIcon( eq(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE), eq(true), any()); } @Test public void testLocationIconNotShownForOtherPrivacyItems() { mController.onViewAttached(); final ArgumentCaptor<PrivacyItemController.Callback> callbackCaptor = ArgumentCaptor.forClass(PrivacyItemController.Callback.class); verify(mPrivacyItemController).addCallback(callbackCaptor.capture()); final PrivacyItem item = Mockito.mock(PrivacyItem.class); when(item.getPrivacyType()).thenReturn(PrivacyType.TYPE_CAMERA); callbackCaptor.getValue().onPrivacyItemsChanged(Arrays.asList(item)); verify(mView, never()).showIcon( eq(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE), eq(true), any()); } @Test public void testLocationIconNotShownForNoItems() { mController.onViewAttached(); final ArgumentCaptor<PrivacyItemController.Callback> callbackCaptor = ArgumentCaptor.forClass(PrivacyItemController.Callback.class); verify(mPrivacyItemController).addCallback(callbackCaptor.capture()); verify(mView, never()).showIcon( eq(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE), eq(true), any()); callbackCaptor.getValue().onPrivacyItemsChanged(Arrays.asList()); verify(mView, never()).showIcon( eq(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE), eq(true), any()); } @Test public void testWifiIconHiddenWhenWifiAvailable() { mController.onViewAttached(); Loading Loading @@ -274,6 +329,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { mDreamOverlayStateController, mUserTracker, mKosmos.getWifiInteractor(), mPrivacyItemController, mKosmos.getCommunalSceneInteractor(), mLogBuffer); controller.onViewAttached(); Loading packages/SystemUI/res/layout/ambient_status_bar_view.xml +9 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,15 @@ android:visibility="gone" app:layout_constraintEnd_toEndOf="parent"> <com.android.systemui.statusbar.AlphaOptimizedImageView android:id="@+id/dream_overlay_location_active" android:layout_width="@dimen/dream_overlay_status_bar_icon_size" android:layout_height="match_parent" android:layout_marginStart="@dimen/dream_overlay_status_icon_margin" android:src="@drawable/ic_location" android:visibility="gone" android:contentDescription="@string/location_active_dream_overlay_content_description" /> <com.android.systemui.statusbar.AlphaOptimizedImageView android:id="@+id/dream_overlay_alarm_set" android:layout_width="@dimen/dream_overlay_status_bar_icon_size" Loading packages/SystemUI/res/values/strings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -3369,6 +3369,8 @@ <!-- Toast shown when a notification does not support dragging to split [CHAR LIMIT=NONE] --> <string name="drag_split_not_supported">This notification does not support dragging to split screen</string> <!-- Content description for the location icon in the dream overlay status bar [CHAR LIMIT=NONE] --> <string name="dream_overlay_location_active">Location active</string> <!-- Content description for the Wi-Fi off icon in the dream overlay status bar [CHAR LIMIT=NONE] --> <string name="dream_overlay_status_bar_wifi_off">Wi\u2011Fi unavailable</string> <!-- Content description for the priority mode icon in the dream overlay status bar [CHAR LIMIT=NONE] --> Loading Loading @@ -3561,6 +3563,9 @@ <!-- Content description for Wi-Fi not available icon on dream [CHAR LIMIT=NONE]--> <string name="wifi_unavailable_dream_overlay_content_description">Wi-Fi not available</string> <!-- Content description for location in use icon on dream [CHAR LIMIT=NONE] --> <string name="location_active_dream_overlay_content_description">Location active</string> <!-- Content description for camera blocked icon on dream [CHAR LIMIT=NONE] --> <string name="camera_blocked_dream_overlay_content_description">Camera blocked</string> Loading packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarView.java +5 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ public class AmbientStatusBarView extends ConstraintLayout { STATUS_ICON_MIC_CAMERA_DISABLED, STATUS_ICON_PRIORITY_MODE_ON, STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE, STATUS_ICON_LOCATION_ACTIVE, }) public @interface StatusIconType {} public static final int STATUS_ICON_NOTIFICATIONS = 0; Loading @@ -64,6 +65,7 @@ public class AmbientStatusBarView extends ConstraintLayout { public static final int STATUS_ICON_MIC_CAMERA_DISABLED = 5; public static final int STATUS_ICON_PRIORITY_MODE_ON = 6; public static final int STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE = 7; public static final int STATUS_ICON_LOCATION_ACTIVE = 8; private final Map<Integer, View> mStatusIcons = new HashMap<>(); private Context mContext; Loading Loading @@ -136,6 +138,8 @@ public class AmbientStatusBarView extends ConstraintLayout { addDoubleShadow(fetchStatusIconForResId(R.id.dream_overlay_priority_mode))); mStatusIcons.put(STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE, fetchStatusIconForResId(R.id.dream_overlay_assistant_attention_indicator)); mStatusIcons.put(STATUS_ICON_LOCATION_ACTIVE, fetchStatusIconForResId(R.id.dream_overlay_location_active)); mSystemStatusViewGroup = findViewById(R.id.dream_overlay_system_status); mExtraSystemStatusViewGroup = findViewById(R.id.dream_overlay_extra_items); Loading @@ -151,6 +155,7 @@ public class AmbientStatusBarView extends ConstraintLayout { case STATUS_ICON_MIC_CAMERA_DISABLED -> "mic_camera_disabled"; case STATUS_ICON_PRIORITY_MODE_ON -> "priority_mode_on"; case STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE -> "assistant_attention_active"; case STATUS_ICON_LOCATION_ACTIVE -> "location_active"; default -> type + "(unknown)"; }; } Loading packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewController.java +22 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.text.format.DateFormat; import android.util.PluralsMessageFormatter; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; Loading @@ -39,6 +40,9 @@ import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider; import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider.StatusBarItem; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.dagger.DreamLog; import com.android.systemui.privacy.PrivacyItem; import com.android.systemui.privacy.PrivacyItemController; import com.android.systemui.privacy.PrivacyType; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CrossFadeHelper; Loading Loading @@ -79,6 +83,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus private final DreamOverlayStateController mDreamOverlayStateController; private final UserTracker mUserTracker; private final WifiInteractor mWifiInteractor; private final PrivacyItemController mPrivacyItemController; private final StatusBarWindowStateController mStatusBarWindowStateController; private final DreamOverlayStatusBarItemsProvider mStatusBarItemsProvider; private final Executor mMainExecutor; Loading Loading @@ -131,6 +136,9 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus private final StatusBarWindowStateListener mStatusBarWindowStateListener = this::onSystemStatusBarStateChanged; private final PrivacyItemController.Callback mPrivacyItemControllerCallback = this::onPrivacyItemsChanged; @Inject public AmbientStatusBarViewController( AmbientStatusBarView view, Loading @@ -147,6 +155,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus DreamOverlayStateController dreamOverlayStateController, UserTracker userTracker, WifiInteractor wifiInteractor, PrivacyItemController privacyItemController, CommunalSceneInteractor communalSceneInteractor, @DreamLog LogBuffer logBuffer) { super(view); Loading @@ -163,6 +172,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus mDreamOverlayStateController = dreamOverlayStateController; mUserTracker = userTracker; mWifiInteractor = wifiInteractor; mPrivacyItemController = privacyItemController; mCommunalSceneInteractor = communalSceneInteractor; mLogger = new DreamLogger(logBuffer, TAG); } Loading @@ -174,10 +184,12 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus // Register to receive show/hide updates for the system status bar. Our custom status bar // needs to hide when the system status bar is showing to ovoid overlapping status bars. mStatusBarWindowStateController.addListener(mStatusBarWindowStateListener); mPrivacyItemController.addCallback(mPrivacyItemControllerCallback); } @Override public void destroy() { mPrivacyItemController.removeCallback(mPrivacyItemControllerCallback); mStatusBarWindowStateController.removeListener(mStatusBarWindowStateListener); super.destroy(); Loading Loading @@ -274,6 +286,11 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus R.string.wifi_unavailable_dream_overlay_content_description); } void updateLocationStatusIcon(boolean enabled) { showIcon(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE, enabled, R.string.location_active_dream_overlay_content_description); } private void updateAlarmStatusIcon() { final AlarmManager.AlarmClockInfo alarm = mAlarmManager.getNextAlarmClock(mUserTracker.getUserId()); Loading Loading @@ -369,6 +386,11 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus mMainExecutor.execute(this::updateVisibility); } private void onPrivacyItemsChanged(@NonNull List<PrivacyItem> privacyItems) { updateLocationStatusIcon(privacyItems.stream() .anyMatch(item -> item.getPrivacyType() == PrivacyType.TYPE_LOCATION)); } private void onStatusBarItemsChanged(List<StatusBarItem> newItems) { mMainExecutor.execute(() -> { mExtraStatusBarItems.clear(); Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewControllerTest.java +56 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,9 @@ import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider; import com.android.systemui.kosmos.KosmosJavaAdapter; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.core.FakeLogBuffer; import com.android.systemui.privacy.PrivacyItem; import com.android.systemui.privacy.PrivacyItemController; import com.android.systemui.privacy.PrivacyType; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository; Loading @@ -66,8 +69,10 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.concurrent.Executor; Loading Loading @@ -107,6 +112,8 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { DreamOverlayStateController mDreamOverlayStateController; @Mock UserTracker mUserTracker; @Mock PrivacyItemController mPrivacyItemController; LogBuffer mLogBuffer = FakeLogBuffer.Factory.Companion.create(); Loading Loading @@ -146,6 +153,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { mDreamOverlayStateController, mUserTracker, mKosmos.getWifiInteractor(), mPrivacyItemController, mKosmos.getCommunalSceneInteractor(), mLogBuffer); mController.onInit(); Loading @@ -160,6 +168,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { verify(mDreamOverlayNotificationCountProvider).addCallback(any()); verify(mDreamOverlayStatusBarItemsProvider).addCallback(any()); verify(mDreamOverlayStateController).addCallback(any()); verify(mPrivacyItemController).addCallback(any()); } @Test Loading @@ -171,6 +180,52 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { AmbientStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null); } @Test public void testLocationIconShownWhenLocationActive() { mController.onViewAttached(); final ArgumentCaptor<PrivacyItemController.Callback> callbackCaptor = ArgumentCaptor.forClass(PrivacyItemController.Callback.class); verify(mPrivacyItemController).addCallback(callbackCaptor.capture()); final PrivacyItem item = Mockito.mock(PrivacyItem.class); when(item.getPrivacyType()).thenReturn(PrivacyType.TYPE_LOCATION); callbackCaptor.getValue().onPrivacyItemsChanged(Arrays.asList(item)); verify(mView).showIcon( eq(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE), eq(true), any()); } @Test public void testLocationIconNotShownForOtherPrivacyItems() { mController.onViewAttached(); final ArgumentCaptor<PrivacyItemController.Callback> callbackCaptor = ArgumentCaptor.forClass(PrivacyItemController.Callback.class); verify(mPrivacyItemController).addCallback(callbackCaptor.capture()); final PrivacyItem item = Mockito.mock(PrivacyItem.class); when(item.getPrivacyType()).thenReturn(PrivacyType.TYPE_CAMERA); callbackCaptor.getValue().onPrivacyItemsChanged(Arrays.asList(item)); verify(mView, never()).showIcon( eq(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE), eq(true), any()); } @Test public void testLocationIconNotShownForNoItems() { mController.onViewAttached(); final ArgumentCaptor<PrivacyItemController.Callback> callbackCaptor = ArgumentCaptor.forClass(PrivacyItemController.Callback.class); verify(mPrivacyItemController).addCallback(callbackCaptor.capture()); verify(mView, never()).showIcon( eq(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE), eq(true), any()); callbackCaptor.getValue().onPrivacyItemsChanged(Arrays.asList()); verify(mView, never()).showIcon( eq(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE), eq(true), any()); } @Test public void testWifiIconHiddenWhenWifiAvailable() { mController.onViewAttached(); Loading Loading @@ -274,6 +329,7 @@ public class AmbientStatusBarViewControllerTest extends SysuiTestCase { mDreamOverlayStateController, mUserTracker, mKosmos.getWifiInteractor(), mPrivacyItemController, mKosmos.getCommunalSceneInteractor(), mLogBuffer); controller.onViewAttached(); Loading
packages/SystemUI/res/layout/ambient_status_bar_view.xml +9 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,15 @@ android:visibility="gone" app:layout_constraintEnd_toEndOf="parent"> <com.android.systemui.statusbar.AlphaOptimizedImageView android:id="@+id/dream_overlay_location_active" android:layout_width="@dimen/dream_overlay_status_bar_icon_size" android:layout_height="match_parent" android:layout_marginStart="@dimen/dream_overlay_status_icon_margin" android:src="@drawable/ic_location" android:visibility="gone" android:contentDescription="@string/location_active_dream_overlay_content_description" /> <com.android.systemui.statusbar.AlphaOptimizedImageView android:id="@+id/dream_overlay_alarm_set" android:layout_width="@dimen/dream_overlay_status_bar_icon_size" Loading
packages/SystemUI/res/values/strings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -3369,6 +3369,8 @@ <!-- Toast shown when a notification does not support dragging to split [CHAR LIMIT=NONE] --> <string name="drag_split_not_supported">This notification does not support dragging to split screen</string> <!-- Content description for the location icon in the dream overlay status bar [CHAR LIMIT=NONE] --> <string name="dream_overlay_location_active">Location active</string> <!-- Content description for the Wi-Fi off icon in the dream overlay status bar [CHAR LIMIT=NONE] --> <string name="dream_overlay_status_bar_wifi_off">Wi\u2011Fi unavailable</string> <!-- Content description for the priority mode icon in the dream overlay status bar [CHAR LIMIT=NONE] --> Loading Loading @@ -3561,6 +3563,9 @@ <!-- Content description for Wi-Fi not available icon on dream [CHAR LIMIT=NONE]--> <string name="wifi_unavailable_dream_overlay_content_description">Wi-Fi not available</string> <!-- Content description for location in use icon on dream [CHAR LIMIT=NONE] --> <string name="location_active_dream_overlay_content_description">Location active</string> <!-- Content description for camera blocked icon on dream [CHAR LIMIT=NONE] --> <string name="camera_blocked_dream_overlay_content_description">Camera blocked</string> Loading
packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarView.java +5 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ public class AmbientStatusBarView extends ConstraintLayout { STATUS_ICON_MIC_CAMERA_DISABLED, STATUS_ICON_PRIORITY_MODE_ON, STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE, STATUS_ICON_LOCATION_ACTIVE, }) public @interface StatusIconType {} public static final int STATUS_ICON_NOTIFICATIONS = 0; Loading @@ -64,6 +65,7 @@ public class AmbientStatusBarView extends ConstraintLayout { public static final int STATUS_ICON_MIC_CAMERA_DISABLED = 5; public static final int STATUS_ICON_PRIORITY_MODE_ON = 6; public static final int STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE = 7; public static final int STATUS_ICON_LOCATION_ACTIVE = 8; private final Map<Integer, View> mStatusIcons = new HashMap<>(); private Context mContext; Loading Loading @@ -136,6 +138,8 @@ public class AmbientStatusBarView extends ConstraintLayout { addDoubleShadow(fetchStatusIconForResId(R.id.dream_overlay_priority_mode))); mStatusIcons.put(STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE, fetchStatusIconForResId(R.id.dream_overlay_assistant_attention_indicator)); mStatusIcons.put(STATUS_ICON_LOCATION_ACTIVE, fetchStatusIconForResId(R.id.dream_overlay_location_active)); mSystemStatusViewGroup = findViewById(R.id.dream_overlay_system_status); mExtraSystemStatusViewGroup = findViewById(R.id.dream_overlay_extra_items); Loading @@ -151,6 +155,7 @@ public class AmbientStatusBarView extends ConstraintLayout { case STATUS_ICON_MIC_CAMERA_DISABLED -> "mic_camera_disabled"; case STATUS_ICON_PRIORITY_MODE_ON -> "priority_mode_on"; case STATUS_ICON_ASSISTANT_ATTENTION_ACTIVE -> "assistant_attention_active"; case STATUS_ICON_LOCATION_ACTIVE -> "location_active"; default -> type + "(unknown)"; }; } Loading
packages/SystemUI/src/com/android/systemui/ambient/statusbar/ui/AmbientStatusBarViewController.java +22 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.text.format.DateFormat; import android.util.PluralsMessageFormatter; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; Loading @@ -39,6 +40,9 @@ import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider; import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider.StatusBarItem; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.dagger.DreamLog; import com.android.systemui.privacy.PrivacyItem; import com.android.systemui.privacy.PrivacyItemController; import com.android.systemui.privacy.PrivacyType; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CrossFadeHelper; Loading Loading @@ -79,6 +83,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus private final DreamOverlayStateController mDreamOverlayStateController; private final UserTracker mUserTracker; private final WifiInteractor mWifiInteractor; private final PrivacyItemController mPrivacyItemController; private final StatusBarWindowStateController mStatusBarWindowStateController; private final DreamOverlayStatusBarItemsProvider mStatusBarItemsProvider; private final Executor mMainExecutor; Loading Loading @@ -131,6 +136,9 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus private final StatusBarWindowStateListener mStatusBarWindowStateListener = this::onSystemStatusBarStateChanged; private final PrivacyItemController.Callback mPrivacyItemControllerCallback = this::onPrivacyItemsChanged; @Inject public AmbientStatusBarViewController( AmbientStatusBarView view, Loading @@ -147,6 +155,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus DreamOverlayStateController dreamOverlayStateController, UserTracker userTracker, WifiInteractor wifiInteractor, PrivacyItemController privacyItemController, CommunalSceneInteractor communalSceneInteractor, @DreamLog LogBuffer logBuffer) { super(view); Loading @@ -163,6 +172,7 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus mDreamOverlayStateController = dreamOverlayStateController; mUserTracker = userTracker; mWifiInteractor = wifiInteractor; mPrivacyItemController = privacyItemController; mCommunalSceneInteractor = communalSceneInteractor; mLogger = new DreamLogger(logBuffer, TAG); } Loading @@ -174,10 +184,12 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus // Register to receive show/hide updates for the system status bar. Our custom status bar // needs to hide when the system status bar is showing to ovoid overlapping status bars. mStatusBarWindowStateController.addListener(mStatusBarWindowStateListener); mPrivacyItemController.addCallback(mPrivacyItemControllerCallback); } @Override public void destroy() { mPrivacyItemController.removeCallback(mPrivacyItemControllerCallback); mStatusBarWindowStateController.removeListener(mStatusBarWindowStateListener); super.destroy(); Loading Loading @@ -274,6 +286,11 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus R.string.wifi_unavailable_dream_overlay_content_description); } void updateLocationStatusIcon(boolean enabled) { showIcon(AmbientStatusBarView.STATUS_ICON_LOCATION_ACTIVE, enabled, R.string.location_active_dream_overlay_content_description); } private void updateAlarmStatusIcon() { final AlarmManager.AlarmClockInfo alarm = mAlarmManager.getNextAlarmClock(mUserTracker.getUserId()); Loading Loading @@ -369,6 +386,11 @@ public class AmbientStatusBarViewController extends ViewController<AmbientStatus mMainExecutor.execute(this::updateVisibility); } private void onPrivacyItemsChanged(@NonNull List<PrivacyItem> privacyItems) { updateLocationStatusIcon(privacyItems.stream() .anyMatch(item -> item.getPrivacyType() == PrivacyType.TYPE_LOCATION)); } private void onStatusBarItemsChanged(List<StatusBarItem> newItems) { mMainExecutor.execute(() -> { mExtraStatusBarItems.clear(); Loading