package com.uxxu.konashi.sample.uartsample;
import android.Manifest;
import android.bluetooth.BluetoothGattCharacteristic;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.uxxu.konashi.lib.Konashi;
import com.uxxu.konashi.lib.KonashiListener;
import com.uxxu.konashi.lib.KonashiManager;
import org.jdeferred.DoneCallback;
import org.jdeferred.FailCallback;
import info.izumin.android.bletia.BletiaException;
import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.RuntimePermissions;
@RuntimePermissions
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private final MainActivity self = this;
private KonashiManager mKonashiManager;
private EditText mSendEdit;
private TextView mResultText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_send).setOnClickListener(this);
findViewById(R.id.btn_find).setOnClickListener(this);
mSendEdit = (EditText) findViewById(R.id.edit_send);
mResultText = (TextView) findViewById(R.id.text_read);
mKonashiManager = new KonashiManager(getApplicationContext());
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
@Override
protected void onResume() {
super.onResume();
mKonashiManager.addListener(mKonashiListener);
refreshViews();
}
@Override
protected void onPause() {
mKonashiManager.removeListener(mKonashiListener);
super.onPause();
}
@Override
protected void onDestroy() {
new Thread(new Runnable() {
@Override
public void run() {
if(mKonashiManager.isConnected()){
mKonashiManager.reset()
.then(new DoneCallback<BluetoothGattCharacteristic>() {
@Override
public void onDone(BluetoothGattCharacteristic result) {
mKonashiManager.disconnect();
}
});
}
}
}).start();
super.onDestroy();
}
@NeedsPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
void findKonashi() {
mKonashiManager.find(this);
}
private void refreshViews() {
boolean isReady = mKonashiManager.isReady();
findViewById(R.id.btn_find).setVisibility(!isReady ? View.VISIBLE : View.GONE);
findViewById(R.id.btn_send).setVisibility(isReady ? View.VISIBLE : View.GONE);
mSendEdit.setVisibility(isReady ? View.VISIBLE : View.GONE);
mResultText.setVisibility(isReady ? View.VISIBLE : View.GONE);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_find:
MainActivityPermissionsDispatcher.findKonashiWithCheck(this);
break;
case R.id.btn_send:
mKonashiManager.uartWrite(mSendEdit.getText().toString().getBytes())
.fail(new FailCallback<BletiaException>() {
@Override
public void onFail(BletiaException result) {
Toast.makeText(self, result.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
private final KonashiListener mKonashiListener = new KonashiListener() {
@Override
public void onConnect(KonashiManager manager) {
refreshViews();
mKonashiManager.uartMode(Konashi.UART_ENABLE)
.then(new DoneCallback<BluetoothGattCharacteristic>() {
@Override
public void onDone(BluetoothGattCharacteristic result) {
mKonashiManager.uartBaudrate(Konashi.UART_RATE_9K6);
}
})
.fail(new FailCallback<BletiaException>() {
@Override
public void onFail(BletiaException result) {
Toast.makeText(self, result.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onDisconnect(KonashiManager manager) {
refreshViews();
}
@Override
public void onError(KonashiManager manager, BletiaException e) {
}
@Override
public void onUpdatePioOutput(KonashiManager manager, int value) {
}
@Override
public void onUpdateUartRx(KonashiManager manager, byte[] value) {
mResultText.setText(new String(value));
}
@Override
public void onUpdateBatteryLevel(KonashiManager manager, int level) {
}
@Override
public void onUpdateSpiMiso(KonashiManager manager, byte[] value) {
}
};
}