package im.ricochet.androidod; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.StrictMode; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import goRicochetMobile.GoRicochetMobile; public class ConnectActivity extends AppCompatActivity { public static final String PREFERNCE_FILE = "im.ricochet.PREFERENCE_FILE"; private static final String TAG = "InitActivity"; private static final String PRIVATE_KEY_KEY = "privateKey"; Button regenButton; Button connectButton; ProgressBar spinner; TextView progressText; TextView idetityText; @Override protected void onCreate(Bundle savedInstanceState) { // Load identity and connect to addr. Enable appropriate buttons // If no identity, generate. super.onCreate(savedInstanceState); setContentView(im.ricochet.androidod.R.layout.activity_connect); progressText = (TextView)findViewById(R.id.progressTextView); idetityText = (TextView)findViewById(R.id.identityTextView); regenButton = (Button)findViewById(R.id.regenIdentButton); connectButton = (Button)findViewById(R.id.connectButton); spinner = (ProgressBar)findViewById(R.id.progressBar); regenButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { RegenIdentTask regenIdentTask = new RegenIdentTask(); regenIdentTask.execute(); } }); SharedPreferences prefs = getSharedPreferences(PREFERNCE_FILE, MODE_PRIVATE); String privateKey = prefs.getString(PRIVATE_KEY_KEY, ""); Log.i(TAG, "Private key loaded:\n"+privateKey); if (privateKey.equals("")) { Log.i(TAG, "regenerating pricate key"); RegenIdentTask regenIdentTask = new RegenIdentTask(); regenIdentTask.execute(); } else { Log.i(TAG, "setting identity, enabling regen"); setIdentity(privateKey); Button regenButton = (Button)findViewById(R.id.regenIdentButton); regenButton.setEnabled(true); } /*Log.i(TAG, "Ready!"); progressText.setText("Ready!"); ProgressBar progressBar = (ProgressBar)findViewById(im.ricochet.androidod.R.id.progressBar); progressBar.setVisibility(View.GONE); Log.i(TAG, "Setting thread policy perms"); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); Log.i(TAG, "Starting Echo Bot"); //GoRicochetMobile.echoBot(privateKey); new EchoBot(privateKey).execute(); */ } private void setIdentity(String privateKey) { Log.i(TAG, "setIdentity(): " + privateKey); String addr = GoRicochetMobile.getOnionAddress(privateKey); Log.i(TAG, "setIdentity(): addr: '" + addr + "'"); idetityText.setText("ricochet:" + addr); } private class RegenIdentTask extends AsyncTask { @Override protected void onPreExecute() { Log.i(TAG, "RegenIdentTask.onPreExecute()"); regenButton.setEnabled(false); connectButton.setEnabled(false); progressText.setText("Generating new identity..."); spinner.setVisibility(View.VISIBLE); } @Override public String doInBackground(Void... voids) { Log.i(TAG, "RegenIdentTask.doInBackground()"); String privateKey; try { privateKey = GoRicochetMobile.generatePrivateKey(); SharedPreferences prefs = getSharedPreferences(PREFERNCE_FILE, MODE_PRIVATE); SharedPreferences.Editor prefsEditor = prefs.edit(); prefsEditor.putString(PRIVATE_KEY_KEY, privateKey); prefsEditor.commit(); return privateKey; } catch (Exception e) { Log.e(TAG, e.toString()); return null; } } @Override protected void onPostExecute(String privateKey) { Log.i(TAG, "RegenIdentTask.onPostExecute(): " + privateKey); spinner.setVisibility(View.INVISIBLE); regenButton.setEnabled(true); connectButton.setEnabled(true); if (privateKey == null) { progressText.setText("ERROR: unable to generate new identity"); } else { progressText.setText(""); setIdentity(privateKey); } } } private class EchoBot extends AsyncTask { String privateKey; public EchoBot(String privateKey) { this.privateKey = privateKey; } @Override public Void doInBackground(Void... voids) { GoRicochetMobile.echoBot(privateKey); return null; } } }