Loading packages/SystemUI/src/com/android/systemui/power/PowerUI.java +32 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java +0 −2 Original line number Diff line number Diff line Loading @@ -200,8 +200,6 @@ public interface CentralSurfaces extends Dumpable, LifecycleOwner { void onKeyguardViewManagerStatesUpdated(); boolean isDeviceInVrMode(); NotificationPresenter getPresenter(); /** Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt +0 −1 Original line number Diff line number Diff line Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +0 −5 Original line number Diff line number Diff line Loading @@ -1666,11 +1666,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { logStateToEventlog(); } @Override public boolean isDeviceInVrMode() { return mPresenter.isDeviceInVrMode(); } @Override public NotificationPresenter getPresenter() { return mPresenter; Loading packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java +29 −10 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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(); Loading Loading @@ -142,6 +138,23 @@ public class PowerUITest extends SysuiTestCase { verify(mMockWarnings, never()).dismissHighTemperatureWarning(); } @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(); Loading Loading @@ -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; } Loading Loading
packages/SystemUI/src/com/android/systemui/power/PowerUI.java +32 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java +0 −2 Original line number Diff line number Diff line Loading @@ -200,8 +200,6 @@ public interface CentralSurfaces extends Dumpable, LifecycleOwner { void onKeyguardViewManagerStatesUpdated(); boolean isDeviceInVrMode(); NotificationPresenter getPresenter(); /** Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt +0 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +0 −5 Original line number Diff line number Diff line Loading @@ -1666,11 +1666,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { logStateToEventlog(); } @Override public boolean isDeviceInVrMode() { return mPresenter.isDeviceInVrMode(); } @Override public NotificationPresenter getPresenter() { return mPresenter; Loading
packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java +29 −10 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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(); Loading Loading @@ -142,6 +138,23 @@ public class PowerUITest extends SysuiTestCase { verify(mMockWarnings, never()).dismissHighTemperatureWarning(); } @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(); Loading Loading @@ -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; } Loading