aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/ui
diff options
context:
space:
mode:
authorChristian S <christian@pix-art.de>2015-09-06 14:29:53 +0200
committerChristian S <christian@pix-art.de>2015-09-06 14:30:01 +0200
commit918926e6cf686d310072d4eab1caa5d17f3bea38 (patch)
treeef0c639c9955e1ab1ef9cb2606495fa09d7c5f56 /src/main/java/eu/siacs/conversations/ui
parentfe730fca1b06a2c02b5161716f22fdf13286408e (diff)
version 1.6.9 beta
* in app updater
Diffstat (limited to 'src/main/java/eu/siacs/conversations/ui')
-rw-r--r--src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java197
-rw-r--r--src/main/java/eu/siacs/conversations/ui/XmppActivity.java3
2 files changed, 200 insertions, 0 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java b/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java
new file mode 100644
index 000000000..9260ee186
--- /dev/null
+++ b/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java
@@ -0,0 +1,197 @@
+package eu.siacs.conversations.ui;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.DownloadManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
+import android.widget.TextView;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import eu.siacs.conversations.Config;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.services.UpdaterWebService;
+
+public class UpdaterActivity extends Activity {
+
+ private static final String LOG_TAG = Config.LOGTAG + "AppUpgrade";
+ private MyWebReceiver receiver;
+ private int versionCode = 0;
+ String appURI = "";
+
+ private DownloadManager downloadManager;
+ private long downloadReference;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_updater);
+
+ //Overall information about the contents of a package
+ //This corresponds to all of the information collected from AndroidManifest.xml.
+ PackageInfo pInfo = null;
+ try {
+ pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
+ }
+ catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ //get the app version Name for display
+ String version = pInfo.versionName;
+ //get the app version Code for checking
+ versionCode = pInfo.versionCode;
+ //display the current version in a TextView
+ TextView currentversionText = (TextView) findViewById(R.id.current_versionName);
+ currentversionText.setText(getText(R.string.current_version) + version);
+
+ //Broadcast receiver for our Web Request
+ IntentFilter filter = new IntentFilter(MyWebReceiver.PROCESS_RESPONSE);
+ filter.addCategory(Intent.CATEGORY_DEFAULT);
+ receiver = new MyWebReceiver();
+ registerReceiver(receiver, filter);
+
+ //Broadcast receiver for the download manager
+ filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
+ registerReceiver(downloadReceiver, filter);
+
+ //check of internet is available before making a web service request
+ if(isNetworkAvailable(this)){
+ Intent msgIntent = new Intent(this, UpdaterWebService.class);
+ msgIntent.putExtra(UpdaterWebService.REQUEST_STRING, Config.UPDATE_URL);
+ startService(msgIntent);
+ }
+
+ }
+
+ /*@Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.activity_main, menu);
+ return true;
+ }
+*/
+ @Override
+ public void onDestroy() {
+ //unregister your receivers
+ this.unregisterReceiver(receiver);
+ this.unregisterReceiver(downloadReceiver);
+ super.onDestroy();
+ }
+
+ //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 (int i = 0; i < info.length; i++) {
+ Log.v(LOG_TAG, String.valueOf(i));
+ if (info[i].getState() == NetworkInfo.State.CONNECTED) {
+ Log.v(LOG_TAG, "connected!");
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ //broadcast receiver to get notification when the web request finishes
+ public class MyWebReceiver extends BroadcastReceiver {
+
+ public static final String PROCESS_RESPONSE = "eu.siacs.conversations.intent.action.PROCESS_RESPONSE";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ String reponseMessage = intent.getStringExtra(UpdaterWebService.RESPONSE_MESSAGE);
+ Log.v(LOG_TAG, reponseMessage);
+
+ //parse the JSON response
+ JSONObject responseObj;
+ try {
+ responseObj = new JSONObject(reponseMessage);
+ boolean success = responseObj.getBoolean("success");
+ //if the reponse was successful check further
+ if(success){
+ //get the latest version from the JSON string
+ int latestVersionCode = responseObj.getInt("latestVersionCode");
+ String latestVersion = responseObj.getString("latestVersion");
+ //display the new version in a TextView
+ TextView versionText = (TextView) findViewById(R.id.versionName);
+ versionText.setText(getText(R.string.new_version) + latestVersion);
+ //get the lastest application URI from the JSON string
+ appURI = responseObj.getString("appURI");
+ //check if we need to upgrade?
+ if(latestVersionCode > versionCode){
+ //oh yeah we do need an upgrade, let the user know send an alert message
+ AlertDialog.Builder builder = new AlertDialog.Builder(UpdaterActivity.this);
+ builder.setMessage(R.string.update_available)
+ .setPositiveButton(R.string.update, new DialogInterface.OnClickListener() {
+ //if the user agrees to upgrade
+ public void onClick(DialogInterface dialog, int id) {
+ //start downloading the file using the download manager
+ downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
+ Uri Download_Uri = Uri.parse(appURI);
+ DownloadManager.Request request = new DownloadManager.Request(Download_Uri);
+ request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
+ request.setAllowedOverRoaming(false);
+ request.setTitle("Conversations Update");
+ request.setDestinationInExternalFilesDir(UpdaterActivity.this, Environment.DIRECTORY_DOWNLOADS,"MyAndroidApp.apk");
+ downloadReference = downloadManager.enqueue(request);
+ }
+ })
+ .setNegativeButton(R.string.remind_later, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // User cancelled the dialog
+ }
+ });
+ //show the alert message
+ builder.create().show();
+ }
+
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ }
+
+ //broadcast receiver to get notification about ongoing downloads
+ private BroadcastReceiver downloadReceiver = new BroadcastReceiver() {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ //check if the broadcast message is for our Enqueued download
+ long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
+ if(downloadReference == referenceId){
+
+ Log.v(LOG_TAG, "Downloading of the new app version complete");
+ //start the installation of the latest version
+ Intent installIntent = new Intent(Intent.ACTION_VIEW);
+ installIntent.setDataAndType(downloadManager.getUriForDownloadedFile(downloadReference),
+ "application/vnd.android.package-archive");
+ installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(installIntent);
+
+ }
+ }
+ };
+
+} \ No newline at end of file
diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java
index aa5812b6a..3d4371129 100644
--- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java
@@ -330,6 +330,9 @@ public abstract class XmppActivity extends Activity {
case R.id.action_settings:
startActivity(new Intent(this, SettingsActivity.class));
break;
+ case R.id.action_check_updates:
+ startActivity(new Intent(this, UpdaterActivity.class));
+ break;
case R.id.action_accounts:
startActivity(new Intent(this, ManageAccountActivity.class));
break;