Android Open Source - interdroid-swan Abstract Cuckoo Sensor






From Project

Back to project page interdroid-swan.

License

The source code is released under:

Copyright (c) 2008-2011 Vrije Universiteit, The Netherlands All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the follo...

If you think the Android project interdroid-swan 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

package interdroid.swan.sensors;
//from   www  . ja v  a  2s  .  c  o m
import interdroid.cuckoo.base.NoResourceAvailableException;
import interdroid.cuckoo.client.Cuckoo;
import interdroid.cuckoo.client.Cuckoo.Resource;
import interdroid.cuckoo.client.Oracle;
import interdroid.swan.cuckoo_sensors.CuckooPoller;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;

import com.google.android.gms.gcm.GoogleCloudMessaging;

public abstract class AbstractCuckooSensor extends AbstractVdbSensor {

  private final static String TAG = "AbstractCuckooSensor";

  private final static String REGISTRATION_ID = "registration_id";

  private Map<String, MonitorThread> monitors = new HashMap<String, MonitorThread>();

  private Resource remoteResource = null;

  private SharedPreferences prefs;

  private boolean mRegistering = false;

  @Override
  public final synchronized void onConnected() {
    // TODO improve picking of resource!
    List<Resource> resources = Oracle.getAllResources(this);
    Log.d(TAG, "got resources: " + resources.size());
    prefs = getSharedPreferences(getClass().getSimpleName(),
        Context.MODE_PRIVATE);
    if (resources.size() > 0) {
      remoteResource = resources.get(0);
      if (prefs.getString(REGISTRATION_ID, null) == null) {
        registerBackground();
      } else {
        Log.d(TAG, "regId: " + prefs.getString(REGISTRATION_ID, null));
      }
    }
  }

  @Override
  public final void onDestroySensor() {
    remoteResource = null;
  }

