private void uploadKeyPairs() {
    List<ECKeyPair> keyPairs = getKeyPairs();
    if (keyPairs.size() == 0) {
      CMAccountUtils.resetBackoff(mAuthClient.getEncryptionPreferences());
      if (CMAccount.DEBUG) Log.d(TAG, "No keys to upload.");
      return;
    }

    if (CMAccountUtils.getCMAccountAccount(mContext) == null) {
      CMAccountUtils.resetBackoff(mAuthClient.getEncryptionPreferences());
      if (CMAccount.DEBUG) Log.d(TAG, "No CMAccount Configured!");
      return;
    }

    synchronized (mNetworkRequestLock) {
      if (mNetworkRequestInProgress) {
        if (CMAccount.DEBUG)
          Log.d(TAG, "Another network request is in progress, scheduling retry.");
        scheduleRetry();
        return;
      }
      mNetworkRequestInProgress = true;
    }
    AddPublicKeysRequestBody requestBody = new AddPublicKeysRequestBody(mContext, keyPairs);
    mAuthClient.addPublicKeys(requestBody, this, this);
  }