package com.github.javiersantos.appupdater; import android.content.Context; import android.os.AsyncTask; import com.github.javiersantos.appupdater.enums.AppUpdaterError; import com.github.javiersantos.appupdater.enums.UpdateFrom; import com.github.javiersantos.appupdater.objects.GitHub; import com.github.javiersantos.appupdater.objects.Update; import java.lang.ref.WeakReference; class UtilsAsync { static class LatestAppVersion extends AsyncTask<Void, Void, Update> { private WeakReference<Context> contextRef; private LibraryPreferences libraryPreferences; private Boolean fromUtils; private UpdateFrom updateFrom; private GitHub gitHub; private String xmlOrJsonUrl; private AppUpdater.LibraryListener listener; public LatestAppVersion(Context context, Boolean fromUtils, UpdateFrom updateFrom, GitHub gitHub, String xmlOrJsonUrl, AppUpdater.LibraryListener listener) { this.contextRef = new WeakReference<>(context); this.libraryPreferences = new LibraryPreferences(context); this.fromUtils = fromUtils; this.updateFrom = updateFrom; this.gitHub = gitHub; this.xmlOrJsonUrl = xmlOrJsonUrl; this.listener = listener; } @Override protected void onPreExecute() { super.onPreExecute(); Context context = contextRef.get(); if (context == null || listener == null) { cancel(true); } else if (UtilsLibrary.isNetworkAvailable(context)) { if (!fromUtils && !libraryPreferences.getAppUpdaterShow()) { cancel(true); } else { if (updateFrom == UpdateFrom.GITHUB && !GitHub.isGitHubValid(gitHub)) { listener.onFailed(AppUpdaterError.GITHUB_USER_REPO_INVALID); cancel(true); } else if (updateFrom == UpdateFrom.XML && (xmlOrJsonUrl == null || !UtilsLibrary.isStringAnUrl(xmlOrJsonUrl))) { listener.onFailed(AppUpdaterError.XML_URL_MALFORMED); cancel(true); } else if (updateFrom == UpdateFrom.JSON && (xmlOrJsonUrl == null || !UtilsLibrary.isStringAnUrl(xmlOrJsonUrl))) { listener.onFailed(AppUpdaterError.JSON_URL_MALFORMED); cancel(true); } } } else { listener.onFailed(AppUpdaterError.NETWORK_NOT_AVAILABLE); cancel(true); } } @Override protected Update doInBackground(Void... voids) { if (updateFrom == UpdateFrom.XML || updateFrom == UpdateFrom.JSON) { Update update = UtilsLibrary.getLatestAppVersion(updateFrom, xmlOrJsonUrl); if (update != null) { return update; } else { AppUpdaterError error = updateFrom == UpdateFrom.XML ? AppUpdaterError.XML_ERROR : AppUpdaterError.JSON_ERROR; if (listener != null) { listener.onFailed(error); } cancel(true); return null; } } else { Context context = contextRef.get(); if (context != null) { return UtilsLibrary.getLatestAppVersionHttp(context, updateFrom, gitHub); } else { cancel(true); return null; } } } @Override protected void onPostExecute(Update update) { super.onPostExecute(update); if (listener != null) { if (UtilsLibrary.isStringAVersion(update.getLatestVersion())) { listener.onSuccess(update); } else { listener.onFailed(AppUpdaterError.UPDATE_VARIES_BY_DEVICE); } } } } }