initial commit
1
app/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/build
|
||||
41
app/build.gradle.kts
Normal file
@@ -0,0 +1,41 @@
|
||||
plugins {
|
||||
alias(libs.plugins.android.application)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "pt.epvc.ambrosioandroid"
|
||||
compileSdk = 36
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "pt.epvc.ambrosioandroid"
|
||||
minSdk = 24
|
||||
targetSdk = 36
|
||||
versionCode = 1
|
||||
versionName = "1.0"
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
isMinifyEnabled = false
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_11
|
||||
targetCompatibility = JavaVersion.VERSION_11
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation(libs.appcompat)
|
||||
implementation(libs.material)
|
||||
testImplementation(libs.junit)
|
||||
androidTestImplementation(libs.ext.junit)
|
||||
androidTestImplementation(libs.espresso.core)
|
||||
}
|
||||
21
app/proguard-rules.pro
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
@@ -0,0 +1,26 @@
|
||||
package pt.epvc.ambrosioandroid;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("pt.epvc.ambrosioandroid", appContext.getPackageName());
|
||||
}
|
||||
}
|
||||
34
app/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<uses-permission android:name="android.permission.BLUETOOTH"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.AmbrosioAndroid">
|
||||
<activity android:name=".DetalheBebida"
|
||||
android:screenOrientation="portrait"/>
|
||||
<activity android:name=".InfoActivity"
|
||||
android:screenOrientation="portrait"/>
|
||||
<activity android:name=".ListaBebidas"
|
||||
android:screenOrientation="portrait"/>
|
||||
<activity android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
android:screenOrientation="portrait">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
31
app/src/main/java/pt/epvc/ambrosioandroid/Bebida.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package pt.epvc.ambrosioandroid;
|
||||
|
||||
public class Bebida {
|
||||
private String nomeBebida;
|
||||
private String descricaoBebida;
|
||||
private int imagemBebida;
|
||||
|
||||
public void setDescricaoBebida(String descricaoBebida) {
|
||||
this.descricaoBebida = descricaoBebida;
|
||||
}
|
||||
|
||||
public void setNomeBebida(String nomeBebida) {
|
||||
this.nomeBebida = nomeBebida;
|
||||
}
|
||||
|
||||
public void setImagemBebida(int imagemBebida) {
|
||||
this.imagemBebida = imagemBebida;
|
||||
}
|
||||
|
||||
public int getImagemBebida() {
|
||||
return imagemBebida;
|
||||
}
|
||||
|
||||
public String getDescricaoBebida() {
|
||||
return descricaoBebida;
|
||||
}
|
||||
|
||||
public String getNomeBebida() {
|
||||
return nomeBebida;
|
||||
}
|
||||
}
|
||||
53
app/src/main/java/pt/epvc/ambrosioandroid/CustomAdapter.java
Normal file
@@ -0,0 +1,53 @@
|
||||
package pt.epvc.ambrosioandroid;
|
||||
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class CustomAdapter extends BaseAdapter {
|
||||
|
||||
String nomeBebida[];
|
||||
String descricaoBebida[];
|
||||
int imagemBebida[];
|
||||
LayoutInflater inflater;
|
||||
|
||||
public CustomAdapter(Context context, String nomeBebida[], String descricaoBebida[], int imagemBebida[]){
|
||||
this.nomeBebida = nomeBebida;
|
||||
this.descricaoBebida = descricaoBebida;
|
||||
this.imagemBebida = imagemBebida;
|
||||
inflater = LayoutInflater.from(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return imagemBebida.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int position) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
convertView = inflater.inflate(R.layout.list_item, null);
|
||||
TextView nomeBebidaTxt = (TextView) convertView.findViewById(R.id.nomeBebida);
|
||||
TextView descricaoBebidaTxt = (TextView) convertView.findViewById(R.id.descricaoBebida);
|
||||
ImageView imagemBebidaImg = (ImageView) convertView.findViewById(R.id.imagemBebida);
|
||||
|
||||
nomeBebidaTxt.setText(this.nomeBebida[position]);
|
||||
descricaoBebidaTxt.setText(this.descricaoBebida[position]);
|
||||
imagemBebidaImg.setImageResource(this.imagemBebida[position]);
|
||||
|
||||
return convertView;
|
||||
}
|
||||
}
|
||||
465
app/src/main/java/pt/epvc/ambrosioandroid/DetalheBebida.java
Normal file
@@ -0,0 +1,465 @@
|
||||
package pt.epvc.ambrosioandroid;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothSocket;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.SystemClock;
|
||||
import android.speech.RecognizerIntent;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class DetalheBebida extends AppCompatActivity {
|
||||
|
||||
private TextView tv_Speech_to_text;
|
||||
private static final int REQUEST_CODE_SPEECH_INPUT = 1;
|
||||
private FloatingActionButton ambrosioButton;
|
||||
private String nomeBebida;
|
||||
private Bebida bebidas [] = new Bebida[8];
|
||||
private ImageView imagemBebida;
|
||||
private TextView descricaoBebida;
|
||||
private TextView nomeBebidaTextView;
|
||||
private String comando;
|
||||
private BluetoothAdapter mBTAdapter;
|
||||
private Set<BluetoothDevice> mPairedDevices;
|
||||
private ArrayAdapter<String> mBTArrayAdapter;
|
||||
private ListView mDevicesListView;
|
||||
private Handler mHandler; // Our main handler that will receive callback notifications
|
||||
private ConnectedThread mConnectedThread; // bluetooth background worker thread to send and receive data
|
||||
private BluetoothSocket mBTSocket = null; // bi-directional client-to-client data path
|
||||
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 final static int MESSAGE_READ = 2; // used in bluetooth handler to identify message update
|
||||
private final static int CONNECTING_STATUS = 3; // used in bluetooth handler to identify message status
|
||||
private View background;
|
||||
private ProgressBar progressBar;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_bebida);
|
||||
|
||||
ambrosioButton = findViewById(R.id.ambrosioButton);
|
||||
|
||||
background = (View) findViewById(R.id.background_dim);
|
||||
progressBar = (ProgressBar)findViewById(R.id.progressBar);
|
||||
|
||||
//mBTArrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);
|
||||
mBTAdapter = BluetoothAdapter.getDefaultAdapter(); // get a handle on the bluetooth radio
|
||||
|
||||
/*mDevicesListView = (ListView)findViewById(R.id.devicesListView);
|
||||
mDevicesListView.setAdapter(mBTArrayAdapter); // assign model to view
|
||||
mDevicesListView.setOnItemClickListener(mDeviceClickListener);*/
|
||||
|
||||
mHandler = new Handler(){
|
||||
public void handleMessage(android.os.Message msg){
|
||||
if(msg.what == MESSAGE_READ){
|
||||
String readMessage = null;
|
||||
try {
|
||||
readMessage = new String((byte[]) msg.obj, "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//mReadBuffer.setText(readMessage);
|
||||
}
|
||||
|
||||
if(msg.what == CONNECTING_STATUS){
|
||||
if(msg.arg1 == 1) {
|
||||
progressBar.setVisibility(View.INVISIBLE);
|
||||
background.setVisibility(View.INVISIBLE);
|
||||
//Toast.makeText(Bebida.this, "Connected to Device: " + (String)(msg.obj), Toast.LENGTH_SHORT).show();
|
||||
//mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
|
||||
}
|
||||
else {
|
||||
progressBar.setVisibility(View.INVISIBLE);
|
||||
background.setVisibility(View.INVISIBLE);
|
||||
Toast.makeText(DetalheBebida.this, "Conexão falhou", Toast.LENGTH_SHORT).show();
|
||||
//mBluetoothStatus.setText("Connection Failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
ligarBluetooth();
|
||||
/*if (mBTArrayAdapter == null) {
|
||||
// Device does not support Bluetooth
|
||||
//mBluetoothStatus.setText("Status: Bluetooth not found");
|
||||
Toast.makeText(Bebida.this,"Bluetooth device not found!",Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
else{
|
||||
ligarBluetooth();
|
||||
}*/
|
||||
|
||||
nomeBebida = getIntent().getExtras().getString("nomeBebida");
|
||||
|
||||
FloatingActionButton floatingActionButton = (FloatingActionButton)findViewById(R.id.floatingActionButton);
|
||||
|
||||
ambrosioButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
|
||||
Intent intent
|
||||
= new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
|
||||
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
|
||||
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
|
||||
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,
|
||||
Locale.getDefault());
|
||||
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak to text");
|
||||
|
||||
try {
|
||||
startActivityForResult(intent, REQUEST_CODE_SPEECH_INPUT);
|
||||
}
|
||||
catch (Exception e) {
|
||||
Toast
|
||||
.makeText(DetalheBebida.this, " " + e.getMessage(),
|
||||
Toast.LENGTH_SHORT)
|
||||
.show();
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
floatingActionButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
switch (nomeBebida){
|
||||
case "Cosmopolitan": comando = "1";break;
|
||||
case "Tropical": comando = "2";break;
|
||||
case "Cinderela": comando = "3";break;
|
||||
case "San Francisco": comando = "4";break;
|
||||
case "Ugly Kid": comando = "5";break;
|
||||
case "Bela Ragazza": comando = "6";break;
|
||||
case "Tango": comando = "7";break;
|
||||
case "Pneu": comando = "8";break;
|
||||
}
|
||||
Toast.makeText(DetalheBebida.this, "A sair " + nomeBebida, Toast.LENGTH_SHORT).show();
|
||||
try {
|
||||
mConnectedThread.enviarComando(comando);
|
||||
}
|
||||
catch (Exception e){
|
||||
Toast.makeText(DetalheBebida.this, "Ligue a máquina", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
bebidas[0] = new Bebida();
|
||||
bebidas[0].setNomeBebida("Cosmopolitan");
|
||||
bebidas[0].setDescricaoBebida("Ingredientes:\n" +
|
||||
" - Groselha\n" +
|
||||
" - Sumo de Limão\n" +
|
||||
" - Sumo de Laranja\n" +
|
||||
" - Água de Côco\n\n");
|
||||
bebidas[0].setImagemBebida(R.drawable.cosmopolitan);
|
||||
|
||||
bebidas[1] = new Bebida();
|
||||
bebidas[1].setNomeBebida("Tropical");
|
||||
bebidas[1].setDescricaoBebida("Ingredientes:\n" +
|
||||
" - Sumo de Limão\n" +
|
||||
" - Sumo de Laranja\n" +
|
||||
" - Água com Gás\n\n");
|
||||
bebidas[1].setImagemBebida(R.drawable.tropical);
|
||||
|
||||
bebidas[2] = new Bebida();
|
||||
bebidas[2].setNomeBebida("Cinderela");
|
||||
bebidas[2].setDescricaoBebida("Ingredientes:\n" +
|
||||
" - Sumo de Limão\n" +
|
||||
" - Sumo de Laranja\n" +
|
||||
" - Sumo de Ananás\n\n");
|
||||
bebidas[2].setImagemBebida(R.drawable.cinderela);
|
||||
|
||||
bebidas[3] = new Bebida();
|
||||
bebidas[3].setNomeBebida("San Francisco");
|
||||
bebidas[3].setDescricaoBebida("Ingredientes:\n" +
|
||||
" - Sumo de Limão\n" +
|
||||
" - Sumo de Ananás\n" +
|
||||
" - Sumo de Laranja\n" +
|
||||
" - Sumo de Pêra\n\n");
|
||||
bebidas[3].setImagemBebida(R.drawable.sanfrancisco);
|
||||
|
||||
bebidas[4] = new Bebida();
|
||||
bebidas[4].setNomeBebida("Ugly Kid");
|
||||
bebidas[4].setDescricaoBebida("Ingredientes:\n" +
|
||||
" - Sumo de Laranja\n" +
|
||||
" - Sumo de Limão\n" +
|
||||
" - Groselha\n\n");
|
||||
bebidas[4].setImagemBebida(R.drawable.ugly);
|
||||
|
||||
bebidas[5] = new Bebida();
|
||||
bebidas[5].setNomeBebida("Bela Ragazza");
|
||||
bebidas[5].setDescricaoBebida("Ingredientes:\n" +
|
||||
" - Sumo de Limão\n" +
|
||||
" - Café\n" +
|
||||
" - Coca-Cola\n\n");
|
||||
bebidas[5].setImagemBebida(R.drawable.ragazza);
|
||||
|
||||
bebidas[6] = new Bebida();
|
||||
bebidas[6].setNomeBebida("Tango");
|
||||
bebidas[6].setDescricaoBebida("Ingredientes:\n" +
|
||||
" - 7 Up\n" +
|
||||
" - Groselha\n\n");
|
||||
bebidas[6].setImagemBebida(R.drawable.tango);
|
||||
|
||||
bebidas[7] = new Bebida();
|
||||
bebidas[7].setNomeBebida("Pneu");
|
||||
bebidas[7].setDescricaoBebida("Ingredientes:\n" +
|
||||
" - Água com Gás\n" +
|
||||
" - Sumo de Limão\n\n");
|
||||
bebidas[7].setImagemBebida(R.drawable.pneu);
|
||||
|
||||
imagemBebida = (ImageView)findViewById(R.id.imagemBebida);
|
||||
descricaoBebida = (TextView)findViewById(R.id.descricaoBebida);
|
||||
nomeBebidaTextView = (TextView)findViewById(R.id.nomeBebida);
|
||||
|
||||
|
||||
//Toast.makeText(this, nomeBebida,Toast.LENGTH_SHORT).show();
|
||||
|
||||
for (Bebida bebida : bebidas){
|
||||
if (bebida.getNomeBebida().equals(nomeBebida)){
|
||||
descricaoBebida.setText(bebida.getDescricaoBebida());
|
||||
imagemBebida.setImageResource(bebida.getImagemBebida());
|
||||
nomeBebidaTextView.setText(bebida.getNomeBebida());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public void ligarBluetooth(){
|
||||
mBTAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||
if (!mBTAdapter.isEnabled()) {
|
||||
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
|
||||
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
|
||||
//mBluetoothStatus.setText("Bluetooth enabled");
|
||||
Toast.makeText(DetalheBebida.this,"Bluetooth turned on",Toast.LENGTH_SHORT).show();
|
||||
|
||||
}
|
||||
else{
|
||||
Toast.makeText(DetalheBebida.this,"Bluetooth is already on", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
//listarAparelhos();
|
||||
if(!mBTAdapter.isEnabled()) {
|
||||
Toast.makeText(getBaseContext(), "Bluetooth not on", Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
progressBar.setVisibility(View.VISIBLE);
|
||||
background.setVisibility(View.VISIBLE);
|
||||
Toast.makeText(DetalheBebida.this, "A conectar...", Toast.LENGTH_SHORT).show();
|
||||
//mBluetoothStatus.setText("Connecting...");
|
||||
// Get the device MAC address, which is the last 17 chars in the View
|
||||
//String info = ((TextView) v).getText().toString();
|
||||
final String address = "98:D3:61:FD:4B:D6";
|
||||
final String name = "HC-05";
|
||||
|
||||
// Spawn a new thread to avoid blocking the GUI one
|
||||
new Thread()
|
||||
{
|
||||
public void run() {
|
||||
boolean fail = false;
|
||||
|
||||
BluetoothDevice device = mBTAdapter.getRemoteDevice(address);
|
||||
Log.d("teste","tentou ligar");
|
||||
try {
|
||||
mBTSocket = createBluetoothSocket(device);
|
||||
Log.d("teste","criou socket");
|
||||
} catch (IOException e) {
|
||||
fail = true;
|
||||
Toast.makeText(getBaseContext(), "Socket creation failed", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
// Establish the Bluetooth socket connection.
|
||||
try {
|
||||
Log.d("teste","tentou conectar ao socket");
|
||||
mBTSocket.connect();
|
||||
Log.d("teste","ligou ao socket");
|
||||
} catch (IOException e) {
|
||||
try {
|
||||
fail = true;
|
||||
mBTSocket.close();
|
||||
mHandler.obtainMessage(CONNECTING_STATUS, -1, -1)
|
||||
.sendToTarget();
|
||||
} catch (IOException e2) {
|
||||
//insert code to deal with this
|
||||
Toast.makeText(getBaseContext(), "Socket creation failed", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
if(fail == false) {
|
||||
mConnectedThread = new ConnectedThread(mBTSocket);
|
||||
mConnectedThread.start();
|
||||
|
||||
mHandler.obtainMessage(CONNECTING_STATUS, 1, -1, name)
|
||||
.sendToTarget();
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
}
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data){
|
||||
// Check which request we're responding to
|
||||
if (requestCode == REQUEST_CODE_SPEECH_INPUT) {
|
||||
if (resultCode == RESULT_OK && data != null) {
|
||||
ArrayList<String> result = data.getStringArrayListExtra(
|
||||
RecognizerIntent.EXTRA_RESULTS);
|
||||
String bebida = "";
|
||||
if(Objects.requireNonNull(result).get(0).toLowerCase().contains("ambrósio")){
|
||||
if (Objects.requireNonNull(result).get(0).toLowerCase().contains("cosmopolitan")){
|
||||
comando = "1";
|
||||
bebida = "Cosmopolitan";
|
||||
}
|
||||
else if (Objects.requireNonNull(result).get(0).toLowerCase().contains("cosmopolitan")){
|
||||
comando = "1";
|
||||
bebida = "Cosmopolitan";
|
||||
}
|
||||
else if (Objects.requireNonNull(result).get(0).toLowerCase().contains("tropical")){
|
||||
comando = "2";
|
||||
bebida = "Tropical";
|
||||
}
|
||||
else if (Objects.requireNonNull(result).get(0).toLowerCase().contains("cinderela")){
|
||||
comando = "3";
|
||||
bebida = "Cinderela";
|
||||
}
|
||||
else if (Objects.requireNonNull(result).get(0).toLowerCase().contains("são francisco")){
|
||||
comando = "4";
|
||||
bebida = "San Francisco";
|
||||
}
|
||||
else if (Objects.requireNonNull(result).get(0).toLowerCase().contains("ugly kid")){
|
||||
comando = "5";
|
||||
bebida = "Ugly Kid";
|
||||
}
|
||||
else if (Objects.requireNonNull(result).get(0).toLowerCase().contains("bela ragazza")){
|
||||
comando = "6";
|
||||
bebida = "Bela Ragazza";
|
||||
}
|
||||
else if (Objects.requireNonNull(result).get(0).toLowerCase().contains("tango")){
|
||||
comando = "7";
|
||||
bebida = "Tango";
|
||||
}
|
||||
else if (Objects.requireNonNull(result).get(0).toLowerCase().contains("pneu")){
|
||||
comando = "8";
|
||||
bebida = "Pneu";
|
||||
}
|
||||
Toast.makeText(this, "A tirar um " + bebida, Toast.LENGTH_SHORT).show();
|
||||
//mConnectedThread.enviarComando(comando);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (requestCode == REQUEST_ENABLE_BT) {
|
||||
// Make sure the request was successful
|
||||
if (resultCode == RESULT_OK) {
|
||||
// The user picked a contact.
|
||||
// The Intent's data Uri identifies which contact was selected.
|
||||
//mBluetoothStatus.setText("Enabled");
|
||||
Toast.makeText(this, "Enabled", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
else
|
||||
Toast.makeText(this, "Disabled", Toast.LENGTH_SHORT).show();
|
||||
//mBluetoothStatus.setText("Disabled");
|
||||
}
|
||||
}
|
||||
/*public void listarAparelhos(){
|
||||
mPairedDevices = mBTAdapter.getBondedDevices();
|
||||
if(mBTAdapter.isEnabled()) {
|
||||
// put it's one to the adapter
|
||||
for (BluetoothDevice device : mPairedDevices)
|
||||
mBTArrayAdapter.add(device.getName() + "\n" + device.getAddress());
|
||||
|
||||
Toast.makeText(getApplicationContext(), "Show Paired Devices", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
else
|
||||
Toast.makeText(getApplicationContext(), "Bluetooth not on", Toast.LENGTH_SHORT).show();
|
||||
}*/
|
||||
|
||||
|
||||
private AdapterView.OnItemClickListener mDeviceClickListener = new AdapterView.OnItemClickListener() {
|
||||
public void onItemClick(AdapterView<?> av, View v, int arg2, long arg3) {
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {
|
||||
return device.createRfcommSocketToServiceRecord(BTMODULEUUID);
|
||||
//creates secure outgoing connection with BT device using UUID
|
||||
}
|
||||
private class ConnectedThread extends Thread {
|
||||
private final BluetoothSocket mmSocket;
|
||||
private final InputStream mmInStream;
|
||||
private final OutputStream mmOutStream;
|
||||
|
||||
public ConnectedThread(BluetoothSocket socket) {
|
||||
mmSocket = socket;
|
||||
InputStream tmpIn = null;
|
||||
OutputStream tmpOut = null;
|
||||
|
||||
// Get the input and output streams, using temp objects because
|
||||
// member streams are final
|
||||
try {
|
||||
tmpIn = socket.getInputStream();
|
||||
tmpOut = socket.getOutputStream();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
|
||||
mmInStream = tmpIn;
|
||||
mmOutStream = tmpOut;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
byte[] buffer = new byte[1024]; // buffer store for the stream
|
||||
int bytes; // bytes returned from read()
|
||||
// Keep listening to the InputStream until an exception occurs
|
||||
while (true) {
|
||||
try {
|
||||
// Read from the InputStream
|
||||
bytes = mmInStream.available();
|
||||
if (bytes != 0) {
|
||||
SystemClock.sleep(100); //pause and wait for rest of data. Adjust this depending on your sending speed.
|
||||
bytes = mmInStream.available(); // how many bytes are ready to be read?
|
||||
bytes = mmInStream.read(buffer, 0, bytes); // record how many bytes we actually read
|
||||
mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
|
||||
.sendToTarget(); // Send the obtained bytes to the UI activity
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
public void enviarComando(String input){
|
||||
byte[] bytes = input.getBytes(); //converts entered String into bytes
|
||||
try {
|
||||
mmOutStream.write(bytes);
|
||||
} catch (IOException e) { }
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
try {
|
||||
mBTSocket.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
14
app/src/main/java/pt/epvc/ambrosioandroid/InfoActivity.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package pt.epvc.ambrosioandroid;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class InfoActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_info);
|
||||
}
|
||||
}
|
||||
52
app/src/main/java/pt/epvc/ambrosioandroid/ListaBebidas.java
Normal file
@@ -0,0 +1,52 @@
|
||||
package pt.epvc.ambrosioandroid;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ListView;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class ListaBebidas extends AppCompatActivity {
|
||||
|
||||
String nomeBebida[] = {
|
||||
"Cosmopolitan",
|
||||
"Tropical",
|
||||
"Cinderela",
|
||||
"San Francisco",
|
||||
"Ugly Kid",
|
||||
"Bela Ragazza",
|
||||
"Tango",
|
||||
"Pneu"};
|
||||
String descricaoBebida[] = {
|
||||
"Cocktail refrescante inspirado em sabores tropicais",
|
||||
"O Tropical é um cocktail fresco à base de citrinos",
|
||||
"Uma bebida elegante com sabores cítricos e tropicais",
|
||||
"Um sabor que faz viajar até San Francisco",
|
||||
"Um cocktail com cores de verão",
|
||||
"Com base em cafeína, este cocktail é capaz de despertar qualquer um",
|
||||
"Na sua versão sem álcool",
|
||||
"Simplesmente água e sumo de limão"};
|
||||
int imagemBebida[] = {R.drawable.cosmopolitan, R.drawable.tropical, R.drawable.cinderela,R.drawable.sanfrancisco, R.drawable.ugly, R.drawable.ragazza, R.drawable.tango, R.drawable.pneu};
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_lista_bebidas);
|
||||
|
||||
ListView listView = (ListView) findViewById(R.id.listaBebidas);
|
||||
CustomAdapter customAdapter = new CustomAdapter(this, nomeBebida, descricaoBebida, imagemBebida);
|
||||
listView.setAdapter(customAdapter);
|
||||
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
//Toast.makeText(ListaBebidas.this, String.valueOf(position), Toast.LENGTH_SHORT).show();
|
||||
String nomeBebida = ListaBebidas.this.nomeBebida[position];
|
||||
Intent intent = new Intent(ListaBebidas.this, DetalheBebida.class);
|
||||
intent.putExtra("nomeBebida",nomeBebida);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
41
app/src/main/java/pt/epvc/ambrosioandroid/MainActivity.java
Normal file
@@ -0,0 +1,41 @@
|
||||
package pt.epvc.ambrosioandroid;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageButton;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
|
||||
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
|
||||
Button pedirBebida = (Button)findViewById(R.id.pedirBebida);
|
||||
pedirBebida.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(MainActivity.this,ListaBebidas.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
ImageButton info = (ImageButton)findViewById(R.id.infoButton);
|
||||
info.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(MainActivity.this,InfoActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
BIN
app/src/main/res/drawable/bar.jpg
Normal file
|
After Width: | Height: | Size: 237 KiB |
BIN
app/src/main/res/drawable/caipirinha.png
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
app/src/main/res/drawable/cinderela.png
Normal file
|
After Width: | Height: | Size: 111 KiB |
BIN
app/src/main/res/drawable/cola.png
Normal file
|
After Width: | Height: | Size: 182 KiB |
BIN
app/src/main/res/drawable/cosmopolitan.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
app/src/main/res/drawable/gin.jpg
Normal file
|
After Width: | Height: | Size: 106 KiB |
170
app/src/main/res/drawable/ic_launcher_background.xml
Normal file
@@ -0,0 +1,170 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
</vector>
|
||||
30
app/src/main/res/drawable/ic_launcher_foreground.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="85.84757"
|
||||
android:endY="92.4963"
|
||||
android:startX="42.9492"
|
||||
android:startY="49.59793"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#44000000"
|
||||
android:offset="0.0" />
|
||||
<item
|
||||
android:color="#00000000"
|
||||
android:offset="1.0" />
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="nonZero"
|
||||
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#00000000" />
|
||||
</vector>
|
||||
BIN
app/src/main/res/drawable/info.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
app/src/main/res/drawable/pneu.png
Normal file
|
After Width: | Height: | Size: 348 KiB |
BIN
app/src/main/res/drawable/ragazza.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
app/src/main/res/drawable/sanfrancisco.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
app/src/main/res/drawable/tango.png
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
app/src/main/res/drawable/tropical.png
Normal file
|
After Width: | Height: | Size: 405 KiB |
BIN
app/src/main/res/drawable/ugly.png
Normal file
|
After Width: | Height: | Size: 132 KiB |
73
app/src/main/res/layout/activity_bebida.xml
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".DetalheBebida">
|
||||
|
||||
<View
|
||||
android:id="@+id/background_dim"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:background="#80000000"
|
||||
android:visibility="gone"/>
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imagemBebida"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="300dp"
|
||||
android:src="@drawable/caipirinha"
|
||||
android:padding="16dp"/>
|
||||
<TextView
|
||||
android:id="@+id/nomeBebida"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/gin"
|
||||
android:layout_below="@+id/imagemBebida"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:textSize="16pt"
|
||||
android:padding="16dp"/>
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/nomeBebida">
|
||||
<TextView
|
||||
android:id="@+id/descricaoBebida"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/info"
|
||||
android:padding="16dp"/>
|
||||
</ScrollView>
|
||||
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/floatingActionButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="true"
|
||||
tools:srcCompat="@tools:sample/avatars"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_margin="40dp"/>
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/ambrosioButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="true"
|
||||
tools:srcCompat="@tools:sample/avatars"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_margin="40dp"/>
|
||||
<ProgressBar
|
||||
android:id="@+id/progressBar"
|
||||
android:layout_width="200dp"
|
||||
android:layout_height="200dp"
|
||||
android:visibility="gone"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
/>
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
31
app/src/main/res/layout/activity_info.xml
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".InfoActivity">
|
||||
|
||||
<ImageView
|
||||
android:src="@drawable/bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitXY"/>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/info"
|
||||
android:textSize="14dp"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:background="#66000000"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:padding="8dp"/>
|
||||
|
||||
</ScrollView>
|
||||
</RelativeLayout>
|
||||
19
app/src/main/res/layout/activity_lista_bebidas.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ListaBebidas">
|
||||
|
||||
<ListView
|
||||
android:id="@+id/listaBebidas"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:layout_margin="8dp"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
48
app/src/main/res/layout/activity_main.xml
Normal file
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<ImageView
|
||||
android:src="@drawable/bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitXY"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/infoButton"
|
||||
android:src="@drawable/info"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:background="#0000"
|
||||
android:scaleType="fitXY"
|
||||
android:layout_margin="30dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentRight="true"/>
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/pedirBebida"
|
||||
style="@style/botao"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:background="#66000000"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:padding="16dp"
|
||||
android:textSize="24dp"
|
||||
android:text="Pedir Bebida" />
|
||||
|
||||
|
||||
<ListView
|
||||
android:id="@+id/devicesListView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/pedirBebida"></ListView>
|
||||
|
||||
</RelativeLayout>
|
||||
36
app/src/main/res/layout/list_item.xml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/imagemBebida"
|
||||
android:layout_width="180dp"
|
||||
android:layout_height="180dp"
|
||||
android:src="@drawable/gin" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_marginTop="50dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/nomeBebida"
|
||||
android:textSize="16pt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/gin"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/descricaoBebida"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/descricaoGin"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
6
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
6
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
BIN
app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 982 B |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
16
app/src/main/res/values-night/themes.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AmbrosioAndroid" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_200</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/black</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_200</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
</resources>
|
||||
13
app/src/main/res/values/colors.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFBB86FC</color>
|
||||
<color name="purple_500">#FF6200EE</color>
|
||||
<color name="purple_700">#FF3700B3</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="colorPrimary">#dfa02d</color>
|
||||
<color name="colorPrimaryDark">#dfa02d</color>
|
||||
<color name="colorAccent">#dfa02d</color>
|
||||
</resources>
|
||||
9
app/src/main/res/values/strings.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<resources>
|
||||
<string name="app_name">Ambrosio Android</string>
|
||||
<string name="pedirBebida">Pedir Bebida</string>
|
||||
<string name="gin">Gin Tónico</string>
|
||||
<string name="descricaoGin">O gin contém bleu bleu</string>
|
||||
<string name="conectar">Conectar</string>
|
||||
<string name="info">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer faucibus urna erat, vitae posuere lorem cursus ac. Vivamus egestas iaculis eros, ut porttitor purus vulputate eget. Suspendisse potenti. Curabitur nisl risus, molestie ac enim at, posuere gravida orci. Proin dignissim elit varius sapien eleifend porttitor. Curabitur et semper tellus, eget varius sapien. Proin felis urna, maximus id commodo eget, facilisis accumsan tortor. Etiam imperdiet accumsan accumsan. Curabitur fringilla quam velit, sed accumsan neque sodales at. Nulla dapibus, nulla in pretium lacinia, augue tortor tempus turpis, eu blandit ligula sem tincidunt quam. Fusce ultrices ac turpis et tincidunt. In turpis diam, ornare in ipsum ac, porta posuere erat. Cras convallis tempor nulla, vel tristique erat auctor et. Sed ac sapien est. Suspendisse luctus arcu sapien, quis ullamcorper nisl mollis sit amet. Quisque elementum bibendum rhoncus.</string>
|
||||
|
||||
</resources>
|
||||
20
app/src/main/res/values/themes.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.AmbrosioAndroid" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">@color/purple_500</item>
|
||||
<item name="colorPrimaryVariant">@color/purple_700</item>
|
||||
<item name="colorOnPrimary">@color/white</item>
|
||||
<!-- Secondary brand color. -->
|
||||
<item name="colorSecondary">@color/teal_200</item>
|
||||
<item name="colorSecondaryVariant">@color/teal_700</item>
|
||||
<item name="colorOnSecondary">@color/black</item>
|
||||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
|
||||
</style>
|
||||
<style name="botao">
|
||||
|
||||
</style>
|
||||
</resources>
|
||||
13
app/src/main/res/xml/backup_rules.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
Sample backup rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/guide/topics/data/autobackup
|
||||
for details.
|
||||
Note: This file is ignored for devices older than API 31
|
||||
See https://developer.android.com/about/versions/12/backup-restore
|
||||
-->
|
||||
<full-backup-content>
|
||||
<!--
|
||||
<include domain="sharedpref" path="."/>
|
||||
<exclude domain="sharedpref" path="device.xml"/>
|
||||
-->
|
||||
</full-backup-content>
|
||||
19
app/src/main/res/xml/data_extraction_rules.xml
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
Sample data extraction rules file; uncomment and customize as necessary.
|
||||
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
|
||||
for details.
|
||||
-->
|
||||
<data-extraction-rules>
|
||||
<cloud-backup>
|
||||
<!-- TODO: Use <include> and <exclude> to control what is backed up.
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
-->
|
||||
</cloud-backup>
|
||||
<!--
|
||||
<device-transfer>
|
||||
<include .../>
|
||||
<exclude .../>
|
||||
</device-transfer>
|
||||
-->
|
||||
</data-extraction-rules>
|
||||
@@ -0,0 +1,17 @@
|
||||
package pt.epvc.ambrosioandroid;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
public class ExampleUnitTest {
|
||||
@Test
|
||||
public void addition_isCorrect() {
|
||||
assertEquals(4, 2 + 2);
|
||||
}
|
||||
}
|
||||