Check system user is running process for dream logic.
This changelist ensures system user is running the process before entering any dream related logic. This moves away from checking that the current user is running the process, as this will not always be true, such as when SystemUI restarts when a secondary user is running. Fixes: 269611342 Test: atest SystemProcessConditionTest Change-Id: I6471edaaea8dff93b0c86cb5bfee4a4cdabfd686
This commit is contained in:
@@ -29,7 +29,7 @@ import com.android.systemui.dreams.DreamOverlayNotificationCountProvider;
|
||||
import com.android.systemui.dreams.DreamOverlayService;
|
||||
import com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule;
|
||||
import com.android.systemui.dreams.touch.scrim.dagger.ScrimModule;
|
||||
import com.android.systemui.process.condition.UserProcessCondition;
|
||||
import com.android.systemui.process.condition.SystemProcessCondition;
|
||||
import com.android.systemui.shared.condition.Condition;
|
||||
import com.android.systemui.shared.condition.Monitor;
|
||||
|
||||
@@ -126,7 +126,7 @@ public interface DreamModule {
|
||||
@Binds
|
||||
@IntoSet
|
||||
@Named(DREAM_PRETEXT_CONDITIONS)
|
||||
Condition bindsUserProcessCondition(UserProcessCondition condition);
|
||||
Condition bindSystemProcessCondition(SystemProcessCondition condition);
|
||||
|
||||
/** */
|
||||
@Provides
|
||||
|
||||
@@ -26,7 +26,10 @@ public class ProcessWrapper {
|
||||
@Inject
|
||||
public ProcessWrapper() {}
|
||||
|
||||
public int getUserHandleIdentifier() {
|
||||
return android.os.Process.myUserHandle().getIdentifier();
|
||||
/**
|
||||
* Returns {@code true} if System User is running the current process.
|
||||
*/
|
||||
public boolean isSystemUser() {
|
||||
return android.os.Process.myUserHandle().isSystem();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,29 +17,26 @@
|
||||
package com.android.systemui.process.condition;
|
||||
|
||||
import com.android.systemui.process.ProcessWrapper;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.shared.condition.Condition;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* {@link UserProcessCondition} provides a signal when the process handle belongs to the current
|
||||
* user.
|
||||
* {@link SystemProcessCondition} checks to make sure the current process is being ran by the
|
||||
* System User.
|
||||
*/
|
||||
public class UserProcessCondition extends Condition {
|
||||
public class SystemProcessCondition extends Condition {
|
||||
private final ProcessWrapper mProcessWrapper;
|
||||
private final UserTracker mUserTracker;
|
||||
|
||||
@Inject
|
||||
public UserProcessCondition(ProcessWrapper processWrapper, UserTracker userTracker) {
|
||||
public SystemProcessCondition(ProcessWrapper processWrapper) {
|
||||
super();
|
||||
mProcessWrapper = processWrapper;
|
||||
mUserTracker = userTracker;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void start() {
|
||||
updateCondition(mUserTracker.getUserId()
|
||||
== mProcessWrapper.getUserHandleIdentifier());
|
||||
updateCondition(mProcessWrapper.isSystemUser());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -26,7 +26,6 @@ import androidx.test.filters.SmallTest;
|
||||
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.process.ProcessWrapper;
|
||||
import com.android.systemui.settings.UserTracker;
|
||||
import com.android.systemui.shared.condition.Condition;
|
||||
import com.android.systemui.shared.condition.Monitor;
|
||||
import com.android.systemui.util.concurrency.FakeExecutor;
|
||||
@@ -41,10 +40,7 @@ import org.mockito.MockitoAnnotations;
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
@TestableLooper.RunWithLooper
|
||||
@SmallTest
|
||||
public class UserProcessConditionTest extends SysuiTestCase {
|
||||
@Mock
|
||||
UserTracker mUserTracker;
|
||||
|
||||
public class SystemProcessConditionTest extends SysuiTestCase {
|
||||
@Mock
|
||||
ProcessWrapper mProcessWrapper;
|
||||
|
||||
@@ -59,15 +55,14 @@ public class UserProcessConditionTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies condition reports false when tracker reports a different user id than the
|
||||
* identifier from the process handle.
|
||||
* Verifies condition reports false when tracker reports the process is being ran by the
|
||||
* system user.
|
||||
*/
|
||||
@Test
|
||||
public void testConditionFailsWithDifferentIds() {
|
||||
public void testConditionFailsWithNonSystemProcess() {
|
||||
|
||||
final Condition condition = new UserProcessCondition(mProcessWrapper, mUserTracker);
|
||||
when(mProcessWrapper.getUserHandleIdentifier()).thenReturn(0);
|
||||
when(mUserTracker.getUserId()).thenReturn(1);
|
||||
final Condition condition = new SystemProcessCondition(mProcessWrapper);
|
||||
when(mProcessWrapper.isSystemUser()).thenReturn(false);
|
||||
|
||||
final Monitor monitor = new Monitor(mExecutor);
|
||||
|
||||
@@ -81,15 +76,14 @@ public class UserProcessConditionTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies condition reports false when tracker reports a different user id than the
|
||||
* identifier from the process handle.
|
||||
* Verifies condition reports true when tracker reports the process is being ran by the
|
||||
* system user.
|
||||
*/
|
||||
@Test
|
||||
public void testConditionSucceedsWithSameIds() {
|
||||
public void testConditionSucceedsWithSystemProcess() {
|
||||
|
||||
final Condition condition = new UserProcessCondition(mProcessWrapper, mUserTracker);
|
||||
when(mProcessWrapper.getUserHandleIdentifier()).thenReturn(0);
|
||||
when(mUserTracker.getUserId()).thenReturn(0);
|
||||
final Condition condition = new SystemProcessCondition(mProcessWrapper);
|
||||
when(mProcessWrapper.isSystemUser()).thenReturn(true);
|
||||
|
||||
final Monitor monitor = new Monitor(mExecutor);
|
||||
|
||||
@@ -101,5 +95,4 @@ public class UserProcessConditionTest extends SysuiTestCase {
|
||||
|
||||
verify(mCallback).onConditionsChanged(true);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user