/* <!-- +++
package com.almalence.opencam_plus;
+++ --> */
//<!-- -+-
package com.almalence.opencam;
//-+- -->
import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.preference.PreferenceManager;
/* <!-- +++
import com.almalence.opencam_plus.cameracontroller.CameraController;
+++ --> */
//<!-- -+-
import com.almalence.opencam.cameracontroller.CameraController;
//-+- -->
public class AlarmReceiver extends BroadcastReceiver
{
private static final String TAG = "ALARM_RECIVER";
private static AlarmManager alarmMgr;
private static PendingIntent alarmIntent;
private int pauseBetweenShotsVal = 0;
private static long pauseBetweenShots = 0;
private int pauseBetweenShotsMeasurment = 0;
private static boolean readyToTakePicture = false;
private static AlarmReceiver thiz = null;
private static WakeLock wakeLock = null;
public static AlarmReceiver getInstance()
{
if (thiz == null)
{
thiz = new AlarmReceiver();
if (wakeLock == null)
{
PowerManager pm = (PowerManager) ApplicationScreen.instance.getApplicationContext()
.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, TAG);
}
}
return thiz;
}
@Override
public void onReceive(Context context, Intent intent)
{
if (wakeLock == null)
{
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, TAG);
}
if (!wakeLock.isHeld())
{
wakeLock.acquire();
}
readyToTakePicture = true;
try
{
if (ApplicationScreen.instance == null || ApplicationScreen.getCameraController() == null ||
(CameraController.isUseCamera2()? CameraController.getCamera2() == null : CameraController.getCamera() == null))
{
Intent dialogIntent = new Intent(context, MainScreen.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
| Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(dialogIntent);
if (wakeLock != null)
if (wakeLock.isHeld())
wakeLock.release();
} else
{
takePicture();
}
} catch (NullPointerException e)
{
}
}
public void takePicture()
{
if (!readyToTakePicture)
{
return;
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ApplicationScreen.getMainContext());
boolean photoTimeLapseActive = prefs.getBoolean(MainScreen.sPhotoTimeLapseActivePref, false);
boolean photoTimeLapseIsRunning = prefs.getBoolean(MainScreen.sPhotoTimeLapseIsRunningPref, false);
if (!photoTimeLapseActive || !photoTimeLapseIsRunning)
{
return;
}
PluginManager.getInstance().onShutterClickNotUser();
readyToTakePicture = false;
}
public void setNextAlarm(Context context)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ApplicationScreen.getMainContext());
pauseBetweenShotsVal = prefs.getInt(MainScreen.sPhotoTimeLapseCaptureIntervalPref, 5);
if (pauseBetweenShotsVal == 0)
{
return;
}
pauseBetweenShots = pauseBetweenShotsVal;
pauseBetweenShotsMeasurment = prefs.getInt(MainScreen.sPhotoTimeLapseCaptureIntervalMeasurmentPref, 0);
switch (pauseBetweenShotsMeasurment)
{
case 0://secs
pauseBetweenShots = pauseBetweenShots * 1000;
break;
case 1://mins
pauseBetweenShots = pauseBetweenShots * 60000;
break;
case 2://hours
pauseBetweenShots = pauseBetweenShots * 60000 * 60;
break;
case 3://days
pauseBetweenShots = pauseBetweenShots * 60000 * 60 * 24;
break;
default:
break;
}
Editor e = prefs.edit();
e.putInt(MainScreen.sPhotoTimeLapseCount, prefs.getInt(MainScreen.sPhotoTimeLapseCount, 0) + 1);
e.commit();
this.setAlarm(context, pauseBetweenShots);
ComponentName receiver = new ComponentName(context, AlarmReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
if (wakeLock != null)
if (wakeLock.isHeld())
wakeLock.release();
}
@SuppressLint("NewApi")
public void setAlarm(Context context, long intervalMillis)
{
alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
if (Build.VERSION.SDK_INT < 19)
{
alarmMgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + intervalMillis, alarmIntent);
} else
{
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + intervalMillis, alarmIntent);
}
}
public static void cancelAlarm(Context context)
{
if (alarmMgr != null && alarmIntent != null)
{
alarmMgr.cancel(alarmIntent);
}
if (wakeLock != null)
if (wakeLock.isHeld())
wakeLock.release();
}
}