1 /* 2 * Copyright (C) 2019 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 android.accessibilityservice; 18 19 import static org.hamcrest.Matchers.is; 20 import static org.junit.Assert.assertFalse; 21 import static org.junit.Assert.assertNotNull; 22 import static org.junit.Assert.assertThat; 23 import static org.junit.Assert.assertTrue; 24 25 import android.content.ComponentName; 26 import android.content.Context; 27 import android.content.pm.ActivityInfo; 28 import android.content.pm.PackageManager; 29 import android.view.accessibility.AccessibilityManager; 30 import android.view.accessibility.AccessibilityTestActivity; 31 32 import androidx.test.filters.SmallTest; 33 import androidx.test.platform.app.InstrumentationRegistry; 34 import androidx.test.runner.AndroidJUnit4; 35 36 import com.android.frameworks.coretests.R; 37 38 import org.junit.Before; 39 import org.junit.Test; 40 import org.junit.runner.RunWith; 41 42 import java.util.List; 43 44 /** 45 * AccessibilityShortcutInfo can only be created by system. Verify the instance creation and 46 * basic function here. 47 */ 48 @SmallTest 49 @RunWith(AndroidJUnit4.class) 50 public class AccessibilityShortcutInfoTest { 51 private static final String SETTINGS_ACTIVITY_NAME = 52 "com.example.shortcut.target.SettingsActivity"; 53 54 private Context mTargetContext; 55 private PackageManager mPackageManager; 56 private ComponentName mComponentName; 57 private AccessibilityShortcutInfo mShortcutInfo; 58 59 @Before setUp()60 public void setUp() { 61 mTargetContext = InstrumentationRegistry.getInstrumentation() 62 .getTargetContext(); 63 mPackageManager = mTargetContext.getPackageManager(); 64 mComponentName = new ComponentName(mTargetContext, AccessibilityTestActivity.class); 65 mShortcutInfo = getAccessibilityShortcutInfo(mComponentName); 66 assertNotNull("Can't find " + mComponentName, mShortcutInfo); 67 } 68 69 @Test testDescription()70 public void testDescription() { 71 final String description = mTargetContext.getResources() 72 .getString(R.string.accessibility_shortcut_description); 73 74 assertNotNull("Can't find description string", description); 75 assertThat("Description is not correct", 76 mShortcutInfo.loadDescription(mPackageManager), is(description)); 77 } 78 79 @Test testSummary()80 public void testSummary() { 81 final String summary = mTargetContext.getResources() 82 .getString(R.string.accessibility_shortcut_summary); 83 84 assertNotNull("Can't find summary string", summary); 85 assertThat("Summary is not correct", 86 mShortcutInfo.loadSummary(mPackageManager), is(summary)); 87 } 88 89 @Test testAnimatedImageRes()90 public void testAnimatedImageRes() { 91 assertThat("Animated image resource id is not correct", 92 mShortcutInfo.getAnimatedImageRes(), is(R.drawable.bitmap_drawable)); 93 } 94 95 @Test testLoadAnimatedImage()96 public void testLoadAnimatedImage() { 97 assertNotNull("Can't find animated image", 98 mShortcutInfo.loadAnimatedImage(mTargetContext)); 99 } 100 101 @Test testHtmlDescription()102 public void testHtmlDescription() { 103 final String htmlDescription = mTargetContext.getResources() 104 .getString(R.string.accessibility_shortcut_html_description); 105 106 assertNotNull("Can't find html description string", htmlDescription); 107 assertThat("Html description is not correct", 108 mShortcutInfo.loadHtmlDescription(mPackageManager), is(htmlDescription)); 109 } 110 111 @Test testSettingsActivity()112 public void testSettingsActivity() { 113 assertThat("Settings Activity is not correct", 114 mShortcutInfo.getSettingsActivityName(), is(SETTINGS_ACTIVITY_NAME)); 115 } 116 117 @Test testEquals()118 public void testEquals() { 119 assertTrue(mShortcutInfo.equals(mShortcutInfo)); 120 assertFalse(mShortcutInfo.equals(null)); 121 assertFalse(mShortcutInfo.equals(new Object())); 122 123 final AccessibilityShortcutInfo sameCopy = getAccessibilityShortcutInfo( 124 mComponentName); 125 assertTrue(mShortcutInfo != sameCopy); 126 assertTrue(mShortcutInfo.hashCode() == sameCopy.hashCode()); 127 assertTrue(mShortcutInfo.getComponentName().equals(sameCopy.getComponentName())); 128 assertTrue(mShortcutInfo.equals(sameCopy)); 129 } 130 131 @Test testToString()132 public void testToString() { 133 assertNotNull(mShortcutInfo.toString()); 134 } 135 getAccessibilityShortcutInfo(ComponentName componentName)136 private AccessibilityShortcutInfo getAccessibilityShortcutInfo(ComponentName componentName) { 137 final AccessibilityManager accessibilityManager = (AccessibilityManager) mTargetContext 138 .getSystemService(Context.ACCESSIBILITY_SERVICE); 139 final List<AccessibilityShortcutInfo> infoList = accessibilityManager 140 .getInstalledAccessibilityShortcutListAsUser( 141 mTargetContext, mTargetContext.getUserId()); 142 for (AccessibilityShortcutInfo info : infoList) { 143 final ActivityInfo activityInfo = info.getActivityInfo(); 144 if (componentName.equals(activityInfo.getComponentName())) { 145 return info; 146 } 147 } 148 return null; 149 } 150 } 151