diff --git a/src/com/android/settings/vpn2/AppDialogFragment.java b/src/com/android/settings/vpn2/AppDialogFragment.java index b24db4ed4c3..f8e6af0535f 100644 --- a/src/com/android/settings/vpn2/AppDialogFragment.java +++ b/src/com/android/settings/vpn2/AppDialogFragment.java @@ -18,7 +18,6 @@ package com.android.settings.vpn2; import android.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; import android.app.Fragment; import android.content.Context; import android.content.DialogInterface; @@ -67,13 +66,18 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App public static void show(Fragment parent, PackageInfo packageInfo, String label, boolean managing, boolean connected) { + if (!managing && !connected) { + // We can't display anything useful for this case. + return; + } show(parent, null, packageInfo, label, managing, connected); } public static void show(Fragment parent, Listener listener, PackageInfo packageInfo, String label, boolean managing, boolean connected) { - if (!parent.isAdded()) + if (!parent.isAdded()) { return; + } Bundle args = new Bundle(); args.putParcelable(ARG_PACKAGE, packageInfo); @@ -100,7 +104,7 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App final String label = args.getString(ARG_LABEL); boolean managing = args.getBoolean(ARG_MANAGING); boolean connected = args.getBoolean(ARG_CONNECTED); - mPackageInfo = (PackageInfo) args.getParcelable(ARG_PACKAGE); + mPackageInfo = args.getParcelable(ARG_PACKAGE); if (managing) { return new AppDialog(getActivity(), this, mPackageInfo, label); diff --git a/tests/robotests/src/com/android/settings/vpn2/AppDialogFragmentTest.java b/tests/robotests/src/com/android/settings/vpn2/AppDialogFragmentTest.java new file mode 100644 index 00000000000..088bfae028c --- /dev/null +++ b/tests/robotests/src/com/android/settings/vpn2/AppDialogFragmentTest.java @@ -0,0 +1,65 @@ +/* + * 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.vpn2; + +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +import android.app.Fragment; +import android.content.pm.PackageInfo; + +import com.android.settings.SettingsRobolectricTestRunner; +import com.android.settings.TestConfig; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class AppDialogFragmentTest { + + @Mock + private Fragment mParent; + + private PackageInfo mPackageInfo; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mPackageInfo = new PackageInfo(); + } + + @Test + public void notManagingOrConnected_shouldNotShow() { + AppDialogFragment.show(mParent, mPackageInfo, "label", false /* manage */, + false /* connected */); + + verify(mParent, never()).isAdded(); + } + + @Test + public void notManagingAndConnected_showShow() { + AppDialogFragment.show(mParent, mPackageInfo, "label", false /* manage */, + true /* connected */); + + verify(mParent).isAdded(); + } +}