Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c1e33f50 authored by Oli Thompson's avatar Oli Thompson Committed by Android (Google) Code Review
Browse files

Merge "Guard against duplicate calls to setQuietModeEnabled" into main

parents a19a7e2c ae10f49a
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settings.accounts;

import android.app.admin.flags.Flags;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -58,7 +59,14 @@ final class ManagedProfileQuietModeEnabler implements DefaultLifecycleObserver {
    }

    public void setQuietModeEnabled(boolean enabled) {
        if (mManagedProfile != null) {
        if (mManagedProfile == null) {
            return;
        }
        if (Flags.quietModeCredentialBugFix()) {
            if (isQuietModeEnabled() != enabled) {
                mUserManager.requestQuietModeEnabled(enabled, mManagedProfile);
            }
        } else {
            mUserManager.requestQuietModeEnabled(enabled, mManagedProfile);
        }
    }
+3 −0
Original line number Diff line number Diff line
@@ -70,6 +70,9 @@ public class WorkModePreferenceController extends BasePreferenceController
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        mQuietModeEnabler.setQuietModeEnabled(!isChecked);
        if (android.app.admin.flags.Flags.quietModeCredentialBugFix()) {
            updateState(mPreference);
        }
    }

    @Override
+35 −6
Original line number Diff line number Diff line
@@ -19,18 +19,22 @@ package com.android.settings.accounts;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.admin.flags.Flags;
import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.os.UserHandle;
import android.os.UserManager;
import android.platform.test.annotations.RequiresFlagsEnabled;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
@@ -42,13 +46,15 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.ParameterizedRobolectricTestRunner;
import org.robolectric.annotation.LooperMode;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;


@RunWith(RobolectricTestRunner.class)
@RunWith(ParameterizedRobolectricTestRunner.class)
@LooperMode(LooperMode.Mode.LEGACY)
public class ManagedProfileQuietModeEnablerTest {
    private static final int MANAGED_USER_ID = 10;
@@ -63,6 +69,12 @@ public class ManagedProfileQuietModeEnablerTest {
        }
    };

    @ParameterizedRobolectricTestRunner.Parameters
    public static List<?> params() {
        return Arrays.asList(true, false);
    }
    final boolean mEnable;

    @Mock
    private ManagedProfileQuietModeEnabler.QuietModeChangeListener mOnQuietModeChangeListener;
    @Mock
@@ -72,6 +84,10 @@ public class ManagedProfileQuietModeEnablerTest {
    @Mock
    private UserInfo mUserInfo;

    public ManagedProfileQuietModeEnablerTest(boolean enable) {
        mEnable = enable;
    }

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
@@ -88,10 +104,21 @@ public class ManagedProfileQuietModeEnablerTest {

    @Test
    public void onSetQuietMode_shouldRequestQuietModeEnabled() {
        mQuietModeEnabler.setQuietModeEnabled(false);
        verify(mUserManager).requestQuietModeEnabled(false, mManagedUser);
        mQuietModeEnabler.setQuietModeEnabled(true);
        verify(mUserManager).requestQuietModeEnabled(true, mManagedUser);
        when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(!mEnable);

        mQuietModeEnabler.setQuietModeEnabled(mEnable);

        verify(mUserManager).requestQuietModeEnabled(mEnable, mManagedUser);
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_QUIET_MODE_CREDENTIAL_BUG_FIX)
    public void onSetQuietMode_ifQuietModeAlreadyInDesiredState_shouldNotRequestQuietModeEnabled() {
        when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(mEnable);

        mQuietModeEnabler.setQuietModeEnabled(mEnable);

        verify(mUserManager, never()).requestQuietModeEnabled(anyBoolean(), any());
    }

    @Test
@@ -107,6 +134,7 @@ public class ManagedProfileQuietModeEnablerTest {
                Intent.EXTRA_USER_HANDLE, MANAGED_USER_ID));
        mContext.sendBroadcast(new Intent(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE).putExtra(
                Intent.EXTRA_USER_HANDLE, MANAGED_USER_ID));

        verify(mOnQuietModeChangeListener, times(2)).onQuietModeChanged();
    }

@@ -123,6 +151,7 @@ public class ManagedProfileQuietModeEnablerTest {
                Context.RECEIVER_EXPORTED/*UNAUDITED*/);

        mQuietModeEnabler.onStop(mLifecycleOwner);

        verify(mContext).unregisterReceiver(mQuietModeEnabler.mReceiver);
    }
}
+17 −14
Original line number Diff line number Diff line
@@ -40,9 +40,12 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.ParameterizedRobolectricTestRunner;
import org.robolectric.RobolectricTestRunner;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@RunWith(RobolectricTestRunner.class)
public class WorkModePreferenceControllerTest {
@@ -54,6 +57,11 @@ public class WorkModePreferenceControllerTest {
    private WorkModePreferenceController mController;
    private MainSwitchPreference mPreference;

    @ParameterizedRobolectricTestRunner.Parameters
    public static List<?> params() {
        return Arrays.asList(true, false);
    }
    final boolean mEnable;
    @Mock
    private UserManager mUserManager;
    @Mock
@@ -65,6 +73,10 @@ public class WorkModePreferenceControllerTest {
    @Mock
    Switch mSwitch;

    public WorkModePreferenceControllerTest(boolean enable) {
        mEnable = enable;
    }

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
@@ -99,28 +111,19 @@ public class WorkModePreferenceControllerTest {
    @Test
    public void updateState_shouldRefreshContent() {
        when(mUserManager.isQuietModeEnabled(any(UserHandle.class)))
                .thenReturn(false);
                .thenReturn(mEnable);

        mController.updateState(mPreference);

        assertThat(mPreference.isChecked()).isTrue();

        when(mUserManager.isQuietModeEnabled(any(UserHandle.class)))
                .thenReturn(true);

        mController.updateState(mPreference);

        assertThat(mPreference.isChecked()).isFalse();
        assertThat(mPreference.isChecked()).isEqualTo(!mEnable);
    }

    @Test
    public void onPreferenceChange_shouldRequestQuietModeEnabled() {
        mController.onCheckedChanged(mSwitch, true);

        verify(mUserManager).requestQuietModeEnabled(false, mManagedUser);
        when(mUserManager.isQuietModeEnabled(any(UserHandle.class))).thenReturn(mEnable);

        mController.onCheckedChanged(mSwitch, false);
        mController.onCheckedChanged(mSwitch, mEnable);

        verify(mUserManager).requestQuietModeEnabled(true, mManagedUser);
        verify(mUserManager).requestQuietModeEnabled(!mEnable, mManagedUser);
    }
}
 No newline at end of file