diff options
author | 2014-09-22 16:02:37 -0700 | |
---|---|---|
committer | 2014-09-26 10:14:24 -0700 | |
commit | 05274d5a0d9ba6559e5f7c5ce82179b01cda2851 (patch) | |
tree | e4c8432a7995d93e249b92f450769f2b81b48e4b /java/src/com/android/inputmethod/latin/network/BlockingHttpClient.java | |
parent | 2c4fbe4710832a1bd3d0e4cdbee1dd34e001b0c4 (diff) | |
download | latinime-05274d5a0d9ba6559e5f7c5ce82179b01cda2851.tar.gz latinime-05274d5a0d9ba6559e5f7c5ce82179b01cda2851.tar.xz latinime-05274d5a0d9ba6559e5f7c5ce82179b01cda2851.zip |
Add authentication/http request related code to LatinIme
Bug: 17464068
Bug: 17464805
Change-Id: I533ae8821e0628fdf6591538a96ab50f805c0cdf
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(); + } + } +} |