Android Open Source - Dual-Battery-Widget Intent Receiver






From Project

Back to project page Dual-Battery-Widget.

License

The source code is released under:

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions f...

If you think the Android project Dual-Battery-Widget listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2011 Artiom Chilaru (http://flexlabs.org)
 */*w  w w .j  a v  a 2s.  c o m*/
 * 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 org.flexlabs.widgets.dualbattery.service;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.BatteryManager;
import android.os.Build;
import org.flexlabs.widgets.dualbattery.BatteryLevel;
import org.flexlabs.widgets.dualbattery.Constants;
import org.flexlabs.widgets.dualbattery.BatteryWidgetUpdater;
import org.flexlabs.widgets.dualbattery.storage.BatteryLevelAdapter;

import java.util.Date;

public class IntentReceiver extends BroadcastReceiver {
    private NotificationManager mNotificationManager;
    private boolean screenOff = false;

    public IntentReceiver(Context context) {
        // The dock notification icon will only show up on the transformer (aka Honeycomb+)
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
            mNotificationManager = new NotificationManager(context);
        }
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            boolean newData = false;
            BatteryLevel level = BatteryLevel.getCurrent();
    
            if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
                if (!screenOff)
                    newData = true;
                screenOff = true;
    
            } else if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) {
                if (screenOff)
                    newData = true;
                screenOff = false;
    
            } else if (Intent.ACTION_DOCK_EVENT.equals(intent.getAction())) {
                if (level != null && level.is_dockFriendly()) {
                    int dockState = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, -1);
                    if (dockState == Intent.EXTRA_DOCK_STATE_UNDOCKED && level.is_dockConnected()) {
                        level.undock();
                    }
                    if (dockState == 10 && !level.is_dockConnected() && BatteryLevel.lastDockLevel != null) {// 10 = Asus Transformer Dock
                        level.dock(BatteryLevel.lastDockLevel);
                    }
                }
    
            } else if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
                BatteryLevel newLevel = BatteryLevel.parse(intent.getExtras());
                if (newLevel == null)
                    return;
    
                if (newLevel.isDifferent(level))
                    newData = true;
    
                if ((level == null || level.get_status() == BatteryManager.BATTERY_STATUS_CHARGING) &&
                    newLevel.get_status() != BatteryManager.BATTERY_STATUS_CHARGING)
                    BatteryLevel.lastCharged = new Date();
    
                if (newLevel.is_dockFriendly() && level != null && level.get_dock_status() >= Constants.DOCK_STATE_CHARGING &&
                    newLevel.get_dock_status() < Constants.DOCK_STATE_CHARGING)
                    BatteryLevel.dockLastConnected = new Date();
    
                if (newLevel.get_dock_level() != null)
                    BatteryLevel.lastDockLevel = newLevel.get_dock_level();
    
                BatteryLevel.update(newLevel);
                level = newLevel;
            }
    
            if (!newData && screenOff)
                return;
    
            // Running more expensive operations away from the UI thread
            Runnable runnable = new Runnable() {
                private Context _context;
                private BatteryLevel _level;
                private boolean _newData;
                public Runnable setData(Context context, BatteryLevel level, boolean newData) {
                    _context = context;
                    _level = level;
                    _newData = newData;
                    return this;
                }
    
                @Override
                public void run() {
                    try {
                        if (_newData) {
                            BatteryLevelAdapter.Entry entry = new BatteryLevelAdapter.Entry(
                                _level.get_status(),
                                _level.get_level(),
                                _level.get_dock_status(),
                                _level.get_dock_level(),
                                screenOff);

                            BatteryLevelAdapter adapter = new BatteryLevelAdapter(_context);
                            adapter.open();
                            adapter.insertEntry(entry);
                            adapter.close();
                        }

                        if (!screenOff) {
                            // The dock notification icon will only show up on the transformer (aka Honeycomb+)
                            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
                                if (_level.is_dockConnected())
                                    mNotificationManager.update(
                                            _level.get_dock_level(),
                                            _level.get_dock_status() == Constants.DOCK_STATE_CHARGING);
                                else
                                    mNotificationManager.hide();
                            }
                            BatteryWidgetUpdater.updateAllWidgets(_context, _level, null);
                        }
                    } catch (Exception ignore) { }
                }
            }.setData(context, level, newData);
            new Thread(runnable).start();
        } catch (Exception ignore) {}
    }
}




Java Source Code List

