diff --git a/app/src/main/java/im/ricochet/androidod/ConnectActivity.java b/app/src/main/java/im/ricochet/androidod/ConnectActivity.java index b56f22d..33ada87 100644 --- a/app/src/main/java/im/ricochet/androidod/ConnectActivity.java +++ b/app/src/main/java/im/ricochet/androidod/ConnectActivity.java @@ -4,9 +4,12 @@ import android.content.SharedPreferences; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; import android.util.Log; import android.view.View; import android.widget.Button; +import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; @@ -14,9 +17,12 @@ import goRicochetMobile.GoRicochetMobile; public class ConnectActivity extends AppCompatActivity { + private static final int ONION_ADDRESS_LENGTH = 16; public static final String PREFERNCE_FILE = "im.ricochet.PREFERENCE_FILE"; private static final String TAG = "InitActivity"; private static final String PRIVATE_KEY_KEY = "privateKey"; + private static final String CONNECT_TO_ADDRESS_KEY = "connectToAddress"; + private static final String RICOCHET_ADDRESS_PREFIX = "ricochet:"; Button regenButton; Button connectButton; @@ -25,8 +31,9 @@ public class ConnectActivity extends AppCompatActivity { TextView connectStatusText; TextView regenIdentStatusText; TextView idetityText; + EditText addressText; - + SharedPreferences prefs; @Override protected void onCreate(Bundle savedInstanceState) { @@ -43,6 +50,9 @@ public class ConnectActivity extends AppCompatActivity { connectButton = (Button)findViewById(R.id.connectButton); connectSpinner = (ProgressBar)findViewById(R.id.connectProgressBar); regenIdentSpinner = (ProgressBar)findViewById(R.id.regenIdentProgressBar); + addressText = (EditText)findViewById(R.id.addressText); + + prefs = getSharedPreferences(PREFERNCE_FILE, MODE_PRIVATE); regenButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { @@ -51,7 +61,21 @@ public class ConnectActivity extends AppCompatActivity { } }); - SharedPreferences prefs = getSharedPreferences(PREFERNCE_FILE, MODE_PRIVATE); + addressText.addTextChangedListener(new TextWatcher(){ + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + validateOnionAddress(); + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + String privateKey = prefs.getString(PRIVATE_KEY_KEY, ""); Log.i(TAG, "Private key loaded:\n"+privateKey); if (privateKey.equals("")) { @@ -65,6 +89,10 @@ public class ConnectActivity extends AppCompatActivity { regenButton.setEnabled(true); } + String connectToAddress = prefs.getString(CONNECT_TO_ADDRESS_KEY, RICOCHET_ADDRESS_PREFIX); + addressText.setText(connectToAddress); + validateOnionAddress(); + /*Log.i(TAG, "Ready!"); connectStatusText.setText("Ready!"); ProgressBar progressBar = (ProgressBar)findViewById(im.ricochet.androidod.R.id.progressBar); @@ -87,6 +115,18 @@ public class ConnectActivity extends AppCompatActivity { idetityText.setText("ricochet:" + addr); } + private void validateOnionAddress() { + String address = addressText.getText().toString(); + if (address.startsWith(RICOCHET_ADDRESS_PREFIX) && address.length() == ONION_ADDRESS_LENGTH + RICOCHET_ADDRESS_PREFIX.length()) { + SharedPreferences.Editor prefsEditor = prefs.edit(); + prefsEditor.putString(CONNECT_TO_ADDRESS_KEY, address); + prefsEditor.commit(); + connectButton.setEnabled(true); + } else { + connectButton.setEnabled(false); + } + } + private class RegenIdentTask extends AsyncTask { @Override protected void onPreExecute() { @@ -104,7 +144,6 @@ public class ConnectActivity extends AppCompatActivity { try { privateKey = GoRicochetMobile.generatePrivateKey(); - SharedPreferences prefs = getSharedPreferences(PREFERNCE_FILE, MODE_PRIVATE); SharedPreferences.Editor prefsEditor = prefs.edit(); prefsEditor.putString(PRIVATE_KEY_KEY, privateKey); prefsEditor.commit(); @@ -120,7 +159,7 @@ public class ConnectActivity extends AppCompatActivity { Log.i(TAG, "RegenIdentTask.onPostExecute(): " + privateKey); regenIdentSpinner.setVisibility(View.INVISIBLE); regenButton.setEnabled(true); - connectButton.setEnabled(true); + validateOnionAddress(); if (privateKey == null) { regenIdentStatusText.setText("ERROR: unable to generate new identity"); } else { diff --git a/app/src/main/res/layout/activity_connect.xml b/app/src/main/res/layout/activity_connect.xml index 1f427e4..c3989b5 100644 --- a/app/src/main/res/layout/activity_connect.xml +++ b/app/src/main/res/layout/activity_connect.xml @@ -20,20 +20,22 @@ + tools:layout_editor_absoluteX="50dp" />