  @Override
  public final synchronized void register(final String id,
      final String valuePath, Bundle configuration) throws IOException {
    final Map<String, Object> configAsMap = new HashMap<String, Object>();
    for (String key : configuration.keySet()) {
      // TODO: maybe short circuit if a value is not serializable
      configAsMap.put(key, configuration.get(key));
    }
    Log.d(TAG, "Trying to register expression");
    new Thread() {
      public void run() {
        while (prefs.getString(REGISTRATION_ID, null) == null
            && mRegistering) {
          Log.d(TAG, "waiting for reg id");
          try {
            sleep(1000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }

        }
        if (prefs.getString(REGISTRATION_ID, null) != null) {
          try {
            Cuckoo.register(AbstractCuckooSensor.this,
                remoteResource,
                prefs.getString(REGISTRATION_ID, null),
                getGCMApiKey(), getPoller(), id, valuePath,
                configAsMap);
            registerReceiver();

            return;
          } catch (NoResourceAvailableException e) {
            // fall back to local impl
            remoteResource = null;
          }
        }
        // local
        Log.d(TAG, "Falling back to local implementation");
        MonitorThread monitor = new MonitorThread(
            AbstractCuckooSensor.this, valuePath, configAsMap);
        monitors.put(id, monitor);
        monitor.start();
      }
    }.start();

  }

  @Override
  public final void unregister(String id) {
    if (remoteResource != null) {
      try {
        Cuckoo.unregister(this, remoteResource, id);
        return;
      } catch (NoResourceAvailableException e) {
        // TODO: we lost connection to this resource, retry later with
        // an alarm or so.

        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    } else {
      Log.d(TAG, "unregistering sensor, interrupting monitor!");
      monitors.remove(id).shouldStop = true;
    }
  }

  public abstract CuckooPoller getPoller();

  public abstract String getGCMSenderId();

  public abstract String getGCMApiKey();

  public abstract void registerReceiver();

  private void registerBackground() {
    new Thread() {
      public void run() {
        mRegistering = true;
        try {
          Log.d(TAG, "getting a registration id for sender id: "
              + getGCMSenderId());
          prefs.edit()
              .putString(
                  REGISTRATION_ID,
                  GoogleCloudMessaging.getInstance(
                      AbstractCuckooSensor.this)
                      .register(getGCMSenderId()))
              .commit();
          Log.d(TAG,
              "We did get a registration ID: "
                  + prefs.getString(REGISTRATION_ID, null));
        } catch (IOException e) {
          // TODO: something useful.
          Log.w(TAG, "failed to get registration id", e);
        }
        mRegistering = false;
      }
    }.start();
  }

  public static Object makeTyped(String string) {
    String[] components = string.split(":", 2);
    String type = components[0];
    String value = components[1];

    if (type.equals("java.lang.Long")) {
      return Long.parseLong(value);
    } else if (type.equals("java.lang.String")) {
      return value;
    } else if (type.equals("java.lang.Integer")) {
      return Integer.parseInt(value);
    } else if (type.equals("java.lang.Boolean")) {
      return Boolean.parseBoolean(value);
    } else if (type.equals("java.lang.Character")) {
      return value.charAt(0);
    } else if (type.equals("java.lang.Float")) {
      return Float.parseFloat(value);
    } else if (type.equals("java.lang.Double")) {
      return Double.parseDouble(value);
    } else {
      throw new RuntimeException("Please implement "
          + AbstractCuckooSensor.class
          + " makeTyped(String string) for type '" + type + "'");
    }
  }
}




Java Source Code List

interdroid.swan.ExpressionListener.java
interdroid.swan.ExpressionManager.java
interdroid.swan.SensorConfigurationException.java
interdroid.swan.SensorInfo.java
interdroid.swan.SwanException.java
interdroid.swan.TriStateExpressionListener.java
interdroid.swan.ValueExpressionListener.java
interdroid.swan.crossdevice.Converter.java
interdroid.swan.crossdevice.CrossDeviceReceiver.java
interdroid.swan.crossdevice.Pusher.java
interdroid.swan.crossdevice.Registry.java
interdroid.swan.crossdevice.SwanGCMConstants.java
interdroid.swan.crossdevice.SwanLakeActivity.java
interdroid.swan.engine.EvaluationEngineReceiver.java
interdroid.swan.engine.EvaluationEngineService.java
interdroid.swan.engine.EvaluationManager.java
interdroid.swan.engine.ExpressionViewerActivity.java
interdroid.swan.engine.QueuedExpression.java
interdroid.swan.engine.SensorSetupFailedException.java
interdroid.swan.engine.SensorViewerActivity.java
interdroid.swan.engine.TextProgressBar.java
interdroid.swan.sensors.AbstractConfigurationActivity.java
interdroid.swan.sensors.AbstractCuckooSensor.java
interdroid.swan.sensors.AbstractMemorySensor.java
interdroid.swan.sensors.AbstractSensorBase.java
interdroid.swan.sensors.AbstractVdbSensor.java
interdroid.swan.sensors.MonitorThread.java
interdroid.swan.sensors.SensorInterface.java
interdroid.swan.sensors.TimeSensor.java
interdroid.swan.sensors.impl.BatterySensor.java
interdroid.swan.sensors.impl.BluetoothSensor.java
interdroid.swan.sensors.impl.CalendarSensor.java
interdroid.swan.sensors.impl.CallSensor.java
interdroid.swan.sensors.impl.GyroscopeSensor.java
interdroid.swan.sensors.impl.IntentSensor.java
interdroid.swan.sensors.impl.LightSensor.java
interdroid.swan.sensors.impl.LocationSensor.java
interdroid.swan.sensors.impl.LogCatSensor.java
interdroid.swan.sensors.impl.MagnetometerSensor.java
interdroid.swan.sensors.impl.MovementSensor.java
interdroid.swan.sensors.impl.PolarHeartRate.java
interdroid.swan.sensors.impl.PressureSensor.java
interdroid.swan.sensors.impl.ProximitySensor.java
interdroid.swan.sensors.impl.ScreenSensor.java
interdroid.swan.sensors.impl.SignalStrengthSensor.java
interdroid.swan.sensors.impl.SmartLocationSensor.java
interdroid.swan.sensors.impl.SoundSensor.java
interdroid.swan.sensors.impl.TemperatureSensor.java
interdroid.swan.sensors.impl.TwitterSensor.java
interdroid.swan.sensors.impl.WifiSensor.java
interdroid.swan.sensors.impl.package-info.java
interdroid.swan.swansong.BinaryLogicOperator.java
interdroid.swan.swansong.ComparatorResult.java
interdroid.swan.swansong.Comparator.java
interdroid.swan.swansong.ComparisonExpression.java
interdroid.swan.swansong.ConstantValueExpression.java
interdroid.swan.swansong.ExpressionFactory.java
interdroid.swan.swansong.ExpressionParseException.java
interdroid.swan.swansong.Expression.java
interdroid.swan.swansong.HistoryReductionMode.java
interdroid.swan.swansong.LogicExpression.java
interdroid.swan.swansong.LogicOperator.java
interdroid.swan.swansong.MathOperator.java
interdroid.swan.swansong.MathValueExpression.java
interdroid.swan.swansong.ParseableEnum.java
interdroid.swan.swansong.Parseable.java
interdroid.swan.swansong.Result.java
interdroid.swan.swansong.SensorValueExpression.java
interdroid.swan.swansong.TimestampedValue.java
interdroid.swan.swansong.TriStateExpression.java
interdroid.swan.swansong.TriState.java
interdroid.swan.swansong.UnaryLogicOperator.java
interdroid.swan.swansong.ValueExpression.java
interdroid.swan.ui.EnterConstantDialog.java
interdroid.swan.ui.ExpressionBuilderActivity.java
interdroid.swan.ui.LaunchService.java
interdroid.swan.ui.MergeExpressionDialog.java
interdroid.swan.ui.NewExpressionDialog.java
interdroid.swan.ui.NewMathExpressionDialog.java
interdroid.swan.ui.SelectComparatorDialog.java
interdroid.swan.ui.SelectExpressionDialog.java
interdroid.swan.ui.SelectOperatorDialog.java
interdroid.swan.ui.SelectSensorDialog.java
interdroid.swan.ui.SelectTypedValueDialog.java
interdroid.swan.ui.package-info.java
interdroid.swan.util.SeekBarPreference.java
interdroid.swan.util.TimePreference.java