use of com.microsoft.appcenter.http.HttpClient in project mobile-center-sdk-android by Microsoft.
the class Distribute method getLatestReleaseDetails.
/**
* Get latest release details from server.
*
* @param distributionGroupId distribution group id.
* @param updateToken token to secure API call.
*/
@VisibleForTesting
synchronized void getLatestReleaseDetails(String distributionGroupId, String updateToken) {
AppCenterLog.debug(LOG_TAG, "Get latest release details...");
HttpClientRetryer retryer = new HttpClientRetryer(new DefaultHttpClient());
NetworkStateHelper networkStateHelper = NetworkStateHelper.getSharedInstance(mContext);
HttpClient httpClient = new HttpClientNetworkStateHandler(retryer, networkStateHelper);
String releaseHash = computeReleaseHash(mPackageInfo);
String url = mApiUrl;
if (updateToken == null) {
url += String.format(GET_LATEST_PUBLIC_RELEASE_PATH_FORMAT, mAppSecret, distributionGroupId, releaseHash, getReportingParametersForUpdatedRelease(true, ""));
} else {
url += String.format(GET_LATEST_PRIVATE_RELEASE_PATH_FORMAT, mAppSecret, releaseHash, getReportingParametersForUpdatedRelease(false, distributionGroupId));
}
Map<String, String> headers = new HashMap<>();
if (updateToken != null) {
headers.put(HEADER_API_TOKEN, updateToken);
}
final Object releaseCallId = mCheckReleaseCallId = new Object();
mCheckReleaseApiCall = httpClient.callAsync(url, METHOD_GET, headers, new HttpClient.CallTemplate() {
@Override
public String buildRequestBody() throws JSONException {
/* Only GET is used by Distribute service. This method is never getting called. */
return null;
}
@Override
public void onBeforeCalling(URL url, Map<String, String> headers) {
if (AppCenterLog.getLogLevel() <= VERBOSE) {
/* Log url. */
String urlString = url.toString().replaceAll(mAppSecret, HttpUtils.hideSecret(mAppSecret));
AppCenterLog.verbose(LOG_TAG, "Calling " + urlString + "...");
/* Log headers. */
Map<String, String> logHeaders = new HashMap<>(headers);
String apiToken = logHeaders.get(HEADER_API_TOKEN);
if (apiToken != null) {
logHeaders.put(HEADER_API_TOKEN, HttpUtils.hideSecret(apiToken));
}
AppCenterLog.verbose(LOG_TAG, "Headers: " + logHeaders);
}
}
}, new ServiceCallback() {
@Override
public void onCallSucceeded(final String payload) {
/* onPostExecute is not always called on UI thread due to an old Android bug. */
HandlerUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
handleApiCallSuccess(releaseCallId, payload, ReleaseDetails.parse(payload));
} catch (JSONException e) {
onCallFailed(e);
}
}
});
}
@Override
public void onCallFailed(Exception e) {
handleApiCallFailure(releaseCallId, e);
}
});
}
use of com.microsoft.appcenter.http.HttpClient in project mobile-center-sdk-android by Microsoft.
the class DistributeBeforeApiSuccessTest method disableWhileCheckingRelease.
@Test
public void disableWhileCheckingRelease() throws Exception {
/* Mock we already have token. */
when(PreferencesStorage.getString(PREFERENCE_KEY_UPDATE_TOKEN)).thenReturn("some token");
HttpClientNetworkStateHandler httpClient = mock(HttpClientNetworkStateHandler.class);
whenNew(HttpClientNetworkStateHandler.class).withAnyArguments().thenReturn(httpClient);
ServiceCall firstCall = mock(ServiceCall.class);
when(httpClient.callAsync(anyString(), anyString(), anyMapOf(String.class, String.class), any(HttpClient.CallTemplate.class), any(ServiceCallback.class))).thenReturn(firstCall).thenReturn(mock(ServiceCall.class));
HashMap<String, String> headers = new HashMap<>();
headers.put(DistributeConstants.HEADER_API_TOKEN, "some token");
/* The call is only triggered when app is resumed. */
start();
verify(httpClient, never()).callAsync(anyString(), anyString(), eq(headers), any(HttpClient.CallTemplate.class), any(ServiceCallback.class));
Distribute.getInstance().onActivityResumed(mock(Activity.class));
verify(httpClient).callAsync(anyString(), anyString(), eq(headers), any(HttpClient.CallTemplate.class), any(ServiceCallback.class));
/* Verify cancel on disabling. */
verify(firstCall, never()).cancel();
Distribute.setEnabled(false);
verify(firstCall).cancel();
/* No more call on that one. */
Distribute.setEnabled(true);
Distribute.setEnabled(false);
verify(firstCall).cancel();
}
Aggregations