package org.indywidualni.fblite.util; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.net.Uri; import android.os.AsyncTask; import android.preference.PreferenceManager; import android.util.Log; import android.view.Gravity; import android.view.View; import com.devspark.appmsg.AppMsg; import org.indywidualni.fblite.BuildConfig; import org.indywidualni.fblite.R; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.net.HttpURLConnection; import java.net.URL; public class CheckUpdatesTask extends AsyncTask<Void, Void, String> { public static final String TAG = "CheckUpdatesTask"; private static final String URL = "https://raw.githubusercontent.com/indywidualny/FaceSlim/master/VERSION"; private static final String NOTES = "https://github.com/indywidualny/FaceSlim/releases/latest"; private static final int CURRENT_VERSION = BuildConfig.VERSION_CODE; private Activity activity; private SharedPreferences preferences; public CheckUpdatesTask(Activity activity) { this.activity = activity; preferences = PreferenceManager.getDefaultSharedPreferences(activity); } @Override protected String doInBackground(Void... ignored) { try { return downloadUrl(URL); } catch (IOException e) { return ""; } } @Override protected void onPostExecute(String result) { try { result = result.trim(); String[] parts = result.split(":"); if (!parts[0].isEmpty() && !parts[1].isEmpty() && Integer.valueOf(parts[0]) > CURRENT_VERSION) { // there's a new version AppMsg appMsg = AppMsg.makeText(activity, activity.getString(R.string.new_version_detected) + " (" + parts[1] + ")", new AppMsg.Style(AppMsg.LENGTH_LONG, R.color.colorAccent)); appMsg.setLayoutGravity(Gravity.TOP); appMsg.setDuration(8000); // 8 seconds appMsg.getView().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(NOTES))); } }); if (preferences.getBoolean("transparent_nav", false) && activity.getResources() .getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { appMsg.setLayoutParams(Dimension.getParamsAppMsg(activity)); } appMsg.show(); } if (!parts[0].isEmpty()) preferences.edit().putLong("latest_update_check", System.currentTimeMillis()).apply(); } catch (Exception e) { Log.e(TAG, "Sad face... Error", e); } finally { activity = null; preferences = null; } } private String downloadUrl(String myUrl) throws IOException { InputStream is = null; int len = 25; try { URL url = new URL(myUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000 /* milliseconds */); conn.setConnectTimeout(15000 /* milliseconds */); conn.setRequestMethod("GET"); conn.setDoInput(true); // Starts the query conn.connect(); int response = conn.getResponseCode(); Log.d(TAG, "The response is: " + response); is = conn.getInputStream(); // Convert the InputStream into a string return readIt(is, len); } finally { if (is != null) { try { is.close(); } catch (IOException ignore) {} } } } private String readIt(InputStream stream, int len) throws IOException { // Example: 042:2.8.0 Reader reader; reader = new InputStreamReader(stream, "UTF-8"); char[] buffer = new char[len]; reader.read(buffer); return new String(buffer); } }