content: /*
   * Copyright (C) 2014 AChep@xda <artemchep@gmail.com>
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License
   * as published by the Free Software Foundation; either version 2
   * of the License, or (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
   * MA  02110-1301, USA.
   */
  
  package com.painless.pc;
  
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  
  public abstract class PowerTogglesPlugin extends BroadcastReceiver {
  
      // Intent send by PowerToggles asking for a state change
      public static final String ACTION_SET_STATE = "com.painless.pc.ACTION_SET_STATE";
  
      // Intent send to PowerToggles notifying it of state changes
      public static final String ACTION_STATE_CHANGED = "com.painless.pc.ACTION_STATE_CHANGED";
  
      // Intent extra denoting the state. Value must be a boolean.
      public static final String EXTRA_STATE = "state";
  
      // Must be set to the class name of the receiver, when informing PowerToggles
      // of a state change.
      public static final String EXTRA_VARID = "varID";
  
      @Override
      public void onReceive(Context context, Intent intent) {
          if (ACTION_SET_STATE.equals(intent.getAction())) {
              changeState(context, intent.getBooleanExtra(EXTRA_STATE, false));
          }
      }
  
      /**
       * Called when the PowerToggles widget requests a state change because
       * the user clicked the corresponding toggle.
       */
      protected abstract void changeState(Context context, boolean newState);
  
      /**
       * Updates the plugin state in PowerToggles widget.
       */
      public final void sendStateUpdate(Context context, boolean newState) {
          sendStateUpdate(this.getClass(), newState, context);
      }
  
      /**
       * Updates the plugin state in PowerToggles widget.
       *
       * @param pluginClass The receiver implementing the plugin. An application can
       *                    define multiple plugins, with one receiver per plugin.
       * @param newState
       * @param context
       */
      public static void sendStateUpdate(Class<? extends PowerTogglesPlugin> pluginClass,
                                               boolean newState, Context context) {
          context.sendBroadcast(new Intent(ACTION_STATE_CHANGED)
                  .putExtra(EXTRA_VARID, pluginClass.getName())
                  .putExtra(EXTRA_STATE, newState));
      }
  }
  