package org.primftpd.remotecontrol; 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), intent.getStringExtra(Intent.EXTRA_UID)); } } /** * Called when the PowerToggles widget requests a state change because * the user clicked the corresponding toggle. * @param newState new requested state * @param id the id of the widget, if it was configured. */ protected void changeState(Context context, boolean newState, String id) { changeState(context, newState); } /** * Called when the PowerToggles widget requests a state change because * the user clicked the corresponding toggle. * @param newState new requested state */ protected void changeState(Context context, boolean newState) { } /** * Updates the plugin state in PowerToggles widget. */ public final void sendStateUpdate(Context context, boolean newState) { sendStateUpdate(context, newState, null); } /** * Updates the plugin state in PowerToggles widget. * @param id the id of the widget if it was configured */ public final void sendStateUpdate(Context context, boolean newState, String id) { sendStateUpdate(this.getClass(), newState, id, 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 final void sendStateUpdate(Class<? extends PowerTogglesPlugin> pluginClass, boolean newState, Context context) { sendStateUpdate(pluginClass, newState, null, 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 id the id of the configured widget * @param context */ public static final void sendStateUpdate(Class<? extends PowerTogglesPlugin> pluginClass, boolean newState, String id, Context context) { context.sendBroadcast(new Intent(ACTION_STATE_CHANGED) .putExtra(EXTRA_VARID, pluginClass.getName()) .putExtra(Intent.EXTRA_UID, id) .putExtra(EXTRA_STATE, newState)); } }