Skip to content

Commit

Permalink
Merge pull request #182 from chesterbr/mais-ajustes-multiplayer
Browse files Browse the repository at this point in the history
Tarefas do Multiplayer
  • Loading branch information
chesterbr authored Jul 21, 2023
2 parents b2c9e20 + 6cb04d8 commit 5012e3c
Show file tree
Hide file tree
Showing 12 changed files with 579 additions and 165 deletions.
48 changes: 42 additions & 6 deletions app/src/main/java/me/chester/minitruco/android/TituloActivity.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package me.chester.minitruco.android;

import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
import static android.provider.Settings.Global.DEVICE_NAME;
import static android.text.InputType.TYPE_CLASS_TEXT;

Expand All @@ -10,10 +11,12 @@
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
Expand Down Expand Up @@ -152,14 +155,34 @@ private void configuraBotoesMultiplayer() {
}
if (temInternet) {
btnInternet.setOnClickListener(v -> {
pedeNome((nome) -> {
startActivity(new Intent(getBaseContext(),
ClienteInternetActivity.class));
});
if (conectadoNaInternet()) {
pedeNome((nome) -> {
startActivity(new Intent(getBaseContext(),
ClienteInternetActivity.class));
});
} else {
mostraAlertBox("Sem conexão",
"Não foi possível conectar à Internet. Verifique sua conexão e tente novamente.");
}
});
}
}

private boolean conectadoNaInternet() {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
return cm.getNetworkCapabilities(cm.getActiveNetwork()).hasCapability(NET_CAPABILITY_INTERNET);
} else {
// Android < 6, vamos assumir que tem internet
// (se não conectar só vai vir uma mensagem feia mesmo)
return true;
}
} catch (Exception e) {
return false;
}
}

private void pedeNome(Consumer<String> callback) {
// Se já temos um nome guardado, é ele
String nome = preferences.getString("nome_multiplayer", null);
Expand All @@ -182,7 +205,7 @@ private void pedeNome(Consumer<String> callback) {
editNomeJogador.setText(nome);

runOnUiThread(() -> {
new AlertDialog.Builder(this)
AlertDialog dialogNome = new AlertDialog.Builder(this)
.setIcon(R.mipmap.ic_launcher)
.setTitle("Nome")
.setMessage("Qual nome você gostaria de usar?")
Expand All @@ -195,7 +218,20 @@ private void pedeNome(Consumer<String> callback) {
callback.accept(nomeFinal);
})
.setNegativeButton("Cancela", null)
.show();
.create();

// Evita mostrar o teclado de cara em alguns Androids mais antigos
// (não funciona em todos, mas evita a "dança" do diálogo em alguns)
dialogNome.setOnShowListener(d -> {
Button btnOk = dialogNome.getButton(AlertDialog.BUTTON_POSITIVE);
btnOk.setFocusable(true);
btnOk.setFocusableInTouchMode(true);
btnOk.requestFocus();

});
dialogNome.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

dialogNome.show();
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,12 @@ protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.btnIniciarBluetooth).setOnClickListener(v -> {
enviaLinha("Q");
});

findViewById(R.id.btnInverter).setOnClickListener(v -> {
enviaLinha("R I");
});
findViewById(R.id.btnTrocar).setOnClickListener(v -> {
enviaLinha("R T");
});

new Thread(() -> {
try {
Expand Down
7 changes: 6 additions & 1 deletion core/src/main/java/me/chester/minitruco/core/Jogador.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public static String sanitizaNome(String nome) {
.replaceAll(" +","_")
.replaceAll("^(.{0,25}).*$", "$1")
.replaceAll("_$","")
.replaceAll("^[-_ ]*$", "Jogador(a)");
.replaceAll("^[-_ ]*$", "sem_nome_"+(1 + random.nextInt(999)));
}

/**
Expand All @@ -64,6 +64,11 @@ public String getNome() {
return nome;
}

@Override
public String toString() {
return super.toString()+"["+nome+"]";
}

public void setNome(String nome) {
this.nome = nome;
}
Expand Down
39 changes: 31 additions & 8 deletions core/src/test/java/me/chester/minitruco/core/JogadorTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package me.chester.minitruco.core;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -35,16 +36,38 @@ private static String sanitizaNome(String nome) {
assertEquals("crashy_on_iOS_Power_h_0", sanitizaNome("crashy on iOS: Powerلُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ冗🏳0🌈️జ్ఞ‌ా\uDB40\uDC00 "));
}

void assertNomeDefault(String nome) {
String regex = "^sem_nome_\\d{1,4}$";
assertTrue(nome.matches(regex), nome + " não deu match em " + regex);
}

@Test
void sanitizaNomeUsaDefaultSeNãoTiverCaracteresVálidos() {
assertEquals("Jogador(a)", sanitizaNome(null));
assertEquals("Jogador(a)", sanitizaNome(""));
assertEquals("Jogador(a)", sanitizaNome("_"));
assertEquals("Jogador(a)", sanitizaNome("-"));
assertEquals("Jogador(a)", sanitizaNome("___--__"));
assertEquals("Jogador(a)", sanitizaNome("-------"));
assertEquals("Jogador(a)", sanitizaNome("💩"));
assertEquals("Jogador(a)", sanitizaNome("誰かの名前を日本語で"));
assertNomeDefault(sanitizaNome(null));
assertNomeDefault(sanitizaNome(""));
assertNomeDefault(sanitizaNome("_"));
assertNomeDefault(sanitizaNome("-"));
assertNomeDefault(sanitizaNome("___--__"));
assertNomeDefault(sanitizaNome("-------"));
assertNomeDefault(sanitizaNome("💩"));
assertNomeDefault(sanitizaNome("誰かの名前を日本語で"));
}

@Test
void sanitizaNomeÉIdempotente() {
String[] nomes = new String[]{
"nome",
"nome_com_underscore",
"nome-com-hífen",
"nome com espaços",
"nome com espaços e _ e - e 💩 e 123",
null,
"",
"sem_nome_123"};
for (String nome : nomes) {
String sanitizado = sanitizaNome(nome);
assertEquals(sanitizado, sanitizaNome(sanitizado));
}
}

@Test
Expand Down
Loading

0 comments on commit 5012e3c

Please sign in to comment.