Commit 1c6ae118 authored by Eleonora Rocchi's avatar Eleonora Rocchi Committed by Commit Bot

[PwdCheckAndroid] Fix the subtitle in the header status

This CL modify how the subtitle in the header status is shown:
1) Change the font size from small to medium
2) Show the subtitle whenever a compromised credential is shown in the
   list
It also adds tests to verify the subtitle is correctly shown.

Screenshots in the linked bug.

Bug: 1122030, 1122032, 1092444
Change-Id: I08b20c2aec0663391f4db531477be688470549de
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2379744Reviewed-by: default avatarFriedrich [CET] <fhorschig@chromium.org>
Commit-Queue: Eleonora Rocchi <erocchi@google.com>
Cr-Commit-Position: refs/heads/master@{#803522}
parent 1d557a49
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
android:layout_margin="@dimen/check_status_subtitle_margin" android:layout_margin="@dimen/check_status_subtitle_margin"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:textAppearance="@style/TextAppearance.TextSmall.Secondary" android:textAppearance="@style/TextAppearance.TextMedium.Secondary"
android:visibility="gone" /> android:visibility="gone" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -16,6 +16,7 @@ import static org.chromium.chrome.browser.password_check.PasswordCheckProperties ...@@ -16,6 +16,7 @@ import static org.chromium.chrome.browser.password_check.PasswordCheckProperties
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.COMPROMISED_CREDENTIALS_COUNT; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.COMPROMISED_CREDENTIALS_COUNT;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.LAUNCH_ACCOUNT_CHECKUP_ACTION; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.LAUNCH_ACCOUNT_CHECKUP_ACTION;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.RESTART_BUTTON_ACTION; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.RESTART_BUTTON_ACTION;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.SHOW_CHECK_SUBTITLE;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.UNKNOWN_PROGRESS; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.UNKNOWN_PROGRESS;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.ITEMS; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.ITEMS;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.VIEW_CREDENTIAL; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.VIEW_CREDENTIAL;
...@@ -132,6 +133,7 @@ class PasswordCheckMediator ...@@ -132,6 +133,7 @@ class PasswordCheckMediator
.with(COMPROMISED_CREDENTIALS_COUNT, null) .with(COMPROMISED_CREDENTIALS_COUNT, null)
.with(LAUNCH_ACCOUNT_CHECKUP_ACTION, mLaunchCheckupInAccount) .with(LAUNCH_ACCOUNT_CHECKUP_ACTION, mLaunchCheckupInAccount)
.with(RESTART_BUTTON_ACTION, this::startCheckManually) .with(RESTART_BUTTON_ACTION, this::startCheckManually)
.with(SHOW_CHECK_SUBTITLE, false)
.build(); .build();
} else { } else {
header = items.get(0).model; header = items.get(0).model;
...@@ -144,6 +146,7 @@ class PasswordCheckMediator ...@@ -144,6 +146,7 @@ class PasswordCheckMediator
if (status == PasswordCheckUIStatus.IDLE) { if (status == PasswordCheckUIStatus.IDLE) {
compromisedCredentialCount = getPasswordCheck().getCompromisedCredentialsCount(); compromisedCredentialCount = getPasswordCheck().getCompromisedCredentialsCount();
checkTimestamp = getPasswordCheck().getLastCheckTimestamp(); checkTimestamp = getPasswordCheck().getLastCheckTimestamp();
header.set(SHOW_CHECK_SUBTITLE, true);
} }
header.set(CHECK_TIMESTAMP, checkTimestamp); header.set(CHECK_TIMESTAMP, checkTimestamp);
header.set(COMPROMISED_CREDENTIALS_COUNT, compromisedCredentialCount); header.set(COMPROMISED_CREDENTIALS_COUNT, compromisedCredentialCount);
...@@ -266,10 +269,13 @@ class PasswordCheckMediator ...@@ -266,10 +269,13 @@ class PasswordCheckMediator
assert items.size() >= 1; assert items.size() >= 1;
PropertyModel header = items.get(0).model; PropertyModel header = items.get(0).model;
Integer compromisedCredentialsCount = getPasswordCheck().getCompromisedCredentialsCount();
if (header.get(CHECK_STATUS) == PasswordCheckUIStatus.IDLE) { if (header.get(CHECK_STATUS) == PasswordCheckUIStatus.IDLE) {
header.set(COMPROMISED_CREDENTIALS_COUNT, header.set(COMPROMISED_CREDENTIALS_COUNT, compromisedCredentialsCount);
Integer.valueOf(getPasswordCheck().getCompromisedCredentialsCount()));
} }
header.set(SHOW_CHECK_SUBTITLE,
compromisedCredentialsCount > 0
|| header.get(CHECK_STATUS) == PasswordCheckUIStatus.IDLE);
} }
public void stopCheck() { public void stopCheck() {
......
...@@ -82,10 +82,12 @@ class PasswordCheckProperties { ...@@ -82,10 +82,12 @@ class PasswordCheckProperties {
new PropertyModel.ReadableObjectPropertyKey<>("launch_account_checkup_action"); new PropertyModel.ReadableObjectPropertyKey<>("launch_account_checkup_action");
static final PropertyModel.ReadableObjectPropertyKey<Runnable> RESTART_BUTTON_ACTION = static final PropertyModel.ReadableObjectPropertyKey<Runnable> RESTART_BUTTON_ACTION =
new PropertyModel.ReadableObjectPropertyKey<>("restart_button_action"); new PropertyModel.ReadableObjectPropertyKey<>("restart_button_action");
static final PropertyModel.WritableBooleanPropertyKey SHOW_CHECK_SUBTITLE =
new PropertyModel.WritableBooleanPropertyKey("show_check_subtitle");
static final PropertyKey[] ALL_KEYS = {CHECK_PROGRESS, CHECK_STATUS, CHECK_TIMESTAMP, static final PropertyKey[] ALL_KEYS = {CHECK_PROGRESS, CHECK_STATUS, CHECK_TIMESTAMP,
COMPROMISED_CREDENTIALS_COUNT, LAUNCH_ACCOUNT_CHECKUP_ACTION, COMPROMISED_CREDENTIALS_COUNT, LAUNCH_ACCOUNT_CHECKUP_ACTION, RESTART_BUTTON_ACTION,
RESTART_BUTTON_ACTION}; SHOW_CHECK_SUBTITLE};
static final Pair<Integer, Integer> UNKNOWN_PROGRESS = new Pair<>(-1, -1); static final Pair<Integer, Integer> UNKNOWN_PROGRESS = new Pair<>(-1, -1);
......
...@@ -16,6 +16,7 @@ import static org.chromium.chrome.browser.password_check.PasswordCheckProperties ...@@ -16,6 +16,7 @@ import static org.chromium.chrome.browser.password_check.PasswordCheckProperties
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.COMPROMISED_CREDENTIALS_COUNT; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.COMPROMISED_CREDENTIALS_COUNT;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.LAUNCH_ACCOUNT_CHECKUP_ACTION; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.LAUNCH_ACCOUNT_CHECKUP_ACTION;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.RESTART_BUTTON_ACTION; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.RESTART_BUTTON_ACTION;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.SHOW_CHECK_SUBTITLE;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.UNKNOWN_PROGRESS; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.UNKNOWN_PROGRESS;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.ITEMS; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.ITEMS;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.VIEW_CREDENTIAL; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.VIEW_CREDENTIAL;
...@@ -216,6 +217,7 @@ class PasswordCheckViewBinder { ...@@ -216,6 +217,7 @@ class PasswordCheckViewBinder {
Long checkTimestamp = model.get(CHECK_TIMESTAMP); Long checkTimestamp = model.get(CHECK_TIMESTAMP);
Integer compromisedCredentialsCount = model.get(COMPROMISED_CREDENTIALS_COUNT); Integer compromisedCredentialsCount = model.get(COMPROMISED_CREDENTIALS_COUNT);
Runnable launchCheckupInAccount = model.get(LAUNCH_ACCOUNT_CHECKUP_ACTION); Runnable launchCheckupInAccount = model.get(LAUNCH_ACCOUNT_CHECKUP_ACTION);
boolean showStatusSubtitle = model.get(SHOW_CHECK_SUBTITLE);
if (key == CHECK_PROGRESS) { if (key == CHECK_PROGRESS) {
updateStatusText(view, status, compromisedCredentialsCount, checkTimestamp, progress, updateStatusText(view, status, compromisedCredentialsCount, checkTimestamp, progress,
...@@ -226,7 +228,7 @@ class PasswordCheckViewBinder { ...@@ -226,7 +228,7 @@ class PasswordCheckViewBinder {
updateStatusIllustration(view, status, compromisedCredentialsCount); updateStatusIllustration(view, status, compromisedCredentialsCount);
updateStatusText(view, status, compromisedCredentialsCount, checkTimestamp, progress, updateStatusText(view, status, compromisedCredentialsCount, checkTimestamp, progress,
launchCheckupInAccount); launchCheckupInAccount);
updateStatusSubtitle(view, status, compromisedCredentialsCount); updateStatusSubtitle(view, status, showStatusSubtitle, compromisedCredentialsCount);
} else if (key == CHECK_TIMESTAMP) { } else if (key == CHECK_TIMESTAMP) {
updateStatusText(view, status, compromisedCredentialsCount, checkTimestamp, progress, updateStatusText(view, status, compromisedCredentialsCount, checkTimestamp, progress,
launchCheckupInAccount); launchCheckupInAccount);
...@@ -235,12 +237,14 @@ class PasswordCheckViewBinder { ...@@ -235,12 +237,14 @@ class PasswordCheckViewBinder {
updateStatusIllustration(view, status, compromisedCredentialsCount); updateStatusIllustration(view, status, compromisedCredentialsCount);
updateStatusText(view, status, compromisedCredentialsCount, checkTimestamp, progress, updateStatusText(view, status, compromisedCredentialsCount, checkTimestamp, progress,
launchCheckupInAccount); launchCheckupInAccount);
updateStatusSubtitle(view, status, compromisedCredentialsCount); updateStatusSubtitle(view, status, showStatusSubtitle, compromisedCredentialsCount);
} else if (key == LAUNCH_ACCOUNT_CHECKUP_ACTION) { } else if (key == LAUNCH_ACCOUNT_CHECKUP_ACTION) {
assert model.get(LAUNCH_ACCOUNT_CHECKUP_ACTION) assert model.get(LAUNCH_ACCOUNT_CHECKUP_ACTION)
!= null : "Launch checkup in account is always required."; != null : "Launch checkup in account is always required.";
} else if (key == RESTART_BUTTON_ACTION) { } else if (key == RESTART_BUTTON_ACTION) {
assert model.get(RESTART_BUTTON_ACTION) != null : "Restart action is always required."; assert model.get(RESTART_BUTTON_ACTION) != null : "Restart action is always required.";
} else if (key == SHOW_CHECK_SUBTITLE) {
updateStatusSubtitle(view, status, showStatusSubtitle, compromisedCredentialsCount);
} else { } else {
assert false : "Unhandled update to property:" + key; assert false : "Unhandled update to property:" + key;
} }
...@@ -454,17 +458,18 @@ class PasswordCheckViewBinder { ...@@ -454,17 +458,18 @@ class PasswordCheckViewBinder {
return 0; return 0;
} }
private static void updateStatusSubtitle( private static void updateStatusSubtitle(View view, @PasswordCheckUIStatus int status,
View view, @PasswordCheckUIStatus int status, Integer compromisedCredentialsCount) { boolean showStatusSubtitle, Integer compromisedCredentialsCount) {
// TODO(crbug.com/1114051): Set default values for header properties. // TODO(crbug.com/1114051): Set default values for header properties.
if (status == PasswordCheckUIStatus.IDLE && compromisedCredentialsCount == null) return; if (status == PasswordCheckUIStatus.IDLE && compromisedCredentialsCount == null) return;
TextView statusSubtitle = view.findViewById(R.id.check_status_subtitle); TextView statusSubtitle = view.findViewById(R.id.check_status_subtitle);
statusSubtitle.setText(getSubtitleText(view, status, compromisedCredentialsCount)); statusSubtitle.setText(
statusSubtitle.setVisibility(getSubtitleVisibility(status)); getSubtitleText(view, status, showStatusSubtitle, compromisedCredentialsCount));
statusSubtitle.setVisibility(showStatusSubtitle ? View.VISIBLE : View.GONE);
} }
private static String getSubtitleText( private static String getSubtitleText(View view, @PasswordCheckUIStatus int status,
View view, @PasswordCheckUIStatus int status, Integer compromisedCredentialsCount) { boolean showStatusSubtitle, Integer compromisedCredentialsCount) {
switch (status) { switch (status) {
case PasswordCheckUIStatus.IDLE: case PasswordCheckUIStatus.IDLE:
assert compromisedCredentialsCount != null; assert compromisedCredentialsCount != null;
...@@ -479,17 +484,14 @@ class PasswordCheckViewBinder { ...@@ -479,17 +484,14 @@ class PasswordCheckViewBinder {
case PasswordCheckUIStatus.ERROR_QUOTA_LIMIT: case PasswordCheckUIStatus.ERROR_QUOTA_LIMIT:
case PasswordCheckUIStatus.ERROR_QUOTA_LIMIT_ACCOUNT_CHECK: case PasswordCheckUIStatus.ERROR_QUOTA_LIMIT_ACCOUNT_CHECK:
case PasswordCheckUIStatus.ERROR_UNKNOWN: case PasswordCheckUIStatus.ERROR_UNKNOWN:
return null; return getString(view,
R.string.password_check_status_subtitle_found_compromised_credentials);
default: default:
assert false : "Unhandled check status " + status + "on icon update"; assert false : "Unhandled check status " + status + "on icon update";
} }
return null; return null;
} }
private static int getSubtitleVisibility(@PasswordCheckUIStatus int status) {
return status == PasswordCheckUIStatus.IDLE ? View.VISIBLE : View.GONE;
}
private static ListMenu createCredentialMenu(Context context, CompromisedCredential credential, private static ListMenu createCredentialMenu(Context context, CompromisedCredential credential,
PasswordCheckCoordinator.CredentialEventHandler credentialHandler) { PasswordCheckCoordinator.CredentialEventHandler credentialHandler) {
MVCListAdapter.ModelList menuItems = new MVCListAdapter.ModelList(); MVCListAdapter.ModelList menuItems = new MVCListAdapter.ModelList();
......
...@@ -31,6 +31,7 @@ import static org.chromium.chrome.browser.password_check.PasswordCheckProperties ...@@ -31,6 +31,7 @@ import static org.chromium.chrome.browser.password_check.PasswordCheckProperties
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.COMPROMISED_CREDENTIALS_COUNT; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.COMPROMISED_CREDENTIALS_COUNT;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.LAUNCH_ACCOUNT_CHECKUP_ACTION; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.LAUNCH_ACCOUNT_CHECKUP_ACTION;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.RESTART_BUTTON_ACTION; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.RESTART_BUTTON_ACTION;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.SHOW_CHECK_SUBTITLE;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.UNKNOWN_PROGRESS; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.UNKNOWN_PROGRESS;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.ITEMS; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.ITEMS;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.VIEW_CREDENTIAL; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.VIEW_CREDENTIAL;
...@@ -405,10 +406,21 @@ public class PasswordCheckViewTest { ...@@ -405,10 +406,21 @@ public class PasswordCheckViewTest {
assertThat(getHeaderSubtitle().getVisibility(), is(View.VISIBLE)); assertThat(getHeaderSubtitle().getVisibility(), is(View.VISIBLE));
} }
@Test
@MediumTest
public void testStatusDisplaysSubtitle() {
runOnUiThreadBlocking(() -> { mModel.get(ITEMS).add(buildHeader(ERROR_UNKNOWN, true)); });
waitForListViewToHaveLength(1);
assertThat(getHeaderSubtitle().getText(),
is(getString(
R.string.password_check_status_subtitle_found_compromised_credentials)));
assertThat(getHeaderSubtitle().getVisibility(), is(View.VISIBLE));
}
@Test @Test
@MediumTest @MediumTest
public void testStatusNotDisplaysSubtitle() { public void testStatusNotDisplaysSubtitle() {
runOnUiThreadBlocking(() -> { mModel.get(ITEMS).add(buildHeader(ERROR_UNKNOWN)); }); runOnUiThreadBlocking(() -> { mModel.get(ITEMS).add(buildHeader(ERROR_UNKNOWN, false)); });
waitForListViewToHaveLength(1); waitForListViewToHaveLength(1);
assertThat(getHeaderSubtitle().getVisibility(), is(View.GONE)); assertThat(getHeaderSubtitle().getVisibility(), is(View.GONE));
} }
...@@ -693,21 +705,26 @@ public class PasswordCheckViewTest { ...@@ -693,21 +705,26 @@ public class PasswordCheckViewTest {
private MVCListAdapter.ListItem buildHeader(@PasswordCheckUIStatus int status, private MVCListAdapter.ListItem buildHeader(@PasswordCheckUIStatus int status,
Integer compromisedCredentialsCount, Long checkTimestamp) { Integer compromisedCredentialsCount, Long checkTimestamp) {
return buildHeader(status, compromisedCredentialsCount, checkTimestamp, null); return buildHeader(status, compromisedCredentialsCount, checkTimestamp, null, true);
} }
private MVCListAdapter.ListItem buildHeader( private MVCListAdapter.ListItem buildHeader(
@PasswordCheckUIStatus int status, Pair<Integer, Integer> progress) { @PasswordCheckUIStatus int status, Pair<Integer, Integer> progress) {
return buildHeader(status, null, null, progress); return buildHeader(status, null, null, progress, false);
}
private MVCListAdapter.ListItem buildHeader(
@PasswordCheckUIStatus int status, boolean showStatusSubtitle) {
return buildHeader(status, null, null, null, showStatusSubtitle);
} }
private MVCListAdapter.ListItem buildHeader(@PasswordCheckUIStatus int status) { private MVCListAdapter.ListItem buildHeader(@PasswordCheckUIStatus int status) {
return buildHeader(status, null, null, null); return buildHeader(status, null, null, null, false);
} }
private MVCListAdapter.ListItem buildHeader(@PasswordCheckUIStatus int status, private MVCListAdapter.ListItem buildHeader(@PasswordCheckUIStatus int status,
Integer compromisedCredentialsCount, Long checkTimestamp, Integer compromisedCredentialsCount, Long checkTimestamp,
Pair<Integer, Integer> progress) { Pair<Integer, Integer> progress, boolean showStatusSubtitle) {
return new MVCListAdapter.ListItem(PasswordCheckProperties.ItemType.HEADER, return new MVCListAdapter.ListItem(PasswordCheckProperties.ItemType.HEADER,
new PropertyModel.Builder(HeaderProperties.ALL_KEYS) new PropertyModel.Builder(HeaderProperties.ALL_KEYS)
.with(CHECK_PROGRESS, progress) .with(CHECK_PROGRESS, progress)
...@@ -716,6 +733,7 @@ public class PasswordCheckViewTest { ...@@ -716,6 +733,7 @@ public class PasswordCheckViewTest {
.with(COMPROMISED_CREDENTIALS_COUNT, compromisedCredentialsCount) .with(COMPROMISED_CREDENTIALS_COUNT, compromisedCredentialsCount)
.with(LAUNCH_ACCOUNT_CHECKUP_ACTION, mMockLaunchCheckupInAccount) .with(LAUNCH_ACCOUNT_CHECKUP_ACTION, mMockLaunchCheckupInAccount)
.with(RESTART_BUTTON_ACTION, mMockStartButtonCallback) .with(RESTART_BUTTON_ACTION, mMockStartButtonCallback)
.with(SHOW_CHECK_SUBTITLE, showStatusSubtitle)
.build()); .build());
} }
......
...@@ -30,6 +30,7 @@ import static org.chromium.chrome.browser.password_check.PasswordCheckProperties ...@@ -30,6 +30,7 @@ import static org.chromium.chrome.browser.password_check.PasswordCheckProperties
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.COMPROMISED_CREDENTIALS_COUNT; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.COMPROMISED_CREDENTIALS_COUNT;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.LAUNCH_ACCOUNT_CHECKUP_ACTION; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.LAUNCH_ACCOUNT_CHECKUP_ACTION;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.RESTART_BUTTON_ACTION; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.RESTART_BUTTON_ACTION;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.SHOW_CHECK_SUBTITLE;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.UNKNOWN_PROGRESS; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.HeaderProperties.UNKNOWN_PROGRESS;
import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.ITEMS; import static org.chromium.chrome.browser.password_check.PasswordCheckProperties.ITEMS;
import static org.chromium.chrome.browser.password_check.PasswordCheckUIStatus.CANCELED; import static org.chromium.chrome.browser.password_check.PasswordCheckUIStatus.CANCELED;
...@@ -333,7 +334,7 @@ public class PasswordCheckControllerTest { ...@@ -333,7 +334,7 @@ public class PasswordCheckControllerTest {
// Set initial status to IDLE with no compromised credentials. // Set initial status to IDLE with no compromised credentials.
when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(0); when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(0);
mMediator.onPasswordCheckStatusChanged(IDLE); mMediator.onPasswordCheckStatusChanged(IDLE);
assertThat(mModel.get(ITEMS).get(0).model.get(COMPROMISED_CREDENTIALS_COUNT), is(0)); assertThat(getHeaderModel().get(COMPROMISED_CREDENTIALS_COUNT), is(0));
// Add 2 compromised credentials. // Add 2 compromised credentials.
when(mPasswordCheck.getCompromisedCredentials()) when(mPasswordCheck.getCompromisedCredentials())
...@@ -344,7 +345,7 @@ public class PasswordCheckControllerTest { ...@@ -344,7 +345,7 @@ public class PasswordCheckControllerTest {
assertThat(mModel.get(ITEMS).size(), is(3)); // Header + existing credentials. assertThat(mModel.get(ITEMS).size(), is(3)); // Header + existing credentials.
// Check the compromised credentials count updated. // Check the compromised credentials count updated.
assertThat(mModel.get(ITEMS).get(0).model.get(COMPROMISED_CREDENTIALS_COUNT), is(2)); assertThat(getHeaderModel().get(COMPROMISED_CREDENTIALS_COUNT), is(2));
} }
@Test @Test
...@@ -358,7 +359,7 @@ public class PasswordCheckControllerTest { ...@@ -358,7 +359,7 @@ public class PasswordCheckControllerTest {
@Test @Test
public void testNotIdleStatusNotUpdatedOnCredentialsFetchCompleted() { public void testNotIdleStatusNotUpdatedOnCredentialsFetchCompleted() {
mMediator.onPasswordCheckStatusChanged(RUNNING); mMediator.onPasswordCheckStatusChanged(RUNNING);
assertNull(mModel.get(ITEMS).get(0).model.get(COMPROMISED_CREDENTIALS_COUNT)); assertNull(getHeaderModel().get(COMPROMISED_CREDENTIALS_COUNT));
// Add ANA while the check is running. // Add ANA while the check is running.
when(mPasswordCheck.getCompromisedCredentials()) when(mPasswordCheck.getCompromisedCredentials())
...@@ -369,7 +370,7 @@ public class PasswordCheckControllerTest { ...@@ -369,7 +370,7 @@ public class PasswordCheckControllerTest {
assertThat(mModel.get(ITEMS).size(), is(2)); // Header + existing credentials. assertThat(mModel.get(ITEMS).size(), is(2)); // Header + existing credentials.
// Check the compromised credential count did not update. // Check the compromised credential count did not update.
assertNull(mModel.get(ITEMS).get(0).model.get(COMPROMISED_CREDENTIALS_COUNT)); assertNull(getHeaderModel().get(COMPROMISED_CREDENTIALS_COUNT));
} }
@Test @Test
...@@ -377,7 +378,7 @@ public class PasswordCheckControllerTest { ...@@ -377,7 +378,7 @@ public class PasswordCheckControllerTest {
// Set initial status to IDLE with no compromised credentials. // Set initial status to IDLE with no compromised credentials.
when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(0); when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(0);
mMediator.onPasswordCheckStatusChanged(IDLE); mMediator.onPasswordCheckStatusChanged(IDLE);
assertThat(mModel.get(ITEMS).get(0).model.get(COMPROMISED_CREDENTIALS_COUNT), is(0)); assertThat(getHeaderModel().get(COMPROMISED_CREDENTIALS_COUNT), is(0));
// Add ANA to the compromised credentials. // Add ANA to the compromised credentials.
when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(1); when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(1);
...@@ -385,13 +386,13 @@ public class PasswordCheckControllerTest { ...@@ -385,13 +386,13 @@ public class PasswordCheckControllerTest {
assertThat(mModel.get(ITEMS).size(), is(2)); // Header + existing credentials. assertThat(mModel.get(ITEMS).size(), is(2)); // Header + existing credentials.
// Check the compromised credentials count updated. // Check the compromised credentials count updated.
assertThat(mModel.get(ITEMS).get(0).model.get(COMPROMISED_CREDENTIALS_COUNT), is(1)); assertThat(getHeaderModel().get(COMPROMISED_CREDENTIALS_COUNT), is(1));
} }
@Test @Test
public void testNotIdleStatusNotUpdatedOnCredentialFound() { public void testNotIdleStatusNotUpdatedOnCredentialFound() {
mMediator.onPasswordCheckStatusChanged(ERROR_UNKNOWN); mMediator.onPasswordCheckStatusChanged(ERROR_UNKNOWN);
assertNull(mModel.get(ITEMS).get(0).model.get(COMPROMISED_CREDENTIALS_COUNT)); assertNull(getHeaderModel().get(COMPROMISED_CREDENTIALS_COUNT));
// Add ANA after the check has failed. // Add ANA after the check has failed.
when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(1); when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(1);
...@@ -399,7 +400,55 @@ public class PasswordCheckControllerTest { ...@@ -399,7 +400,55 @@ public class PasswordCheckControllerTest {
assertThat(mModel.get(ITEMS).size(), is(2)); // Header + existing credentials. assertThat(mModel.get(ITEMS).size(), is(2)); // Header + existing credentials.
// Check the compromised credentials count did not update. // Check the compromised credentials count did not update.
assertNull(mModel.get(ITEMS).get(0).model.get(COMPROMISED_CREDENTIALS_COUNT)); assertNull(getHeaderModel().get(COMPROMISED_CREDENTIALS_COUNT));
}
@Test
public void testOnStatusUpdateAsIdleShowSubtitle() {
mMediator.onPasswordCheckStatusChanged(IDLE);
assertThat(getHeaderModel().get(SHOW_CHECK_SUBTITLE), is(true));
}
@Test
public void testOnStatusUpdateAsNotIdleNotShowSubtitle() {
mMediator.onPasswordCheckStatusChanged(ERROR_UNKNOWN);
assertThat(getHeaderModel().get(SHOW_CHECK_SUBTITLE), is(false));
}
@Test
public void testShowSubtitleOnCompromisedCredentialFound() {
when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(1);
mMediator.onCompromisedCredentialFound(ANA);
assertThat(getHeaderModel().get(SHOW_CHECK_SUBTITLE), is(true));
}
@Test
public void testShowSubtitleOnCompromisedCredentialsFetched() {
when(mPasswordCheck.getCompromisedCredentials())
.thenReturn(new CompromisedCredential[] {ANA});
when(mPasswordCheck.areScriptsRefreshed()).thenReturn(true);
when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(1);
mMediator.onCompromisedCredentialsFetchCompleted();
assertThat(getHeaderModel().get(SHOW_CHECK_SUBTITLE), is(true));
}
@Test
public void testShowSubtitleOnNoCompromisedCredentialsFetchedIfIdleStatus() {
mMediator.onPasswordCheckStatusChanged(IDLE);
when(mPasswordCheck.getCompromisedCredentials()).thenReturn(new CompromisedCredential[] {});
when(mPasswordCheck.areScriptsRefreshed()).thenReturn(true);
when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(0);
mMediator.onCompromisedCredentialsFetchCompleted();
assertThat(getHeaderModel().get(SHOW_CHECK_SUBTITLE), is(true));
}
@Test
public void testNotShowSubtitleOnNoCompromisedCredentialsFetched() {
when(mPasswordCheck.getCompromisedCredentials()).thenReturn(new CompromisedCredential[] {});
when(mPasswordCheck.areScriptsRefreshed()).thenReturn(true);
when(mPasswordCheck.getCompromisedCredentialsCount()).thenReturn(0);
mMediator.onCompromisedCredentialsFetchCompleted();
assertThat(getHeaderModel().get(SHOW_CHECK_SUBTITLE), is(false));
} }
@Test @Test
...@@ -568,4 +617,8 @@ public class PasswordCheckControllerTest { ...@@ -568,4 +617,8 @@ public class PasswordCheckControllerTest {
return new CompromisedCredential(origin, mock(GURL.class), username, origin, username, return new CompromisedCredential(origin, mock(GURL.class), username, origin, username,
"password", origin, new String(), creationTime, leaked, phished, false); "password", origin, new String(), creationTime, leaked, phished, false);
} }
private PropertyModel getHeaderModel() {
return mModel.get(ITEMS).get(0).model;
}
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment