diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index b268ef3..ca16a99 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,6 +4,7 @@
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/pt/epvc/lazzycofee/MainActivity.java b/app/src/main/java/pt/epvc/lazzycofee/MainActivity.java
index dc54ac7..75c5ff0 100644
--- a/app/src/main/java/pt/epvc/lazzycofee/MainActivity.java
+++ b/app/src/main/java/pt/epvc/lazzycofee/MainActivity.java
@@ -6,6 +6,7 @@ import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
@@ -43,6 +44,7 @@ public class MainActivity extends AppCompatActivity {
private static final UUID BTMODULEUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private final static int REQUEST_ENABLE_BT = 1; // used to identify adding bluetooth names
private boolean bluetoothDenied = false;
+ private TextView tvStatus;
@Override
@@ -55,6 +57,8 @@ public class MainActivity extends AppCompatActivity {
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
+ tvStatus = findViewById(R.id.tvStatus);
+ updateStatus("Desligado", Color.parseColor("#F44336"));
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.BLUETOOTH_SCAN},
@@ -70,33 +74,48 @@ public class MainActivity extends AppCompatActivity {
}
}
- public void cafeCurto(View view) {
- Toast.makeText(this, "Café Curto", Toast.LENGTH_SHORT).show();
+ private void updateStatus(String status, int color) {
+ runOnUiThread(() -> {
+ if (tvStatus != null) {
+ tvStatus.setText("● " + status);
+ tvStatus.setTextColor(color);
+ }
+ });
+ }
+ public void cafeCurto(View view) {
if (mConnectedThread != null) {
+ Toast.makeText(this, "Café Curto", Toast.LENGTH_SHORT).show();
mConnectedThread.enviarComando("1");
+ } else {
+ ligarBluetooth();
+ Toast.makeText(this, "A tentar ligar à máquina...", Toast.LENGTH_SHORT).show();
}
}
public void CafeMedio(View view) {
- Toast.makeText(this, "Café Médio", Toast.LENGTH_SHORT).show();
-
if (mConnectedThread != null) {
+ Toast.makeText(this, "Café Médio", Toast.LENGTH_SHORT).show();
mConnectedThread.enviarComando("2");
+ } else {
+ ligarBluetooth();
+ Toast.makeText(this, "A tentar ligar à máquina...", Toast.LENGTH_SHORT).show();
}
}
public void cafeLongo(View view) {
-
- Toast.makeText(this, "Café Longo", Toast.LENGTH_SHORT).show();
-
if (mConnectedThread != null) {
+ Toast.makeText(this, "Café Longo", Toast.LENGTH_SHORT).show();
mConnectedThread.enviarComando("3");
+ } else {
+ ligarBluetooth();
+ Toast.makeText(this, "A tentar ligar à máquina...", Toast.LENGTH_SHORT).show();
}
}
public void ligarBluetooth() {
if (mBTAdapter == null) {
+ updateStatus("Sem Bluetooth", Color.parseColor("#F44336"));
runOnUiThread(() ->
Toast.makeText(MainActivity.this, "Dispositivo não suporta Bluetooth", Toast.LENGTH_LONG).show()
);
@@ -109,6 +128,7 @@ public class MainActivity extends AppCompatActivity {
}
else{
+ updateStatus("A ligar...", Color.parseColor("#FFC107"));
final String address = "98:D3:21:FC:7F:DF";
new Thread() {
public void run() {
@@ -121,6 +141,7 @@ public class MainActivity extends AppCompatActivity {
} catch (IOException e) {
fail = true;
Log.d("bluetooth","Socket creation failed");
+ updateStatus("Falha ao ligar", Color.parseColor("#F44336"));
}
try {
if (ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
@@ -133,13 +154,17 @@ public class MainActivity extends AppCompatActivity {
try {
fail = true;
mBTSocket.close();
+ updateStatus("Desligado", Color.parseColor("#F44336"));
} catch (IOException e2) {
Log.d("bluetooth","Socket creation failed");
}
}
if (fail == false) {
+ updateStatus("Ligado", Color.parseColor("#4CAF50"));
mConnectedThread = new ConnectedThread(mBTSocket);
mConnectedThread.start();
+ } else {
+ reconnect();
}
}
}.start();
@@ -175,16 +200,34 @@ public class MainActivity extends AppCompatActivity {
}
private class ConnectedThread extends Thread {
private final OutputStream mmOutStream;
+ private final InputStream mmInStream;
public ConnectedThread(BluetoothSocket socket) {
OutputStream tmpOut = null;
+ InputStream tmpIn = null;
try {
tmpOut = socket.getOutputStream();
+ tmpIn = socket.getInputStream();
} catch (IOException e) {
- Log.e("Bluetooth", "Erro ao obter OutputStream", e);
+ Log.e("Bluetooth", "Erro ao obter Streams", e);
}
mmOutStream = tmpOut;
+ mmInStream = tmpIn;
+ }
+
+ public void run() {
+ byte[] buffer = new byte[1024];
+ while (!Thread.currentThread().isInterrupted()) {
+ try {
+ int bytes = mmInStream.read(buffer);
+ if (bytes == -1) break;
+ } catch (IOException e) {
+ Log.e("Bluetooth", "Conexão perdida", e);
+ break;
+ }
+ }
+ reconnect();
}
public void enviarComando(String input){
@@ -192,19 +235,34 @@ public class MainActivity extends AppCompatActivity {
try {
mmOutStream.write(bytes);
} catch (IOException e) {
- Log.e("Bluetooth", "Erro ao obter OutputStream", e);
+ Log.e("Bluetooth", "Erro ao enviar", e);
+ reconnect();
}
}
}
+
+ private void reconnect() {
+ runOnUiThread(() -> {
+ desligarBluetooth();
+ updateStatus("A tentar reconectar...", Color.parseColor("#FFC107"));
+ new Handler(getMainLooper()).postDelayed(() -> {
+ if (!bluetoothDenied) {
+ ligarBluetooth();
+ }
+ }, 3000);
+ });
+ }
private void desligarBluetooth() {
try {
if (mConnectedThread != null) {
mConnectedThread.interrupt();
+ mConnectedThread = null;
}
if (mBTSocket != null) {
mBTSocket.close();
mBTSocket = null;
}
+ updateStatus("Desligado", Color.parseColor("#F44336"));
} catch (IOException e) {
Log.e("Bluetooth", "Erro ao desligar", e);
}
diff --git a/app/src/main/res/drawable/cafecurto.png b/app/src/main/res/drawable/cafecurto.png
index e86476b..b0a58ac 100644
Binary files a/app/src/main/res/drawable/cafecurto.png and b/app/src/main/res/drawable/cafecurto.png differ
diff --git a/app/src/main/res/drawable/cafelongo.png b/app/src/main/res/drawable/cafelongo.png
index fdf173b..dc131d0 100644
Binary files a/app/src/main/res/drawable/cafelongo.png and b/app/src/main/res/drawable/cafelongo.png differ
diff --git a/app/src/main/res/drawable/cafemedio.png b/app/src/main/res/drawable/cafemedio.png
index dc7101c..ea07bb8 100644
Binary files a/app/src/main/res/drawable/cafemedio.png and b/app/src/main/res/drawable/cafemedio.png differ
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 3506222..65b2347 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,65 +1,241 @@
-
+ android:background="#16100c"
+ tools:context=".MainActivity">
+
-
-
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
-
-
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ app:cardBackgroundColor="#211812"
+ app:cardCornerRadius="16dp"
+ app:cardElevation="8dp"
+ app:rippleColor="#D4AF37"
+ app:strokeColor="#3A2D23"
+ app:strokeWidth="1dp">
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+