diff --git a/app/src/main/java/it/approu/dizionario/SchermataRisultati.java b/app/src/main/java/it/approu/dizionario/SchermataRisultati.java index 6fd9b3f..c73e027 100644 --- a/app/src/main/java/it/approu/dizionario/SchermataRisultati.java +++ b/app/src/main/java/it/approu/dizionario/SchermataRisultati.java @@ -1,225 +1,266 @@ package it.approu.dizionario; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; +import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import androidx.appcompat.app.ActionBar; import androidx.appcompat.widget.AppCompatImageButton; import androidx.appcompat.widget.AppCompatTextView; import androidx.core.widget.NestedScrollView; import androidx.appcompat.app.AppCompatActivity; import android.os.Debug; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TableRow; import android.widget.TextView; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; + import org.w3c.dom.Text; +import java.io.IOException; +import java.net.URL; + import it.approu.dizionario.funzioniutili.FunzioniUtili; import it.approu.dizionario.funzioniutili.GestoreVisibilitaCaricamento; import it.approu.dizionario.funzioniutili.MapLinguaCodice; import it.approu.dizionario.rest.ErroreRest; import it.approu.dizionario.rest.GestoreRest; import it.approu.dizionario.rest.Parola; public class SchermataRisultati extends AppCompatActivity { private TextView parola_cercata_etichetta; + private FloatingActionButton fab; private String lingua_origine; private String lingua_destinazione; private String parola; private Integer id_parola; private Context contesto = this; private LinearLayout listaInCuiAggiungereRisultati; private GestoreVisibilitaCaricamento caricamento; private Parola[] paroleTrovate = new Parola[0]; private MediaPlayer media_player_audio_voci = new MediaPlayer(); @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu_schermata_risultati, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // Avvia schermata INFORMAZIONI case R.id.option_actionbar_modifica_schermata_risultati: Intent intent = new Intent(getApplicationContext(), SuggerisciParola.class); if (lingua_origine.toLowerCase().equals("italiano")) { intent.putExtra("parolaItaliano", parola); } else if (lingua_origine.toLowerCase().equals("sanremasco")) { intent.putExtra("parolaSanremasco", parola); } startActivity(intent); break; case R.id.option_actionbar_condividi_schermata_risultati: - Intent sendIntent = new Intent(); - sendIntent.setAction(Intent.ACTION_SEND); - sendIntent.putExtra(Intent.EXTRA_TEXT, generaTestoPerCondivisioneRisultato()); - sendIntent.setType("text/plain"); - Intent shareIntent = Intent.createChooser(sendIntent, null); + Intent shareIntent = FunzioniUtili.condividiTesto(generaTestoPerCondivisioneRisultato()); startActivity(shareIntent); break; case android.R.id.home: finish(); default: break; } return true; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_schermata_risultati); + //Pulsante in sovraimpressione per condividere + fab = findViewById(R.id.floating_button_condividi_risultato); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent shareIntent = FunzioniUtili.condividiTesto(generaTestoPerCondivisioneRisultato()); + startActivity(shareIntent); + } + }); + ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } Intent myInt = getIntent(); //Ottengo i parametri this.lingua_origine = myInt.getStringExtra("linguaOrigine"); this.lingua_destinazione = myInt.getStringExtra("linguaDestinazione"); this.parola = myInt.getStringExtra("parola"); this.id_parola = myInt.getIntExtra("id_parola",-1); this.parola_cercata_etichetta = findViewById(R.id.etichetta_risultati_parola_cercata); this.parola_cercata_etichetta.setText(String.format(getString(R.string.etichetta_parola_cercata_schermata_risultati),this.parola)); listaInCuiAggiungereRisultati = findViewById(R.id.contenitore_traduzioni); caricamento=new GestoreVisibilitaCaricamento((ProgressBar) findViewById(R.id.barraCaricamentoRisultati), new View[]{findViewById(R.id.scrollview_traduzioni)}, true); caricaRisultati(); } private void caricaRisultati() { AsyncTask task = new AsyncTask() { private String messaggio=""; @Override protected void onPreExecute() { super.onPreExecute(); caricamento.caricamento(true); } @Override protected Parola[] doInBackground(String... argomenti) { GestoreRest g = new GestoreRest(); Parola[] vettParole= new Parola[0]; try { vettParole = g.traduzioneEsatta(argomenti[0],argomenti[1], Integer.parseInt(argomenti[2])); Log.d("asynctask termini", "doInBackground: "+vettParole.toString()); } catch (ErroreRest erroreRest) { erroreRest.printStackTrace(); this.messaggio=erroreRest.getMessage(); } return vettParole; } @Override protected void onPostExecute(Parola[] parolas) { super.onPostExecute(parolas); caricamento.caricamento(false); if (!this.messaggio.equals("")) { FunzioniUtili.mostraToast(getBaseContext(), this.messaggio); } impostaRisultati(parolas); } }; task.execute(MapLinguaCodice.linguaPerRicerca(lingua_origine), MapLinguaCodice.linguaPerRicerca(lingua_destinazione), id_parola.toString()); } private void impostaRisultati(Parola[] v_parole) { paroleTrovate = v_parole; + LayoutInflater li = this.getLayoutInflater(); for (final Parola p : v_parole) { - LayoutInflater li = this.getLayoutInflater(); + listaInCuiAggiungereRisultati.addView( + li.inflate(R.layout.divisore_orizzontale, null) + ); TableRow t = (TableRow) li.inflate(R.layout.tablerow_singolo_risultato, null); + String testoDaImpostare = p.toString(); AppCompatTextView viewtesto = (AppCompatTextView) t.getChildAt(0); + AppCompatImageButton pulsante_modifica = (AppCompatImageButton) t.getChildAt(1); + AppCompatImageButton pulsante_audio = (AppCompatImageButton) t.getChildAt(2); viewtesto.setText(testoDaImpostare); //Attivo copia-incolla - viewtesto.setOnLongClickListener( - new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - ClipboardManager cManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); - AppCompatTextView t = (AppCompatTextView) v; - ClipData cData = ClipData.newPlainText("text", t.getText()); - cManager.setPrimaryClip(cData); - FunzioniUtili.mostraToast(contesto, "Testo \""+t.getText().toString()+"\" copiato negli appunti"); - return true; - } - } + t.setOnLongClickListener( + new listener_click_lungo_copia() ); - if (p.getAudio().equals("")) + pulsante_modifica.setTag(p); + pulsante_audio.setTag(p); + t.setTag(p); + + if (/*p.getAudio().equals(""))*/ true) { //Se non c'è audio - t.getChildAt(2).setVisibility(View.GONE); + pulsante_audio.setVisibility(View.INVISIBLE); } else { - /* //Se c'è audio - AppCompatImageButton pulsante = (AppCompatImageButton) t.getChildAt(2); - pulsante.setOnClickListener(new View.OnClickListener() { - Parola p_interna; + pulsante_audio.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - p_interna = p; + Parola parola_attuale = (Parola) v.getTag(); //TODO Bisogna impostare un MediaPlayer e avviarlo + media_player_audio_voci.reset(); + try { + media_player_audio_voci.setDataSource("https://www.approu.it/audio/sample_grafia/fog.ogg"); + } catch (IOException e) { + FunzioniUtili.mostraToast(contesto, getString(R.string.avviso_errore_caricamento_audio)); + } + media_player_audio_voci.prepareAsync(); + media_player_audio_voci.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + mp.start(); + mp.setLooping(false); + } + }); } }); - */ + } listaInCuiAggiungereRisultati.addView(t); } + listaInCuiAggiungereRisultati.addView( + li.inflate(R.layout.divisore_orizzontale, null) + ); } private String generaTestoPerCondivisioneRisultato() { String testo_condivisione = String.format(getString(R.string.testo_condivisione_risultato_paroladipartenza), parola); for (Parola p:paroleTrovate ) { testo_condivisione += "\n- "+p.toString(); } testo_condivisione+="\n\n"; testo_condivisione+=getString(R.string.avvertimento_traduzioni_recenti_correzioni); return testo_condivisione; } + + private class listener_click_lungo_copia implements View.OnLongClickListener{ + + @Override + public boolean onLongClick(View v) { + ClipboardManager cManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + Parola ogg_parola = (Parola) v.getTag(); + ClipData cData = ClipData.newPlainText("text", ogg_parola.toString()); + cManager.setPrimaryClip(cData); + FunzioniUtili.mostraToast(contesto, "Risultato \""+ogg_parola.getParola()+"\" copiato negli appunti"); + return true; + } + } } diff --git a/app/src/main/java/it/approu/dizionario/funzioniutili/FunzioniUtili.java b/app/src/main/java/it/approu/dizionario/funzioniutili/FunzioniUtili.java index 952d003..b988dca 100644 --- a/app/src/main/java/it/approu/dizionario/funzioniutili/FunzioniUtili.java +++ b/app/src/main/java/it/approu/dizionario/funzioniutili/FunzioniUtili.java @@ -1,93 +1,102 @@ package it.approu.dizionario.funzioniutili; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.view.View; import android.view.inputmethod.InputMethod; import android.view.inputmethod.InputMethodManager; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; import it.approu.dizionario.R; public class FunzioniUtili { public static void mostraToast(Context contesto, String messaggio) { Toast.makeText(contesto, messaggio, Toast.LENGTH_LONG).show(); } public static void mostraAvvertimento(Context a, String messaggio,String titolo) { AlertDialog.Builder costruttore = new AlertDialog.Builder(a); costruttore.setCancelable(true) .setIcon(R.drawable.ic_avvertimento_nero) .setTitle(titolo) .setMessage(messaggio) .setNeutralButton( a.getString(R.string.dialogo_pulsante_ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .create() .show(); } public static void mostraNota(Context a, String messaggio, String titolo) { AlertDialog.Builder c = generaNota(a, messaggio, titolo); c.create().show(); } public static AlertDialog.Builder generaNota(Context a, String messaggio, String titolo) { AlertDialog.Builder costruttore = new AlertDialog.Builder(a); costruttore.setCancelable(false) .setTitle(titolo) .setMessage(messaggio) .setNeutralButton( a.getString(R.string.dialogo_pulsante_ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); return costruttore; } public static AlertDialog.Builder mostraDomanda(Context a, String messaggio, String titolo) { AlertDialog.Builder costruttore = new AlertDialog.Builder(a); return costruttore.setCancelable(false) .setTitle(titolo) .setMessage(messaggio); } public static void avvia_url(Context a, String url) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); a.startActivity(i); } public static void mostraTastiera(View view, Context c){ if(view.requestFocus()){ InputMethodManager imm =(InputMethodManager) c.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(view,InputMethodManager.SHOW_IMPLICIT); } } public static void nascondiTastiera(View view, Context c){ InputMethodManager imm =(InputMethodManager) c.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } + public static Intent condividiTesto(String testo) + { + Intent sendIntent = new Intent(); + sendIntent.setAction(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_TEXT, testo); + sendIntent.setType("text/plain"); + Intent shareIntent = Intent.createChooser(sendIntent, null); + return shareIntent; + } } diff --git a/app/src/main/res/layout/activity_schermata_risultati.xml b/app/src/main/res/layout/activity_schermata_risultati.xml index c120b97..b0b45bc 100644 --- a/app/src/main/res/layout/activity_schermata_risultati.xml +++ b/app/src/main/res/layout/activity_schermata_risultati.xml @@ -1,53 +1,68 @@ - + android:textSize="24sp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/etichetta_risultati_parola_cercata" /> - - - + android:orientation="horizontal" + android:shrinkColumns="0" + android:stretchColumns="0"> + + - + diff --git a/app/src/main/res/layout/divisore_orizzontale.xml b/app/src/main/res/layout/divisore_orizzontale.xml new file mode 100644 index 0000000..06e67c8 --- /dev/null +++ b/app/src/main/res/layout/divisore_orizzontale.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/layout/tablerow_singolo_risultato.xml b/app/src/main/res/layout/tablerow_singolo_risultato.xml index 5665d96..020a28a 100644 --- a/app/src/main/res/layout/tablerow_singolo_risultato.xml +++ b/app/src/main/res/layout/tablerow_singolo_risultato.xml @@ -1,28 +1,31 @@ + android:text="-" /> + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ed17e77..c1ae242 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,85 +1,86 @@ Appröu Cerca parole Sostieni il progetto Sito ufficiale Correggi un errore Seleziona le lingue, dopodiché premi il pulsante in basso proseguire Ricerca parole Risultati Cerca Scegli le lingue del dizionario Parola in %1$s Connessione non riuscita Connessione non riuscita:\nControllare che la connessione a internet sia attiva Nessuna parola inserita! Errore Lingue selezionate non valide Hai selezionato la stessa lingua in entrambi i campi \"da" e "a" Non è possibile tradurre direttamente da un dialetto all\'altro Cerca solo una parola alla volta Non è stato trovato alcun risultato Risultati ricerca di %1$s : Interfaccia Ok No Puoi aiutarci segnalando questo errore Attenzione Vuoi contribuire segnalandoci la parola mancante? Vuoi contribuire segnalandoci l\'errore? Lingua dell\'interfaccia Impostazioni Informazioni Informazioni chiave_lingua_scelta chiave_primo_avvio Italiano Sanremasco https://www.approu.it/?pk_campaign=android https://www.approu.it/come_aiutare?pk_campaign=android https://it.liberapay.com/approu/ Italiano Sanremasco Esperanto it lij eo ultima_lingua_origine_selezionata ultima_lingua_destinazione_selezionata Oltre 6000 vocaboli! Informazioni Risultati in %1$s, tocca la parola di interesse per tradurla Parola errata o mancante Tutorial grafia Parola mancante Inserisci una parola Scarica anche tu Appröu, l\'app vocabolario sanremasco espandibile e collaborativa\n\nLa trovi sul sito ufficiale https://www.approu.it Le traduzioni attuali di %s sono: Le traduzioni potrebbero subire correzioni, controlla sempre la traduzione più recente su https://www.approu.it Casuale + Assicurati che la connessione a internet sia funzionante