[tor-commits] [orbot/master] Java 8 code cleanup, lambdas over anonymous inner classes. This gets rid of

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


commit af1ab221b3d2b7e52a2a359c5cda67d8028df0c2
Author: bim <dsnake at protonmail.com>
Date:   Fri Jul 24 11:51:51 2020 -0400

    Java 8 code cleanup, lambdas over anonymous inner classes. This gets rid of
    unused imports. Also removed methods in the main app that are not used by
    the program at all.
---
 .../integration/android/IntentIntegrator.java      |  40 ++++----
 .../org/torproject/android/OnBootReceiver.java     |   6 +-
 .../main/java/org/torproject/android/OrbotApp.java |  52 +---------
 .../org/torproject/android/OrbotMainActivity.java  |  98 ++++---------------
 .../org/torproject/android/settings/Languages.java |  18 ----
 .../android/settings/SettingsPreferences.java      |  18 ++--
 .../torproject/android/ui/AppManagerActivity.java  |  21 ++--
 .../ui/hiddenservices/ClientCookiesActivity.java   |  51 ++++------
 .../ui/hiddenservices/HiddenServicesActivity.java  |  55 +++++------
 .../ui/hiddenservices/adapters/BackupAdapter.java  |   7 +-
 .../adapters/ClientCookiesAdapter.java             |  30 +++---
 .../hiddenservices/adapters/OnionListAdapter.java  |  34 +++----
 .../ui/hiddenservices/dialogs/AddCookieDialog.java |  28 +++---
 .../dialogs/CookieActionsDialog.java               |  24 ++---
 .../hiddenservices/dialogs/CookieDeleteDialog.java |  33 +++----
 .../ui/hiddenservices/dialogs/HSActionsDialog.java |  75 ++++++---------
 .../ui/hiddenservices/dialogs/HSCookieDialog.java  |  56 +++++------
 .../ui/hiddenservices/dialogs/HSDataDialog.java    |  44 ++++-----
 .../ui/hiddenservices/dialogs/HSDeleteDialog.java  |  51 +++++-----
 .../dialogs/SelectCookieBackupDialog.java          |  35 ++-----
 .../dialogs/SelectHSBackupDialog.java              |  35 ++-----
 .../permissions/PermissionManager.java             |  37 +++----
 .../ui/hiddenservices/storage/ExternalStorage.java |   8 +-
 .../ui/onboarding/BridgeWizardActivity.java        |  49 +++-------
 .../ui/onboarding/CustomBridgesActivity.java       |  13 +--
 .../android/ui/onboarding/MoatActivity.java        | 106 ++++++++++-----------
 .../android/ui/onboarding/OnboardingActivity.java  |  15 +--
 .../android/service/ApplicationTest.java           |  13 ---
 .../torproject/android/service/OrbotService.java   |  30 ++----
 .../android/service/TorEventHandler.java           |   1 -
 .../android/service/util/ExternalIPFetcher.java    |   1 -
 .../android/service/util/TorServiceUtils.java      |   3 -
 .../torproject/android/service/vpn/VpnUtils.java   |   3 -
 33 files changed, 371 insertions(+), 719 deletions(-)

diff --git a/app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java b/app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
index d5628e87..f3dbb9e4 100644
--- a/app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
+++ b/app/src/main/java/com/google/zxing/integration/android/IntentIntegrator.java
@@ -27,7 +27,6 @@ import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Fragment;
 import android.content.ActivityNotFoundException;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
@@ -370,29 +369,26 @@ public class IntentIntegrator {
     AlertDialog.Builder downloadDialog = new AlertDialog.Builder(activity);
     downloadDialog.setTitle(title);
     downloadDialog.setMessage(message);
-    downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
-      @Override
-      public void onClick(DialogInterface dialogInterface, int i) {
-        String packageName;
-        if (targetApplications.contains(BS_PACKAGE)) {
-          // Prefer to suggest download of BS if it's anywhere in the list
-          packageName = BS_PACKAGE;
+    downloadDialog.setPositiveButton(buttonYes, (dialogInterface, i) -> {
+      String packageName;
+      if (targetApplications.contains(BS_PACKAGE)) {
+        // Prefer to suggest download of BS if it's anywhere in the list
+        packageName = BS_PACKAGE;
+      } else {
+        // Otherwise, first option:
+        packageName = targetApplications.get(0);
+      }
+      Uri uri = Uri.parse("market://details?id=" + packageName);
+      Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+      try {
+        if (fragment == null) {
+          activity.startActivity(intent);
         } else {
-          // Otherwise, first option:
-          packageName = targetApplications.get(0);
-        }
-        Uri uri = Uri.parse("market://details?id=" + packageName);
-        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
-        try {
-          if (fragment == null) {
-            activity.startActivity(intent);
-          } else {
-            fragment.startActivity(intent);
-          }
-        } catch (ActivityNotFoundException anfe) {
-          // Hmm, market is not installed
-          Log.w(TAG, "Google Play is not installed; cannot install " + packageName);
+          fragment.startActivity(intent);
         }
+      } catch (ActivityNotFoundException anfe) {
+        // Hmm, market is not installed
+        Log.w(TAG, "Google Play is not installed; cannot install " + packageName);
       }
     });
     downloadDialog.setNegativeButton(buttonNo, null);
diff --git a/app/src/main/java/org/torproject/android/OnBootReceiver.java b/app/src/main/java/org/torproject/android/OnBootReceiver.java
index 0bfb20d7..b8d88e58 100644
--- a/app/src/main/java/org/torproject/android/OnBootReceiver.java
+++ b/app/src/main/java/org/torproject/android/OnBootReceiver.java
@@ -1,6 +1,5 @@
 package org.torproject.android;
 
-
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -26,7 +25,6 @@ public class OnBootReceiver extends BroadcastReceiver {
 
 	private void startService (String action, Context context)
 	{
-
 		Intent intent = new Intent(context, OrbotService.class);
 		intent.setAction(action);
 		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@@ -38,7 +36,7 @@ public class OnBootReceiver extends BroadcastReceiver {
 		}
 
 	}
-	
-	
+
+
 }
 
diff --git a/app/src/main/java/org/torproject/android/OrbotApp.java b/app/src/main/java/org/torproject/android/OrbotApp.java
index e1f83233..7cb4317f 100644
--- a/app/src/main/java/org/torproject/android/OrbotApp.java
+++ b/app/src/main/java/org/torproject/android/OrbotApp.java
@@ -1,17 +1,9 @@
-
 package org.torproject.android;
 
-import android.annotation.SuppressLint;
-import android.app.Activity;
 import android.app.Application;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
 import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.content.res.Configuration;
-import androidx.core.app.NotificationCompat;
+
 import org.torproject.android.service.OrbotConstants;
 import org.torproject.android.service.util.Prefs;
 import org.torproject.android.settings.Languages;
@@ -19,11 +11,8 @@ import org.torproject.android.settings.LocaleHelper;
 
 import java.util.Locale;
 
-
 public class OrbotApp extends Application implements OrbotConstants {
 
-    private Locale locale;
-
     @Override
     public void onCreate() {
         super.onCreate();
@@ -32,7 +21,6 @@ public class OrbotApp extends Application implements OrbotConstants {
         if (!Prefs.getDefaultLocale().equals(Locale.getDefault().getLanguage())) {
             Languages.setLanguage(this, Prefs.getDefaultLocale(), true);
         }
-
     }
 
     @Override
@@ -49,42 +37,4 @@ public class OrbotApp extends Application implements OrbotConstants {
             Languages.setLanguage(this, Prefs.getDefaultLocale(), true);
     }
 
-
-    public static Languages getLanguages(Activity activity) {
-        return Languages.get(activity);
-    }
-
-
-    @SuppressLint("NewApi")
-    protected void showToolbarNotification (String shortMsg, String notifyMsg, int notifyId, int icon)
-    {
-
-        NotificationCompat.Builder notifyBuilder;
-
-        //Reusable code.
-        PackageManager pm = getPackageManager();
-        Intent intent = pm.getLaunchIntentForPackage(getPackageName());
-        PendingIntent pendIntent = PendingIntent.getActivity(this, 0, intent, 0);
-
-        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
-        notifyBuilder = new NotificationCompat.Builder(this)
-                .setContentTitle(getString(org.torproject.android.service.R.string.app_name));
-
-
-        notifyBuilder.setContentIntent(pendIntent);
-
-        notifyBuilder.setContentText(shortMsg);
-        notifyBuilder.setSmallIcon(icon);
-        notifyBuilder.setTicker(notifyMsg);
-
-        notifyBuilder.setOngoing(false);
-
-        notifyBuilder.setStyle(new NotificationCompat.BigTextStyle()
-                .bigText(notifyMsg).setBigContentTitle(getString(org.torproject.android.service.R.string.app_name)));
-
-        Notification notification = notifyBuilder.build();
-
-        notificationManager.notify(notifyId, notification);
-    }
 }
diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
index 328476a9..34e7c176 100644
--- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java
+++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java
@@ -3,8 +3,6 @@
 
 package org.torproject.android;
 
-import android.app.ActivityManager;
-import android.app.ActivityManager.RunningServiceInfo;
 import android.app.AlertDialog;
 
 import android.content.BroadcastReceiver;
@@ -35,7 +33,6 @@ import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
-import android.widget.CompoundButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.Spinner;
@@ -294,22 +291,14 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
         mTxtOrbotLog = findViewById(R.id.orbotLog);
 
         lblStatus = findViewById(R.id.lblStatus);
-        lblStatus.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mDrawer.openDrawer(LOG_DRAWER_GRAVITY);
-            }
-        });
+        lblStatus.setOnClickListener(v -> mDrawer.openDrawer(LOG_DRAWER_GRAVITY));
 
         lblPorts = findViewById(R.id.lblPorts);
 
         imgStatus = findViewById(R.id.imgStatus);
-        imgStatus.setOnLongClickListener(new View.OnLongClickListener() {
-            @Override
-            public boolean onLongClick(View v) {
-                toggleTor();
-                return true;
-            }
+        imgStatus.setOnLongClickListener(v -> {
+            toggleTor();
+            return true;
         });
 
         downloadText = findViewById(R.id.trafficDown);
@@ -320,12 +309,7 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
         uploadText.setText(zero);
 
         mBtnStart = findViewById(R.id.btnStart);
-        mBtnStart.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                toggleTor();
-            }
-        });
+        mBtnStart.setOnClickListener(v -> toggleTor());
 
         mBtnVPN = findViewById(R.id.btnVPN);
 