org.achartengine.ChartFactory.java
org.achartengine.GraphicalActivity.java
org.achartengine.GraphicalView.java
org.achartengine.ITouchHandler.java
org.achartengine.TouchHandlerOld.java
org.achartengine.TouchHandler.java
org.achartengine.chart.AbstractChart.java
org.achartengine.chart.BarChart.java
org.achartengine.chart.BubbleChart.java
org.achartengine.chart.ClickableArea.java
org.achartengine.chart.CombinedXYChart.java
org.achartengine.chart.CubicLineChart.java
org.achartengine.chart.DialChart.java
org.achartengine.chart.DoughnutChart.java
org.achartengine.chart.LineChart.java
org.achartengine.chart.PieChart.java
org.achartengine.chart.PieMapper.java
org.achartengine.chart.PieSegment.java
org.achartengine.chart.PointStyle.java
org.achartengine.chart.RangeBarChart.java
org.achartengine.chart.RangeStackedBarChart.java
org.achartengine.chart.RoundChart.java
org.achartengine.chart.ScatterChart.java
org.achartengine.chart.TimeChart.java
org.achartengine.chart.XYChart.java
org.achartengine.model.CategorySeries.java
org.achartengine.model.MultipleCategorySeries.java
org.achartengine.model.Point.java
org.achartengine.model.RangeCategorySeries.java
org.achartengine.model.SeriesSelection.java
org.achartengine.model.TimeSeries.java
org.achartengine.model.XYMultipleSeriesDataset.java
org.achartengine.model.XYSeries.java
org.achartengine.model.XYValueSeries.java
org.achartengine.renderer.BasicStroke.java
org.achartengine.renderer.DefaultRenderer.java
org.achartengine.renderer.DialRenderer.java
org.achartengine.renderer.SimpleSeriesRenderer.java
org.achartengine.renderer.XYMultipleSeriesRenderer.java
org.achartengine.renderer.XYSeriesRenderer.java
org.achartengine.tools.AbstractTool.java
org.achartengine.tools.FitZoom.java
org.achartengine.tools.PanListener.java
org.achartengine.tools.Pan.java
org.achartengine.tools.ZoomEvent.java
org.achartengine.tools.ZoomListener.java
org.achartengine.tools.Zoom.java
org.achartengine.util.IndexXYMap.java
org.achartengine.util.MathHelper.java
org.achartengine.util.XYEntry.java
org.flexlabs.widgets.dualbattery.BatteryApplication.java
org.flexlabs.widgets.dualbattery.BatteryLevel.java
org.flexlabs.widgets.dualbattery.BatteryWidget1x1.java
org.flexlabs.widgets.dualbattery.BatteryWidget2x2.java
org.flexlabs.widgets.dualbattery.BatteryWidget3x4.java
org.flexlabs.widgets.dualbattery.BatteryWidgetUpdater.java
org.flexlabs.widgets.dualbattery.BatteryWidget.java
org.flexlabs.widgets.dualbattery.BillingObserver.java
org.flexlabs.widgets.dualbattery.Constants.java
org.flexlabs.widgets.dualbattery.app.AboutFragment.java
org.flexlabs.widgets.dualbattery.app.BatteryHistoryActivity.java
org.flexlabs.widgets.dualbattery.app.DonateFragment.java
org.flexlabs.widgets.dualbattery.app.FeedbackFragment.java
org.flexlabs.widgets.dualbattery.app.SettingsActivity.java
org.flexlabs.widgets.dualbattery.app.SettingsContainer.java
org.flexlabs.widgets.dualbattery.app.SettingsFragment.java
org.flexlabs.widgets.dualbattery.service.BootUpReceiver.java
org.flexlabs.widgets.dualbattery.service.IntentReceiver.java
org.flexlabs.widgets.dualbattery.service.MonitorService.java
org.flexlabs.widgets.dualbattery.service.NotificationManager.java
org.flexlabs.widgets.dualbattery.storage.BatteryLevelAdapter.java
org.flexlabs.widgets.dualbattery.ui.IntegerListPreference.java
org.flexlabs.widgets.dualbattery.ui.PreferenceListFragment.java
org.flexlabs.widgets.dualbattery.ui.SeekBarPreference.java
org.flexlabs.widgets.dualbattery.widgetsettings.BatteryInfoFragment.java
org.flexlabs.widgets.dualbattery.widgetsettings.PropertiesFragment.java
org.flexlabs.widgets.dualbattery.widgetsettings.WidgetActivity.java
org.flexlabs.widgets.dualbattery.widgetsettings.WidgetSettingsContainer.java