initial commit
|
|
@ -0,0 +1,15 @@
|
||||||
|
*.iml
|
||||||
|
.gradle
|
||||||
|
/local.properties
|
||||||
|
/.idea/caches
|
||||||
|
/.idea/libraries
|
||||||
|
/.idea/modules.xml
|
||||||
|
/.idea/workspace.xml
|
||||||
|
/.idea/navEditor.xml
|
||||||
|
/.idea/assetWizardSettings.xml
|
||||||
|
.DS_Store
|
||||||
|
/build
|
||||||
|
/captures
|
||||||
|
.externalNativeBuild
|
||||||
|
.cxx
|
||||||
|
local.properties
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Ambrosio Android
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AndroidProjectSystem">
|
||||||
|
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<bytecodeTargetLevel target="21" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="deploymentTargetSelector">
|
||||||
|
<selectionStates>
|
||||||
|
<SelectionState runConfigName="app">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
</SelectionState>
|
||||||
|
</selectionStates>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||||
|
<component name="GradleSettings">
|
||||||
|
<option name="linkedExternalProjectsSettings">
|
||||||
|
<GradleProjectSettings>
|
||||||
|
<option name="testRunner" value="CHOOSE_PER_TEST" />
|
||||||
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
|
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
||||||
|
<option name="modules">
|
||||||
|
<set>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
<option value="$PROJECT_DIR$/app" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</GradleProjectSettings>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectMigrations">
|
||||||
|
<option name="MigrateToGradleLocalJavaHome">
|
||||||
|
<set>
|
||||||
|
<option value="$PROJECT_DIR$" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectType">
|
||||||
|
<option name="id" value="Android" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RunConfigurationProducerService">
|
||||||
|
<option name="ignoredProducers">
|
||||||
|
<set>
|
||||||
|
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
|
||||||
|
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
|
||||||
|
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
|
||||||
|
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
|
||||||
|
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
|
||||||
|
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
|
||||||
|
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
|
||||||
|
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
/build
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 182 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 348 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 215 KiB |
|
After Width: | Height: | Size: 405 KiB |
|
After Width: | Height: | Size: 132 KiB |
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 982 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
plugins {
|
||||||
|
alias(libs.plugins.android.application) apply false
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Project-wide Gradle settings.
|
||||||
|
# IDE (e.g. Android Studio) users:
|
||||||
|
# Gradle settings configured through the IDE *will override*
|
||||||
|
# any settings specified in this file.
|
||||||
|
# For more details on how to configure your build environment visit
|
||||||
|
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||||
|
# Specifies the JVM arguments used for the daemon process.
|
||||||
|
# The setting is particularly useful for tweaking memory settings.
|
||||||
|
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||||
|
# When configured, Gradle will run in incubating parallel mode.
|
||||||
|
# This option should only be used with decoupled projects. For more details, visit
|
||||||
|
# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
|
||||||
|
# org.gradle.parallel=true
|
||||||
|
# AndroidX package structure to make it clearer which packages are bundled with the
|
||||||
|
# Android operating system, and which are packaged with your app's APK
|
||||||
|
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
||||||
|
android.useAndroidX=true
|
||||||
|
# Enables namespacing of each library's R class so that its R class includes only the
|
||||||
|
# resources declared in the library itself and none from the library's dependencies,
|
||||||
|
# thereby reducing the size of the R class for that library
|
||||||
|
android.nonTransitiveRClass=true
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
[versions]
|
||||||
|
agp = "8.13.0"
|
||||||
|
junit = "4.13.2"
|
||||||
|
junitVersion = "1.3.0"
|
||||||
|
espressoCore = "3.7.0"
|
||||||
|
appcompat = "1.7.1"
|
||||||
|
material = "1.13.0"
|
||||||
|
|
||||||
|
[libraries]
|
||||||
|
junit = { group = "junit", name = "junit", version.ref = "junit" }
|
||||||
|
ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
|
||||||
|
espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
|
||||||
|
appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
|
||||||
|
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
|
||||||
|
|
||||||
|
[plugins]
|
||||||
|
android-application = { id = "com.android.application", version.ref = "agp" }
|
||||||
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
#Wed Nov 05 16:32:10 WET 2025
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
|
@ -0,0 +1,185 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright 2015 the original author or authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
##
|
||||||
|
## Gradle start up script for UN*X
|
||||||
|
##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Attempt to set APP_HOME
|
||||||
|
# Resolve links: $0 may be a link
|
||||||
|
PRG="$0"
|
||||||
|
# Need this for relative symlinks.
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG=`dirname "$PRG"`"/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
SAVED="`pwd`"
|
||||||
|
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||||
|
APP_HOME="`pwd -P`"
|
||||||
|
cd "$SAVED" >/dev/null
|
||||||
|
|
||||||
|
APP_NAME="Gradle"
|
||||||
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
|
MAX_FD="maximum"
|
||||||
|
|
||||||
|
warn () {
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
die () {
|
||||||
|
echo
|
||||||
|
echo "$*"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false').
|
||||||
|
cygwin=false
|
||||||
|
msys=false
|
||||||
|
darwin=false
|
||||||
|
nonstop=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN* )
|
||||||
|
cygwin=true
|
||||||
|
;;
|
||||||
|
Darwin* )
|
||||||
|
darwin=true
|
||||||
|
;;
|
||||||
|
MINGW* )
|
||||||
|
msys=true
|
||||||
|
;;
|
||||||
|
NONSTOP* )
|
||||||
|
nonstop=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM.
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
fi
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="java"
|
||||||
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can.
|
||||||
|
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
|
||||||
|
MAX_FD_LIMIT=`ulimit -H -n`
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||||
|
MAX_FD="$MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
ulimit -n $MAX_FD
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Darwin, add options to specify how the application appears in the dock
|
||||||
|
if $darwin; then
|
||||||
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||||
|
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||||
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||||
|
SEP=""
|
||||||
|
for dir in $ROOTDIRSRAW ; do
|
||||||
|
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||||
|
SEP="|"
|
||||||
|
done
|
||||||
|
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||||
|
# Add a user-defined pattern to the cygpath arguments
|
||||||
|
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||||
|
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||||
|
fi
|
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||||
|
i=0
|
||||||
|
for arg in "$@" ; do
|
||||||
|
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||||
|
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||||
|
|
||||||
|
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||||
|
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||||
|
else
|
||||||
|
eval `echo args$i`="\"$arg\""
|
||||||
|
fi
|
||||||
|
i=`expr $i + 1`
|
||||||
|
done
|
||||||
|
case $i in
|
||||||
|
0) set -- ;;
|
||||||
|
1) set -- "$args0" ;;
|
||||||
|
2) set -- "$args0" "$args1" ;;
|
||||||
|
3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
|
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
|
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
|
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
|
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
|
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
|
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Escape application args
|
||||||
|
save () {
|
||||||
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||||
|
echo " "
|
||||||
|
}
|
||||||
|
APP_ARGS=`save "$@"`
|
||||||
|
|
||||||
|
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||||
|
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||||
|
|
||||||
|
exec "$JAVACMD" "$@"
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
@rem
|
||||||
|
@rem Copyright 2015 the original author or authors.
|
||||||
|
@rem
|
||||||
|
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
@rem you may not use this file except in compliance with the License.
|
||||||
|
@rem You may obtain a copy of the License at
|
||||||
|
@rem
|
||||||
|
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
@rem
|
||||||
|
@rem Unless required by applicable law or agreed to in writing, software
|
||||||
|
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
@rem See the License for the specific language governing permissions and
|
||||||
|
@rem limitations under the License.
|
||||||
|
@rem
|
||||||
|
|
||||||
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
|
@rem
|
||||||
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
|
@rem ##########################################################################
|
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
|
set DIRNAME=%~dp0
|
||||||
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
|
set APP_BASE_NAME=%~n0
|
||||||
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||||
|
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||||
|
|
||||||
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
|
if "%ERRORLEVEL%" == "0" goto execute
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
pluginManagement {
|
||||||
|
repositories {
|
||||||
|
google {
|
||||||
|
content {
|
||||||
|
includeGroupByRegex("com\\.android.*")
|
||||||
|
includeGroupByRegex("com\\.google.*")
|
||||||
|
includeGroupByRegex("androidx.*")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mavenCentral()
|
||||||
|
gradlePluginPortal()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dependencyResolutionManagement {
|
||||||
|
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rootProject.name = "Ambrosio Android"
|
||||||
|
include(":app")
|
||||||