package com.chariotsolutions.example; import android.content.res.AssetManager; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.ScrollView; import android.widget.TextView; import com.chariotsolutions.example.http.Api; import com.chariotsolutions.example.http.AuthenticationParameters; import com.chariotsolutions.example.util.IOUtil; import roboguice.activity.RoboActivity; import roboguice.inject.ContentView; import roboguice.inject.InjectResource; import roboguice.inject.InjectView; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStream; import java.io.PrintWriter; @ContentView(R.layout.main) public class ExampleActivity extends RoboActivity { private static final String TAG = ExampleActivity.class.getSimpleName(); private Api exampleApi; @InjectView(R.id.mainTextView) TextView mainTextView; @InjectView(R.id.mainTextScroller) ScrollView mainTextScroller; @InjectResource(R.string.server_cert_asset_name) String caCertificateName; @InjectResource(R.string.client_cert_file_name) String clientCertificateName; @InjectResource(R.string.client_cert_password) String clientCertificatePassword; @InjectResource(R.string.example_url) String exampleUrl; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { super.onResume(); doRequest(); } private void updateOutput(String text) { mainTextView.setText(mainTextView.getText() + "\n\n" + text); } private void doRequest() { try { AuthenticationParameters authParams = new AuthenticationParameters(); authParams.setClientCertificate(getClientCertFile()); authParams.setClientCertificatePassword(clientCertificatePassword); authParams.setCaCertificate(readCaCert()); exampleApi = new Api(authParams); updateOutput("Connecting to " + exampleUrl); new AsyncTask() { @Override protected Object doInBackground(Object... objects) { try { String result = exampleApi.doGet(exampleUrl); int responseCode = exampleApi.getLastResponseCode(); if (responseCode == 200) { publishProgress(result); } else { publishProgress("HTTP Response Code: " + responseCode); } } catch (Throwable ex) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintWriter writer = new PrintWriter(baos); ex.printStackTrace(writer); writer.flush(); writer.close(); publishProgress(ex.toString() + " : " + baos.toString()); } return null; } @Override protected void onProgressUpdate(final Object... values) { StringBuilder buf = new StringBuilder(); for (final Object value : values) { buf.append(value.toString()); } updateOutput(buf.toString()); } @Override protected void onPostExecute(final Object result) { updateOutput("Done!"); } }.execute(); } catch (Exception ex) { Log.e(TAG, "failed to create timeApi", ex); updateOutput(ex.toString()); } } private File getClientCertFile() { File externalStorageDir = Environment.getExternalStorageDirectory(); return new File(externalStorageDir, clientCertificateName); } private String readCaCert() throws Exception { AssetManager assetManager = getAssets(); InputStream inputStream = assetManager.open(caCertificateName); return IOUtil.readFully(inputStream); } }