From 165df24f0caddf36bdd18e444ded1b98d32eaca9 Mon Sep 17 00:00:00 2001 From: Jens Date: Sat, 18 Sep 2021 22:30:39 +0200 Subject: [PATCH] Progress display --- README.md | 12 +- .../server47/messageexport/MainActivity.java | 176 +++++++++--------- 2 files changed, 95 insertions(+), 93 deletions(-) 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,117 +65,117 @@ public class MainActivity extends Activity }); } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) + class AsyncTaskExport extends AsyncTask { - super.onActivityResult(requestCode, resultCode, data); - - if(resultCode == RESULT_OK) + String getExportString() { - switch (requestCode) - { - 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(); - } - break; - } - } - } - - String getExportString(AsyncTask asyncTaskReference) - { - List> response; + List> response; - if(rbSms.isChecked()) - response = readMessages(typeSMS); - else if(rbMms.isChecked()) - response = readMessages(typeMMS); - else - response = readMessages(typeRCS); + if(rbSms.isChecked()) + response = readMessages(typeSMS); + else if(rbMms.isChecked()) + response = readMessages(typeMMS); + else + response = readMessages(typeRCS); - if(response.size() > 0) - { - messageCount = response.size(); + if(response.size() > 0) + { + messageCount = response.size(); - asyncTaskReference.publishProgress((int)Math.round(messageCount/response.size())); + publishProgress((int)Math.round(messageCount/response.size())); - StringBuilder export = new StringBuilder(); + StringBuilder export = new StringBuilder(); - export.append(""); - export.append(""); + export.append(""); + export.append(""); // 05.05.2001 19:15:00 - String pattern = "dd.MM.yyyy H:m:s"; - SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); + 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"))); + 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("" - ); + " type=\"" + response.get(i).get("type") + "\"" + + " subject=\"null\"" + + " body=\"" + StringEscapeUtils.escapeXml11(response.get(i).get("body")).replace("\n", " ") + "\"" + + " toa=\"null\"" + + " sc_toa=\"null\"" + + " service_center=\"null\"" + + " read=\"1\"" + + " status=\"-1\"" + + " locked=\"0\"" + + " date_sent=\"" + response.get(i).get("date_sent") + "\"" + + " sub_id=\"-1\"" + + " readable_date=\"" + simpleDateFormat.format(cal.getTime()) + "\"" + + " contact_name=\"(Unknown)\"/>" + ); + } + + export.append(""); + return export.toString(); } - export.append(""); - return export.toString(); + return null; } - 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) + { + super.onActivityResult(requestCode, resultCode, data); + + if(resultCode == RESULT_OK) + { + switch (requestCode) + { + case requestCodeExport: + if (resultCode == RESULT_OK) + { + AsyncTask exportTask = new AsyncTaskExport(); + exportTask.execute(data.getData()); + } + break; + } + } } void exportFiles(Uri uriTree, String content)