]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java
Add a requests activity. https://redmine.stoutner.com/issues/170
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / helpers / OrbotProxyHelper.java
index ef49afe1f9fc331da9f160050460aff800451ba7..f02c00f698d9b9290773a9257bb5ecbe9996c459 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2016-2017 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2016-2018 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
  *
@@ -19,6 +19,7 @@
 
 package com.stoutner.privacybrowser.helpers;
 
+import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -48,21 +49,27 @@ public class OrbotProxyHelper {
         // Use reflection to apply the new proxy values.
         try {
             Class applicationClass = Class.forName("android.app.Application");
-            Field mLoadedApkField = applicationClass.getDeclaredField("mLoadedApk");
-            // `setAccessible(true)` allows us to change the value of `mLoadedApkField`.
+
+            // Suppress the lint warning that `mLoadedApk` cannot be resolved.
+            @SuppressWarnings("JavaReflectionMemberAccess") Field mLoadedApkField = applicationClass.getDeclaredField("mLoadedApk");
+
+            // `setAccessible(true)` allows the value of `mLoadedApkField` to be changed..
             mLoadedApkField.setAccessible(true);
             Object mLoadedApkObject = mLoadedApkField.get(privacyBrowserContext);
 
-            Class loadedApkClass = Class.forName("android.app.LoadedApk");
+            // Suppress the lint warning that reflection may not always work in the future and on all devices.
+            @SuppressLint("PrivateApi") Class loadedApkClass = Class.forName("android.app.LoadedApk");
             Field mReceiversField = loadedApkClass.getDeclaredField("mReceivers");
-            // `setAccessible(true)` allows us to change the value of `mReceiversField`.
+
+            // `setAccessible(true)` allows the value of `mReceiversField` to be changed.
             mReceiversField.setAccessible(true);
 
             ArrayMap receivers = (ArrayMap) mReceiversField.get(mLoadedApkObject);
 
             for (Object receiverMap : receivers.values()) {
                 for (Object receiver : ((ArrayMap) receiverMap).keySet()) {
-                    // We have to use `Class<?>`, which is an `unbounded wildcard parameterized type`, instead of `Class`, which is a `raw type`, or `receiveClass.getDeclaredMethod` below will produce an error.
+                    // `Class<?>`, which is an `unbounded wildcard parameterized type`, must be used instead of `Class`, which is a `raw type`.
+                    // Otherwise, `receiveClass.getDeclaredMethod` below will produce an error.
                     Class<?> receiverClass = receiver.getClass();
                     if (receiverClass.getName().contains("ProxyChangeListener")) {
                         Method onReceiveMethod = receiverClass.getDeclaredMethod("onReceive", Context.class, Intent.class);
@@ -109,11 +116,8 @@ public class OrbotProxyHelper {
                 dialogBuilder.setMessage(R.string.orbot_proxy_not_installed);
 
                 // Set the positive button.
-                dialogBuilder.setPositiveButton(R.string.close, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        // Do nothing.  The `AlertDialog` will close automatically.
-                    }
+                dialogBuilder.setPositiveButton(R.string.close, (DialogInterface dialog, int which) -> {
+                    // Do nothing.  The `AlertDialog` will close automatically.
                 });
 
                 // Convert `dialogBuilder` to `alertDialog`.