diff --git a/app/build.gradle b/app/build.gradle index bdaa13ef..8401aa8f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,16 +1,15 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" + compileSdkVersion 33 defaultConfig { applicationId "com.github.javiersantos.appupdater.demo" minSdkVersion 14 - targetSdkVersion 27 + targetSdkVersion 33 versionCode 4 versionName "0.1" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } buildTypes { @@ -24,24 +23,23 @@ android { enabled = true } - lintOptions { + namespace 'com.github.javiersantos.appupdater.demo' + lint { disable 'MissingTranslation' } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.android.support:design:27.1.1' - implementation 'com.android.support:cardview-v7:27.1.1' + implementation 'androidx.appcompat:appcompat:1.6.0' + implementation 'com.google.android.material:material:1.7.0' + implementation 'androidx.cardview:cardview:1.0.0' implementation project(':library') // Testing-only dependencies - testImplementation 'junit:junit:4.12' - androidTestImplementation('com.android.support.test:runner:1.0.1', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', { - exclude group: 'com.android.support', module: 'support-annotations' - }) + testImplementation 'junit:junit:4.13.2' + androidTestImplementation('androidx.test.ext:junit:1.1.5') + + androidTestImplementation('androidx.test:core:1.5.0') + androidTestImplementation('androidx.test.espresso:espresso-core:3.5.1') } diff --git a/app/src/androidTest/java/com/github/javiersantos/appupdater/LibraryTest.java b/app/src/androidTest/java/com/github/javiersantos/appupdater/LibraryTest.java index a12c9616..12a98f83 100644 --- a/app/src/androidTest/java/com/github/javiersantos/appupdater/LibraryTest.java +++ b/app/src/androidTest/java/com/github/javiersantos/appupdater/LibraryTest.java @@ -1,6 +1,5 @@ package com.github.javiersantos.appupdater; -import android.support.test.runner.AndroidJUnit4; import com.github.javiersantos.appupdater.objects.Update; @@ -9,6 +8,8 @@ import static org.junit.Assert.assertTrue; +import androidx.test.ext.junit.runners.AndroidJUnit4; + @RunWith(AndroidJUnit4.class) public class LibraryTest { diff --git a/app/src/androidTest/java/com/github/javiersantos/appupdater/NoUpdateAvailableTest.java b/app/src/androidTest/java/com/github/javiersantos/appupdater/NoUpdateAvailableTest.java index 3cd42bd2..6d924c72 100644 --- a/app/src/androidTest/java/com/github/javiersantos/appupdater/NoUpdateAvailableTest.java +++ b/app/src/androidTest/java/com/github/javiersantos/appupdater/NoUpdateAvailableTest.java @@ -1,35 +1,32 @@ package com.github.javiersantos.appupdater; -import android.support.test.InstrumentationRegistry; -import android.support.test.rule.UiThreadTestRule; -import android.support.test.runner.AndroidJUnit4; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import androidx.test.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.internal.runner.junit4.statement.UiThreadStatement; import com.github.javiersantos.appupdater.enums.AppUpdaterError; import com.github.javiersantos.appupdater.enums.UpdateFrom; import com.github.javiersantos.appupdater.objects.Update; -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - @RunWith(AndroidJUnit4.class) public class NoUpdateAvailableTest { - @Rule - public UiThreadTestRule uiThreadTestRule = new UiThreadTestRule(); @Test public void UpdateAvailable_Basic_JSON() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) @@ -59,7 +56,7 @@ public void onFailed(AppUpdaterError error) { public void UpdateAvailable_VersionCode_JSON() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) @@ -89,7 +86,7 @@ public void onFailed(AppUpdaterError error) { public void UpdateAvailable_Basic_XML() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) @@ -119,7 +116,7 @@ public void onFailed(AppUpdaterError error) { public void UpdateAvailable_VersionCode_XML() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) diff --git a/app/src/androidTest/java/com/github/javiersantos/appupdater/UpdateAvailableTest.java b/app/src/androidTest/java/com/github/javiersantos/appupdater/UpdateAvailableTest.java index 96cf47e4..fec9d832 100644 --- a/app/src/androidTest/java/com/github/javiersantos/appupdater/UpdateAvailableTest.java +++ b/app/src/androidTest/java/com/github/javiersantos/appupdater/UpdateAvailableTest.java @@ -4,10 +4,6 @@ import com.github.javiersantos.appupdater.enums.UpdateFrom; import com.github.javiersantos.appupdater.objects.Update; -import android.support.test.InstrumentationRegistry; -import android.support.test.rule.UiThreadTestRule; -import android.support.test.runner.AndroidJUnit4; - import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -17,17 +13,19 @@ import static org.junit.Assert.*; +import androidx.test.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.internal.runner.junit4.statement.UiThreadStatement; + @RunWith(AndroidJUnit4.class) public class UpdateAvailableTest { - @Rule - public UiThreadTestRule uiThreadTestRule = new UiThreadTestRule(); @Test public void UpdateAvailable_Basic_JSON() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) @@ -57,7 +55,7 @@ public void onFailed(AppUpdaterError error) { public void UpdateAvailable_VersionCode_JSON() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) @@ -87,7 +85,7 @@ public void onFailed(AppUpdaterError error) { public void UpdateAvailable_Basic_XML() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) @@ -117,7 +115,7 @@ public void onFailed(AppUpdaterError error) { public void UpdateAvailable_VersionCode_XML() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) @@ -147,7 +145,7 @@ public void onFailed(AppUpdaterError error) { public void UpdateAvailable_GOOGLEPLAY() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) @@ -176,7 +174,7 @@ public void onFailed(AppUpdaterError error) { public void UpdateAvailable_JSON() throws Throwable { final CountDownLatch signal = new CountDownLatch(1); - uiThreadTestRule.runOnUiThread(new Runnable() { + UiThreadStatement.runOnUiThread(new Runnable() { @Override public void run() { new AppUpdaterUtils(InstrumentationRegistry.getTargetContext()) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b76513c7..b3a8ff3a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + @@ -13,7 +12,8 @@ android:theme="@style/AppTheme"> + android:theme="@style/AppTheme.NoActionBar" + android:exported="true"> diff --git a/app/src/main/java/com/github/javiersantos/appupdater/demo/MainActivity.java b/app/src/main/java/com/github/javiersantos/appupdater/demo/MainActivity.java index b9e2a294..0cf7135f 100644 --- a/app/src/main/java/com/github/javiersantos/appupdater/demo/MainActivity.java +++ b/app/src/main/java/com/github/javiersantos/appupdater/demo/MainActivity.java @@ -2,15 +2,16 @@ import android.content.Context; import android.content.Intent; -import android.databinding.DataBindingUtil; import android.net.Uri; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import androidx.appcompat.app.AppCompatActivity; +import androidx.databinding.DataBindingUtil; + import com.github.javiersantos.appupdater.AppUpdater; import com.github.javiersantos.appupdater.demo.databinding.ActivityMainBinding; import com.github.javiersantos.appupdater.enums.Display; @@ -33,6 +34,22 @@ public void onClick(View view) { } }); + binding.included.dialogUpdateChangelogWebview.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new AppUpdater(mContext) + //.setUpdateFrom(UpdateFrom.GITHUB) + //.setGitHubUserAndRepo("javiersantos", "AppUpdater") + .setUpdateFrom(UpdateFrom.JSON) + .setUpdateJSON("https://pastebin.com/raw/eHrKfPMn") + .setDisplay(Display.DIALOG) + .showAppUpdated(true) + .setWebviewChangelog(true) + //.setWebviewChangelog(true, "http://urltochangelog.com/changelog.html") + .start(); + } + }); + binding.included.dialogUpdateChangelog.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -40,7 +57,7 @@ public void onClick(View view) { //.setUpdateFrom(UpdateFrom.GITHUB) //.setGitHubUserAndRepo("javiersantos", "AppUpdater") .setUpdateFrom(UpdateFrom.JSON) - .setUpdateJSON("https://raw.githubusercontent.com/javiersantos/AppUpdater/master/app/update-changelog.json") + .setUpdateJSON("https://pastebin.com/raw/eHrKfPMn") .setDisplay(Display.DIALOG) .showAppUpdated(true) .start(); diff --git a/app/src/main/java/com/github/javiersantos/appupdater/demo/SettingsActivity.java b/app/src/main/java/com/github/javiersantos/appupdater/demo/SettingsActivity.java index bba7a3dc..0970d124 100644 --- a/app/src/main/java/com/github/javiersantos/appupdater/demo/SettingsActivity.java +++ b/app/src/main/java/com/github/javiersantos/appupdater/demo/SettingsActivity.java @@ -3,12 +3,12 @@ import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; -import android.support.v4.content.ContextCompat; -import android.support.v7.widget.Toolbar; +import androidx.core.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; +import android.widget.Toolbar; import com.github.javiersantos.appupdater.AppUpdater; import com.github.javiersantos.appupdater.enums.Display; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 7c191ef4..728a9d0c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,21 +2,21 @@ - - - - - - + + - - + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index ef909bf7..59e4be54 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> - - + + + + + + + + + - + - - + - - + - - + - - + - - + - - + - + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1b3f06eb..b0da37ae 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,6 +5,7 @@ A library that checks for your apps\' updates on Google Play, GitHub, Amazon or F-Droid. Sample icon designed by Adrien Zier. + Show dialog (JSON with HTML changelog) Show dialog (JSON with changelog) Show dialog (JSON) Show snackbar (XML) diff --git a/app/update-changeloghtml.json b/app/update-changeloghtml.json new file mode 100644 index 00000000..ecb0b094 --- /dev/null +++ b/app/update-changeloghtml.json @@ -0,0 +1,11 @@ +{ + "latestVersion": "1.2.2", + "latestVersionCode": "10", + "url": "https://github.com/javiersantos/AppUpdater/releases", + "urlChangelog": "https://kissableaustrian.htmlpasta.com/", + "releaseNotes": [ + "- First evolution", + "- Second evolution", + "- Bug fixes" + ] +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index a74e9dec..cbe49f1a 100644 --- a/build.gradle +++ b/build.gradle @@ -2,11 +2,11 @@ buildscript { repositories { - jcenter() + mavenCentral() google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.3' + classpath 'com.android.tools.build:gradle:7.4.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,7 +15,7 @@ buildscript { allprojects { repositories { - jcenter() + mavenCentral() google() maven { url "https://jitpack.io" } } diff --git a/gradle.properties b/gradle.properties index 1d3591c8..39bee017 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,8 @@ # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true + +#put jetifier to true again if there are issues with the androidx migration +android.enableJetifier=false +android.useAndroidX=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 74e2649a..b5d3230f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/library/build.gradle b/library/build.gradle index 08ecd2f8..7b59a00a 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,12 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" + compileSdkVersion 33 defaultConfig { minSdkVersion 14 - targetSdkVersion 27 + targetSdkVersion 33 versionCode 28 versionName "2.7" } @@ -18,15 +17,16 @@ android { } } - lintOptions { + namespace 'com.github.javiersantos.appupdater' + lint { disable 'MissingTranslation' } } dependencies { api fileTree(dir: 'libs', include: ['*.jar']) - api 'com.android.support:appcompat-v7:27.1.1' - api 'com.android.support:design:27.1.1' - api 'com.squareup.okhttp3:okhttp:3.10.0' + api 'androidx.appcompat:appcompat:1.6.0' + api 'com.google.android.material:material:1.7.0' + api 'com.squareup.okhttp3:okhttp:4.10.0' api 'org.jsoup:jsoup:1.11.3' } diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml index d691409e..85a377c8 100644 --- a/library/src/main/AndroidManifest.xml +++ b/library/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - + + diff --git a/library/src/main/java/com/github/javiersantos/appupdater/AppUpdater.java b/library/src/main/java/com/github/javiersantos/appupdater/AppUpdater.java index d98ed887..2281c79f 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/AppUpdater.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/AppUpdater.java @@ -3,14 +3,14 @@ import android.app.Activity; import android.content.Context; import android.content.DialogInterface; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.design.widget.Snackbar; -import android.support.v7.app.AlertDialog; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; +import androidx.appcompat.app.AlertDialog; + import com.github.javiersantos.appupdater.enums.AppUpdaterError; import com.github.javiersantos.appupdater.enums.Display; import com.github.javiersantos.appupdater.enums.Duration; @@ -18,6 +18,7 @@ import com.github.javiersantos.appupdater.interfaces.IAppUpdater; import com.github.javiersantos.appupdater.objects.GitHub; import com.github.javiersantos.appupdater.objects.Update; +import com.google.android.material.snackbar.Snackbar; public class AppUpdater implements IAppUpdater { private Context context; @@ -56,6 +57,8 @@ public AppUpdater(Context context) { this.btnDismiss = context.getResources().getString(R.string.appupdater_btn_dismiss); this.btnDisable = context.getResources().getString(R.string.appupdater_btn_disable); this.isDialogCancelable = true; + + new Update().resetStaticValues(); //reset the values } @Override @@ -83,13 +86,13 @@ public AppUpdater setGitHubUserAndRepo(@NonNull String user, @NonNull String rep } @Override - public AppUpdater setUpdateXML(@NonNull String xmlUrl) { + public AppUpdater setUpdateXML(@NonNull String xmlUrl) { //same method as setUpdateJSON this.xmlOrJsonUrl = xmlUrl; return this; } @Override - public AppUpdater setUpdateJSON(@NonNull String jsonUrl) { + public AppUpdater setUpdateJSON(@NonNull String jsonUrl) { //same method as setUpdateXML this.xmlOrJsonUrl = jsonUrl; return this; } @@ -319,6 +322,19 @@ public AppUpdater setCancelable(Boolean isDialogCancelable) { return this; } + @Override + public AppUpdater setWebviewChangelog(Boolean useWebview) { + new Update().setwebview(useWebview); + return this; + } + + @Override + public AppUpdater setWebviewChangelog(Boolean useWebview, String changelogURL) { + new Update().setwebview(useWebview); + new Update().setChangelogUrl(changelogURL); + return this; + } + @Override public AppUpdater init() { start(); @@ -343,7 +359,7 @@ public void onSuccess(Update update) { final DialogInterface.OnClickListener updateClickListener = btnUpdateClickListener == null ? new UpdateClickListener(context, updateFrom, update.getUrlToDownload()) : btnUpdateClickListener; final DialogInterface.OnClickListener disableClickListener = btnDisableClickListener == null ? new DisableClickListener(context) : btnDisableClickListener; - alertDialog = UtilsDisplay.showUpdateAvailableDialog(context, titleUpdate, getDescriptionUpdate(context, update, Display.DIALOG), btnDismiss, btnUpdate, btnDisable, updateClickListener, btnDismissClickListener, disableClickListener); + alertDialog = UtilsDisplay.showUpdateAvailableDialog(context, titleUpdate, getDescriptionUpdate(context, update, Display.DIALOG), btnDismiss, btnUpdate, btnDisable, updateClickListener, btnDismissClickListener, disableClickListener, update.useWebview()); alertDialog.setCancelable(isDialogCancelable); alertDialog.show(); break; @@ -413,8 +429,10 @@ private String getDescriptionUpdate(Context context, Update update, Display disp if (descriptionUpdate == null || TextUtils.isEmpty(descriptionUpdate)) { switch (display) { case DIALOG: - if (update.getReleaseNotes() != null && !TextUtils.isEmpty(update.getReleaseNotes())) { - if (TextUtils.isEmpty(descriptionUpdate)) + if(update.getChangelogUrl() != null && !TextUtils.isEmpty(update.getChangelogUrl()) && update.useWebview()) { + return update.getChangelogUrl(); + }else if (update.getReleaseNotes() != null && !TextUtils.isEmpty(update.getReleaseNotes())) { + if (TextUtils.isEmpty(descriptionUpdate)) //w return update.getReleaseNotes(); else return String.format(context.getResources().getString(R.string.appupdater_update_available_description_dialog_before_release_notes), update.getLatestVersion(), update.getReleaseNotes()); diff --git a/library/src/main/java/com/github/javiersantos/appupdater/AppUpdaterUtils.java b/library/src/main/java/com/github/javiersantos/appupdater/AppUpdaterUtils.java index 4b9f22eb..99de0c38 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/AppUpdaterUtils.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/AppUpdaterUtils.java @@ -1,7 +1,7 @@ package com.github.javiersantos.appupdater; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.github.javiersantos.appupdater.enums.AppUpdaterError; import com.github.javiersantos.appupdater.enums.UpdateFrom; diff --git a/library/src/main/java/com/github/javiersantos/appupdater/ParserJSON.java b/library/src/main/java/com/github/javiersantos/appupdater/ParserJSON.java index 98d08d1f..e0d9932c 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/ParserJSON.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/ParserJSON.java @@ -1,5 +1,6 @@ package com.github.javiersantos.appupdater; +import android.text.TextUtils; import android.util.Log; import com.github.javiersantos.appupdater.objects.Update; @@ -7,6 +8,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import org.w3c.dom.Text; import java.io.BufferedReader; import java.io.IOException; @@ -24,6 +26,7 @@ class ParserJSON { private static final String KEY_LATEST_VERSION_CODE = "latestVersionCode"; private static final String KEY_RELEASE_NOTES = "releaseNotes"; private static final String KEY_URL = "url"; + private static final String KEY_CHANGELOG_URL = "urlChangelog"; public ParserJSON(String url) { try { @@ -34,7 +37,7 @@ public ParserJSON(String url) { } - public Update parse(){ + public Update parse() { try { JSONObject json = readJsonFromUrl(); @@ -42,6 +45,14 @@ public Update parse(){ update.setLatestVersion(json.getString(KEY_LATEST_VERSION).trim()); update.setLatestVersionCode(json.optInt(KEY_LATEST_VERSION_CODE)); JSONArray releaseArr = json.optJSONArray(KEY_RELEASE_NOTES); + + if(update.useWebview() && (update.getChangelogUrl() == null || TextUtils.isEmpty(update.getChangelogUrl()))) { + String changelogUrl = json.getString(KEY_CHANGELOG_URL); + if (changelogUrl != null) { + update.setChangelogUrl(changelogUrl); + } + } + if (releaseArr != null) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < releaseArr.length(); ++i) { @@ -51,6 +62,7 @@ public Update parse(){ } update.setReleaseNotes(builder.toString()); } + URL url = new URL(json.getString(KEY_URL).trim()); update.setUrlToDownload(url); return update; diff --git a/library/src/main/java/com/github/javiersantos/appupdater/ParserXML.java b/library/src/main/java/com/github/javiersantos/appupdater/ParserXML.java index d900d831..54746dec 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/ParserXML.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/ParserXML.java @@ -1,6 +1,6 @@ package com.github.javiersantos.appupdater; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.Log; import com.github.javiersantos.appupdater.objects.Update; diff --git a/library/src/main/java/com/github/javiersantos/appupdater/UtilsDisplay.java b/library/src/main/java/com/github/javiersantos/appupdater/UtilsDisplay.java index b2da8417..1e864ef3 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/UtilsDisplay.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/UtilsDisplay.java @@ -7,28 +7,42 @@ import android.content.Context; import android.content.DialogInterface; import android.media.RingtoneManager; -import android.support.design.widget.Snackbar; -import android.support.v4.app.NotificationCompat; -import android.support.v7.app.AlertDialog; + +import androidx.appcompat.app.AlertDialog; +import androidx.core.app.NotificationCompat; import android.view.View; +import android.webkit.WebView; +import android.webkit.WebViewClient; import com.github.javiersantos.appupdater.enums.UpdateFrom; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.google.android.material.snackbar.Snackbar; import java.net.URL; class UtilsDisplay { - static AlertDialog showUpdateAvailableDialog(final Context context, String title, String content, String btnNegative, String btnPositive, String btnNeutral, final DialogInterface.OnClickListener updateClickListener, final DialogInterface.OnClickListener dismissClickListener, final DialogInterface.OnClickListener disableClickListener) { - return new AlertDialog.Builder(context) + static AlertDialog showUpdateAvailableDialog(final Context context, String title, String content, String btnNegative, String btnPositive, String btnNeutral, final DialogInterface.OnClickListener updateClickListener, final DialogInterface.OnClickListener dismissClickListener, final DialogInterface.OnClickListener disableClickListener, Boolean useWebview) { + MaterialAlertDialogBuilder alertDialog = new MaterialAlertDialogBuilder(context) .setTitle(title) - .setMessage(content) .setPositiveButton(btnPositive, updateClickListener) .setNegativeButton(btnNegative, dismissClickListener) - .setNeutralButton(btnNeutral, disableClickListener).create(); + .setNeutralButton(btnNeutral, disableClickListener); + + if(useWebview) { + WebView webView = new WebView(context); + webView.setWebViewClient(new WebViewClient()); + webView.loadUrl(content); + alertDialog.setView(webView); + }else{ + alertDialog.setMessage(content); + } + + return alertDialog.create(); } static AlertDialog showUpdateNotAvailableDialog(final Context context, String title, String content) { - return new AlertDialog.Builder(context) + return new MaterialAlertDialogBuilder(context) .setTitle(title) .setMessage(content) .setPositiveButton(context.getResources().getString(android.R.string.ok), new DialogInterface.OnClickListener() { diff --git a/library/src/main/java/com/github/javiersantos/appupdater/interfaces/IAppUpdater.java b/library/src/main/java/com/github/javiersantos/appupdater/interfaces/IAppUpdater.java index e3112da7..d386edfe 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/interfaces/IAppUpdater.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/interfaces/IAppUpdater.java @@ -1,9 +1,9 @@ package com.github.javiersantos.appupdater.interfaces; import android.content.DialogInterface; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; import com.github.javiersantos.appupdater.AppUpdater; import com.github.javiersantos.appupdater.DisableClickListener; @@ -365,6 +365,23 @@ public interface IAppUpdater { */ AppUpdater setCancelable(Boolean isCancelable); + /** + * Use Webview in the update dialog to + * display changelog webpages + * @param useWebview true to use webview + * @return this + */ + AppUpdater setWebviewChangelog(Boolean useWebview); + + /** + * Use Webview in the update dialog to + * display changelog webpages + * @param useWebview true to use webview + * @param changelogURL url to the changelog webpage + * @return this + */ + AppUpdater setWebviewChangelog(Boolean useWebview, String changelogURL); + /** * Execute AppUpdater in background. * diff --git a/library/src/main/java/com/github/javiersantos/appupdater/objects/Update.java b/library/src/main/java/com/github/javiersantos/appupdater/objects/Update.java index 8be8a90b..c542d747 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/objects/Update.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/objects/Update.java @@ -7,6 +7,8 @@ public class Update { private Integer versionCode; private String releaseNotes; private URL apk; + private static String changelogUrl; + private static Boolean useWebviewChangelog = false; public Update() {} @@ -31,6 +33,11 @@ public Update(String latestVersion, Integer latestVersionCode, String releaseNot this.versionCode = latestVersionCode; } + public void resetStaticValues(){ + changelogUrl = null; + useWebviewChangelog = false; + } + public String getLatestVersion() { return version; } @@ -55,6 +62,22 @@ public void setReleaseNotes(String releaseNotes) { this.releaseNotes = releaseNotes; } + public String getChangelogUrl() { + return changelogUrl; + } + + public void setwebview(Boolean useWebview){ + useWebviewChangelog = useWebview; + } + + public boolean useWebview(){ + return useWebviewChangelog; + } + + public void setChangelogUrl(String changelogUrl) { + Update.changelogUrl = changelogUrl; + } + public URL getUrlToDownload() { return apk; } diff --git a/library/src/main/java/com/github/javiersantos/appupdater/objects/Version.java b/library/src/main/java/com/github/javiersantos/appupdater/objects/Version.java index cb10ed5d..96e1d3d1 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/objects/Version.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/objects/Version.java @@ -1,6 +1,6 @@ package com.github.javiersantos.appupdater.objects; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; public class Version implements Comparable { private String version;