@@ -337,24 +321,13 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
             sendIntentToService(ACTION_START_VPN);
         }
 
-        mBtnVPN.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
-            @Override
-            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                enableVPN(isChecked);
-            }
-        });
+        mBtnVPN.setOnCheckedChangeListener((buttonView, isChecked) -> enableVPN(isChecked));
 
 
         mBtnBridges = findViewById(R.id.btnBridges);
         mBtnBridges.setChecked(Prefs.bridgesEnabled());
-        mBtnBridges.setOnClickListener(new View.OnClickListener() {
-
-            @Override
-            public void onClick(View v) {
-                promptSetupBridges(); //if ARM processor, show all bridge options
-            }
-
-
+        mBtnBridges.setOnClickListener(v -> {
+            promptSetupBridges(); //if ARM processor, show all bridge options
         });
 
         spnCountries = findViewById(R.id.spinnerCountry);
@@ -700,16 +673,13 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
                 final Boolean authCookie = intent.getBooleanExtra("hs_auth_cookie", false);
                 final Uri mKeyUri = intent.getData();
 
-                DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-
-                    public void onClick(DialogInterface dialog, int which) {
-                        if (which == DialogInterface.BUTTON_POSITIVE) {
-                            enableHiddenServicePort(
-                                    hiddenServiceName, hiddenServicePort,
-                                    hiddenServiceRemotePort, backupToPackage,
-                                    mKeyUri, authCookie
-                            );
-                        }
+                DialogInterface.OnClickListener dialogClickListener = (dialog, which) -> {
+                    if (which == DialogInterface.BUTTON_POSITIVE) {
+                        enableHiddenServicePort(
+                                hiddenServiceName, hiddenServicePort,
+                                hiddenServiceRemotePort, backupToPackage,
+                                mKeyUri, authCookie
+                        );
                     }
                 };
 
@@ -817,13 +787,10 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
                 finish();
 
                 final Handler handler = new Handler();
-                handler.postDelayed(new Runnable() {
-                    @Override
-                    public void run() {
-                        //Do something after 100ms
-                        startActivity(new Intent(OrbotMainActivity.this, OrbotMainActivity.class));
+                handler.postDelayed(() -> {
+                    //Do something after 100ms
+                    startActivity(new Intent(OrbotMainActivity.this, OrbotMainActivity.class));
 
-                    }
                 }, 1000);
 
 
@@ -1073,20 +1040,6 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
         sendIntentToService(TorServiceConstants.ACTION_STATUS);
     }
 
-    private boolean isTorServiceRunning() {
-        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
-
-        if (manager != null) {
-            for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
-                if (OrbotService.class.getName().equals(service.service.getClassName())) {
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
 
     // this is what takes messages or values from the callback threads or other non-mainUI threads
 //and passes them back into the main UI thread for display to the user
@@ -1228,12 +1181,7 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
                             iv.setLayoutParams(params);
                             iv.setImageDrawable(pMgr.getApplicationIcon(pkgId));
 
-                            iv.setOnClickListener(new View.OnClickListener() {
-                                @Override
-                                public void onClick(View v) {
-                                    openBrowser(URL_TOR_CHECK, false, pkgId);
-                                }
-                            });
+                            iv.setOnClickListener(v -> openBrowser(URL_TOR_CHECK, false, pkgId));
 
                             llBoxShortcuts.addView(iv);
                             appsAdded++;
@@ -1264,13 +1212,7 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan
             iv.setLayoutParams(params);
             iv.setImageDrawable(getResources().getDrawable(R.drawable.ic_settings_white_24dp));
             llBoxShortcuts.addView(iv);
-            iv.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT);
-
-                }
-            });
+            iv.setOnClickListener(v -> startActivityForResult(new Intent(OrbotMainActivity.this, AppManagerActivity.class), REQUEST_VPN_APPS_SELECT));
         }
 
     }
diff --git a/app/src/main/java/org/torproject/android/settings/Languages.java b/app/src/main/java/org/torproject/android/settings/Languages.java
index da83cd97..b9a76b91 100644
--- a/app/src/main/java/org/torproject/android/settings/Languages.java
+++ b/app/src/main/java/org/torproject/android/settings/Languages.java
@@ -3,7 +3,6 @@ package org.torproject.android.settings;
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.ContextWrapper;
-import android.content.Intent;
 import android.content.res.AssetManager;
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -19,7 +18,6 @@ import java.util.Set;
 import java.util.TreeMap;
 
 public class Languages {
-    public static final String TAG = "Languages";
 
     public static Locale defaultLocale;
     public static final Locale TIBETAN = new Locale("bo");
@@ -175,22 +173,6 @@ public class Languages {
         }
     }
 
-    /**
-     * Force reload the {@link Activity to make language changes take effect.}
-     *
-     * @param activity the {@code Activity} to force reload
-     */
-    public static void forceChangeLanguage(Activity activity) {
-        Intent intent = activity.getIntent();
-        if (intent == null) // when launched as LAUNCHER
-            return;
-        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
-        activity.finish();
-        activity.overridePendingTransition(0, 0);
-        activity.startActivity(intent);
-        activity.overridePendingTransition(0, 0);
-    }
-
     /**
      * Return an array of the names of all the supported languages, sorted to
      * match what is returned by {@link Languages#getSupportedLocales()}.
diff --git a/app/src/main/java/org/torproject/android/settings/SettingsPreferences.java b/app/src/main/java/org/torproject/android/settings/SettingsPreferences.java
index 2af632ee..4279fd65 100644
--- a/app/src/main/java/org/torproject/android/settings/SettingsPreferences.java
+++ b/app/src/main/java/org/torproject/android/settings/SettingsPreferences.java
@@ -9,7 +9,6 @@ import android.os.Bundle;
 import android.preference.EditTextPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceCategory;
 import android.preference.PreferenceScreen;
@@ -32,16 +31,13 @@ public class SettingsPreferences extends PreferenceActivity {
         Languages languages = Languages.get(this);
         prefLocale.setEntries(languages.getAllNames());
         prefLocale.setEntryValues(languages.getSupportedLocales());
-        prefLocale.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-            @Override
-            public boolean onPreferenceChange(Preference preference, Object newValue) {
-                String language = (String) newValue;
-                Intent intentResult = new Intent();
-                intentResult.putExtra("locale", language);
-                setResult(RESULT_OK, intentResult);
-                finish();
-                return false;
-            }
+        prefLocale.setOnPreferenceChangeListener((preference, newValue) -> {
+            String language = (String) newValue;
+            Intent intentResult = new Intent();
+            intentResult.putExtra("locale", language);
+            setResult(RESULT_OK, intentResult);
+            finish();
+            return false;
         });
     }
 
diff --git a/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java b/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
index 98e62a1f..63dab0ef 100644
--- a/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java
@@ -35,7 +35,6 @@ import org.torproject.android.service.vpn.TorifiedApp;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.StringTokenizer;
@@ -125,17 +124,15 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList
         if (mApps == null)
             mApps = getApps(prefs);
 
-        Collections.sort(mApps,new Comparator<TorifiedApp>() {
-            public int compare(TorifiedApp o1, TorifiedApp o2) {
-                /* Some apps start with lowercase letters and without the sorting being case
-                   insensitive they'd appear at the end of the grid of apps, a position where users
-                   would likely not expect to find them.
-                 */
-                if (o1.isTorified() == o2.isTorified())
-                    return o1.getName().compareToIgnoreCase(o2.getName());
-                if (o1.isTorified()) return -1;
-                return 1;
-            }
+        Collections.sort(mApps, (o1, o2) -> {
+            /* Some apps start with lowercase letters and without the sorting being case
+               insensitive they'd appear at the end of the grid of apps, a position where users
+               would likely not expect to find them.
+             */
+            if (o1.isTorified() == o2.isTorified())
+                return o1.getName().compareToIgnoreCase(o2.getName());
+            if (o1.isTorified()) return -1;
+            return 1;
         });
 
         final LayoutInflater inflater = getLayoutInflater();
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/ClientCookiesActivity.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/ClientCookiesActivity.java
index 511cda5a..0ed20f57 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/ClientCookiesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/ClientCookiesActivity.java
@@ -13,8 +13,6 @@ import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.widget.Toolbar;
 import android.view.Menu;
 import android.view.MenuItem;
