/**
   * Initializes the {@link SettingsController} Extracted so that we can override this in unit
   * tests.
   */
  @VisibleForTesting(visibility = Visibility.PRIVATE)
  protected SettingsController initSettingsController() {
    SettingsController settingsController = new SettingsController(mSdkLog);
    settingsController.registerOnChangedListener(
        new OnChangedListener() {
          @Override
          public void onSettingsChanged(
              SettingsController controller, SettingsController.Settings oldSettings) {

            // Reset the download cache if it doesn't match the right strategy.
            // The cache instance gets lazily recreated later in getDownloadCache().
            if (mDownloadCache != null) {
              if (controller.getSettings().getUseDownloadCache()
                  && mDownloadCache.getStrategy() != DownloadCache.Strategy.FRESH_CACHE) {
                mDownloadCache = null;
              } else if (!controller.getSettings().getUseDownloadCache()
                  && mDownloadCache.getStrategy() != DownloadCache.Strategy.DIRECT) {
                mDownloadCache = null;
              }
            }
          }
        });
    return settingsController;
  }