transferFiles({
    deviceType,
    destination,
    fileList,
    direction,
    storageId,
    onError,
    onPreprocess,
    onProgress,
    onCompleted,
  }) {
    if (deviceType === DEVICE_TYPE.mtp) {
      checkIf(storageId, 'number');
      checkIf(onPreprocess, 'function');

      const selectedMtpMode = getMtpModeSetting();

      switch (selectedMtpMode) {
        case MTP_MODE.legacy:
          return this.legacyMtpDataSource.transferFiles({
            destination,
            fileList,
            direction,
            storageId,
            onError,
            onProgress,
            onCompleted,
            onPreprocess,
          });

        case MTP_MODE.kalam:
        default:
          return this.kalamMtpDataSource.transferFiles({
            deviceType,
            destination,
            fileList,
            direction,
            storageId,
            onError,
            onProgress,
            onCompleted,
            onPreprocess,
          });
      }
    }

    // eslint-disable-next-line no-throw-literal
    throw `transferFiles for deviceType=DEVICE_TYPE.local is unimplemented`;
  }
description - Upload or download files from MTP device to local or vice versa

@param {string} deviceType
@param {string} destination
@param {'upload'|'download'} direction
@param {[string]} fileList
@param {string} storageId
@param {errorCallback} onError
@param {progressCallback} onProgress
@param {preprocessCallback} onPreprocess
@param {completedCallback} onCompleted

@return