diff --git a/res/layout/shared_data_empty_list_view.xml b/res/layout/shared_data_empty_list_view.xml deleted file mode 100644 index 1bb338bdaf8..00000000000 --- a/res/layout/shared_data_empty_list_view.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/res/values/strings.xml b/res/values/strings.xml index f913b7abe64..6baea65c133 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3032,7 +3032,7 @@ Android version - Android security patch level + Android security update Model @@ -7181,8 +7181,6 @@ - - diff --git a/src/com/android/settings/development/storage/BlobInfoListView.java b/src/com/android/settings/development/storage/BlobInfoListView.java index 427e37fbc10..8e312a25579 100644 --- a/src/com/android/settings/development/storage/BlobInfoListView.java +++ b/src/com/android/settings/development/storage/BlobInfoListView.java @@ -16,6 +16,7 @@ package com.android.settings.development.storage; +import android.app.ActionBar; import android.app.ListActivity; import android.app.blob.BlobInfo; import android.app.blob.BlobStoreManager; @@ -30,7 +31,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; -import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; @@ -41,7 +41,6 @@ import com.android.settings.R; import java.io.IOException; import java.util.List; -// TODO: have this class extend DashboardFragment for consistency public class BlobInfoListView extends ListActivity { private static final String TAG = "BlobInfoListView"; @@ -60,6 +59,17 @@ public class BlobInfoListView extends ListActivity { mAdapter = new BlobListAdapter(this); setListAdapter(mAdapter); + + final ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + public boolean onNavigateUp() { + finish(); + return true; } @Override @@ -91,14 +101,6 @@ public class BlobInfoListView extends ListActivity { } } - private View getEmptyView() { - final View emptyView = mInflater.inflate(R.layout.shared_data_empty_list_view, - (ViewGroup) getListView().getRootView()); - final TextView emptyText = emptyView.findViewById(R.id.empty_view_text); - emptyText.setText(R.string.shared_data_no_blobs_text); - return emptyView; - } - private void showDeleteBlobDialog(BlobInfo blob) { final AlertDialog dialog = new AlertDialog.Builder(mContext) .setMessage(R.string.shared_data_no_accessors_dialog_text) @@ -139,7 +141,7 @@ public class BlobInfoListView extends ListActivity { void updateList(List blobs) { clear(); if (blobs.isEmpty()) { - getListView().setEmptyView(getEmptyView()); + finish(); } else { addAll(blobs); } diff --git a/src/com/android/settings/development/storage/LeaseInfoListView.java b/src/com/android/settings/development/storage/LeaseInfoListView.java index b9a30427397..ef9e5b813f2 100644 --- a/src/com/android/settings/development/storage/LeaseInfoListView.java +++ b/src/com/android/settings/development/storage/LeaseInfoListView.java @@ -16,6 +16,7 @@ package com.android.settings.development.storage; +import android.app.ActionBar; import android.app.ListActivity; import android.app.blob.BlobInfo; import android.app.blob.BlobStoreManager; @@ -44,7 +45,6 @@ import com.android.settings.R; import java.io.IOException; import java.util.List; -// TODO: have this class extend DashboardFragment for consistency public class LeaseInfoListView extends ListActivity { private static final String TAG = "LeaseInfoListView"; @@ -74,6 +74,17 @@ public class LeaseInfoListView extends ListActivity { getListView().addHeaderView(getHeaderView()); getListView().addFooterView(getFooterView()); getListView().setClickable(false); + + final ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + public boolean onNavigateUp() { + finish(); + return true; } private LinearLayout getHeaderView() { diff --git a/src/com/android/settings/development/storage/SharedDataPreferenceController.java b/src/com/android/settings/development/storage/SharedDataPreferenceController.java index 1d5c3e40168..5d94dc81ee8 100644 --- a/src/com/android/settings/development/storage/SharedDataPreferenceController.java +++ b/src/com/android/settings/development/storage/SharedDataPreferenceController.java @@ -18,13 +18,20 @@ package com.android.settings.development.storage; import android.app.blob.BlobStoreManager; import android.content.Context; +import android.os.UserHandle; +import android.util.Log; import androidx.preference.Preference; +import com.android.settings.R; +import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.development.DeveloperOptionsPreferenceController; -public class SharedDataPreferenceController extends DeveloperOptionsPreferenceController { +import java.io.IOException; +public class SharedDataPreferenceController extends DeveloperOptionsPreferenceController + implements PreferenceControllerMixin { + private static final String TAG = "SharedDataPrefCtrl"; private static final String SHARED_DATA = "shared_data"; private BlobStoreManager mBlobStoreManager; @@ -39,14 +46,18 @@ public class SharedDataPreferenceController extends DeveloperOptionsPreferenceCo return SHARED_DATA; } - @Override - public boolean isAvailable() { - return mBlobStoreManager != null; - } - @Override public void updateState(Preference preference) { - preference.setEnabled(mBlobStoreManager != null); - // TODO: update summary to indicate why this preference isn't available + try { + final boolean showPref = mBlobStoreManager != null + && !mBlobStoreManager.queryBlobsForUser(UserHandle.CURRENT).isEmpty(); + preference.setEnabled(showPref); + preference.setSummary(showPref ? R.string.shared_data_summary + : R.string.shared_data_no_blobs_text); + } catch (IOException e) { + Log.e(TAG, "Unable to fetch blobs for current user: " + e.getMessage()); + preference.setEnabled(false); + preference.setSummary(R.string.shared_data_no_blobs_text); + } } } diff --git a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java index 728343e9134..bed14a81726 100644 --- a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java +++ b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java @@ -24,7 +24,6 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OV import static com.android.settings.widget.RadioButtonPreferenceWithExtraWidget.EXTRA_WIDGET_VISIBILITY_GONE; import static com.android.settings.widget.RadioButtonPreferenceWithExtraWidget.EXTRA_WIDGET_VISIBILITY_SETTING; -import android.accessibilityservice.AccessibilityServiceInfo; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; @@ -273,18 +272,10 @@ public class SystemNavigationGestureSettings extends RadioButtonPickerFragment i } private boolean isAnyServiceSupportAccessibilityButton() { - final AccessibilityManager ams = (AccessibilityManager) getContext().getSystemService( - Context.ACCESSIBILITY_SERVICE); - final List services = ams.getEnabledAccessibilityServiceList( - AccessibilityServiceInfo.FEEDBACK_ALL_MASK); - - for (AccessibilityServiceInfo info : services) { - if ((info.flags & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0) { - return true; - } - } - - return false; + final AccessibilityManager ams = getContext().getSystemService(AccessibilityManager.class); + final List targets = ams.getAccessibilityShortcutTargets( + AccessibilityManager.ACCESSIBILITY_BUTTON); + return !targets.isEmpty(); } private boolean isNavBarMagnificationEnabled() { diff --git a/src/com/android/settings/media/MediaOutputIndicatorSlice.java b/src/com/android/settings/media/MediaOutputIndicatorSlice.java index 79d446e0f57..f336f279295 100644 --- a/src/com/android/settings/media/MediaOutputIndicatorSlice.java +++ b/src/com/android/settings/media/MediaOutputIndicatorSlice.java @@ -25,6 +25,7 @@ import android.content.Intent; import android.graphics.Bitmap; import android.media.session.MediaController; import android.net.Uri; +import android.util.Log; import androidx.core.graphics.drawable.IconCompat; import androidx.slice.Slice; @@ -104,6 +105,10 @@ public class MediaOutputIndicatorSlice implements CustomSliceable { @Override public void onNotifyChange(Intent i) { + if (getWorker() == null) { + Log.d(TAG, "onNotifyChange: Worker is null"); + return; + } final MediaController mediaController = getWorker().getActiveLocalMediaController(); final Intent intent = new Intent() .setPackage(Utils.SETTINGS_PACKAGE_NAME) diff --git a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java index 023f89ec810..13324fcfeeb 100644 --- a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java +++ b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java @@ -26,8 +26,6 @@ import android.telephony.TelephonyManager; import androidx.preference.ListPreference; import androidx.preference.Preference; -import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants; - /** * Preference controller for "System Select" */ diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java index 626390a9bbb..2eda9d94598 100644 --- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java +++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java @@ -176,7 +176,11 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon private void dismissProgressBar() { if (mProgressDialog != null && mProgressDialog.isShowing()) { - mProgressDialog.dismiss(); + try { + mProgressDialog.dismiss(); + } catch (IllegalArgumentException e) { + // Ignore exception since the dialog will be gone anyway. + } } } diff --git a/src/com/android/settings/panel/MediaOutputPanel.java b/src/com/android/settings/panel/MediaOutputPanel.java index f528cea4f5a..56ed6fbe8ce 100644 --- a/src/com/android/settings/panel/MediaOutputPanel.java +++ b/src/com/android/settings/panel/MediaOutputPanel.java @@ -259,7 +259,9 @@ public class MediaOutputPanel implements PanelContent, LocalMediaManager.DeviceC @Override public void onPlaybackStateChanged(PlaybackState state) { - if (mCallback != null && state.getState() != PlaybackState.STATE_PLAYING) { + final int playState = state.getState(); + if (mCallback != null && (playState == PlaybackState.STATE_STOPPED + || playState == PlaybackState.STATE_PAUSED)) { mCallback.forceClose(); } } diff --git a/src/com/android/settings/widget/DisabledCheckBoxPreference.java b/src/com/android/settings/widget/DisabledCheckBoxPreference.java index 15c17dc88dd..d2a00587989 100644 --- a/src/com/android/settings/widget/DisabledCheckBoxPreference.java +++ b/src/com/android/settings/widget/DisabledCheckBoxPreference.java @@ -18,6 +18,7 @@ package com.android.settings.widget; import android.content.Context; import android.content.res.TypedArray; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.TextView; @@ -95,6 +96,7 @@ public class DisabledCheckBoxPreference extends CheckBoxPreference { if (title != null) { title.setSingleLine(false); title.setMaxLines(2); + title.setEllipsize(TextUtils.TruncateAt.END); } } diff --git a/src/com/android/settings/wifi/WifiSettings2.java b/src/com/android/settings/wifi/WifiSettings2.java index e791df83a29..30d5ad08da4 100644 --- a/src/com/android/settings/wifi/WifiSettings2.java +++ b/src/com/android/settings/wifi/WifiSettings2.java @@ -770,9 +770,9 @@ public class WifiSettings2 extends RestrictedSettingsFragment pref.setOrder(index++); pref.refresh(); - if (wifiEntry.canManageSubscription()) { + if (wifiEntry.getHelpUriString() != null) { pref.setOnButtonClickListener(preference -> { - openSubscriptionHelpPage(); + openSubscriptionHelpPage(wifiEntry); }); } mWifiEntryPreferenceCategory.addPreference(pref); @@ -1111,8 +1111,8 @@ public class WifiSettings2 extends RestrictedSettingsFragment } @VisibleForTesting - void openSubscriptionHelpPage() { - final Intent intent = getHelpIntent(getContext()); + void openSubscriptionHelpPage(WifiEntry wifiEntry) { + final Intent intent = getHelpIntent(getContext(), wifiEntry.getHelpUriString()); if (intent != null) { try { startActivityForResult(intent, MANAGE_SUBSCRIPTION); @@ -1123,10 +1123,7 @@ public class WifiSettings2 extends RestrictedSettingsFragment } @VisibleForTesting - Intent getHelpIntent(Context context) { - return HelpUtils.getHelpIntent( - context, - context.getString(R.string.help_url_manage_wifi_subscription), - context.getClass().getName()); + Intent getHelpIntent(Context context, String helpUrlString) { + return HelpUtils.getHelpIntent(context, helpUrlString, context.getClass().getName()); } } diff --git a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java index 3b735fa7214..1d1c80193cf 100644 --- a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java +++ b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2.java @@ -17,6 +17,7 @@ package com.android.settings.wifi.savedaccesspoints2; import android.content.Context; +import android.text.TextUtils; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; @@ -83,14 +84,35 @@ public class SavedAccessPointsPreferenceController2 extends BasePreferenceContro return false; } + /** + * mPreferenceGroup is not in a RecyclerView. To keep TalkBack focus, this method should not + * mPreferenceGroup.removeAll() then mPreferenceGroup.addPreference for mWifiEntries. + */ private void updatePreference() { - mPreferenceGroup.removeAll(); - for (WifiEntry wifiEntry : mWifiEntries) { - final WifiEntryPreference preference = new WifiEntryPreference(mContext, wifiEntry); - preference.setKey(wifiEntry.getKey()); - preference.setOnPreferenceClickListener(this); + // Remove the Preference of removed WifiEntry. + final List removedPreferenceKeys = new ArrayList<>(); + final int preferenceCount = mPreferenceGroup.getPreferenceCount(); + for (int i = 0; i < preferenceCount; i++) { + final String key = mPreferenceGroup.getPreference(i).getKey(); + if (mWifiEntries.stream().filter(wifiEntry -> + TextUtils.equals(key, wifiEntry.getKey())).count() == 0) { + removedPreferenceKeys.add(key); + } + } + for (String removedPreferenceKey : removedPreferenceKeys) { + mPreferenceGroup.removePreference( + mPreferenceGroup.findPreference(removedPreferenceKey)); + } - mPreferenceGroup.addPreference(preference); + // Add the Preference of new added WifiEntry. + for (WifiEntry wifiEntry : mWifiEntries) { + if (mPreferenceGroup.findPreference(wifiEntry.getKey()) == null) { + final WifiEntryPreference preference = new WifiEntryPreference(mContext, wifiEntry); + preference.setKey(wifiEntry.getKey()); + preference.setOnPreferenceClickListener(this); + + mPreferenceGroup.addPreference(preference); + } } } } diff --git a/tests/robotests/src/com/android/settings/development/storage/SharedDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/storage/SharedDataPreferenceControllerTest.java index 86bb4a70883..f11fb399689 100644 --- a/tests/robotests/src/com/android/settings/development/storage/SharedDataPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/storage/SharedDataPreferenceControllerTest.java @@ -22,8 +22,11 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.blob.BlobInfo; import android.app.blob.BlobStoreManager; +import android.app.blob.LeaseInfo; import android.content.Context; +import android.os.UserHandle; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; @@ -38,6 +41,10 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.util.ReflectionHelpers; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + // TODO: add more detailed tests for the shared data screens @RunWith(RobolectricTestRunner.class) public class SharedDataPreferenceControllerTest { @@ -63,8 +70,11 @@ public class SharedDataPreferenceControllerTest { } @Test - public void updateState_BlobManagerIsNotNull_preferenceIsEnabled() { + public void updateState_BlobManagerIsNotNullAndBlobsExist_preferenceIsEnabled() + throws IOException { ReflectionHelpers.setField(mController, "mBlobStoreManager", mBlobStoreManager); + when(mBlobStoreManager.queryBlobsForUser(UserHandle.CURRENT)) + .thenReturn(generateBlobList()); mController.updateState(mPreference); verify(mPreference).setEnabled(true); @@ -72,11 +82,38 @@ public class SharedDataPreferenceControllerTest { .isEqualTo(mContext.getString(R.string.shared_data_summary)); } + @Test + public void updateState_BlobManagerIsNotNullButNoBlobsExist_preferenceIsDisabled() { + ReflectionHelpers.setField(mController, "mBlobStoreManager", mBlobStoreManager); + mController.updateState(mPreference); + + verify(mPreference).setEnabled(false); + assertThat(mPreference.getSummary()) + .isEqualTo(mContext.getString(R.string.shared_data_no_blobs_text)); + } + @Test public void updateState_BlobManagerIsNull_preferenceIsDisabled() { ReflectionHelpers.setField(mController, "mBlobStoreManager", null); mController.updateState(mPreference); verify(mPreference).setEnabled(false); + assertThat(mPreference.getSummary()) + .isEqualTo(mContext.getString(R.string.shared_data_no_blobs_text)); + } + + private List generateBlobList() { + LeaseInfo one = new LeaseInfo("com.google.android.photos", + System.currentTimeMillis(), -1, "test description"); + LeaseInfo two = new LeaseInfo("com.google.android.drive", + System.currentTimeMillis(), -1, "test description 2"); + + List accessors = new ArrayList<>(); + accessors.add(one); + accessors.add(two); + + final List tmp = new ArrayList<>(); + tmp.add(new BlobInfo(10, System.currentTimeMillis(), "testing blob 1", accessors)); + return tmp; } } diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java index 8717b6f357e..55cc4cd57a3 100644 --- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java +++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java @@ -21,7 +21,9 @@ import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDIC import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -190,6 +192,14 @@ public class MediaOutputIndicatorSliceTest { assertThat(metadata.isErrorSlice()).isTrue(); } + @Test + public void onNotifyChange_noWorker_doNothing() { + sMediaOutputIndicatorWorker = null; + mMediaOutputIndicatorSlice.onNotifyChange(new Intent()); + + verify(mContext, never()).startActivity(any()); + } + @Test public void onNotifyChange_withActiveLocalMedia_verifyIntentExtra() { when(mMediaController.getSessionToken()).thenReturn(mToken); diff --git a/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java b/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java index 0f30c200bf1..e0b926b8a68 100644 --- a/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java +++ b/tests/robotests/src/com/android/settings/panel/MediaOutputPanelTest.java @@ -295,4 +295,19 @@ public class MediaOutputPanelTest { verify(mCallback).forceClose(); } + + @Test + public void onPlaybackStateChanged_stateFromPlayingToPaused_verifyCallForceClose() { + mPanel.onStart(); + verify(mMediaController).registerCallback(mControllerCbs.capture()); + final MediaController.Callback controllerCallbacks = mControllerCbs.getValue(); + when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PLAYING); + controllerCallbacks.onPlaybackStateChanged(mPlaybackState); + verify(mCallback, never()).forceClose(); + + when(mPlaybackState.getState()).thenReturn(PlaybackState.STATE_PAUSED); + controllerCallbacks.onPlaybackStateChanged(mPlaybackState); + + verify(mCallback).forceClose(); + } } diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java b/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java index b259cc39b4f..b2a28db8dce 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiSettings2Test.java @@ -74,6 +74,7 @@ import org.robolectric.shadows.ShadowToast; public class WifiSettings2Test { private static final int NUM_NETWORKS = 4; + private static final String FAKE_URI_STRING = "fakeuri"; @Mock private PowerManager mPowerManager; @@ -281,10 +282,12 @@ public class WifiSettings2Test { @Test public void openSubscriptionHelpPage_shouldCallStartActivityForResult() { - doReturn(new Intent()).when(mWifiSettings2).getHelpIntent(mContext); + doReturn(new Intent()).when(mWifiSettings2).getHelpIntent(mContext, FAKE_URI_STRING); doNothing().when(mWifiSettings2).startActivityForResult(any(Intent.class), anyInt()); + final WifiEntry mockWifiEntry = mock(WifiEntry.class); + when(mockWifiEntry.getHelpUriString()).thenReturn(FAKE_URI_STRING); - mWifiSettings2.openSubscriptionHelpPage(); + mWifiSettings2.openSubscriptionHelpPage(mockWifiEntry); verify(mWifiSettings2, times(1)).startActivityForResult(any(), anyInt()); } diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingDisclaimerFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingDisclaimerFragmentTest.java index d7b79b1e5a9..207a2318c61 100644 --- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingDisclaimerFragmentTest.java +++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingDisclaimerFragmentTest.java @@ -22,7 +22,6 @@ import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -43,9 +42,6 @@ import com.android.settings.R; import com.android.settings.testutils.shadow.ShadowDisclaimerItemFactory; import com.android.settings.testutils.shadow.ShadowFragment; -import java.util.ArrayList; -import java.util.List; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -53,9 +49,12 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +import java.util.ArrayList; +import java.util.List; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowDisclaimerItemFactory.class, ShadowFragment.class}) diff --git a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java index f50021ba33e..acc6543f8c3 100644 --- a/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java +++ b/tests/robotests/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsPreferenceController2Test.java @@ -103,4 +103,20 @@ public class SavedAccessPointsPreferenceController2Test { assertThat(prefs.size()).isEqualTo(1); assertThat(prefs.get(0).getTitle()).isEqualTo(title); } + + @Test + public void displayPreference_noAccessPoint_shouldRemoveIt() { + final String title = "ssid_title"; + final String key = "key"; + final WifiEntry mockWifiEntry = mock(WifiEntry.class); + when(mockWifiEntry.getTitle()).thenReturn(title); + when(mockWifiEntry.getKey()).thenReturn(key); + final WifiEntryPreference preference = new WifiEntryPreference(mContext, mockWifiEntry); + preference.setKey(key); + mPreferenceCategory.addPreference(preference); + + mController.displayPreference(mPreferenceScreen, new ArrayList<>()); + + assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(0); + } }