
commit c1fdff654b82d76c2abac479e7fa35542123ba2a Author: bim <dsnake@protonmail.com> Date: Sat Aug 7 20:47:07 2021 -0400 Package name is saved for torified apps instead of "username". This is much more performant than the last commit, but the UI will not immediately be updated if the user had older Orbot data saved (No "torification" is actually compromised though...) --- .../org/torproject/android/OrbotMainActivity.java | 30 ++++++++++++---------- .../torproject/android/ui/AppManagerActivity.java | 6 ++--- .../android/service/vpn/TorifiedApp.java | 2 +- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/torproject/android/OrbotMainActivity.java b/app/src/main/java/org/torproject/android/OrbotMainActivity.java index 0869d140..a54cbe0f 100644 --- a/app/src/main/java/org/torproject/android/OrbotMainActivity.java +++ b/app/src/main/java/org/torproject/android/OrbotMainActivity.java @@ -87,9 +87,12 @@ import java.net.URLDecoder; import java.text.NumberFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.StringTokenizer; +import java.util.TreeMap; import java.util.stream.Collectors; import pl.bclogic.pulsator4droid.library.PulsatorLayout; @@ -1115,35 +1118,36 @@ public class OrbotMainActivity extends AppCompatActivity implements OrbotConstan drawFullDeviceVpn(); } else { PackageManager packageManager = getPackageManager(); + String[] tordApps = tordAppString.split("\\|"); + LinearLayout container = (LinearLayout) llBoxShortcuts.getChildAt(0); tvVpnAppStatus.setVisibility(View.GONE); llBoxShortcuts.setVisibility(View.VISIBLE); - LinearLayout container = (LinearLayout) llBoxShortcuts.getChildAt(0); container.removeAllViews(); - List<TorifiedApp> apps = TorifiedApp.getApps(this, mPrefs); - TorifiedApp.sortAppsForTorifiedAndAbc(apps); - int appsAdded = 0; - - for (TorifiedApp app : apps) { - if (!app.isTorified()) break; + Map<String, ImageView> icons = new TreeMap<>(); + for (String tordApp : tordApps) { try { - String pkgId = app.getPackageName(); + packageManager.getPackageInfo(tordApp, 0); ImageView iv = new ImageView(this); + ApplicationInfo applicationInfo = packageManager.getApplicationInfo(tordApp, 0); + iv.setImageDrawable(packageManager.getApplicationIcon(tordApp)); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins(3, 3, 3, 3); iv.setLayoutParams(params); - iv.setImageDrawable(packageManager.getApplicationIcon(pkgId)); - iv.setOnClickListener(v -> openBrowser(URL_TOR_CHECK, false, pkgId)); - container.addView(iv); - appsAdded++; + iv.setOnClickListener(v -> openBrowser(URL_TOR_CHECK, false, tordApp)); + icons.put(packageManager.getApplicationLabel(applicationInfo).toString(), iv); + } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } - if (appsAdded == 0) { + if (icons.size() == 0) { /* if a user uninstalled or disabled all apps that were set on the device then we want to have the no apps added view appear even though the tordAppString variable is not empty */ drawFullDeviceVpn(); + } else { + TreeMap<String, ImageView> sorted = new TreeMap<>(icons); + for (ImageView iv : sorted.values()) container.addView(iv); } } 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 ccc6aa97..156ccfce 100644 --- a/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java +++ b/app/src/main/java/org/torproject/android/ui/AppManagerActivity.java @@ -248,7 +248,7 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList // check if this application is allowed - if (Arrays.binarySearch(tordApps, app.getUsername()) >= 0) { + if (Arrays.binarySearch(tordApps, app.getPackageName()) >= 0) { app.setTorified(true); } else { app.setTorified(false); @@ -268,9 +268,9 @@ public class AppManagerActivity extends AppCompatActivity implements OnClickList for (TorifiedApp tApp : mApps) { if (tApp.isTorified()) { - tordApps.append(tApp.getUsername()); + tordApps.append(tApp.getPackageName()); tordApps.append("|"); - response.putExtra(tApp.getUsername(), true); + response.putExtra(tApp.getPackageName(), true); } } diff --git a/orbotservice/src/main/java/org/torproject/android/service/vpn/TorifiedApp.java b/orbotservice/src/main/java/org/torproject/android/service/vpn/TorifiedApp.java index dedf743e..2eabaa76 100644 --- a/orbotservice/src/main/java/org/torproject/android/service/vpn/TorifiedApp.java +++ b/orbotservice/src/main/java/org/torproject/android/service/vpn/TorifiedApp.java @@ -112,7 +112,7 @@ public class TorifiedApp implements Comparable { //app.setIcon(pMgr.getApplicationIcon(aInfo)); // check if this application is allowed - if (Arrays.binarySearch(tordApps, app.getUsername()) >= 0) { + if (Arrays.binarySearch(tordApps, app.getPackageName()) >= 0) { app.setTorified(true); } else { app.setTorified(false);