diff options
author | 2014-09-26 19:39:29 +0000 | |
---|---|---|
committer | 2014-09-26 19:39:29 +0000 | |
commit | 3138faa98f3ee6acb282732d2d22a76549e5a8c5 (patch) | |
tree | ce4d23e2df04d9e96905151926a89a7dde70c974 /java/src/com/android/inputmethod/latin/network/BlockingHttpClient.java | |
parent | 5ca300f83f6a347629624b27a71cf2aca006042c (diff) | |
parent | 569f6f1c9e89c567860242aa5a0cb3f85eb28e26 (diff) | |
download | latinime-3138faa98f3ee6acb282732d2d22a76549e5a8c5.tar.gz latinime-3138faa98f3ee6acb282732d2d22a76549e5a8c5.tar.xz latinime-3138faa98f3ee6acb282732d2d22a76549e5a8c5.zip |
am 569f6f1c: Merge "Add authentication/http request related code to LatinIme"
* commit '569f6f1c9e89c567860242aa5a0cb3f85eb28e26':
Add authentication/http request related code to LatinIme
Diffstat (limited to 'java/src/com/android/inputmethod/latin/network/BlockingHttpClient.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/network/BlockingHttpClient.java | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/latin/network/BlockingHttpClient.java b/java/src/com/android/inputmethod/latin/network/BlockingHttpClient.java new file mode 100644 index 000000000..0d0cbe169 --- /dev/null +++ b/java/src/com/android/inputmethod/latin/network/BlockingHttpClient.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.inputmethod.latin.network; + +import com.android.inputmethod.annotations.UsedForTesting; + +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * A client for executing HTTP requests synchronously. + * This must never be called from the main thread. + * + * TODO: Remove @UsedForTesting after this is actually used. + */ +@UsedForTesting +public class BlockingHttpClient { + private final HttpURLConnection mConnection; + + /** + * Interface that handles processing the response for a request. + */ + public interface ResponseProcessor { + /** + * Called when the HTTP request fails with an error. + * + * @param httpStatusCode The status code of the HTTP response. + * @param message The HTTP response message, if any, or null. + */ + void onError(int httpStatusCode, @Nullable String message); + + /** + * Called when the HTTP request finishes successfully. + * The {@link InputStream} is closed by the client after the method finishes, + * so any processing must be done in this method itself. + * + * @param response An input stream that can be used to read the HTTP response. + */ + void onSuccess(InputStream response); + } + + /** + * TODO: Remove @UsedForTesting after this is actually used. + */ + @UsedForTesting + public BlockingHttpClient(HttpURLConnection connection) { + mConnection = connection; + } + + /** + * Executes the request on the underlying {@link HttpURLConnection}. + * + * TODO: Remove @UsedForTesting after this is actually used. + * + * @param request The request payload, if any, or null. + * @param responeProcessor A processor for the HTTP response. + */ + @UsedForTesting + public void execute(@Nullable byte[] request, @Nonnull ResponseProcessor responseProcessor) + throws IOException { + try { + if (request != null) { + OutputStream out = new BufferedOutputStream(mConnection.getOutputStream()); + out.write(request); + out.flush(); + out.close(); + } + + final int responseCode = mConnection.getResponseCode(); + if (responseCode != HttpURLConnection.HTTP_OK) { + responseProcessor.onError(responseCode, mConnection.getResponseMessage()); + } else { + responseProcessor.onSuccess(mConnection.getInputStream()); + } + } finally { + mConnection.disconnect(); + } + } +} |