blob: 29c98dcf5228df175afe17fffb242ce265ff5cf9 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.pm;
import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.set;
import android.app.Activity;
import android.content.ComponentName;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.ShortcutServiceInternal;
import android.content.res.XmlResourceParser;
import android.os.Looper;
import android.test.suitebuilder.annotation.SmallTest;
import com.android.server.LocalServices;
import java.util.List;
import java.util.Set;
/**
* Unit tests for all the IPackageManager related methods in {@link ShortcutService}.
*
* All the tests here actually talks to the real IPackageManager, so we can't test complicated
* cases. Instead we just make sure they all work reasonably without at least crashing.
*/
@SmallTest
public class ShortcutManagerTest5 extends BaseShortcutManagerTest {
private ShortcutService mShortcutService;
private String mMyPackage;
private int mMyUserId;
public static class ShortcutEnabled extends Activity {
}
public static class ShortcutDisabled extends Activity {
}
@Override
protected void setUp() throws Exception {
super.setUp();
LocalServices.removeServiceForTest(ShortcutServiceInternal.class);
mShortcutService = new ShortcutService(getTestContext(), Looper.getMainLooper(),
/* onyForPackageManagerApis */ true);
mMyPackage = getTestContext().getPackageName();
mMyUserId = android.os.Process.myUserHandle().getIdentifier();
}
public void testGetPackageUid() {
assertTrue(mShortcutService.injectGetPackageUid(
mMyPackage, mMyUserId) != 0);
assertEquals(-1, mShortcutService.injectGetPackageUid(
"no.such.package", mMyUserId));
}
public void testGetPackageInfo() {
PackageInfo pi = mShortcutService.getPackageInfo(
mMyPackage, mMyUserId, /*signature*/ false);
assertEquals(mMyPackage, pi.packageName);
assertNull(pi.signatures);
pi = mShortcutService.getPackageInfo(
mMyPackage, mMyUserId, /*signature*/ true);
assertEquals(mMyPackage, pi.packageName);
assertNotNull(pi.signatures);
pi = mShortcutService.getPackageInfo(
"no.such.package", mMyUserId, /*signature*/ true);
assertNull(pi);
}
public void testGetApplicationInfo() {
ApplicationInfo ai = mShortcutService.getApplicationInfo(
mMyPackage, mMyUserId);
assertEquals(mMyPackage, ai.packageName);
ai = mShortcutService.getApplicationInfo(
"no.such.package", mMyUserId);
assertNull(ai);
}
public void testGetActivityInfoWithMetadata() {
// Disabled activity
ActivityInfo ai = mShortcutService.getActivityInfoWithMetadata(
new ComponentName(mMyPackage, "ShortcutDisabled"), mMyUserId);
assertNull(ai);
// Nonexistent
ai = mShortcutService.getActivityInfoWithMetadata(
new ComponentName("no.such.package", "ShortcutDisabled"), mMyUserId);
assertNull(ai);
// Existent, with no metadata.
ai = mShortcutService.getActivityInfoWithMetadata(
new ComponentName(mMyPackage, "a.ShortcutEnabled"), mMyUserId);
assertEquals(mMyPackage, ai.packageName);
assertEquals("a.ShortcutEnabled", ai.name);
assertNull(ai.loadXmlMetaData(getTestContext().getPackageManager(),
"android.app.shortcuts"));
// Existent, with a shortcut metadata.
ai = mShortcutService.getActivityInfoWithMetadata(
new ComponentName(mMyPackage, "a.Shortcut1"), mMyUserId);
assertEquals(mMyPackage, ai.packageName);
assertEquals("a.Shortcut1", ai.name);
XmlResourceParser meta = ai.loadXmlMetaData(getTestContext().getPackageManager(),
"android.app.shortcuts");
assertNotNull(meta);
meta.close();
}
public void testGetInstalledPackages() {
List<PackageInfo> apks = mShortcutService.getInstalledPackages(mMyUserId);
Set<String> expectedPackages = set("com.android.settings", mMyPackage);
for (PackageInfo pi : apks) {
expectedPackages.remove(pi.packageName);
}
assertEquals(set(), expectedPackages);
}
public void testGetDefaultMainActivity() {
ComponentName cn = mShortcutService.injectGetDefaultMainActivity(
"com.android.settings", mMyUserId);
assertEquals(
ComponentName.unflattenFromString("com.android.settings/.Settings"),
cn);
// This package has no main activity.
assertNull(mShortcutService.injectGetDefaultMainActivity(
mMyPackage, mMyUserId));
// Nonexistent.
assertNull(mShortcutService.injectGetDefaultMainActivity(
"no.such.package", mMyUserId));
}
public void testIsMainActivity() {
assertTrue(mShortcutService.injectIsMainActivity(
ComponentName.unflattenFromString("com.android.settings/.Settings"), mMyUserId));
assertFalse(mShortcutService.injectIsMainActivity(
ComponentName.unflattenFromString("com.android.settings/.xxx"), mMyUserId));
assertFalse(mShortcutService.injectIsMainActivity(
ComponentName.unflattenFromString("no.such.package/.xxx"), mMyUserId));
assertFalse(mShortcutService.injectIsMainActivity(
new ComponentName(mMyPackage, "a.DisabledMain"), mMyUserId));
assertFalse(mShortcutService.injectIsMainActivity(
new ComponentName(mMyPackage, "a.UnexportedMain"), mMyUserId));
}
public void testGetMainActivities() {
assertEquals(1, mShortcutService.injectGetMainActivities(
"com.android.settings", mMyUserId).size());
// This APK has no main activities.
assertEquals(0, mShortcutService.injectGetMainActivities(
mMyPackage, mMyUserId).size());
}
public void testIsActivityEnabledAndExported() {
assertTrue(mShortcutService.injectIsActivityEnabledAndExported(
ComponentName.unflattenFromString("com.android.settings/.Settings"), mMyUserId));
assertFalse(mShortcutService.injectIsActivityEnabledAndExported(
ComponentName.unflattenFromString("com.android.settings/.xxx"), mMyUserId));
assertFalse(mShortcutService.injectIsActivityEnabledAndExported(
ComponentName.unflattenFromString("no.such.package/.xxx"), mMyUserId));
assertTrue(mShortcutService.injectIsActivityEnabledAndExported(
new ComponentName(mMyPackage, "com.android.server.pm.ShortcutTestActivity"),
mMyUserId));
assertTrue(mShortcutService.injectIsActivityEnabledAndExported(
new ComponentName(mMyPackage, "a.ShortcutEnabled"), mMyUserId));
assertFalse(mShortcutService.injectIsActivityEnabledAndExported(
new ComponentName(mMyPackage, "a.ShortcutDisabled"), mMyUserId));
assertFalse(mShortcutService.injectIsActivityEnabledAndExported(
new ComponentName(mMyPackage, "a.ShortcutUnexported"), mMyUserId));
}
}