From 47d6bb095ba5bfb119c7db6d6f6bdc326e629426 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 7 Oct 2014 16:21:17 -0400 Subject: [PATCH 1/2] fix divide-by-zero crash when a repo has less than 25 apps in it This was introduced in e4401ed22c0f65db5d4f1a1f0e1222b061e471af --- src/org/fdroid/fdroid/RepoXMLHandler.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/org/fdroid/fdroid/RepoXMLHandler.java b/src/org/fdroid/fdroid/RepoXMLHandler.java index 607d3d7f6..054a115a4 100644 --- a/src/org/fdroid/fdroid/RepoXMLHandler.java +++ b/src/org/fdroid/fdroid/RepoXMLHandler.java @@ -20,6 +20,7 @@ package org.fdroid.fdroid; import android.os.Bundle; + import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.Repo; @@ -29,7 +30,8 @@ import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import java.text.ParseException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; public class RepoXMLHandler extends DefaultHandler { @@ -279,7 +281,8 @@ public class RepoXMLHandler extends DefaultHandler { } else if (localName.equals("application") && curapp == null) { curapp = new App(); curapp.id = attributes.getValue("", "id"); - if (progressCounter % (totalAppCount / 25) == 0) { + /* show progress for the first 25, then start skipping every 25 */ + if (totalAppCount < 25 || progressCounter % (totalAppCount / 25) == 0) { Bundle data = new Bundle(1); data.putString(RepoUpdater.PROGRESS_DATA_REPO_ADDRESS, repo.address); progressListener.onProgress( From 0a10e44778151df8ab9025cd24d8b67f7e04371c Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 7 Oct 2014 17:02:48 -0400 Subject: [PATCH 2/2] don't check incoming repo URI is on same wifi if device does not have wifi Fixes this crash: dalvikvm W threadid=1: thread exiting with uncaught exception (group=0xb68df4f0) AndroidRuntime E FATAL EXCEPTION: main E java.lang.RuntimeException: Unable to resume activity {org.fdroid.fdroid/org.fdroid.fdroid.views.ManageReposActivity}: java.lang.NullPointerException E at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2120) E at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2135) E at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1668) E at android.app.ActivityThread.access$1500(ActivityThread.java:117) E at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) E at android.os.Handler.dispatchMessage(Handler.java:99) E at android.os.Looper.loop(Looper.java:130) E at android.app.ActivityThread.main(ActivityThread.java:3683) E at java.lang.reflect.Method.invokeNative(Native Method) E at java.lang.reflect.Method.invoke(Method.java:507) E at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) E at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) E at dalvik.system.NativeStart.main(Native Method) E Caused by: java.lang.NullPointerException E at org.fdroid.fdroid.views.ManageReposActivity.checkIfNewRepoOnSameWifi(ManageReposActivity.java:466) E at org.fdroid.fdroid.views.ManageReposActivity.addRepoFromIntent(ManageReposActivity.java:455) E at org.fdroid.fdroid.views.ManageReposActivity.onResume(ManageReposActivity.java:144) E at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150) E at android.app.Activity.performResume(Activity.java:3832) E at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2110) E ... 12 more --- src/org/fdroid/fdroid/views/ManageReposActivity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/org/fdroid/fdroid/views/ManageReposActivity.java b/src/org/fdroid/fdroid/views/ManageReposActivity.java index 7c22c7c5d..3b4f67dcf 100644 --- a/src/org/fdroid/fdroid/views/ManageReposActivity.java +++ b/src/org/fdroid/fdroid/views/ManageReposActivity.java @@ -463,7 +463,10 @@ public class ManageReposActivity extends ActionBarActivity { if (!TextUtils.isEmpty(newRepo.getBssid())) { WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); - String bssid = wifiInfo.getBSSID().toLowerCase(Locale.ENGLISH); + String bssid = wifiInfo.getBSSID(); + if (TextUtils.isEmpty(bssid)) /* not all devices have wifi */ + return; + bssid = bssid.toLowerCase(Locale.ENGLISH); String newRepoBssid = Uri.decode(newRepo.getBssid()).toLowerCase(Locale.ENGLISH); if (!bssid.equals(newRepoBssid)) { String msg = String.format(getString(R.string.not_on_same_wifi), newRepo.getSsid());