X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fhelpers%2FOrbotProxyHelper.java;h=f02c00f698d9b9290773a9257bb5ecbe9996c459;hp=ef49afe1f9fc331da9f160050460aff800451ba7;hb=012e5595c82d6e8d0b8a46f1ef18a02a56341182;hpb=5bcf4ca90f27512b94fb7aca4fad37b4e4774655 diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java b/app/src/main/java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java index ef49afe1..f02c00f6 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java +++ b/app/src/main/java/com/stoutner/privacybrowser/helpers/OrbotProxyHelper.java @@ -1,5 +1,5 @@ /* - * Copyright © 2016-2017 Soren Stoutner . + * Copyright © 2016-2018 Soren Stoutner . * * This file is part of 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`.