@VisibleForTesting
 protected boolean isSyncAllowed() {
   SigninManager signinManager = SigninManager.get(mActivity.getApplicationContext());
   return FeatureUtilities.canAllowSync(mActivity)
       && !signinManager.isSigninDisabledByPolicy()
       && signinManager.isSigninSupported();
 }
  /**
   * Determine whether the sync promo needs to be displayed.
   *
   * @return Whether sync promo should be displayed.
   */
  public boolean shouldDisplaySyncPromo() {
    if (SigninManager.get(mContext).isSigninDisabledByPolicy()) {
      return false;
    }

    if (ContextUtils.getAppSharedPreferences().getBoolean(PREF_SIGNIN_PROMO_DECLINED, false)) {
      return false;
    }

    return !AndroidSyncSettings.isSyncEnabled(mContext) || mForeignSessions.isEmpty();
  }
  /**
   * Create an RecentTabsManager to be used with RecentTabsPage and RecentTabsRowAdapter.
   *
   * @param tab The Tab that is showing this recent tabs page.
   * @param profile Profile that is associated with the current session.
   * @param context the Android context this manager will work in.
   */
  public RecentTabsManager(Tab tab, Profile profile, Context context) {
    mProfile = profile;
    mTab = tab;
    mForeignSessionHelper = buildForeignSessionHelper(mProfile);
    mNewTabPagePrefs = buildNewTabPagePrefs(mProfile);
    mFaviconHelper = buildFaviconHelper();
    mRecentlyClosedBridge = buildRecentlyClosedBridge(mProfile);
    mSignInManager = SigninManager.get(context);
    mContext = context;

    updateRecentlyClosedTabs();
    registerForForeignSessionUpdates();
    updateForeignSessions();
    mForeignSessionHelper.triggerSessionSync();
    registerForSignInAndSyncNotifications();

    InvalidationController.get(mContext).onRecentTabsPageOpened();
  }
  /**
   * Should be called when this object is no longer needed. Performs necessary listener tear down.
   */
  public void destroy() {
    mIsDestroyed = true;
    AndroidSyncSettings.unregisterObserver(mContext, this);

    mSignInManager.removeSignInStateObserver(this);
    mSignInManager = null;

    mFaviconHelper.destroy();
    mFaviconHelper = null;

    mRecentlyClosedBridge.destroy();
    mRecentlyClosedBridge = null;

    mForeignSessionHelper.destroy();
    mForeignSessionHelper = null;

    mUpdatedCallback = null;

    mNewTabPagePrefs.destroy();
    mNewTabPagePrefs = null;

    InvalidationController.get(mContext).onRecentTabsPageClosed();
  }
 private void registerForSignInAndSyncNotifications() {
   AndroidSyncSettings.registerObserver(mContext, this);
   mSignInManager.addSignInStateObserver(this);
 }