Android Open Source - interdroid-swan Abstract Memory 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  w  w w  .jav a2  s.co m
import interdroid.swan.swansong.TimestampedValue;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Abstract class that implements basic functionality for sensors. Descendants
 * only have to implement requestReading() and onEntityServiceLevelChange(). The
 * rest can be overridden optionally.
 */
public abstract class AbstractMemorySensor extends AbstractSensorBase {

  /**
   * The map of values for this sensor.
   */
  private final Map<String, List<TimestampedValue>> values = new HashMap<String, List<TimestampedValue>>();
  
  private long mReadings = 0;
  private long mLastReadingTimestamp = 0;

  /**
   * @return the values
   */
  public final Map<String, List<TimestampedValue>> getValues() {
    return values;
  }

  @Override
  public final void init() {
    for (String valuePath : VALUE_PATHS) {
      expressionIdsPerValuePath.put(valuePath, new ArrayList<String>());
      getValues()
          .put(valuePath,
              Collections
                  .synchronizedList(new ArrayList<TimestampedValue>()));
    }
  }

  /**
   * Trims the values to the given length.
   * 
   * @param history
   *            the number of items to keep
   */
  private final void trimValues(final int history) {
    for (String path : VALUE_PATHS) {
      if (getValues().get(path).size() >= history) {
        getValues().get(path).remove(getValues().get(path).size() - 1);
      }
    }
  }

  /**
   * Adds a value for the given value path to the history.
   * 
   * @param valuePath
   *            the value path
   * @param now
   *            the current time
   * @param value
   *            the value
   * @param historySize
   *            the history size
   */
  protected final void putValueTrimSize(final String valuePath,
      final String id, final long now, final Object value,
      final int historySize) {
    updateReadings(now);
    getValues().get(valuePath).add(0, new TimestampedValue(value, now));
    trimValues(historySize);
    if (id != null) {
      notifyDataChangedForId(id);
    } else {
      notifyDataChanged(valuePath);
    }
  }

  /**
   * Adds a value for the given value path to the history.
   * 
   * @param valuePath
   *            the value path
   * @param now
   *            the current time
   * @param value
   *            the value
   * @param historyLength
   *            the history length
   */
  protected final void putValueTrimTime(final String valuePath,
      final String id, final long now, final Object value,
      final long historyLength) {
    updateReadings(now);
    getValues().get(valuePath).add(0, new TimestampedValue(value, now));
    trimValueByTime(now - historyLength);
    if (id != null) {
      notifyDataChangedForId(id);
    } else {
      notifyDataChanged(valuePath);
    }
  }
  
  private void updateReadings(long now) {
    if (now != mLastReadingTimestamp) {
      mReadings++;
      mLastReadingTimestamp = now;
    }
  }

  /**
   * Trims values past the given expire time.
   * 
   * @param expire
   *            the time to trim after
   */
  private final void trimValueByTime(final long expire) {
    for (String valuePath : VALUE_PATHS) {
      List<TimestampedValue> values = getValues().get(valuePath);
      while ((values.size() > 0 && values.get(values.size() - 1)
          .getTimestamp() < expire)) {
        values.remove(values.size() - 1);
      }
    }
  }

  @Override
  public final List<TimestampedValue> getValues(final String id,
      final long now, final long timespan) {
    return getValuesForTimeSpan(values.get(registeredValuePaths.get(id)),
        now, timespan);
  }
  
  @Override
  public long getReadings() {
    return mReadings;
  }
}




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