-import android.view.View;
-import android.widget.AdapterView;
 import android.widget.ListView;
 import android.widget.Toast;
 import com.google.zxing.integration.android.IntentIntegrator;
@@ -47,12 +45,9 @@ public class ClientCookiesActivity extends AppCompatActivity {
 
         mResolver = getContentResolver();
 
-        findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                AddCookieDialog dialog = new AddCookieDialog();
-                dialog.show(getSupportFragmentManager(), "AddCookieDialog");
-            }
+        findViewById(R.id.fab).setOnClickListener(view -> {
+            AddCookieDialog dialog = new AddCookieDialog();
+            dialog.show(getSupportFragmentManager(), "AddCookieDialog");
         });
 
         mAdapter = new ClientCookiesAdapter(
@@ -67,33 +62,29 @@ public class ClientCookiesActivity extends AppCompatActivity {
         ListView cookies = findViewById(R.id.clien_cookies_list);
         cookies.setAdapter(mAdapter);
 
-        cookies.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-
-            @Override
-            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                Cursor item = (Cursor) parent.getItemAtPosition(position);
+        cookies.setOnItemClickListener((parent, view, position, id) -> {
+            Cursor item = (Cursor) parent.getItemAtPosition(position);
 
-                Bundle arguments = new Bundle();
-                arguments.putInt(
-                        "_id", item.getInt(item.getColumnIndex(CookieContentProvider.ClientCookie._ID))
-                );
+            Bundle arguments = new Bundle();
+            arguments.putInt(
+                    "_id", item.getInt(item.getColumnIndex(CookieContentProvider.ClientCookie._ID))
+            );
 
-                arguments.putString(
-                        "domain", item.getString(item.getColumnIndex(CookieContentProvider.ClientCookie.DOMAIN))
-                );
+            arguments.putString(
+                    "domain", item.getString(item.getColumnIndex(CookieContentProvider.ClientCookie.DOMAIN))
+            );
 
-                arguments.putString(
-                        "auth_cookie_value", item.getString(item.getColumnIndex(CookieContentProvider.ClientCookie.AUTH_COOKIE_VALUE))
-                );
+            arguments.putString(
+                    "auth_cookie_value", item.getString(item.getColumnIndex(CookieContentProvider.ClientCookie.AUTH_COOKIE_VALUE))
+            );
 
-                arguments.putInt(
-                        "enabled", item.getInt(item.getColumnIndex(CookieContentProvider.ClientCookie.ENABLED))
-                );
+            arguments.putInt(
+                    "enabled", item.getInt(item.getColumnIndex(CookieContentProvider.ClientCookie.ENABLED))
+            );
 
-                CookieActionsDialog dialog = new CookieActionsDialog();
-                dialog.setArguments(arguments);
-                dialog.show(getSupportFragmentManager(), CookieActionsDialog.class.getSimpleName());
-            }
+            CookieActionsDialog dialog = new CookieActionsDialog();
+            dialog.setArguments(arguments);
+            dialog.show(getSupportFragmentManager(), CookieActionsDialog.class.getSimpleName());
         });
 
     }
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java
index 4bf06e5b..8ea67ec7 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java
@@ -52,12 +52,9 @@ public class HiddenServicesActivity extends AppCompatActivity {
         mResolver = getContentResolver();
 
         fab = findViewById(R.id.fab);
-        fab.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                HSDataDialog dialog = new HSDataDialog();
-                dialog.show(getSupportFragmentManager(), "HSDataDialog");
-            }
+        fab.setOnClickListener(view -> {
+            HSDataDialog dialog = new HSDataDialog();
+            dialog.show(getSupportFragmentManager(), "HSDataDialog");
         });
 
         mAdapter = new OnionListAdapter(
@@ -75,37 +72,33 @@ public class HiddenServicesActivity extends AppCompatActivity {
         ListView onion_list = findViewById(R.id.onion_list);
         onion_list.setAdapter(mAdapter);
 
-        onion_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+        onion_list.setOnItemClickListener((parent, view, position, id) -> {
+            Cursor item = (Cursor) parent.getItemAtPosition(position);
 
-            @Override
-            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                Cursor item = (Cursor) parent.getItemAtPosition(position);
-
-                Bundle arguments = new Bundle();
-                arguments.putInt(
-                        "_id", item.getInt(item.getColumnIndex(HSContentProvider.HiddenService._ID))
-                );
+            Bundle arguments = new Bundle();
+            arguments.putInt(
+                    "_id", item.getInt(item.getColumnIndex(HSContentProvider.HiddenService._ID))
+            );
 
-                arguments.putString(
-                        "port", item.getString(item.getColumnIndex(HSContentProvider.HiddenService.PORT))
-                );
+            arguments.putString(
+                    "port", item.getString(item.getColumnIndex(HSContentProvider.HiddenService.PORT))
+            );
 
-                arguments.putString(
-                        "onion", item.getString(item.getColumnIndex(HSContentProvider.HiddenService.DOMAIN))
-                );
+            arguments.putString(
+                    "onion", item.getString(item.getColumnIndex(HSContentProvider.HiddenService.DOMAIN))
+            );
 
-                arguments.putInt(
-                        "auth_cookie", item.getInt(item.getColumnIndex(HSContentProvider.HiddenService.AUTH_COOKIE))
-                );
+            arguments.putInt(
+                    "auth_cookie", item.getInt(item.getColumnIndex(HSContentProvider.HiddenService.AUTH_COOKIE))
+            );
 
-                arguments.putString(
-                        "auth_cookie_value", item.getString(item.getColumnIndex(HSContentProvider.HiddenService.AUTH_COOKIE_VALUE))
-                );
+            arguments.putString(
+                    "auth_cookie_value", item.getString(item.getColumnIndex(HSContentProvider.HiddenService.AUTH_COOKIE_VALUE))
+            );
 
-                HSActionsDialog dialog = new HSActionsDialog();
-                dialog.setArguments(arguments);
-                dialog.show(getSupportFragmentManager(), HSActionsDialog.class.getSimpleName());
-            }
+            HSActionsDialog dialog = new HSActionsDialog();
+            dialog.setArguments(arguments);
+            dialog.show(getSupportFragmentManager(), HSActionsDialog.class.getSimpleName());
         });
     }
 
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/BackupAdapter.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/BackupAdapter.java
index 272dbf36..1533f5b1 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/BackupAdapter.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/BackupAdapter.java
@@ -14,11 +14,6 @@ import java.util.List;
 public class BackupAdapter extends ArrayAdapter<File> {
     private int mResource;
 
-    public BackupAdapter(Context context, int resource) {
-        super(context, resource);
-        mResource = resource;
-    }
-
     public BackupAdapter(Context context, int resource, List<File> zips) {
         super(context, resource, zips);
         mResource = resource;
@@ -38,7 +33,7 @@ public class BackupAdapter extends ArrayAdapter<File> {
         File p = getItem(position);
 
         if (p != null) {
-            TextView name = (TextView) v.findViewById(R.id.backup_name);
+            TextView name = v.findViewById(R.id.backup_name);
 
             if (name != null)
                 name.setText(p.getName());
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/ClientCookiesAdapter.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/ClientCookiesAdapter.java
index e0db9528..f61958cd 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/ClientCookiesAdapter.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/ClientCookiesAdapter.java
@@ -8,7 +8,6 @@ import androidx.cursoradapter.widget.CursorAdapter;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.CompoundButton;
 import android.widget.Switch;
 import android.widget.TextView;
 import android.widget.Toast;
@@ -31,28 +30,25 @@ public class ClientCookiesAdapter extends CursorAdapter {
         int id = cursor.getInt(cursor.getColumnIndex(CookieContentProvider.ClientCookie._ID));
         final String where = CookieContentProvider.ClientCookie._ID + "=" + id;
 
-        TextView domain = (TextView) view.findViewById(R.id.cookie_onion);
+        TextView domain = view.findViewById(R.id.cookie_onion);
         domain.setText(cursor.getString(cursor.getColumnIndex(CookieContentProvider.ClientCookie.DOMAIN)));
 
-        Switch enabled = (Switch) view.findViewById(R.id.cookie_switch);
+        Switch enabled = view.findViewById(R.id.cookie_switch);
         enabled.setChecked(
                 cursor.getInt(cursor.getColumnIndex(CookieContentProvider.ClientCookie.ENABLED)) == 1
         );
 
-        enabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
-            @Override
-            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                ContentResolver resolver = mContext.getContentResolver();
-                ContentValues fields = new ContentValues();
-                fields.put(CookieContentProvider.ClientCookie.ENABLED, isChecked);
-                resolver.update(
-                        CookieContentProvider.CONTENT_URI, fields, where, null
-                );
-
-                Toast.makeText(
-                        mContext, R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
-                ).show();
-            }
+        enabled.setOnCheckedChangeListener((buttonView, isChecked) -> {
+            ContentResolver resolver = mContext.getContentResolver();
+            ContentValues fields = new ContentValues();
+            fields.put(CookieContentProvider.ClientCookie.ENABLED, isChecked);
+            resolver.update(
+                    CookieContentProvider.CONTENT_URI, fields, where, null
+            );
+
+            Toast.makeText(
+                    mContext, R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
+            ).show();
         });
     }
 
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/OnionListAdapter.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/OnionListAdapter.java
index 485afe09..895f2779 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/OnionListAdapter.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/adapters/OnionListAdapter.java
@@ -8,7 +8,6 @@ import androidx.cursoradapter.widget.CursorAdapter;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.CompoundButton;
 import android.widget.Switch;
 import android.widget.TextView;
 import android.widget.Toast;
@@ -31,32 +30,29 @@ public class OnionListAdapter extends CursorAdapter {
         int id = cursor.getInt(cursor.getColumnIndex(HSContentProvider.HiddenService._ID));
         final String where = HSContentProvider.HiddenService._ID + "=" + id;
 
-        TextView port = (TextView) view.findViewById(R.id.hs_port);
+        TextView port = view.findViewById(R.id.hs_port);
         port.setText(cursor.getString(cursor.getColumnIndex(HSContentProvider.HiddenService.PORT)));
-        TextView name = (TextView) view.findViewById(R.id.hs_name);
+        TextView name = view.findViewById(R.id.hs_name);
         name.setText(cursor.getString(cursor.getColumnIndex(HSContentProvider.HiddenService.NAME)));
-        TextView domain = (TextView) view.findViewById(R.id.hs_onion);
+        TextView domain = view.findViewById(R.id.hs_onion);
         domain.setText(cursor.getString(cursor.getColumnIndex(HSContentProvider.HiddenService.DOMAIN)));
 
-        Switch enabled = (Switch) view.findViewById(R.id.hs_switch);
+        Switch enabled = view.findViewById(R.id.hs_switch);
         enabled.setChecked(
                 cursor.getInt(cursor.getColumnIndex(HSContentProvider.HiddenService.ENABLED)) == 1
         );
 
-        enabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
-            @Override
-            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                ContentResolver resolver = mContext.getContentResolver();
-                ContentValues fields = new ContentValues();
-                fields.put(HSContentProvider.HiddenService.ENABLED, isChecked);
-                resolver.update(
-                        HSContentProvider.CONTENT_URI, fields, where, null
-                );
-
-                Toast.makeText(
-                        mContext, R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
-                ).show();
-            }
+        enabled.setOnCheckedChangeListener((buttonView, isChecked) -> {
+            ContentResolver resolver = mContext.getContentResolver();
+            ContentValues fields = new ContentValues();
+            fields.put(HSContentProvider.HiddenService.ENABLED, isChecked);
+            resolver.update(
+                    HSContentProvider.CONTENT_URI, fields, where, null
+            );
+
+            Toast.makeText(
+                    mContext, R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
+            ).show();
         });
     }
 
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/AddCookieDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/AddCookieDialog.java
index c47d9ae8..6fa99d8d 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/AddCookieDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/AddCookieDialog.java
@@ -29,27 +29,21 @@ public class AddCookieDialog extends DialogFragment {
                 .create();
 
         Button save = dialog_view.findViewById(R.id.cookie_dialog_save);
-        save.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                String onion = ((EditText) dialog_view.findViewById(R.id.cookie_onion)).getText().toString();
-                String cookie = ((EditText) dialog_view.findViewById(R.id.cookie_value)).getText().toString();
-
-                if (checkInput(onion, cookie)) {
-                    saveData(onion, cookie);
-                    Toast.makeText(
-                            v.getContext(), R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
-                    ).show();
-                    addCookieDialog.dismiss();
-                }
+        save.setOnClickListener(v -> {
+            String onion = ((EditText) dialog_view.findViewById(R.id.cookie_onion)).getText().toString();
+            String cookie = ((EditText) dialog_view.findViewById(R.id.cookie_value)).getText().toString();
+
+            if (checkInput(onion, cookie)) {
+                saveData(onion, cookie);
+                Toast.makeText(
+                        v.getContext(), R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
+                ).show();
+                addCookieDialog.dismiss();
             }
         });
 
         Button cancel = dialog_view.findViewById(R.id.cookie_dialog_cancel);
-        cancel.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                addCookieDialog.cancel();
-            }
-        });
+        cancel.setOnClickListener(v -> addCookieDialog.cancel());
 
         return addCookieDialog;
     }
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/CookieActionsDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/CookieActionsDialog.java
index c8f3db25..dcd00cc3 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/CookieActionsDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/CookieActionsDialog.java
@@ -29,26 +29,16 @@ public class CookieActionsDialog extends DialogFragment {
                 .setTitle(R.string.client_cookies)
                 .create();
 
-        dialog_view.findViewById(R.id.btn_cookie_backup).setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                doBackup();
-            }
-        });
+        dialog_view.findViewById(R.id.btn_cookie_backup).setOnClickListener(v -> doBackup());
 
