Progress display
This commit is contained in:
		
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								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. | ||||
| - 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. | ||||
| @@ -65,6 +65,99 @@ public class MainActivity extends Activity | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     class AsyncTaskExport extends AsyncTask<Uri, Integer, Void> | ||||
|     { | ||||
|         String getExportString() | ||||
|         { | ||||
|             List<Map<String,String>> 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("<?xml-stylesheet type=\"text/xsl\" href=\"sms.xsl\"?>"); | ||||
|                 export.append("<smses count=\"" + String.valueOf(response.size()) + "\""); | ||||
|                 export.append(" backup_set=\"" + String.valueOf(Calendar.getInstance().getTimeInMillis()) + "\""); | ||||
|                 export.append(" backup_date=\"" + String.valueOf(Calendar.getInstance().getTimeInMillis()) + "\""); | ||||
|                 export.append(" type=\"full\">"); | ||||
|  | ||||
| //                    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("<sms protocol=\"0\""); | ||||
|  | ||||
|                     if(!StringUtils.isEmpty(response.get(i).get("remote_uri"))) | ||||
|                         export.append(" address=\"" + response.get(i).get("remote_uri").replace("tel:", "") + "\""); | ||||
|                     else | ||||
|                         export.append(" address=\"" + response.get(i).get("address") + "\""); | ||||
|  | ||||
|                     export.append( | ||||
|                             " date=\"" + response.get(i).get("date") + "\"" + | ||||
|                                     " 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("</smses>"); | ||||
|                 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<Void, Integer, Void> asyncTaskExport = new AsyncTask<Void, Integer, Void>() | ||||
|                         { | ||||
|                             @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<Uri,Integer,Void> exportTask = new AsyncTaskExport(); | ||||
|                         exportTask.execute(data.getData()); | ||||
|                     } | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     String getExportString(AsyncTask<Void,Integer,Void> asyncTaskReference) | ||||
|     { | ||||
|         List<Map<String,String>> 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("<?xml-stylesheet type=\"text/xsl\" href=\"sms.xsl\"?>"); | ||||
|             export.append("<smses count=\"" + String.valueOf(response.size()) + "\""); | ||||
|             export.append(" backup_set=\"" + String.valueOf(Calendar.getInstance().getTimeInMillis()) + "\""); | ||||
|             export.append(" backup_date=\"" + String.valueOf(Calendar.getInstance().getTimeInMillis()) + "\""); | ||||
|             export.append(" type=\"full\">"); | ||||
|  | ||||
| //                    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("<sms protocol=\"0\""); | ||||
|  | ||||
|                 if(!StringUtils.isEmpty(response.get(i).get("remote_uri"))) | ||||
|                     export.append(" address=\"" + response.get(i).get("remote_uri").replace("tel:", "") + "\""); | ||||
|                 else | ||||
|                     export.append(" address=\"" + response.get(i).get("address") + "\""); | ||||
|  | ||||
|                 export.append( | ||||
|                             " date=\"" + response.get(i).get("date") + "\"" + | ||||
|                             " 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("</smses>"); | ||||
|             return export.toString(); | ||||
|         } | ||||
|  | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     void exportFiles(Uri uriTree, String content) | ||||
|     { | ||||
|         String fileName = "Message_export_" + String.valueOf(Calendar.getInstance().getTimeInMillis()) + ".xml"; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user