diff options
5 files changed, 61 insertions, 32 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java index 5a1ad96da7a9..e1e1aaef6f2f 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java @@ -35,11 +35,14 @@ import android.os.SystemClock; import android.os.Temperature; import android.os.UserHandle; import android.provider.Settings; +import android.service.vr.IVrManager; +import android.service.vr.IVrStateCallbacks; import android.text.format.DateUtils; import android.util.Log; import android.util.Slog; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.settingslib.fuelgauge.Estimate; @@ -51,17 +54,13 @@ import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.phone.CentralSurfaces; import java.io.PrintWriter; import java.util.Arrays; -import java.util.Optional; import java.util.concurrent.Future; import javax.inject.Inject; -import dagger.Lazy; - @SysUISingleton public class PowerUI implements CoreStartable, CommandQueue.Callbacks { @@ -107,12 +106,15 @@ public class PowerUI implements CoreStartable, CommandQueue.Callbacks { @VisibleForTesting int mBatteryLevel = 100; @VisibleForTesting int mBatteryStatus = BatteryManager.BATTERY_STATUS_UNKNOWN; + private boolean mInVrMode; + private IThermalEventListener mSkinThermalEventListener; private IThermalEventListener mUsbThermalEventListener; private final Context mContext; private final BroadcastDispatcher mBroadcastDispatcher; private final CommandQueue mCommandQueue; - private final Lazy<Optional<CentralSurfaces>> mCentralSurfacesOptionalLazy; + @Nullable + private final IVrManager mVrManager; private final WakefulnessLifecycle.Observer mWakefulnessObserver = new WakefulnessLifecycle.Observer() { @Override @@ -134,17 +136,28 @@ public class PowerUI implements CoreStartable, CommandQueue.Callbacks { } }; + private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() { + @Override + public void onVrStateChanged(boolean enabled) { + mInVrMode = enabled; + } + }; + @Inject - public PowerUI(Context context, BroadcastDispatcher broadcastDispatcher, - CommandQueue commandQueue, Lazy<Optional<CentralSurfaces>> centralSurfacesOptionalLazy, - WarningsUI warningsUI, EnhancedEstimates enhancedEstimates, + public PowerUI( + Context context, + BroadcastDispatcher broadcastDispatcher, + CommandQueue commandQueue, + @Nullable IVrManager vrManager, + WarningsUI warningsUI, + EnhancedEstimates enhancedEstimates, WakefulnessLifecycle wakefulnessLifecycle, PowerManager powerManager, UserTracker userTracker) { mContext = context; mBroadcastDispatcher = broadcastDispatcher; mCommandQueue = commandQueue; - mCentralSurfacesOptionalLazy = centralSurfacesOptionalLazy; + mVrManager = vrManager; mWarnings = warningsUI; mEnhancedEstimates = enhancedEstimates; mPowerManager = powerManager; @@ -164,7 +177,7 @@ public class PowerUI implements CoreStartable, CommandQueue.Callbacks { }; final ContentResolver resolver = mContext.getContentResolver(); resolver.registerContentObserver(Settings.Global.getUriFor( - Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL), + Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL), false, obs, UserHandle.USER_ALL); updateBatteryWarningLevels(); mReceiver.init(); @@ -199,6 +212,14 @@ public class PowerUI implements CoreStartable, CommandQueue.Callbacks { }); initThermalEventListeners(); mCommandQueue.addCallback(this); + + if (mVrManager != null) { + try { + mVrManager.registerListener(mVrStateCallbacks); + } catch (RemoteException e) { + Slog.e(TAG, "Failed to register VR mode state listener: " + e); + } + } } @Override @@ -718,10 +739,7 @@ public class PowerUI implements CoreStartable, CommandQueue.Callbacks { int status = temp.getStatus(); if (status >= Temperature.THROTTLING_EMERGENCY) { - final Optional<CentralSurfaces> centralSurfacesOptional = - mCentralSurfacesOptionalLazy.get(); - if (!centralSurfacesOptional.map(CentralSurfaces::isDeviceInVrMode) - .orElse(false)) { + if (!mInVrMode) { mWarnings.showHighTemperatureWarning(); Slog.d(TAG, "SkinThermalEventListener: notifyThrottling was called " + ", current skin status = " + status diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java index cbb39150392c..0ff1a9561748 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java @@ -200,8 +200,6 @@ public interface CentralSurfaces extends Dumpable, LifecycleOwner { void onKeyguardViewManagerStatesUpdated(); - boolean isDeviceInVrMode(); - NotificationPresenter getPresenter(); /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt index 10422e31dfaa..37038a357479 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt @@ -41,7 +41,6 @@ abstract class CentralSurfacesEmptyImpl : CentralSurfaces { override fun getKeyguardMessageArea(): AuthKeyguardMessageArea? = null override fun isLaunchingActivityOverLockscreen() = false override fun onKeyguardViewManagerStatesUpdated() {} - override fun isDeviceInVrMode() = false override fun getPresenter(): NotificationPresenter? = null override fun onInputFocusTransfer(start: Boolean, cancel: Boolean, velocity: Float) {} override fun getCommandQueuePanelsEnabled() = false diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index d91f37504c2e..8cdf7d8a100d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -1667,11 +1667,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { } @Override - public boolean isDeviceInVrMode() { - return mPresenter.isDeviceInVrMode(); - } - - @Override public NotificationPresenter getPresenter() { return mPresenter; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java index 338182a3e304..b9ee19b9eaf2 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java @@ -36,6 +36,8 @@ import android.os.IThermalService; import android.os.PowerManager; import android.os.Temperature; import android.provider.Settings; +import android.service.vr.IVrManager; +import android.service.vr.IVrStateCallbacks; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; @@ -50,20 +52,17 @@ import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.power.PowerUI.WarningsUI; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.phone.CentralSurfaces; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.time.Duration; -import java.util.Optional; import java.util.concurrent.TimeUnit; -import dagger.Lazy; - @RunWith(AndroidTestingRunner.class) @RunWithLooper @SmallTest @@ -93,15 +92,12 @@ public class PowerUITest extends SysuiTestCase { private IThermalEventListener mSkinThermalEventListener; @Mock private BroadcastDispatcher mBroadcastDispatcher; @Mock private CommandQueue mCommandQueue; - @Mock private Lazy<Optional<CentralSurfaces>> mCentralSurfacesOptionalLazy; - @Mock private CentralSurfaces mCentralSurfaces; + @Mock private IVrManager mVrManager; @Before public void setup() { MockitoAnnotations.initMocks(this); - when(mCentralSurfacesOptionalLazy.get()).thenReturn(Optional.of(mCentralSurfaces)); - createPowerUi(); mSkinThermalEventListener = mPowerUI.new SkinThermalEventListener(); mUsbThermalEventListener = mPowerUI.new UsbThermalEventListener(); @@ -143,6 +139,23 @@ public class PowerUITest extends SysuiTestCase { } @Test + public void testSkinWarning_throttlingEmergency_butVrMode() throws Exception { + mPowerUI.start(); + + ArgumentCaptor<IVrStateCallbacks> vrCallback = + ArgumentCaptor.forClass(IVrStateCallbacks.class); + verify(mVrManager).registerListener(vrCallback.capture()); + + vrCallback.getValue().onVrStateChanged(true); + final Temperature temp = getEmergencyStatusTemp(Temperature.TYPE_SKIN, "skin2"); + mSkinThermalEventListener.notifyThrottling(temp); + + TestableLooper.get(this).processAllMessages(); + // don't show skin high temperature warning when in VR mode + verify(mMockWarnings, never()).showHighTemperatureWarning(); + } + + @Test public void testUsbAlarm_throttlingCritical() throws Exception { mPowerUI.start(); @@ -683,8 +696,14 @@ public class PowerUITest extends SysuiTestCase { private void createPowerUi() { mPowerUI = new PowerUI( - mContext, mBroadcastDispatcher, mCommandQueue, mCentralSurfacesOptionalLazy, - mMockWarnings, mEnhancedEstimates, mWakefulnessLifecycle, mPowerManager, + mContext, + mBroadcastDispatcher, + mCommandQueue, + mVrManager, + mMockWarnings, + mEnhancedEstimates, + mWakefulnessLifecycle, + mPowerManager, mUserTracker); mPowerUI.mThermalService = mThermalServiceMock; } |