aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/ui/UpdaterActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/pixart/messenger/ui/UpdaterActivity.java')
-rw-r--r--src/main/java/de/pixart/messenger/ui/UpdaterActivity.java420
1 files changed, 0 insertions, 420 deletions
diff --git a/src/main/java/de/pixart/messenger/ui/UpdaterActivity.java b/src/main/java/de/pixart/messenger/ui/UpdaterActivity.java
deleted file mode 100644
index 5c8b105a2..000000000
--- a/src/main/java/de/pixart/messenger/ui/UpdaterActivity.java
+++ /dev/null
@@ -1,420 +0,0 @@
-package de.pixart.messenger.ui;
-
-import android.Manifest;
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.PowerManager;
-import android.support.v4.app.ActivityCompat;
-import android.support.v7.app.AlertDialog;
-import android.util.Log;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.List;
-
-import de.pixart.messenger.Config;
-import de.pixart.messenger.R;
-import de.pixart.messenger.persistance.FileBackend;
-import de.pixart.messenger.services.XmppConnectionService;
-import de.pixart.messenger.utils.WakeLockHelper;
-
-import static de.pixart.messenger.http.HttpConnectionManager.getProxy;
-import static de.pixart.messenger.services.XmppConnectionService.FDroid;
-import static de.pixart.messenger.services.XmppConnectionService.PlayStore;
-
-public class UpdaterActivity extends XmppActivity {
- static final private String FileName = "update.apk";
- String appURI = "";
- String changelog = "";
- Integer filesize = 0;
- String store;
- ProgressDialog mProgressDialog;
- DownloadTask downloadTask;
- TextView textView;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- //set activity
- setContentView(R.layout.activity_updater);
- this.mTheme = findTheme();
- setTheme(this.mTheme);
-
- textView = findViewById(R.id.updater);
-
- mProgressDialog = new ProgressDialog(UpdaterActivity.this) {
- //show warning on back pressed
- @Override
- public void onBackPressed() {
- showCancelDialog();
- }
- };
- mProgressDialog.setMessage(getString(R.string.download_started));
- mProgressDialog.setProgressNumberFormat(null);
- mProgressDialog.setIndeterminate(true);
- mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- mProgressDialog.setCancelable(false);
- mProgressDialog.setCanceledOnTouchOutside(false);
- }
-
- @Override
- protected void refreshUiReal() {
- //ignored
- }
-
- @Override
- protected void onStart() {
- super.onStart();
- this.mTheme = findTheme();
- setTheme(this.mTheme);
- setTitle(getString(R.string.update_service));
- textView.setText(R.string.update_info);
- setSupportActionBar(findViewById(R.id.toolbar));
- configureActionBar(getSupportActionBar());
- if (getIntent() != null && getIntent().getStringExtra("update").equals("PixArtMessenger_UpdateService")) {
- try {
- appURI = getIntent().getStringExtra("url");
- } catch (Exception e) {
- Toast.makeText(getApplicationContext(), getText(R.string.failed), Toast.LENGTH_LONG).show();
- UpdaterActivity.this.finish();
- }
- try {
- changelog = getIntent().getStringExtra("changelog");
- } catch (Exception e) {
- Toast.makeText(getApplicationContext(), getText(R.string.failed), Toast.LENGTH_LONG).show();
- UpdaterActivity.this.finish();
- }
- try {
- store = getIntent().getStringExtra("store");
- } catch (Exception e) {
- store = null;
- }
- //delete old downloaded localVersion files
- File dir = new File(FileBackend.getAppUpdateDirectory());
- if (dir.isDirectory()) {
- String[] children = dir.list();
- for (String aChildren : children) {
- Log.d(Config.LOGTAG, "AppUpdater: delete old update files " + aChildren + " in " + dir);
- new File(dir, aChildren).delete();
- }
- }
-
- //oh yeah we do need an upgrade, let the user know send an alert message
- AlertDialog.Builder builder = new AlertDialog.Builder(UpdaterActivity.this);
- builder.setCancelable(false);
- //open link to changelog
- //if the user agrees to upgrade
- builder.setMessage(getString(R.string.install_update))
- .setPositiveButton(R.string.update, (dialog, id) -> {
- Log.d(Config.LOGTAG, "AppUpdater: downloading " + FileName + " from " + appURI);
- //ask for permissions on devices >= SDK 23
- if (isStoragePermissionGranted() && isNetworkAvailable(getApplicationContext())) {
- //start downloading the file using the download manager
- if (store != null && store.equalsIgnoreCase(PlayStore)) {
- Uri uri = Uri.parse("market://details?id=de.pixart.messenger");
- Intent marketIntent = new Intent(Intent.ACTION_VIEW, uri);
- PackageManager manager = getApplicationContext().getPackageManager();
- List<ResolveInfo> infos = manager.queryIntentActivities(marketIntent, 0);
- if (infos.size() > 0) {
- startActivity(marketIntent);
- overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
- } else {
- uri = Uri.parse("https://jabber.pix-art.de/");
- Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(browserIntent);
- overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
- }
- } else if (store != null && store.equalsIgnoreCase(FDroid)) {
- Uri uri = Uri.parse("https://f-droid.org/de/packages/de.pixart.messenger/");
- Intent marketIntent = new Intent(Intent.ACTION_VIEW, uri);
- PackageManager manager = getApplicationContext().getPackageManager();
- List<ResolveInfo> infos = manager.queryIntentActivities(marketIntent, 0);
- if (infos.size() > 0) {
- startActivity(marketIntent);
- overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
- } else {
- uri = Uri.parse("https://f-droid.org/de/packages/de.pixart.messenger/");
- Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(browserIntent);
- overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
- }
- } else {
- Toast.makeText(getApplicationContext(), getText(R.string.download_started), Toast.LENGTH_LONG).show();
- downloadTask = new DownloadTask(UpdaterActivity.this);
- downloadTask.execute(appURI);
- }
- } else {
- Log.d(Config.LOGTAG, "AppUpdater: failed - has storage permissions " + isStoragePermissionGranted() + " and internet " + isNetworkAvailable(getApplicationContext()));
- }
- })
- .setNeutralButton(R.string.changelog, (dialog, id) -> {
- Uri uri = Uri.parse(Config.CHANGELOG_URL); // missing 'http://' will cause crash
- try {
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- startActivity(intent);
- overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //restart updater to show dialog again after coming back after opening changelog
- recreate();
- }
- })
- .setNegativeButton(R.string.remind_later, (dialog, id) -> {
- // User cancelled the dialog
- UpdaterActivity.this.finish();
- });
- //show the alert message
- builder.create().show();
- } else {
- Toast.makeText(getApplicationContext(), getText(R.string.failed), Toast.LENGTH_LONG).show();
- UpdaterActivity.this.finish();
- }
- }
-
- @Override
- void onBackendConnected() {
- //ignored
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- }
-
- @Override
- public void onSaveInstanceState(Bundle savedInstanceState) {
- super.onSaveInstanceState(savedInstanceState);
- }
-
- @Override
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- }
-
- //check for internet connection
- private boolean isNetworkAvailable(Context context) {
- ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
- if (connectivity != null) {
- NetworkInfo[] info = connectivity.getAllNetworkInfo();
- if (info != null) {
- for (NetworkInfo anInfo : info) {
- if (anInfo.getState() == NetworkInfo.State.CONNECTED) {
- return true;
- }
- }
- }
- }
- return false;
- }
-
- public boolean isStoragePermissionGranted() {
- if (Build.VERSION.SDK_INT >= 23) {
- if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
- == PackageManager.PERMISSION_GRANTED) {
- return true;
- } else {
-
- ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
- return false;
- }
- } else { //permission is automatically granted on sdk<23 upon installation
- return true;
- }
- }
-
- //show warning on back pressed
- @Override
- public void onBackPressed() {
- showCancelDialog();
- }
-
- private void showCancelDialog() {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setMessage(R.string.cancel_update)
- .setCancelable(false)
- .setPositiveButton(R.string.yes, (dialog, id) -> {
- if (downloadTask != null && !downloadTask.getStatus().equals(AsyncTask.Status.FINISHED)) {
- downloadTask.cancel(true);
- }
- if (mProgressDialog.isShowing()) {
- mProgressDialog.dismiss();
- }
- UpdaterActivity.this.finish();
- })
- .setNegativeButton(R.string.no, (dialog, id) -> dialog.cancel());
- AlertDialog alert = builder.create();
- alert.show();
- }
-
- @Override
- public void onPause() {
- super.onPause();
- if (downloadTask != null && !downloadTask.getStatus().equals(AsyncTask.Status.FINISHED)) {
- downloadTask.cancel(true);
- }
- UpdaterActivity.this.finish();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- if (downloadTask != null && !downloadTask.getStatus().equals(AsyncTask.Status.FINISHED)) {
- downloadTask.cancel(true);
- }
- UpdaterActivity.this.finish();
- }
-
- private class DownloadTask extends AsyncTask<String, Integer, String> {
-
- File dir = new File(FileBackend.getAppUpdateDirectory());
- File file = new File(dir, FileName);
- XmppConnectionService xmppConnectionService;
- private Context context;
- private PowerManager.WakeLock mWakeLock;
- private long startTime = 0;
- private boolean mUseTor;
-
- DownloadTask(Context context) {
- this.context = context;
- }
-
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- startTime = System.currentTimeMillis();
- // take CPU lock to prevent CPU from going off if the user
- // presses the power button during download
- PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- if (pm != null) {
- mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, getClass().getName());
- mWakeLock.acquire();
- mUseTor = xmppConnectionService != null && xmppConnectionService.useTorToConnect();
- }
- mProgressDialog.show();
- }
-
- @Override
- protected void onProgressUpdate(Integer... progress) {
- super.onProgressUpdate(progress);
- // if we get here, length is known, now set indeterminate to false
- mProgressDialog.setIndeterminate(false);
- mProgressDialog.setMax(100);
- mProgressDialog.setProgress(progress[0]);
- }
-
- @Override
- protected String doInBackground(String... sUrl) {
- InputStream is = null;
- OutputStream os = null;
- HttpURLConnection connection = null;
- try {
- Log.d(Config.LOGTAG, "AppUpdater: save file to " + file.toString());
- Log.d(Config.LOGTAG, "AppUpdater: download update from url: " + sUrl[0] + " to file name: " + file.toString());
-
- URL url = new URL(sUrl[0]);
-
- if (mUseTor) {
- connection = (HttpURLConnection) url.openConnection(getProxy());
- } else {
- connection = (HttpURLConnection) url.openConnection();
- }
- connection.connect();
-
- // expect HTTP 200 OK, so we don't mistakenly save error report
- // instead of the file
- if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
- Toast.makeText(getApplicationContext(), getText(R.string.failed), Toast.LENGTH_LONG).show();
- return connection.getResponseCode() + ": " + connection.getResponseMessage();
- }
-
- // this will be useful to display download percentage
- // might be -1: server did not report the length
- int fileLength = connection.getContentLength();
-
- // create folders
- File parentDirectory = file.getParentFile();
- if (parentDirectory.mkdirs()) {
- Log.d(Config.LOGTAG, "created " + parentDirectory.getAbsolutePath());
- }
-
- // download the file
- is = connection.getInputStream();
- os = new FileOutputStream(file);
-
- byte data[] = new byte[4096];
- long total = 0;
- int count;
- while ((count = is.read(data)) != -1) {
- // allow canceling with back button
- if (isCancelled()) {
- is.close();
- return "canceled";
- }
- total += count;
- // publishing the progress....
- if (fileLength > 0) // only if total length is known
- publishProgress((int) (total * 100 / fileLength));
- os.write(data, 0, count);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return e.toString();
- } finally {
- try {
- if (os != null)
- os.close();
- if (is != null)
- is.close();
- } catch (IOException ignored) {
- }
-
- if (connection != null)
- connection.disconnect();
- }
- return null;
- }
-
- @Override
- protected void onPostExecute(String result) {
- WakeLockHelper.release(mWakeLock);
- mProgressDialog.dismiss();
- if (result != null) {
- Toast.makeText(getApplicationContext(), getString(R.string.failed), Toast.LENGTH_LONG).show();
- Log.d(Config.LOGTAG, "AppUpdater: failed with " + result);
- UpdaterActivity.this.finish();
- } else {
- Log.d(Config.LOGTAG, "AppUpdater: download ready in " + ((System.currentTimeMillis() - startTime) / 1000) + " sec");
-
- //start the installation of the latest localVersion
- Intent installIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
- installIntent.setDataAndType(FileBackend.getUriForFile(UpdaterActivity.this, file), "application/vnd.android.package-archive");
- installIntent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
- installIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
- installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- installIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- startActivity(installIntent);
- overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
- UpdaterActivity.this.finish();
- }
- }
- }
-}