-        dialog_view.findViewById(R.id.btn_cookie_delete).setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                CookieDeleteDialog dialog = new CookieDeleteDialog();
-                dialog.setArguments(arguments);
-                dialog.show(getFragmentManager(), "CookieDeleteDialog");
-                actionDialog.dismiss();
-            }
+        dialog_view.findViewById(R.id.btn_cookie_delete).setOnClickListener(v -> {
+            CookieDeleteDialog dialog = new CookieDeleteDialog();
+            dialog.setArguments(arguments);
+            dialog.show(getFragmentManager(), "CookieDeleteDialog");
+            actionDialog.dismiss();
         });
 
-        dialog_view.findViewById(R.id.btn_cookie_cancel).setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                actionDialog.dismiss();
-            }
-        });
+        dialog_view.findViewById(R.id.btn_cookie_cancel).setOnClickListener(v -> actionDialog.dismiss());
 
         return actionDialog;
     }
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/CookieDeleteDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/CookieDeleteDialog.java
index ed847cdc..f8338803 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/CookieDeleteDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/CookieDeleteDialog.java
@@ -19,24 +19,21 @@ public class CookieDeleteDialog extends DialogFragment {
         final Bundle arguments = getArguments();
         final Context context = getContext();
 
-        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                switch (which) {
-                    case DialogInterface.BUTTON_POSITIVE:
-                        // Delete from db
-                        context.getContentResolver().delete(
-                                CookieContentProvider.CONTENT_URI,
-                                CookieContentProvider.ClientCookie._ID + "=" + arguments.getInt("_id"),
-                                null
-                        );
-
-                        break;
-
-                    case DialogInterface.BUTTON_NEGATIVE:
-                        // Do nothing
-                        break;
-                }
+        DialogInterface.OnClickListener dialogClickListener = (dialog, which) -> {
+            switch (which) {
+                case DialogInterface.BUTTON_POSITIVE:
+                    // Delete from db
+                    context.getContentResolver().delete(
+                            CookieContentProvider.CONTENT_URI,
+                            CookieContentProvider.ClientCookie._ID + "=" + arguments.getInt("_id"),
+                            null
+                    );
+
+                    break;
+
+                case DialogInterface.BUTTON_NEGATIVE:
+                    // Do nothing
+                    break;
             }
         };
 
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSActionsDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSActionsDialog.java
index 8e7ff7e8..b250c3db 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSActionsDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSActionsDialog.java
@@ -14,7 +14,6 @@ import androidx.fragment.app.DialogFragment;
 import androidx.appcompat.app.AlertDialog;
 
 import android.view.View;
-import android.widget.Button;
 import android.widget.Toast;
 
 import org.torproject.android.R;
@@ -36,62 +35,48 @@ public class HSActionsDialog extends DialogFragment {
                 .setTitle(R.string.hidden_services)
                 .create();
 
-        dialog_view.findViewById(R.id.btn_hs_backup).setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                doBackup();
-            }
-        });
+        dialog_view.findViewById(R.id.btn_hs_backup).setOnClickListener(v -> doBackup());
 
