1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.contacts.editor; 18 19 import android.content.Context; 20 import android.media.RingtoneManager; 21 import android.net.Uri; 22 import android.os.Build; 23 import android.provider.Settings; 24 import android.test.AndroidTestCase; 25 import android.test.suitebuilder.annotation.SmallTest; 26 27 import com.android.contacts.R; 28 import com.android.contacts.model.account.AccountDisplayInfo; 29 import com.android.contacts.model.account.AccountInfo; 30 import com.android.contacts.model.account.AccountType; 31 import com.android.contacts.model.account.AccountWithDataSet; 32 import com.android.contacts.model.account.DeviceLocalAccountType; 33 import com.android.contacts.tests.FakeAccountType; 34 35 /** 36 * Tests {@link EditorUiUtils}. 37 */ 38 @SmallTest 39 public class EditorUiUtilsTest extends AndroidTestCase { 40 41 private static final String ACCOUNT_NAME = "somebody (at) lunkedin.com"; 42 private static final String DISPLAY_LABEL = "LunkedIn"; 43 44 private static final String GOOGLE_ACCOUNT_NAME = "somebody (at) gmail.com"; 45 private static final String GOOGLE_DISPLAY_LABEL = "Google"; 46 47 private static final String RINGTONE = "content://media/external/audio/media/31"; 48 49 private static final AccountWithDataSet ACCOUNT = 50 new AccountWithDataSet(ACCOUNT_NAME, "some.account.type", null); 51 private static final AccountWithDataSet GOOGLE_ACCOUNT = 52 new AccountWithDataSet(ACCOUNT_NAME, "com.google", null); 53 54 private static final class MockAccountType extends AccountType { 55 56 private final String mDisplayLabel; 57 58 private MockAccountType(String displayLabel) { 59 mDisplayLabel = displayLabel; 60 } 61 62 @Override 63 public boolean areContactsWritable() { 64 return false; 65 } 66 67 @Override 68 public boolean isGroupMembershipEditable() { 69 return false; 70 } 71 72 @Override 73 public CharSequence getDisplayLabel(Context context) { 74 return mDisplayLabel; 75 } 76 } 77 78 public void testGetProfileAccountInfo_NonLocalAccount() { 79 final AccountInfo account = new AccountInfo(new AccountDisplayInfo(ACCOUNT, ACCOUNT_NAME, 80 DISPLAY_LABEL, null, /* isDeviceAccount */ false), 81 new FakeAccountType("com.example.account")); 82 83 final String label = EditorUiUtils.getAccountHeaderLabelForMyProfile(getContext(), 84 account); 85 86 // My LunkedIn profile 87 final String expected = getContext() 88 .getString(R.string.external_profile_title, DISPLAY_LABEL); 89 assertEquals(expected, label); 90 } 91 92 93 public void testGetProfileAccountInfo_DeviceLocalAccount() { 94 final AccountInfo account = new AccountInfo(new AccountDisplayInfo(ACCOUNT, "Device", 95 "Device", null, true), new DeviceLocalAccountType(mContext)); 96 97 final String label = EditorUiUtils.getAccountHeaderLabelForMyProfile(getContext(), 98 account); 99 100 // "My local profile" 101 final String expected = getContext().getString(R.string.local_profile_title); 102 assertEquals(expected, label); 103 } 104 105 public void testGetAccountInfo_AccountType_NonGoogle() { 106 final AccountDisplayInfo account = new AccountDisplayInfo(ACCOUNT, ACCOUNT_NAME, 107 DISPLAY_LABEL, /*icon*/ null, /*isDeviceAccount*/ false); 108 109 final String label = EditorUiUtils.getAccountTypeHeaderLabel(getContext(), account); 110 111 // LunkedIn Contact 112 final String expected = getContext().getString(R.string.account_type_format, DISPLAY_LABEL); 113 assertEquals(expected, label); 114 } 115 116 public void testGetAccountInfo_AccountType_Google() { 117 final AccountDisplayInfo account = new AccountDisplayInfo(GOOGLE_ACCOUNT, ACCOUNT_NAME, 118 GOOGLE_DISPLAY_LABEL, /*icon*/ null, /*isDeviceAccount*/ false); 119 120 final String label = EditorUiUtils.getAccountTypeHeaderLabel(getContext(), account); 121 122 // Google Account 123 final String expected = getContext().getString(R.string.google_account_type_format, 124 GOOGLE_DISPLAY_LABEL); 125 assertEquals(expected, label); 126 } 127 128 public void testGetAccountInfo_AccountType_DeviceAccount() { 129 final AccountWithDataSet deviceAccount = AccountWithDataSet.getNullAccount(); 130 final AccountDisplayInfo account = new AccountDisplayInfo(deviceAccount, "Device", 131 "Device", /*icon*/ null, /*isDeviceAccount*/ true); 132 133 final String label = EditorUiUtils.getAccountTypeHeaderLabel(getContext(), account); 134 135 // "Device" 136 final String expected = getContext().getString(R.string.account_phone); 137 assertEquals(expected, label); 138 } 139 140 public void testGetRingtongStrFromUri_lessThanOrEqualsToM() { 141 final int currentVersion = Build.VERSION_CODES.M; 142 assertNull(EditorUiUtils.getRingtoneStringFromUri(null, currentVersion)); 143 assertNull(EditorUiUtils.getRingtoneStringFromUri(Settings.System.DEFAULT_RINGTONE_URI, 144 currentVersion)); 145 assertEquals(RINGTONE, EditorUiUtils.getRingtoneStringFromUri(Uri.parse(RINGTONE), 146 currentVersion)); 147 } 148 149 public void testGetRingtongStrFromUri_nOrGreater() { 150 final int currentVersion = Build.VERSION_CODES.M + 1; 151 assertEquals("", EditorUiUtils.getRingtoneStringFromUri(null, currentVersion)); 152 assertNull(EditorUiUtils.getRingtoneStringFromUri(Settings.System.DEFAULT_RINGTONE_URI, 153 currentVersion)); 154 assertEquals(RINGTONE, EditorUiUtils.getRingtoneStringFromUri(Uri.parse(RINGTONE), 155 currentVersion)); 156 } 157 158 public void testGetRingtongUriFromStr_lessThanOrEqualsToM() { 159 final int currentVersion = Build.VERSION_CODES.M; 160 assertEquals(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), EditorUiUtils 161 .getRingtoneUriFromString(null, currentVersion)); 162 assertEquals(Uri.parse(""), EditorUiUtils.getRingtoneUriFromString("", currentVersion)); 163 assertEquals(Uri.parse(RINGTONE), EditorUiUtils.getRingtoneUriFromString(RINGTONE, 164 currentVersion)); 165 } 166 167 public void testGetRingtongUriFromStr_nOrGreater() { 168 final int currentVersion = Build.VERSION_CODES.M + 1; 169 assertEquals(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), EditorUiUtils 170 .getRingtoneUriFromString(null, currentVersion)); 171 assertNull(EditorUiUtils.getRingtoneUriFromString("", currentVersion)); 172 assertEquals(Uri.parse(RINGTONE), EditorUiUtils.getRingtoneUriFromString(RINGTONE, 173 currentVersion)); 174 } 175 176 private AccountDisplayInfo createDisplayableAccount() { 177 return new AccountDisplayInfo(ACCOUNT, ACCOUNT_NAME, DISPLAY_LABEL, null, false); 178 } 179 180 } 181