package com.droidwatcher.receivers;
import com.droidwatcher.Debug;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
public class ScreenStateReceiver extends BroadcastReceiver {
private static Boolean screenOff = null;
private Context context;
public static final String SCREEN_EVENT = "screen_state_changed";
public static final String SCREEN_STATE_EXTRA = "screen_state";
public static final int SCREEN_STATE_OFF = 0;
public static final int SCREEN_STATE_ON = 1;
public static final int SCREEN_STATE_UNKNOWN = 2;
public ScreenStateReceiver(Context context){
this.context = context;
}
public void start(){
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
try {
filter.setPriority(Integer.MAX_VALUE);
} catch (Exception e) {
Debug.exception(e);
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
}
context.registerReceiver(this, filter);
}
public void dispose(){
try {
context.unregisterReceiver(this);
screenOff = null;
} catch (Exception e) {
Debug.exception(e);
}
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = true;
LocalBroadcastManager.getInstance(context).sendBroadcast(
new Intent(SCREEN_EVENT).putExtra(SCREEN_STATE_EXTRA, SCREEN_STATE_OFF)
);
}
else {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOff = false;
LocalBroadcastManager.getInstance(context).sendBroadcast(
new Intent(SCREEN_EVENT).putExtra(SCREEN_STATE_EXTRA, SCREEN_STATE_ON)
);
}
}
}
public static int getScreenState(){
if (screenOff == null) {
return SCREEN_STATE_UNKNOWN;
}
return screenOff ? SCREEN_STATE_OFF : SCREEN_STATE_ON;
}
}