Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(660)

Unified Diff: net/cronet/android/sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java

Issue 145213003: Initial upload of cronet for Android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changed copyright year on sample code back to 2012 Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/cronet/android/sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java
diff --git a/net/cronet/android/sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java b/net/cronet/android/sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..3adce6749ef8eaaf56eb7a87a8723c98647add27
--- /dev/null
+++ b/net/cronet/android/sample/src/org/chromium/cronet_sample_apk/CronetSampleActivity.java
@@ -0,0 +1,172 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.cronet_sample_apk;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import org.chromium.net.UrlRequest;
+import org.chromium.net.UrlRequestContext;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Activity for managing the Cronet Sample.
+ */
+public class CronetSampleActivity extends Activity {
+ private static final String TAG = "CronetSampleActivity";
+ public static final String COMMAND_LINE_ARGS_KEY = "commandLineArgs";
+ public static final String POST_DATA_KEY = "postData";
+
+ UrlRequestContext mRequestContext;
+ String mUrl;
+ boolean mLoading = false;
+ int mHttpStatusCode = 0;
+
+ class SampleRequestContext extends UrlRequestContext {
+ public SampleRequestContext() {
+ super(getApplicationContext(),
+ "Cronet Sample",
+ UrlRequestContext.LOG_VERBOSE);
+ }
+ }
+
+ class SampleRequest extends UrlRequest {
+ public SampleRequest(UrlRequestContext requestContext,
+ String url,
+ int priority,
+ Map<String, String> headers,
+ WritableByteChannel sink) {
+ super(requestContext, url, priority, headers, sink);
+ }
+
+ @Override
+ protected void onRequestComplete() {
+ mHttpStatusCode = super.getHttpStatusCode();
+ Log.i(TAG, "****** Request Complete, status code is " +
+ mHttpStatusCode);
+ Intent intent = new Intent(getApplicationContext(),
+ CronetSampleActivity.class);
+ startActivity(intent);
+ final String url = super.getUrl();
+ final CharSequence text = "Completed " + url + " (" +
+ mHttpStatusCode + ")";
+ CronetSampleActivity.this.runOnUiThread(new Runnable() {
+ public void run() {
+ mLoading = false;
+ Toast toast = Toast.makeText(getApplicationContext(),
+ text,
+ Toast.LENGTH_SHORT);
+ toast.show();
+ promptForURL(url);
+ }
+ });
+ }
+ };
+
+ @Override
+ protected void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ try {
+ LibraryLoader.ensureInitialized();
+ } catch (UnsatisfiedLinkError e) {
+ Log.e(TAG, "libcronet_sample initialization failed.", e);
+ finish();
+ return;
+ }
+
+ mRequestContext = new SampleRequestContext();
+
+ String appUrl = getUrlFromIntent(getIntent());
+ if (appUrl == null) {
+ promptForURL("https://");
+ } else {
+ startWithURL(appUrl);
+ }
+ }
+
+ private void promptForURL(String url) {
+ Log.i(TAG, "No URL provided via intent, prompting user...");
+ AlertDialog.Builder alert = new AlertDialog.Builder(this);
+ alert.setTitle("Enter a URL");
+ alert.setMessage("Enter a URL");
+ final EditText input = new EditText(this);
+ input.setText(url);
+ alert.setView(input);
+ alert.setPositiveButton("Load", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int button) {
+ String url = input.getText().toString();
+ startWithURL(url);
+ }
+ });
+ alert.show();
+ }
+
+ private static String getUrlFromIntent(Intent intent) {
+ return intent != null ? intent.getDataString() : null;
+ }
+
+ private void applyCommandLineToRequest(UrlRequest request) {
+ Intent intent = getIntent();
+ Bundle extras = intent.getExtras();
+ Log.i(TAG, "Cronet extras: " + extras);
+ if (extras != null) {
+ String[] commandLineArgs = extras.getStringArray(COMMAND_LINE_ARGS_KEY);
+ if (commandLineArgs != null) {
+ for (int i = 0; i < commandLineArgs.length; ++i) {
+ Log.i(TAG, "Cronet commandLine[" + i + "]=" + commandLineArgs[i]);
+ if (commandLineArgs[i].equals(POST_DATA_KEY)) {
+ InputStream dataStream = new ByteArrayInputStream(
+ commandLineArgs[++i].getBytes());
+ ReadableByteChannel dataChannel = Channels.newChannel(dataStream);
+ request.setUploadChannel("text/plain", dataChannel);
+ }
+ }
+ }
+ }
+ }
+
+ private void startWithURL(String url) {
+ Log.i(TAG, "Cronet started: " + url);
+ mUrl = url;
+ mLoading = true;
+
+ HashMap<String, String> headers = new HashMap<String, String>();
+ WritableByteChannel sink = Channels.newChannel(System.out);
+ UrlRequest request = new SampleRequest(mRequestContext,
+ url,
+ UrlRequest.REQUEST_PRIORITY_MEDIUM,
+ headers,
+ sink);
+ applyCommandLineToRequest(request);
+ request.start();
+ }
+
+ public String getUrl() {
+ return mUrl;
+ }
+
+ public boolean isLoading() {
+ return mLoading;
+ }
+
+ public int getHttpStatusCode() {
+ return mHttpStatusCode;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698