[tor-commits] [orbot/master] Fixes #356 Can't Scroll through pasted bridges with soft keyboard open

n8fr8 at torproject.org n8fr8 at torproject.org
Mon Aug 24 21:02:51 UTC 2020


commit 2a389e05878a67a2c13bd8639388559e794742a3
Author: bim <dsnake at protonmail.com>
Date:   Tue Jun 16 17:03:12 2020 -0400

    Fixes #356 Can't Scroll through pasted bridges with soft keyboard open
---
 .../ui/onboarding/CustomBridgesActivity.java       | 33 ++++++++++++++++++----
 1 file changed, 27 insertions(+), 6 deletions(-)

diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java
index 0aa0c5ee..5e2b3dd6 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/CustomBridgesActivity.java
@@ -2,6 +2,7 @@
 /* See LICENSE for licensing information */
 package org.torproject.android.ui.onboarding;
 
+import android.annotation.SuppressLint;
 import android.content.ClipData;
 import android.content.ClipboardManager;
 import android.content.Intent;
@@ -10,8 +11,10 @@ import android.os.Bundle;
 import android.text.Editable;
 import android.text.TextUtils;
 import android.text.TextWatcher;
+import android.text.method.ScrollingMovementMethod;
 import android.util.Log;
 import android.view.MenuItem;
+import android.view.MotionEvent;
 import android.view.View;
 import android.widget.EditText;
 import android.widget.TextView;
@@ -68,6 +71,7 @@ public class CustomBridgesActivity extends AppCompatActivity implements View.OnC
         }
 
         mEtPastedBridges = findViewById(R.id.etPastedBridges);
+        configureMultilineEditTextInScrollView(mEtPastedBridges);
         mEtPastedBridges.setText(bridges);
         mEtPastedBridges.addTextChangedListener(this);
 
@@ -81,9 +85,9 @@ public class CustomBridgesActivity extends AppCompatActivity implements View.OnC
     @Override
     public boolean onOptionsItemSelected(@NonNull MenuItem item) {
         if (item.getItemId() == android.R.id.home) {
-                finish();
+            finish();
 
-                return true;
+            return true;
         }
 
         return super.onOptionsItemSelected(item);
@@ -155,8 +159,7 @@ public class CustomBridgesActivity extends AppCompatActivity implements View.OnC
                         results = results.substring(urlIdx + 3);
 
                         setNewBridges(results);
-                    }
-                    else {
+                    } else {
                         JSONArray bridgeJson = new JSONArray(results);
                         StringBuilder bridgeLines = new StringBuilder();
 
@@ -167,8 +170,7 @@ public class CustomBridgesActivity extends AppCompatActivity implements View.OnC
 
                         setNewBridges(bridgeLines.toString());
                     }
-                }
-                catch (Exception e) {
+                } catch (Exception e) {
                     Log.e(getClass().getSimpleName(), "unsupported", e);
                 }
             }
@@ -216,4 +218,23 @@ public class CustomBridgesActivity extends AppCompatActivity implements View.OnC
         intent.setAction(TorServiceConstants.CMD_SIGNAL_HUP);
         startService(intent);
     }
+
+    // configures an EditText we assume to be multiline and nested in a ScrollView to be independently scrollable
+    @SuppressLint("ClickableViewAccessibility")
+    private static void configureMultilineEditTextInScrollView(EditText et) {
+        et.setVerticalScrollBarEnabled(true);
+        et.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
+        et.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
+        et.setMovementMethod(ScrollingMovementMethod.getInstance());
+        et.setOnTouchListener(new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                v.getParent().requestDisallowInterceptTouchEvent(true);
+                if ((event.getAction() & MotionEvent.ACTION_UP) != 0 && (event.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+                    v.getParent().requestDisallowInterceptTouchEvent(false);
+                }
+                return false;
+            }
+        });
+    }
 }





More information about the tor-commits mailing list