/*
* Overchan Android (Meta Imageboard Client)
* Copyright (C) 2014-2016 miku-nyan <https://github.com/miku-nyan>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package nya.miku.wishmaster.ui.settings;
import nya.miku.wishmaster.R;
import nya.miku.wishmaster.api.interfaces.CancellableTask;
import nya.miku.wishmaster.common.Async;
import nya.miku.wishmaster.common.Logger;
import nya.miku.wishmaster.http.client.ExtendedHttpClient;
import nya.miku.wishmaster.http.streamer.HttpRequestModel;
import nya.miku.wishmaster.http.streamer.HttpStreamer;
import nya.miku.wishmaster.lib.org_json.JSONObject;
import nya.miku.wishmaster.ui.tabs.UrlHandler;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.widget.Toast;
public class AppUpdatesChecker {
private static final String TAG = "AppUpdatesChecker";
private static final String URL = "http://miku-nyan.github.io/Overchan-Android/data/version.json";
private static final String SITE_URL = "http://miku-nyan.github.io/Overchan-Android/dl.html";
public static void checkForUpdates(final Activity activity) {
final CancellableTask task = new CancellableTask.BaseCancellableTask();
final ProgressDialog progressDialog = new ProgressDialog(activity);
progressDialog.setMessage(activity.getString(R.string.app_update_checking));
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
task.cancel();
}
});
progressDialog.show();
Async.runAsync(new Runnable() {
@Override
public void run() {
JSONObject response;
try {
ExtendedHttpClient httpClient = new ExtendedHttpClient(null);
HttpRequestModel request = HttpRequestModel.DEFAULT_GET;
response = HttpStreamer.getInstance().getJSONObjectFromUrl(URL, request, httpClient, null, task, false);
} catch (Exception e) {
response = null;
}
process(response);
}
private void process(final JSONObject result) {
if (task.isCancelled()) return;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (task.isCancelled()) return;
try {
progressDialog.dismiss();
} catch (Exception e) {
Logger.e(TAG, e);
return;
}
try {
if (result == null) throw new Exception();
int newVersion = result.getInt("versionCode");
int currentVersion = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0).versionCode;
if (newVersion > currentVersion) {
String newVersionName = result.getString("description");
DialogInterface.OnClickListener onClickYes = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
UrlHandler.launchExternalBrowser(activity, SITE_URL);
}
};
new AlertDialog.Builder(activity).
setTitle(R.string.app_update_update_available).
setMessage(activity.getString(R.string.app_update_update_dialog_text, newVersionName)).
setPositiveButton(android.R.string.yes, onClickYes).
setNegativeButton(android.R.string.no, null).
show();
} else {
Toast.makeText(activity, R.string.app_update_update_not_required, Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Logger.e(TAG, e);
Toast.makeText(activity, R.string.app_update_update_error, Toast.LENGTH_LONG).show();
}
}
});
}
});
}
}