/*
* Copyright (C) 2011 asksven
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.asksven.betterbatterystats.handlers;
import com.asksven.android.common.RootShell;
import com.asksven.android.common.utils.SysUtils;
import com.asksven.betterbatterystats.services.EventWatcherService;
import com.asksven.betterbatterystats.services.WatchdogProcessingService;
import com.asksven.betterbatterystats.services.WriteScreenOffReferenceService;
import com.asksven.betterbatterystats.widgetproviders.LargeWidgetProvider;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.SystemClock;
import android.preference.PreferenceManager;
import android.util.Log;
/**
* @author sven
*
*/
public class ScreenEventHandler extends BroadcastReceiver
{
private static final String TAG = "ScreenEventHandler";
@Override
public void onReceive(Context context, Intent intent)
{
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF))
{
Log.i(TAG, "Received Broadcast ACTION_SCREEN_OFF");
boolean watchdogActive = sharedPrefs.getBoolean("ref_for_screen_off", false);
// if on kitkat make sure that we always collect screen on time: if no root then count the time
if ( !RootShell.getInstance().hasRootPermissions() && !SysUtils.hasBatteryStatsPermission(context) )
{
// total time since boot including time spent in sleep
long elapsedRealtime = SystemClock.elapsedRealtime();
// time screen went on
long elapsedRealtimeScreenOn = sharedPrefs.getLong("time_screen_on", 0);
long screenOnTime = sharedPrefs.getLong("screen_on_counter", 0);
// add to te counter
screenOnTime += (elapsedRealtime - elapsedRealtimeScreenOn);
SharedPreferences.Editor updater = sharedPrefs.edit();
updater.putLong("screen_on_counter", screenOnTime);
updater.commit();
}
if (watchdogActive)
{
// start service to persist reference
Intent serviceIntent = new Intent(context, WriteScreenOffReferenceService.class);
context.startService(serviceIntent);
}
}
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON))
{
Log.i(TAG, "Received Broadcast ACTION_SCREEN_ON");
boolean watchdogActive = sharedPrefs.getBoolean("ref_for_screen_off", false);
boolean bRunOnUnlock = sharedPrefs.getBoolean("watchdog_on_unlock", false);
// if on kitkat make sure that we always collect screen on time: if no root then count the time
if ( !RootShell.getInstance().hasRootPermissions() && !SysUtils.hasBatteryStatsPermission(context) )
{
// total time since boot including time spent in sleep
long elapsedRealtime = SystemClock.elapsedRealtime();
SharedPreferences.Editor updater = sharedPrefs.edit();
updater.putLong("time_screen_on", elapsedRealtime);
updater.commit();
}
if (watchdogActive && !bRunOnUnlock)
{
// start service to process watchdog
Intent serviceIntent = new Intent(context, WatchdogProcessingService.class);
context.startService(serviceIntent);
}
// Build the intent to update widgets
Intent intentRefreshWidgets = new Intent(LargeWidgetProvider.WIDGET_UPDATE);
context.sendBroadcast(intentRefreshWidgets);
}
if (intent.getAction().equals(Intent.ACTION_USER_PRESENT))
{
Log.i(TAG, "Received Broadcast ACTION_USER_PRESENT");
boolean watchdogActive = sharedPrefs.getBoolean("ref_for_screen_off", false);
boolean bRunOnUnlock = sharedPrefs.getBoolean("watchdog_on_unlock", false);
if (bRunOnUnlock)
{
if ( !RootShell.getInstance().hasRootPermissions() && !SysUtils.hasBatteryStatsPermission(context) )
{
// total time since boot including time spent in sleep
long elapsedRealtime = SystemClock.elapsedRealtime();
SharedPreferences.Editor updater = sharedPrefs.edit();
updater.putLong("time_screen_on", elapsedRealtime);
updater.commit();
}
}
if (watchdogActive && bRunOnUnlock)
{
// start service to process watchdog
Intent serviceIntent = new Intent(context, WatchdogProcessingService.class);
context.startService(serviceIntent);
}
}
Intent i = new Intent(context, EventWatcherService.class);
context.startService(i);
}
}