CheckLicenseRoutine.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package ch.threema.app.routines;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.ReceiverCallNotAllowedException;
  5. import org.slf4j.Logger;
  6. import java.lang.ref.WeakReference;
  7. import androidx.annotation.NonNull;
  8. import androidx.localbroadcastmanager.content.LocalBroadcastManager;
  9. import ch.threema.app.BuildFlavor;
  10. import ch.threema.app.licensing.StoreLicenseCheck;
  11. import ch.threema.app.restrictions.AppRestrictions;
  12. import ch.threema.app.services.DeviceService;
  13. import ch.threema.app.services.UserService;
  14. import ch.threema.app.services.license.LicenseService;
  15. import ch.threema.app.services.license.LicenseServiceThreema;
  16. import ch.threema.app.utils.ConfigUtils;
  17. import ch.threema.app.utils.IntentDataUtil;
  18. import static ch.threema.base.utils.LoggingKt.getThreemaLogger;
  19. import ch.threema.domain.protocol.api.APIConnector;
  20. import ch.threema.domain.stores.IdentityStore;
  21. /**
  22. * Checking the License of current Threema and send a not allowed broadcast
  23. */
  24. public class CheckLicenseRoutine implements Runnable {
  25. private static final Logger logger = getThreemaLogger("CheckLicenseRoutine");
  26. @NonNull
  27. private final WeakReference<Activity> activityWeakReference;
  28. @NonNull
  29. private final APIConnector apiConnector;
  30. @NonNull
  31. private final UserService userService;
  32. @NonNull
  33. private final DeviceService deviceService;
  34. @NonNull
  35. private final LicenseService<?> licenseService;
  36. @NonNull
  37. private final IdentityStore identityStore;
  38. @NonNull
  39. private final AppRestrictions appRestrictions;
  40. public CheckLicenseRoutine(
  41. @NonNull
  42. Activity activity,
  43. @NonNull
  44. APIConnector apiConnector,
  45. @NonNull
  46. UserService userService,
  47. @NonNull
  48. DeviceService deviceService,
  49. @NonNull
  50. LicenseService<?> licenseService,
  51. @NonNull
  52. IdentityStore identityStore,
  53. @NonNull
  54. AppRestrictions appRestrictions
  55. ) {
  56. this.activityWeakReference = new WeakReference<>(activity);
  57. this.apiConnector = apiConnector;
  58. this.userService = userService;
  59. this.deviceService = deviceService;
  60. this.licenseService = licenseService;
  61. this.identityStore = identityStore;
  62. this.appRestrictions = appRestrictions;
  63. }
  64. @Override
  65. public void run() {
  66. Activity activity = activityWeakReference.get();
  67. if (activity == null) {
  68. // TODO(ANDR-4545): Report this to sentry
  69. logger.error("Could not check license");
  70. return;
  71. }
  72. switch (BuildFlavor.getCurrent().getLicenseType()) {
  73. case GOOGLE:
  74. case HMS:
  75. StoreLicenseCheck.checkLicense(activity, userService);
  76. break;
  77. case SERIAL:
  78. case GOOGLE_WORK:
  79. case HMS_WORK:
  80. case ONPREM:
  81. checkSerial(activity.getApplicationContext());
  82. break;
  83. }
  84. }
  85. private void checkSerial(@NonNull Context applicationContext) {
  86. logger.info("Checking serial license");
  87. String error = licenseService.validate(true);
  88. if (error != null) {
  89. invalidLicense(applicationContext, error);
  90. } else {
  91. userService.setCredentials(licenseService.loadCredentials());
  92. if (licenseService instanceof LicenseServiceThreema && BuildFlavor.getCurrent().getMaySelfUpdate()) {
  93. LicenseServiceThreema<?> licenseServiceThreema = (LicenseServiceThreema<?>) licenseService;
  94. if (licenseServiceThreema.getUpdateMessage() != null && !licenseServiceThreema.isUpdateMessageShown()) {
  95. try {
  96. LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(
  97. IntentDataUtil.createActionIntentUpdateAvailable(
  98. licenseServiceThreema.getUpdateMessage(),
  99. licenseServiceThreema.getUpdateUrl()
  100. )
  101. );
  102. licenseServiceThreema.setUpdateMessageShown(true);
  103. } catch (ReceiverCallNotAllowedException x) {
  104. logger.error("Exception", x);
  105. }
  106. }
  107. }
  108. //run update work info route on the work build
  109. if (ConfigUtils.isWorkBuild()) {
  110. (new UpdateWorkInfoRoutine(
  111. this.apiConnector,
  112. this.identityStore,
  113. this.deviceService,
  114. this.licenseService,
  115. this.appRestrictions
  116. )).run();
  117. }
  118. }
  119. }
  120. private void invalidLicense(@NonNull Context applicationContext, String message) {
  121. try {
  122. LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(IntentDataUtil.createActionIntentLicenseNotAllowed(message));
  123. } catch (ReceiverCallNotAllowedException x) {
  124. logger.error("Exception", x);
  125. }
  126. }
  127. }