-        dialog_view.findViewById(R.id.btn_hs_clipboard).setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                Context mContext = v.getContext();
-                ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
-                ClipData clip = ClipData.newPlainText("onion", arguments.getString("onion"));
-                clipboard.setPrimaryClip(clip);
-                Toast.makeText(mContext, R.string.done, Toast.LENGTH_LONG).show();
-                actionDialog.dismiss();
-            }
+        dialog_view.findViewById(R.id.btn_hs_clipboard).setOnClickListener(v -> {
+            Context mContext = v.getContext();
+            ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
+            ClipData clip = ClipData.newPlainText("onion", arguments.getString("onion"));
+            clipboard.setPrimaryClip(clip);
+            Toast.makeText(mContext, R.string.done, Toast.LENGTH_LONG).show();
+            actionDialog.dismiss();
         });
 
-        dialog_view.findViewById(R.id.bt_hs_show_auth).setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                String auth_cookie_value = arguments.getString("auth_cookie_value");
-
-                if (arguments.getInt("auth_cookie") == 1) {
-                    if (auth_cookie_value == null || auth_cookie_value.length() < 1) {
-                        Toast.makeText(
-                                v.getContext(), R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
-                        ).show();
-                    } else {
-                        HSCookieDialog dialog = new HSCookieDialog();
-                        dialog.setArguments(arguments);
-                        dialog.show(getFragmentManager(), "HSCookieDialog");
-                    }
-                } else {
+        dialog_view.findViewById(R.id.bt_hs_show_auth).setOnClickListener(v -> {
+            String auth_cookie_value = arguments.getString("auth_cookie_value");
+
+            if (arguments.getInt("auth_cookie") == 1) {
+                if (auth_cookie_value == null || auth_cookie_value.length() < 1) {
                     Toast.makeText(
-                            v.getContext(), R.string.auth_cookie_was_not_configured, Toast.LENGTH_LONG
+                            v.getContext(), R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
                     ).show();
+                } else {
+                    HSCookieDialog dialog = new HSCookieDialog();
+                    dialog.setArguments(arguments);
+                    dialog.show(getFragmentManager(), "HSCookieDialog");
                 }
-
-                actionDialog.dismiss();
+            } else {
+                Toast.makeText(
+                        v.getContext(), R.string.auth_cookie_was_not_configured, Toast.LENGTH_LONG
+                ).show();
             }
-        });
 
-        dialog_view.findViewById(R.id.btn_hs_delete).setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                HSDeleteDialog dialog = new HSDeleteDialog();
-                dialog.setArguments(arguments);
-                dialog.show(getFragmentManager(), "HSDeleteDialog");
-                actionDialog.dismiss();
-            }
+            actionDialog.dismiss();
         });
 
-        dialog_view.findViewById(R.id.btn_hs_cancel).setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                actionDialog.dismiss();
-            }
+        dialog_view.findViewById(R.id.btn_hs_delete).setOnClickListener(v -> {
+            HSDeleteDialog dialog = new HSDeleteDialog();
+            dialog.setArguments(arguments);
+            dialog.show(getFragmentManager(), "HSDeleteDialog");
+            actionDialog.dismiss();
         });
 
+        dialog_view.findViewById(R.id.btn_hs_cancel).setOnClickListener(v -> actionDialog.dismiss());
+
         return actionDialog;
     }
 
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSCookieDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSCookieDialog.java
index 054516fb..ce71a96f 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSCookieDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSCookieDialog.java
@@ -32,48 +32,40 @@ public class HSCookieDialog extends DialogFragment {
                 .setView(dialog_view)
                 .create();
 
-        TextView cookie = (TextView) dialog_view.findViewById(R.id.hs_cookie);
+        TextView cookie = dialog_view.findViewById(R.id.hs_cookie);
         cookie.setText(auth_cookie_value);
 
-        Button clipboard = (Button) dialog_view.findViewById(R.id.hs_cookie_to_clipboard);
-        clipboard.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                Context mContext = v.getContext();
-                ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
-                ClipData clip = ClipData.newPlainText("cookie", auth_cookie_value);
-                clipboard.setPrimaryClip(clip);
-                Toast.makeText(mContext, R.string.done, Toast.LENGTH_LONG).show();
-                cookieDialog.dismiss();
-            }
+        Button clipboard = dialog_view.findViewById(R.id.hs_cookie_to_clipboard);
+        clipboard.setOnClickListener(v -> {
+            Context mContext = v.getContext();
+            ClipboardManager clipboard1 = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
+            ClipData clip = ClipData.newPlainText("cookie", auth_cookie_value);
+            clipboard1.setPrimaryClip(clip);
+            Toast.makeText(mContext, R.string.done, Toast.LENGTH_LONG).show();
+            cookieDialog.dismiss();
         });
 
-        Button shareQR = (Button) dialog_view.findViewById(R.id.hs_cookie_to_qr);
-        shareQR.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                try {
-                    JSONObject backup = new JSONObject();
-                    backup.put(CookieContentProvider.ClientCookie.DOMAIN, arguments.getString("onion"));
-                    backup.put(CookieContentProvider.ClientCookie.AUTH_COOKIE_VALUE, arguments.getString("auth_cookie_value"));
-
-                    IntentIntegrator integrator = new IntentIntegrator(getActivity());
-                    integrator.shareText(backup.toString());
+        Button shareQR = dialog_view.findViewById(R.id.hs_cookie_to_qr);
+        shareQR.setOnClickListener(v -> {
+            try {
+                JSONObject backup = new JSONObject();
+                backup.put(CookieContentProvider.ClientCookie.DOMAIN, arguments.getString("onion"));
+                backup.put(CookieContentProvider.ClientCookie.AUTH_COOKIE_VALUE, arguments.getString("auth_cookie_value"));
 
-                } catch (JSONException e) {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
-                }
+                IntentIntegrator integrator = new IntentIntegrator(getActivity());
+                integrator.shareText(backup.toString());
 
-                cookieDialog.dismiss();
+            } catch (JSONException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
             }
-        });
 
-        Button cancel = (Button) dialog_view.findViewById(R.id.hs_cookie_cancel);
-        cancel.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                cookieDialog.dismiss();
-            }
+            cookieDialog.dismiss();
         });
 
