Loading packages/SystemUI/res/values/flags.xml +2 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ <bool name="flag_ongoing_call_status_bar_chip">true</bool> <bool name="flag_ongoing_call_in_immersive">false</bool> <bool name="flag_smartspace">false</bool> <bool name="flag_smartspace_deduping">true</bool> Loading packages/SystemUI/src/com/android/systemui/flags/FeatureFlags.java +5 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,11 @@ public class FeatureFlags { return mFlagReader.isEnabled(R.bool.flag_ongoing_call_status_bar_chip); } public boolean isOngoingCallInImmersiveEnabled() { return isOngoingCallStatusBarChipEnabled() && mFlagReader.isEnabled(R.bool.flag_ongoing_call_in_immersive); } public boolean isSmartspaceEnabled() { return mFlagReader.isEnabled(R.bool.flag_smartspace); } Loading packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java +8 −2 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl; import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.phone.SystemUIHostDialogProvider; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallLogger; Loading Loading @@ -253,11 +254,16 @@ public interface StatusBarDependenciesModule { @Main Executor mainExecutor, IActivityManager iActivityManager, OngoingCallLogger logger, DumpManager dumpManager) { DumpManager dumpManager, StatusBarWindowController statusBarWindowController) { Optional<StatusBarWindowController> windowController = featureFlags.isOngoingCallInImmersiveEnabled() ? Optional.of(statusBarWindowController) : Optional.empty(); OngoingCallController ongoingCallController = new OngoingCallController( notifCollection, featureFlags, systemClock, activityStarter, mainExecutor, iActivityManager, logger, dumpManager); iActivityManager, logger, dumpManager, windowController); ongoingCallController.init(); return ongoingCallController; } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +10 −1 Original line number Diff line number Diff line Loading @@ -208,6 +208,12 @@ public class StatusBarWindowController { apply(mCurrentState); } /** Sets whether there is currently an ongoing call. */ public void setIsCallOngoing(boolean isCallOngoing) { mCurrentState.mIsCallOngoing = isCallOngoing; apply(mCurrentState); } /** * Return the container in which we should run launch animations started from the status bar and * expanding into the opening window. Loading Loading @@ -248,10 +254,13 @@ public class StatusBarWindowController { private static class State { boolean mForceStatusBarVisible; boolean mIsLaunchAnimationRunning; boolean mIsCallOngoing; } private void applyForceStatusBarVisibleFlag(State state) { if (state.mForceStatusBarVisible || state.mIsLaunchAnimationRunning) { if (state.mForceStatusBarVisible || state.mIsLaunchAnimationRunning || state.mIsCallOngoing) { mLpChanged.privateFlags |= PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR; } else { mLpChanged.privateFlags &= ~PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR; Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt +5 −1 Original line number Diff line number Diff line Loading @@ -37,10 +37,12 @@ import com.android.systemui.flags.FeatureFlags import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener import com.android.systemui.statusbar.phone.StatusBarWindowController import com.android.systemui.statusbar.policy.CallbackController import com.android.systemui.util.time.SystemClock import java.io.FileDescriptor import java.io.PrintWriter import java.util.Optional import java.util.concurrent.Executor import javax.inject.Inject Loading @@ -57,6 +59,7 @@ class OngoingCallController @Inject constructor( private val iActivityManager: IActivityManager, private val logger: OngoingCallLogger, private val dumpManager: DumpManager, private val statusBarWindowController: Optional<StatusBarWindowController>, ) : CallbackController<OngoingCallListener>, Dumpable { /** Non-null if there's an active call notification. */ Loading Loading @@ -201,7 +204,7 @@ class OngoingCallController @Inject constructor( } setUpUidObserver(currentCallNotificationInfo) statusBarWindowController.ifPresent { it.setIsCallOngoing(true) } mListeners.forEach { l -> l.onOngoingCallStateChanged(animate = true) } } else { // If we failed to update the chip, don't store the call info. Then [hasOngoingCall] Loading Loading @@ -268,6 +271,7 @@ class OngoingCallController @Inject constructor( private fun removeChip() { callNotificationInfo = null tearDownChipView() statusBarWindowController.ifPresent { it.setIsCallOngoing(false) } mListeners.forEach { l -> l.onOngoingCallStateChanged(animate = true) } if (uidObserver != null) { iActivityManager.unregisterUidObserver(uidObserver) Loading Loading
packages/SystemUI/res/values/flags.xml +2 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ <bool name="flag_ongoing_call_status_bar_chip">true</bool> <bool name="flag_ongoing_call_in_immersive">false</bool> <bool name="flag_smartspace">false</bool> <bool name="flag_smartspace_deduping">true</bool> Loading
packages/SystemUI/src/com/android/systemui/flags/FeatureFlags.java +5 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,11 @@ public class FeatureFlags { return mFlagReader.isEnabled(R.bool.flag_ongoing_call_status_bar_chip); } public boolean isOngoingCallInImmersiveEnabled() { return isOngoingCallStatusBarChipEnabled() && mFlagReader.isEnabled(R.bool.flag_ongoing_call_in_immersive); } public boolean isSmartspaceEnabled() { return mFlagReader.isEnabled(R.bool.flag_smartspace); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java +8 −2 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl; import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.phone.SystemUIHostDialogProvider; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController; import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallLogger; Loading Loading @@ -253,11 +254,16 @@ public interface StatusBarDependenciesModule { @Main Executor mainExecutor, IActivityManager iActivityManager, OngoingCallLogger logger, DumpManager dumpManager) { DumpManager dumpManager, StatusBarWindowController statusBarWindowController) { Optional<StatusBarWindowController> windowController = featureFlags.isOngoingCallInImmersiveEnabled() ? Optional.of(statusBarWindowController) : Optional.empty(); OngoingCallController ongoingCallController = new OngoingCallController( notifCollection, featureFlags, systemClock, activityStarter, mainExecutor, iActivityManager, logger, dumpManager); iActivityManager, logger, dumpManager, windowController); ongoingCallController.init(); return ongoingCallController; } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +10 −1 Original line number Diff line number Diff line Loading @@ -208,6 +208,12 @@ public class StatusBarWindowController { apply(mCurrentState); } /** Sets whether there is currently an ongoing call. */ public void setIsCallOngoing(boolean isCallOngoing) { mCurrentState.mIsCallOngoing = isCallOngoing; apply(mCurrentState); } /** * Return the container in which we should run launch animations started from the status bar and * expanding into the opening window. Loading Loading @@ -248,10 +254,13 @@ public class StatusBarWindowController { private static class State { boolean mForceStatusBarVisible; boolean mIsLaunchAnimationRunning; boolean mIsCallOngoing; } private void applyForceStatusBarVisibleFlag(State state) { if (state.mForceStatusBarVisible || state.mIsLaunchAnimationRunning) { if (state.mForceStatusBarVisible || state.mIsLaunchAnimationRunning || state.mIsCallOngoing) { mLpChanged.privateFlags |= PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR; } else { mLpChanged.privateFlags &= ~PRIVATE_FLAG_FORCE_SHOW_STATUS_BAR; Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt +5 −1 Original line number Diff line number Diff line Loading @@ -37,10 +37,12 @@ import com.android.systemui.flags.FeatureFlags import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener import com.android.systemui.statusbar.phone.StatusBarWindowController import com.android.systemui.statusbar.policy.CallbackController import com.android.systemui.util.time.SystemClock import java.io.FileDescriptor import java.io.PrintWriter import java.util.Optional import java.util.concurrent.Executor import javax.inject.Inject Loading @@ -57,6 +59,7 @@ class OngoingCallController @Inject constructor( private val iActivityManager: IActivityManager, private val logger: OngoingCallLogger, private val dumpManager: DumpManager, private val statusBarWindowController: Optional<StatusBarWindowController>, ) : CallbackController<OngoingCallListener>, Dumpable { /** Non-null if there's an active call notification. */ Loading Loading @@ -201,7 +204,7 @@ class OngoingCallController @Inject constructor( } setUpUidObserver(currentCallNotificationInfo) statusBarWindowController.ifPresent { it.setIsCallOngoing(true) } mListeners.forEach { l -> l.onOngoingCallStateChanged(animate = true) } } else { // If we failed to update the chip, don't store the call info. Then [hasOngoingCall] Loading Loading @@ -268,6 +271,7 @@ class OngoingCallController @Inject constructor( private fun removeChip() { callNotificationInfo = null tearDownChipView() statusBarWindowController.ifPresent { it.setIsCallOngoing(false) } mListeners.forEach { l -> l.onOngoingCallStateChanged(animate = true) } if (uidObserver != null) { iActivityManager.unregisterUidObserver(uidObserver) Loading