code: public Future<AuthenticationResult> acquireTokenByDeviceCode(
              final DeviceCode deviceCode, final AuthenticationCallback callback)
              throws AuthenticationException {
  
          final ClientAuthentication clientAuth = new ClientAuthenticationPost(
                  ClientAuthenticationMethod.NONE, new ClientID(deviceCode.getClientId()));
  
          this.validateDeviceCodeRequestInput(deviceCode, clientAuth, deviceCode.getResource());
  
          final AdalDeviceCodeAuthorizationGrant deviceCodeGrant = new AdalDeviceCodeAuthorizationGrant(deviceCode, deviceCode.getResource());
  
          return this.acquireToken(deviceCodeGrant, clientAuth, callback);
      }
docs: Acquires security token from the authority using an device code previously received.
  
  @param deviceCode The device code result received from calling acquireDeviceCode.
  @param callback   optional callback object for non-blocking execution.
  @return A {@link Future} object representing the {@link AuthenticationResult} of the call.
  It contains AccessToken, Refresh Token and the Access Token's expiration time.
  @throws AuthenticationException thrown if authorization is pending or another error occurred.
  If the errorCode of the exception is AdalErrorCode.AUTHORIZATION_PENDING,
  the call needs to be retried until the AccessToken is returned.
  DeviceCode.interval - The minimum amount of time in seconds that the client
  SHOULD wait between polling requests to the token endpoin