@Override
        public void onReceive(Context context, Intent intent) {
          if (mTransferService == null) {
            return;
          }

          String type = intent.getStringExtra("type");
          if (type == null) {
            return;
          }

          if (type.equals(DownloadTaskManager.BROADCAST_FILE_DOWNLOAD_SUCCESS)) {
            int taskID = intent.getIntExtra("taskID", 0);
            DownloadTaskInfo info = mTransferService.getDownloadTaskInfo(taskID);
            if (info != null) {
              if (monitor.isStarted()) {
                monitor.onFileDownloaded(
                    info.account, info.repoID, info.repoName, info.pathInRepo, info.localFilePath);
              }
            }
          } else if (type.equals(UploadTaskManager.BROADCAST_FILE_UPLOAD_SUCCESS)) {
            int taskID = intent.getIntExtra("taskID", 0);
            UploadTaskInfo info = mTransferService.getUploadTaskInfo(taskID);

            if (info != null && info.isUpdate) {
              updateMgr.onFileUpdateSuccess(
                  info.account,
                  info.repoID,
                  info.repoName,
                  info.parentDir,
                  info.localFilePath,
                  info.version);
            }
          } else if (type.equals(UploadTaskManager.BROADCAST_FILE_UPLOAD_FAILED)) {
            int taskID = intent.getIntExtra("taskID", 0);
            UploadTaskInfo info = mTransferService.getUploadTaskInfo(taskID);

            if (info != null && info.isUpdate) {
              updateMgr.onFileUpdateFailure(
                  info.account,
                  info.repoID,
                  info.repoName,
                  info.parentDir,
                  info.localFilePath,
                  info.err,
                  info.version);
            }
          }
        }
  @Override
  public void onDestroy() {
    Log.d(DEBUG_TAG, "onDestroy");

    updateMgr.stop();

    if (monitor != null) {
      try {
        monitor.stop();
      } catch (Exception e) {
        Log.d(DEBUG_TAG, "failed to stop file monitor");
      }
    }

    if (mTransferService != null) {
      unbindService(mTransferConnection);
      mTransferService = null;
    }

    LocalBroadcastManager.getInstance(this).unregisterReceiver(transferReceiver);
  }
 @Override
 public void onServiceConnected(ComponentName className, IBinder binder) {
   TransferService.TransferBinder transferBinder = (TransferService.TransferBinder) binder;
   mTransferService = transferBinder.getService();
   updateMgr.onTransferServiceConnected(mTransferService);
 }