Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/StatusListItem.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/StatusListItem.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/StatusListItem.java |
index 88f33d0204bc1deeca9c7811df890d46310b0cd2..599d94a56352fe8d525a2000910cbeb7ce383a87 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/StatusListItem.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/StatusListItem.java |
@@ -14,7 +14,7 @@ import org.chromium.base.Log; |
import org.chromium.chrome.R; |
import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager; |
import org.chromium.chrome.browser.ntp.UiConfig; |
-import org.chromium.chrome.browser.ntp.snippets.DisabledReason; |
+import org.chromium.chrome.browser.ntp.snippets.ContentSuggestionsCategoryStatus; |
import org.chromium.chrome.browser.preferences.PreferencesLauncher; |
import org.chromium.chrome.browser.signin.AccountSigninActivity; |
import org.chromium.chrome.browser.signin.SigninAccessPoint; |
@@ -49,14 +49,35 @@ public abstract class StatusListItem implements NewTabPageListItem { |
final StatusListItem listItem = (StatusListItem) item; |
mTitleView.setText(listItem.mHeaderStringId); |
mBodyView.setText(listItem.mDescriptionStringId); |
- mActionView.setText(listItem.mActionStringId); |
- mActionView.setOnClickListener(new OnClickListener() { |
- @Override |
- public void onClick(View v) { |
- listItem.performAction(v.getContext()); |
- } |
- }); |
+ if (listItem.hasAction()) { |
+ mActionView.setText(listItem.mActionStringId); |
+ mActionView.setOnClickListener(new OnClickListener() { |
+ |
+ @Override |
+ public void onClick(View v) { |
+ listItem.performAction(v.getContext()); |
+ } |
+ }); |
+ mActionView.setVisibility(View.VISIBLE); |
+ } else { |
+ mActionView.setVisibility(View.GONE); |
+ } |
+ } |
+ } |
+ |
+ private static class ErrorListItem extends StatusListItem { |
+ public ErrorListItem(int headerStringId, int descriptionStringId) { |
+ super(headerStringId, descriptionStringId, 0); |
+ } |
+ @Override |
+ protected void performAction(Context context) { |
+ // No action. |
+ } |
+ |
+ @Override |
+ protected boolean hasAction() { |
+ return false; |
} |
} |
@@ -139,6 +160,26 @@ public abstract class StatusListItem implements NewTabPageListItem { |
} |
} |
+ private static class CategoryExplicitlyDisabled extends ErrorListItem { |
+ public CategoryExplicitlyDisabled() { |
+ // TODO(pke): Those are technically the wrong strings, but they roughly fit in this |
+ // case. This should only be called when the category has been disabled via enterprise |
+ // policy. Replace this with proper error card once it has been specified. |
+ super(R.string.ntp_status_card_title_empty, R.string.ntp_status_card_body_empty); |
+ Log.d(TAG, "Registering card for error: Category Explicitly Disabled"); |
+ } |
+ } |
+ |
+ private static class ProviderError extends ErrorListItem { |
+ public ProviderError() { |
+ // TODO(pke): Those are technically the wrong strings, but they roughly fit in this |
+ // case. This is only called if NTPSnippetsDatabase encounters an error. |
+ // Replace this with proper error card once it has been specified. |
+ super(R.string.ntp_status_card_title_empty, R.string.ntp_status_card_body_empty); |
+ Log.d(TAG, "Registering card for error: Provider Error"); |
+ } |
+ } |
+ |
private static final String TAG = "NtpCards"; |
private final int mHeaderStringId; |
@@ -146,37 +187,53 @@ public abstract class StatusListItem implements NewTabPageListItem { |
private final int mActionStringId; |
public static StatusListItem create( |
- int disabledReason, NewTabPageAdapter adapter, NewTabPageManager manager) { |
- switch (disabledReason) { |
- case DisabledReason.NONE: |
+ int categoryStatus, NewTabPageAdapter adapter, NewTabPageManager manager) { |
+ switch (categoryStatus) { |
+ case ContentSuggestionsCategoryStatus.AVAILABLE: |
+ case ContentSuggestionsCategoryStatus.AVAILABLE_LOADING: |
return new NoSnippets(adapter); |
- case DisabledReason.SIGNED_OUT: |
+ case ContentSuggestionsCategoryStatus.SIGNED_OUT: |
return new SignedOut(); |
- case DisabledReason.SYNC_DISABLED: |
+ case ContentSuggestionsCategoryStatus.SYNC_DISABLED: |
return new SyncDisabled(); |
- case DisabledReason.PASSPHRASE_ENCRYPTION_ENABLED: |
+ case ContentSuggestionsCategoryStatus.PASSPHRASE_ENCRYPTION_ENABLED: |
return new PassphraseEncryptionEnabled(manager); |
- case DisabledReason.HISTORY_SYNC_STATE_UNKNOWN: |
- // This should only be a transient state: during app launch, or when the sync |
- // settings are being modified, and the user should never see a card showing this. |
- // So let's just use HistorySyncDisabled as fallback. |
- // TODO(dgn): If we add a spinner at some point (e.g. to show that we are fetching |
- // snippets) we could use it here too. |
- case DisabledReason.HISTORY_SYNC_DISABLED: |
+ // INITIALIZING should only be a transient state: during app launch, or when the sync |
+ // settings are being modified, and the user should never see a card showing this. |
+ // So let's just use HistorySyncDisabled as fallback. |
+ // TODO(dgn): If we add a spinner at some point (e.g. to show that we are fetching |
+ // snippets) we could use it here too. |
+ case ContentSuggestionsCategoryStatus.INITIALIZING: |
+ case ContentSuggestionsCategoryStatus.HISTORY_SYNC_DISABLED: |
return new HistorySyncDisabled(); |
- case DisabledReason.EXPLICITLY_DISABLED: |
+ case ContentSuggestionsCategoryStatus.ALL_SUGGESTIONS_EXPLICITLY_DISABLED: |
Log.wtf(TAG, "FATAL: Attempted to create a status card while the feature should be " |
+ "off."); |
return null; |
+ case ContentSuggestionsCategoryStatus.CATEGORY_EXPLICITLY_DISABLED: |
+ Log.d(TAG, "Not showing ARTICLES suggestions because this category is disabled."); |
+ // TODO(pke): Replace this. |
+ return new CategoryExplicitlyDisabled(); |
+ |
+ case ContentSuggestionsCategoryStatus.NOT_PROVIDED: |
+ Log.wtf(TAG, "FATAL: Attempted to create a status card for content suggestions " |
+ + " when provider for ARTICLES is not registered."); |
+ return null; |
+ |
+ case ContentSuggestionsCategoryStatus.LOADING_ERROR: |
+ Log.d(TAG, "Not showing ARTICLES suggestions because of provider error."); |
+ // TODO(pke): Replace this. |
+ return new ProviderError(); |
+ |
default: |
Log.wtf(TAG, "FATAL: Attempted to create a status card for an unknown value: %d", |
- disabledReason); |
+ categoryStatus); |
return null; |
} |
} |
@@ -189,6 +246,10 @@ public abstract class StatusListItem implements NewTabPageListItem { |
protected abstract void performAction(Context context); |
+ protected boolean hasAction() { |
+ return true; |
+ } |
+ |
@Override |
public int getType() { |
return NewTabPageListItem.VIEW_TYPE_STATUS; |