+        Button cancel = dialog_view.findViewById(R.id.hs_cookie_cancel);
+        cancel.setOnClickListener(v -> cookieDialog.dismiss());
+
         return cookieDialog;
     }
 }
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSDataDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSDataDialog.java
index ee3ac343..28c1d716 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSDataDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSDataDialog.java
@@ -35,35 +35,29 @@ public class HSDataDialog extends DialogFragment {
 
         // Buttons action
         Button save = dialog_view.findViewById(R.id.HSDialogSave);
-        save.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                String serverName = ((EditText) dialog_view.findViewById(R.id.hsName)).getText().toString();
-                int localPort, onionPort;
-                try {
-                    localPort = Integer.parseInt(((EditText) dialog_view.findViewById(R.id.hsLocalPort)).getText().toString());
-                    onionPort = Integer.parseInt(((EditText) dialog_view.findViewById(R.id.hsOnionPort)).getText().toString());
-                } catch (NumberFormatException nfe) {
-                    Toast.makeText(v.getContext(), R.string.fields_can_t_be_empty, Toast.LENGTH_LONG).show();
-                    return;
-                }
-                boolean authCookie = ((CheckBox) dialog_view.findViewById(R.id.hsAuth)).isChecked();
-
-                if (checkInput(serverName, localPort, onionPort)) {
-                    saveData(serverName, localPort, onionPort, authCookie);
-                    Toast.makeText(
-                            v.getContext(), R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
-                    ).show();
-                    serviceDataDialog.dismiss();
-                }
+        save.setOnClickListener(v -> {
+            String serverName = ((EditText) dialog_view.findViewById(R.id.hsName)).getText().toString();
+            int localPort, onionPort;
+            try {
+                localPort = Integer.parseInt(((EditText) dialog_view.findViewById(R.id.hsLocalPort)).getText().toString());
+                onionPort = Integer.parseInt(((EditText) dialog_view.findViewById(R.id.hsOnionPort)).getText().toString());
+            } catch (NumberFormatException nfe) {
+                Toast.makeText(v.getContext(), R.string.fields_can_t_be_empty, Toast.LENGTH_LONG).show();
+                return;
+            }
+            boolean authCookie = ((CheckBox) dialog_view.findViewById(R.id.hsAuth)).isChecked();
+
+            if (checkInput(serverName, localPort, onionPort)) {
+                saveData(serverName, localPort, onionPort, authCookie);
+                Toast.makeText(
+                        v.getContext(), R.string.please_restart_Orbot_to_enable_the_changes, Toast.LENGTH_LONG
+                ).show();
+                serviceDataDialog.dismiss();
             }
         });
 
         Button cancel = dialog_view.findViewById(R.id.HSDialogCancel);
-        cancel.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                serviceDataDialog.cancel();
-            }
-        });
+        cancel.setOnClickListener(v -> serviceDataDialog.cancel());
 
         return serviceDataDialog;
     }
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSDeleteDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSDeleteDialog.java
index 27a547f8..1712d937 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSDeleteDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/HSDeleteDialog.java
@@ -22,36 +22,33 @@ public class HSDeleteDialog extends DialogFragment {
         final Bundle arguments = getArguments();
         final Context context = getContext();
 
-        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                switch (which) {
-                    case DialogInterface.BUTTON_POSITIVE:
-                        // Delete from db
-                        context.getContentResolver().delete(
-                                HSContentProvider.CONTENT_URI,
-                                HSContentProvider.HiddenService._ID + "=" + arguments.getInt("_id"),
-                                null
-                        );
-
-                        // Delete from internal storage
-                        String base = context.getFilesDir().getAbsolutePath() + "/" + TorServiceConstants.HIDDEN_SERVICES_DIR;
-                        File dir = new File(base, "hs" + arguments.getString("port"));
-
-                        if (dir.isDirectory()) {
-                            String[] children = dir.list();
-                            for (String aChildren : children) {
-                                new File(dir, aChildren).delete();
-                            }
-                            dir.delete();
+        DialogInterface.OnClickListener dialogClickListener = (dialog, which) -> {
+            switch (which) {
+                case DialogInterface.BUTTON_POSITIVE:
+                    // Delete from db
+                    context.getContentResolver().delete(
+                            HSContentProvider.CONTENT_URI,
+                            HSContentProvider.HiddenService._ID + "=" + arguments.getInt("_id"),
+                            null
+                    );
+
+                    // Delete from internal storage
+                    String base = context.getFilesDir().getAbsolutePath() + "/" + TorServiceConstants.HIDDEN_SERVICES_DIR;
+                    File dir = new File(base, "hs" + arguments.getString("port"));
+
+                    if (dir.isDirectory()) {
+                        String[] children = dir.list();
+                        for (String aChildren : children) {
+                            new File(dir, aChildren).delete();
                         }
+                        dir.delete();
+                    }
 
-                        break;
+                    break;
 
-                    case DialogInterface.BUTTON_NEGATIVE:
-                        // Do nothing
-                        break;
-                }
+                case DialogInterface.BUTTON_NEGATIVE:
+                    // Do nothing
+                    break;
             }
         };
 
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectCookieBackupDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectCookieBackupDialog.java
index a8e380d9..120b0693 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectCookieBackupDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectCookieBackupDialog.java
@@ -1,13 +1,11 @@
 package org.torproject.android.ui.hiddenservices.dialogs;
 
 import android.app.Dialog;
-import android.content.DialogInterface;
 import android.os.Bundle;
 import androidx.annotation.NonNull;
 import androidx.fragment.app.DialogFragment;
 import androidx.appcompat.app.AlertDialog;
 import android.view.View;
-import android.widget.AdapterView;
 import android.widget.ListView;
 import org.torproject.android.R;
 import org.torproject.android.ui.hiddenservices.adapters.BackupAdapter;
@@ -15,7 +13,6 @@ import org.torproject.android.ui.hiddenservices.backup.BackupUtils;
 import org.torproject.android.ui.hiddenservices.storage.ExternalStorage;
 
 import java.io.File;
-import java.io.FilenameFilter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -33,23 +30,14 @@ public class SelectCookieBackupDialog extends DialogFragment {
         File[] files = null;
 
         try {
-            files = backupDir.listFiles(new FilenameFilter() {
-                @Override
-                public boolean accept(File dir, String name) {
-                    return name.toLowerCase().endsWith(".json");
-                }
-            });
+            files = backupDir.listFiles((dir, name) -> name.toLowerCase().endsWith(".json"));
         } catch (NullPointerException e) {
             // Silent block
         }
 
         if (files == null || files.length < 1) {
             cookieBackupDialog.setMessage(R.string.create_a_backup_first);
-            cookieBackupDialog.setNegativeButton(R.string.btn_cancel, new DialogInterface.OnClickListener() {
-                public void onClick(DialogInterface dialog, int id) {
-                    dialog.dismiss();
-                }
-            });
+            cookieBackupDialog.setNegativeButton(R.string.btn_cancel, (dialog, id) -> dialog.dismiss());
 
             return cookieBackupDialog.create();
         }
@@ -57,25 +45,18 @@ public class SelectCookieBackupDialog extends DialogFragment {
         final View dialog_view = getActivity().getLayoutInflater().inflate(R.layout.layout_hs_backups_list, null);
 
         cookieBackupDialog.setView(dialog_view);
-        cookieBackupDialog.setPositiveButton(R.string.btn_okay, new DialogInterface.OnClickListener() {
-            public void onClick(DialogInterface dialog, int id) {
-                dialog.dismiss();
-            }
-        });
+        cookieBackupDialog.setPositiveButton(R.string.btn_okay, (dialog, id) -> dialog.dismiss());
 
-        ListView backups = (ListView) dialog_view.findViewById(R.id.listview_hs_backups);
+        ListView backups = dialog_view.findViewById(R.id.listview_hs_backups);
 
         List<File> json_backups = new ArrayList<>();
         Collections.addAll(json_backups, files);
 
         backups.setAdapter(new BackupAdapter(getContext(), R.layout.layout_hs_backups_list_item, json_backups));
-        backups.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-            @Override
-            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                BackupUtils backupUtils = new BackupUtils(view.getContext().getApplicationContext());
-                File p = (File) parent.getItemAtPosition(position);
-                backupUtils.restoreCookieBackup(p);
-            }
+        backups.setOnItemClickListener((parent, view, position, id) -> {
+            BackupUtils backupUtils = new BackupUtils(view.getContext().getApplicationContext());
+            File p = (File) parent.getItemAtPosition(position);
+            backupUtils.restoreCookieBackup(p);
         });
 
         return cookieBackupDialog.create();
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectHSBackupDialog.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectHSBackupDialog.java
index ae15ae49..6f02f872 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectHSBackupDialog.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/dialogs/SelectHSBackupDialog.java
@@ -1,13 +1,11 @@
 package org.torproject.android.ui.hiddenservices.dialogs;
 
 import android.app.Dialog;
-import android.content.DialogInterface;
 import android.os.Bundle;
 import androidx.annotation.NonNull;
 import androidx.fragment.app.DialogFragment;
 import androidx.appcompat.app.AlertDialog;
 import android.view.View;
-import android.widget.AdapterView;
 import android.widget.ListView;
 import org.torproject.android.R;
 import org.torproject.android.ui.hiddenservices.adapters.BackupAdapter;
@@ -15,7 +13,6 @@ import org.torproject.android.ui.hiddenservices.backup.BackupUtils;
 import org.torproject.android.ui.hiddenservices.storage.ExternalStorage;
 
 import java.io.File;
-import java.io.FilenameFilter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -33,23 +30,14 @@ public class SelectHSBackupDialog extends DialogFragment {
         File[] files = null;
 
         try {
-            files = backupDir.listFiles(new FilenameFilter() {
-                @Override
-                public boolean accept(File dir, String name) {
-                    return name.toLowerCase().endsWith(".zip");
-                }
-            });
+            files = backupDir.listFiles((dir, name) -> name.toLowerCase().endsWith(".zip"));
         } catch (NullPointerException e) {
             // Silent block
         }
 
         if (files == null || files.length < 1) {
             backupsDialog.setMessage(R.string.create_a_backup_first);
-            backupsDialog.setNegativeButton(R.string.btn_cancel, new DialogInterface.OnClickListener() {
-                public void onClick(DialogInterface dialog, int id) {
-                    dialog.dismiss();
-                }
-            });
+            backupsDialog.setNegativeButton(R.string.btn_cancel, (dialog, id) -> dialog.dismiss());
 
             return backupsDialog.create();
         }
@@ -57,25 +45,18 @@ public class SelectHSBackupDialog extends DialogFragment {
         final View dialog_view = getActivity().getLayoutInflater().inflate(R.layout.layout_hs_backups_list, null);
 
         backupsDialog.setView(dialog_view);
-        backupsDialog.setPositiveButton(R.string.btn_okay, new DialogInterface.OnClickListener() {
-            public void onClick(DialogInterface dialog, int id) {
-                dialog.dismiss();
-            }
-        });
+        backupsDialog.setPositiveButton(R.string.btn_okay, (dialog, id) -> dialog.dismiss());
 
-        ListView backups = (ListView) dialog_view.findViewById(R.id.listview_hs_backups);
+        ListView backups = dialog_view.findViewById(R.id.listview_hs_backups);
 
         List<File> zips = new ArrayList<>();
         Collections.addAll(zips, files);
 
         backups.setAdapter(new BackupAdapter(getContext(), R.layout.layout_hs_backups_list_item, zips));
-        backups.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-            @Override
-            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-                BackupUtils backupUtils = new BackupUtils(view.getContext().getApplicationContext());
-                File p = (File) parent.getItemAtPosition(position);
-                backupUtils.restoreZipBackup(p);
-            }
+        backups.setOnItemClickListener((parent, view, position, id) -> {
+            BackupUtils backupUtils = new BackupUtils(view.getContext().getApplicationContext());
+            File p = (File) parent.getItemAtPosition(position);
+            backupUtils.restoreZipBackup(p);
         });
 
         return backupsDialog.create();
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/permissions/PermissionManager.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/permissions/PermissionManager.java
index eb1a40b4..95bacd59 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/permissions/PermissionManager.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/permissions/PermissionManager.java
@@ -14,7 +14,7 @@ import android.provider.Settings;
 import com.google.android.material.snackbar.Snackbar;
 import androidx.core.app.ActivityCompat;
 import androidx.fragment.app.FragmentActivity;
-import android.view.View;
+
 import org.torproject.android.R;
 
 public class PermissionManager {
@@ -38,14 +38,9 @@ public class PermissionManager {
             Snackbar.make(mActivity.findViewById(android.R.id.content),
                     R.string.please_grant_permissions_for_external_storage,
                     Snackbar.LENGTH_INDEFINITE).setAction(R.string.activate,
-                    new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            ActivityCompat.requestPermissions(mActivity,
-                                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
-                                    mAction);
-                        }
-                    }).show();
+                    v -> ActivityCompat.requestPermissions(mActivity,
+                            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
+                            mAction)).show();
         } else {
             ActivityCompat.requestPermissions(mActivity,
                     new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
@@ -65,14 +60,11 @@ public class PermissionManager {
         Snackbar.make(activity.findViewById(android.R.id.content),
                 R.string.consider_disable_battery_optimizations,
                 VERY_LONG_LENGTH).setAction(R.string.disable,
-                new View.OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        Intent intent = new Intent();
-                        intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
-                        intent.setData(Uri.parse("package:" + packageName));
-                        mContext.startActivity(intent);
-                    }
+                v -> {
+                    Intent intent = new Intent();
+                    intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
+                    intent.setData(Uri.parse("package:" + packageName));
+                    mContext.startActivity(intent);
                 }).show();
     }
 
@@ -89,13 +81,10 @@ public class PermissionManager {
         Snackbar.make(activity.findViewById(android.R.id.content),
                 R.string.consider_enable_battery_optimizations,
                 VERY_LONG_LENGTH).setAction(R.string.enable,
-                new View.OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        Intent intent = new Intent();
-                        intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
-                        mContext.startActivity(intent);
-                    }
+                v -> {
+                    Intent intent = new Intent();
+                    intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
+                    mContext.startActivity(intent);
                 }).show();
     }
 }
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/storage/ExternalStorage.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/storage/ExternalStorage.java
index c50108b7..f3780f87 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/storage/ExternalStorage.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/storage/ExternalStorage.java
@@ -20,15 +20,9 @@ public class ExternalStorage {
     }
 
     /* Checks if external storage is available for read and write */
-    public static boolean isExternalStorageWritable() {
+    private static boolean isExternalStorageWritable() {
         String state = Environment.getExternalStorageState();
         return Environment.MEDIA_MOUNTED.equals(state);
     }
 
-    /* Checks if external storage is available to at least read */
-    public static boolean isExternalStorageReadable() {
-        String state = Environment.getExternalStorageState();
-        return Environment.MEDIA_MOUNTED.equals(state) ||
-                Environment.MEDIA_MOUNTED_READ_ONLY.equals(state);
-    }
 }
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
index 7f7561ba..6b76a3f2 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/BridgeWizardActivity.java
@@ -53,53 +53,34 @@ public class BridgeWizardActivity extends AppCompatActivity {
 
         setTitle(getString(R.string.bridges));
 
-        findViewById(R.id.btnMoat).setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                startActivityForResult(new Intent(BridgeWizardActivity.this, MoatActivity.class),
-                        MOAT_REQUEST_CODE);
-            }
-        });
+        findViewById(R.id.btnMoat).setOnClickListener(v -> startActivityForResult(new Intent(BridgeWizardActivity.this, MoatActivity.class),
+                MOAT_REQUEST_CODE));
 
         mBtDirect = findViewById(R.id.btnBridgesDirect);
