diff options
author | Christian Schneppe <christian@pix-art.de> | 2016-05-31 21:40:45 +0200 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2016-05-31 21:40:45 +0200 |
commit | 5f8de512f5d14515146d341bc3e0ae0e066837b8 (patch) | |
tree | 87f6b90d606db834f2503549b4c82f18bae1a376 /src/main/java/eu/siacs | |
parent | c23642b8cd2c06c5f3e9cf7f88d31ed5c6f78614 (diff) | |
parent | 9e724edb42d8cb0fa8745f88a80d914df09f4ff6 (diff) |
Merge remote-tracking branch 'refs/remotes/origin/new_version'
Diffstat (limited to 'src/main/java/eu/siacs')
4 files changed, 192 insertions, 5 deletions
diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index f1155b07d..5a7ca7a56 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -51,7 +51,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { private static DatabaseBackend instance = null; - private static final String DATABASE_NAME = "history"; + public static final String DATABASE_NAME = "history"; private static final int DATABASE_VERSION = 27; private static String CREATE_CONTATCS_STATEMENT = "create table " diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java index b8927019f..398ca0a1d 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java @@ -346,7 +346,7 @@ public class ConversationActivity extends XmppActivity } } - public boolean isPackageInstalled(String targetPackage){ + private boolean isPackageInstalled(String targetPackage){ List<ApplicationInfo> packages; PackageManager pm; pm = getPackageManager(); @@ -1280,9 +1280,6 @@ public class ConversationActivity extends XmppActivity if (!isConversationsOverviewVisable() || !isConversationsOverviewHideable()) { sendReadMarkerIfNecessary(getSelectedConversation()); } - - AppUpdate(); - } @Override @@ -1369,6 +1366,10 @@ public class ConversationActivity extends XmppActivity this.mConversationFragment.setupIme(); } + if (xmppConnectionService.getAccounts().size() != 0) { + AppUpdate(); + } + if (this.mPostponedActivityResult != null) { this.onActivityResult(mPostponedActivityResult.first, RESULT_OK, mPostponedActivityResult.second); } diff --git a/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java b/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java index a9adfb174..e1e15452f 100644 --- a/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java @@ -27,9 +27,15 @@ import org.json.JSONException; import org.json.JSONObject; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; +import eu.siacs.conversations.persistance.DatabaseBackend; import eu.siacs.conversations.services.UpdaterWebService; public class UpdaterActivity extends Activity { @@ -94,6 +100,36 @@ public class UpdaterActivity extends Activity { } } + private void ExportDatabase() throws IOException { + + // Get hold of the db: + InputStream myInput = new FileInputStream(this.getDatabasePath(DatabaseBackend.DATABASE_NAME)); + + // Set the output folder on the SDcard + File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pix-Art Messenger/.Database/"); + + // Create the folder if it doesn't exist: + if (!directory.exists()) { + directory.mkdirs(); + } + + // Set the output file stream up: + OutputStream myOutput = new FileOutputStream(directory.getPath() + "/Database.bak"); + + // Transfer bytes from the input file to the output file + byte[] buffer = new byte[1024]; + int length; + while ((length = myInput.read(buffer)) > 0) { + myOutput.write(buffer, 0, length); + } + + // Close and clear the streams + myOutput.flush(); + myOutput.close(); + myInput.close(); + } + + @Override public void onDestroy() { //unregister your receivers @@ -201,6 +237,13 @@ public class UpdaterActivity extends Activity { reponseObj = new JSONObject(responseMessage); boolean success = reponseObj.getBoolean("success"); if (success) { + //start backing up database + try { + ExportDatabase(); + Log.d(Config.LOGTAG,"AppUpdater: Database successfully exported"); + } catch (IOException e) { + e.printStackTrace(); + } //Overall information about the contents of a package //This corresponds to all of the information collected from AndroidManifest.xml. PackageInfo pInfo = null; diff --git a/src/main/java/eu/siacs/conversations/ui/WelcomeActivity.java b/src/main/java/eu/siacs/conversations/ui/WelcomeActivity.java index d4e8fa9f6..3e35bd48c 100644 --- a/src/main/java/eu/siacs/conversations/ui/WelcomeActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/WelcomeActivity.java @@ -1,19 +1,68 @@ package eu.siacs.conversations.ui; import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteException; +import android.net.Uri; import android.os.Bundle; +import android.os.Environment; +import android.util.Log; import android.view.View; import android.widget.Button; +import android.widget.TextView; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.List; + +import eu.siacs.conversations.Config; import eu.siacs.conversations.R; +import eu.siacs.conversations.persistance.DatabaseBackend; public class WelcomeActivity extends Activity { + boolean dbExist = checkDatabase(); + boolean backup_existing = false; + @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.welcome); + + + //check if there is a backed up database -- + if (dbExist) { + backup_existing = true; + } + + final Button ImportDatabase = (Button) findViewById(R.id.import_database); + final TextView ImportText = (TextView) findViewById(R.id.import_text); + + if (backup_existing) { + ImportDatabase.setVisibility(View.VISIBLE); + ImportText.setVisibility(View.VISIBLE); + } + + ImportDatabase.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + ImportDatabase(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + final Button createAccount = (Button) findViewById(R.id.create_account); createAccount.setOnClickListener(new View.OnClickListener() { @Override @@ -33,4 +82,98 @@ public class WelcomeActivity extends Activity { } + private boolean checkDatabase() { + + SQLiteDatabase checkDB = null; + String DB_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pix-Art Messenger/.Database/"; + String DB_NAME = "Database.bak"; + + try { + String myPath = DB_PATH + DB_NAME; + checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); + Log.d(Config.LOGTAG,"Backup found"); + } catch (SQLiteException e) { + //database does't exist yet. + } + + if (checkDB != null) { + checkDB.close(); + } + return checkDB != null ? true : false; + } + + private void ImportDatabase() throws IOException { + + // Set location for the db: + OutputStream myOutput = new FileOutputStream(this.getDatabasePath(DatabaseBackend.DATABASE_NAME)); + + // Set the folder on the SDcard + File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pix-Art Messenger/.Database/"); + + // Set the input file stream up: + InputStream myInput = new FileInputStream(directory.getPath() + "/Database.bak"); + + // Transfer bytes from the input file to the output file + byte[] buffer = new byte[1024]; + int length; + while ((length = myInput.read(buffer)) > 0) { + myOutput.write(buffer, 0, length); + } + Log.d(Config.LOGTAG,"Starting import of backup"); + + // Close and clear the streams + myOutput.flush(); + myOutput.close(); + myInput.close(); + + Log.d(Config.LOGTAG, "New Features - Uninstall old version of Pix-Art Messenger"); + if (isPackageInstalled("eu.siacs.conversations")) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage(R.string.uninstall_app_text) + .setPositiveButton(R.string.uninstall, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialogInterface, int i) { + //start the deinstallation of old version + if (isPackageInstalled("eu.siacs.conversations")) { + Uri packageURI_VR = Uri.parse("package:eu.siacs.conversations"); + Intent uninstallIntent_VR = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI_VR); + if (uninstallIntent_VR.resolveActivity(getPackageManager()) != null) { + startActivity(uninstallIntent_VR); + } + } + } + }) + .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialogInterface, int i) { + Log.d(Config.LOGTAG, "New Features - Uninstall cancled"); + restart(); + } + }); + builder.create().show(); + } else { + restart(); + } + + } + + private void restart() { + //restart app + Log.d(Config.LOGTAG, "Restarting " + getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName())); + Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName()); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + System.exit(0); + } + + private boolean isPackageInstalled(String targetPackage) { + List<ApplicationInfo> packages; + PackageManager pm; + pm = getPackageManager(); + packages = pm.getInstalledApplications(0); + for (ApplicationInfo packageInfo : packages) { + if (packageInfo.packageName.equals(targetPackage)) return true; + } + return false; + } + } |