diff --git a/res/layout/dialog_firmware_version.xml b/res/layout/dialog_firmware_version.xml deleted file mode 100644 index 1d5f531dfaa..00000000000 --- a/res/layout/dialog_firmware_version.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/values/strings.xml b/res/values/strings.xml index 06c794a0f1e..3c9cdf5f94a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2927,8 +2927,6 @@ Android version - - Android Android security patch level diff --git a/res/xml/firmware_version.xml b/res/xml/firmware_version.xml new file mode 100644 index 00000000000..2914ef1acf3 --- /dev/null +++ b/res/xml/firmware_version.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml index 6323a14cc93..918e8ec0cf3 100644 --- a/res/xml/my_device_info.xml +++ b/res/xml/my_device_info.xml @@ -121,11 +121,10 @@ android:key="firmware_version" android:order="32" android:title="@string/firmware_version" - settings:keywords="@string/keywords_android_version" android:summary="@string/summary_placeholder" settings:allowDynamicSummaryInSlice="true" - settings:controller= - "com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController"/> + android:fragment="com.android.settings.deviceinfo.firmwareversion.FirmwareVersionSettings" + settings:controller="com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController"/> = (SystemClock.uptimeMillis() - DELAY_TIMER_MILLIS)) { @@ -67,7 +86,7 @@ public class FirmwareVersionDialogController implements View.OnClickListener { mFunDisallowedAdmin); } Log.d(TAG, "Sorry, no fun for you!"); - return; + return true; } final Intent intent = new Intent(Intent.ACTION_MAIN) @@ -79,21 +98,7 @@ public class FirmwareVersionDialogController implements View.OnClickListener { Log.e(TAG, "Unable to start activity " + intent.toString()); } } - } - - /** - * Populates the Android version field in the dialog and registers click listeners. - */ - public void initialize() { - initializeAdminPermissions(); - registerClickListeners(); - - mDialog.setText(FIRMWARE_VERSION_VALUE_ID, Build.VERSION.RELEASE); - } - - private void registerClickListeners() { - mDialog.registerClickListener(FIRMWARE_VERSION_LABEL_ID, this /* listener */); - mDialog.registerClickListener(FIRMWARE_VERSION_VALUE_ID, this /* listener */); + return true; } /** @@ -111,4 +116,10 @@ public class FirmwareVersionDialogController implements View.OnClickListener { mFunDisallowedBySystem = RestrictedLockUtilsInternal.hasBaseUserRestriction( mContext, UserManager.DISALLOW_FUN, UserHandle.myUserId()); } + + @Override + public void copy() { + Copyable.setCopyContent(mContext, getSummary(), + mContext.getText(R.string.firmware_version)); + } } diff --git a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogFragment.java b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogFragment.java deleted file mode 100644 index 2093c3eee6e..00000000000 --- a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogFragment.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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.deviceinfo.firmwareversion; - -import android.app.Dialog; -import android.app.settings.SettingsEnums; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.TextView; - -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; - -import com.android.settings.R; -import com.android.settings.core.instrumentation.InstrumentedDialogFragment; - -public class FirmwareVersionDialogFragment extends InstrumentedDialogFragment { - - private static final String TAG = "firmwareVersionDialog"; - - private View mRootView; - - public static void show(Fragment host) { - final FragmentManager manager = host.getChildFragmentManager(); - if (manager.findFragmentByTag(TAG) == null) { - final FirmwareVersionDialogFragment dialog = new FirmwareVersionDialogFragment(); - dialog.show(manager, TAG); - } - } - - @Override - public int getMetricsCategory() { - return SettingsEnums.DIALOG_FIRMWARE_VERSION; - } - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) - .setTitle(R.string.firmware_title) - .setPositiveButton(android.R.string.ok, null /* listener */); - - mRootView = LayoutInflater.from(getActivity()).inflate( - R.layout.dialog_firmware_version, null /* parent */); - - initializeControllers(); - - return builder.setView(mRootView).create(); - } - - public void setText(int viewId, CharSequence text) { - final TextView view = mRootView.findViewById(viewId); - if (view != null) { - view.setText(text); - } - } - - public void removeSettingFromScreen(int viewId) { - final View view = mRootView.findViewById(viewId); - if (view != null) { - view.setVisibility(View.GONE); - } - } - - public void registerClickListener(int viewId, View.OnClickListener listener) { - final View view = mRootView.findViewById(viewId); - if (view != null) { - view.setOnClickListener(listener); - } - } - - private void initializeControllers() { - new FirmwareVersionDialogController(this).initialize(); - new SecurityPatchLevelDialogController(this).initialize(); - new BasebandVersionDialogController(this).initialize(); - new KernelVersionDialogController(this).initialize(); - new BuildNumberDialogController(this).initialize(); - new ModuleVersionDialogController(this).initialize(); - } -} diff --git a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java index b7b67b7c2eb..41d9566760c 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceController.java @@ -18,56 +18,22 @@ package com.android.settings.deviceinfo.firmwareversion; import android.content.Context; import android.os.Build; -import android.text.TextUtils; -import androidx.fragment.app.Fragment; -import androidx.preference.Preference; - -import com.android.settings.R; import com.android.settings.core.BasePreferenceController; -import com.android.settings.slices.Copyable; -public class FirmwareVersionPreferenceController extends BasePreferenceController implements - Copyable { - - private Fragment mFragment; +public class FirmwareVersionPreferenceController extends BasePreferenceController { public FirmwareVersionPreferenceController(Context context, String key) { super(context, key); } - public void setHost(Fragment fragment) { - mFragment = fragment; - } - @Override public int getAvailabilityStatus() { - return AVAILABLE; + return AVAILABLE_UNSEARCHABLE; } @Override public CharSequence getSummary() { return Build.VERSION.RELEASE; } - - @Override - public boolean handlePreferenceTreeClick(Preference preference) { - if (!TextUtils.equals(preference.getKey(), mPreferenceKey)) { - return false; - } - - FirmwareVersionDialogFragment.show(mFragment); - return true; - } - - @Override - public boolean isSliceable() { - return true; - } - - @Override - public void copy() { - Copyable.setCopyContent(mContext, getSummary(), - mContext.getText(R.string.firmware_version)); - } } diff --git a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionSettings.java b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionSettings.java new file mode 100644 index 00000000000..90c3b56876a --- /dev/null +++ b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionSettings.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2019 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.deviceinfo.firmwareversion; + +import android.app.settings.SettingsEnums; +import android.content.Context; +import android.provider.SearchIndexableResource; + +import com.android.settings.R; +import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; +import com.android.settingslib.search.SearchIndexable; + +import java.util.ArrayList; +import java.util.List; + +@SearchIndexable +public class FirmwareVersionSettings extends DashboardFragment { + + @Override + protected int getPreferenceScreenResId() { + return R.xml.firmware_version; + } + + @Override + protected String getLogTag() { + return "FirmwareVersionSettings"; + } + + @Override + public int getMetricsCategory() { + return SettingsEnums.DIALOG_FIRMWARE_VERSION; + } + + public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex(Context context, + boolean enabled) { + final ArrayList result = new ArrayList<>(); + + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.firmware_version; + result.add(sir); + return result; + } + + }; +} diff --git a/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionDialogController.java b/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionPreferenceController.java similarity index 51% rename from src/com/android/settings/deviceinfo/firmwareversion/KernelVersionDialogController.java rename to src/com/android/settings/deviceinfo/firmwareversion/KernelVersionPreferenceController.java index 0d816d563e8..0500c89371a 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionDialogController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionPreferenceController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright (C) 2019 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. @@ -16,27 +16,24 @@ package com.android.settings.deviceinfo.firmwareversion; -import androidx.annotation.VisibleForTesting; +import android.content.Context; -import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; import com.android.settingslib.DeviceInfoUtils; -public class KernelVersionDialogController { +public class KernelVersionPreferenceController extends BasePreferenceController { - @VisibleForTesting - static int KERNEL_VERSION_VALUE_ID = R.id.kernel_version_value; - - private final FirmwareVersionDialogFragment mDialog; - - public KernelVersionDialogController(FirmwareVersionDialogFragment dialog) { - mDialog = dialog; + public KernelVersionPreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); } - /** - * Updates kernel version to the dialog. - */ - public void initialize() { - mDialog.setText(KERNEL_VERSION_VALUE_ID, - DeviceInfoUtils.getFormattedKernelVersion(mDialog.getContext())); + @Override + public int getAvailabilityStatus() { + return AVAILABLE; + } + + @Override + public CharSequence getSummary() { + return DeviceInfoUtils.getFormattedKernelVersion(mContext); } } diff --git a/src/com/android/settings/deviceinfo/firmwareversion/ModuleVersionDialogController.java b/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceController.java similarity index 56% rename from src/com/android/settings/deviceinfo/firmwareversion/ModuleVersionDialogController.java rename to src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceController.java index 0dc953d1599..e2f4fae14fc 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/ModuleVersionDialogController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceController.java @@ -22,51 +22,51 @@ import android.text.TextUtils; import android.util.FeatureFlagUtils; import android.util.Log; -import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; import com.android.settings.core.FeatureFlags; -import androidx.annotation.VisibleForTesting; - -public class ModuleVersionDialogController { +public class MainlineModuleVersionPreferenceController extends BasePreferenceController { private static final String TAG = "MainlineModuleControl"; - @VisibleForTesting - static final int MODULE_VERSION_LABEL_ID = R.id.module_version_label; - @VisibleForTesting - static final int MODULE_VERSION_VALUE_ID = R.id.module_version_value; - - private final FirmwareVersionDialogFragment mDialog; - private final Context mContext; private final PackageManager mPackageManager; - public ModuleVersionDialogController(FirmwareVersionDialogFragment dialog) { - mDialog = dialog; - mContext = mDialog.getContext(); + private String mModuleVersion; + + public MainlineModuleVersionPreferenceController(Context context, String key) { + super(context, key); mPackageManager = mContext.getPackageManager(); + initModules(); } - /** - * Updates the mainline module version field of the dialog. - */ - public void initialize() { + @Override + public int getAvailabilityStatus() { + if (!FeatureFlagUtils.isEnabled(mContext, FeatureFlags.MAINLINE_MODULE)) { + return UNSUPPORTED_ON_DEVICE; + } + return !TextUtils.isEmpty(mModuleVersion) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; + } + + private void initModules() { if (!FeatureFlagUtils.isEnabled(mContext, FeatureFlags.MAINLINE_MODULE)) { - mDialog.removeSettingFromScreen(MODULE_VERSION_LABEL_ID); - mDialog.removeSettingFromScreen(MODULE_VERSION_VALUE_ID); return; } final String moduleProvider = mContext.getString( - com.android.internal.R.string.config_defaultModuleMetadataProvider); + com.android.internal.R.string.config_defaultModuleMetadataProvider); if (!TextUtils.isEmpty(moduleProvider)) { try { - mDialog.setText(MODULE_VERSION_VALUE_ID, - mPackageManager.getPackageInfo(moduleProvider, 0 /* flags */).versionName); + mModuleVersion = + mPackageManager.getPackageInfo(moduleProvider, 0 /* flags */).versionName; return; } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "Failed to get mainline version.", e); + mModuleVersion = null; } } - mDialog.removeSettingFromScreen(MODULE_VERSION_LABEL_ID); - mDialog.removeSettingFromScreen(MODULE_VERSION_VALUE_ID); + } + + @Override + public CharSequence getSummary() { + return mModuleVersion; } } diff --git a/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelDialogController.java b/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelPreferenceController.java similarity index 51% rename from src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelDialogController.java rename to src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelPreferenceController.java index 9037fe7e518..1df78a80817 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelDialogController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelPreferenceController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright (C) 2019 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. @@ -22,66 +22,54 @@ import android.content.pm.PackageManager; import android.net.Uri; import android.text.TextUtils; import android.util.Log; -import android.view.View; -import androidx.annotation.VisibleForTesting; +import androidx.preference.Preference; -import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; import com.android.settingslib.DeviceInfoUtils; -public class SecurityPatchLevelDialogController implements View.OnClickListener { +public class SecurityPatchLevelPreferenceController extends BasePreferenceController { private static final String TAG = "SecurityPatchCtrl"; private static final Uri INTENT_URI_DATA = Uri.parse( "https://source.android.com/security/bulletin/"); - @VisibleForTesting - static final int SECURITY_PATCH_VALUE_ID = R.id.security_patch_level_value; - @VisibleForTesting - static final int SECURITY_PATCH_LABEL_ID = R.id.security_patch_level_label; - - private final FirmwareVersionDialogFragment mDialog; - private final Context mContext; private final PackageManager mPackageManager; private final String mCurrentPatch; - public SecurityPatchLevelDialogController(FirmwareVersionDialogFragment dialog) { - mDialog = dialog; - mContext = dialog.getContext(); + public SecurityPatchLevelPreferenceController(Context context, String key) { + super(context, key); mPackageManager = mContext.getPackageManager(); mCurrentPatch = DeviceInfoUtils.getSecurityPatch(); } @Override - public void onClick(View v) { + public int getAvailabilityStatus() { + return !TextUtils.isEmpty(mCurrentPatch) + ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; + } + + @Override + public CharSequence getSummary() { + return mCurrentPatch; + } + + @Override + public boolean handlePreferenceTreeClick(Preference preference) { + if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { + return false; + } + final Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(INTENT_URI_DATA); if (mPackageManager.queryIntentActivities(intent, 0).isEmpty()) { // Don't send out the intent to stop crash - Log.w(TAG, "Stop click action on " + SECURITY_PATCH_VALUE_ID + ": " - + "queryIntentActivities() returns empty"); - return; + Log.w(TAG, "queryIntentActivities() returns empty"); + return true; } mContext.startActivity(intent); - } - - /** - * Populates the security patch level field in the dialog and registers click listeners. - */ - public void initialize() { - if (TextUtils.isEmpty(mCurrentPatch)) { - mDialog.removeSettingFromScreen(SECURITY_PATCH_LABEL_ID); - mDialog.removeSettingFromScreen(SECURITY_PATCH_VALUE_ID); - return; - } - registerListeners(); - mDialog.setText(SECURITY_PATCH_VALUE_ID, mCurrentPatch); - } - - private void registerListeners() { - mDialog.registerClickListener(SECURITY_PATCH_LABEL_ID, this /* listener */); - mDialog.registerClickListener(SECURITY_PATCH_VALUE_ID, this /* listener */); + return true; } } diff --git a/src/com/android/settings/deviceinfo/firmwareversion/BuildNumberDialogController.java b/src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceController.java similarity index 52% rename from src/com/android/settings/deviceinfo/firmwareversion/BuildNumberDialogController.java rename to src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceController.java index ba4eb7af748..c7d4459aa24 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/BuildNumberDialogController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/SimpleBuildNumberPreferenceController.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright (C) 2019 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. @@ -16,29 +16,26 @@ package com.android.settings.deviceinfo.firmwareversion; +import android.content.Context; import android.os.Build; import android.text.BidiFormatter; -import androidx.annotation.VisibleForTesting; +import com.android.settings.core.BasePreferenceController; -import com.android.settings.R; +public class SimpleBuildNumberPreferenceController extends BasePreferenceController { -public class BuildNumberDialogController { - - @VisibleForTesting - static final int BUILD_NUMBER_VALUE_ID = R.id.build_number_value; - - private final FirmwareVersionDialogFragment mDialog; - - public BuildNumberDialogController(FirmwareVersionDialogFragment dialog) { - mDialog = dialog; + public SimpleBuildNumberPreferenceController(Context context, + String preferenceKey) { + super(context, preferenceKey); } - /** - * Updates the build number to the dialog. - */ - public void initialize() { - mDialog.setText(BUILD_NUMBER_VALUE_ID, - BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY)); + @Override + public int getAvailabilityStatus() { + return AVAILABLE; + } + + @Override + public CharSequence getSummary() { + return BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY); } } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceControllerTest.java similarity index 60% rename from tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionDialogControllerTest.java rename to tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceControllerTest.java index 0f561641a52..5f4848f3e01 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright (C) 2019 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. @@ -16,15 +16,12 @@ package com.android.settings.deviceinfo.firmwareversion; -import static com.android.settings.deviceinfo.firmwareversion.BasebandVersionDialogController - .BASEBAND_PROPERTY; -import static com.android.settings.deviceinfo.firmwareversion.BasebandVersionDialogController - .BASEBAND_VERSION_LABEL_ID; -import static com.android.settings.deviceinfo.firmwareversion.BasebandVersionDialogController - .BASEBAND_VERSION_VALUE_ID; +import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; +import static com.android.settings.deviceinfo.firmwareversion.BasebandVersionPreferenceController.BASEBAND_PROPERTY; + +import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import static org.robolectric.shadow.api.Shadow.extract; import android.content.Context; @@ -36,7 +33,6 @@ import com.android.settings.testutils.shadow.ShadowConnectivityManager; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -44,44 +40,35 @@ import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(shadows = ShadowConnectivityManager.class) -public class BasebandVersionDialogControllerTest { - - @Mock - private FirmwareVersionDialogFragment mDialog; +public class BasebandVersionPreferenceControllerTest { private Context mContext; - private BasebandVersionDialogController mController; + private BasebandVersionPreferenceController mController; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - when(mDialog.getContext()).thenReturn(mContext); - mController = new BasebandVersionDialogController(mDialog); + mController = new BasebandVersionPreferenceController(mContext, "key"); } @Test - public void initialize_wifiOnly_shouldRemoveSettingFromDialog() { - ShadowConnectivityManager connectivityManager = + public void getAvailability_wifiOnly_unavailable() { + final ShadowConnectivityManager connectivityManager = extract(mContext.getSystemService(ConnectivityManager.class)); connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false); - mController.initialize(); - - verify(mDialog).removeSettingFromScreen(BASEBAND_VERSION_LABEL_ID); - verify(mDialog).removeSettingFromScreen(BASEBAND_VERSION_VALUE_ID); + assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); } @Test - public void initialize_hasMobile_shouldSetDialogTextToBasebandVersion() { + public void getAvailability_hasMobile_available() { final String text = "test"; SystemProperties.set(BASEBAND_PROPERTY, text); ShadowConnectivityManager connectivityManager = extract(mContext.getSystemService(ConnectivityManager.class)); connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true); - mController.initialize(); - - verify(mDialog).setText(BASEBAND_VERSION_VALUE_ID, text); + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); } } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BuildNumberDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BuildNumberDialogControllerTest.java deleted file mode 100644 index a1e8813a8db..00000000000 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BuildNumberDialogControllerTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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.deviceinfo.firmwareversion; - -import static com.android.settings.deviceinfo.firmwareversion.BuildNumberDialogController - .BUILD_NUMBER_VALUE_ID; - -import static org.mockito.Mockito.verify; - -import android.os.Build; -import android.text.BidiFormatter; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class BuildNumberDialogControllerTest { - - @Mock - private FirmwareVersionDialogFragment mDialog; - - private BuildNumberDialogController mController; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - mController = new BuildNumberDialogController(mDialog); - } - - @Test - public void initialize_shouldUpdateBuildNumberToDialog() { - mController.initialize(); - - verify(mDialog) - .setText(BUILD_NUMBER_VALUE_ID, BidiFormatter.getInstance().unicodeWrap(Build.DISPLAY)); - } -} diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDetailPreferenceControllerTest.java similarity index 64% rename from tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogControllerTest.java rename to tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDetailPreferenceControllerTest.java index 0c57941126e..adfff25bfb7 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionDetailPreferenceControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright (C) 2019 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. @@ -16,13 +16,9 @@ package com.android.settings.deviceinfo.firmwareversion; -import static com.android.settings.deviceinfo.firmwareversion.FirmwareVersionDialogController - .FIRMWARE_VERSION_LABEL_ID; -import static com.android.settings.deviceinfo.firmwareversion.FirmwareVersionDialogController - .FIRMWARE_VERSION_VALUE_ID; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; @@ -32,7 +28,8 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.os.Build; import android.os.UserManager; -import android.view.View; + +import androidx.preference.Preference; import org.junit.Before; import org.junit.Test; @@ -44,36 +41,30 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) -public class FirmwareVersionDialogControllerTest { +public class FirmwareVersionDetailPreferenceControllerTest { @Mock private UserManager mUserManager; - @Mock - private FirmwareVersionDialogFragment mDialog; - @Mock - private View mView; + private Preference mPreference; private Context mContext; - private FirmwareVersionDialogController mController; + private FirmwareVersionDetailPreferenceController mController; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); - when(mDialog.getContext()).thenReturn(mContext); - mController = spy(new FirmwareVersionDialogController(mDialog)); + mController = spy(new TestController(mContext, "key")); + ReflectionHelpers.setField(mController, "mUserManager", mUserManager); - doNothing().when(mController).arrayCopy(); - doNothing().when(mController).initializeAdminPermissions(); + + mPreference = new Preference(mContext); + mPreference.setKey(mController.getPreferenceKey()); } @Test - public void initialize_shouldRegisterListenersAndSetBuildVersion() { - mController.initialize(); - - verify(mDialog).registerClickListener(eq(FIRMWARE_VERSION_VALUE_ID), any()); - verify(mDialog).registerClickListener(eq(FIRMWARE_VERSION_LABEL_ID), any()); - verify(mDialog).setText(FIRMWARE_VERSION_VALUE_ID, Build.VERSION.RELEASE); + public void getSummary_shouldGetBuildVersion() { + assertThat(mController.getSummary()).isEqualTo(Build.VERSION.RELEASE); } @Test @@ -82,7 +73,7 @@ public class FirmwareVersionDialogControllerTest { hits[0] = Long.MAX_VALUE; when(mUserManager.hasUserRestriction(UserManager.DISALLOW_FUN)).thenReturn(true); - mController.onClick(mView); + mController.handlePreferenceTreeClick(mPreference); verify(mContext, never()).startActivity(any()); } @@ -93,8 +84,19 @@ public class FirmwareVersionDialogControllerTest { hits[0] = Long.MAX_VALUE; when(mUserManager.hasUserRestriction(UserManager.DISALLOW_FUN)).thenReturn(false); - mController.onClick(mView); + mController.handlePreferenceTreeClick(mPreference); verify(mContext).startActivity(any()); } + + private static class TestController extends FirmwareVersionDetailPreferenceController { + + public TestController(Context context, String key) { + super(context, key); + } + + @Override + void initializeAdminPermissions() { + } + } } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java index 0c74525a048..77ae4e2589b 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionPreferenceControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright (C) 2019 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. @@ -16,42 +16,29 @@ package com.android.settings.deviceinfo.firmwareversion; -import static android.content.Context.CLIPBOARD_SERVICE; - import static com.google.common.truth.Truth.assertThat; -import android.content.ClipboardManager; import android.content.Context; import android.os.Build; -import androidx.fragment.app.Fragment; import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import com.android.settings.core.BasePreferenceController; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.annotation.Resetter; @RunWith(RobolectricTestRunner.class) public class FirmwareVersionPreferenceControllerTest { private static final String KEY = "firmware_version"; - @Mock - private Fragment mFragment; - private Preference mPreference; private PreferenceScreen mScreen; private FirmwareVersionPreferenceController mController; @@ -62,22 +49,16 @@ public class FirmwareVersionPreferenceControllerTest { final Context context = RuntimeEnvironment.application; final PreferenceManager preferenceManager = new PreferenceManager(context); mController = new FirmwareVersionPreferenceController(context, KEY); - mController.setHost(mFragment); mPreference = new Preference(context); mPreference.setKey(KEY); mScreen = preferenceManager.createPreferenceScreen(context); mScreen.addPreference(mPreference); } - @After - public void tearDown() { - ShadowFirmwareVersionDialogFragment.reset(); - } - @Test public void firmwareVersion_shouldAlwaysBeShown() { - assertThat(mController.getAvailabilityStatus()).isEqualTo( - BasePreferenceController.AVAILABLE); + assertThat(mController.getAvailabilityStatus()) + .isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE); } @Test @@ -86,55 +67,4 @@ public class FirmwareVersionPreferenceControllerTest { assertThat(mPreference.getSummary()).isEqualTo(Build.VERSION.RELEASE); } - - @Test - @Config(shadows = ShadowFirmwareVersionDialogFragment.class) - public void handlePreferenceTreeClick_samePreferenceKey_shouldStartDialogFragment() { - final boolean result = mController.handlePreferenceTreeClick(mPreference); - - assertThat(ShadowFirmwareVersionDialogFragment.isShowing).isTrue(); - assertThat(result).isTrue(); - } - - @Test - public void handlePreferenceTreeClick_unknownPreferenceKey_shouldDoNothingAndReturnFalse() { - mPreference.setKey("foobar"); - - final boolean result = mController.handlePreferenceTreeClick(mPreference); - - assertThat(ShadowFirmwareVersionDialogFragment.isShowing).isFalse(); - assertThat(result).isFalse(); - } - - @Test - public void isSliceable_shouldBeTrue() { - assertThat(mController.isSliceable()).isTrue(); - } - - @Test - public void copy_shouldCopyVersionNumberToClipboard() { - mController.copy(); - - final Context context = RuntimeEnvironment.application; - final ClipboardManager clipboard = (ClipboardManager) context.getSystemService( - CLIPBOARD_SERVICE); - final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText(); - assertThat(data.toString()).isEqualTo(Build.VERSION.RELEASE); - } - - @Implements(FirmwareVersionDialogFragment.class) - public static class ShadowFirmwareVersionDialogFragment { - - private static boolean isShowing = false; - - @Implementation - public static void show(Fragment fragemnt) { - isShowing = true; - } - - @Resetter - public static void reset() { - isShowing = false; - } - } } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionPreferenceControllerTest.java similarity index 58% rename from tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionDialogControllerTest.java rename to tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionPreferenceControllerTest.java index 52af2809ffb..9ee0bb32d99 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/KernelVersionPreferenceControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright (C) 2019 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. @@ -16,11 +16,7 @@ package com.android.settings.deviceinfo.firmwareversion; -import static com.android.settings.deviceinfo.firmwareversion.KernelVersionDialogController - .KERNEL_VERSION_VALUE_ID; - -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static com.google.common.truth.Truth.assertThat; import android.content.Context; @@ -29,33 +25,27 @@ import com.android.settingslib.DeviceInfoUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) -public class KernelVersionDialogControllerTest { +public class KernelVersionPreferenceControllerTest { - @Mock - private FirmwareVersionDialogFragment mDialog; private Context mContext; - private KernelVersionDialogController mController; + private KernelVersionPreferenceController mController; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - when(mDialog.getContext()).thenReturn(mContext); - mController = new KernelVersionDialogController(mDialog); + mController = new KernelVersionPreferenceController(mContext, "key"); } @Test - public void initialize_shouldUpdateKernelVersionToDialog() { - mController.initialize(); - - verify(mDialog) - .setText(KERNEL_VERSION_VALUE_ID, DeviceInfoUtils.getFormattedKernelVersion(mContext)); + public void getSummary_shouldGetKernalVersion() { + assertThat(mController.getSummary()).isEqualTo( + DeviceInfoUtils.getFormattedKernelVersion(mContext)); } } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/ModuleVersionDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java similarity index 53% rename from tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/ModuleVersionDialogControllerTest.java rename to tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java index b84ea99d072..2761b2fb42a 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/ModuleVersionDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java @@ -16,10 +16,14 @@ package com.android.settings.deviceinfo.firmwareversion; +import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; + +import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; @@ -38,78 +42,75 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) -public class ModuleVersionDialogControllerTest { +public class MainlineModuleVersionPreferenceControllerTest { - @Mock - private FirmwareVersionDialogFragment mDialog; @Mock private PackageManager mPackageManager; private Context mContext; - private ModuleVersionDialogController mController; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); - when(mDialog.getContext()).thenReturn(mContext); when(mContext.getPackageManager()).thenReturn(mPackageManager); - mController = new ModuleVersionDialogController(mDialog); + FeatureFlagUtils.setEnabled(mContext, FeatureFlags.MAINLINE_MODULE, true); } @Test - public void initialize_featureDisabled_shouldRemoveSettingFromDialog() { + public void getAvailabilityStatus_featureDisabled_unavailable() { FeatureFlagUtils.setEnabled(mContext, FeatureFlags.MAINLINE_MODULE, false); - mController.initialize(); + final MainlineModuleVersionPreferenceController controller = + new MainlineModuleVersionPreferenceController(mContext, "key"); - verify(mDialog).removeSettingFromScreen(mController.MODULE_VERSION_LABEL_ID); - verify(mDialog).removeSettingFromScreen(mController.MODULE_VERSION_VALUE_ID); + assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); } @Test - public void initialize_noMainlineModuleProvider_shouldRemoveSettingFromDialog() { + public void getAvailabilityStatus_noMainlineModuleProvider_unavailable() { when(mContext.getString( - com.android.internal.R.string.config_defaultModuleMetadataProvider)).thenReturn(null); + com.android.internal.R.string.config_defaultModuleMetadataProvider)).thenReturn( + null); - mController.initialize(); + final MainlineModuleVersionPreferenceController controller = + new MainlineModuleVersionPreferenceController(mContext, "key"); - verify(mDialog).removeSettingFromScreen(mController.MODULE_VERSION_LABEL_ID); - verify(mDialog).removeSettingFromScreen(mController.MODULE_VERSION_VALUE_ID); + assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); } @Test - public void initialize_noMainlineModulePackageInfo_shouldRemoveSettingFromDialog() - throws PackageManager.NameNotFoundException { + public void getAvailabilityStatus_noMainlineModulePackageInfo_unavailable() throws Exception { + final String provider = "test.provider"; when(mContext.getString( - com.android.internal.R.string.config_defaultModuleMetadataProvider)) - .thenReturn(provider); + com.android.internal.R.string.config_defaultModuleMetadataProvider)) + .thenReturn(provider); when(mPackageManager.getPackageInfo(eq(provider), anyInt())) - .thenThrow(new PackageManager.NameNotFoundException()); + .thenThrow(new PackageManager.NameNotFoundException()); - mController.initialize(); + final MainlineModuleVersionPreferenceController controller = + new MainlineModuleVersionPreferenceController(mContext, "key"); - verify(mDialog).removeSettingFromScreen(mController.MODULE_VERSION_LABEL_ID); - verify(mDialog).removeSettingFromScreen(mController.MODULE_VERSION_VALUE_ID); + assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); } @Test - public void initialize_hasMainlineModulePackageInfo_shouldshouldSetDialogTextToMainlineVersion() - throws PackageManager.NameNotFoundException { + public void getAvailabilityStatus_hasMainlineModulePackageInfo_available() throws Exception { final String provider = "test.provider"; final String version = "test version 123"; final PackageInfo info = new PackageInfo(); info.versionName = version; when(mContext.getString( - com.android.internal.R.string.config_defaultModuleMetadataProvider)) - .thenReturn(provider); + com.android.internal.R.string.config_defaultModuleMetadataProvider)) + .thenReturn(provider); when(mPackageManager.getPackageInfo(eq(provider), anyInt())).thenReturn(info); - mController.initialize(); + final MainlineModuleVersionPreferenceController controller = + new MainlineModuleVersionPreferenceController(mContext, "key"); - verify(mDialog).setText(mController.MODULE_VERSION_VALUE_ID, version); + assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE); } } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelPreferenceControllerTest.java similarity index 62% rename from tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelDialogControllerTest.java rename to tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelPreferenceControllerTest.java index 8c334ccd85a..ccc91e60c8a 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/SecurityPatchLevelPreferenceControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * Copyright (C) 2019 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. @@ -16,14 +16,13 @@ package com.android.settings.deviceinfo.firmwareversion; -import static com.android.settings.deviceinfo.firmwareversion.SecurityPatchLevelDialogController - .SECURITY_PATCH_LABEL_ID; -import static com.android.settings.deviceinfo.firmwareversion.SecurityPatchLevelDialogController - .SECURITY_PATCH_VALUE_ID; +import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; + +import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -33,7 +32,8 @@ import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; -import android.view.View; + +import androidx.preference.Preference; import org.junit.Before; import org.junit.Test; @@ -47,55 +47,47 @@ import org.robolectric.util.ReflectionHelpers; import java.util.Collections; @RunWith(RobolectricTestRunner.class) -public class SecurityPatchLevelDialogControllerTest { +public class SecurityPatchLevelPreferenceControllerTest { @Mock private PackageManager mPackageManager; - @Mock - private FirmwareVersionDialogFragment mDialog; - @Mock - private View mView; private Context mContext; - private SecurityPatchLevelDialogController mController; + private SecurityPatchLevelPreferenceController mController; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = spy(Robolectric.setupActivity(Activity.class)); - when(mDialog.getContext()).thenReturn(mContext); } @Test - public void initialize_noPatchInfo_shouldRemoveSettingFromDialog() { + public void getAvailabilityStatus_noPatchInfo_unavailable() { ReflectionHelpers.setStaticField(Build.VERSION.class, "SECURITY_PATCH", ""); - mController = new SecurityPatchLevelDialogController(mDialog); + mController = new SecurityPatchLevelPreferenceController(mContext, "key"); - mController.initialize(); - - verify(mDialog).removeSettingFromScreen(SECURITY_PATCH_VALUE_ID); - verify(mDialog).removeSettingFromScreen(SECURITY_PATCH_LABEL_ID); + assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); } @Test - public void initialize_patchInfoAvailable_shouldRegisterListeners() { + public void getAvailabilityStatus_hasPatchInfo_available() { ReflectionHelpers.setStaticField(Build.VERSION.class, "SECURITY_PATCH", "foobar"); - mController = new SecurityPatchLevelDialogController(mDialog); + mController = new SecurityPatchLevelPreferenceController(mContext, "key"); - mController.initialize(); - - verify(mDialog).registerClickListener(eq(SECURITY_PATCH_LABEL_ID), any()); - verify(mDialog).registerClickListener(eq(SECURITY_PATCH_VALUE_ID), any()); + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); } @Test public void onClick_noActivityIntent_shouldDoNothing() { when(mPackageManager.queryIntentActivities(any(), anyInt())) .thenReturn(Collections.emptyList()); - mController = new SecurityPatchLevelDialogController(mDialog); + mController = new SecurityPatchLevelPreferenceController(mContext, "key"); ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager); - mController.onClick(mView); + final Preference pref = new Preference(mContext); + pref.setKey(mController.getPreferenceKey()); + + mController.handlePreferenceTreeClick(pref); verify(mContext, never()).startActivity(any()); } @@ -104,10 +96,14 @@ public class SecurityPatchLevelDialogControllerTest { public void onClick_activityIntentFound_shouldStartActivity() { when(mPackageManager.queryIntentActivities(any(), anyInt())) .thenReturn(Collections.singletonList(null)); - mController = new SecurityPatchLevelDialogController(mDialog); + + mController = new SecurityPatchLevelPreferenceController(mContext, "key"); ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager); - mController.onClick(mView); + final Preference pref = new Preference(mContext); + pref.setKey(mController.getPreferenceKey()); + + mController.handlePreferenceTreeClick(pref); verify(mContext).startActivity(any()); }