diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e16f58ac54..dfd4576c40 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -120,9 +120,6 @@
-
-
-
-
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2cff514c5b..1fe12a948d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -352,36 +352,6 @@
Me
-
- Import
- Export
-
-
- Import system SMS database?
- This will import
- messages from the system\'s default SMS database to Signal. If you\'ve previously
- imported the system\'s SMS database, importing again will result in duplicated messages.
-
- Import
- Cancel
- Import plaintext backup?
- This will import
- messages from a plaintext backup. If you\'ve previously imported this backup,
- importing again will result in duplicated messages.
-
- Importing
- Importing plaintext backup...
- No plaintext backup found!
- Error importing backup!
- Import complete!
-
- Signal needs the SMS permission in order to import SMS messages, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"SMS\".
- Signal needs the SMS permission in order to import SMS messages
- Signal needs the Storage permission in order to read from external storage, but it has been permanently denied. Please continue to app settings, select \"Permissions\", then enable \"Storage\".
- Signal needs the Storage permission in order to read from external storage.
- Signal needs the Storage permission in order to write to external storage, but it has been permanently denied. Please continue to app settings, select \"Permissions\", then enable \"Storage\".
- Signal needs the Storage permission in order to write to external storage.
-
Tap and hold to record a voice message, release to send
diff --git a/src/org/thoughtcrime/securesms/ConversationListActivity.java b/src/org/thoughtcrime/securesms/ConversationListActivity.java
index 991c573ab4..53eb4c2f7d 100644
--- a/src/org/thoughtcrime/securesms/ConversationListActivity.java
+++ b/src/org/thoughtcrime/securesms/ConversationListActivity.java
@@ -25,8 +25,6 @@ import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
-import android.text.TextUtils;
-import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -169,7 +167,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
case R.id.menu_settings: handleDisplaySettings(); return true;
case R.id.menu_clear_passphrase: handleClearPassphrase(); return true;
case R.id.menu_mark_all_read: handleMarkAllRead(); return true;
- case R.id.menu_import_export: handleImportExport(); return true;
case R.id.menu_invite: handleInvite(); return true;
case R.id.menu_help: handleHelp(); return true;
}
@@ -225,10 +222,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
startService(intent);
}
- private void handleImportExport() {
- startActivity(new Intent(this, ImportExportActivity.class));
- }
-
@SuppressLint("StaticFieldLeak")
private void handleMarkAllRead() {
new AsyncTask() {
diff --git a/src/org/thoughtcrime/securesms/ImportExportActivity.java b/src/org/thoughtcrime/securesms/ImportExportActivity.java
deleted file mode 100644
index 2924da46ce..0000000000
--- a/src/org/thoughtcrime/securesms/ImportExportActivity.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.thoughtcrime.securesms;
-
-import android.os.Bundle;
-import android.view.MenuItem;
-
-import org.thoughtcrime.securesms.util.DynamicLanguage;
-import org.thoughtcrime.securesms.util.DynamicTheme;
-
-
-public class ImportExportActivity extends PassphraseRequiredActionBarActivity {
-
- private DynamicTheme dynamicTheme = new DynamicTheme();
- private DynamicLanguage dynamicLanguage = new DynamicLanguage();
-
- @Override
- protected void onPreCreate() {
- dynamicTheme.onCreate(this);
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState, boolean ready) {
- assert getSupportActionBar() != null;
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- initFragment(android.R.id.content, new ImportExportFragment(), dynamicLanguage.getCurrentLocale());
- }
-
- @Override
- public void onResume() {
- dynamicTheme.onResume(this);
- super.onResume();
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- super.onOptionsItemSelected(item);
-
- switch (item.getItemId()) {
- case android.R.id.home: finish(); return true;
- }
-
- return false;
- }
-}
diff --git a/src/org/thoughtcrime/securesms/ImportExportFragment.java b/src/org/thoughtcrime/securesms/ImportExportFragment.java
deleted file mode 100644
index ae787a7074..0000000000
--- a/src/org/thoughtcrime/securesms/ImportExportFragment.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package org.thoughtcrime.securesms;
-
-import android.Manifest;
-import android.annotation.SuppressLint;
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.Intent;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.v4.app.Fragment;
-import android.support.v7.app.AlertDialog;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.Toast;
-
-import org.thoughtcrime.securesms.database.NoExternalStorageException;
-import org.thoughtcrime.securesms.database.PlaintextBackupImporter;
-import org.thoughtcrime.securesms.permissions.Permissions;
-import org.thoughtcrime.securesms.service.ApplicationMigrationService;
-
-import java.io.IOException;
-
-
-public class ImportExportFragment extends Fragment {
-
- @SuppressWarnings("unused")
- private static final String TAG = ImportExportFragment.class.getSimpleName();
-
- private static final int SUCCESS = 0;
- private static final int NO_SD_CARD = 1;
- private static final int ERROR_IO = 2;
-
- private ProgressDialog progressDialog;
-
- @Override
- public void onCreate(Bundle bundle) {
- super.onCreate(bundle);
- }
-
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle bundle) {
- View layout = inflater.inflate(R.layout.import_export_fragment, container, false);
- View importSmsView = layout.findViewById(R.id.import_sms );
- View importPlaintextView = layout.findViewById(R.id.import_plaintext_backup);
-
- importSmsView.setOnClickListener(v -> handleImportSms());
- importPlaintextView.setOnClickListener(v -> handleImportPlaintextBackup());
-
- return layout;
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
-
- if (progressDialog != null && progressDialog.isShowing()) {
- progressDialog.dismiss();
- progressDialog = null;
- }
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
- }
-
- @SuppressWarnings("CodeBlock2Expr")
- private void handleImportSms() {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setIconAttribute(R.attr.dialog_info_icon);
- builder.setTitle(getActivity().getString(R.string.ImportFragment_import_system_sms_database));
- builder.setMessage(getActivity().getString(R.string.ImportFragment_this_will_import_messages_from_the_system));
- builder.setPositiveButton(getActivity().getString(R.string.ImportFragment_import), (dialog, which) -> {
- Permissions.with(this)
- .request(Manifest.permission.READ_SMS)
- .ifNecessary()
- .withPermanentDenialDialog(getString(R.string.ImportExportFragment_signal_needs_the_sms_permission_in_order_to_import_sms_messages))
- .onAllGranted(() -> {
- Intent intent = new Intent(getActivity(), ApplicationMigrationService.class);
- intent.setAction(ApplicationMigrationService.MIGRATE_DATABASE);
- getActivity().startService(intent);
-
- Intent nextIntent = new Intent(getActivity(), ConversationListActivity.class);
-
- Intent activityIntent = new Intent(getActivity(), DatabaseMigrationActivity.class);
- activityIntent.putExtra("next_intent", nextIntent);
- getActivity().startActivity(activityIntent);
- })
- .onAnyDenied(() -> Toast.makeText(getContext(), R.string.ImportExportFragment_signal_needs_the_sms_permission_in_order_to_import_sms_messages_toast, Toast.LENGTH_LONG).show())
- .execute();
- });
- builder.setNegativeButton(getActivity().getString(R.string.ImportFragment_cancel), null);
- builder.show();
- }
-
- @SuppressWarnings("CodeBlock2Expr")
- @SuppressLint("InlinedApi")
- private void handleImportPlaintextBackup() {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setIconAttribute(R.attr.dialog_alert_icon);
- builder.setTitle(getActivity().getString(R.string.ImportFragment_import_plaintext_backup));
- builder.setMessage(getActivity().getString(R.string.ImportFragment_this_will_import_messages_from_a_plaintext_backup));
- builder.setPositiveButton(getActivity().getString(R.string.ImportFragment_import), (dialog, which) -> {
- Permissions.with(ImportExportFragment.this)
- .request(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
- .ifNecessary()
- .withPermanentDenialDialog(getString(R.string.ImportExportFragment_signal_needs_the_storage_permission_in_order_to_read_from_external_storage_but_it_has_been_permanently_denied))
- .onAllGranted(() -> new ImportPlaintextBackupTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR))
- .onAnyDenied(() -> Toast.makeText(getContext(), R.string.ImportExportFragment_signal_needs_the_storage_permission_in_order_to_read_from_external_storage, Toast.LENGTH_LONG).show())
- .execute();
- });
- builder.setNegativeButton(getActivity().getString(R.string.ImportFragment_cancel), null);
- builder.show();
- }
-
- @SuppressLint("StaticFieldLeak")
- private class ImportPlaintextBackupTask extends AsyncTask {
-
- @Override
- protected void onPreExecute() {
- progressDialog = ProgressDialog.show(getActivity(),
- getActivity().getString(R.string.ImportFragment_importing),
- getActivity().getString(R.string.ImportFragment_import_plaintext_backup_elipse),
- true, false);
- }
-
- protected void onPostExecute(Integer result) {
- Context context = getActivity();
-
- if (progressDialog != null)
- progressDialog.dismiss();
-
- if (context == null)
- return;
-
- switch (result) {
- case NO_SD_CARD:
- Toast.makeText(context,
- context.getString(R.string.ImportFragment_no_plaintext_backup_found),
- Toast.LENGTH_LONG).show();
- break;
- case ERROR_IO:
- Toast.makeText(context,
- context.getString(R.string.ImportFragment_error_importing_backup),
- Toast.LENGTH_LONG).show();
- break;
- case SUCCESS:
- Toast.makeText(context,
- context.getString(R.string.ImportFragment_import_complete),
- Toast.LENGTH_LONG).show();
- break;
- }
- }
-
- @Override
- protected Integer doInBackground(Void... params) {
- try {
- PlaintextBackupImporter.importPlaintextFromSd(getActivity());
- return SUCCESS;
- } catch (NoExternalStorageException e) {
- Log.w("ImportFragment", e);
- return NO_SD_CARD;
- } catch (IOException e) {
- Log.w("ImportFragment", e);
- return ERROR_IO;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/org/thoughtcrime/securesms/database/PlaintextBackupImporter.java b/src/org/thoughtcrime/securesms/database/PlaintextBackupImporter.java
deleted file mode 100644
index 3b8b357b6d..0000000000
--- a/src/org/thoughtcrime/securesms/database/PlaintextBackupImporter.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.thoughtcrime.securesms.database;
-
-import android.content.Context;
-import android.os.Environment;
-import android.util.Log;
-
-import net.sqlcipher.database.SQLiteDatabase;
-import net.sqlcipher.database.SQLiteStatement;
-
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.util.StorageUtil;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
-
-public class PlaintextBackupImporter {
-
- public static void importPlaintextFromSd(Context context)
- throws NoExternalStorageException, IOException
- {
- Log.w("PlaintextBackupImporter", "importPlaintext()");
- SmsDatabase db = DatabaseFactory.getSmsDatabase(context);
- SQLiteDatabase transaction = db.beginTransaction();
-
- try {
- ThreadDatabase threads = DatabaseFactory.getThreadDatabase(context);
- XmlBackup backup = new XmlBackup(getPlaintextExportFile().getAbsolutePath());
- Set modifiedThreads = new HashSet<>();
- XmlBackup.XmlBackupItem item;
-
- while ((item = backup.getNext()) != null) {
- Recipient recipient = Recipient.from(context, Address.fromExternal(context, item.getAddress()), false);
- long threadId = threads.getThreadIdFor(recipient);
- SQLiteStatement statement = db.createInsertStatement(transaction);
-
- if (item.getAddress() == null || item.getAddress().equals("null"))
- continue;
-
- if (!isAppropriateTypeForImport(item.getType()))
- continue;
-
- addStringToStatement(statement, 1, item.getAddress());
- addNullToStatement(statement, 2);
- addLongToStatement(statement, 3, item.getDate());
- addLongToStatement(statement, 4, item.getDate());
- addLongToStatement(statement, 5, item.getProtocol());
- addLongToStatement(statement, 6, item.getRead());
- addLongToStatement(statement, 7, item.getStatus());
- addTranslatedTypeToStatement(statement, 8, item.getType());
- addNullToStatement(statement, 9);
- addStringToStatement(statement, 10, item.getSubject());
- addStringToStatement(statement, 11, item.getBody());
- addStringToStatement(statement, 12, item.getServiceCenter());
- addLongToStatement(statement, 13, threadId);
- modifiedThreads.add(threadId);
- statement.execute();
- }
-
- for (long threadId : modifiedThreads) {
- threads.update(threadId, true);
- }
-
- Log.w("PlaintextBackupImporter", "Exited loop");
- } catch (XmlPullParserException e) {
- Log.w("PlaintextBackupImporter", e);
- throw new IOException("XML Parsing error!");
- } finally {
- db.endTransaction(transaction);
- }
- }
-
- private static File getPlaintextExportFile() throws NoExternalStorageException {
- File backup = new File(StorageUtil.getLegacyBackupDirectory(), "SignalPlaintextBackup.xml");
- File oldBackup = new File(Environment.getExternalStorageDirectory(), "TextSecurePlaintextBackup.xml");
-
- return !backup.exists() && oldBackup.exists() ? oldBackup : backup;
- }
-
- @SuppressWarnings("SameParameterValue")
- private static void addTranslatedTypeToStatement(SQLiteStatement statement, int index, int type) {
- statement.bindLong(index, SmsDatabase.Types.translateFromSystemBaseType(type));
- }
-
- private static void addStringToStatement(SQLiteStatement statement, int index, String value) {
- if (value == null || value.equals("null")) statement.bindNull(index);
- else statement.bindString(index, value);
- }
-
- private static void addNullToStatement(SQLiteStatement statement, int index) {
- statement.bindNull(index);
- }
-
- private static void addLongToStatement(SQLiteStatement statement, int index, long value) {
- statement.bindLong(index, value);
- }
-
- private static boolean isAppropriateTypeForImport(long theirType) {
- long ourType = SmsDatabase.Types.translateFromSystemBaseType(theirType);
-
- return ourType == MmsSmsColumns.Types.BASE_INBOX_TYPE ||
- ourType == MmsSmsColumns.Types.BASE_SENT_TYPE ||
- ourType == MmsSmsColumns.Types.BASE_SENT_FAILED_TYPE;
- }
-}