diff --git a/README.md b/README.md index 8520250..ebe1cb6 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,13 @@ Unfortunately SMS BR is not able to export this kind of messages (as of Septembe I didn't want to reinvent the wheel - there are already enough backup/restore apps for SMS and MMS. Instead I just wanted to make an app that was able to export the RCS messages, too. Preferably it should be a format that SMS BR could then import. ## So if you're interested: -1. Backup your SMS and MMS messages with another program. +1. Backup your SMS and MMS messages with another program, e.g. SMS BR 2. Import them on the target phone. -3. Export the RCS using this app. -4. Import those on the new phone as well. +3. Export the RCS messages using this app. +4. Import those on the new phone as well, e.g. with SMS BR. ## Remarks: -- Technically the RCS will be converted to SMS messages. -- This program has only been tested with text messages. I don't know if images, etc. can be exported as well. \ No newline at end of file +- This program cannot IMport anything, just export. +- Technically the RCS messages will be converted to SMS messages. +- This program has only been tested with text messages. I don't know if images, etc. can be exported as well. +- Because I don't see any real value in RCS messages over SMS, I deactivated advanced messaging in my SMS app. I encourage you to consider doing the same. \ No newline at end of file diff --git a/app/src/main/java/de/server47/messageexport/MainActivity.java b/app/src/main/java/de/server47/messageexport/MainActivity.java index 2f7fb23..f2d7b52 100644 --- a/app/src/main/java/de/server47/messageexport/MainActivity.java +++ b/app/src/main/java/de/server47/messageexport/MainActivity.java @@ -65,6 +65,99 @@ public class MainActivity extends Activity }); } + class AsyncTaskExport extends AsyncTask + { + String getExportString() + { + List> response; + + if(rbSms.isChecked()) + response = readMessages(typeSMS); + else if(rbMms.isChecked()) + response = readMessages(typeMMS); + else + response = readMessages(typeRCS); + + if(response.size() > 0) + { + messageCount = response.size(); + + publishProgress((int)Math.round(messageCount/response.size())); + + StringBuilder export = new StringBuilder(); + + export.append(""); + export.append(""); + +// 05.05.2001 19:15:00 + String pattern = "dd.MM.yyyy H:m:s"; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); + + for(int i = 0; i < response.size(); i++) + { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(Long.parseLong(response.get(i).get("date"))); + + /* + type: 1 = inbound + type: 2 = outbound + */ + + export.append("" + ); + } + + export.append(""); + return export.toString(); + } + + return null; + } + + @Override + protected Void doInBackground(Uri... uriTree) + { + String dataToWrite = getExportString(); + if(!StringUtils.isEmpty(dataToWrite)) + exportFiles(uriTree[0], dataToWrite); + else + Toast.makeText(MainActivity.this, "Error reading messages. Can\'t export.", Toast.LENGTH_SHORT).show(); + + return null; + } + + @Override + protected void onProgressUpdate(Integer... values) + { + super.onProgressUpdate(values); + pbStatus.setProgress(values[0]); + } + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { @@ -77,107 +170,14 @@ public class MainActivity extends Activity case requestCodeExport: if (resultCode == RESULT_OK) { - AsyncTask asyncTaskExport = new AsyncTask() - { - @Override - protected Void doInBackground(Void... voids) - { - Uri uriTree = data.getData(); - String dataToWrite = getExportString(); - if(!StringUtils.isEmpty(dataToWrite)) - exportFiles(uriTree, dataToWrite); - else - Toast.makeText(MainActivity.this, "Error reading messages. Can\'t export.", Toast.LENGTH_SHORT).show(); - - return null; - } - - @Override - protected void onProgressUpdate(Integer... values) - { - super.onProgressUpdate(values); - pbStatus.setProgress(values[0]); - } - }; - - asyncTaskExport.execute(); + AsyncTask exportTask = new AsyncTaskExport(); + exportTask.execute(data.getData()); } break; } } } - String getExportString(AsyncTask asyncTaskReference) - { - List> response; - - if(rbSms.isChecked()) - response = readMessages(typeSMS); - else if(rbMms.isChecked()) - response = readMessages(typeMMS); - else - response = readMessages(typeRCS); - - if(response.size() > 0) - { - messageCount = response.size(); - - asyncTaskReference.publishProgress((int)Math.round(messageCount/response.size())); - - StringBuilder export = new StringBuilder(); - - export.append(""); - export.append(""); - -// 05.05.2001 19:15:00 - String pattern = "dd.MM.yyyy H:m:s"; - SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); - - for(int i = 0; i < response.size(); i++) - { - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(Long.parseLong(response.get(i).get("date"))); - - /* - type: 1 = inbound - type: 2 = outbound - */ - - export.append("" - ); - } - - export.append(""); - return export.toString(); - } - - return null; - } - void exportFiles(Uri uriTree, String content) { String fileName = "Message_export_" + String.valueOf(Calendar.getInstance().getTimeInMillis()) + ".xml";