1616
1717package com .android .settings ;
1818
19+ import static org .mockito .ArgumentMatchers .any ;
1920import static org .mockito .Mockito .doReturn ;
2021import static org .mockito .Mockito .never ;
2122import static org .mockito .Mockito .spy ;
2223import static org .mockito .Mockito .verify ;
2324import static org .mockito .Mockito .when ;
2425
26+ import android .content .ContentInterface ;
2527import android .content .ContentResolver ;
2628import android .content .Context ;
27- import android .media .RingtoneManager ;
2829import android .net .Uri ;
30+ import android .os .UserHandle ;
31+ import android .os .UserManager ;
2932
3033import androidx .test .core .app .ApplicationProvider ;
3134import androidx .test .ext .junit .runners .AndroidJUnit4 ;
3437import org .junit .Test ;
3538import org .junit .runner .RunWith ;
3639import org .mockito .Mock ;
40+ import org .mockito .Mockito ;
3741import org .mockito .MockitoAnnotations ;
3842
3943/** Unittest for DefaultRingtonePreference. */
4044@ RunWith (AndroidJUnit4 .class )
4145public class DefaultRingtonePreferenceTest {
4246
47+ private static final int OWNER_USER_ID = 1 ;
48+ private static final int OTHER_USER_ID = 10 ;
49+ private static final int INVALID_RINGTONE_TYPE = 0 ;
4350 private DefaultRingtonePreference mDefaultRingtonePreference ;
4451
4552 @ Mock
4653 private ContentResolver mContentResolver ;
4754 @ Mock
55+ private UserManager mUserManager ;
4856 private Uri mRingtoneUri ;
4957
5058 @ Before
5159 public void setUp () {
5260 MockitoAnnotations .initMocks (this );
5361
5462 Context context = spy (ApplicationProvider .getApplicationContext ());
55- doReturn (mContentResolver ).when (context ).getContentResolver ();
63+ mContentResolver = ContentResolver .wrap (Mockito .mock (ContentInterface .class ));
64+ when (context .getContentResolver ()).thenReturn (mContentResolver );
5665
5766 mDefaultRingtonePreference = spy (new DefaultRingtonePreference (context , null /* attrs */ ));
5867 doReturn (context ).when (mDefaultRingtonePreference ).getContext ();
68+
69+ // Use INVALID_RINGTONE_TYPE to return early in RingtoneManager.setActualDefaultRingtoneUri
5970 when (mDefaultRingtonePreference .getRingtoneType ())
60- .thenReturn (RingtoneManager .TYPE_RINGTONE );
61- mDefaultRingtonePreference .setUserId (1 );
71+ .thenReturn (INVALID_RINGTONE_TYPE );
72+
73+ mDefaultRingtonePreference .setUserId (OWNER_USER_ID );
6274 mDefaultRingtonePreference .mUserContext = context ;
75+ when (mDefaultRingtonePreference .isDefaultRingtone (any (Uri .class ))).thenReturn (false );
76+
77+ when (context .getSystemServiceName (UserManager .class )).thenReturn (Context .USER_SERVICE );
78+ when (context .getSystemService (Context .USER_SERVICE )).thenReturn (mUserManager );
79+
80+ mRingtoneUri = Uri .parse ("content://none" );
6381 }
6482
6583 @ Test
@@ -79,4 +97,53 @@ public void onSaveRingtone_notAudioMimeType_shouldNotSetRingtone() {
7997
8098 verify (mDefaultRingtonePreference , never ()).setActualDefaultRingtoneUri (mRingtoneUri );
8199 }
100+
101+ @ Test
102+ public void onSaveRingtone_notManagedProfile_shouldNotSetRingtone () {
103+ mRingtoneUri = Uri .parse ("content://" + OTHER_USER_ID + "@ringtone" );
104+ when (mContentResolver .getType (mRingtoneUri )).thenReturn ("audio/*" );
105+ when (mUserManager .isSameProfileGroup (OWNER_USER_ID , OTHER_USER_ID )).thenReturn (true );
106+ when (mUserManager .getProfileParent (UserHandle .of (OTHER_USER_ID ))).thenReturn (
107+ UserHandle .of (OWNER_USER_ID ));
108+ when (mUserManager .isManagedProfile (OTHER_USER_ID )).thenReturn (false );
109+
110+ mDefaultRingtonePreference .onSaveRingtone (mRingtoneUri );
111+
112+ verify (mDefaultRingtonePreference , never ()).setActualDefaultRingtoneUri (mRingtoneUri );
113+ }
114+
115+ @ Test
116+ public void onSaveRingtone_notSameUser_shouldNotSetRingtone () {
117+ mRingtoneUri = Uri .parse ("content://" + OTHER_USER_ID + "@ringtone" );
118+ when (mContentResolver .getType (mRingtoneUri )).thenReturn ("audio/*" );
119+ when (mUserManager .isSameProfileGroup (OWNER_USER_ID , OTHER_USER_ID )).thenReturn (false );
120+
121+ mDefaultRingtonePreference .onSaveRingtone (mRingtoneUri );
122+
123+ verify (mDefaultRingtonePreference , never ()).setActualDefaultRingtoneUri (mRingtoneUri );
124+ }
125+
126+ @ Test
127+ public void onSaveRingtone_isManagedProfile_shouldSetRingtone () {
128+ mRingtoneUri = Uri .parse ("content://" + OTHER_USER_ID + "@ringtone" );
129+ when (mContentResolver .getType (mRingtoneUri )).thenReturn ("audio/*" );
130+ when (mUserManager .isSameProfileGroup (OWNER_USER_ID , OTHER_USER_ID )).thenReturn (true );
131+ when (mUserManager .getProfileParent (UserHandle .of (OTHER_USER_ID ))).thenReturn (
132+ UserHandle .of (OWNER_USER_ID ));
133+ when (mUserManager .isManagedProfile (OTHER_USER_ID )).thenReturn (true );
134+
135+ mDefaultRingtonePreference .onSaveRingtone (mRingtoneUri );
136+
137+ verify (mDefaultRingtonePreference ).setActualDefaultRingtoneUri (mRingtoneUri );
138+ }
139+
140+ @ Test
141+ public void onSaveRingtone_defaultUri_shouldSetRingtone () {
142+ mRingtoneUri = Uri .parse ("default_ringtone" );
143+ when (mDefaultRingtonePreference .isDefaultRingtone (any (Uri .class ))).thenReturn (true );
144+
145+ mDefaultRingtonePreference .onSaveRingtone (mRingtoneUri );
146+
147+ verify (mDefaultRingtonePreference ).setActualDefaultRingtoneUri (mRingtoneUri );
148+ }
82149}
0 commit comments