package interdroid.swan.engine; import interdroid.swan.R; import java.text.Format; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import android.app.ListActivity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.content.LocalBroadcastManager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; public class SensorViewerActivity extends ListActivity { private List<Bundle> mSensors = new ArrayList<Bundle>(); private SensorAdapter mAdapter = new SensorAdapter(); private BroadcastReceiver mUpdateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // get the data stuff it in the base adapter Parcelable[] sensors = intent.getParcelableArrayExtra("sensors"); mSensors.clear(); for (Parcelable sensor : sensors) { mSensors.add((Bundle) sensor); } mAdapter.notifyDataSetChanged(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(mAdapter); } @Override protected void onResume() { runOnUiThread(new Runnable() { public void run() { Toast.makeText(SensorViewerActivity.this, "updating with service", Toast.LENGTH_SHORT).show(); } }); LocalBroadcastManager.getInstance(this).registerReceiver( mUpdateReceiver, new IntentFilter(EvaluationEngineService.UPDATE_SENSORS)); // let the service know that we want to get updates... startService(new Intent(EvaluationEngineService.UPDATE_SENSORS) .setClass(this, EvaluationEngineService.class)); super.onResume(); } @Override protected void onPause() { LocalBroadcastManager.getInstance(this).unregisterReceiver( mUpdateReceiver); super.onPause(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.sensorviewer, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_refresh: startService(new Intent(EvaluationEngineService.UPDATE_SENSORS) .setClass(this, EvaluationEngineService.class)); break; case R.id.expression_viewer: this.finish(); break; default: break; } return super.onOptionsItemSelected(item); } class SensorAdapter extends BaseAdapter { @Override public int getCount() { return mSensors.size(); } @Override public Object getItem(int position) { return mSensors.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // check als je hier komt of niet, met system.out.println if (convertView == null) { convertView = LayoutInflater.from(SensorViewerActivity.this) .inflate(R.layout.sensor_viewer, null); } //Sensor name ((TextView) ((LinearLayout) convertView) .findViewById(R.id.sensorName)).setText(mSensors.get( position).getString("name")); //Number of Registered ID using this sensor ((TextView) ((LinearLayout) convertView) .findViewById(R.id.registeredIds)).setText(" (" + mSensors.get(position).getInt("registeredids") + ")"); //Start time of sensor Date date = new Date(mSensors.get(position).getLong("starttime")); Format format = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy"); ((TextView) ((LinearLayout) convertView) .findViewById(R.id.startTime)).setText("" + format.format(date).toString()); //Sensing rate ((TextView) ((LinearLayout) convertView) .findViewById(R.id.sensingRate)).setText(String.format( "%.2f", mSensors.get(position).getDouble("sensingRate")) + " Hz"); //current milli ampere ((TextView) ((LinearLayout) convertView) .findViewById(R.id.currentMilliAmpere)).setText(mSensors.get(position).getFloat("currentMilliAmpere") + " mA"); //current Watt ((TextView) ((LinearLayout) convertView) .findViewById(R.id.currentWatt)).setText((4 * mSensors.get(position).getFloat("currentMilliAmpere")) + " mW"); //percentage per hour mA int batteryMah = 1780; ((TextView) ((LinearLayout) convertView) .findViewById(R.id.percentageHour)).setText(String.format("%.3f", 100 / (batteryMah / mSensors.get(position).getFloat("currentMilliAmpere"))) + " %/hr"); return convertView; } } }