itachi1706/CheesecakeUtilities

View on GitHub
app/src/main/java/com/itachi1706/cheesecakeutilities/modules/StringToHexBin.java

Summary

Maintainability
B
4 hrs
Test Coverage
package com.itachi1706.cheesecakeutilities.modules;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;

import com.itachi1706.cheesecakeutilities.BaseModuleActivity;
import com.itachi1706.cheesecakeutilities.R;
import com.itachi1706.cheesecakeutilities.util.CommonMethods;

public class StringToHexBin extends BaseModuleActivity implements View.OnClickListener {

    TextView input, result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_string_to_hex_bin);
        input = findViewById(R.id.input_binhex_string);
        result = findViewById(R.id.tv_binhex_results);
        findViewById(R.id.btn_binhex_clear).setOnClickListener(this);
        findViewById(R.id.btn_binhex_copy).setOnClickListener(this);
        findViewById(R.id.btn_binhex_send).setOnClickListener(this);
        findViewById(R.id.btn_binhex_translate).setOnClickListener(this);
        CommonMethods.disableAutofill(getWindow().getDecorView());
    }

    private String translate() {
        RadioButton bin = this.findViewById(R.id.rb_binhex_bin);
        String thetext = input.getText().toString();
        if (thetext.length() > 0 && thetext.charAt(0) == ' ')
            thetext = thetext.substring(1, thetext.length());
        if (thetext.length() > 0 && thetext.charAt(thetext.length() - 1) == ' ')
            thetext = thetext.substring(0, thetext.length() - 1);
        String theconv = "";
        CheckBox chkDel = this.findViewById(R.id.checkbox_binhex_delimit);
        RadioButton encdec = this.findViewById(R.id.rb_binhex_encode);
        for (int i = 0; i < thetext.length(); i++) {
            StringBuilder thebin;
            int b = thetext.charAt(i);
            if (encdec.isChecked()) {
                if (bin.isChecked()) {
                    thebin = new StringBuilder(Integer.toBinaryString(b));
                    while (thebin.length() < 8) {
                        thebin.insert(0, "0");
                    }
                } else {
                    thebin = new StringBuilder(Integer.toHexString(b));
                    if (thebin.length() == 1) {
                        thebin.insert(0, "0");
                    }
                }
                if (chkDel.isChecked()) {
                    if (!bin.isChecked()) {
                        theconv = String.valueOf(theconv) + "\\x";
                    } else if (i != 0) {
                        theconv = String.valueOf(theconv) + " ";
                    }
                }
            } else {
                try {
                    if (chkDel.isChecked()) {
                        if (bin.isChecked()) {
                            thebin = new StringBuilder(Character.toString((char) Integer.parseInt(String.valueOf(Character.toString(thetext.charAt(i))) + Character.toString(thetext.charAt(i + 1)) + Character.toString(thetext.charAt(i + 2)) + Character.toString(thetext.charAt(i + 3)) + Character.toString(thetext.charAt(i + 4)) + Character.toString(thetext.charAt(i + 5)) + Character.toString(thetext.charAt(i + 6)) + Character.toString(thetext.charAt(i + 7)), 2)));
                            i += 8;
                        } else {
                            thebin = new StringBuilder(Character.toString((char) Integer.parseInt(String.valueOf(Character.toString(thetext.charAt(i + 2))) + Character.toString(thetext.charAt(i + 3)), 16)));
                            i += 3;
                        }
                    } else if (bin.isChecked()) {
                        thebin = new StringBuilder(Character.toString((char) Integer.parseInt(String.valueOf(Character.toString(thetext.charAt(i))) + Character.toString(thetext.charAt(i + 1)) + Character.toString(thetext.charAt(i + 2)) + Character.toString(thetext.charAt(i + 3)) + Character.toString(thetext.charAt(i + 4)) + Character.toString(thetext.charAt(i + 5)) + Character.toString(thetext.charAt(i + 6)) + Character.toString(thetext.charAt(i + 7)), 2)));
                        i += 7;
                    } else {
                        thebin = new StringBuilder(Character.toString((char) Integer.parseInt(String.valueOf(Character.toString(thetext.charAt(i))) + Character.toString(thetext.charAt(i + 1)), 16)));
                        i++;
                    }
                } catch (Exception e) {
                    i = thetext.length();
                    thebin = new StringBuilder();
                    Toast.makeText(this.getApplicationContext(), "An error occurred during conversion! Please check your input and options.", Toast.LENGTH_LONG).show();
                }
            }
            theconv = String.valueOf(theconv) + thebin;
        }
        return theconv;
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.btn_binhex_clear) {
            result.setText("");
            input.setText("");
        } else if (id == R.id.btn_binhex_copy) {
            ClipboardManager manager = (ClipboardManager) this.getSystemService(CLIPBOARD_SERVICE);
            ClipData data = ClipData.newPlainText("binhex", (result.getText().toString()));
            manager.setPrimaryClip(data);
            Toast.makeText(this.getApplicationContext(), "Successfully copied!", Toast.LENGTH_SHORT).show();
        } else if (id == R.id.btn_binhex_send) {
            Intent sendIntent = new Intent(Intent.ACTION_SEND);
            sendIntent.setType("text/plain");
            sendIntent.putExtra(Intent.EXTRA_TEXT, result.getText().toString());
            startActivity(Intent.createChooser(sendIntent, "Send to"));
        } else if (id == R.id.btn_binhex_translate) {
            result.setText(translate());
        }
    }

    @Override
    public String getHelpDescription() {
        return "Translates normal language into machine code and back.";
    }
}