diff --git a/.travis.yml b/.travis.yml
index b31175c1..52c7ec63 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,6 +13,7 @@ env:
- secure: "em+bEb3nWLV7f+Dt4y9/OH2Lpf6mscT9E52kXhSEm/PiFpTtzlx7BgHGlpsYVwsMf0e7x2AdF/yzq4c7ugoMqWmFXMthgFUKcLTXqW/IeARGz3smMXnyScRoaFElDm0Q33fxiqDlU7UVA4j1FysR5GqTU10MasJgGpoyTthRQvra0LU8zwI4IMiASfa8Tij5LclsbaTpcgB4TdXtBmbpKQAUzjvV/ZfLsYQ950C0rbVKk9T1xtc8d5BTbggwHWbMMqGn6RFvSCQioeI/Q6Daak6zDglUY+JE/1BnzlGzoba9C7TLZV4+TQkmB5kc6FtKqSXycjwJSKm3wQFYOzJrLMPqMtlmaAeTEs5yBIYtIIAiID+hbeUKvWTpoUxwUYz7s7XLikJRdxe7iBlhdy3qv+FdGOJjV9g/xeSVXISvXzcKp2sNdU+FABBBDAA2CKWrZOXuzPAh8iYxLnt649hQFAw99ylkn75+LpJgq7gRUO87Fde0Zw3vYhLIS8UH3OBtggV1yrYHuKXWUyfkiA/xcm+NSFgIXJzGvYlOZWS+uZvXeh7wJz5CF0t3m6emBoqX6JAXQ/t9SgwGX8lwbLPK3HiYBnTMEDxb6qpIiYa8E8tfudA1YNyeszG8mZtiErJf9YleagACuASwPFsLb8Bg9BNJX5X89+VrbzPbncZD9Tc="
before_install:
+ - yes | sdkmanager "platforms;android-27"
- echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-
addons:
diff --git a/app/build.gradle b/app/build.gradle
index c938acf5..e83fc8b0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -17,20 +17,19 @@ sonarqube {
android {
compileSdkVersion 27
buildToolsVersion '27.0.2'
- useLibrary 'org.apache.http.legacy'
defaultConfig {
minSdkVersion 14
targetSdkVersion 27
- versionCode 53
- versionName "2.2.4"
+ versionCode 54
+ versionName "2.2.6"
applicationId "com.aaronjwood.portauthority"
setProperty("archivesBaseName", "PortAuthority-$versionName")
}
compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_7
- targetCompatibility JavaVersion.VERSION_1_7
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
@@ -68,6 +67,7 @@ android {
dependencies {
compile 'com.android.support:support-v4:27.0.2'
compile 'com.android.support:appcompat-v7:27.0.2'
+ compile 'com.squareup.okhttp3:okhttp:3.9.1'
compile 'jcifs:jcifs:1.3.17'
compile 'dnsjava:dnsjava:2.1.7'
//This does absolutely nothing
diff --git a/app/proguard.pro b/app/proguard.pro
index 34183354..26ef9e2c 100644
--- a/app/proguard.pro
+++ b/app/proguard.pro
@@ -2,4 +2,10 @@
-dontwarn org.xbill.DNS.spi.DNSJavaNameServiceDescriptor
-keep class org.xbill.** { *; }
-keepattributes EnclosingMethod
--keepattributes InnerClasses
\ No newline at end of file
+-keepattributes InnerClasses
+
+-dontwarn okhttp3.**
+-dontwarn okio.**
+-dontwarn javax.annotation.**
+# A resource is loaded with a relative path so the package of this class must be preserved.
+-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c4afc32f..6f79851c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,6 +8,7 @@
hosts = Collections.synchronizedList(new ArrayList());
@@ -85,6 +83,25 @@ public final class MainActivity extends AppCompatActivity implements MainAsyncRe
private DownloadAsyncTask portTask;
private boolean sortAscending;
+ private BroadcastReceiver receiver = new BroadcastReceiver() {
+
+ /**
+ * Detect if a network connection has been lost or established
+ * @param context
+ * @param intent
+ */
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
+ if (info == null) {
+ return;
+ }
+
+ getNetworkInfo(info);
+ }
+
+ };
+
/**
* Activity created
*
@@ -94,10 +111,6 @@ public final class MainActivity extends AppCompatActivity implements MainAsyncRe
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (BuildConfig.DEBUG) {
- LeakCanary.install(getApplication());
- }
-
setContentView(R.layout.activity_main);
internalIp = findViewById(R.id.internalIpAddress);
@@ -117,8 +130,9 @@ protected void onCreate(Bundle savedInstanceState) {
setupHostsAdapter();
setupDrawer();
- setupReceivers();
setupHostDiscovery();
+
+ intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
}
/**
@@ -214,18 +228,20 @@ private void setupHostDiscovery() {
*/
@Override
public void onClick(View v) {
+ Resources resources = getResources();
+ Context context = getApplicationContext();
try {
if (!wifi.isEnabled()) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.wifiDisabled));
+ Errors.showError(context, resources.getString(R.string.wifiDisabled));
return;
}
if (!wifi.isConnectedWifi()) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.notConnectedWifi));
+ Errors.showError(context, resources.getString(R.string.notConnectedWifi));
return;
}
} catch (Wireless.NoWifiManagerException | Wireless.NoConnectivityManagerException e) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.failedWifiManager));
+ Errors.showError(context, resources.getString(R.string.failedWifiManager));
return;
}
@@ -233,7 +249,7 @@ public void onClick(View v) {
try {
numSubnetHosts = wifi.getNumberOfHostsInWifiSubnet();
} catch (Wireless.NoWifiManagerException e) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.failedSubnetHosts));
+ Errors.showError(context, resources.getString(R.string.failedSubnetHosts));
return;
}
@@ -245,8 +261,8 @@ public void onClick(View v) {
scanProgressDialog = new ProgressDialog(MainActivity.this, R.style.DialogTheme);
scanProgressDialog.setCancelable(false);
- scanProgressDialog.setTitle(getResources().getString(R.string.hostScan));
- scanProgressDialog.setMessage(String.format(getResources().getString(R.string.subnetHosts), numSubnetHosts));
+ scanProgressDialog.setTitle(resources.getString(R.string.hostScan));
+ scanProgressDialog.setMessage(String.format(resources.getString(R.string.subnetHosts), numSubnetHosts));
scanProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
scanProgressDialog.setProgress(0);
scanProgressDialog.setMax(numSubnetHosts);
@@ -254,11 +270,11 @@ public void onClick(View v) {
try {
Integer ip = wifi.getInternalWifiIpAddress(Integer.class);
- new ScanHostsAsyncTask(MainActivity.this, db).execute(ip, wifi.getInternalWifiSubnet(), UserPreference.getHostSocketTimeout(getApplicationContext()));
+ new ScanHostsAsyncTask(MainActivity.this, db).execute(ip, wifi.getInternalWifiSubnet(), UserPreference.getHostSocketTimeout(context));
discoverHostsBtn.setAlpha(.3f);
discoverHostsBtn.setEnabled(false);
} catch (UnknownHostException | Wireless.NoWifiManagerException e) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.notConnectedWifi));
+ Errors.showError(context, resources.getString(R.string.notConnectedWifi));
}
}
});
@@ -384,33 +400,6 @@ private void setClip(CharSequence label, String text) {
}
}
- /**
- * Sets up and registers receivers
- */
- private void setupReceivers() {
- receiver = new BroadcastReceiver() {
-
- /**
- * Detect if a network connection has been lost or established
- * @param context
- * @param intent
- */
- @Override
- public void onReceive(Context context, Intent intent) {
- NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
- if (info == null) {
- return;
- }
-
- getNetworkInfo(info);
- }
-
- };
-
- intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
- registerReceiver(receiver, intentFilter);
- }
-
/**
* Gets network information about the device and updates various UI elements
*/
@@ -418,6 +407,8 @@ private void getNetworkInfo(NetworkInfo info) {
setupMac();
getExternalIp();
+ final Resources resources = getResources();
+ final Context context = getApplicationContext();
try {
boolean enabled = wifi.isEnabled();
if (!info.isConnected() || !enabled) {
@@ -433,7 +424,7 @@ private void getNetworkInfo(NetworkInfo info) {
return;
}
} catch (Wireless.NoWifiManagerException e) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.failedWifiManager));
+ Errors.showError(context, resources.getString(R.string.failedWifiManager));
}
if (!info.isConnected()) {
@@ -452,17 +443,17 @@ public void run() {
try {
speed = wifi.getLinkSpeed();
} catch (Wireless.NoWifiManagerException e) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.failedLinkSpeed));
+ Errors.showError(context, resources.getString(R.string.failedLinkSpeed));
return;
}
try {
signal = wifi.getSignalStrength();
} catch (Wireless.NoWifiManagerException e) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.failedSignal));
+ Errors.showError(context, resources.getString(R.string.failedSignal));
return;
}
- signalStrength.setText(String.format(getResources().getString(R.string.signalLink), signal, speed));
+ signalStrength.setText(String.format(resources.getString(R.string.signalLink), signal, speed));
signalHandler.postDelayed(this, TIMER_INTERVAL);
}
}, 0);
@@ -474,13 +465,13 @@ public void run() {
try {
wifiSsid = wifi.getSSID();
} catch (Wireless.NoWifiManagerException e) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.failedSsid));
+ Errors.showError(context, resources.getString(R.string.failedSsid));
return;
}
try {
wifiBssid = wifi.getBSSID();
} catch (Wireless.NoWifiManagerException e) {
- Errors.showError(getApplicationContext(), getResources().getString(R.string.failedBssid));
+ Errors.showError(context, resources.getString(R.string.failedBssid));
return;
}
@@ -604,6 +595,9 @@ private void getExternalIp() {
public void onPause() {
super.onPause();
+ unregisterReceiver(receiver);
+ signalHandler.removeCallbacksAndMessages(null);
+
if (scanProgressDialog != null) {
scanProgressDialog.dismiss();
}
@@ -622,25 +616,11 @@ public void onPause() {
}
/**
- * Activity destroyed
- */
- @Override
- public void onDestroy() {
- super.onDestroy();
-
- signalHandler.removeCallbacksAndMessages(null);
-
- if (receiver != null) {
- unregisterReceiver(receiver);
- }
- }
-
- /**
- * Activity restarted
+ * Activity resumed.
*/
@Override
- public void onRestart() {
- super.onRestart();
+ public void onResume() {
+ super.onResume();
registerReceiver(receiver, intentFilter);
}
@@ -700,8 +680,8 @@ public void run() {
@Override
public int compare(Host lhs, Host rhs) {
try {
- int leftIp = new BigInteger(InetAddress.getByName(lhs.getIp()).getAddress()).intValue();
- int rightIp = new BigInteger(InetAddress.getByName(rhs.getIp()).getAddress()).intValue();
+ int leftIp = ByteBuffer.wrap(InetAddress.getByName(lhs.getIp()).getAddress()).getInt();
+ int rightIp = ByteBuffer.wrap(InetAddress.getByName(rhs.getIp()).getAddress()).getInt();
return leftIp - rightIp;
} catch (UnknownHostException ignored) {
diff --git a/app/src/main/java/com/aaronjwood/portauthority/async/WanIpAsyncTask.java b/app/src/main/java/com/aaronjwood/portauthority/async/WanIpAsyncTask.java
index 4cbe571f..123002b9 100644
--- a/app/src/main/java/com/aaronjwood/portauthority/async/WanIpAsyncTask.java
+++ b/app/src/main/java/com/aaronjwood/portauthority/async/WanIpAsyncTask.java
@@ -1,20 +1,17 @@
package com.aaronjwood.portauthority.async;
+import android.annotation.SuppressLint;
import android.os.AsyncTask;
import com.aaronjwood.portauthority.response.MainAsyncResponse;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.util.EntityUtils;
-
import java.io.IOException;
import java.lang.ref.WeakReference;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.Response;
+
public class WanIpAsyncTask extends AsyncTask {
// IP service is 100% open source https://github.com/aaronjwood/public-ip-api
@@ -37,20 +34,18 @@ public WanIpAsyncTask(MainAsyncResponse delegate) {
* @return External IP address
*/
@Override
+ @SuppressLint("NewApi")
protected String doInBackground(Void... params) {
String error = "Couldn't get your external IP";
- HttpClient httpclient = new DefaultHttpClient();
- HttpGet httpget = new HttpGet(EXTERNAL_IP_SERVICE);
+ OkHttpClient httpClient = new OkHttpClient();
+ Request request = new Request.Builder().url(EXTERNAL_IP_SERVICE).build();
- try {
- HttpResponse response = httpclient.execute(httpget);
- if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+ try (Response response = httpClient.newCall(request).execute()) {
+ if (!response.isSuccessful()) {
return error;
}
- return EntityUtils.toString(response.getEntity()).trim();
- } catch (ClientProtocolException e) {
- return error;
+ return response.body().string().trim();
} catch (IOException e) {
return error;
}