Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/SyncPreference.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SyncPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SyncPreference.java |
index aa9dea8add26c2be78a3f54aa523b8e40d8e9b8b..69e79288ea65b4c7175ba9a44d5178541f8e354c 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SyncPreference.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SyncPreference.java |
@@ -35,7 +35,10 @@ public class SyncPreference extends Preference { |
public void updateSyncSummaryAndIcon() { |
setSummary(getSyncStatusSummary(getContext())); |
- if (ProfileSyncService.get().getAuthError() == GoogleServiceAuthError.State.NONE) { |
+ if (SyncPreference.showSyncErrorIcon(getContext())) { |
+ setIcon(ApiCompatibilityUtils.getDrawable( |
+ getContext().getResources(), R.drawable.sync_error)); |
+ } else { |
// Sets preference icon and tints it to blue. |
Drawable icon = ApiCompatibilityUtils.getDrawable( |
getContext().getResources(), R.drawable.permission_background_sync); |
@@ -43,12 +46,37 @@ public class SyncPreference extends Preference { |
getContext().getResources(), R.color.light_active_color), |
PorterDuff.Mode.SRC_IN); |
setIcon(icon); |
- } else { |
- setIcon(ApiCompatibilityUtils.getDrawable( |
- getContext().getResources(), R.drawable.sync_error)); |
} |
} |
+ /** |
+ * Checks if sync error icon should be shown. Show sync error icon if sync is off because |
+ * of error, passphrase required or disabled in Android. |
+ */ |
+ public static boolean showSyncErrorIcon(Context context) { |
+ if (!AndroidSyncSettings.isMasterSyncEnabled(context)) { |
+ return true; |
+ } |
+ |
+ ProfileSyncService profileSyncService = ProfileSyncService.get(); |
+ if (profileSyncService != null) { |
+ if (profileSyncService.hasUnrecoverableError()) { |
+ return true; |
+ } |
+ |
+ if (profileSyncService.getAuthError() != GoogleServiceAuthError.State.NONE) { |
+ return true; |
+ } |
+ |
+ if (profileSyncService.isSyncActive() |
+ && profileSyncService.isPassphraseRequiredForDecryption()) { |
+ return true; |
+ } |
+ } |
+ |
+ return false; |
+ } |
+ |
private static String getSyncStatusSummary(Context context) { |
if (!ChromeSigninController.get(context).isSignedIn()) return ""; |