Hide the Default Notification Sound if enabling customized vibration

Flag:com.android.server.notification.notification_vibration_in_sound_uri
Test: atest NotificationRingtonePreferenceControllerTest
Bug: 358525376

Change-Id: Ic7517828df746700ceb6e0605a9d32066c7aed50
This commit is contained in:
yumeichen
2024-09-11 12:50:28 +00:00
parent 636e90be58
commit 23bba426b5
2 changed files with 53 additions and 2 deletions

View File

@@ -19,6 +19,7 @@ package com.android.settings.notification;
import android.content.Context; import android.content.Context;
import android.media.RingtoneManager; import android.media.RingtoneManager;
import com.android.server.notification.Flags;
import com.android.settings.R; import com.android.settings.R;
public class NotificationRingtonePreferenceController extends RingtonePreferenceControllerBase { public class NotificationRingtonePreferenceController extends RingtonePreferenceControllerBase {
@@ -31,6 +32,9 @@ public class NotificationRingtonePreferenceController extends RingtonePreference
@Override @Override
public boolean isAvailable() { public boolean isAvailable() {
if (isVibrationInSoundUriEnabled()) {
return false;
}
return mContext.getResources().getBoolean(R.bool.config_show_notification_ringtone); return mContext.getResources().getBoolean(R.bool.config_show_notification_ringtone);
} }
@@ -43,4 +47,9 @@ public class NotificationRingtonePreferenceController extends RingtonePreference
public int getRingtoneType() { public int getRingtoneType() {
return RingtoneManager.TYPE_NOTIFICATION; return RingtoneManager.TYPE_NOTIFICATION;
} }
private boolean isVibrationInSoundUriEnabled() {
return Flags.notificationVibrationInSoundUri() && mContext.getResources().getBoolean(
com.android.internal.R.bool.config_ringtoneVibrationSettingsSupported);
}
} }

View File

@@ -18,35 +18,77 @@ package com.android.settings.notification;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.res.Resources;
import android.media.RingtoneManager; import android.media.RingtoneManager;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import com.android.server.notification.Flags;
import com.android.settings.R;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class NotificationRingtonePreferenceControllerTest { public class NotificationRingtonePreferenceControllerTest {
private NotificationRingtonePreferenceController mController; private NotificationRingtonePreferenceController mController;
@Mock private Context mMockContext;
@Mock private Resources mMockResources;
@Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mController = new NotificationRingtonePreferenceController(RuntimeEnvironment.application); when(mMockContext.getResources()).thenReturn(mMockResources);
mController = new NotificationRingtonePreferenceController(mMockContext);
} }
@Test @Test
@DisableFlags(Flags.FLAG_NOTIFICATION_VIBRATION_IN_SOUND_URI)
public void isAvailable_byDefault_isTrue() { public void isAvailable_byDefault_isTrue() {
when(mMockResources
.getBoolean(com.android.internal.R.bool.config_ringtoneVibrationSettingsSupported))
.thenReturn(false);
when(mMockResources.getBoolean(R.bool.config_show_notification_ringtone))
.thenReturn(true);
assertThat(mController.isAvailable()).isTrue(); assertThat(mController.isAvailable()).isTrue();
} }
@Test @Test
@Config(qualifiers = "mcc999") @Config(qualifiers = "mcc999")
@DisableFlags(Flags.FLAG_NOTIFICATION_VIBRATION_IN_SOUND_URI)
public void isAvailable_whenNotVisible_isFalse() { public void isAvailable_whenNotVisible_isFalse() {
when(mMockResources
.getBoolean(com.android.internal.R.bool.config_ringtoneVibrationSettingsSupported))
.thenReturn(false);
when(mMockResources.getBoolean(R.bool.config_show_notification_ringtone))
.thenReturn(false);
assertThat(mController.isAvailable()).isFalse();
}
@Test
@EnableFlags(Flags.FLAG_NOTIFICATION_VIBRATION_IN_SOUND_URI)
public void isAvailable_whenFlagsNotificationVibrationInSoundUri_isFalse() {
when(mMockResources
.getBoolean(com.android.internal.R.bool.config_ringtoneVibrationSettingsSupported))
.thenReturn(true);
when(mMockResources.getBoolean(R.bool.config_show_notification_ringtone))
.thenReturn(true);
assertThat(mController.isAvailable()).isFalse(); assertThat(mController.isAvailable()).isFalse();
} }