diff --git a/res/xml/app_info_settings.xml b/res/xml/app_info_settings.xml index 48a4b6a5c78..e2fb2e44d30 100644 --- a/res/xml/app_info_settings.xml +++ b/res/xml/app_info_settings.xml @@ -39,21 +39,18 @@ + android:title="@string/notifications_label"/> + android:summary="@string/summary_placeholder"/> + android:summary="@string/summary_placeholder"/> + android:summary="@string/summary_placeholder"/> + android:enabled="false"/> + + + + + + + + + + + intent != null + && intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT).equals( + DefaultAppSettings.class.getName()) + && intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) + .getString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY).equals("TestKey"))); + } + + private class TestPreferenceController extends DefaultAppShortcutPreferenceControllerBase { + + private boolean isDefault; + private boolean capable; + + public TestPreferenceController(Context context, AppInfoDashboardFragment parent) { + super(context, "TestKey", "TestPackage"); + } + + @Override + protected boolean hasAppCapability() { + return capable; + } + + @Override + protected boolean isDefaultApp() { + return isDefault; + } + + } + +} diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java new file mode 100644 index 00000000000..0a18722b14e --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2017 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.settings.applications.appinfo; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +import java.util.ArrayList; +import java.util.List; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O) +public class DefaultBrowserShortcutPreferenceControllerTest { + + @Mock + private PackageManager mPackageManager; + + private Context mContext; + private DefaultBrowserShortcutPreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + when(mContext.getPackageManager()).thenReturn(mPackageManager); + mController = new DefaultBrowserShortcutPreferenceController(mContext, "Package1"); + } + + @Test + public void getPreferenceKey_shouldReturnDefaultBrowser() { + assertThat(mController.getPreferenceKey()).isEqualTo("default_browser"); + } + + @Test + public void hasAppCapability_hasBrowserCapability_shouldReturnTrue() { + List resolveInfos = new ArrayList<>(); + resolveInfos.add(new ResolveInfo()); + when(mPackageManager.queryIntentActivities(argThat(intent-> intent != null + && intent.getCategories().contains(Intent.CATEGORY_BROWSABLE)), anyInt())) + .thenReturn(resolveInfos); + + assertThat(mController.hasAppCapability()).isTrue(); + } + + @Test + public void hasAppCapability_noBrowserCapability_shouldReturnFalse() { + assertThat(mController.hasAppCapability()).isFalse(); + } + + @Test + public void isDefaultApp_isDefaultBrowser_shouldReturnTrue() { + when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn("Package1"); + + assertThat(mController.isDefaultApp()).isTrue(); + } + + @Test + public void isDefaultApp_notDefaultBrowser_shouldReturnFalse() { + assertThat(mController.isDefaultApp()).isFalse(); + } + +} diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java new file mode 100644 index 00000000000..414ef705554 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultEmergencyShortcutPreferenceControllerTest.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2017 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.settings.applications.appinfo; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.provider.Settings; +import android.telephony.TelephonyManager; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +import java.util.ArrayList; +import java.util.List; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O) +public class DefaultEmergencyShortcutPreferenceControllerTest { + + @Mock + private PackageManager mPackageManager; + + private Context mContext; + private DefaultEmergencyShortcutPreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + when(mContext.getPackageManager()).thenReturn(mPackageManager); + mController = new DefaultEmergencyShortcutPreferenceController(mContext, "Package1"); + } + + @Test + public void getPreferenceKey_shouldReturnDefaultEmergency() { + assertThat(mController.getPreferenceKey()).isEqualTo("default_emergency_app"); + } + + @Test + public void hasAppCapability_hasEmergencyCapability_shouldReturnTrue() { + List resolveInfos = new ArrayList<>(); + resolveInfos.add(new ResolveInfo()); + when(mPackageManager.queryIntentActivities(argThat(intent-> intent != null + && intent.getAction().equals(TelephonyManager.ACTION_EMERGENCY_ASSISTANCE)), + anyInt())).thenReturn(resolveInfos); + + assertThat(mController.hasAppCapability()).isTrue(); + } + + @Test + public void hasAppCapability_noEmergencyCapability_shouldReturnFalse() { + assertThat(mController.hasAppCapability()).isFalse(); + } + + @Test + public void isDefaultApp_isDefaultEmergency_shouldReturnTrue() { + Settings.Secure.putString(mContext.getContentResolver(), + Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION, "Package1"); + + assertThat(mController.isDefaultApp()).isTrue(); + } + + @Test + public void isDefaultApp_notDefaultEmergency_shouldReturnFalse() { + assertThat(mController.isDefaultApp()).isFalse(); + } + +} diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java new file mode 100644 index 00000000000..a0a57f688f7 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultHomeShortcutPreferenceControllerTest.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2017 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.settings.applications.appinfo; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.ComponentName; +import android.content.Context; +import android.content.pm.PackageManager; + +import com.android.settings.TestConfig; +import com.android.settings.applications.defaultapps.DefaultHomePreferenceController; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O) +public class DefaultHomeShortcutPreferenceControllerTest { + + @Mock + private PackageManager mPackageManager; + + private Context mContext; + private DefaultHomeShortcutPreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + when(mContext.getPackageManager()).thenReturn(mPackageManager); + mController = new DefaultHomeShortcutPreferenceController(mContext, "Package1"); + } + + @Test + public void getPreferenceKey_shouldReturnDefaultHome() { + assertThat(mController.getPreferenceKey()).isEqualTo("default_home"); + } + + @Test + @Config(shadows = ShadowDefaultHomePreferenceController.class) + public void hasAppCapability_hasHomeCapability_shouldReturnTrue() { + assertThat(mController.hasAppCapability()).isTrue(); + } + + @Test + public void hasAppCapability_noHomeCapability_shouldReturnFalse() { + assertThat(mController.hasAppCapability()).isFalse(); + } + + @Test + public void isDefaultApp_isDefaultHome_shouldReturnTrue() { + when(mPackageManager.getHomeActivities(anyList())) + .thenReturn(new ComponentName("Package1", "cls1")); + assertThat(mController.isDefaultApp()).isTrue(); + } + + @Test + public void isDefaultApp_notDefaultHome_shouldReturnFalse() { + when(mPackageManager.getHomeActivities(anyList())) + .thenReturn(new ComponentName("pkg2", "cls1")); + assertThat(mController.isDefaultApp()).isFalse(); + } + + @Implements(DefaultHomePreferenceController.class) + public static class ShadowDefaultHomePreferenceController { + @Implementation + public static boolean hasHomePreference(String pkg, Context context) { + return true; + } + } + +} diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultPhoneShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultPhoneShortcutPreferenceControllerTest.java new file mode 100644 index 00000000000..d04b114afb3 --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultPhoneShortcutPreferenceControllerTest.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2017 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.settings.applications.appinfo; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.content.pm.PackageManager; + +import com.android.settings.TestConfig; +import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O) +public class DefaultPhoneShortcutPreferenceControllerTest { + + @Mock + private PackageManager mPackageManager; + + private Context mContext; + private DefaultPhoneShortcutPreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + when(mContext.getPackageManager()).thenReturn(mPackageManager); + mController = new DefaultPhoneShortcutPreferenceController(mContext, "Package1"); + } + + @Test + public void getPreferenceKey_shouldReturnDefaultPhone() { + assertThat(mController.getPreferenceKey()).isEqualTo("default_phone_app"); + } + + @Test + @Config(shadows = ShadowDefaultPhonePreferenceController.class) + public void hasAppCapability_hasPhoneCapability_shouldReturnTrue() { + assertThat(mController.hasAppCapability()).isTrue(); + } + + @Test + public void hasAppCapability_noPhoneCapability_shouldReturnFalse() { + assertThat(mController.hasAppCapability()).isFalse(); + } + + @Test + @Config(shadows = ShadowDefaultPhonePreferenceController.class) + public void isDefaultApp_isDefaultPhone_shouldReturnTrue() { + assertThat(mController.isDefaultApp()).isTrue(); + } + + @Test + public void isDefaultApp_notDefaultPhone_shouldReturnFalse() { + assertThat(mController.isDefaultApp()).isFalse(); + } + + @Implements(DefaultPhonePreferenceController.class) + public static class ShadowDefaultPhonePreferenceController { + @Implementation + public static boolean hasPhonePreference(String pkg, Context context) { + return true; + } + + @Implementation + public static boolean isPhoneDefault(String pkg, Context context) { + return true; + } + } + +} diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultSmsShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultSmsShortcutPreferenceControllerTest.java new file mode 100644 index 00000000000..4abaa6a9bbc --- /dev/null +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultSmsShortcutPreferenceControllerTest.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2017 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.settings.applications.appinfo; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.content.pm.PackageManager; + +import com.android.settings.TestConfig; +import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O) +public class DefaultSmsShortcutPreferenceControllerTest { + + @Mock + private PackageManager mPackageManager; + + private Context mContext; + private DefaultSmsShortcutPreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + when(mContext.getPackageManager()).thenReturn(mPackageManager); + mController = new DefaultSmsShortcutPreferenceController(mContext, "Package1"); + } + + @Test + public void getPreferenceKey_shouldReturnDefaultSms() { + assertThat(mController.getPreferenceKey()).isEqualTo("default_sms_app"); + } + + @Test + @Config(shadows = ShadowDefaultSmsPreferenceController.class) + public void hasAppCapability_hasSmsCapability_shouldReturnTrue() { + assertThat(mController.hasAppCapability()).isTrue(); + } + + @Test + public void hasAppCapability_noSmsCapability_shouldReturnFalse() { + assertThat(mController.hasAppCapability()).isFalse(); + } + + @Test + @Config(shadows = ShadowDefaultSmsPreferenceController.class) + public void isDefaultApp_isDefaultSms_shouldReturnTrue() { + assertThat(mController.isDefaultApp()).isTrue(); + } + + @Test + public void isDefaultApp_notDefaultSms_shouldReturnFalse() { + assertThat(mController.isDefaultApp()).isFalse(); + } + + @Implements(DefaultSmsPreferenceController.class) + public static class ShadowDefaultSmsPreferenceController { + @Implementation + public static boolean hasSmsPreference(String pkg, Context context) { + return true; + } + + @Implementation + public static boolean isSmsDefault(String pkg, Context context) { + return true; + } + } + +}