/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.service; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.PowerManager; import com.galaxy.meetup.client.android.InstantUpload; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsAccountsData; import com.galaxy.meetup.client.android.content.EsEventData; import com.galaxy.meetup.client.android.iu.InstantUploadFacade; import com.galaxy.meetup.client.android.iu.NewMediaTracker; import com.galaxy.meetup.client.util.MediaStoreUtils; /** * * @author sihai * */ public class CameraMonitor extends BroadcastReceiver { private static final Uri MEDIA_STORE_URIS[]; private static final Intent sIntent = new Intent("com.google.android.apps.plus.NEW_PICTURE"); private static ContentObserver sMediaObserver; static { Uri auri[] = new Uri[6]; auri[0] = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI; auri[1] = android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI; auri[2] = MediaStoreUtils.PHONE_STORAGE_IMAGES_URI; auri[3] = android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI; auri[4] = android.provider.MediaStore.Video.Media.INTERNAL_CONTENT_URI; auri[5] = MediaStoreUtils.PHONE_STORAGE_VIDEO_URI; MEDIA_STORE_URIS = auri; } public CameraMonitor() { } public static void registerObservers(Context context) { if(sMediaObserver == null) { sMediaObserver = new MediaObserver(context, null); ContentResolver contentresolver = context.getContentResolver(); Uri auri[] = MEDIA_STORE_URIS; int i = auri.length; int j = 0; while(j < i) { contentresolver.registerContentObserver(auri[j], true, sMediaObserver); j++; } } } public void onReceive(final Context context, Intent intent) { final android.os.PowerManager.WakeLock wl = ((PowerManager)context.getSystemService("power")).newWakeLock(1, "Camera Monitor"); wl.acquire(); (new Thread(new Runnable() { public final void run() { try { NewMediaTracker.getInstance(context).processNewMedia(); EsAccount esaccount = EsAccountsData.getActiveAccount(context); if(esaccount != null) { EsEventData.validateInstantShare(context, esaccount); if(InstantUpload.isEnabled(context) || InstantUpload.isInstantShareEnabled(context)) InstantUploadFacade.requestUploadSync(context); } } finally { wl.release(); } } })).start(); } static final class MediaObserver extends ContentObserver { public final void onChange(boolean flag) { PendingIntent pendingintent = PendingIntent.getBroadcast(context, 0, CameraMonitor.sIntent, 0); ((AlarmManager)context.getSystemService("alarm")).set(0, 12000L + System.currentTimeMillis(), pendingintent); } private final Context context; public MediaObserver(Context context1, Handler handler) { super(null); context = context1; } } }