commit 1749167ac07d7a0ffdbd6378b55482bbc3143e05 Author: Benjamin Erhart berhart@netzarchitekten.com Date: Wed Apr 22 13:35:35 2020 +0200
Fixed behaviour on device turn. --- .../android/ui/onboarding/MoatActivity.java | 55 +++++++++++---- app/src/main/res/layout/activity_moat.xml | 78 +++++++++++++--------- 2 files changed, 86 insertions(+), 47 deletions(-)
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java index 12ed6e3e..f4e3a107 100644 --- a/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java +++ b/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java @@ -24,6 +24,7 @@ import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView;
+import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; @@ -66,6 +67,7 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe private Button mBtRequest;
private String mChallenge; + private byte[] mCaptcha;
private RequestQueue mQueue;
@@ -120,11 +122,29 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe mEtSolution = findViewById(R.id.solutionEt); mBtRequest = findViewById(R.id.requestBt);
- mIvCaptcha.setVisibility(View.GONE); mEtSolution.setOnEditorActionListener(this); - mBtRequest.setEnabled(false); mBtRequest.setOnClickListener(this);
+ if (savedInstanceState != null) { + mOriginalBridges = savedInstanceState.getString("originalBridges"); + mOriginalBridgeStatus = savedInstanceState.getBoolean("originalBridgeStatus"); + mChallenge = savedInstanceState.getString("challenge"); + mCaptcha = savedInstanceState.getByteArray("captcha"); + + if (mCaptcha != null) { + mProgressBar.setVisibility(View.GONE); + mIvCaptcha.setImageBitmap(BitmapFactory.decodeByteArray(mCaptcha, 0, mCaptcha.length)); + mRequestInProgress = false; + } + } + else { + mIvCaptcha.setVisibility(View.GONE); + mBtRequest.setEnabled(false); + + mOriginalBridges = Prefs.getBridgesList(); + mOriginalBridgeStatus = Prefs.bridgesEnabled(); + } + LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, new IntentFilter(TorServiceConstants.ACTION_STATUS)); } @@ -149,9 +169,6 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe protected void onResume() { super.onResume();
- mOriginalBridges = Prefs.getBridgesList(); - mOriginalBridgeStatus = Prefs.bridgesEnabled(); - sendIntentToService(TorServiceConstants.ACTION_STATUS); }
@@ -201,13 +218,13 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe }
@Override - protected void onPause() { - super.onPause(); + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState);
- if (!mSuccess) { - Prefs.setBridgesList(mOriginalBridges); - Prefs.putBridgesEnabled(mOriginalBridgeStatus); - } + outState.putString("originalBridges", mOriginalBridges); + outState.putBoolean("originalBridgeStatus", mOriginalBridgeStatus); + outState.putString("challenge", mChallenge); + outState.putByteArray("captcha", mCaptcha); }
@Override @@ -215,6 +232,11 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mBroadcastReceiver); + + if (!mSuccess) { + Prefs.setBridgesList(mOriginalBridges); + Prefs.putBridgesEnabled(mOriginalBridgeStatus); + } }
private void fetchCaptcha() { @@ -231,8 +253,8 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe JSONObject data = response.getJSONArray("data").getJSONObject(0); mChallenge = data.getString("challenge");
- byte[] image = Base64.decode(data.getString("image"), Base64.DEFAULT); - mIvCaptcha.setImageBitmap(BitmapFactory.decodeByteArray(image, 0, image.length)); + mCaptcha = Base64.decode(data.getString("image"), Base64.DEFAULT); + mIvCaptcha.setImageBitmap(BitmapFactory.decodeByteArray(mCaptcha, 0, mCaptcha.length)); mIvCaptcha.setVisibility(View.VISIBLE); mEtSolution.setText(null); mBtRequest.setEnabled(true); @@ -253,6 +275,9 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe mIvCaptcha.setVisibility(View.GONE); mBtRequest.setEnabled(false);
+ mChallenge = null; + mCaptcha = null; + mQueue.add(request); } } @@ -370,7 +395,9 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
- fetchCaptcha(); + if (mCaptcha == null) { + fetchCaptcha(); + }
break; } diff --git a/app/src/main/res/layout/activity_moat.xml b/app/src/main/res/layout/activity_moat.xml index b0a2b42f..c6a88209 100644 --- a/app/src/main/res/layout/activity_moat.xml +++ b/app/src/main/res/layout/activity_moat.xml @@ -22,45 +22,57 @@
</com.google.android.material.appbar.AppBarLayout>
- <TextView + <ScrollView android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_margin="12dp" - android:text="@string/solve_captcha_instruction" /> - - <RelativeLayout - android:layout_width="match_parent" - android:layout_height="240dp" - android:layout_margin="12dp"> + android:layout_height="match_parent">
- <ImageView - android:id="@+id/captchaIv" + <LinearLayout android:layout_width="match_parent" - android:layout_height="match_parent" - android:contentDescription="@string/captcha" - tools:srcCompat="@tools:sample/backgrounds/scenic" /> + android:layout_height="wrap_content" + android:orientation="vertical" >
- <ProgressBar - android:id="@+id/progressBar" - android:layout_width="match_parent" - android:layout_height="match_parent" /> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_margin="12dp" + android:text="@string/solve_captcha_instruction" />
- </RelativeLayout> + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="160dp" + android:layout_margin="12dp">
- <EditText - android:id="@+id/solutionEt" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:autofillHints="" - android:ems="10" - android:hint="@string/enter_characters_from_image" - android:imeOptions="actionSend" - android:inputType="textShortMessage|text" /> + <ImageView + android:id="@+id/captchaIv" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="@string/captcha" + tools:srcCompat="@tools:sample/backgrounds/scenic" />
- <Button - android:id="@+id/requestBt" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:text="@string/request_bridges" /> + <ProgressBar + android:id="@+id/progressBar" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + + </RelativeLayout> + + <EditText + android:id="@+id/solutionEt" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:autofillHints="" + android:ems="10" + android:hint="@string/enter_characters_from_image" + android:imeOptions="actionSend" + android:inputType="textShortMessage|text" /> + + <Button + android:id="@+id/requestBt" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/request_bridges" /> + + </LinearLayout> + </ScrollView>
</LinearLayout>
tor-commits@lists.torproject.org