package no.topi.fiken.display; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import static java.lang.String.valueOf; import static no.topi.fiken.display.DisplayService.DeviceInfo; import static no.topi.fiken.display.DisplayService.IntentAction; import static no.topi.fiken.display.DisplayService.IntentExtra; import static no.topi.fiken.display.DisplayService.LocalBinder; public class DisplayControlActivity extends Activity { private final static String TAG = DisplayControlActivity.class.getSimpleName(); private DisplayService displayService; private DeviceInfo deviceInfo; private TextView deviceNameView; private TextView deviceRssiView; private TextView gaugeCountView; private LinearLayout gaugesLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_control); final Intent intent = getIntent(); String deviceAddress = intent.getStringExtra(IntentExtra.DEVICE_ADDRESS.name()); deviceInfo = new DeviceInfo(deviceAddress, 0); deviceInfo.name = intent.getStringExtra(IntentExtra.DEVICE_NAME.name()); Intent displayServiceIntent = new Intent(this, DefaultDisplayService.class); bindService(displayServiceIntent, serviceConnection, BIND_AUTO_CREATE); deviceNameView = (TextView) findViewById(R.id.device_name); deviceRssiView = (TextView) findViewById(R.id.device_rssi); gaugeCountView = (TextView) findViewById(R.id.gauge_count); gaugesLayout = (LinearLayout) findViewById(R.id.gauges); Button disconnectButton = (Button) findViewById(R.id.button_disconnect); disconnectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { disconnect(); } }); updateValues(); } private void updateValues() { deviceNameView.setText(deviceInfo.name != null ? deviceInfo.name : getText(R.string.name_unknown)); deviceRssiView.setText(getText(R.string.rssi) + ": " + (deviceInfo.rssi != 0 ? valueOf(deviceInfo.rssi) : "")); gaugeCountView.setText(getText(R.string.gauge_count) + ": " + (deviceInfo.gaugeCount)); } @Override protected void onResume() { super.onResume(); registerReceiver(displayServiceBroadcastReceiver, IntentAction.ALL_FILTER); } @Override protected void onPause() { super.onPause(); unregisterReceiver(displayServiceBroadcastReceiver); } @Override protected void onDestroy() { super.onDestroy(); displayService.disconnect(); unbindService(serviceConnection); displayService = null; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_display_control, menu); return true; } public void disconnect() { if (displayService != null) { displayService.disconnect(); } finish(); } private final ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder service) { displayService = ((LocalBinder) service).getService(); } @Override public void onServiceDisconnected(ComponentName componentName) { displayService = null; } }; private final BroadcastReceiver displayServiceBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { IntentAction action = IntentAction.valueOf(intent); String deviceAddress = intent.getStringExtra(IntentExtra.DEVICE_ADDRESS.name()); if (action == IntentAction.DEVICE_UPDATE && deviceInfo.address.equals(deviceAddress)) { runOnUiThread(new Runnable() { @Override public void run() { deviceInfo.update(intent); if (intent.hasExtra(IntentExtra.CONNECTED.name())) { boolean connected = intent.getBooleanExtra(IntentExtra.CONNECTED.name(), false); if (!connected) { finish(); } } updateValues(); } }); } } }; }