package pl.llp.aircasting.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Vibrator; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.*; import com.google.common.eventbus.Subscribe; import com.google.inject.Inject; import pl.llp.aircasting.Intents; import pl.llp.aircasting.R; import pl.llp.aircasting.activity.adapter.StreamAdapter; import pl.llp.aircasting.activity.adapter.StreamAdapterFactory; import pl.llp.aircasting.activity.listener.OnSensorDragListener; import pl.llp.aircasting.event.ui.DoubleTapEvent; import pl.llp.aircasting.event.ui.LongClickEvent; import pl.llp.aircasting.event.ui.TapEvent; import pl.llp.aircasting.event.ui.ViewStreamEvent; import pl.llp.aircasting.model.*; import pl.llp.aircasting.view.SensorsGridView; import roboguice.inject.InjectView; import static pl.llp.aircasting.Intents.startSensors; import static pl.llp.aircasting.Intents.stopSensors; public class StreamsActivity extends ButtonsActivity { @Inject Context context; @Inject StreamAdapterFactory adapterFactory; @Inject SensorManager sensorManager; @Inject SessionManager sessionManager; @InjectView(R.id.sensors_grid) SensorsGridView gridView; @InjectView(R.id.heat_map_button_container) View mapContainer; @InjectView(R.id.heat_map_button) View mapButton; @InjectView(R.id.graph_button_container) View graphContainer; @InjectView(R.id.graph_button) View graphButton; StreamAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intents.startDatabaseWriterService(context); setContentView(R.layout.streams); adapter = adapterFactory.getAdapter(this); gridView.setAdapter(adapter); gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Vibrator v = (Vibrator) getSystemService(VIBRATOR_SERVICE); v.vibrate(50); gridView.enableDrag(); return false; } }); gridView.setOnItemDoubleClickListener(new SensorsGridView.OnItemDoubleClickListener() { @Override public void onItemDoubleClick(AdapterView<?> parent, View view, int position, long id) { if (sensorManager.isSessionBeingRecorded()) { sensorManager.toggleSensor((Sensor) view.getTag()); } } }); gridView.setOnItemSingleTapListener(new SensorsGridView.OnItemSingleTapListener() { @Override public void onItemSingleTap(AdapterView<?> parent, View view, int position, long id) { if (sensorManager.isSessionBeingViewed()) return; adapter.toggleStatsVisibility((Sensor) view.getTag()); } }); SensorsGridView.OnDragListener graphListener = new OnSensorDragListener(gridView, graphButton, graphContainer) { @Override public void onDrop(View view) { eventBus.post(new ViewStreamEvent((Sensor) view.getTag())); context.startActivity(new Intent(StreamsActivity.this, GraphActivity.class)); } }; SensorsGridView.OnDragListener mapListener = new OnSensorDragListener(gridView, mapButton, mapContainer) { @Override public void onDrop(View view) { if (sessionManager.isLocationless()) { Toast.makeText(StreamsActivity.this, R.string.cant_map_without_gps, Toast.LENGTH_SHORT).show(); } else { eventBus.post(new ViewStreamEvent((Sensor) view.getTag())); context.startActivity(new Intent(StreamsActivity.this, AirCastingMapActivity.class)); } } }; gridView.registerListenArea((ViewGroup) findViewById(R.id.buttons), R.id.graph_button_container, graphListener); gridView.registerListenArea((ViewGroup) findViewById(R.id.buttons), R.id.heat_map_button_container, mapListener); } @Override protected void onResume() { super.onResume(); Intents.startDatabaseWriterService(context); adapter.start(); adapter.notifyDataSetChanged(); startSensors(context); } @Override protected void onPause() { super.onPause(); adapter.stop(); stopSensors(context); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.graph_button: if (adapter.getCount() == 1) { eventBus.post(new ViewStreamEvent((Sensor) gridView.getChildAt(0).getTag())); startActivity(new Intent(this, GraphActivity.class)); } else { Toast.makeText(this, R.string.drag_to_graph_stream, Toast.LENGTH_SHORT).show(); } break; case R.id.heat_map_button: if (adapter.getCount() == 1) { if (sessionManager.isLocationless()) { Toast.makeText(StreamsActivity.this, R.string.cant_map_without_gps, Toast.LENGTH_SHORT).show(); } else { eventBus.post(new ViewStreamEvent((Sensor) gridView.getChildAt(0).getTag())); context.startActivity(new Intent(StreamsActivity.this, AirCastingMapActivity.class)); } } else { Toast.makeText(context, R.string.drag_to_map_stream, Toast.LENGTH_LONG).show(); } break; } super.onClick(view); } @Subscribe public void onEvent(MotionEvent event) { gridView.dispatchTouchEvent(event); } @Subscribe public void onEvent(LongClickEvent event) { gridView.dispatchLongPressEvent(event.getMotionEvent()); } @Subscribe public void onEvent(DoubleTapEvent event) { gridView.dispatchDoubleClickEvent(event.getMotionEvent()); } @Subscribe public void onEvent(TapEvent event) { gridView.dispatchSingleTapEvent(event.getMotionEvent()); } }