From 9e724edb42d8cb0fa8745f88a80d914df09f4ff6 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Tue, 31 May 2016 21:29:45 +0200 Subject: complete backup importer --- .../conversations/ui/ConversationActivity.java | 9 ++- .../eu/siacs/conversations/ui/WelcomeActivity.java | 91 ++++++++++++++-------- src/main/res/values-de/strings.xml | 3 + src/main/res/values/strings.xml | 7 +- 4 files changed, 72 insertions(+), 38 deletions(-) (limited to 'src') 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 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/WelcomeActivity.java b/src/main/java/eu/siacs/conversations/ui/WelcomeActivity.java index 55bb7140f..3e35bd48c 100644 --- a/src/main/java/eu/siacs/conversations/ui/WelcomeActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/WelcomeActivity.java @@ -4,10 +4,14 @@ 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; @@ -18,43 +22,26 @@ 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); - boolean dbExist = checkDatabase(); - boolean backup_existing = false; + //check if there is a backed up database -- if (dbExist) { - //copy db from public storage to private storage backup_existing = true; - } else { - //if copy fails, show dialog - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage(R.string.import_failed) - .setCancelable(false) - .setPositiveButton(R.string.create_account, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - Intent intent = new Intent(WelcomeActivity.this, MagicCreateActivity.class); - intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - startActivity(intent); - } - }) - .setNegativeButton(R.string.use_existing_accout, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - startActivity(new Intent(WelcomeActivity.this, EditAccountActivity.class)); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - //throw new Error("Error copying database"); } final Button ImportDatabase = (Button) findViewById(R.id.import_database); @@ -68,19 +55,11 @@ public class WelcomeActivity extends Activity { ImportDatabase.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - //ToDo add import DB from local storage to system storage and wait until copy is complete try { ImportDatabase(); } catch (IOException e) { e.printStackTrace(); } - //ask user to uninstall old eu.siacs.conversations before restart - - //restart app - Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName()); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); } }); @@ -112,6 +91,7 @@ public class WelcomeActivity extends Activity { 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. } @@ -139,12 +119,61 @@ public class WelcomeActivity extends Activity { 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 packages; + PackageManager pm; + pm = getPackageManager(); + packages = pm.getInstalledApplications(0); + for (ApplicationInfo packageInfo : packages) { + if (packageInfo.packageName.equals(targetPackage)) return true; + } + return false; + } } diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml index f5226722e..e9e8d95b2 100644 --- a/src/main/res/values-de/strings.xml +++ b/src/main/res/values-de/strings.xml @@ -610,5 +610,8 @@ Registrierung fehlgeschlagen: Bitte später versuchen Nachricht an %s senden Konferenz beitreten… + Backup importieren + Es wurde ein Backup gefunden, welches importiert werden kann.\nMöglicherweise wirst du gefragt, ob du eine ältere Version oder Conversations deinstallieren möchtest und dein Messenger startet während des Importvorgangs neu. Soll das Backup importiert werden? + Es ist eine alte Version von Pix-Art Messenger oder Conversations installiert. Falls du einen alten Pix-Art Messenger installiert hast, solltest du diesen deinstallieren. Nach der Deinstallation, solltest du erneut auf \'Backup importieren\' klicken, damit deine Daten in die neue Version importiert werden. diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index b71122003..aec0e3a43 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -642,8 +642,9 @@ Subject Choose participants Creating conference… - There is a backup on your device. Shall the backup be imported? - import backup - The import has failed + There is a backup on your device which can be imported.\nPossibly you will be asked to uninstall the old version or Conversations and your Messenger will be restarted during backup process. Shall the backup be imported? + Import backup + There is an old version of Pix-Art Messenger or Conversations installed. If you have an old Pix-Art Messenger installed, you should uninstall this version. After uninstalled the old versoin, you should choose \'import backup\' again and we will import your data to the new version. + You -- cgit v1.2.3