@@ -54,6 +54,7 @@ public class ActivityHandler implements IActivityHandler {
54
54
private TimerOnce delayStartTimer ;
55
55
private InternalState internalState ;
56
56
private String basePath ;
57
+ private String gdprPath ;
57
58
58
59
private DeviceInfo deviceInfo ;
59
60
private AdjustConfig adjustConfig ; // always valid after construction
@@ -592,6 +593,26 @@ public void run() {
592
593
});
593
594
}
594
595
596
+ @ Override
597
+ public void gdprForgetMe () {
598
+ scheduledExecutor .submit (new Runnable () {
599
+ @ Override
600
+ public void run () {
601
+ gdprForgetMeI ();
602
+ }
603
+ });
604
+ }
605
+
606
+ @ Override
607
+ public void gotOptOutResponse () {
608
+ scheduledExecutor .submit (new Runnable () {
609
+ @ Override
610
+ public void run () {
611
+ gotOptOutResponseI ();
612
+ }
613
+ });
614
+ }
615
+
595
616
@ Override
596
617
public Context getContext () {
597
618
return adjustConfig .context ;
@@ -633,6 +654,11 @@ public String getBasePath() {
633
654
return this .basePath ;
634
655
}
635
656
657
+ @ Override
658
+ public String getGdprPath () {
659
+ return this .gdprPath ;
660
+ }
661
+
636
662
public ActivityPackage getAttributionPackageI () {
637
663
long now = System .currentTimeMillis ();
638
664
PackageBuilder attributionBuilder = new PackageBuilder (adjustConfig ,
@@ -727,6 +753,14 @@ public void run(ActivityHandler activityHandler) {
727
753
}
728
754
}
729
755
756
+ // GDPR
757
+ if (internalState .hasFirstSdkStartOcurred ()) {
758
+ SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager (getContext ());
759
+ if (sharedPreferencesManager .getGdprForgetMe ()) {
760
+ gdprForgetMe ();
761
+ }
762
+ }
763
+
730
764
foregroundTimer = new TimerCycle (
731
765
new Runnable () {
732
766
@ Override
@@ -765,6 +799,7 @@ public void run() {
765
799
UtilNetworking .setUserAgent (adjustConfig .userAgent );
766
800
767
801
this .basePath = adjustConfig .basePath ;
802
+ this .gdprPath = adjustConfig .gdprPath ;
768
803
769
804
packageHandler = AdjustFactory .getPackageHandler (this , adjustConfig .context , toSendI (false ));
770
805
@@ -780,10 +815,8 @@ public void run() {
780
815
updatePackagesI ();
781
816
}
782
817
783
- preLaunchActionsI (adjustConfig .preLaunchActionsArray );
784
-
785
818
installReferrer = new InstallReferrer (adjustConfig .context , this );
786
-
819
+ preLaunchActionsI ( adjustConfig . preLaunchActionsArray );
787
820
sendReftagReferrerI ();
788
821
}
789
822
@@ -848,13 +881,17 @@ private void startFirstSessionI() {
848
881
849
882
SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager (getContext ());
850
883
activityState .pushToken = sharedPreferencesManager .getPushToken ();
884
+ // activityState.isGdprForgotten = sharedPreferencesManager.getGdprForgetMe();
851
885
852
886
// track the first session package only if it's enabled
853
887
if (internalState .isEnabled ()) {
854
- activityState .sessionCount = 1 ; // this is the first session
855
- transferSessionPackageI (now );
856
-
857
- checkAfterNewStartI (sharedPreferencesManager );
888
+ if (!sharedPreferencesManager .getGdprForgetMe ()) {
889
+ activityState .sessionCount = 1 ; // this is the first session
890
+ transferSessionPackageI (now );
891
+ checkAfterNewStartI (sharedPreferencesManager );
892
+ } else {
893
+ gdprForgetMeI ();
894
+ }
858
895
}
859
896
860
897
activityState .resetSessionAttributes (now );
@@ -863,11 +900,16 @@ private void startFirstSessionI() {
863
900
864
901
writeActivityStateI ();
865
902
sharedPreferencesManager .removePushToken ();
903
+ sharedPreferencesManager .removeGdprForgetMe ();
866
904
867
905
// don't check attribution right after first sdk start
868
906
}
869
907
870
908
private void processSessionI () {
909
+ if (activityState .isGdprForgotten ) {
910
+ return ;
911
+ }
912
+
871
913
long now = System .currentTimeMillis ();
872
914
873
915
long lastInterval = now - activityState .lastActivity ;
@@ -951,6 +993,7 @@ private void trackEventI(AdjustEvent event) {
951
993
if (!isEnabledI ()) return ;
952
994
if (!checkEventI (event )) return ;
953
995
if (!checkOrderIdI (event .orderId )) return ;
996
+ if (activityState .isGdprForgotten ) return ;
954
997
955
998
long now = System .currentTimeMillis ();
956
999
@@ -1213,6 +1256,13 @@ private void setEnabledI(boolean enabled) {
1213
1256
return ;
1214
1257
}
1215
1258
1259
+ if (enabled ) {
1260
+ if (activityState .isGdprForgotten ) {
1261
+ logger .error ("Re-enabling SDK not possible for forgotten user" );
1262
+ return ;
1263
+ }
1264
+ }
1265
+
1216
1266
// save new enabled state in internal state
1217
1267
internalState .enabled = enabled ;
1218
1268
@@ -1224,9 +1274,16 @@ private void setEnabledI(boolean enabled) {
1224
1274
return ;
1225
1275
}
1226
1276
1277
+ activityState .enabled = enabled ;
1278
+ writeActivityStateI ();
1279
+
1227
1280
if (enabled ) {
1228
1281
SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager (getContext ());
1229
1282
1283
+ if (sharedPreferencesManager .getGdprForgetMe ()) {
1284
+ gdprForgetMeI ();
1285
+ }
1286
+
1230
1287
// check if install was tracked
1231
1288
if (!sharedPreferencesManager .getInstallTracked ()) {
1232
1289
long now = System .currentTimeMillis ();
@@ -1235,9 +1292,6 @@ private void setEnabledI(boolean enabled) {
1235
1292
checkAfterNewStartI (sharedPreferencesManager );
1236
1293
}
1237
1294
1238
- activityState .enabled = enabled ;
1239
- writeActivityStateI ();
1240
-
1241
1295
updateStatusI (!enabled ,
1242
1296
"Pausing handlers due to SDK being disabled" ,
1243
1297
"Handlers remain paused" ,
@@ -1729,6 +1783,7 @@ public void resetSessionPartnerParametersI() {
1729
1783
private void setPushTokenI (String token ) {
1730
1784
if (!checkActivityStateI (activityState )) { return ; }
1731
1785
if (!isEnabledI ()) { return ; }
1786
+ if (activityState .isGdprForgotten ) { return ; }
1732
1787
1733
1788
if (token == null ) { return ; }
1734
1789
if (token .equals (activityState .pushToken )) { return ; }
@@ -1754,6 +1809,39 @@ private void setPushTokenI(String token) {
1754
1809
}
1755
1810
}
1756
1811
1812
+ private void gdprForgetMeI () {
1813
+ if (!checkActivityStateI (activityState )) { return ; }
1814
+ if (!isEnabledI ()) { return ; }
1815
+ if (activityState .isGdprForgotten ) { return ; }
1816
+
1817
+ activityState .isGdprForgotten = true ;
1818
+ writeActivityStateI ();
1819
+
1820
+ long now = System .currentTimeMillis ();
1821
+ PackageBuilder gdprPackageBuilder = new PackageBuilder (adjustConfig , deviceInfo , activityState , sessionParameters , now );
1822
+
1823
+ ActivityPackage gdprPackage = gdprPackageBuilder .buildGdprPackage ();
1824
+ packageHandler .addPackage (gdprPackage );
1825
+
1826
+ // If GDPR choice was cached, remove it.
1827
+ SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager (getContext ());
1828
+ sharedPreferencesManager .removeGdprForgetMe ();
1829
+
1830
+ if (adjustConfig .eventBufferingEnabled ) {
1831
+ logger .info ("Buffered event %s" , gdprPackage .getSuffix ());
1832
+ } else {
1833
+ packageHandler .sendFirstPackage ();
1834
+ }
1835
+ }
1836
+
1837
+ private void gotOptOutResponseI () {
1838
+ activityState .isGdprForgotten = true ;
1839
+ writeActivityStateI ();
1840
+
1841
+ packageHandler .flush ();
1842
+ setEnabledI (false );
1843
+ }
1844
+
1757
1845
private void readActivityStateI (Context context ) {
1758
1846
try {
1759
1847
activityState = Util .readObject (context , ACTIVITY_STATE_FILENAME , ACTIVITY_STATE_NAME , ActivityState .class );
0 commit comments