-        mBtDirect.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Prefs.setBridgesList("");
-                Prefs.putBridgesEnabled(false);
-                testBridgeConnection();
-            }
+        mBtDirect.setOnClickListener(v -> {
+            Prefs.setBridgesList("");
+            Prefs.putBridgesEnabled(false);
+            testBridgeConnection();
         });
 
         mBtObfs4 = findViewById(R.id.btnBridgesObfs4);
-        mBtObfs4.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Prefs.setBridgesList("obfs4");
-                Prefs.putBridgesEnabled(true);
-                testBridgeConnection();
-            }
+        mBtObfs4.setOnClickListener(v -> {
+            Prefs.setBridgesList("obfs4");
+            Prefs.putBridgesEnabled(true);
+            testBridgeConnection();
         });
 
 
         mBtMeek = findViewById(R.id.btnBridgesMeek);
-        mBtMeek.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Prefs.setBridgesList("meek");
-                Prefs.putBridgesEnabled(true);
-                testBridgeConnection();
-            }
+        mBtMeek.setOnClickListener(v -> {
+            Prefs.setBridgesList("meek");
+            Prefs.putBridgesEnabled(true);
+            testBridgeConnection();
         });
 
 
         mBtCustom = findViewById(R.id.btnCustomBridges);
-        mBtCustom.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                startActivity(new Intent(BridgeWizardActivity.this, CustomBridgesActivity.class));
-            }
-        });
+        mBtCustom.setOnClickListener(view -> startActivity(new Intent(BridgeWizardActivity.this, CustomBridgesActivity.class)));
     }
 
     @Override
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 5e2b3dd6..c581fd53 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
@@ -226,15 +226,12 @@ public class CustomBridgesActivity extends AppCompatActivity implements View.OnC
         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;
+        et.setOnTouchListener((v, event) -> {
+            v.getParent().requestDisallowInterceptTouchEvent(true);
+            if ((event.getAction() & MotionEvent.ACTION_UP) != 0 && (event.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+                v.getParent().requestDisallowInterceptTouchEvent(false);
             }
+            return false;
         });
     }
 }
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 69e9e9e2..588c6952 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
@@ -34,7 +34,6 @@ import com.android.volley.DefaultRetryPolicy;
 import com.android.volley.Request;
 import com.android.volley.RequestQueue;
 import com.android.volley.Response;
-import com.android.volley.VolleyError;
 import com.android.volley.toolbox.JsonObjectRequest;
 import com.android.volley.toolbox.Volley;
 
