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 private static final String TILE_SERVICE_NAME = 54 "com.example.shortcut.target.TileService"; 55 56 private Context mTargetContext; 57 private PackageManager mPackageManager; 58 private ComponentName mComponentName; 59 private AccessibilityShortcutInfo mShortcutInfo; 60 61 @Before setUp()62 public void setUp() { 63 mTargetContext = InstrumentationRegistry.getInstrumentation() 64 .getTargetContext(); 65 mPackageManager = mTargetContext.getPackageManager(); 66 mComponentName = new ComponentName(mTargetContext, AccessibilityTestActivity.class); 67 mShortcutInfo = getAccessibilityShortcutInfo(mComponentName); 68 assertNotNull("Can't find " + mComponentName, mShortcutInfo); 69 } 70 71 @Test testDescription()72 public void testDescription() { 73 final String description = mTargetContext.getResources() 74 .getString(R.string.accessibility_shortcut_description); 75 76 assertNotNull("Can't find description string", description); 77 assertThat("Description is not correct", 78 mShortcutInfo.loadDescription(mPackageManager), is(description)); 79 } 80 81 @Test testSummary()82 public void testSummary() { 83 final String summary = mTargetContext.getResources() 84 .getString(R.string.accessibility_shortcut_summary); 85 86 assertNotNull("Can't find summary string", summary); 87 assertThat("Summary is not correct", 88 mShortcutInfo.loadSummary(mPackageManager), is(summary)); 89 } 90 91 @Test testIntro()92 public void testIntro() { 93 final String intro = mTargetContext.getResources() 94 .getString(R.string.accessibility_shortcut_intro); 95 96 assertNotNull("Can't find intro string", intro); 97 assertThat("Intro is not correct", 98 mShortcutInfo.loadIntro(mPackageManager), is(intro)); 99 } 100 101 @Test testAnimatedImageRes()102 public void testAnimatedImageRes() { 103 assertThat("Animated image resource id is not correct", 104 mShortcutInfo.getAnimatedImageRes(), is(R.drawable.bitmap_drawable)); 105 } 106 107 @Test testLoadAnimatedImage()108 public void testLoadAnimatedImage() { 109 assertNotNull("Can't find animated image", 110 mShortcutInfo.loadAnimatedImage(mTargetContext)); 111 } 112 113 @Test testHtmlDescription()114 public void testHtmlDescription() { 115 final String htmlDescription = mTargetContext.getResources() 116 .getString(R.string.accessibility_shortcut_html_description); 117 118 assertNotNull("Can't find html description string", htmlDescription); 119 assertThat("Html description is not correct", 120 mShortcutInfo.loadHtmlDescription(mPackageManager), is(htmlDescription)); 121 } 122 123 @Test testSettingsActivity()124 public void testSettingsActivity() { 125 assertThat("Settings activity is not correct", 126 mShortcutInfo.getSettingsActivityName(), is(SETTINGS_ACTIVITY_NAME)); 127 } 128 129 @Test testTileService()130 public void testTileService() { 131 assertThat("Tile service is not correct", 132 mShortcutInfo.getTileServiceName(), is(TILE_SERVICE_NAME)); 133 } 134 135 136 @Test testEquals()137 public void testEquals() { 138 assertTrue(mShortcutInfo.equals(mShortcutInfo)); 139 assertFalse(mShortcutInfo.equals(null)); 140 assertFalse(mShortcutInfo.equals(new Object())); 141 142 final AccessibilityShortcutInfo sameCopy = getAccessibilityShortcutInfo( 143 mComponentName); 144 assertTrue(mShortcutInfo != sameCopy); 145 assertTrue(mShortcutInfo.hashCode() == sameCopy.hashCode()); 146 assertTrue(mShortcutInfo.getComponentName().equals(sameCopy.getComponentName())); 147 assertTrue(mShortcutInfo.equals(sameCopy)); 148 } 149 150 @Test testToString()151 public void testToString() { 152 assertNotNull(mShortcutInfo.toString()); 153 } 154 getAccessibilityShortcutInfo(ComponentName componentName)155 private AccessibilityShortcutInfo getAccessibilityShortcutInfo(ComponentName componentName) { 156 final AccessibilityManager accessibilityManager = (AccessibilityManager) mTargetContext 157 .getSystemService(Context.ACCESSIBILITY_SERVICE); 158 final List<AccessibilityShortcutInfo> infoList = accessibilityManager 159 .getInstalledAccessibilityShortcutListAsUser( 160 mTargetContext, mTargetContext.getUserId()); 161 for (AccessibilityShortcutInfo info : infoList) { 162 final ActivityInfo activityInfo = info.getActivityInfo(); 163 if (componentName.equals(activityInfo.getComponentName())) { 164 return info; 165 } 166 } 167 return null; 168 } 169 } 170