Vamos a programar #46 - Código Bacon (ver Java android)

Hola de nuevo a todos, el día de hoy vamos a ver un poco mas sobre el código Bacon y cómo implementar una aplicación en android que haga todo el trabajo sucio por nosotros.
En post anteriores vimos cómo hacer la misma aplicación para C# (escritorio) y Javascript (Web), en esta ocasión, todo el post será solo para mostrar la app, puesto que las funciones que se emplean son exactamente las mismas que la versión de C#. El código completo es el siguiente:

package com.mdev.baconiancipher;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
	EditText ETInput, ETInput2, ETPreResult, ETResult;
	Button BtnPreCipher, BtnCipher;
	String[] Values = new String[]{"AAAAA", "AAAAB", "AAABA",
				"AAABB", "AABAA", "AABAB", "AABBA", "AABBB", "ABAAA", "ABAAA",
				"ABAAB", "ABABA", "ABABB", "ABBAA", "ABBAB", "ABBBA", "ABBBB",
				"BAAAA", "BAAAB", "BAABA", "BAABB", "BAABB", "BABAA", "BABAB",
				"BABBA", "BABBB"};


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		ETInput = findViewById(R.id.ETInput);
		ETInput2 = findViewById(R.id.ETInput2);
		ETPreResult = findViewById(R.id.ETPreResult);
		ETResult = findViewById(R.id.ETResult);
		BtnPreCipher = findViewById(R.id.BtnPreCipher);
		BtnCipher = findViewById(R.id.BtnCipher);

		BtnPreCipher.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					ETPreResult.setText(CharToBaconianCode(ETInput.getText().toString()));
				}
			}
		);
		BtnCipher.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				ETResult.setText(FinalCipher(ETPreResult.getText().toString(),ETInput2.getText().toString()));
			}
		});
	}

	private String CharToBaconianCode(String Input)
	{
		Input = Input.toUpperCase();
		char[] Letras = Input.toCharArray();
		String OutValue = "";
		for (int X = 0; X < Letras.length; X++)
		{
			if ((byte)Letras[X] < 91 && (byte)Letras[X] > 64)
			{
				OutValue += Values[(byte)Letras[X] - 65];// + " ";
			}
		}
		return OutValue;
	}
	private boolean IsLower(byte Code)
	{
		if (Code > 96 && Code < 123)
			return true;
		else
			return false;
	}
	private String FinalCipher(String PreCipher, String Phrase)
	{
		if (PreCipher.length() != Phrase.length())
		{
			ShowDialog("Error","Las longitudes del pre-cifrado y la frase para insertarlo no coinciden");
			return "Error";
		}
		char[] PreCipherChars = PreCipher.toCharArray();
		char[] PhraseChars = Phrase.toCharArray();
		String FinalResult = "";
		for (int Y = 0; Y < PhraseChars.length; Y++)
		{
			if ((byte)PreCipherChars[Y] == 65)
			{
				if (IsLower((byte)PhraseChars[Y]))
					FinalResult += PhraseChars[Y];
				else
					FinalResult += (char)(PhraseChars[Y] + 32);
			}
			else
			{
				if (!IsLower((byte)PhraseChars[Y]))
					FinalResult += PhraseChars[Y];
				else
					FinalResult += (char)(PhraseChars[Y] - 32);
			}
		}
		return FinalResult;
	}
	//Mostrar dialog de manera sencilla
	private void ShowDialog(String Title, String Caption)
	{
		new AlertDialog.Builder(this)
				.setTitle(Title)
				.setMessage(Caption)
				.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int which) {
						// algo
					}
				})
				.setIcon(android.R.drawable.ic_dialog_alert)
				.show();
	}
}


Cómo notarás, no hay ningún cambio significativo (y no lo habrá en unos días debido a que mi PC murió y no cuento con el tiempo cómo para arreglarlo). Por ahora dejo el código fuente y el APK ya compilado para que los descargues de mi dropbox. Las actualizaciones se harán juntas para las 3 versiones en alguno de los próximos post

Por ahora es todo, los leo luego.

No hay comentarios.