From 03f44c497f60533626501231dc5be5a37bc433db Mon Sep 17 00:00:00 2001 From: Ankit Gupta Date: Sat, 6 Jan 2018 07:27:26 +0530 Subject: [PATCH 1/6] Added Support for Custom Message --- README.md | 14 ++++++++++++++ .../java/com/eggheadgames/siren/Constants.java | 2 ++ .../main/java/com/eggheadgames/siren/Siren.java | 16 +++++++++------- .../eggheadgames/siren/SirenAlertWrapper.java | 10 ++++++++-- .../java/com/eggheadgames/siren/SirenHelper.java | 8 ++++++++ .../java/com/eggheadgames/siren/SirenTest.java | 8 ++++---- 6 files changed, 45 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 81f8e09..0870b47 100644 --- a/README.md +++ b/README.md @@ -189,6 +189,20 @@ You may want the update dialog to always appear in a certain language, ignoring Siren.setLanguageLocalization(SirenSupportedLocales.FR) ``` +## custom message from server. + +You can send custom message server side. e.g if the user language is currently not supported by the library, you can send the message from the server. + +Example you want to display a message in Hindi or any other languageserver can send the response in the required language. +```java + siren.checkVersion(this, SirenVersionCheckType.IMMEDIATELY, SIREN_JSON_DOCUMENT_URL); +``` +Response from server + +```json +{ "com.example.app": { "minVersionName": "4.12.2","message" : "कृपया नवीनतम वर्शन में ऐप अपडेट करें" } } +``` + ## Testing Siren Change the url in your app to point to a test location (e.g. http://myjson.com/ is a convenient test site). Create an appropriate file and run your app with the temporary url. diff --git a/library/src/main/java/com/eggheadgames/siren/Constants.java b/library/src/main/java/com/eggheadgames/siren/Constants.java index ff6079b..fd082c4 100644 --- a/library/src/main/java/com/eggheadgames/siren/Constants.java +++ b/library/src/main/java/com/eggheadgames/siren/Constants.java @@ -10,5 +10,7 @@ final class Constants { static final String JSON_FORCE_ALERT_TYPE = "force"; + static final String JSON_MESSAGE = "message"; + static final String JSON_ENABLE_VERSION_CHECK = "enable"; } diff --git a/library/src/main/java/com/eggheadgames/siren/Siren.java b/library/src/main/java/com/eggheadgames/siren/Siren.java index 8b177e6..0f65073 100644 --- a/library/src/main/java/com/eggheadgames/siren/Siren.java +++ b/library/src/main/java/com/eggheadgames/siren/Siren.java @@ -163,9 +163,9 @@ protected void handleVerificationResults(String json) { } @VisibleForTesting - protected SirenAlertWrapper getAlertWrapper(SirenAlertType alertType, String appVersion) { + protected SirenAlertWrapper getAlertWrapper(SirenAlertType alertType, String appVersion, String message) { Activity activity = mActivityRef.get(); - return new SirenAlertWrapper(activity, mSirenListener, alertType, appVersion, forceLanguageLocalization, getSirenHelper()); + return new SirenAlertWrapper(activity, mSirenListener, alertType, appVersion, forceLanguageLocalization, getSirenHelper(),message); } protected SirenHelper getSirenHelper() { @@ -186,6 +186,7 @@ private boolean checkVersionName(JSONObject appJson) throws JSONException{ // If no config found, assume force update = false Boolean forceUpdateEnabled = appJson.has(Constants.JSON_FORCE_ALERT_TYPE) ? appJson.getBoolean(Constants.JSON_FORCE_ALERT_TYPE) : false; + String message = appJson.has(Constants.JSON_MESSAGE) ? appJson.getString(Constants.JSON_MESSAGE) : null; String minVersionName = appJson.getString(Constants.JSON_MIN_VERSION_NAME); String currentVersionName = getSirenHelper().getVersionName(mApplicationContext); @@ -223,7 +224,7 @@ private boolean checkVersionName(JSONObject appJson) throws JSONException{ } if (versionUpdateDetected) { - showAlert(minVersionName, alertType); + showAlert(minVersionName, alertType,message); return true; } } @@ -253,26 +254,27 @@ private boolean checkVersionCode(JSONObject appJson) throws JSONException{ // If no config found, assume force update = false Boolean forceUpdateEnabled = appJson.has(Constants.JSON_FORCE_ALERT_TYPE) ? appJson.getBoolean(Constants.JSON_FORCE_ALERT_TYPE) : false; + String message = appJson.has(Constants.JSON_MESSAGE) ? appJson.getString(Constants.JSON_MESSAGE) : null; //save last successful verification date getSirenHelper().setLastVerificationDate(mApplicationContext); if (getSirenHelper().getVersionCode(mApplicationContext) < minAppVersionCode && !getSirenHelper().isVersionSkippedByUser(mApplicationContext, String.valueOf(minAppVersionCode))) { - showAlert(String.valueOf(minAppVersionCode), forceUpdateEnabled ? SirenAlertType.FORCE : versionCodeUpdateAlertType); + showAlert(String.valueOf(minAppVersionCode), forceUpdateEnabled ? SirenAlertType.FORCE : versionCodeUpdateAlertType,message); return true; } } return false; } - private void showAlert(String appVersion, SirenAlertType alertType) { + private void showAlert(String appVersion, SirenAlertType alertType, String message) { if (alertType == SirenAlertType.NONE) { if (mSirenListener != null) { - mSirenListener.onDetectNewVersionWithoutAlert(getSirenHelper().getAlertMessage(mApplicationContext, appVersion, forceLanguageLocalization)); + mSirenListener.onDetectNewVersionWithoutAlert(getSirenHelper().getAlertMessage(mApplicationContext, appVersion, forceLanguageLocalization,message)); } } else { - getAlertWrapper(alertType, appVersion).show(); + getAlertWrapper(alertType, appVersion,message).show(); } } diff --git a/library/src/main/java/com/eggheadgames/siren/SirenAlertWrapper.java b/library/src/main/java/com/eggheadgames/siren/SirenAlertWrapper.java index d5054b8..e2755e9 100644 --- a/library/src/main/java/com/eggheadgames/siren/SirenAlertWrapper.java +++ b/library/src/main/java/com/eggheadgames/siren/SirenAlertWrapper.java @@ -17,19 +17,25 @@ public class SirenAlertWrapper { private final ISirenListener mSirenListener; private final SirenAlertType mSirenAlertType; private final String mMinAppVersion; + private final String mMessage; private final SirenSupportedLocales mLocale; private final SirenHelper mSirenHelper; public SirenAlertWrapper(Activity activity, ISirenListener sirenListener, SirenAlertType sirenAlertType, - String minAppVersion, SirenSupportedLocales locale, SirenHelper sirenHelper) { + String minAppVersion, SirenSupportedLocales locale, SirenHelper sirenHelper, String mMessage) { this.mSirenListener = sirenListener; this.mSirenAlertType = sirenAlertType; this.mMinAppVersion = minAppVersion; this.mLocale = locale; this.mSirenHelper = sirenHelper; this.mActivityRef = new WeakReference<>(activity); + this.mMessage = mMessage; } + public SirenAlertWrapper(Activity activity, ISirenListener sirenListener, SirenAlertType sirenAlertType, + String minAppVersion, SirenSupportedLocales locale, SirenHelper sirenHelper) { + this(activity, sirenListener, sirenAlertType, minAppVersion, locale, sirenHelper,null); + } public void show() { Activity activity = mActivityRef.get(); @@ -74,7 +80,7 @@ private void setupDialog(final AlertDialog dialog) { nextTime.setText(mSirenHelper.getLocalizedString(mActivityRef.get(), R.string.next_time, mLocale)); skip.setText(mSirenHelper.getLocalizedString(mActivityRef.get(), R.string.skip_this_version, mLocale)); - message.setText(mSirenHelper.getAlertMessage(mActivityRef.get(), mMinAppVersion, mLocale)); + message.setText(mSirenHelper.getAlertMessage(mActivityRef.get(), mMinAppVersion, mLocale,mMessage)); if (mSirenAlertType == SirenAlertType.FORCE || mSirenAlertType == SirenAlertType.OPTION diff --git a/library/src/main/java/com/eggheadgames/siren/SirenHelper.java b/library/src/main/java/com/eggheadgames/siren/SirenHelper.java index dd7a00d..8d9b986 100644 --- a/library/src/main/java/com/eggheadgames/siren/SirenHelper.java +++ b/library/src/main/java/com/eggheadgames/siren/SirenHelper.java @@ -74,6 +74,14 @@ long getLastVerificationDate(Context context) { return PreferenceManager.getDefaultSharedPreferences(context).getLong(Constants.PREFERENCES_LAST_CHECK_DATE, 0); } + @NonNull + String getAlertMessage(Context context, String minAppVersion, SirenSupportedLocales locale, String message) { + if (message != null && !message.isEmpty()){ + return message; + } + return getAlertMessage(context,minAppVersion,locale); + } + @NonNull String getAlertMessage(Context context, String minAppVersion, SirenSupportedLocales locale) { try { diff --git a/library/src/test/java/com/eggheadgames/siren/SirenTest.java b/library/src/test/java/com/eggheadgames/siren/SirenTest.java index 19440d5..8fafffc 100644 --- a/library/src/test/java/com/eggheadgames/siren/SirenTest.java +++ b/library/src/test/java/com/eggheadgames/siren/SirenTest.java @@ -81,7 +81,7 @@ public Long answer(InvocationOnMock invocation) throws Throwable { siren.mApplicationContext = activity; Mockito.when(siren.getSirenHelper()).thenReturn(sirenHelper); - Mockito.doReturn(alertWrapper).when(siren).getAlertWrapper(Mockito.any(SirenAlertType.class), Mockito.anyString()); + Mockito.doReturn(alertWrapper).when(siren).getAlertWrapper(Mockito.any(SirenAlertType.class), Mockito.anyString(), Mockito.anyString()); mockResult(TestConstants.jsonVersionNameMajorUpdate); } @@ -279,7 +279,7 @@ public void onVersionCodeUpdate_checkVersionCodeAlertType() { siren.setVersionCodeUpdateAlertType(SirenAlertType.FORCE); siren.checkVersion(activity, SirenVersionCheckType.IMMEDIATELY, APP_DESCRIPTION_URL); - Mockito.verify(siren).getAlertWrapper(eq(SirenAlertType.FORCE), Mockito.anyString()); + Mockito.verify(siren).getAlertWrapper(eq(SirenAlertType.FORCE), Mockito.anyString(), Mockito.anyString()); } @Test @@ -316,6 +316,6 @@ public void onForceUpdateEnabled_shouldShowForceAlertType() { siren.checkVersion(activity, SirenVersionCheckType.IMMEDIATELY, APP_DESCRIPTION_URL); - Mockito.verify(siren).getAlertWrapper(eq(SirenAlertType.FORCE), Mockito.anyString()); + Mockito.verify(siren).getAlertWrapper(eq(SirenAlertType.FORCE), Mockito.anyString(), Mockito.anyString()); } -} \ No newline at end of file +} From 8bc27bb33b309ab3756b335965ba91ff9c2fa237 Mon Sep 17 00:00:00 2001 From: Ankit Gupta Date: Sat, 6 Jan 2018 07:37:32 +0530 Subject: [PATCH 2/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0870b47..50f1519 100644 --- a/README.md +++ b/README.md @@ -193,7 +193,7 @@ You may want the update dialog to always appear in a certain language, ignoring You can send custom message server side. e.g if the user language is currently not supported by the library, you can send the message from the server. -Example you want to display a message in Hindi or any other languageserver can send the response in the required language. +Example you want to display a message in Hindi or any other language. Server can send the response in the required language. ```java siren.checkVersion(this, SirenVersionCheckType.IMMEDIATELY, SIREN_JSON_DOCUMENT_URL); ``` From 7456380f3ac2529cd29b420b397404f78c13323f Mon Sep 17 00:00:00 2001 From: Ankit Gupta Date: Sat, 6 Jan 2018 07:39:36 +0530 Subject: [PATCH 3/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 50f1519..1f611f2 100644 --- a/README.md +++ b/README.md @@ -191,7 +191,7 @@ You may want the update dialog to always appear in a certain language, ignoring ## custom message from server. -You can send custom message server side. e.g if the user language is currently not supported by the library, you can send the message from the server. +You can send a custom message from the server side. e.g if the user language is currently not supported by the library, you can send the message from the server. Example you want to display a message in Hindi or any other language. Server can send the response in the required language. ```java From 7ec2765fd9a15747c7c7f8b36b6bc20e363ea040 Mon Sep 17 00:00:00 2001 From: Ankit Gupta Date: Thu, 11 Jan 2018 11:59:47 +0530 Subject: [PATCH 4/6] Change Request : Coding style to match the rest of the code --- .../src/main/java/com/eggheadgames/siren/Siren.java | 10 +++++----- .../java/com/eggheadgames/siren/SirenAlertWrapper.java | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/library/src/main/java/com/eggheadgames/siren/Siren.java b/library/src/main/java/com/eggheadgames/siren/Siren.java index 0f65073..3ac2c6e 100644 --- a/library/src/main/java/com/eggheadgames/siren/Siren.java +++ b/library/src/main/java/com/eggheadgames/siren/Siren.java @@ -165,7 +165,7 @@ protected void handleVerificationResults(String json) { @VisibleForTesting protected SirenAlertWrapper getAlertWrapper(SirenAlertType alertType, String appVersion, String message) { Activity activity = mActivityRef.get(); - return new SirenAlertWrapper(activity, mSirenListener, alertType, appVersion, forceLanguageLocalization, getSirenHelper(),message); + return new SirenAlertWrapper(activity, mSirenListener, alertType, appVersion, forceLanguageLocalization, getSirenHelper(), message); } protected SirenHelper getSirenHelper() { @@ -224,7 +224,7 @@ private boolean checkVersionName(JSONObject appJson) throws JSONException{ } if (versionUpdateDetected) { - showAlert(minVersionName, alertType,message); + showAlert(minVersionName, alertType, message); return true; } } @@ -261,7 +261,7 @@ private boolean checkVersionCode(JSONObject appJson) throws JSONException{ if (getSirenHelper().getVersionCode(mApplicationContext) < minAppVersionCode && !getSirenHelper().isVersionSkippedByUser(mApplicationContext, String.valueOf(minAppVersionCode))) { - showAlert(String.valueOf(minAppVersionCode), forceUpdateEnabled ? SirenAlertType.FORCE : versionCodeUpdateAlertType,message); + showAlert(String.valueOf(minAppVersionCode), forceUpdateEnabled ? SirenAlertType.FORCE : versionCodeUpdateAlertType, message); return true; } } @@ -271,10 +271,10 @@ private boolean checkVersionCode(JSONObject appJson) throws JSONException{ private void showAlert(String appVersion, SirenAlertType alertType, String message) { if (alertType == SirenAlertType.NONE) { if (mSirenListener != null) { - mSirenListener.onDetectNewVersionWithoutAlert(getSirenHelper().getAlertMessage(mApplicationContext, appVersion, forceLanguageLocalization,message)); + mSirenListener.onDetectNewVersionWithoutAlert(getSirenHelper().getAlertMessage(mApplicationContext, appVersion, forceLanguageLocalization, message)); } } else { - getAlertWrapper(alertType, appVersion,message).show(); + getAlertWrapper(alertType, appVersion, message).show(); } } diff --git a/library/src/main/java/com/eggheadgames/siren/SirenAlertWrapper.java b/library/src/main/java/com/eggheadgames/siren/SirenAlertWrapper.java index e2755e9..b9f1253 100644 --- a/library/src/main/java/com/eggheadgames/siren/SirenAlertWrapper.java +++ b/library/src/main/java/com/eggheadgames/siren/SirenAlertWrapper.java @@ -34,7 +34,7 @@ public SirenAlertWrapper(Activity activity, ISirenListener sirenListener, SirenA public SirenAlertWrapper(Activity activity, ISirenListener sirenListener, SirenAlertType sirenAlertType, String minAppVersion, SirenSupportedLocales locale, SirenHelper sirenHelper) { - this(activity, sirenListener, sirenAlertType, minAppVersion, locale, sirenHelper,null); + this(activity, sirenListener, sirenAlertType, minAppVersion, locale, sirenHelper, null); } public void show() { @@ -80,7 +80,7 @@ private void setupDialog(final AlertDialog dialog) { nextTime.setText(mSirenHelper.getLocalizedString(mActivityRef.get(), R.string.next_time, mLocale)); skip.setText(mSirenHelper.getLocalizedString(mActivityRef.get(), R.string.skip_this_version, mLocale)); - message.setText(mSirenHelper.getAlertMessage(mActivityRef.get(), mMinAppVersion, mLocale,mMessage)); + message.setText(mSirenHelper.getAlertMessage(mActivityRef.get(), mMinAppVersion, mLocale, mMessage)); if (mSirenAlertType == SirenAlertType.FORCE || mSirenAlertType == SirenAlertType.OPTION From 1e3b917e650b491f8025f22438d0f29defca5ef6 Mon Sep 17 00:00:00 2001 From: Ankit Gupta Date: Thu, 11 Jan 2018 13:25:42 +0530 Subject: [PATCH 5/6] README.md Modified --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1f611f2..2c50176 100644 --- a/README.md +++ b/README.md @@ -191,16 +191,12 @@ You may want the update dialog to always appear in a certain language, ignoring ## custom message from server. -You can send a custom message from the server side. e.g if the user language is currently not supported by the library, you can send the message from the server. +You can send a custom message from the server side. -Example you want to display a message in Hindi or any other language. Server can send the response in the required language. -```java - siren.checkVersion(this, SirenVersionCheckType.IMMEDIATELY, SIREN_JSON_DOCUMENT_URL); -``` Response from server ```json -{ "com.example.app": { "minVersionName": "4.12.2","message" : "कृपया नवीनतम वर्शन में ऐप अपडेट करें" } } +{ "com.example.app": { "minVersionName": "4.12.2","message" : "Please update as this version will stop working" } } ``` ## Testing Siren From e3544bb08953292dfe25a0d6571c84b0deeccbc5 Mon Sep 17 00:00:00 2001 From: Ankit Gupta Date: Sat, 13 Jan 2018 10:10:57 +0530 Subject: [PATCH 6/6] Test case added for custom message --- .../test/java/com/eggheadgames/siren/SirenTest.java | 12 ++++++++++++ .../java/com/eggheadgames/siren/TestConstants.java | 1 + 2 files changed, 13 insertions(+) diff --git a/library/src/test/java/com/eggheadgames/siren/SirenTest.java b/library/src/test/java/com/eggheadgames/siren/SirenTest.java index 8fafffc..f91d6f5 100644 --- a/library/src/test/java/com/eggheadgames/siren/SirenTest.java +++ b/library/src/test/java/com/eggheadgames/siren/SirenTest.java @@ -35,6 +35,7 @@ public void prepareTest() { alertWrapper = Mockito.spy(new SirenAlertWrapper(null, null, null, null, null, null)); //Mock SirenHelper class Mockito.when(sirenHelper.getAlertMessage(Mockito.any(Context.class), Mockito.anyString(), Mockito.any(SirenSupportedLocales.class))).thenReturn(""); + Mockito.when(sirenHelper.getAlertMessage(Mockito.any(Context.class), Mockito.anyString(), Mockito.any(SirenSupportedLocales.class), Mockito.anyString())).thenReturn(""); Mockito.when(sirenHelper.getDaysSinceLastCheck(activity)).thenReturn(0); Mockito.when(sirenHelper.getLocalizedString(Mockito.any(Context.class), Mockito.anyInt(), Mockito.any(SirenSupportedLocales.class))).thenReturn(""); Mockito.when(sirenHelper.getPackageName(activity)).thenReturn(TestConstants.appPackageName); @@ -318,4 +319,15 @@ public void onForceUpdateEnabled_shouldShowForceAlertType() { Mockito.verify(siren).getAlertWrapper(eq(SirenAlertType.FORCE), Mockito.anyString(), Mockito.anyString()); } + + @Test + public void onMessageNode_shouldShowCustomMessage() { + mockResult(TestConstants.jsonCustomMessage); + Mockito.when(sirenHelper.getVersionName(activity)).thenReturn(TestConstants.appVersionNameTest); + + siren.checkVersion(activity, SirenVersionCheckType.IMMEDIATELY, APP_DESCRIPTION_URL); + + Mockito.verify(siren).getAlertWrapper(eq(SirenAlertType.OPTION), Mockito.anyString(), Mockito.anyString()); + + } } diff --git a/library/src/test/java/com/eggheadgames/siren/TestConstants.java b/library/src/test/java/com/eggheadgames/siren/TestConstants.java index db8936e..dd18519 100644 --- a/library/src/test/java/com/eggheadgames/siren/TestConstants.java +++ b/library/src/test/java/com/eggheadgames/siren/TestConstants.java @@ -24,4 +24,5 @@ interface TestConstants { String jsonVersionCheckDisabled = "{\"com.example.app\":{\"minVersionName\":\"2.1.1.1\", \"enable\": false}}"; String jsonForceUpdateEnabled = "{\"com.example.app\":{\"minVersionName\":\"2.1.1.1\", \"force\": true}}"; + String jsonCustomMessage = "{\"com.example.app\":{\"minVersionName\":\"2.1.1.1\", \"message\": \"This is custom message\"}}"; }