package com.jdroid.android.firebase.invites; import android.accounts.Account; import android.app.Activity; import android.net.Uri; import android.support.annotation.StringRes; import com.google.android.gms.appinvite.AppInviteInvitation; import com.jdroid.android.application.AbstractApplication; import com.jdroid.android.google.analytics.GoogleAnalyticsAppModule; import com.jdroid.android.utils.LocalizationUtils; import com.jdroid.java.exception.UnexpectedException; import java.util.Map; public class AppInviteSender { private int requestCode = AppInviteHelper.REQUEST_CODE; private String title = AbstractApplication.get().getAppContext().getAppInviteTitle(); private String message = AbstractApplication.get().getAppContext().getAppInviteMessage(); private String deepLink = AbstractApplication.get().getAppContext().getAppInviteDeeplink(); private Uri customImage; private String emailSubject; private String emailHtmlContent; private String callToActionText; private Account account; private Map<String, String> additionalReferralParameters; private Integer minimumVersionCode; private String googleAnalyticsTrackingId = GoogleAnalyticsAppModule.get().getGoogleAnalyticsAppContext().getGoogleAnalyticsTrackingId(); private Activity activity; public void sendInvitation() { try { AppInviteInvitation.IntentBuilder intentBuilder = new AppInviteInvitation.IntentBuilder(title); // Message if (message == null) { throw new UnexpectedException("Missing invitationMessage when building app invite"); } if (message.length() > AppInviteInvitation.IntentBuilder.MAX_MESSAGE_LENGTH) { throw new UnexpectedException("invitationMessage too long when building app invite"); } intentBuilder.setMessage(message); // Deeplink intentBuilder.setDeepLink(Uri.parse(deepLink)); // Custom Image if (customImage != null) { intentBuilder.setCustomImage(customImage); } // Email template if (emailHtmlContent != null) { if (emailHtmlContent.length() > AppInviteInvitation.IntentBuilder.MAX_EMAIL_HTML_CONTENT) { throw new UnexpectedException("emailHtmlContent too long when building app invite"); } if (emailSubject == null) { throw new UnexpectedException("Missing emailSubject when building app invite"); } intentBuilder.setEmailSubject(emailHtmlContent); intentBuilder.setEmailHtmlContent(emailHtmlContent); } else if (callToActionText != null) { if (callToActionText.length() < AppInviteInvitation.IntentBuilder.MIN_CALL_TO_ACTION_TEXT_LENGTH) { throw new UnexpectedException("callToActionText too short when building app invite"); } if (callToActionText.length() > AppInviteInvitation.IntentBuilder.MAX_CALL_TO_ACTION_TEXT_LENGTH) { throw new UnexpectedException("callToActionText too long when building app invite"); } intentBuilder.setCallToActionText(callToActionText); } // Account if (account != null) { intentBuilder.setAccount(account); } // Additiconal Referral Parameters if (additionalReferralParameters != null) { intentBuilder.setAdditionalReferralParameters(additionalReferralParameters); } // Android minimum version code if (minimumVersionCode != null) { intentBuilder.setAndroidMinimumVersionCode(minimumVersionCode); } // Google Analytics Tracking id if (googleAnalyticsTrackingId != null) { intentBuilder.setGoogleAnalyticsTrackingId(googleAnalyticsTrackingId); } onInitIntentBuilder(intentBuilder); if (activity == null) { activity = AbstractApplication.get().getCurrentActivity(); } activity.startActivityForResult(intentBuilder.build(), requestCode); } catch (Exception e) { AbstractApplication.get().getExceptionHandler().logHandledException(e); } } protected void onInitIntentBuilder(AppInviteInvitation.IntentBuilder intentBuilder) { // Do nothing } public void setRequestCode(int requestCode) { this.requestCode = requestCode; } public void setTitle(String title) { this.title = title; } public void setTitle(@StringRes int titleResId) { this.title = LocalizationUtils.getString(titleResId); } public void setMessage(String message) { this.message = message; } public void setMessage(@StringRes int messageResId) { this.message = LocalizationUtils.getString(messageResId); } public void setDeepLink(String deepLink) { this.deepLink = deepLink; } public void setCustomImage(Uri customImage) { this.customImage = customImage; } public void setCustomImage(String customImage) { this.customImage = Uri.parse(customImage); } public void setEmailSubject(String emailSubject) { this.emailSubject = emailSubject; } public void setEmailSubject(@StringRes int emailSubjectResId) { this.emailSubject = LocalizationUtils.getString(emailSubjectResId); } public void setEmailHtmlContent(String emailHtmlContent) { this.emailHtmlContent = emailHtmlContent; } public void setCallToActionText(String callToActionText) { this.callToActionText = callToActionText; } public void setCallToActionText(@StringRes int callToActionTextResId) { this.callToActionText = LocalizationUtils.getString(callToActionTextResId); } public void setAccount(Account account) { this.account = account; } public void setAdditionalReferralParameters(Map<String, String> additionalReferralParameters) { this.additionalReferralParameters = additionalReferralParameters; } public void setMinimumVersionCode(Integer minimumVersionCode) { this.minimumVersionCode = minimumVersionCode; } public void setGoogleAnalyticsTrackingId(String googleAnalyticsTrackingId) { this.googleAnalyticsTrackingId = googleAnalyticsTrackingId; } public void setActivity(Activity activity) { this.activity = activity; } }