package org.witness.informacam.intake; import java.util.List; import java.util.Vector; import org.witness.informacam.Debug; import org.witness.informacam.InformaCam; import org.witness.informacam.models.j3m.IDCIMDescriptor; import org.witness.informacam.utils.Constants.App.Storage; import org.witness.informacam.utils.Constants.Logger; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.provider.MediaStore; import android.util.Log; public class DCIMObserver extends BroadcastReceiver { private final static String LOG = "DCIMObserver"; public static IDCIMDescriptor dcimDescriptor; public ComponentName cameraComponent; List<ContentObserver> observers; InformaCam informaCam = InformaCam.getInstance(); Handler h; private Context mContext; private boolean debug = false; public DCIMObserver () {} public DCIMObserver(Context context, String parentId, ComponentName cameraComponent) { mContext = context; this.cameraComponent = cameraComponent; h = new Handler(); observers = new Vector<ContentObserver>(); observers.add(new Observer(h, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)); observers.add(new Observer(h, MediaStore.Images.Media.INTERNAL_CONTENT_URI)); observers.add(new Observer(h, MediaStore.Video.Media.EXTERNAL_CONTENT_URI)); observers.add(new Observer(h, MediaStore.Video.Media.INTERNAL_CONTENT_URI)); observers.add(new Observer(h, MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI)); observers.add(new Observer(h, MediaStore.Images.Thumbnails.INTERNAL_CONTENT_URI)); observers.add(new Observer(h, MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI)); observers.add(new Observer(h, MediaStore.Video.Thumbnails.INTERNAL_CONTENT_URI)); for(ContentObserver o : observers) { mContext.getContentResolver().registerContentObserver(((Observer) o).authority, false, o); } dcimDescriptor = new IDCIMDescriptor(parentId, cameraComponent); dcimDescriptor.startSession(); //Log.d(LOG, "DCIM OBSERVER INITED"); } public void destroy() { dcimDescriptor.stopSession(); dcimDescriptor = null; for(ContentObserver o : observers) { mContext.getContentResolver().unregisterContentObserver(o); } Log.d(LOG, "DCIM OBSERVER STOPPED"); } class Observer extends ContentObserver { Uri authority; public Observer(Handler handler, Uri authority) { super(handler); this.authority = authority; } @Override public void onChange(boolean selfChange) { Log.d(LOG, "ON CHANGE CALLED (no URI)"); onChange(selfChange, null); } @Override public void onChange(boolean selfChange, Uri uri) { boolean isThumbnail = false; if(Debug.DEBUG) { Logger.d(LOG, "AUTHORITY: " + authority.toString()); if(uri != null) { //Log.d(LOG, "ON CHANGE CALLED (with URI!)"); Logger.d(LOG, "URI: " + uri.toString()); } } if( authority.equals(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI) || authority.equals(MediaStore.Images.Thumbnails.INTERNAL_CONTENT_URI) || authority.equals(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI) || authority.equals(MediaStore.Video.Thumbnails.INTERNAL_CONTENT_URI) ) { isThumbnail = true; } try { dcimDescriptor.addEntry(authority.toString(), isThumbnail,Storage.Type.FILE_SYSTEM); } catch (Exception e) { //Logger.d(LOG,"unable to add thumbnail"); Logger.e(LOG, e); } } @Override public boolean deliverSelfNotifications() { return true; } } @Override public void onReceive(Context context, Intent intent) { Cursor cursor = context.getContentResolver().query(intent.getData(), null, null, null, null); try { if (cursor != null && cursor.isBeforeFirst()) { cursor.moveToFirst(); String media_path = cursor.getString(cursor.getColumnIndex("_data")); cursor.close(); if (dcimDescriptor != null) { try { dcimDescriptor.addEntry(media_path, false, Storage.Type.FILE_SYSTEM); } catch (Exception e) { //Logger.d(LOG,"unable to add thumbnail"); Logger.e(LOG, e); } Logger.d(LOG, String.format("pulled media file: %s", media_path)); } } } catch (Exception e) { Logger.e(LOG, e); } } }