From e9fed41efbdae48415913a44536f6ddbeffb5f31 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 17 Aug 2022 00:02:07 +0200 Subject: [PATCH] Fix PackageManager deprecations Closes #225 --- .../emanuelef/remote_capture/AppsLoader.java | 6 +--- .../remote_capture/AppsResolver.java | 11 ++----- .../remote_capture/CaptureService.java | 2 +- .../emanuelef/remote_capture/MitmAddon.java | 11 ++----- .../com/emanuelef/remote_capture/Utils.java | 33 +++++++++++++++++-- .../activities/MainActivity.java | 7 ++-- .../activities/SettingsActivity.java | 1 + .../fragments/ConnectionsFragment.java | 5 +-- 8 files changed, 44 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/emanuelef/remote_capture/AppsLoader.java b/app/src/main/java/com/emanuelef/remote_capture/AppsLoader.java index e23b3dbf..5291cf21 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/AppsLoader.java +++ b/app/src/main/java/com/emanuelef/remote_capture/AppsLoader.java @@ -62,11 +62,7 @@ public class AppsLoader implements LoaderManager.LoaderCallbacks uids = new ArraySet<>(); Log.d(TAG, "Loading APPs..."); - List packs; - if (android.os.Build.VERSION.SDK_INT >= 33) - packs = pm.getInstalledPackages(PackageManager.PackageInfoFlags.of(0)); - else - packs = pm.getInstalledPackages(0); + List packs = Utils.getInstalledPackages(pm, 0); String app_package = mContext.getApplicationContext().getPackageName(); diff --git a/app/src/main/java/com/emanuelef/remote_capture/AppsResolver.java b/app/src/main/java/com/emanuelef/remote_capture/AppsResolver.java index 31a7cb3f..8e6bd5f2 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/AppsResolver.java +++ b/app/src/main/java/com/emanuelef/remote_capture/AppsResolver.java @@ -21,11 +21,9 @@ package com.emanuelef.remote_capture; import android.annotation.SuppressLint; import android.content.Context; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; -import android.os.Build; import android.util.Log; import android.util.SparseArray; @@ -98,7 +96,7 @@ public class AppsResolver { PackageInfo pinfo; try { - pinfo = pm.getPackageInfo(packageName, pm_flags); + pinfo = Utils.getPackageInfo(pm, packageName, pm_flags); } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, "could not retrieve package: " + packageName); return null; @@ -183,12 +181,7 @@ public class AppsResolver { } } else { try { - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - return mPm.getPackageUid(package_name, 0); - } else { - ApplicationInfo info = mPm.getApplicationInfo(package_name, 0); - return info.uid; - } + return Utils.getPackageUid(mPm, package_name, 0); } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, "Could not retrieve package " + package_name); //e.printStackTrace(); diff --git a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java index 548d28a5..b9d526b5 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java +++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java @@ -365,7 +365,7 @@ public class CaptureService extends VpnService implements Runnable { if ((mSettings.app_filter != null) && (!mSettings.app_filter.isEmpty())) { try { - app_filter_uid = getPackageManager().getApplicationInfo(mSettings.app_filter, 0).uid; + app_filter_uid = Utils.getPackageUid(getPackageManager(), mSettings.app_filter, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); app_filter_uid = -1; diff --git a/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java b/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java index ae0f1a3c..4c4cec28 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java +++ b/app/src/main/java/com/emanuelef/remote_capture/MitmAddon.java @@ -24,7 +24,6 @@ import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.SharedPreferences; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; @@ -103,7 +102,7 @@ public class MitmAddon { public static long getInstalledVersion(Context ctx) { try { - PackageInfo pInfo = ctx.getPackageManager().getPackageInfo(MitmAPI.PACKAGE_NAME, 0); + PackageInfo pInfo = Utils.getPackageInfo(ctx.getPackageManager(), MitmAPI.PACKAGE_NAME, 0); return PackageInfoCompat.getLongVersionCode(pInfo); } catch (PackageManager.NameNotFoundException e) { return -1; @@ -111,14 +110,8 @@ public class MitmAddon { } public static int getUid(Context ctx) { - PackageManager pm = ctx.getPackageManager(); - try { - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - return pm.getPackageUid(MitmAPI.PACKAGE_NAME, 0); - } else { - return pm.getApplicationInfo(MitmAPI.PACKAGE_NAME, 0).uid; - } + return Utils.getPackageUid(ctx.getPackageManager(), MitmAPI.PACKAGE_NAME, 0); } catch (PackageManager.NameNotFoundException e) { return -1; } diff --git a/app/src/main/java/com/emanuelef/remote_capture/Utils.java b/app/src/main/java/com/emanuelef/remote_capture/Utils.java index 44e0a32f..552dde13 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Utils.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Utils.java @@ -707,7 +707,7 @@ public class Utils { String appver; try { - PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + PackageInfo pInfo = Utils.getPackageInfo(context.getPackageManager(), context.getPackageName(), 0); String version = pInfo.versionName; boolean isRelease = version.contains("."); @@ -1082,11 +1082,11 @@ public class Utils { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { // NOTE: PCAPdroid does not use multiple signatures - PackageInfo pInfo = ctx.getPackageManager().getPackageInfo(package_name, PackageManager.GET_SIGNING_CERTIFICATES); + PackageInfo pInfo = Utils.getPackageInfo(ctx.getPackageManager(), package_name, PackageManager.GET_SIGNING_CERTIFICATES); signatures = (pInfo.signingInfo == null) ? null : pInfo.signingInfo.getSigningCertificateHistory(); } else { @SuppressLint("PackageManagerGetSignatures") - PackageInfo pInfo = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), PackageManager.GET_SIGNATURES); + PackageInfo pInfo = Utils.getPackageInfo(ctx.getPackageManager(), package_name, PackageManager.GET_SIGNATURES); signatures = pInfo.signatures; } @@ -1402,4 +1402,31 @@ public class Utils { } } } + + @SuppressWarnings({"deprecation"}) + public static PackageInfo getPackageInfo(PackageManager pm, String package_name, int flags) throws PackageManager.NameNotFoundException { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) + return pm.getPackageInfo(package_name, PackageManager.PackageInfoFlags.of(flags)); + else + return pm.getPackageInfo(package_name, flags); + } + + @SuppressWarnings({"deprecation"}) + public static int getPackageUid(PackageManager pm, String package_name, int flags) throws PackageManager.NameNotFoundException { + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) + return pm.getPackageUid(package_name, PackageManager.PackageInfoFlags.of(flags)); + else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + return pm.getPackageUid(package_name, 0); + else + return pm.getApplicationInfo(package_name, 0).uid; + } + + @SuppressLint({"QueryPermissionsNeeded"}) + @SuppressWarnings({"deprecation"}) + public static List getInstalledPackages(PackageManager pm, int flags) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) + return pm.getInstalledPackages(PackageManager.PackageInfoFlags.of(flags)); + else + return pm.getInstalledPackages(flags); + } } diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java index b3d11709..3d4d0cbd 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java @@ -41,6 +41,7 @@ import androidx.annotation.RequiresApi; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; +import androidx.core.content.pm.PackageInfoCompat; import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; @@ -341,7 +342,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig } PackageInfo pInfo = peer.getPackageInfo(); - if((pInfo == null) || (pInfo.versionCode < 56)) { + if((pInfo == null) || (PackageInfoCompat.getLongVersionCode(pInfo) < 56)) { Log.d(TAG, "Unsupported peer app version found"); return; } @@ -353,7 +354,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig return; } - Log.d(TAG, "Valid peer app found (" + pInfo.versionName + " - " + pInfo.versionCode + ")"); + Log.d(TAG, "Valid peer app found (" + pInfo.versionName + " - " + PackageInfoCompat.getLongVersionCode(pInfo) + ")"); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setClassName(peerAppPackage, "com.emanuelef.remote_capture.activities.CaptureCtrl"); intent.putExtra("action", "get_peer_info"); @@ -577,7 +578,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig Intent intent; try { - getPackageManager().getPackageInfo("org.telegram.messenger", 0); + Utils.getPackageInfo(getPackageManager(), "org.telegram.messenger", 0); // Open directly into the telegram app intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tg://resolve?domain=" + TELEGRAM_GROUP_NAME)); diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java index 919fa40a..2335dd3b 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/SettingsActivity.java @@ -195,6 +195,7 @@ public class SettingsActivity extends BaseActivity implements PreferenceFragment } } + @SuppressWarnings("deprecation") private boolean validateIp(String value) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) return (InetAddresses.isNumericAddress(value)); diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java index ca3d361d..dc0a0f29 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java @@ -186,9 +186,10 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener mEmptyText = view.findViewById(R.id.no_connections); mActiveFilter = view.findViewById(R.id.active_filter); - mActiveFilter.setOnCheckedChangeListener((group, checkedId) -> { + mActiveFilter.setOnCheckedStateChangeListener((group, checkedIds) -> { if(mAdapter != null) { - mAdapter.mFilter.clear(checkedId); + for(int checkedId: checkedIds) + mAdapter.mFilter.clear(checkedId); refreshFilteredConnections(); } });