diff --git a/app/src/main/java/com/emanuelef/remote_capture/Billing.java b/app/src/main/java/com/emanuelef/remote_capture/Billing.java index 5f8cb598..18881ef0 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Billing.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Billing.java @@ -42,12 +42,14 @@ import java.security.spec.X509EncodedKeySpec; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Set; /* Billing stub */ public class Billing { private static final String TAG = "Billing"; private static final String KEY = "ME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6cS1N1P0kaiuxq0g70OVVE0uIOD+t809" + "Etg3k2h11k8uNvfkx3mL1HTjQyzSfdueyY4DqTW7+sk="; + private static final String PEER_SKU_KEY = "peer_skus"; // SKUs public static final String SUPPORTER_SKU = "pcapdroid_supporter"; @@ -79,6 +81,11 @@ public class Billing { protected Billing(Context ctx) { mContext = ctx; mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx); + + // Load peer skus + Set peer_skus = mPrefs.getStringSet(PEER_SKU_KEY, null); + if(peer_skus != null) + mPeerSkus.addAll(peer_skus); } public static Billing newInstance(Context ctx) { @@ -198,7 +205,21 @@ public class Billing { return !Prefs.isRootCaptureEnabled(mPrefs); } - public void addPeerSku(String sku) { - mPeerSkus.add(sku); + public void handlePeerSkus(Set skus) { + if(skus.equals(mPeerSkus)) + return; // nothing changed + + mPeerSkus.clear(); + mPeerSkus.addAll(skus); + + Log.i(TAG, "Peer skus updated: " + skus); + + mPrefs.edit() + .putStringSet(PEER_SKU_KEY, mPeerSkus) + .apply(); + } + + public void clearPeerSkus() { + handlePeerSkus(new HashSet<>()); } } 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 b2e034ca..10dfa8ae 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 @@ -318,12 +318,14 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig AppDescriptor peer = AppsResolver.resolve(getPackageManager(), peerAppPackage, 0); if(peer == null) { Log.d(TAG, "Peer app not found"); + mIab.clearPeerSkus(); return; } PackageInfo pInfo = peer.getPackageInfo(); if((pInfo == null) || (PackageInfoCompat.getLongVersionCode(pInfo) < 56)) { Log.d(TAG, "Unsupported peer app version found"); + mIab.clearPeerSkus(); return; } @@ -331,6 +333,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig Utils.BuildType buildType = Utils.getVerifiedBuild(this, peerAppPackage); if((buildType != Utils.BuildType.FDROID) && (buildType != Utils.BuildType.PLAYSTORE) && (buildType != Utils.BuildType.GITHUB)) { Log.d(TAG, "Unsupported peer app build: " + buildType.name()); + mIab.clearPeerSkus(); return; } @@ -343,6 +346,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig peerInfoLauncher.launch(intent); } catch (ActivityNotFoundException e) { Log.d(TAG, "Peer app launch failed"); + mIab.clearPeerSkus(); } } @@ -357,10 +361,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig if(skus != null) { Log.d(TAG, "Found peer app info"); - for(String sku: skus) { - Log.d(TAG, "Peer sku: " + sku); - mIab.addPeerSku(sku); - } + mIab.handlePeerSkus(skus); // success return; @@ -370,6 +371,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig // fail Log.d(TAG, "Invalid peer app result"); + mIab.clearPeerSkus(); } private static class MainStateAdapter extends FragmentStateAdapter { diff --git a/submodules/zdtun b/submodules/zdtun index 3ac3633d..9f59c560 160000 --- a/submodules/zdtun +++ b/submodules/zdtun @@ -1 +1 @@ -Subproject commit 3ac3633dc661511132b81efbb130779fc51aa598 +Subproject commit 9f59c560223f6c732f07c8640813fb244037ff9c