diff options
Diffstat (limited to 'tests/AndroidTests/src/com/android/unit_tests/ComponentTest.java')
-rw-r--r-- | tests/AndroidTests/src/com/android/unit_tests/ComponentTest.java | 738 |
1 files changed, 738 insertions, 0 deletions
diff --git a/tests/AndroidTests/src/com/android/unit_tests/ComponentTest.java b/tests/AndroidTests/src/com/android/unit_tests/ComponentTest.java new file mode 100644 index 0000000..08fe742 --- /dev/null +++ b/tests/AndroidTests/src/com/android/unit_tests/ComponentTest.java @@ -0,0 +1,738 @@ +/* + * Copyright (C) 2008 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.unit_tests; + +import com.android.unit_tests.enabled_app.DisabledActivity; +import com.android.unit_tests.enabled_app.DisabledProvider; +import com.android.unit_tests.enabled_app.DisabledReceiver; +import com.android.unit_tests.enabled_app.DisabledService; +import com.android.unit_tests.enabled_app.EnabledActivity; +import com.android.unit_tests.enabled_app.EnabledProvider; +import com.android.unit_tests.enabled_app.EnabledReceiver; +import com.android.unit_tests.enabled_app.EnabledService; + +import android.content.ComponentName; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ComponentInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.test.suitebuilder.annotation.LargeTest; +import android.test.suitebuilder.annotation.MediumTest; +import android.test.suitebuilder.annotation.SmallTest; +import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; +import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED; +import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED; +import static android.content.pm.PackageManager.GET_DISABLED_COMPONENTS; +import android.content.pm.ProviderInfo; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.test.AndroidTestCase; + +import java.util.List; + +/** + * Tests for disabling and enabling application components. + * + * Note: These tests are on the slow side. This is probably because most of the tests trigger the + * package settings file to get written out by the PackageManagerService. Better, more unit-y test + * would fix this. + */ + +public class ComponentTest extends AndroidTestCase { + + private PackageManager mPackageManager; + private Intent mDisabledActivityIntent; + private Intent mEnabledActivityIntent; + private Intent mDisabledServiceIntent; + private Intent mEnabledServiceIntent; + private Intent mDisabledReceiverIntent; + private Intent mEnabledReceiverIntent; + private Intent mDisabledAppEnabledActivityIntent; + + private static final String ENABLED_PACKAGENAME = + "com.android.unit_tests.enabled_app"; + private static final String DISABLED_PACKAGENAME = + "com.android.unit_tests.disabled_app"; + private static final String DISABLED_ACTIVITY_CLASSNAME = + DisabledActivity.class.getName(); + private static final ComponentName DISABLED_ACTIVITY_COMPONENTNAME = + new ComponentName(ENABLED_PACKAGENAME, DISABLED_ACTIVITY_CLASSNAME); + private static final String ENABLED_ACTIVITY_CLASSNAME = + EnabledActivity.class.getName(); + private static final ComponentName ENABLED_ACTIVITY_COMPONENTNAME = + new ComponentName(ENABLED_PACKAGENAME, ENABLED_ACTIVITY_CLASSNAME); + private static final String DISABLED_SERVICE_CLASSNAME = + DisabledService.class.getName(); + private static final ComponentName DISABLED_SERVICE_COMPONENTNAME = + new ComponentName(ENABLED_PACKAGENAME, DISABLED_SERVICE_CLASSNAME); + private static final String DISABLED_PROVIDER_CLASSNAME = + DisabledProvider.class.getName(); + private static final ComponentName DISABLED_PROVIDER_COMPONENTNAME = + new ComponentName(ENABLED_PACKAGENAME, DISABLED_PROVIDER_CLASSNAME); + private static final String DISABLED_PROVIDER_NAME = DisabledProvider.class.getName(); + private static final String ENABLED_SERVICE_CLASSNAME = + EnabledService.class.getName(); + private static final ComponentName ENABLED_SERVICE_COMPONENTNAME = + new ComponentName(ENABLED_PACKAGENAME, ENABLED_SERVICE_CLASSNAME); + private static final String DISABLED_RECEIVER_CLASSNAME = + DisabledReceiver.class.getName(); + private static final ComponentName DISABLED_RECEIVER_COMPONENTNAME = + new ComponentName(ENABLED_PACKAGENAME, DISABLED_RECEIVER_CLASSNAME); + private static final String ENABLED_RECEIVER_CLASSNAME = + EnabledReceiver.class.getName(); + private static final ComponentName ENABLED_RECEIVER_COMPONENTNAME = + new ComponentName(ENABLED_PACKAGENAME, ENABLED_RECEIVER_CLASSNAME); + private static final String ENABLED_PROVIDER_CLASSNAME = + EnabledProvider.class.getName(); + private static final ComponentName ENABLED_PROVIDER_COMPONENTNAME = + new ComponentName(ENABLED_PACKAGENAME, ENABLED_PROVIDER_CLASSNAME); + private static final String ENABLED_PROVIDER_NAME = EnabledProvider.class.getName(); + private static final String DISABLED_APP_ENABLED_ACTIVITY_CLASSNAME = + com.android.unit_tests.disabled_app.EnabledActivity.class.getName(); + private static final ComponentName DISABLED_APP_ENABLED_ACTIVITY_COMPONENTNAME = + new ComponentName(DISABLED_PACKAGENAME, DISABLED_APP_ENABLED_ACTIVITY_CLASSNAME); + private static final String TEST_CATEGORY = + "com.android.unit_tests.enabled_app.TEST_CATEGORY"; + + @Override + protected void setUp() throws Exception { + super.setUp(); + mPackageManager = mContext.getPackageManager(); + mDisabledActivityIntent = new Intent(); + mDisabledActivityIntent.setComponent(DISABLED_ACTIVITY_COMPONENTNAME); + mEnabledActivityIntent = new Intent(); + mEnabledActivityIntent.setComponent(ENABLED_ACTIVITY_COMPONENTNAME); + mDisabledServiceIntent = new Intent(); + mDisabledServiceIntent.setComponent(DISABLED_SERVICE_COMPONENTNAME); + mEnabledServiceIntent = new Intent(); + mEnabledServiceIntent.setComponent(ENABLED_SERVICE_COMPONENTNAME); + mDisabledReceiverIntent = new Intent("android.intent.action.ENABLED_APP_DISABLED_RECEIVER"); + mDisabledReceiverIntent.setComponent(DISABLED_RECEIVER_COMPONENTNAME); + mEnabledReceiverIntent = new Intent("android.intent.action.ENABLED_APP_ENABLED_RECEIVER"); + mEnabledReceiverIntent.setComponent(ENABLED_RECEIVER_COMPONENTNAME); + mDisabledAppEnabledActivityIntent = new Intent(); + mDisabledAppEnabledActivityIntent.setComponent(DISABLED_APP_ENABLED_ACTIVITY_COMPONENTNAME); + } + + @SmallTest + public void testContextNotNull() throws Exception { + assertNotNull(mContext); + } + + @MediumTest + public void testResolveDisabledActivity() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = mPackageManager.resolveActivity(mDisabledActivityIntent, 0); + assertNull(info); + + final ResolveInfo info2 = mPackageManager.resolveActivity( + mDisabledActivityIntent, GET_DISABLED_COMPONENTS); + assertNotNull(info2); + assertNotNull(info2.activityInfo); + assertFalse(info2.activityInfo.enabled); + } + + @MediumTest + public void testResolveEnabledActivity() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = mPackageManager.resolveActivity(mEnabledActivityIntent, 0); + assertNotNull(info); + assertNotNull(info); + assertNotNull(info.activityInfo); + assertTrue(info.activityInfo.enabled); + } + + @MediumTest + public void testQueryDisabledActivity() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final List<ResolveInfo> infoList = + mPackageManager.queryIntentActivities(mDisabledActivityIntent, 0); + assertEquals(0, infoList.size()); + + final List<ResolveInfo> infoList2 = + mPackageManager.queryIntentActivities(mDisabledActivityIntent, + GET_DISABLED_COMPONENTS); + assertEquals(1, infoList2.size()); + final ResolveInfo info = infoList2.get(0); + assertNotNull(info); + assertNotNull(info.activityInfo); + assertFalse(info.activityInfo.enabled); + } + + @MediumTest + public void testQueryEnabledActivity() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final List<ResolveInfo> infoList = + mPackageManager.queryIntentActivities(mEnabledActivityIntent, 0); + assertEquals(1, infoList.size()); + final ResolveInfo info = infoList.get(0); + assertNotNull(info); + assertNotNull(info.activityInfo); + assertTrue(info.activityInfo.enabled); + } + + @MediumTest + public void testGetDisabledActivityInfo() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + try { + mPackageManager.getActivityInfo(DISABLED_ACTIVITY_COMPONENTNAME, 0); + fail("Attempt to get info on disabled component should fail."); + } catch (PackageManager.NameNotFoundException e) { + // expected + } + + final ActivityInfo activityInfo = + mPackageManager.getActivityInfo(DISABLED_ACTIVITY_COMPONENTNAME, + GET_DISABLED_COMPONENTS); + assertNotNull(activityInfo); + assertFalse(activityInfo.enabled); + } + + @MediumTest + public void testGetEnabledActivityInfo() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + ActivityInfo activityInfo = + mPackageManager.getActivityInfo(ENABLED_ACTIVITY_COMPONENTNAME, 0); + assertNotNull(activityInfo); + assertTrue(activityInfo.enabled); + } + + @MediumTest + public void testEnableActivity() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = mPackageManager.resolveActivity(mDisabledActivityIntent, 0); + assertNull(info); + mPackageManager.setComponentEnabledSetting(DISABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + final ResolveInfo info2 = + mPackageManager.resolveActivity(mDisabledActivityIntent, + 0); + assertNotNull(info2); + assertNotNull(info2.activityInfo); + assertFalse(info2.activityInfo.enabled); + + final List<ResolveInfo> infoList = + mPackageManager.queryIntentActivities(mDisabledActivityIntent, 0); + assertEquals(1, infoList.size()); + } + + @LargeTest + public void testDisableActivity() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = mPackageManager.resolveActivity(mEnabledActivityIntent, 0); + assertNotNull(info); + assertNotNull(info.activityInfo); + mPackageManager.setComponentEnabledSetting(ENABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + final ResolveInfo info2 = + mPackageManager.resolveActivity(mEnabledActivityIntent, + 0); + assertNull(info2); + + final ResolveInfo info3 = mPackageManager.resolveActivity(mEnabledActivityIntent, + GET_DISABLED_COMPONENTS); + assertNotNull(info3); + assertNotNull(info3.activityInfo); + assertTrue(info3.activityInfo.enabled); + + final List<ResolveInfo> infoList = + mPackageManager.queryIntentActivities(mEnabledActivityIntent, 0); + assertEquals(0, infoList.size()); + } + + @MediumTest + public void testResolveDisabledService() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = mPackageManager.resolveService(mDisabledServiceIntent, 0); + assertNull(info); + + final ResolveInfo info2 = mPackageManager.resolveService( + mDisabledServiceIntent, GET_DISABLED_COMPONENTS); + assertNotNull(info2); + assertNotNull(info2.serviceInfo); + assertFalse(info2.serviceInfo.enabled); + } + + @MediumTest + public void testResolveEnabledService() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = mPackageManager.resolveService(mEnabledServiceIntent, 0); + assertNotNull(info); + assertNotNull(info); + assertNotNull(info.serviceInfo); + assertTrue(info.serviceInfo.enabled); + } + + @MediumTest + public void testQueryDisabledService() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final List<ResolveInfo> infoList = + mPackageManager.queryIntentServices(mDisabledServiceIntent, 0); + assertEquals(0, infoList.size()); + + final List<ResolveInfo> infoList2 = + mPackageManager.queryIntentServices(mDisabledServiceIntent, + GET_DISABLED_COMPONENTS); + assertEquals(1, infoList2.size()); + final ResolveInfo info = infoList2.get(0); + assertNotNull(info); + assertNotNull(info.serviceInfo); + assertFalse(info.serviceInfo.enabled); + } + + @MediumTest + public void testQueryEnabledService() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final List<ResolveInfo> infoList = + mPackageManager.queryIntentServices(mEnabledServiceIntent, 0); + assertEquals(1, infoList.size()); + final ResolveInfo info = infoList.get(0); + assertNotNull(info); + assertNotNull(info.serviceInfo); + assertTrue(info.serviceInfo.enabled); + } + + @MediumTest + public void testGetDisabledServiceInfo() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + try { + mPackageManager.getServiceInfo(DISABLED_SERVICE_COMPONENTNAME, 0); + fail("Attempt to get info on disabled component should fail."); + } catch (PackageManager.NameNotFoundException e) { + // expected + } + + final ServiceInfo serviceInfo = + mPackageManager.getServiceInfo(DISABLED_SERVICE_COMPONENTNAME, + GET_DISABLED_COMPONENTS); + assertNotNull(serviceInfo); + assertFalse(serviceInfo.enabled); + } + + @MediumTest + public void testGetEnabledServiceInfo() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + ServiceInfo serviceInfo = + mPackageManager.getServiceInfo(ENABLED_SERVICE_COMPONENTNAME, 0); + assertNotNull(serviceInfo); + assertTrue(serviceInfo.enabled); + } + + @MediumTest + public void testEnableService() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = mPackageManager.resolveService(mDisabledServiceIntent, 0); + assertNull(info); + mPackageManager.setComponentEnabledSetting(DISABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + final ResolveInfo info2 = + mPackageManager.resolveService(mDisabledServiceIntent, + 0); + assertNotNull(info2); + assertNotNull(info2.serviceInfo); + assertFalse(info2.serviceInfo.enabled); + } + + @LargeTest + public void testDisableService() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = mPackageManager.resolveService(mEnabledServiceIntent, 0); + assertNotNull(info); + assertNotNull(info.serviceInfo); + mPackageManager.setComponentEnabledSetting(ENABLED_SERVICE_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + final ResolveInfo info2 = + mPackageManager.resolveService(mEnabledServiceIntent, + 0); + assertNull(info2); + + final ResolveInfo info3 = mPackageManager.resolveService(mEnabledServiceIntent, + GET_DISABLED_COMPONENTS); + assertNotNull(info3); + assertNotNull(info3.serviceInfo); + assertTrue(info3.serviceInfo.enabled); + } + + @MediumTest + public void testQueryDisabledReceiver() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_RECEIVER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final List<ResolveInfo> infoList = + mPackageManager.queryBroadcastReceivers(mDisabledReceiverIntent, 0); + assertEquals(0, infoList.size()); + + final List<ResolveInfo> infoList2 = + mPackageManager.queryBroadcastReceivers(mDisabledReceiverIntent, + GET_DISABLED_COMPONENTS); + assertEquals(1, infoList2.size()); + final ResolveInfo info = infoList2.get(0); + assertNotNull(info); + assertNotNull(info.activityInfo); + assertFalse(info.activityInfo.enabled); + } + + @MediumTest + public void testQueryEnabledReceiver() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_RECEIVER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final List<ResolveInfo> infoList = + mPackageManager.queryBroadcastReceivers(mEnabledReceiverIntent, 0); + assertEquals(1, infoList.size()); + final ResolveInfo info = infoList.get(0); + assertNotNull(info); + assertNotNull(info.activityInfo); + assertTrue(info.activityInfo.enabled); + } + + @MediumTest + public void testGetDisabledReceiverInfo() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_RECEIVER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + try { + mPackageManager.getReceiverInfo(DISABLED_RECEIVER_COMPONENTNAME, 0); + fail("Attempt to get info on disabled component should fail."); + } catch (PackageManager.NameNotFoundException e) { + // expected + } + + final ActivityInfo activityInfo = + mPackageManager.getReceiverInfo(DISABLED_RECEIVER_COMPONENTNAME, + GET_DISABLED_COMPONENTS); + assertNotNull(activityInfo); + assertFalse(activityInfo.enabled); + } + + @MediumTest + public void testGetEnabledReceiverInfo() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_RECEIVER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + ActivityInfo activityInfo = + mPackageManager.getReceiverInfo(ENABLED_RECEIVER_COMPONENTNAME, 0); + assertNotNull(activityInfo); + assertTrue(activityInfo.enabled); + } + + @MediumTest + public void testEnableReceiver() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_RECEIVER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + try { + mPackageManager.getReceiverInfo(DISABLED_RECEIVER_COMPONENTNAME, 0); + fail("Attempt to get info on disabled component should fail."); + } catch (PackageManager.NameNotFoundException e) { + // expected + } + + mPackageManager.setComponentEnabledSetting(DISABLED_RECEIVER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + ActivityInfo activityInfo = + mPackageManager.getReceiverInfo(DISABLED_RECEIVER_COMPONENTNAME, 0); + assertNotNull(activityInfo); + assertFalse(activityInfo.enabled); + } + + @MediumTest + public void testDisableReceiver() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_RECEIVER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + ActivityInfo activityInfo = + mPackageManager.getReceiverInfo(ENABLED_RECEIVER_COMPONENTNAME, 0); + assertNotNull(activityInfo); + assertTrue(activityInfo.enabled); + mPackageManager.setComponentEnabledSetting(DISABLED_RECEIVER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + try { + mPackageManager.getReceiverInfo(DISABLED_RECEIVER_COMPONENTNAME, 0); + fail("Attempt to get info on disabled component should fail."); + } catch (PackageManager.NameNotFoundException e) { + // expected + } + } + + @MediumTest + public void testResolveEnabledProvider() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_PROVIDER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + ProviderInfo providerInfo = + mPackageManager.resolveContentProvider(ENABLED_PROVIDER_NAME, 0); + assertNotNull(providerInfo); + assertTrue(providerInfo.enabled); + } + + @MediumTest + public void testResolveDisabledProvider() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_PROVIDER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + ProviderInfo providerInfo = + mPackageManager.resolveContentProvider(DISABLED_PROVIDER_NAME, 0); + assertNull(providerInfo); + ProviderInfo providerInfo2 = + mPackageManager.resolveContentProvider(DISABLED_PROVIDER_NAME, + GET_DISABLED_COMPONENTS); + assertNotNull(providerInfo2); + assertFalse(providerInfo2.enabled); + } + + @MediumTest + public void testEnableProvider() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_PROVIDER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + ProviderInfo providerInfo = + mPackageManager.resolveContentProvider(DISABLED_PROVIDER_NAME, 0); + assertNull(providerInfo); + + mPackageManager.setComponentEnabledSetting(DISABLED_PROVIDER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + ProviderInfo providerInfo2 = + mPackageManager.resolveContentProvider(DISABLED_PROVIDER_NAME, 0); + assertNotNull(providerInfo2); + assertFalse(providerInfo2.enabled); + } + + @MediumTest + public void testDisableProvider() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_PROVIDER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + ProviderInfo providerInfo = + mPackageManager.resolveContentProvider(ENABLED_PROVIDER_NAME, 0); + assertNotNull(providerInfo); + assertTrue(providerInfo.enabled); + + mPackageManager.setComponentEnabledSetting(ENABLED_PROVIDER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP); + ProviderInfo providerInfo2 = + mPackageManager.resolveContentProvider(ENABLED_PROVIDER_NAME, 0); + assertNull(providerInfo2); + } + + @MediumTest + public void testQueryEnabledProvider() throws Exception { + mPackageManager.setComponentEnabledSetting(ENABLED_PROVIDER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + String enabledProviderProcessName = getComponentProcessName(ENABLED_PROVIDER_NAME); + PackageInfo pi = mPackageManager.getPackageInfo(ENABLED_PACKAGENAME, 0); + List<ProviderInfo> providerInfoList = + mPackageManager.queryContentProviders(enabledProviderProcessName, + pi.applicationInfo.uid, 0); + assertNotNull(providerInfoList); + assertEquals(1, providerInfoList.size()); + assertEquals(ENABLED_PROVIDER_CLASSNAME, + providerInfoList.get(0).name); + } + + @MediumTest + public void testQueryDisabledProvider() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_PROVIDER_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + PackageInfo pi = mPackageManager.getPackageInfo(ENABLED_PACKAGENAME, 0); + + String disabledProviderProcessName = getComponentProcessName(DISABLED_PROVIDER_NAME); + List<ProviderInfo> providerInfoList = + mPackageManager.queryContentProviders(disabledProviderProcessName, + pi.applicationInfo.uid, 0); + assertNull(providerInfoList); + + + List<ProviderInfo> providerInfoList2 = + mPackageManager.queryContentProviders(disabledProviderProcessName, + pi.applicationInfo.uid, GET_DISABLED_COMPONENTS); + assertNotNull(providerInfoList2); + assertEquals(1, providerInfoList2.size()); + assertEquals(DISABLED_PROVIDER_CLASSNAME, + providerInfoList2.get(0).name); + } + + private String getComponentProcessName(String componentNameStr) { + ComponentInfo providerInfo = + mPackageManager.resolveContentProvider(componentNameStr, + GET_DISABLED_COMPONENTS); + return providerInfo.processName; + } + + public void DISABLED_testResolveEnabledActivityInDisabledApp() throws Exception { + mPackageManager.setApplicationEnabledSetting(DISABLED_PACKAGENAME, + COMPONENT_ENABLED_STATE_DEFAULT, + 0); + mPackageManager.setComponentEnabledSetting(DISABLED_APP_ENABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = + mPackageManager.resolveActivity(mDisabledAppEnabledActivityIntent, 0); + assertNull(info); + + final ResolveInfo info2 = mPackageManager.resolveActivity( + mDisabledAppEnabledActivityIntent, GET_DISABLED_COMPONENTS); + assertNotNull(info2); + assertNotNull(info2.activityInfo); + assertTrue(info2.activityInfo.enabled); + } + + public void DISABLED_testEnableApplication() throws Exception { + mPackageManager.setApplicationEnabledSetting(DISABLED_PACKAGENAME, + COMPONENT_ENABLED_STATE_DEFAULT, + 0); + mPackageManager.setComponentEnabledSetting(DISABLED_APP_ENABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = + mPackageManager.resolveActivity(mDisabledAppEnabledActivityIntent, 0); + assertNull(info); + + mPackageManager.setApplicationEnabledSetting(DISABLED_PACKAGENAME, + COMPONENT_ENABLED_STATE_ENABLED, + 0); + final ResolveInfo info2 = mPackageManager.resolveActivity( + mDisabledAppEnabledActivityIntent, 0); + assertNotNull(info2); + assertNotNull(info2.activityInfo); + assertTrue(info2.activityInfo.enabled); + + } + + public void DISABLED_testDisableApplication() throws Exception { + mPackageManager.setApplicationEnabledSetting(ENABLED_PACKAGENAME, + COMPONENT_ENABLED_STATE_DEFAULT, + 0); + mPackageManager.setComponentEnabledSetting(ENABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + final ResolveInfo info = mPackageManager.resolveActivity(mEnabledActivityIntent, 0); + assertNotNull(info); + assertNotNull(info.activityInfo); + assertTrue(info.activityInfo.enabled); + + mPackageManager.setApplicationEnabledSetting(ENABLED_PACKAGENAME, + COMPONENT_ENABLED_STATE_DISABLED, + 0); + final ResolveInfo info2 = mPackageManager.resolveActivity(mEnabledActivityIntent, 0); + assertNull(info2); + + // Clean up + mPackageManager.setApplicationEnabledSetting(ENABLED_PACKAGENAME, + COMPONENT_ENABLED_STATE_DEFAULT, + 0); + + } + + @MediumTest + public void testNonExplicitResolveAfterEnabling() throws Exception { + mPackageManager.setComponentEnabledSetting(DISABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_DEFAULT, + PackageManager.DONT_KILL_APP); + + Intent intent = new Intent(Intent.ACTION_MAIN, null); + intent.addCategory(TEST_CATEGORY); + + final List<ResolveInfo> launchables = + mPackageManager.queryIntentActivities(intent, 0); + + int numItems = launchables.size(); + assertEquals(0, numItems); + + mPackageManager.setComponentEnabledSetting(DISABLED_ACTIVITY_COMPONENTNAME, + COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + + final List<ResolveInfo> launchables2 = + mPackageManager.queryIntentActivities(intent, 0); + + int numItems2 = launchables2.size(); + assertEquals(1, numItems2); + } +} |