diff --git a/app/build.gradle b/app/build.gradle index f1eb092..95ce534 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "com.paradoxo.amadeus" minSdkVersion 16 targetSdkVersion 28 - versionCode 16 - versionName "1.0.12" + versionCode 17 + versionName "1.0.13" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true multiDexEnabled true @@ -49,11 +49,11 @@ dependencies { implementation 'com.google.android.material:material:1.0.0' - implementation 'com.google.firebase:firebase-core:17.0.1' - implementation 'com.google.firebase:firebase-auth:18.1.0' - implementation 'com.google.firebase:firebase-storage:18.1.1' - implementation 'com.google.firebase:firebase-database:18.0.1' - implementation 'com.google.firebase:firebase-messaging:19.0.1' + implementation 'com.google.firebase:firebase-core:17.2.0' + implementation 'com.google.firebase:firebase-auth:19.1.0' + implementation 'com.google.firebase:firebase-storage:19.1.0' + implementation 'com.google.firebase:firebase-database:19.1.0' + implementation 'com.google.firebase:firebase-messaging:20.0.0' implementation 'com.google.android.gms:play-services-auth:17.0.0' implementation 'com.google.android.gms:play-services-oss-licenses:17.0.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e3a2cf8..0c51914 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,14 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" package="com.paradoxo.amadeus"> - - - - - - - - - - - - + - - - - + + - - + + + + + + + + + + + + + + + + @@ -70,16 +91,20 @@ android:exported="false" android:permission="true"> - - + + - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/ic_launcher-web.png b/app/src/main/ic_launcher-web.png index d7f74fd..49d9baf 100644 Binary files a/app/src/main/ic_launcher-web.png and b/app/src/main/ic_launcher-web.png differ diff --git a/app/src/main/java/com/paradoxo/amadeus/ListaComandosActivity.java b/app/src/main/java/com/paradoxo/amadeus/ListaComandosActivity.java new file mode 100644 index 0000000..9d456d8 --- /dev/null +++ b/app/src/main/java/com/paradoxo/amadeus/ListaComandosActivity.java @@ -0,0 +1,17 @@ +package com.paradoxo.amadeus; + +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; + +import static com.paradoxo.amadeus.util.Util.configurarToolBarBranca; + +public class ListaComandosActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_lista_comandos); + configurarToolBarBranca(this); + } +} diff --git a/app/src/main/java/com/paradoxo/amadeus/activity/AlteraRespostasActivity.java b/app/src/main/java/com/paradoxo/amadeus/activity/AlteraRespostasActivity.java index cd1e858..aee5f39 100644 --- a/app/src/main/java/com/paradoxo/amadeus/activity/AlteraRespostasActivity.java +++ b/app/src/main/java/com/paradoxo/amadeus/activity/AlteraRespostasActivity.java @@ -22,11 +22,14 @@ import com.paradoxo.amadeus.adapter.AdapterMensagensBusca; import com.paradoxo.amadeus.dao.AutorDAO; import com.paradoxo.amadeus.dao.MensagemDAO; +import com.paradoxo.amadeus.modelo.Autor; import com.paradoxo.amadeus.modelo.Mensagem; import com.paradoxo.amadeus.util.Animacoes; import java.util.List; +import static com.paradoxo.amadeus.util.Util.configurarToolBarBranca; + public class AlteraRespostasActivity extends AppCompatActivity { private MensagemDAO mensagemDAO; @@ -39,6 +42,7 @@ public class AlteraRespostasActivity extends AppCompatActivity { private EditText editTextPergunta, editTextResposta; private String respostaSelecionada, perguntaSelecionada; private LinearLayout linearLayoutPergunta, linearLayoutResposta; + private boolean inserindo; @Override @@ -46,10 +50,11 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_respostas_alterar); - recuperarPerguntaActivityAnterior(); - + configurarToolBarBranca(this); mensagemDAO = new MensagemDAO(this); + recuperarPerguntaActivityAnterior(); + configurarRecylers(); iniciarlizarInterface(); } @@ -59,6 +64,7 @@ private void recuperarPerguntaActivityAnterior() { Intent intent = this.getIntent(); perguntaSelecionada = intent.getStringExtra("pergunta_selecionada"); respostaSelecionada = intent.getStringExtra("resposta_selecionada"); + inserindo = intent.getBooleanExtra("inserindo",false); if (respostaSelecionada != null) perguntaJaPossuiResposta = true; } catch (Exception e) { @@ -122,7 +128,6 @@ private void iniciarlizarInterface() { editTextResposta.setText(respostaSelecionada); editTextResposta.setSelection(respostaSelecionada.length()); editTextResposta.addTextChangedListener(detectarMudancaTextoResposta); - } editTextPergunta.setOnEditorActionListener(new TextView.OnEditorActionListener() { @@ -232,25 +237,32 @@ private void animarRecyclerResposta() { public void atualizarResposta() { - // Fazer isso em asyncTask no futuro - String novaPergunta = String.valueOf(editTextPergunta.getText()).trim(); - String novaResposta = String.valueOf(editTextResposta.getText()).trim(); + String novaPergunta = String.valueOf(editTextPergunta.getText()).trim().toLowerCase(); + String novaResposta = String.valueOf(editTextResposta.getText()).trim().toLowerCase(); if (!(novaPergunta.length() < 1 || novaResposta.length() < 1)) { + meuToast("Gravando resposta"); MensagemDAO msgDAO = new MensagemDAO(this); mensagens = msgDAO.listarRespostasCompleto(); Mensagem objMsgPergunta = new Mensagem(); - objMsgPergunta.setConteudo(perguntaSelecionada); - objMsgPergunta = (msgDAO.buscaPorConteudo(objMsgPergunta, !perguntaJaPossuiResposta)); + objMsgPergunta.setConteudo(novaPergunta); - if (!novaPergunta.equals(perguntaSelecionada)) { - objMsgPergunta.setConteudo(novaPergunta); - msgDAO.alterar(objMsgPergunta); + if (inserindo) { + objMsgPergunta.setAutor(new Autor(1)); + objMsgPergunta.setId((int) msgDAO.inserirMensagem(objMsgPergunta)); + } else { + objMsgPergunta = (msgDAO.buscaPorConteudo(objMsgPergunta, !perguntaJaPossuiResposta)); + + if (!novaPergunta.equals(perguntaSelecionada) || inserindo) { + objMsgPergunta.setConteudo(novaPergunta); + msgDAO.alterar(objMsgPergunta); + } } + if (!novaResposta.equals(respostaSelecionada)) { Mensagem objMsgResposta = new Mensagem(); objMsgResposta.setConteudo(novaResposta); diff --git a/app/src/main/java/com/paradoxo/amadeus/activity/ListarRespostasActivity.java b/app/src/main/java/com/paradoxo/amadeus/activity/ListarRespostasActivity.java index e5b10ac..9dc51be 100644 --- a/app/src/main/java/com/paradoxo/amadeus/activity/ListarRespostasActivity.java +++ b/app/src/main/java/com/paradoxo/amadeus/activity/ListarRespostasActivity.java @@ -1,32 +1,36 @@ package com.paradoxo.amadeus.activity; import android.annotation.SuppressLint; -import android.app.Dialog; import android.app.ProgressDialog; import android.content.Intent; import android.os.AsyncTask; -import android.os.Build; import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; -import android.view.Window; -import android.view.WindowManager; +import android.widget.EditText; +import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; import com.paradoxo.amadeus.R; +import com.paradoxo.amadeus.activity.redesign.SimpleCallback; import com.paradoxo.amadeus.adapter.AdapterEditaMensagem; import com.paradoxo.amadeus.dao.MensagemDAO; import com.paradoxo.amadeus.modelo.Mensagem; import java.util.ArrayList; import java.util.List; -import java.util.Objects; + +import static com.paradoxo.amadeus.util.Util.configurarToolBarBranca; public class ListarRespostasActivity extends AppCompatActivity { @@ -35,6 +39,7 @@ public class ListarRespostasActivity extends AppCompatActivity { private AdapterEditaMensagem adapterEditaMensagem; private ProgressDialog progressDialogCarregandoBanco; private List mensagens = new ArrayList<>(); + RecyclerView recyclerView; @NonNull @Override @@ -47,100 +52,88 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_respostas_listar); - progressDialogCarregandoBanco = ProgressDialog.show(this, getString(R.string.carregando_banco), getString(R.string.aguarde), true, false); - textViewNenhumaMsgAinda = findViewById(R.id.nenhumaMensagemAindaTextView); - - CarregarMensagens carregarMensagens = new CarregarMensagens(); - carregarMensagens.execute(); + CarregaMensagens carregaMensagens = new CarregaMensagens(); + carregaMensagens.execute(); - } - - private void configurarRecycler(TextView textViewNenhumaMsgAinda) { - textViewNenhumaMsgAinda.setVisibility(View.INVISIBLE); - RecyclerView recyclerView = findViewById(R.id.recycler); - adapterEditaMensagem = new AdapterEditaMensagem(mensagens); - recyclerView.setAdapter(adapterEditaMensagem); - recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); + configurarToolBarBranca(this); + configurarToolbar(); + configurarRecycler(); - posicaoDaMensagemEmEdicao = -1; - // O valor "-1" indica que nenhuma mensagem está em edição no momento e por isso o método "onResume" não precisa atualizar a recycler quando chamado + configurarEditTextBusca(); - adapterEditaMensagem.setOnItemClickListenerEditar(new AdapterEditaMensagem.OnItemClickListener() { + findViewById(R.id.enviarButton).setOnClickListener(new View.OnClickListener() { @Override - public void onItemClick(View view, int pos) { - editarMensagem(pos); - posicaoDaMensagemEmEdicao = pos; - } - }); + public void onClick(View v) { + Intent alterarRespostasActivity = new Intent(ListarRespostasActivity.this, AlteraRespostasActivity.class); + alterarRespostasActivity.putExtra("pergunta_selecionada", ((EditText) findViewById(R.id.mensagemUsuarioTextView)).getText().toString()); + alterarRespostasActivity.putExtra("inserindo",true); - adapterEditaMensagem.setOnItemClickListenerExcluir(new AdapterEditaMensagem.OnItemClickListener() { - @Override - public void onItemClick(View view, final int pos) { - excluirMensagem(pos); + startActivity(alterarRespostasActivity); } }); } - private void excluirMensagem(final int pos) { - final Dialog builder = new Dialog(ListarRespostasActivity.this); - builder.requestWindowFeature(Window.FEATURE_NO_TITLE); - builder.setContentView(R.layout.item_msg_excluir); - WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); - - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - layoutParams.copyFrom(Objects.requireNonNull(builder.getWindow()).getAttributes()); - } - - - layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; - layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + private void configurarEditTextBusca() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - Objects.requireNonNull(builder.getWindow()).setAttributes(layoutParams); - } - - - TextView textViewItemPergunta = builder.findViewById(R.id.conteudoPerguntaTextView); - TextView textViewItemResposta = builder.findViewById(R.id.conteudoRespostaTextView); - textViewItemPergunta.setText(mensagens.get(pos).getConteudo()); - textViewItemResposta.setText(mensagens.get(pos).getConteudo_resposta()); + ((EditText) findViewById(R.id.mensagemUsuarioTextView)).addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } - (builder.findViewById(R.id.confirmarButton)).setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View v) { + public void onTextChanged(CharSequence s, int start, int before, int count) { - try { - MensagemDAO mensagemDAO = new MensagemDAO(getApplicationContext()); - mensagemDAO.excluirResposta(mensagens.get(pos)); + } - mensagens = mensagemDAO.listarRespostasCompleto(); - adapterEditaMensagem.remover(pos); + @Override + public void afterTextChanged(Editable s) { + String textoDaBusca = s.toString(); + + if (!textoDaBusca.trim().isEmpty()) { + CarregaMensagensParcial carregaMensagensParcial = new CarregaMensagensParcial(); + carregaMensagensParcial.setTextoBusca(textoDaBusca); + carregaMensagensParcial.execute(); + } else { + CarregaMensagens carregaMensagens = new CarregaMensagens(); + carregaMensagens.execute(); + } + } + }); + } - meuToast(String.valueOf(getApplicationContext().getText(R.string.msg_deletada_sucesso))); + private void configurarToolbar() { + Toolbar toolbar = findViewById(R.id.toolbar); + toolbar.setTitle("Algo 2"); + toolbar.setTitleTextColor(getResources().getColor(R.color.gray_700)); - if (mensagens.size() == 0) { - meuToast(String.valueOf(getApplicationContext().getText(R.string.nenhuma_resposta_gravada))); + setSupportActionBar(toolbar); + getSupportActionBar().setTitle("Algo"); + } - } + private void configurarRecycler() { + textViewNenhumaMsgAinda = findViewById(R.id.nenhumaMensagemAindaTextView); + textViewNenhumaMsgAinda.setVisibility(View.INVISIBLE); + recyclerView = findViewById(R.id.recycler); - } catch (Exception e) { - meuToast(String.valueOf(getApplicationContext().getText(R.string.erro_apagar_msg))); - } + adapterEditaMensagem = new AdapterEditaMensagem(mensagens); + recyclerView.setAdapter(adapterEditaMensagem); + recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); - builder.dismiss(); - } - }); + posicaoDaMensagemEmEdicao = -1; + // O valor "-1" indica que nenhuma mensagem está em edição no momento e por isso o método "onResume" não precisa atualizar a recycler quando chamado - (builder.findViewById(R.id.cancelarButton)).setOnClickListener(new View.OnClickListener() { + adapterEditaMensagem.setOnItemClickListenerEditar(new AdapterEditaMensagem.OnItemClickListener() { @Override - public void onClick(View v) { - builder.cancel(); + public void onItemClick(View view, int pos) { + editarMensagem(pos); + posicaoDaMensagemEmEdicao = pos; } }); - builder.show(); + ItemTouchHelper itemTouchHelper = new + ItemTouchHelper(new SimpleCallback(adapterEditaMensagem, ListarRespostasActivity.this)); + itemTouchHelper.attachToRecyclerView(recyclerView); } @Override @@ -185,11 +178,17 @@ public void meuToast(String texto) { } @SuppressLint("StaticFieldLeak") - public class CarregarMensagens extends AsyncTask { + public class CarregaMensagens extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + progressDialogCarregandoBanco = ProgressDialog.show(ListarRespostasActivity.this, getString(R.string.carregando_banco), getString(R.string.aguarde), true, false); + } + @Override protected Void doInBackground(Void... voids) { buscarMensagensBanco(); - return null; } @@ -198,16 +197,75 @@ protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); progressDialogCarregandoBanco.dismiss(); if (mensagens.size() > 0) { - configurarRecycler(textViewNenhumaMsgAinda); - + mostrarLayoutRecycler(); } else { - textViewNenhumaMsgAinda.setVisibility(View.VISIBLE); + mostrarLayoutNadaEncontrado(); } } } + private void mostrarLayoutRecycler() { + adapterEditaMensagem.trocaTudo(mensagens); + adapterEditaMensagem.notifyDataSetChanged(); + + recyclerView.setVisibility(View.VISIBLE); + textViewNenhumaMsgAinda.setVisibility(View.GONE); + + + } + + private void mostrarLayoutNadaEncontrado() { + recyclerView.setVisibility(View.GONE); + textViewNenhumaMsgAinda.setVisibility(View.VISIBLE); + } + private void buscarMensagensBanco() { MensagemDAO msgDAO = new MensagemDAO(getBaseContext()); mensagens = msgDAO.listarRespostasCompleto(); } + + private void buscarMensagensBancoParcial(String textoBusca) { + MensagemDAO msgDAO = new MensagemDAO(getBaseContext()); + mensagens = msgDAO.listarParcial(textoBusca, true); + } + + + @SuppressLint("StaticFieldLeak") + public class CarregaMensagensParcial extends AsyncTask { + String textoBusca; + + public void setTextoBusca(String textoBusca) { + this.textoBusca = textoBusca; + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + + if (progressDialogCarregandoBanco.isShowing()) { + progressDialogCarregandoBanco.dismiss(); + } + progressDialogCarregandoBanco = ProgressDialog.show(ListarRespostasActivity.this, getString(R.string.buscando), getString(R.string.aguarde), true, false); + + } + + @Override + protected Void doInBackground(Void... voids) { + buscarMensagensBancoParcial(textoBusca); + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + progressDialogCarregandoBanco.dismiss(); + if (mensagens.size() > 0) { + mostrarLayoutRecycler(); + + } else { + mostrarLayoutNadaEncontrado(); + } + } + } + } diff --git a/app/src/main/java/com/paradoxo/amadeus/activity/ListarRespostasActivityOld.java b/app/src/main/java/com/paradoxo/amadeus/activity/ListarRespostasActivityOld.java new file mode 100644 index 0000000..362be51 --- /dev/null +++ b/app/src/main/java/com/paradoxo/amadeus/activity/ListarRespostasActivityOld.java @@ -0,0 +1,213 @@ +package com.paradoxo.amadeus.activity; + +import android.annotation.SuppressLint; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Intent; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.RecyclerView; + +import com.paradoxo.amadeus.R; +import com.paradoxo.amadeus.adapter.AdapterEditaMensagem; +import com.paradoxo.amadeus.dao.MensagemDAO; +import com.paradoxo.amadeus.modelo.Mensagem; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class ListarRespostasActivityOld extends AppCompatActivity { + + TextView textViewNenhumaMsgAinda; + private int posicaoDaMensagemEmEdicao = -1; + private AdapterEditaMensagem adapterEditaMensagem; + private ProgressDialog progressDialogCarregandoBanco; + private List mensagens = new ArrayList<>(); + + @NonNull + @Override + public LayoutInflater getLayoutInflater() { + return super.getLayoutInflater(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_respostas_listar); + + progressDialogCarregandoBanco = ProgressDialog.show(this, getString(R.string.carregando_banco), getString(R.string.aguarde), true, false); + //textViewNenhumaMsgAinda = findViewById(R.id.nenhumaMensagemAindaTextView); + + CarregarMensagens carregarMensagens = new CarregarMensagens(); + carregarMensagens.execute(); + + } + + private void configurarRecycler(TextView textViewNenhumaMsgAinda) { + textViewNenhumaMsgAinda.setVisibility(View.INVISIBLE); + RecyclerView recyclerView = findViewById(R.id.recycler); + adapterEditaMensagem = new AdapterEditaMensagem(mensagens); + recyclerView.setAdapter(adapterEditaMensagem); + recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); + + posicaoDaMensagemEmEdicao = -1; + // O valor "-1" indica que nenhuma mensagem está em edição no momento e por isso o método "onResume" não precisa atualizar a recycler quando chamado + + adapterEditaMensagem.setOnItemClickListenerEditar(new AdapterEditaMensagem.OnItemClickListener() { + @Override + public void onItemClick(View view, int pos) { + editarMensagem(pos); + posicaoDaMensagemEmEdicao = pos; + } + }); + + adapterEditaMensagem.setOnItemClickListenerExcluir(new AdapterEditaMensagem.OnItemClickListener() { + @Override + public void onItemClick(View view, final int pos) { + excluirMensagem(pos); + } + }); + } + + private void excluirMensagem(final int pos) { + final Dialog builder = new Dialog(ListarRespostasActivityOld.this); + builder.requestWindowFeature(Window.FEATURE_NO_TITLE); + builder.setContentView(R.layout.item_msg_excluir); + WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); + + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + layoutParams.copyFrom(Objects.requireNonNull(builder.getWindow()).getAttributes()); + } + + + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + Objects.requireNonNull(builder.getWindow()).setAttributes(layoutParams); + } + + + TextView textViewItemPergunta = builder.findViewById(R.id.conteudoPerguntaTextView); + TextView textViewItemResposta = builder.findViewById(R.id.conteudoRespostaTextView); + textViewItemPergunta.setText(mensagens.get(pos).getConteudo()); + textViewItemResposta.setText(mensagens.get(pos).getConteudo_resposta()); + + + (builder.findViewById(R.id.confirmarButton)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + try { + MensagemDAO mensagemDAO = new MensagemDAO(getApplicationContext()); + mensagemDAO.excluirResposta(mensagens.get(pos)); + + mensagens = mensagemDAO.listarRespostasCompleto(); + adapterEditaMensagem.remover(pos); + + meuToast(String.valueOf(getApplicationContext().getText(R.string.msg_deletada_sucesso))); + + if (mensagens.size() == 0) { + meuToast(String.valueOf(getApplicationContext().getText(R.string.nenhuma_resposta_gravada))); + + } + + } catch (Exception e) { + meuToast(String.valueOf(getApplicationContext().getText(R.string.erro_apagar_msg))); + } + + builder.dismiss(); + } + }); + + (builder.findViewById(R.id.cancelarButton)).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + builder.cancel(); + } + }); + + builder.show(); + } + + @Override + protected void onResume() { + super.onResume(); + atualizarRecyclerSeOuveAlteracao(); + } + + @SuppressLint("StaticFieldLeak") + private void atualizarRecyclerSeOuveAlteracao() { + if (posicaoDaMensagemEmEdicao > -1) { + + new AsyncTask() { + @Override + protected Object doInBackground(Object[] objects) { + buscarMensagensBanco(); + return null; + } + + @Override + protected void onPostExecute(Object o) { + super.onPostExecute(o); + adapterEditaMensagem.atualizar(mensagens.get(posicaoDaMensagemEmEdicao), posicaoDaMensagemEmEdicao); + posicaoDaMensagemEmEdicao = -1; + + } + }.execute(); + } + } + + public void editarMensagem(int position) { + Intent alterarRespostasActivity = new Intent(this, AlteraRespostasActivity.class); + alterarRespostasActivity.putExtra("pergunta_selecionada", mensagens.get(position).getConteudo()); + alterarRespostasActivity.putExtra("resposta_selecionada", mensagens.get(position).getConteudo_resposta()); + alterarRespostasActivity.putExtra("id_selecionado", String.valueOf(position)); + startActivity(alterarRespostasActivity); + + } + + public void meuToast(String texto) { + Toast.makeText(this, texto, Toast.LENGTH_LONG).show(); + } + + @SuppressLint("StaticFieldLeak") + public class CarregarMensagens extends AsyncTask { + @Override + protected Void doInBackground(Void... voids) { + buscarMensagensBanco(); + + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + progressDialogCarregandoBanco.dismiss(); + if (mensagens.size() > 0) { + configurarRecycler(textViewNenhumaMsgAinda); + + } else { + textViewNenhumaMsgAinda.setVisibility(View.VISIBLE); + } + } + } + + private void buscarMensagensBanco() { + MensagemDAO msgDAO = new MensagemDAO(getBaseContext()); + mensagens = msgDAO.listarRespostasCompleto(); + } +} diff --git a/app/src/main/java/com/paradoxo/amadeus/activity/LoadActivity.java b/app/src/main/java/com/paradoxo/amadeus/activity/LoadActivity.java index faa23de..be1c4fd 100644 --- a/app/src/main/java/com/paradoxo/amadeus/activity/LoadActivity.java +++ b/app/src/main/java/com/paradoxo/amadeus/activity/LoadActivity.java @@ -1,42 +1,69 @@ package com.paradoxo.amadeus.activity; -import android.content.DialogInterface; +import android.annotation.SuppressLint; import android.content.Intent; import android.content.SharedPreferences; +import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; +import android.view.KeyEvent; import android.view.View; -import android.widget.AutoCompleteTextView; -import android.widget.Button; -import android.widget.EditText; +import android.view.inputmethod.EditorInfo; +import android.widget.TextView; import android.widget.Toast; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; -import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; import com.paradoxo.amadeus.R; import com.paradoxo.amadeus.dao.AutorDAO; import com.paradoxo.amadeus.modelo.Autor; +import static com.paradoxo.amadeus.util.Toasts.meuToast; +import static com.paradoxo.amadeus.util.Util.configurarToolBarBranca; + public class LoadActivity extends AppCompatActivity { public static boolean emEdicao = false; + TextInputEditText nomeUsuarioEditText, nomeIaEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_load); + setContentView(R.layout.activity_load_redesign); + + configurarToolBarBranca(this); + configuarBotaoLinkStart(); + configurarTextInput(); verificarSeEstaEditando(); - findViewById(R.id.linkStartButton).setOnClickListener(new View.OnClickListener() { + } + + private void configurarTextInput() { + nomeUsuarioEditText = findViewById(R.id.nomeUsuEditText); + nomeIaEditText = findViewById(R.id.nomeIAEditText); + + ((TextInputEditText) findViewById(R.id.nomeIAEditText)).setOnEditorActionListener(new TextInputEditText.OnEditorActionListener() { @Override - public void onClick(View v) { - configurarBotaoLinkStart(); + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_GO) { + verificarNomes(); + return true; + } + return false; } }); + } - + private void configuarBotaoLinkStart() { + findViewById(R.id.okButton).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + verificarNomes(); + } + }); } private void verificarSeEstaEditando() { @@ -44,15 +71,13 @@ private void verificarSeEstaEditando() { Intent intent = this.getIntent(); if (intent.getStringExtra("nomeUsu").length() > 0) { - EditText editTextNomeUsu = findViewById(R.id.nomeUsuarioTextView); - EditText editTextNomeIa = findViewById(R.id.nomeIATextView); - Button buttonLinkStart = findViewById(R.id.linkStartButton); + MaterialButton buttonLinkStart = findViewById(R.id.okButton); - editTextNomeUsu.setText(intent.getStringExtra("nomeUsu")); - editTextNomeUsu.setSelection(editTextNomeUsu.getText().length()); + nomeUsuarioEditText.setText(intent.getStringExtra("nomeUsu")); + nomeUsuarioEditText.setSelection(String.valueOf(nomeUsuarioEditText.getText()).length()); - editTextNomeIa.setText(intent.getStringExtra("nomeIA")); - editTextNomeIa.setSelection(editTextNomeIa.getText().length()); + nomeIaEditText.setText(intent.getStringExtra("nomeIA")); + nomeIaEditText.setSelection(String.valueOf(nomeIaEditText.getText()).length()); buttonLinkStart.setText(this.getString(R.string.Atualizar)); @@ -60,69 +85,87 @@ private void verificarSeEstaEditando() { } } catch (Exception e) { Log.e("Acitivity Load", "Primeiro uso"); + e.printStackTrace(); } - chamarDialogPrimeiroUso(); } - private void chamarDialogPrimeiroUso() { - if (!emEdicao) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(String.valueOf(this.getText(R.string.bem_vindo))); - builder.setMessage(String.valueOf(this.getText(R.string.moldar_as_coisas))); - - builder.setPositiveButton(String.valueOf(this.getText(R.string.ok)), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface arg0, int arg1) { - } - }); - + @SuppressLint("StaticFieldLeak") + public void gravarDados() { + new AsyncTask() { - builder.setNegativeButton(String.valueOf(this.getText(R.string.cancelar)), new DialogInterface.OnClickListener() { - public void onClick(DialogInterface arg0, int arg1) { - LoadActivity.this.finishAffinity(); + @Override + protected void onPreExecute() { + super.onPreExecute(); + Toast.makeText(getApplicationContext(), getString(R.string.gravando_dados), Toast.LENGTH_LONG).show(); + } - } - }); + @Override + protected Void doInBackground(Void... voids) { + String nomeUsu = String.valueOf(nomeUsuarioEditText.getText()).trim(); + String nomeIa = String.valueOf(nomeIaEditText.getText()).trim(); - AlertDialog alerta = builder.create(); - alerta.show(); - emEdicao = false; - } - } + Autor objAutorUsu = new Autor(2, nomeUsu); + Autor objAutorIa = new Autor(1, nomeIa); - public void configurarBotaoLinkStart() { - AutoCompleteTextView NomeUsu = findViewById(R.id.nomeUsuarioTextView); - AutoCompleteTextView NomeIA = findViewById(R.id.nomeIATextView); - String nomeUsu = NomeUsu.getText().toString().trim(); - String nomeIa = NomeIA.getText().toString().trim(); + AutorDAO autorDAO = new AutorDAO(getApplicationContext()); + autorDAO.alterar(objAutorIa); + autorDAO.alterar(objAutorUsu); - if ((nomeIa.length() > 0) && (nomeUsu.length() > 0)) { + return null; + } - Autor objAutorUsu = new Autor(2, nomeUsu); - Autor objAutorIa = new Autor(1, nomeIa); + @Override + protected void onPostExecute(Void v) { + super.onPostExecute(v); - AutorDAO autorDAO = new AutorDAO(this); - autorDAO.alterar(objAutorIa); - autorDAO.alterar(objAutorUsu); + setPrefBool(); + Intent mainActivity = new Intent(LoadActivity.this, MainActivity.class); + startActivity(mainActivity); + finish(); + } + }.execute(); + } - Toast.makeText(this, getString(R.string.gravando_dados), Toast.LENGTH_LONG).show(); + public void verificarNomes() { + TextInputLayout nomeUsuTextInput = findViewById(R.id.nomeUsuTextInput); + TextInputLayout nomeIATextInput = findViewById(R.id.nomeIATextInput); - setPrefBool(); - Intent mainActivity = new Intent(LoadActivity.this, MainActivity.class); - startActivity(mainActivity); - finish(); + if (String.valueOf(nomeUsuarioEditText.getText()).isEmpty()) { + nomeUsuTextInput.setError(getString(R.string.nome_invalido)); + } else { + nomeUsuTextInput.setErrorEnabled(false); + } + if (String.valueOf(nomeIaEditText.getText()).isEmpty()) { + nomeIATextInput.setError(getString(R.string.nome_invalido)); + return; } else { - Snackbar.make(findViewById(R.id.activityLoad), String.valueOf(this.getText(R.string.preencha_tudo)), Snackbar.LENGTH_LONG) - .setAction("Action", null).show(); + nomeIATextInput.setErrorEnabled(false); } + gravarDados(); + } private void setPrefBool() { SharedPreferences sharedPreferences = getSharedPreferences("PrefsUsu", MODE_PRIVATE); SharedPreferences.Editor mEditor = sharedPreferences.edit(); mEditor.putBoolean("bancoInserido", true); + mEditor.putBoolean("ja_foi_aberto", true); + mEditor.apply(); } } + + + + + + + + + + + + diff --git a/app/src/main/java/com/paradoxo/amadeus/activity/MainActivity.java b/app/src/main/java/com/paradoxo/amadeus/activity/MainActivity.java index e668367..9b893dd 100644 --- a/app/src/main/java/com/paradoxo/amadeus/activity/MainActivity.java +++ b/app/src/main/java/com/paradoxo/amadeus/activity/MainActivity.java @@ -3,7 +3,6 @@ import android.Manifest; import android.annotation.SuppressLint; import android.app.Dialog; -import android.app.ProgressDialog; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; @@ -14,7 +13,6 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; -import android.os.Handler; import android.os.Vibrator; import android.preference.PreferenceManager; import android.speech.tts.TextToSpeech; @@ -29,8 +27,8 @@ import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; -import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; @@ -43,21 +41,19 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.navigation.NavigationView; +import com.paradoxo.amadeus.ListaComandosActivity; import com.paradoxo.amadeus.R; import com.paradoxo.amadeus.adapter.AdapterMensagensHome; import com.paradoxo.amadeus.dao.AutorDAO; -import com.paradoxo.amadeus.dao.BDGateway; import com.paradoxo.amadeus.dao.MensagemDAO; import com.paradoxo.amadeus.modelo.Autor; import com.paradoxo.amadeus.modelo.Mensagem; import com.paradoxo.amadeus.nuvem.BancosOnlineActivity; import com.paradoxo.amadeus.service.EscutadaoraService; -import com.paradoxo.amadeus.util.Arquivo; import com.paradoxo.amadeus.util.Chatbot; import com.paradoxo.amadeus.util.Classificador; import com.paradoxo.amadeus.util.SpeechToText; -import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Locale; @@ -65,6 +61,7 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static com.paradoxo.amadeus.enums.AcaoEnum.ACAO_ACESSAR_ARMAZENAMENTO; +import static com.paradoxo.amadeus.util.Util.configurarToolBarBranca; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { @@ -86,7 +83,6 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On private RecyclerView recyclerViewMensagens; private static Autor autorIA, autorUsuario; private AdapterMensagensHome adapterMensagensHome; - private ProgressDialog dialogCarregandoBancoInicial; private boolean vozIaAtiva, vozIaAtivaMesmoSemResposta; @@ -95,6 +91,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + configurarToolBarBranca(this); inicializarConfiguracoes(); } @@ -110,34 +107,26 @@ public void pararEscutadoraService() { stopService(intent); } - private void inicializarConfiguracoes() { - if (!getPrefBool("bancoInserido")) { - realizarPrimeiroLoad(); - } else { - - dialog_changelog(); - List autores = carregarInformacoesIniciais(); - carregarNomeUsuarioIA(autores); - - chatbot = new Chatbot(this, autores); - if (!getPrefBool("bdMudou")) { - // Evita que uma saudação seja feita com o nome de usuário errado durante a transição de um banco baixado - chatbot.despertar(); - } - - inicializarComponentes(); + dialog_changelog(); + List autores = carregarInformacoesIniciais(); + carregarNomeUsuarioIA(autores); + chatbot = new Chatbot(this, autores); + if (!getPrefBool("bdMudou")) { + // Evita que uma saudação seja feita com o nome de usuário errado durante a transição de um banco baixado + chatbot.despertar(); } + + inicializarComponentes(); } private void inicializarComponentes() { configurarRecycler(); solicitarPermissaoMicrofone(); - NavigationView navigationView = findViewById(R.id.navigationView); - navigationView.setNavigationItemSelectedListener(this); + configurarNavigation(); configurarCaixaDeDigitacaoMensagem(); configurarBotaoEnvioMensagem(); @@ -145,6 +134,20 @@ private void inicializarComponentes() { verificarModoVozAtivado(); AtivarComandosPorVoz(); configurarFalaIA(); + + + } + + private void configurarNavigation() { + NavigationView navigationView = findViewById(R.id.navigationView); + navigationView.setNavigationItemSelectedListener(this); + + Menu menu = navigationView.getMenu(); + TextView nav_editarRespostas = menu.findItem(R.id.nav_editarRespostas).getActionView().findViewById(R.id.conteudoTextView); + TextView nav_comandosText = menu.findItem(R.id.nav_comandos).getActionView().findViewById(R.id.conteudoTextView); + + nav_comandosText.setText(getString(R.string.novo)); + nav_editarRespostas.setText(getString(R.string.reformulado)); } @@ -154,6 +157,7 @@ private void configurarRecycler() { recyclerViewMensagens = findViewById(R.id.recycler); + adapterMensagensHome = new AdapterMensagensHome(mensagems); adapterMensagensHome = new AdapterMensagensHome(mensagems); recyclerViewMensagens.setAdapter(adapterMensagensHome); adapterMensagensHome.setOnLongClickListener(new AdapterMensagensHome.OnLongClickListener() { @@ -196,15 +200,6 @@ public String identificarApp(String entrada) { return nomeApp; } - private void realizarPrimeiroLoad() { - dialogCarregandoBancoInicial = ProgressDialog.show(this, "Carregando banco inicial", "Esse processo só precisa ser feito uma vez\nAguarde um momento...", true, false); - dialogCarregandoBancoInicial.show(); - - PrimeiroLoad primeiroLoad = new PrimeiroLoad(); - primeiroLoad.execute(); - // Vai carregar o banco de dados pré pronto e depois chama a activity de login - } - private void configurarCaixaDeDigitacaoMensagem() { editTextMsgUsu = findViewById(R.id.mensagemUsuarioTextView); editTextMsgUsu.addTextChangedListener(new TextWatcher() { @@ -214,13 +209,13 @@ public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { - Button btn = findViewById(R.id.enviarButton); + ImageView btn = findViewById(R.id.enviarButton); if (editTextMsgUsu.getText().length() > 0 && !escutando) { - btn.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_enviar)); + btn.setImageResource(R.drawable.ic_enviar); envioViaVoz = true; } else { - btn.setBackground(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_microfone)); + btn.setImageResource(R.drawable.ic_microfone); envioViaVoz = false; } } @@ -232,7 +227,7 @@ public void afterTextChanged(Editable editable) { @SuppressLint("ClickableViewAccessibility") private void configurarBotaoEnvioMensagem() { - final Button btnSend = findViewById(R.id.enviarButton); + final ImageView btnSend = findViewById(R.id.enviarButton); btnSend.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { @@ -324,7 +319,6 @@ private void verificarModoVozAtivado() { vozIaAtiva = sharedPreferences.getBoolean("switch_voz_ia", true); } - public void dialog_changelog() { String versao = ""; try { @@ -434,10 +428,8 @@ public boolean onOptionsItemSelected(MenuItem item) { public boolean onNavigationItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); - switch (id) { case R.id.nav_perfil: { - iniciarEscutadoraService(); carregarNomeUsuarioIA(carregarInformacoesIniciais()); // Atualizando os nomes para o caso de uma importação ter sido feita via Qpython @@ -455,10 +447,15 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) { } case R.id.nav_configuracoes: { - pararEscutadoraService(); Intent settingsActivity = new Intent(MainActivity.this, ConfiguracoesActivity.class); startActivity(settingsActivity); break; + + } + + case R.id.nav_comandos: { + startActivity(new Intent(this, ListaComandosActivity.class)); + break; } case R.id.nav_nuvem: { @@ -734,56 +731,6 @@ public void esconderTeclado() { } } - @SuppressLint("StaticFieldLeak") - public class PrimeiroLoad extends AsyncTask { - @Override - protected void onPreExecute() { - super.onPreExecute(); - Log.e("tag", "Iniciando cópia do banco"); - BDGateway.getInstance(getBaseContext()); - // Isso inicializa o banco para que ele possa ser sobrescrito a seguir - } - - @Override - protected Boolean doInBackground(Void... voids) { - try { - Arquivo.importarBancoPrimeiroUso("Amadeus.db", getApplicationContext()); - Log.e("tag", "Sucesso na cópia do banco"); - } catch (IOException e) { - Log.e("tag", "Erro ao copiar o banco"); - e.printStackTrace(); - return false; - } - - return true; - } - - @Override - protected void onPostExecute(Boolean bancoCopiado) { - super.onPostExecute(bancoCopiado); - - if (bancoCopiado) { - new Handler().postDelayed(new Runnable() { - @Override - public void run() { - cadastrarNomes(); - } - }, 1000); - } else { - meuToast("Falha ao copiar o banco de dados"); - } - } - } - - private void cadastrarNomes() { - Log.e("tag", "Cópia do banco finalizada"); - dialogCarregandoBancoInicial.dismiss(); - - Intent loadActivity = new Intent(getApplicationContext(), LoadActivity.class); - startActivity(loadActivity); - finish(); - } - @SuppressLint("StaticFieldLeak") public class BuscaInteracao extends AsyncTask { private String entradaUsuario; diff --git a/app/src/main/java/com/paradoxo/amadeus/activity/redesign/SimpleCallback.java b/app/src/main/java/com/paradoxo/amadeus/activity/redesign/SimpleCallback.java new file mode 100644 index 0000000..e2523ce --- /dev/null +++ b/app/src/main/java/com/paradoxo/amadeus/activity/redesign/SimpleCallback.java @@ -0,0 +1,134 @@ +package com.paradoxo.amadeus.activity.redesign; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.LightingColorFilter; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.RecyclerView; + +import com.paradoxo.amadeus.R; +import com.paradoxo.amadeus.adapter.AdapterEditaMensagem; +import com.paradoxo.amadeus.dao.MensagemDAO; + +import java.util.Objects; + +import static com.paradoxo.amadeus.util.Toasts.meuToast; + +public class SimpleCallback extends ItemTouchHelper.SimpleCallback { + + private AdapterEditaMensagem mAdapter; + ColorDrawable background; + Drawable icon; + Context context; + + public SimpleCallback(AdapterEditaMensagem adapter, Context context) { + super(0, ItemTouchHelper.RIGHT); + mAdapter = adapter; + this.context = context; + icon = ContextCompat.getDrawable(context, + R.drawable.ic_deletar); + assert icon != null; + icon.setColorFilter(new LightingColorFilter(Color.WHITE, Color.WHITE)); + background = new ColorDrawable(Color.RED); + + + } + + @Override + public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { + super.onChildDraw(c, recyclerView, viewHolder, dX, + dY, actionState, isCurrentlyActive); + View itemView = viewHolder.itemView; + int backgroundCornerOffset = 20; + + + int iconMargin = (itemView.getHeight() - icon.getIntrinsicHeight()) / 2; + int iconTop = itemView.getTop() + (itemView.getHeight() - icon.getIntrinsicHeight()) / 2; + int iconBottom = iconTop + icon.getIntrinsicHeight(); + + if (dX > 0) { // Swiping to the right + int iconLeft = itemView.getLeft() + iconMargin; + int iconRight = iconLeft + icon.getIntrinsicWidth(); + icon.setBounds(iconLeft, iconTop, iconRight, iconBottom); + + background.setBounds(itemView.getLeft(), itemView.getTop(), + itemView.getLeft() + ((int) dX) + backgroundCornerOffset, itemView.getBottom()); + } else if (dX < 0) { // Swiping to the left + int iconLeft = itemView.getRight() - iconMargin - icon.getIntrinsicWidth(); + int iconRight = itemView.getRight() - iconMargin; + icon.setBounds(iconLeft, iconTop, iconRight, iconBottom); + + background.setBounds(itemView.getRight() + ((int) dX) - backgroundCornerOffset, + itemView.getTop(), itemView.getRight(), itemView.getBottom()); + } else { // view is unSwiped + background.setBounds(0, 0, 0, 0); + } + + background.draw(c); + icon.draw(c); + } + + @Override + public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { + return false; + } + + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + int position = viewHolder.getAdapterPosition(); + /* mAdapter.delete(position);*/ + excluirMensagem(position); + } + + private void excluirMensagem(final int pos) { + + final AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(context.getString(R.string.confirmar_excluir)); + builder.setMessage(context.getString(R.string.cornfimar_exclusao_item)); + builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + + + try { + MensagemDAO mensagemDAO = new MensagemDAO(context); + mensagemDAO.excluirResposta(mAdapter.getMensagens().get(pos)); + + mAdapter.notifyItemRemoved(pos); + + meuToast(String.valueOf(context.getText(R.string.msg_deletada_sucesso)),context); + + if (mAdapter.getMensagens().size() == 0) { + meuToast(String.valueOf(context.getText(R.string.nenhuma_resposta_gravada)),context); + + } + + } catch (Exception e) { + meuToast(String.valueOf(context.getText(R.string.erro_apagar_msg)), context); + } + } + + }); + builder.setNegativeButton(R.string.cancelar, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mAdapter.notifyItemChanged(pos); + } + }); + + builder.show(); + } +} diff --git a/app/src/main/java/com/paradoxo/amadeus/activity/redesign/SplashScreenActivity.java b/app/src/main/java/com/paradoxo/amadeus/activity/redesign/SplashScreenActivity.java new file mode 100644 index 0000000..029437d --- /dev/null +++ b/app/src/main/java/com/paradoxo/amadeus/activity/redesign/SplashScreenActivity.java @@ -0,0 +1,114 @@ +package com.paradoxo.amadeus.activity.redesign; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.util.Log; + +import androidx.appcompat.app.AppCompatActivity; + +import com.paradoxo.amadeus.R; +import com.paradoxo.amadeus.activity.LoadActivity; +import com.paradoxo.amadeus.activity.MainActivity; +import com.paradoxo.amadeus.dao.BDGateway; +import com.paradoxo.amadeus.util.Arquivo; + +import java.io.IOException; + +import static com.paradoxo.amadeus.util.Preferencias.appJaFoiAberto; +import static com.paradoxo.amadeus.util.Toasts.meuToast; +import static com.paradoxo.amadeus.util.Util.configurarToolBarBranca; + +public class SplashScreenActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_splash_screen); + + configurarToolBarBranca(this); + decidirParaOndeVai(); + + } + + private void decidirParaOndeVai() { + + if (appJaFoiAberto(this)) { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + startActivity(new Intent(getApplicationContext(), MainActivity.class)); + finish(); + } + }, 1300); + } else { + PrimeiroLoad primeiroLoad = new PrimeiroLoad(); + primeiroLoad.execute(); + + } + } + + @Override + protected void onStart() { + super.onStart(); + overridePendingTransition(R.anim.fade_in, R.anim.fade_out); + } + + @Override + public void finish() { + super.finish(); + overridePendingTransition(R.anim.fade_in, R.anim.fade_out); + } + + private void cadastrarNomes() { + Log.e("tag", "Cópia do banco finalizada"); + + Intent loadActivity = new Intent(getApplicationContext(), LoadActivity.class); + startActivity(loadActivity); + finish(); + } + + @SuppressLint("StaticFieldLeak") + public class PrimeiroLoad extends AsyncTask { + @Override + protected void onPreExecute() { + super.onPreExecute(); + meuToast(getString(R.string.carregando_banco_inicial),getApplicationContext()); + Log.e("tag", "Iniciando cópia do banco"); + BDGateway.getInstance(getBaseContext()); + // Isso inicializa o banco para que ele possa ser sobrescrito a seguir + } + + @Override + protected Boolean doInBackground(Void... voids) { + try { + Arquivo.importarBancoPrimeiroUso("Amadeus.db", getApplicationContext()); + Log.e("tag", "Sucesso na cópia do banco"); + } catch (IOException e) { + Log.e("tag", "Erro ao copiar o banco"); + e.printStackTrace(); + return false; + } + + return true; + } + + @Override + protected void onPostExecute(Boolean bancoCopiado) { + super.onPostExecute(bancoCopiado); + + if (bancoCopiado) { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + cadastrarNomes(); + } + }, 1000); + } else { + meuToast("Falha ao copiar o banco de dados",getApplicationContext()); + } + } + } +} diff --git a/app/src/main/java/com/paradoxo/amadeus/adapter/AdapterEditaMensagem.java b/app/src/main/java/com/paradoxo/amadeus/adapter/AdapterEditaMensagem.java index e843e4e..d9b5f47 100644 --- a/app/src/main/java/com/paradoxo/amadeus/adapter/AdapterEditaMensagem.java +++ b/app/src/main/java/com/paradoxo/amadeus/adapter/AdapterEditaMensagem.java @@ -1,5 +1,6 @@ package com.paradoxo.amadeus.adapter; +import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -17,17 +18,19 @@ public class AdapterEditaMensagem extends RecyclerView.Adapter { private List mensagens; private OnItemClickListener onItemClickListenerEditar, onItemClickListenerExcluir; + private OnLongClickListener onLongClickListener; + public class ViewHolder extends RecyclerView.ViewHolder { final TextView textViewConteudoPergunta, textViewConteudoResposta; - ImageButton imageViewEditar, imageViewExcluir; + final View layoutItemComum; ViewHolder(View view) { super(view); textViewConteudoPergunta = view.findViewById(R.id.conteudoPerguntaTextView); textViewConteudoResposta = view.findViewById(R.id.conteudoRespostaTextView); - imageViewEditar = view.findViewById(R.id.editarTextView); - imageViewExcluir = view.findViewById(R.id.excluirTextView); + layoutItemComum = view.findViewById(R.id.layoutItemComum); + } } @@ -35,9 +38,13 @@ public AdapterEditaMensagem(List mensagens) { this.mensagens = mensagens; } + public void trocaTudo(List mensagens) { + this.mensagens = mensagens; + } + @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_msg_editar, parent, false); + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_lista_tipo_4, parent, false); return new ViewHolder(view); } @@ -51,17 +58,18 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) view.textViewConteudoPergunta.setText(mensagem.getConteudo()); view.textViewConteudoResposta.setText(mensagem.getConteudo_resposta()); - view.imageViewEditar.setOnClickListener(new View.OnClickListener() { + view.layoutItemComum.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View view) { onItemClickListenerEditar.onItemClick(view, position); } }); - view.imageViewExcluir.setOnClickListener(new View.OnClickListener() { + view.layoutItemComum.setOnLongClickListener(new View.OnLongClickListener() { @Override - public void onClick(View view) { - onItemClickListenerExcluir.onItemClick(view, position); + public boolean onLongClick(View view) { + onLongClickListener.onLongClickListener(view, position, mensagem); + return false; } }); } @@ -85,6 +93,14 @@ public interface OnItemClickListener { void onItemClick(View view, int pos); } + public interface OnLongClickListener { + void onLongClickListener(View view, int position, Mensagem mensagem); + } + + public void setOnLongClickListener(OnLongClickListener onLongClickListener) { + this.onLongClickListener = onLongClickListener; + } + public void remover(int position) { mensagens.remove(position); notifyItemRemoved(position); @@ -95,4 +111,12 @@ public void atualizar(Mensagem mensagem, int posicao) { notifyItemChanged(posicao); } + public void delete(int position) { + mensagens.remove(position); + notifyItemRemoved(position); + } + + public List getMensagens() { + return mensagens; + } } diff --git a/app/src/main/java/com/paradoxo/amadeus/adapter/AdapterMensagensHome.java b/app/src/main/java/com/paradoxo/amadeus/adapter/AdapterMensagensHome.java index c745a52..5e94cc2 100644 --- a/app/src/main/java/com/paradoxo/amadeus/adapter/AdapterMensagensHome.java +++ b/app/src/main/java/com/paradoxo/amadeus/adapter/AdapterMensagensHome.java @@ -55,10 +55,10 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType View v; switch (viewType) { case (VIEW_ITEM_MSG_IA): - v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_msg_ia, parent, false); + v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_lista_tipo_1, parent, false); return new ViewHolder(v); case (VIEW_ITEM_MSG_USU): - v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_msg_usu, parent, false); + v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_lista_tipo_2, parent, false); return new ViewHolder(v); case (VIEW_PROGRESSO): v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_progresso, parent, false); diff --git a/app/src/main/java/com/paradoxo/amadeus/dao/MensagemDAO.java b/app/src/main/java/com/paradoxo/amadeus/dao/MensagemDAO.java index c24f045..49e5476 100644 --- a/app/src/main/java/com/paradoxo/amadeus/dao/MensagemDAO.java +++ b/app/src/main/java/com/paradoxo/amadeus/dao/MensagemDAO.java @@ -29,12 +29,14 @@ public long inserirMensagem(Mensagem mensagem) { return bdGateway.getDatabase().insert(TABELA_MENSAGEM, null, contentValues); } - public static void inserirMensagemImportada(String conteudo, int autor) { + public static long inserirMensagemImportada(String conteudo, int autor) { ContentValues contentValues = new ContentValues(); contentValues.put("conteudo", conteudo); contentValues.put("fk_autor", autor); - bdGateway.getDatabase().insert(TABELA_MENSAGEM, null, contentValues); + long id = bdGateway.getDatabase().insert(TABELA_MENSAGEM, null, contentValues); + + return id; } public static void inserirRespostaImportada(int pergunta, int resposta) { diff --git a/app/src/main/java/com/paradoxo/amadeus/util/Preferencias.java b/app/src/main/java/com/paradoxo/amadeus/util/Preferencias.java new file mode 100644 index 0000000..189e2f0 --- /dev/null +++ b/app/src/main/java/com/paradoxo/amadeus/util/Preferencias.java @@ -0,0 +1,51 @@ +package com.paradoxo.amadeus.util; + +import android.content.Context; +import android.content.SharedPreferences; + +import static android.content.Context.MODE_PRIVATE; + +public class Preferencias { + private static final String PREFS_USU = "PrefsUsu"; + private Context context; + + public Preferencias(Context context) { + this.context = context; + } + + public static void confirmarAberturaApp(Context context) { + SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_USU, MODE_PRIVATE); + SharedPreferences.Editor mEditor = sharedPreferences.edit(); + mEditor.putBoolean("ja_foi_aberto", true); + mEditor.apply(); + } + + public static boolean appJaFoiAberto(Context context) { + SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_USU, MODE_PRIVATE); + return sharedPreferences.getBoolean("ja_foi_aberto", false); + } + + private void setPrefBool(String nomeShared, boolean valor) { + SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_USU, MODE_PRIVATE); + SharedPreferences.Editor mEditor = sharedPreferences.edit(); + mEditor.putBoolean(nomeShared, valor); + mEditor.apply(); + } + + private boolean getPrefBool(String nomePref) { + SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_USU, MODE_PRIVATE); + return sharedPreferences.getBoolean(nomePref, false); + } + + public static void setPrefString(String textoShared, String nomeShared, Context context) { + SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_USU, MODE_PRIVATE); + SharedPreferences.Editor mEditor = sharedPreferences.edit(); + mEditor.putString(nomeShared, textoShared); + mEditor.apply(); + } + + public static String getPrefString(String nomeShared, Context context) { + SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_USU, MODE_PRIVATE); + return sharedPreferences.getString(nomeShared, ""); + } +} diff --git a/app/src/main/java/com/paradoxo/amadeus/util/SpeechToText.java b/app/src/main/java/com/paradoxo/amadeus/util/SpeechToText.java index 5385055..f00d306 100644 --- a/app/src/main/java/com/paradoxo/amadeus/util/SpeechToText.java +++ b/app/src/main/java/com/paradoxo/amadeus/util/SpeechToText.java @@ -61,7 +61,7 @@ public void onBeginningOfSpeech() { @Override public void onRmsChanged(float v) { - Log.e("TAG", "onRmsChanged: " + v); + //Log.e("TAG", "onRmsChanged: " + v); } @@ -73,7 +73,7 @@ public void onPartialResults(Bundle partialResults) { if(matches!=null) for (String result : matches) textoEscutado += result; - Log.e("TAG","text: " + textoEscutado); + Log.e("TAG","Texto esctuado: " + textoEscutado); MainActivity.setEditTextMsgUsu(textoEscutado); // Talvez usar biblioteca EventBus seja o ideal para o futuro aqui @@ -122,7 +122,7 @@ public void run(){ public void interrupt() { try { speechRecognizer.stopListening(); - Log.e("TAG","Parou de escutar"); + Log.e("TAG","Parou de escutar MAIN"); } catch (Exception e) { e.printStackTrace(); } diff --git a/app/src/main/java/com/paradoxo/amadeus/util/Toasts.java b/app/src/main/java/com/paradoxo/amadeus/util/Toasts.java new file mode 100644 index 0000000..85cafd2 --- /dev/null +++ b/app/src/main/java/com/paradoxo/amadeus/util/Toasts.java @@ -0,0 +1,16 @@ +package com.paradoxo.amadeus.util; + +import android.content.Context; +import android.widget.Toast; + +import static android.widget.Toast.LENGTH_LONG; +import static android.widget.Toast.LENGTH_SHORT; + +public class Toasts { + public static void meuToast(String texto, Context context) { + Toast.makeText(context, texto, LENGTH_SHORT).show(); + } + public static void meuToastLong(String texto, Context context) { + Toast.makeText(context, texto, LENGTH_LONG).show(); + } +} diff --git a/app/src/main/java/com/paradoxo/amadeus/util/Util.java b/app/src/main/java/com/paradoxo/amadeus/util/Util.java new file mode 100644 index 0000000..7cc36ff --- /dev/null +++ b/app/src/main/java/com/paradoxo/amadeus/util/Util.java @@ -0,0 +1,27 @@ +package com.paradoxo.amadeus.util; + +import android.app.ActionBar; +import android.app.Activity; +import android.graphics.Color; +import android.os.Build; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +public class Util { + + public static void configurarToolBarBranca(Activity activity) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + Window window = activity.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.setStatusBarColor(Color.WHITE); + + View view = activity.findViewById(android.R.id.content); + int flags = view.getSystemUiVisibility(); + flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + view.setSystemUiVisibility(flags); + } + } + +} diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml new file mode 100644 index 0000000..93d14d6 --- /dev/null +++ b/app/src/main/res/anim/fade_in.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml new file mode 100644 index 0000000..9d4c340 --- /dev/null +++ b/app/src/main/res/anim/fade_out.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bolha_cinza_mensagem.xml b/app/src/main/res/drawable/bolha_cinza_mensagem.xml deleted file mode 100644 index 4eca6fd..0000000 --- a/app/src/main/res/drawable/bolha_cinza_mensagem.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/drawable/bolha_vermelha_mensagem.xml b/app/src/main/res/drawable/bolha_vermelha_mensagem.xml deleted file mode 100644 index 8c2e978..0000000 --- a/app/src/main/res/drawable/bolha_vermelha_mensagem.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/drawable/color_cursor.xml b/app/src/main/res/drawable/color_cursor.xml new file mode 100644 index 0000000..acdfb16 --- /dev/null +++ b/app/src/main/res/drawable/color_cursor.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml new file mode 100644 index 0000000..873315e --- /dev/null +++ b/app/src/main/res/drawable/ic_add.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_config.xml b/app/src/main/res/drawable/ic_config.xml new file mode 100644 index 0000000..31132a7 --- /dev/null +++ b/app/src/main/res/drawable/ic_config.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..6688146 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_logo_cinza_right.xml b/app/src/main/res/drawable/ic_logo_cinza_right.xml new file mode 100644 index 0000000..2156e3b --- /dev/null +++ b/app/src/main/res/drawable/ic_logo_cinza_right.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..789bb26 --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/font/open_sans_bold.xml b/app/src/main/res/font/open_sans_bold.xml new file mode 100644 index 0000000..eba352b --- /dev/null +++ b/app/src/main/res/font/open_sans_bold.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/layout/activity_lista_comandos.xml b/app/src/main/res/layout/activity_lista_comandos.xml new file mode 100644 index 0000000..70f9153 --- /dev/null +++ b/app/src/main/res/layout/activity_lista_comandos.xml @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_load.xml b/app/src/main/res/layout/activity_load.xml deleted file mode 100644 index 97d84a8..0000000 --- a/app/src/main/res/layout/activity_load.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -