Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.58 KB | None | 0 0
  1. import android.content.ContentValues;
  2. import android.content.Context;
  3. import android.database.Cursor;
  4. import android.database.DatabaseUtils;
  5. import android.graphics.Bitmap;
  6. import android.net.Uri;
  7. import android.os.Environment;
  8. import android.provider.MediaStore;
  9. import android.provider.Telephony;
  10.  
  11. import net.fortuna.ical4j.model.Content;
  12.  
  13. import java.io.File;
  14. import java.io.FileNotFoundException;
  15. import java.io.FileOutputStream;
  16. import java.io.IOException;
  17. import java.net.ContentHandler;
  18. import java.util.AbstractMap;
  19. import java.util.ArrayList;
  20. import java.util.Date;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.TreeMap;
  24.  
  25.  
  26. public class MMSReceivedDAOImpl implements SMSReceivedDAO {
  27.  
  28.     private Context mContext;
  29.  
  30.     public MMSReceivedDAOImpl(Context context){
  31.         mContext = context;
  32.     }
  33.  
  34.  
  35.  
  36.     private final MMS createMmsFromCursor(Cursor cursor) {
  37.         MMS mmsReceived;
  38.  
  39.         Long id = cursor.getLong(cursor.getColumnIndex(Telephony.Mms._ID));
  40.         String address = getAdressFromMms(cursor);
  41.         Long timestamp = cursor.getLong(cursor.getColumnIndex(Telephony.Mms.DATE))*1000;
  42.         Integer read = cursor.getInt(cursor.getColumnIndex(Telephony.Mms.READ));
  43.         Map.Entry partValues = getDataFromMms(cursor);
  44.  
  45.         mmsReceived = new MMS();
  46.         mmsReceived.setId(id);
  47.         Date date = new Date(timestamp);
  48.         mmsReceived.setAddress(address);
  49.         mmsReceived.setDate(date);
  50.         mmsReceived.setBody((String) partValues.getValue());
  51.         mmsReceived.setDataUri((Uri) partValues.getKey());
  52.  
  53.         if (read == 0)
  54.             mmsReceived.setRead(false);
  55.         else
  56.             mmsReceived.setRead(true);
  57.  
  58.         return mmsReceived;
  59.     }
  60.  
  61.     private Map.Entry<Uri, String> getDataFromMms(Cursor cursor) {
  62.         int id = cursor.getInt(cursor.getColumnIndex(Telephony.Mms._ID));
  63.         Uri uriMMSPart = Uri.parse("content://mms/part");
  64.  
  65.         Cursor partCur = mContext.getContentResolver().query(uriMMSPart, null, Telephony.Mms.Part.MSG_ID + "=" + id, null, null);
  66.  
  67.         DatabaseUtils.dumpCursor(partCur);
  68.         Uri imgUri = null;
  69.         String body = null;
  70.         partCur.moveToFirst();
  71.         while (!partCur.isAfterLast()) {
  72.             String ct = partCur.getString(partCur.getColumnIndex(Telephony.Mms.Part.CONTENT_TYPE));
  73.             String data = partCur.getString(partCur.getColumnIndex(Telephony.Mms.Part._DATA));
  74.             String text = partCur.getString(partCur.getColumnIndex(Telephony.Mms.Part.TEXT));
  75.             if (ct.equals("image/jpeg")) {
  76.                 String uriImage = "content://media/external/images/media";
  77.                 String[] split_path = data.split("/");
  78.                 String fileName = split_path[split_path.length - 1];
  79.  
  80.                 Cursor crImg = MediaStore.Images.Media.query(mContext.getContentResolver(),
  81.                         MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
  82.                         new String[]{MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA},
  83.                         MediaStore.Images.ImageColumns.TITLE + " = \"" + fileName + "\"", null);
  84.  
  85.                 if(crImg != null){
  86.                     if(crImg.getCount() > 0){
  87.                         crImg.moveToFirst();
  88.                         int id_field = partCur.getColumnIndex("_id");
  89.                         String imageId = String.valueOf(crImg.getInt(id_field));
  90.                         imgUri = Uri.parse(uriImage + "/" + imageId);
  91.                     }
  92.                 }
  93.             }else if(ct.equals("text/plain")){
  94.                 body = text;
  95.             }
  96.             partCur.moveToNext();
  97.         }
  98.  
  99.         return new AbstractMap.SimpleEntry<>(imgUri, body);
  100.     }
  101.  
  102.     private final String getAdressFromMms(Cursor cursor){
  103.         String address = null;
  104.         Long tid = cursor.getLong(cursor.getColumnIndex(Telephony.Mms.THREAD_ID));
  105.  
  106.         Cursor crConvestations = mContext.getContentResolver().query(
  107.                 Telephony.MmsSms.CONTENT_CONVERSATIONS_URI,
  108.                 new String[]{Telephony.TextBasedSmsColumns.ADDRESS},
  109.                 Telephony.BaseMmsColumns._ID + " = " + tid,
  110.                 null,
  111.                 null);
  112.  
  113.         if(crConvestations != null){
  114.             if(crConvestations.getCount() == 1){
  115.                 crConvestations.moveToFirst();
  116.                 address = crConvestations.getString(0);
  117.             }
  118.         }
  119.         return address;
  120.     }
  121.  
  122.     public TreeMap<Long, MMS> getNotReadMMS() {
  123.         TreeMap<Long, MMS> map = new TreeMap<>();
  124.         MMS sms = null;
  125.  
  126.         String sortOrder = "date DESC";
  127.         String whereClause = "read = 0 AND " + Telephony.Mms.CONTENT_LOCATION + " != \"\"";
  128.  
  129.         Cursor crMms = mContext.getContentResolver().query(Telephony.Mms.CONTENT_URI,
  130.                 new String[]{"*"},
  131.                 whereClause,
  132.                 null,
  133.                 sortOrder);
  134.  
  135.         if (crMms != null){
  136.             if(crMms.getCount() > 0 ){
  137.                 crMms.moveToFirst();
  138.                 while (!crMms.isAfterLast()){
  139.                     sms = createMmsFromCursor(crMms);
  140.                     if(sms.getDataUri() != null)
  141.                         map.put(sms.getDate().getTime(), sms);
  142.                     crMms.moveToNext();
  143.                 }
  144.                 crMms.close();
  145.             }
  146.         }
  147.  
  148.         return map;
  149.     }
  150.  
  151.     @Override
  152.     public List<SMSReceived> getNotReadSMS() {
  153.         return null;
  154.     }
  155.  
  156.     @Override
  157.     public List<SMSReceived> getAllInboxSMS() {
  158.         return null;
  159.     }
  160.  
  161.     @Override
  162.     public List<SMSReceived> getNextInboxSMS(SMS sms, Integer number) {
  163.         return null;
  164.     }
  165.  
  166.     @Override
  167.     public List<SMSReceived> getPreviousInboxSMS(SMS sms, Integer number) {
  168.         return null;
  169.     }
  170.  
  171.     @Override
  172.     public List<SMSReceived> getSameInboxSMS(SMS sms, Integer number) {
  173.         return null;
  174.     }
  175.  
  176.     @Override
  177.     public List<SMSReceived> getSMSReceivedByAddress(String address) {
  178.         return null;
  179.     }
  180.  
  181.     @Override
  182.     public void update(SMSReceived sms) {
  183.         ContentValues values = new ContentValues();
  184.         values.put(Telephony.Sms.Inbox.READ, 1);
  185.         String where = Telephony.Mms._ID + " = " + sms.getId().toString();
  186.         mContext.getContentResolver().update(Telephony.Mms.CONTENT_URI, values, where, null);
  187.     }
  188.  
  189.     public void update(SMSReceived sms, ContentValues values) {
  190.         String where = Telephony.Mms._ID + " = " + sms.getId().toString();
  191.         mContext.getContentResolver().update(Telephony.Mms.CONTENT_URI, values, where, null);
  192.     }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement