diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SMSUpdateCallback.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SMSUpdateCallback.java new file mode 100644 index 0000000000..f99dfe6333 --- /dev/null +++ b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/callback/SMSUpdateCallback.java @@ -0,0 +1,8 @@ +package com.onesignal.sdktest.callback; + +public interface SMSUpdateCallback { + + void onSuccess(); + void onFailure(); + +} diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java index 79f4475c03..50e04d0b3a 100644 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java +++ b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/constant/Text.java @@ -11,13 +11,19 @@ public class Text { public static final String EMAIL_SET_SUCCESSFULLY = "Email set successfully"; public static final String EMAIL_SET_FAILURE = "Email set failure"; + public static final String SMS_SET_SUCCESSFULLY = "SMS Number set successfully"; + public static final String SMS_SET_FAILURE = "SMS Number set failure"; + public static final String APP_ID_IS_REQUIRED = "App id is required"; public static final String INVALID_APP_ID = "Invalid app id"; public static final String EMAIL_IS_REQUIRED = "Email is required"; public static final String INVALID_EMAIL = "Invalid email"; + public static final String SMS_IS_REQUIRED = "SMS number is required"; + public static final String EMAIL_NOT_SET = "Email not set"; + public static final String SMS_NOT_SET = "SMS Number not set"; public static final String EXTERNAL_USER_ID_NOT_SET = "External user id not set"; public static final String EXTERNAL_USER_ID_IS_REQUIRED = "External user id is required"; diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java index 88639b21f8..198a8dbbcd 100644 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java +++ b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/model/MainActivityViewModel.java @@ -46,6 +46,7 @@ import com.onesignal.sdktest.util.Toaster; import org.json.JSONException; +import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; @@ -79,9 +80,18 @@ public class MainActivityViewModel implements ActivityViewModel { private TextView appIdTextView; // Email private RelativeLayout emailRelativeLayout; + private TextView emailHeaderTextView; private TextView emailTitleTextView; private TextView userEmailTextView; private Button logoutEmailButton; + + // SMS + private RelativeLayout smsRelativeLayout; + private TextView smsHeaderTextView; + private TextView smsTitleTextView; + private TextView userSMSTextView; + private Button logoutSMSButton; + // External User Id private RelativeLayout externalUserIdRelativeLayout; private TextView externalUserIdTitleTextView; @@ -181,11 +191,18 @@ public ActivityViewModel onActivityCreated(Context context) { appIdTitleTextView = getActivity().findViewById(R.id.main_activity_account_details_app_id_title_text_view); appIdTextView = getActivity().findViewById(R.id.main_activity_account_details_app_id_text_view); + emailHeaderTextView = getActivity().findViewById(R.id.main_activity_email_title_text_view); emailRelativeLayout = getActivity().findViewById(R.id.main_activity_account_details_email_relative_layout); emailTitleTextView = getActivity().findViewById(R.id.main_activity_account_details_email_text_view); userEmailTextView = getActivity().findViewById(R.id.main_activity_account_details_user_email_text_view); logoutEmailButton = getActivity().findViewById(R.id.main_activity_email_logout_email_button); + smsHeaderTextView = getActivity().findViewById(R.id.main_activity_sms_title_text_view); + smsRelativeLayout = getActivity().findViewById(R.id.main_activity_account_details_sms_relative_layout); + smsTitleTextView = getActivity().findViewById(R.id.main_activity_account_details_sms_text_view); + userSMSTextView = getActivity().findViewById(R.id.main_activity_account_details_user_sms_text_view); + logoutSMSButton = getActivity().findViewById(R.id.main_activity_sms_logout_sms_button); + externalUserIdRelativeLayout = getActivity().findViewById(R.id.main_activity_account_details_external_user_id_relative_layout); externalUserIdTitleTextView = getActivity().findViewById(R.id.main_activity_account_details_external_user_id_text_view); userExternalUserIdTextView = getActivity().findViewById(R.id.main_activity_account_details_user_external_user_id_text_view); @@ -244,8 +261,12 @@ public ActivityViewModel setupInterfaceElements() { font.applyFont(privacyConsentAllowButton, font.saralaBold); font.applyFont(appIdTitleTextView, font.saralaBold); font.applyFont(appIdTextView, font.saralaRegular); + font.applyFont(emailHeaderTextView, font.saralaBold); font.applyFont(emailTitleTextView, font.saralaBold); font.applyFont(userEmailTextView, font.saralaRegular); + font.applyFont(smsHeaderTextView, font.saralaBold); + font.applyFont(smsTitleTextView, font.saralaBold); + font.applyFont(userSMSTextView, font.saralaRegular); font.applyFont(externalUserIdTitleTextView, font.saralaBold); font.applyFont(userExternalUserIdTextView, font.saralaRegular); font.applyFont(tagsTitleTextView, font.saralaBold); @@ -373,6 +394,7 @@ public void onFailure() { }); setupEmailButton(); + setupSMSButton(); setupExternalUserIdButton(); } @@ -417,6 +439,42 @@ public void onFailure(OneSignal.EmailUpdateError error) { }); } + private void setupSMSButton() { + boolean isSMSNumberSet = currentUser.isSMSNumberSet(); + String smsNumber = isSMSNumberSet ? currentUser.getSMSNumber() : Text.SMS_NOT_SET; + userSMSTextView.setText(smsNumber); + + smsRelativeLayout.setOnClickListener(v -> dialog.createUpdateAlertDialog(currentUser.getSMSNumber(), ProfileUtil.FieldType.SMS, new UpdateAlertDialogCallback() { + @Override + public void onSuccess(String update) { + userSMSTextView.setText(update); + } + + @Override + public void onFailure() { + + } + })); + + logoutSMSButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + OneSignal.logoutSMSNumber(new OneSignal.OSSMSUpdateHandler() { + @Override + public void onSuccess(JSONObject result) { + OneSignal.onesignalLog(OneSignal.LOG_LEVEL.DEBUG, "Logout SMS ended successfully, result: " + result); + MainActivityViewModel.this.getActivity().runOnUiThread(() -> userSMSTextView.setText("")); + } + + @Override + public void onFailure(OneSignal.OSSMSUpdateError error) { + OneSignal.onesignalLog(OneSignal.LOG_LEVEL.DEBUG, "Logout SMS failed with error: " + error); + } + }); + } + }); + } + private void setupExternalUserIdButton() { boolean isExternalUserSet = currentUser.isExternalUserIdSet(context); String externalUserId = isExternalUserSet ? currentUser.getExternalUserId(context) : Text.EXTERNAL_USER_ID_NOT_SET; diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/user/CurrentUser.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/user/CurrentUser.java index fc1089fd7e..769fb141d0 100644 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/user/CurrentUser.java +++ b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/user/CurrentUser.java @@ -6,9 +6,12 @@ import com.onesignal.OSDeviceState; import com.onesignal.OneSignal; import com.onesignal.sdktest.callback.EmailUpdateCallback; +import com.onesignal.sdktest.callback.SMSUpdateCallback; import com.onesignal.sdktest.constant.Tag; import com.onesignal.sdktest.util.SharedPreferenceUtil; +import org.json.JSONObject; + public class CurrentUser { private static CurrentUser currentUser; @@ -20,6 +23,13 @@ public String getEmail() { return null; } + public String getSMSNumber() { + OSDeviceState deviceState = OneSignal.getDeviceState(); + if (deviceState != null) + return deviceState.getSMSNumber(); + return null; + } + public String getExternalUserId(Context context) { return SharedPreferenceUtil.getCachedUserExternalUserId(context); } @@ -46,6 +56,23 @@ public void onFailure(OneSignal.EmailUpdateError error) { }); } + public void setSMSNumber(String smsNumber, final SMSUpdateCallback callback) { + OneSignal.setSMSNumber(smsNumber, new OneSignal.OSSMSUpdateHandler() { + @Override + public void onSuccess(JSONObject result) { + callback.onSuccess(); + } + + @Override + public void onFailure(OneSignal.OSSMSUpdateError error) { + String errorMsg = error.getType() + ": " + error.getMessage(); + Log.e(Tag.ERROR, errorMsg); + + callback.onFailure(); + } + }); + } + public void removeEmail(final EmailUpdateCallback callback) { OneSignal.logoutEmail(); callback.onSuccess(); @@ -56,6 +83,11 @@ public boolean isEmailSet() { return deviceState != null && deviceState.getEmailAddress() != null; } + public boolean isSMSNumberSet() { + OSDeviceState deviceState = OneSignal.getDeviceState(); + return deviceState != null && deviceState.getSMSNumber() != null; + } + public boolean isExternalUserIdSet(Context context) { String userId = getExternalUserId(context); return userId != null && !userId.isEmpty(); diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java index 507635f802..579a9212a0 100644 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java +++ b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/Dialog.java @@ -27,6 +27,7 @@ import com.onesignal.sdktest.callback.AddPairAlertDialogCallback; import com.onesignal.sdktest.callback.EmailUpdateCallback; import com.onesignal.sdktest.callback.EnumSelectionCallback; +import com.onesignal.sdktest.callback.SMSUpdateCallback; import com.onesignal.sdktest.callback.UpdateAlertDialogCallback; import com.onesignal.sdktest.constant.Tag; import com.onesignal.sdktest.constant.Text; @@ -105,6 +106,10 @@ public void onClick(final DialogInterface dialog, int which) { updateEmail(dialog, newContent); break; + case SMS: + updateSMsNumber(dialog, newContent); + break; + case EXTERNAL_USER_ID: updateExternalUserId(dialog, newContent); break; @@ -177,6 +182,44 @@ public void run() { }); } + /** + * Updates the SMS number attached to the device and caches + */ + private void updateSMsNumber(final DialogInterface dialog, final String smsNumber) { + currentUser.setSMSNumber(smsNumber, new SMSUpdateCallback() { + @Override + public void onSuccess() { + SharedPreferenceUtil.cacheUserSMSNumber(context, smsNumber); + Log.d(Tag.DEBUG, Text.SMS_SET_SUCCESSFULLY); + + ((Activity) context).runOnUiThread(new Runnable() { + @Override + public void run() { + toggleUpdateAlertDialogAttributes(false); + + dialog.dismiss(); + callback.onSuccess(smsNumber); + } + }); + } + + @Override + public void onFailure() { + Log.d(Tag.ERROR, Text.SMS_SET_FAILURE); + + ((Activity) context).runOnUiThread(new Runnable() { + @Override + public void run() { + toggleUpdateAlertDialogAttributes(false); + + dialog.dismiss(); + callback.onFailure(); + } + }); + } + }); + } + /** * Set external id attached to the user/email of the device */ diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java index 85a2eb31ec..de433876eb 100644 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java +++ b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/ProfileUtil.java @@ -11,6 +11,7 @@ public enum FieldType { APP_ID("App Id"), EMAIL("Email"), + SMS("SMS"), EXTERNAL_USER_ID("External User Id"), TAG("Tags"), @@ -65,6 +66,21 @@ public static boolean isEmailValid(TextInputLayout emailTextInputLayout) { return true; } + public static boolean isSMSValid(TextInputLayout smsTextInputLayout) { + smsTextInputLayout.setErrorEnabled(false); + if (smsTextInputLayout.getEditText() != null) { + String smsNumber = smsTextInputLayout.getEditText().getText().toString().trim(); + if (smsNumber.isEmpty()) { + smsTextInputLayout.setError(Text.SMS_IS_REQUIRED); + return false; + } + } else { + smsTextInputLayout.setError(Text.ERROR); + return false; + } + return true; + } + private static boolean isExternalUserIdValid(TextInputLayout externalUserIdTextInputLayout) { externalUserIdTextInputLayout.setErrorEnabled(false); if (externalUserIdTextInputLayout.getEditText() != null) { @@ -101,9 +117,10 @@ static boolean isContentValid(FieldType field, TextInputLayout alertDialogTextIn return isAppIdValid(alertDialogTextInputLayout); case EMAIL: return isEmailValid(alertDialogTextInputLayout); + case SMS: + return isSMSValid(alertDialogTextInputLayout); case EXTERNAL_USER_ID: return isExternalUserIdValid(alertDialogTextInputLayout); - case TAG: case TRIGGER: return isKeyValid(alertDialogTextInputLayout); diff --git a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java index d2b6c8f5b7..e8ef9ab751 100644 --- a/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java +++ b/Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/util/SharedPreferenceUtil.java @@ -12,6 +12,7 @@ public class SharedPreferenceUtil { public static final String OS_APP_ID_SHARED_PREF = "OS_APP_ID_SHARED_PREF"; private static final String PRIVACY_CONSENT_SHARED_PREF = "PRIVACY_CONSENT_SHARED_PREF"; public static final String USER_EMAIL_SHARED_PREF = "USER_EMAIL_SHARED_PREF"; + public static final String USER_SMS_NUMBER_SHARED_PREF = "USER_SMS_NUMBER_SHARED_PREF"; public static final String USER_EXTERNAL_USER_ID_SHARED_PREF = "USER_EXTERNAL_USER_ID_SHARED_PREF"; private static final String LOCATION_SHARED_PREF = "LOCATION_SHARED_PREF"; private static final String IN_APP_MESSAGING_PAUSED_PREF = "IN_APP_MESSAGING_PAUSED_PREF"; @@ -60,6 +61,10 @@ public static void cacheUserEmail(Context context, String email) { getSharedPreference(context).edit().putString(USER_EMAIL_SHARED_PREF, email).apply(); } + public static void cacheUserSMSNumber(Context context, String smsNumber) { + getSharedPreference(context).edit().putString(USER_SMS_NUMBER_SHARED_PREF, smsNumber).apply(); + } + public static void cacheUserExternalUserId(Context context, String userId) { getSharedPreference(context).edit().putString(USER_EXTERNAL_USER_ID_SHARED_PREF, userId).apply(); } diff --git a/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml b/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml index df9402da24..32a6287a11 100644 --- a/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml +++ b/Examples/OneSignalDemo/app/src/main/res/layout/main_activity_layout.xml @@ -169,167 +169,287 @@ app:cardElevation="4dp"> - + + - - + android:background="@drawable/ripple_selector_red_white" + android:paddingStart="20dp" + android:paddingTop="12dp" + android:paddingEnd="20dp" + android:paddingBottom="16dp"> - - - - - + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + android:layout_centerVertical="true" + android:layout_toStartOf="@id/main_activity_account_details_app_id_text_view" + android:layout_toLeftOf="@id/main_activity_account_details_app_id_text_view" + android:text="@string/id_colon" + android:textColor="@color/colorDarkText" + android:textSize="16sp" /> + + - + - + + - + - + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + android:layout_centerVertical="true" + android:layout_toStartOf="@id/main_activity_account_details_user_external_user_id_text_view" + android:layout_toLeftOf="@id/main_activity_account_details_user_external_user_id_text_view" + android:text="@string/external_user_id_colon" + android:textColor="@color/colorDarkText" + android:textSize="16sp" /> + + - + - + - + - + + - + - + - + - + - + + + + - + + android:orientation="vertical">