@@ -243,31 +242,28 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
     private void fetchCaptcha() {
         JsonObjectRequest request = buildRequest("fetch",
                 "\"type\": \"client-transports\", \"supported\": [\"obfs4\"]",
-                new Response.Listener<JSONObject>() {
-                    @Override
-                    public void onResponse(JSONObject response) {
-                        mRequestInProgress = false;
-                        invalidateOptionsMenu();
-                        mProgressBar.setVisibility(View.GONE);
-
-                        try {
-                            JSONObject data = response.getJSONArray("data").getJSONObject(0);
-                            mChallenge = data.getString("challenge");
-
-                            mCaptcha = Base64.decode(data.getString("image"), Base64.DEFAULT);
-                            mIvCaptcha.setImageBitmap(BitmapFactory.decodeByteArray(mCaptcha, 0, mCaptcha.length));
-                            mIvCaptcha.setVisibility(View.VISIBLE);
-                            mEtSolution.setText(null);
-                            mEtSolution.setEnabled(true);
-                            mBtRequest.setEnabled(true);
-
-                        } catch (JSONException e) {
-                            Log.d(MoatActivity.class.getSimpleName(), "Error decoding answer: " + response.toString());
-
-                            displayError(e, response);
-                        }
-
+                response -> {
+                    mRequestInProgress = false;
+                    invalidateOptionsMenu();
+                    mProgressBar.setVisibility(View.GONE);
+
+                    try {
+                        JSONObject data = response.getJSONArray("data").getJSONObject(0);
+                        mChallenge = data.getString("challenge");
+
+                        mCaptcha = Base64.decode(data.getString("image"), Base64.DEFAULT);
+                        mIvCaptcha.setImageBitmap(BitmapFactory.decodeByteArray(mCaptcha, 0, mCaptcha.length));
+                        mIvCaptcha.setVisibility(View.VISIBLE);
+                        mEtSolution.setText(null);
+                        mEtSolution.setEnabled(true);
+                        mBtRequest.setEnabled(true);
+
+                    } catch (JSONException e) {
+                        Log.d(MoatActivity.class.getSimpleName(), "Error decoding answer: " + response.toString());
+
+                        displayError(e, response);
                     }
+
                 });
 
         if (request != null) {
@@ -288,38 +284,35 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
         JsonObjectRequest request = buildRequest("check",
                 "\"id\": \"2\", \"type\": \"moat-solution\", \"transport\": \"obfs4\", \"challenge\": \""
                         + mChallenge + "\", \"solution\": \"" + solution + "\", \"qrcode\": \"false\"",
-                new Response.Listener<JSONObject>() {
-                    @Override
-                    public void onResponse(JSONObject response) {
-                        mRequestInProgress = false;
-                        invalidateOptionsMenu();
-                        mProgressBar.setVisibility(View.GONE);
+                response -> {
+                    mRequestInProgress = false;
+                    invalidateOptionsMenu();
+                    mProgressBar.setVisibility(View.GONE);
 
-                        try {
-                            JSONArray bridges = response.getJSONArray("data").getJSONObject(0).getJSONArray("bridges");
+                    try {
+                        JSONArray bridges = response.getJSONArray("data").getJSONObject(0).getJSONArray("bridges");
 
-                            Log.d(MoatActivity.class.getSimpleName(), "Bridges: " + bridges.toString());
+                        Log.d(MoatActivity.class.getSimpleName(), "Bridges: " + bridges.toString());
 
-                            StringBuilder sb = new StringBuilder();
+                        StringBuilder sb = new StringBuilder();
 
-                            for (int i = 0; i < bridges.length(); i++) {
-                                sb.append(bridges.getString(i)).append("\n");
-                            }
+                        for (int i = 0; i < bridges.length(); i++) {
+                            sb.append(bridges.getString(i)).append("\n");
+                        }
 
-                            Prefs.setBridgesList(sb.toString());
-                            Prefs.putBridgesEnabled(true);
+                        Prefs.setBridgesList(sb.toString());
+                        Prefs.putBridgesEnabled(true);
 
-                            sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
+                        sendIntentToService(TorServiceConstants.CMD_SIGNAL_HUP);
 
-                            mSuccess = true;
-                            setResult(RESULT_OK);
-                            finish();
-                        }
-                        catch (JSONException e) {
-                            Log.d(MoatActivity.class.getSimpleName(), "Error decoding answer: " + response.toString());
+                        mSuccess = true;
+                        setResult(RESULT_OK);
+                        finish();
+                    }
+                    catch (JSONException e) {
+                        Log.d(MoatActivity.class.getSimpleName(), "Error decoding answer: " + response.toString());
 
-                            displayError(e, response);
-                        }
+                        displayError(e, response);
                     }
                 });
 
@@ -350,17 +343,14 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
                 moatBaseUrl + "/" + endpoint,
                 requestBody,
                 listener,
-                new Response.ErrorListener() {
-                    @Override
-                    public void onErrorResponse(VolleyError error) {
-                        mRequestInProgress = false;
-                        invalidateOptionsMenu();
-                        mProgressBar.setVisibility(View.GONE);
+                error -> {
+                    mRequestInProgress = false;
+                    invalidateOptionsMenu();
+                    mProgressBar.setVisibility(View.GONE);
 
-                        Log.d(MoatActivity.class.getSimpleName(), "Error response.");
+                    Log.d(MoatActivity.class.getSimpleName(), "Error response.");
 
-                        displayError(error, null);
-                    }
+                    displayError(error, null);
                 }
         ) {
             public String getBodyContentType() {
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
index 6380753d..f1f0fabc 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/OnboardingActivity.java
@@ -4,7 +4,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
-import android.view.View;
 
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
@@ -52,12 +51,7 @@ public class OnboardingActivity extends AppIntro {
 
             cs2 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
             cs2.setTitle(getString(R.string.bridges_sometimes));
-            cs2.showButton(getString(R.string.action_more), new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    startActivity(new Intent(OnboardingActivity.this, BridgeWizardActivity.class));
-                }
-            });
+            cs2.showButton(getString(R.string.action_more), v -> startActivity(new Intent(OnboardingActivity.this, BridgeWizardActivity.class)));
             addSlide(cs2);
 
             if (PermissionManager.isLollipopOrHigher()) {
@@ -65,12 +59,7 @@ public class OnboardingActivity extends AppIntro {
                 cs3 = CustomSlideBigText.newInstance(R.layout.custom_slide_big_text);
                 cs3.setTitle(getString(R.string.vpn_setup));
                 cs3.setSubTitle(getString(R.string.vpn_setup_sub));
-                cs3.showButton(getString(R.string.action_vpn_choose), new View.OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        startActivityForResult(new Intent(OnboardingActivity.this, AppManagerActivity.class), 9999);
-                    }
-                });
+                cs3.showButton(getString(R.string.action_vpn_choose), v -> startActivityForResult(new Intent(OnboardingActivity.this, AppManagerActivity.class), 9999));
                 addSlide(cs3);
 
             }
diff --git a/orbotservice/src/androidTest/java/org/torproject/android/service/ApplicationTest.java b/orbotservice/src/androidTest/java/org/torproject/android/service/ApplicationTest.java
deleted file mode 100644
index 70ee563e..00000000
--- a/orbotservice/src/androidTest/java/org/torproject/android/service/ApplicationTest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.torproject.android.service;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
- */
-public class ApplicationTest extends ApplicationTestCase<Application> {
-    public ApplicationTest() {
-        super(Application.class);
-    }
-}
\ No newline at end of file
diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
index d2d0eb67..294259a5 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java
@@ -452,13 +452,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
 
     private void stopTor ()
     {
-        new Thread(new Runnable ()
-        {
-            public void run ()
-            {
-                stopTorAsync();
-            }
-        }).start();
+        new Thread(() -> stopTorAsync()).start();
 
     }
 
@@ -589,21 +583,17 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb
 
             pluggableTransportInstall();
 
-            new Thread(new Runnable ()
-            {
-                public void run ()
+            new Thread(() -> {
+                try
                 {
-                    try
-                    {
-                        findExistingTorDaemon();
-                    }
-                    catch (Exception e)
-                    {
-                        Log.e(OrbotConstants.TAG,"error onBind",e);
-                        logNotice("error finding exiting process: " + e.toString());
-                    }
-                    
+                    findExistingTorDaemon();
                 }
+                catch (Exception e)
+                {
+                    Log.e(OrbotConstants.TAG,"error onBind",e);
+                    logNotice("error finding exiting process: " + e.toString());
+                }
+
             }).start();
 
             try {
diff --git a/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java b/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java
index d8f50d19..ce7a6633 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/TorEventHandler.java
@@ -6,7 +6,6 @@ import net.freehaven.tor.control.EventHandler;
 
 import org.torproject.android.service.util.ExternalIPFetcher;
 import org.torproject.android.service.util.Prefs;
-import org.w3c.dom.Text;
 
 import java.text.NumberFormat;
 import java.util.HashMap;
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/ExternalIPFetcher.java b/orbotservice/src/main/java/org/torproject/android/service/util/ExternalIPFetcher.java
index 698f02af..aa176b2c 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/ExternalIPFetcher.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/ExternalIPFetcher.java
@@ -2,7 +2,6 @@ package org.torproject.android.service.util;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
-import org.torproject.android.service.OrbotService;
 import org.torproject.android.service.TorEventHandler;
 import org.torproject.android.service.OrbotService;
 
diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/TorServiceUtils.java b/orbotservice/src/main/java/org/torproject/android/service/util/TorServiceUtils.java
index 018d7e42..2efe5a9f 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/util/TorServiceUtils.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/util/TorServiceUtils.java
@@ -2,9 +2,6 @@
 /* See LICENSE for licensing information */
 package org.torproject.android.service.util;
 
-import android.content.Context;
-import android.content.SharedPreferences;
-import org.torproject.android.service.OrbotConstants;
 import org.torproject.android.service.TorServiceConstants;
 
 import java.net.ConnectException;
diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/VpnUtils.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/VpnUtils.java
index 3be8fe4a..68841fda 100644
--- a/orbotservice/src/main/java/org/torproject/android/service/vpn/VpnUtils.java
+++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/VpnUtils.java
@@ -1,6 +1,5 @@
 package org.torproject.android.service.vpn;
 
-import android.app.ActivityManager;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.util.Log;
@@ -13,9 +12,7 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.List;
 
-import static android.content.Context.ACTIVITY_SERVICE;
 import static java.lang.Runtime.getRuntime;
-import static org.torproject.android.service.vpn.VpnConstants.SHELL_CMD_PS;
 import static org.torproject.android.service.vpn.VpnPrefs.PREF_TOR_SHARED_PREFS;
 
 public class VpnUtils {





More information about the tor-commits mailing list