Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Тестирование и исправление ошибок




В плагин AndroidStudio есть эмулятор оболочки Android - AVD, но его производительность оставляет желать лучшего, так как ОС Android заточена под работу на мобильных устройствах. Как альтернатива ему предложена отладка на реальном устройстве через USB, которой я и воспользовался. Это быстрее и проще, к тому же это не занимает ресурсы компьютера.

В процессе отладки возникали следующие ошибки:

1) Отсутствие логов

Когда код окна программы занимает не один десяток строк и программа вылетает, сложно найти ошибку. Для этого в Java есть логи (logs) – мгновенные сообщения о состоянии программы в консоли. Когда я только начинал делать приложение, я не оставлял логи, так как не рассчитывал на большой размер кода. Позже я пожалел об этом, ведь постепенно приложение росло и начали появляться ошибки. Чтобы их исправить я добавлял логи и отслеживал поведение программы.

2) Необработанные исключения ввода

Наличие рабочего алгоритма шифровки – только половина дела. Когда описывается алгоритм, предполагается тип и количество вводимых данных, а пользователь может ошибиться или случайно ввести данные некорректно. Не предполагаемые входные данные являются исключениями и должны обрабатываться – предотвращаться. Реализация обработки исключений добавила немало строк кода в моё приложение и заставила меня повозиться. Я убедился, что необрабатываемые исключения лучше продумывать заранее, чтобы не возникало проблем с их интеграцией.


Демонстрация готового продукта

 


Я попросил друзей и знакомых протестировать моё приложение и оставить отзыв о нём (Рисунок 7).

 

Рисунок 7. Тест приложения

Все отзывы оказались положительными, поэтому на следующий день я представил своё приложение ученикам школы, в которой учусь.

 

 


 

 

Заключение.

В ходе работы я ознакомился с особенностями платформ и написал приложение-справочник по криптографии на ОС Android.

Я исследовал историю криптографии и систематизировал классы и типы шифров(Рисунок х).

Я также с

В ходе процесса было выявлено, что создание подобного приложения является возможным и доказано экспериментально.

Для создания приложения я использовал язык программирования Java и среду разработки Android Studio, использующую этот язык.

Язык Java был для меня не новым, однако с функциями android-разметки я столкнулся впервые.

Кроме того, после демонстрации готовой продукции многим ученикам школы понравилось моё приложение и я надеюсь, что они заинтересуются изучением криптографии.

Криптография имеет немаловажное значение в нашей жизни, её изучение развивает мышление и логику, а создав это уникальное приложение я сделал свой вклад в увеличение популярности этой науки и упростил жизнь заинтересовавшимся людям.

В процессе работы у меня вызвало необычайный интерес создания приложений на Android и я хочу и в дальнейшем продолжить изучать это направление и создавать приложения.

 

Начиная работу над своим приложением, мне хотелось узнать больше о криптографии и Anrdoid – проектировании. Язык Java давно меня привлекал и его изучать я начал летом, однако, применить полученные знания я смог только начав проект.

Самым сложным и интересным для меня было создание алгоритма RSA на Java. Даже разбирать этот алгоритм было не просто.

В ходе своей работы я научился программировать приложения на Android. Я выяснил, какая среда является для меня оптимальной, научился предотвращать ошибки в проектах и создал полезное приложение, с теорией, практикой и заданиями по криптографии. Мне хочется в дальнейшем заниматься исследованием языка Java, его возможностей и программированием под ОС Android в целом.


 

Список литературы.

1. StartAndroid.ru - http://startandroid.ru/ru/

2. Освой Android играючи - http://developer.alexanderklimov.ru/android/

3. Герберт Шилдт "Java. Полное руководство". 9-е издание. 2016г, 1376 с.

4. Школьный курс Java - https://sites.google.com/site/school9java/

5. Статьи из Википедии - https:// ru.wikipedia.org/wiki/

6. С.Хашими, С.Коматинени, Д.Маклин - "Разработка приложений для android",2011г., 736с.


7.

Приложение 1


Шифр Атбаш:

public void onBtnClick(View v){

StringBuilder stringBuilder = new StringBuilder(et.getEditableText());

char charArraySB[] = stringBuilder.toString().toCharArray();

for(int i = 0;i<stringBuilder.length();i++){

char c = charArraySB[i];

boolean upper = Character. isUpperCase (c);

c = Character. toLowerCase (c);

if(alphabet.indexOf(c)>=0){

c = alphabet.charAt(rAlphabet.indexOf(c));

}

if(upper){

c = Character. toUpperCase (c);

}

stringBuilder.deleteCharAt(i);

stringBuilder.insert(i, c);

}

result.setText(stringBuilder);

}

 

Шифр Цезаря:

public void onCriptBtnClick(View v){

StringBuilder stringBuilder = new StringBuilder(et.getEditableText());

char charArraySB[] = stringBuilder.toString().toCharArray();

for(int i = 0;i<stringBuilder.length();i++){

int index = alphabet.indexOf(charArraySB[i]);

if(index!=-1){

index = index + move;

if(index >= alphabet.length()){

index = index - alphabet.length();

}

char enter = alphabet.charAt(index);

if(Character.isUpperCase(charArraySB[i])){ Character.toUpperCase(enter);

}

stringBuilder.deleteCharAt(i);

stringBuilder.insert(i,enter);

}

}

result.setText(stringBuilder);

}

 

public void onDecriptBtnClick(View v){

StringBuilder stringBuilder = new StringBuilder(et.getEditableText());

char charArraySB[] = stringBuilder.toString().toCharArray();

for(int i = 0;i<stringBuilder.length();i++){

 

char c = charArraySB[i];

boolean upper = Character.isUpperCase(c);

c = Character.toLowerCase(c);

int index = alphabet.indexOf(c);

if(index!=-1){

index = index - move;

if(index < 0){

index = index + alphabet.length();

}

c = alphabet.charAt(index);

}

if(upper){

c = Character.toUpperCase(c);

}

stringBuilder.deleteCharAt(i);

stringBuilder.insert(i, c);

}

result.setText(stringBuilder);

}

 

Шифр кодового слова:

public void onCriptBtnClick(View v){

 

if(onButtonsClick()){

 

StringBuilder stringBuilder = new StringBuilder(et.getEditableText());

char charArraySB[] = stringBuilder.toString().toCharArray();

for(int i = 0;i<stringBuilder.length();i++){

char c = charArraySB[i];

boolean upper = Character.isUpperCase(c);

c = Character.toLowerCase(c);

if(alphabet.indexOf(c)>=0){

c = newAlphabet.charAt(alphabet.indexOf(c));

}

if(upper){

c = Character.toUpperCase(c);

}

stringBuilder.deleteCharAt(i);

stringBuilder.insert(i, c);

}

result.setText(stringBuilder);

}

}

 

public void onDecriptBtnClick(View v){

 

if(onButtonsClick()){

 

StringBuilder stringBuilder = new StringBuilder(et.getEditableText());

char charArraySB[] = stringBuilder.toString().toCharArray();

for(int i = 0;i<stringBuilder.length();i++){

char c = charArraySB[i];

boolean upper = Character.isUpperCase(c);

c = Character.toLowerCase(c);

if(newAlphabet.indexOf(c)>=0){

c = alphabet.charAt(newAlphabet.indexOf(c));

}

if(upper){

c = Character.toUpperCase(c);

}

stringBuilder.deleteCharAt(i);

stringBuilder.insert(i, c);

}

result.setText(stringBuilder);

}

}

Шифр A1Z26:

public void onCriptBtnClick(View v){

StringBuilder stringBuilder = new StringBuilder();

char charArraySB[] = et.getEditableText().toString().toLowerCase().toCharArray();

for(int i = 0;i<charArraySB.length;i++){

int index = alphabet.indexOf(charArraySB[i]);

if(index!=-1){

stringBuilder.append((index+1)+"-");

}else{ stringBuilder.setLength(Math.max(stringBuilder.length() - 1, 0));

stringBuilder.append(" "+charArraySB[i]+" ");

}

}

stringBuilder.setLength(Math.max(stringBuilder.length() - 1, 0));

result.setText(stringBuilder);

}

public void onDecriptBtnClick(View v){

StringBuilder stringBuilder = new StringBuilder();

String words[] = et.getEditableText().toString().split(" ");

for(int j = 0;j<words.length;j++){

String nums[] = words[j].split("-");

for(int i = 0;i<nums.length;i++){

if(nums[i].length()<3){

if(nums[i].matches("[+]?\\d+")){

if(Integer.parseInt(nums[i])<alphabet.length()+1){

stringBuilder.append(alphabet.charAt(Integer.parseInt(nums[i])-1));

}else{ stringBuilder.append(nums[i]);

}

}else{ stringBuilder.append(nums[i]);

}

}else{ stringBuilder.append(nums[i]);

}

}

stringBuilder.append(' ');

}

result.setText(stringBuilder);

}

Шифр Виженера:

public void onCriptBtnClick(View v){

if(onButtonsClick()){

StringBuilder textBuilder = new StringBuilder(et.getEditableText());

char charArrayTB[] = textBuilder.toString().toCharArray(),

key[] = etKey.getEditableText().toString().toLowerCase().toCharArray();

for(int i = 0;i<textBuilder.length();i++){

char c = charArrayTB[i];

boolean upper = Character.isUpperCase(c);

c = Character.toLowerCase(c);

int index = alphabet.indexOf(c);

if(index!=-1){

int move = 0;

int mod = i%key.length;

if(newAlphabet.indexOf(key[mod])<alphabet.length()){

move = newAlphabet.indexOf(key[mod])+1;

}else if(newAlphabet.indexOf(key[mod])<alphabet.length()+9){

move = newAlphabet.indexOf(key[mod]) - alphabet.length() + 1;

}else{

move = 0;

}

index = index + move;

if(index >= alphabet.length()){

index = index - alphabet.length();

}

c = alphabet.charAt(index);

}

if(upper){

c = Character.toUpperCase(c);

}

textBuilder.insert(i,c);

textBuilder.deleteCharAt(i+1);

 

}

result.setText(textBuilder);

}

}

 

public void onEncriptBtnClick(View v){

if(onButtonsClick()){

StringBuilder textBuilder = new StringBuilder(et.getEditableText());

char charArrayTB[] = textBuilder.toString().toCharArray(),

key[] = etKey.getEditableText().toString().toLowerCase().toCharArray();

for(int i = 0;i<textBuilder.length();i++){

char c = charArrayTB[i];

boolean upper = Character.isUpperCase(c);

c = Character.toLowerCase(c);

int index = alphabet.indexOf(c);

if(index!=-1){

int move = 0;

int mod = i%key.length; if(newAlphabet.indexOf(key[mod])<alphabet.length()){ move = newAlphabet.indexOf(key[mod])+1;

}else if(newAlphabet.indexOf(key[mod])<alphabet.length()+9){

move = newAlphabet.indexOf(key[mod]) - alphabet.length() + 1;

}else{ move = 0; }

index = index - move; if(index < 0){

index = index + alphabet.length();

}

c = alphabet.charAt(index);

}

if(upper){

c = Character.toUpperCase(c);

}

textBuilder.insert(i,c);

textBuilder.deleteCharAt(i+1);

}

result.setText(textBuilder);

}

}

Шифр Табличной маршрутной перестановки:

public void onCriptBtnClick(View v){

StringBuilder resultStr = new StringBuilder();

int columns = Integer.parseInt(etKey.getEditableText().toString());

char charArraySB[] = et.getEditableText().toString().toCharArray();

for(int i = columns-1;i>=0;i--){

for(int j = 0; columns*j+i<charArraySB.length; j++){

resultStr.append(charArraySB[columns*j+i]);

}

}

result.setText(resultStr);

}

public void onDeсriptBtnClick(View v){

StringBuilder resultStr = new StringBuilder();

int columns = Integer.parseInt(etKey.getEditableText().toString());

char charArraySB[] = et.getEditableText().toString().toCharArray();

int rows = charArraySB.length/columns,

dop = charArraySB.length%columns-1;

for(int i=0;i<rows;i++){

int pos = charArraySB.length-1;

pos += i;

for(int j=0;j<columns;j++){

pos -= rows-1;

if(j<=dop){ pos--;

}

resultStr.append(charArraySB[pos]);

pos--;

}

}

int pos = charArraySB.length-1;

for(int i=0;i<=dop;i++){

resultStr.append(charArraySB[pos]);

pos -= rows + 1;

}

result.setText(resultStr);

}

Шифр RSA:

public static byte[] encrypt(String text, PublicKey key) {

byte[] cipherText = null;

try {

// get an RSA cipher object and print the provider

final Cipher cipher = Cipher.getInstance(ALGORITHM);

// encrypt the plain text using the public key

cipher.init(Cipher.ENCRYPT_MODE, key);

cipherText = cipher.doFinal(text.getBytes());

} catch (Exception e) {

e.printStackTrace();

}

return cipherText;

}

public static String decrypt(byte[] text, PrivateKey key) {

byte[] dectyptedText = null;

try {

// get an RSA cipher object and print the provider

final Cipher cipher = Cipher.getInstance(ALGORITHM);

 

// decrypt the text using the private key

cipher.init(Cipher.DECRYPT_MODE, key);

dectyptedText = cipher.doFinal(text);

 

} catch (Exception ex) {

ex.printStackTrace();

}

 

return new String(dectyptedText);

}

 

Шифр DES:

public String encrypt(String str) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException {

byte[] utf8 = str.getBytes("UTF8");

byte[] enc = ecipher.doFinal(utf8);

return new sun.misc.BASE64Encoder().encode(enc);

}

 

public String decrypt(String str) throws IOException, IllegalBlockSizeException, BadPaddingException {

byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);

byte[] utf8 = dcipher.doFinal(dec);

return new String(utf8, "UTF8");

}

 


 


Приложение 2

 


MainMenuActivity.java:

package ru.bukinalexey.criptography;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainMenuActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main_menu_layout);

Button btnCiphers = (Button)findViewById(R.id.btn_ciphers),

btnAbout = (Button)findViewById(R.id.btn_about);

OnClickListener onBtnClick = new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

switch(v.getId()){

case R.id.btn_ciphers:

intent = new Intent(getApplicationContext(), CipherMenuActivity.class);

break;

case R.id.btn_about:

intent = new Intent(getApplicationContext(), AboutActivity.class);

break;

}

startActivity(intent);

}

};

btnCiphers.setOnClickListener(onBtnClick);

btnAbout.setOnClickListener(onBtnClick);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main_menu, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}


}AboutActivity.java:

package ru.bukinalexey.criptography;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class AboutActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.task_layout);

TextView about = (TextView)findViewById(R.id.tv_task_name),

aboutText = (TextView)findViewById(R.id.tv_task_text);

EditText et = (EditText)findViewById(R.id.et_task);

Button btn = (Button)findViewById(R.id.btn_request);

et.setVisibility(View.GONE);

btn.setVisibility(View.GONE);

about.setText(R.string.about);

aboutText.setTextSize(20);

aboutText.setText(R.string.about_theory);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main_menu, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

}

CipherMenuActivity.java:

package ru.bukinalexey.criptography;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import android.app.Activity;

import android.content.Intent;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ListView;

import android.widget.SimpleAdapter;

public class CipherMenuActivity extends Activity {

final String TEXT_CRIPT_NAME = "name";

final String TEXT_LEVEL = "difficulty:";

final String TEXT_COMPLETION = "completion:";

final String SVT_COMPLETION = "saved_complition_task_";

final String APP_PREFERENCES = "CriptographyPreferences";

String[] names;

int[] difficulties;

SharedPreferences sPref;

ListView lv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.list_view_layout);

names = getResources().getStringArray(R.array.names);

difficulties = getResources().getIntArray(R.array.difficulties);

sPref = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE);

ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(names.length);

Map<String, Object> map;

for (int i = 0; i < names.length; i++) {

map = new HashMap<String, Object>();

map.put(TEXT_CRIPT_NAME, names[i]);

map.put(TEXT_LEVEL, "Сложность: " + difficulties[i] + "%");

map.put(TEXT_COMPLETION, "Выполнено: " + sPref.getInt(SVT_COMPLETION + i, 0) + "%");

data.add(map);

}

String[] from = { TEXT_CRIPT_NAME, TEXT_LEVEL, TEXT_COMPLETION };

int[] to = { R.id.tv_cripting, R.id.tv_level, R.id.tv_complition };

SimpleAdapter sAd = new SimpleAdapter(this, data, R.layout.item,

from, to);

lv = (ListView) findViewById(R.id.listView1);

lv.setAdapter(sAd);

lv.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

Intent intent = new Intent(getApplicationContext(), HomePageActivity.class);

intent.putExtra("position", position);

startActivity(intent);

}

});

}

@Override

protected void onRestart() {

super.onRestart();

ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(difficulties.length);

Map<String, Object> map;

for (int i = 0; i < names.length; i++) {

sPref = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE);

map = new HashMap<String, Object>();

map.put(TEXT_CRIPT_NAME, names[i]);

map.put(TEXT_LEVEL, "Сложность: " + difficulties[i] + "%");

map.put(TEXT_COMPLETION, "Выполнено: " + sPref.getInt(SVT_COMPLETION + i, 0) + "%");

data.add(map);

}

String[] from = { TEXT_CRIPT_NAME, TEXT_LEVEL, TEXT_COMPLETION };

int[] to = { R.id.tv_cripting, R.id.tv_level, R.id.tv_complition };

SimpleAdapter sAd = new SimpleAdapter(this, data, R.layout.item, from, to);

lv = (ListView) findViewById(R.id.listView1);

lv.setAdapter(sAd);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main_menu, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

}

HomePageActivity.java:

package ru.bukinalexey.criptography;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.text.Html;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

import ru.bukinalexey.criptography.ciphers.*;

public class HomePageActivity extends Activity implements OnClickListener{

TextView criptName, criptTheory, criptType;

Button btnTasks,btnDecoder;

String theory, names[];

Intent intent;

int position;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.home_page_layout);

names = getResources().getStringArray(R.array.names);

criptName = (TextView) findViewById(R.id.tv_cript_name);

criptTheory = (TextView) findViewById(R.id.tv_theory);

btnTasks = (Button)findViewById(R.id.btn_tasks);

btnDecoder = (Button)findViewById(R.id.btn_decoder);

btnTasks.setOnClickListener(this);

btnDecoder.setOnClickListener(this);

intent = getIntent();

position = intent.getIntExtra("position", 0);

criptName.setText(names[position]);

whatTheory();

}

@Override

public void onClick(View v) {

switch(v.getId()){

case R.id.btn_decoder:

startDecoder();

break;

case R.id.btn_tasks:

intent = new Intent(getApplicationContext(), TasksListActivity.class);

intent.putExtra("position", position);

startActivity(intent);

break;

}

}

public void startDecoder(){

boolean bool = true;

switch(position){

case 0: intent = new Intent(getApplicationContext(), AtbashActivity.class);

break;

case 1: intent = new Intent(getApplicationContext(), CesarActivity.class);

break;

case 2: intent = new Intent(getApplicationContext(), CodeWordActivity.class);

break;

case 3: intent = new Intent(getApplicationContext(), VigenereActivity.class);

break;

case 4: intent = new Intent(getApplicationContext(), TableRouteActivity.class);

break;

case 5: intent = new Intent(getApplicationContext(), A1Z26Activity.class);

break;

default: bool = false;

}

if(bool){

startActivity(intent);

}

}

public void whatTheory(){

switch(position){

case 0:

criptTheory.setText(Html.fromHtml(getString(R.string.theory_0)));

break;

case 1:

criptTheory.setText(Html.fromHtml(getString(R.string.theory_1)));

break;

case 2:

criptTheory.setText(Html.fromHtml(getString(R.string.theory_2)));

break;

case 3:

criptTheory.setText(Html.fromHtml(getString(R.string.theory_3)));

break;

case 4:

criptTheory.setText(Html.fromHtml(getString(R.string.theory_4)));

break;

case 5:

criptTheory.setText(Html.fromHtml(getString(R.string.theory_5)));

break;

 

MainMenuActivity.java:

ackage ru.bukinalexey.criptography;

 

 

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

 

public class MainMenuActivity extends Activity {

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main_menu_layout);

 

Button btnCiphers = (Button)findViewById(R.id.btn_ciphers),

btnAbout = (Button)findViewById(R.id.btn_about);

OnClickListener onBtnClick = new OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent();

switch(v.getId()){

case R.id.btn_ciphers:

intent = new Intent(getApplicationContext(), CipherMenuActivity.class);

break;

case R.id.btn_about:

intent = new Intent(getApplicationContext(), AboutActivity.class);

break;

}

startActivity(intent);

 

}

};

btnCiphers.setOnClickListener(onBtnClick);

btnAbout.setOnClickListener(onBtnClick);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main_menu, menu);

return true;

}

 

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

}

}

}

}

 

TaskActivity.java:

package ru.bukinalexey.criptography;

import android.app.Activity;

import android.content.Intent;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

public class TaskActivity extends Activity {

final String TEXT_TASK_NAME = "task";

final String TEXT_TASK_TEXT = "text";

final String EDITTEXT_TASK = "edit";

final String BUTTON_REQUEST = "request";

final String SVT_COMPLETION = "saved_complition_task_";

final String APP_PREFERENCES = "CriptographyPreferences";

String[] tasks;

SharedPreferences sPref;

Button btn;

EditText et;

TextView tn,tt;

int s1, s2, difficulties[];

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.task_layout);

 

Intent intent = getIntent();

s1 = intent.getIntExtra("number", 0);

s2 = intent.getIntExtra("position", 0);

 

gettingResourses(s1, s2);

tn =(TextView)findViewById(R.id.tv_task_name);

tn.setText(tasks[0]);

tt =(TextView)findViewById(R.id.tv_task_text);

tt.setText(tasks[1]);

et = (EditText)findViewById(R.id.et_task);

btn =(Button)findViewById(R.id.btn_request);

sPref = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE);

if(sPref.getBoolean(SVT_COMPLETION + s1 + "_" + s2, false)){

btn.setText("Выполнено");

btn.setClickable(false);

et.setText(tasks[2]);

}

}

 

public void onClickRequest(View v) {

String t = et.getText().toString();

if((v==btn)&&(t!=null)){

if(t.equals(tasks[2])){

btn.setText("Выполнено");

int i, tf = 1;

for(i = 0; i< TasksListActivity.difficulties.length; i++){

if(sPref.getBoolean(SVT_COMPLETION + s1 + "_" + i, false)){

tf++;

}

}

i++;

Editor ed = sPref.edit();

ed.putBoolean(SVT_COMPLETION + s1 + "_" + s2, true);

ed.putInt(SVT_COMPLETION + s1, tf*100/i);

ed.commit();

btn.setClickable(false);

Toast.makeText(this, "Правильно", Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(this, "Попробуйте ещё раз", Toast.LENGTH_SHORT).show();

}

}

}

 

void gettingResourses(int s1,int s2){

switch(s1){

case 0: switch(s2){

case 0: tasks = getResources().getStringArray(R.array.task_list_0_0);

break;

case 1: tasks = getResources().getStringArray(R.array.task_list_0_1);

break;

case 2: tasks = getResources().getStringArray(R.array.task_list_0_2);

break;

case 3: tasks = getResources().getStringArray(R.array.task_list_0_3);

break;

case 4: tasks = getResources().getStringArray(R.array.task_list_0_4);

break;

}

break;

case 1: switch(s2){

case 0: tasks = getResources().getStringArray(R.array.task_list_1_0);

break;

case 1: tasks = getResources().getStringArray(R.array.task_list_1_1);

break;

case 2: tasks = getResources().getStringArray(R.array.task_list_1_2);

break;

case 3: tasks = getResources().getStringArray(R.array.task_list_1_3);

break;

case 4: tasks = getResources().getStringArray(R.array.task_list_1_4);

break;

}

break;

case 2: switch(s2){

case 0: tasks = getResources().getStringArray(R.array.task_list_2_0);

break;

case 1: tasks = getResources().getStringArray(R.array.task_list_2_1);

break;

case 2: tasks = getResources().getStringArray(R.array.task_list_2_2);

break;

case 3: tasks = getResources().getStringArray(R.array.task_list_2_3);

break;

case 4: tasks = getResources().getStringArray(R.array.task_list_2_4);

break;

}

break;

case 3: switch(s2){

case 0: tasks = getResources().getStringArray(R.array.task_list_3_0);

break;

case 1: tasks = getResources().getStringArray(R.array.task_list_3_1);

break;

case 2: tasks = getResources().getStringArray(R.array.task_list_3_2);

break;

case 3: tasks = getResources().getStringArray(R.array.task_list_3_3);

break;

case 4: tasks = getResources().getStringArray(R.array.task_list_3_4);

break;

}

break;

case 4: switch(s2){

case 0: tasks = getResources().getStringArray(R.array.task_list_4_0);

break;

case 1: tasks = getResources().getStringArray(R.array.task_list_4_1);

break;

case 2: tasks = getResources().getStringArray(R.array.task_list_4_2);

break;

case 3: tasks = getResources().getStringArray(R.array.task_list_4_3);

break;

case 4: tasks = getResources().getStringArray(R.array.task_list_4_4);

break;

}

break;

case 5: switch(s2){

case 0: tasks = getResources().getStringArray(R.array.task_list_5_0);

break;

case 1: tasks = getResources().getStringArray(R.array.task_list_5_1);

break;

case 2: tasks = getResources().getStringArray(R.array.task_list_5_2);

break;

case 3: tasks = getResources().getStringArray(R.array.task_list_5_3);

break;

case 4: tasks = getResources().getStringArray(R.array.task_list_5_4);

break;

}

break;

}

}

 

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main_menu, menu);

return true;

}

 

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

 

}

 

TaskListActivity:

package ru.bukinalexey.criptography;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import android.app.Activity;

import android.content.Intent;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ListView;

import android.widget.SimpleAdapter;

 

public class TasksListActivity extends Activity {

 

/** описываем необходимые константы */

final String TEXT_TASK_NAME = "name", TEXT_IS_COMPLETED = "выполнено";

final String TEXT_LEVEL = "difficulty";

final String CB_COMPLETION = "completion";

final String SVT_COMPLETION = "saved_complition_task_";

final String APP_PREFERENCES = "CriptographyPreferences";

String[] tasks;

int cipher;

static int difficulties[];

SharedPreferences sPref;

ListView lv;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.list_view_layout);

 

Intent intent = getIntent();

cipher = intent.getIntExtra("position", 0);

gettingResourses(cipher);

 

sPref = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE);

ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(difficulties.length);

Map<String, Object> map;

for (int i = 0; i < difficulties.length; i++) {

map = new HashMap<String, Object>();

map.put(TEXT_TASK_NAME, "Задание " + (i+1));

map.put(TEXT_LEVEL, "Сложность: " + difficulties[i] + "%");

String completion = "НЕ ВЫПОЛНЕНО";

if(sPref.getBoolean(SVT_COMPLETION + cipher + "_" + i, false)){

completion = "ВЫПОЛНЕНО";

}

map.put(TEXT_IS_COMPLETED, completion);

data.add(map);

}

 

String[] from = { TEXT_TASK_NAME, TEXT_LEVEL, TEXT_IS_COMPLETED};

int[] to = { R.id.tv_cripting, R.id.tv_level, R.id.tv_complition};

lv = (ListView) findViewById(R.id.listView1);

SimpleAdapter sAd = new SimpleAdapter(this, data, R.layout.tasks_list_item, from, to);

lv.setAdapter(sAd);

 

final Intent intent2 = new Intent(getApplicationContext(), TaskActivity.class);

intent2.putExtra("number", cipher);

lv.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

intent2.putExtra("position", position);

startActivity(intent2);

}

});

}

 

@Override

protected void onRestart() {

super.onRestart();

sPref = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE);

ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(difficulties.length);

Map<String, Object> map;

for (int i = 0; i < difficulties.length; i++) {

map = new HashMap<String, Object>();

map.put(TEXT_TASK_NAME, "Задание " + (i+1));

map.put(TEXT_LEVEL, "Сложность: " + difficulties[i] + "%");

String completion = "НЕ ВЫПОЛНЕНО";

if(sPref.getBoolean(SVT_COMPLETION + cipher + "_" + i, false)){

completion = "ВЫПОЛНЕНО";

}

map.put(TEXT_IS_COMPLETED, completion);

data.add(map);

}

 

String[] from = { TEXT_TASK_NAME, TEXT_LEVEL, TEXT_IS_COMPLETED};

int[] to = { R.id.tv_cripting, R.id.tv_level, R.id.tv_complition};

lv = (ListView) findViewById(R.id.listView1);

SimpleAdapter sAd = new SimpleAdapter(this, data, R.layout.tasks_list_item, from, to);

lv.setAdapter(sAd);

}

 

void gettingResourses(int cipher){

switch(cipher){

case 0: difficulties = getResources().getIntArray(R.array.difficulties_0);

break;

case 1: difficulties = getResources().getIntArray(R.array.difficulties_1);

break;

case 2: difficulties = getResources().getIntArray(R.array.difficulties_2);

break;

case 3: difficulties = getResources().getIntArray(R.array.difficulties_3);

break;

case 4: difficulties = getResources().getIntArray(R.array.difficulties_4);

break;

case 5: difficulties = getResources().getIntArray(R.array.difficulties_5);

break;

}

}

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main_menu, menu);

return true;

}

 

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

 

}

 

 


 


 

Приложение 3

 


home_page_layout.xml:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:scrollbars="none"

android:background="@color/beige_theme_color" >

 

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

 

<TextView

android:id="@+id/tv_cript_name"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:textColor="@color/black"

android:layout_marginBottom="10dp"

android:layout_marginTop="20dp"

android:textSize="30sp" />

 

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal" >

 

<Button

android:id="@+id/btn_decoder"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="@string/coder"

android:textSize="25sp" />

 

<Button

android:id="@+id/btn_tasks"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="@string/tests"

android:textSize="25sp" />

 

</LinearLayout>

 

<TextView

android:id="@+id/tv_theory"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:paddingLeft="10dp"

android:textColor="@color/black"

android:textSize="20sp" />

 

</LinearLayout>

 

</ScrollView>

item.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:background="@color/beige_theme_color"

android:orientation="vertical" >

 

 

<TextView

android:id="@+id/tv_cripting"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:layout_marginRight="10dp"

android:textColor="@color/black"

android:textSize="30sp"

android:layout_gravity="center_horizontal">

 

</TextView>

 

<TextView

android:id="@+id/tv_level"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:layout_marginRight="10dp"

android:textColor="@color/black"

android:textSize="20sp" >

 

</TextView>

 

<TextView

android:id="@+id/tv_complition"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:layout_marginRight="10dp"

android:textColor="@color/black"

android:textSize="20sp" >

</TextView>

</LinearLayout>

 

List_view_layout.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:background="@color/beige_theme_color"

tools:context="ru.bukinalexey.criptography.MainMenuActivity" >

 

<ListView

android:id="@+id/listView1"

android:layout_width="match_parent"

android:layout_height="match_parent" >

</ListView>

 

</LinearLayout>

 

main_menu_layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/beige_theme_color" >

 

<TextView

android:id="@+id/tv_type"

android:layout_marginTop="30dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true"

android:text="@string/app_name"

android:textColor="@color/black"

android:textSize="30sp" />

 

<LinearLayout

android:id="@+id/lay"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/tv_type"

android:layout_centerHorizontal="true"

android:layout_marginTop="80dp"

android:orientation="vertical" >

 

<Button

android:id="@+id/btn_ciphers"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/ciphers"

android:textSize="30sp" />

 

<Button

android:id="@+id/btn_try"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:text="Проверить себя"

android:textSize="30sp" />

 

<Button

android:id="@+id/btn_help"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:text="Помощь"

android:textSize="30sp" />

 

<Button

android:id="@+id/btn_about"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:text="@string/about"

android:textSize="30sp" />

 

</LinearLayout>

 

</RelativeLayout>

 

remove_ciphers_layout.xml:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/beige_theme_color"

android:scrollbars="none">

 

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical" >

 

<TextView

android:id="@+id/tv_name"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:textColor="@color/black"

android:layout_marginTop="20dp"

android:textSize="40sp" />

 

<TextView

android:id="@+id/tv_text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/text"

android:layout_marginLeft="5dp"

android:textColor="@color/black"

android:textSize="20sp" />

 

<EditText

android:id="@+id/et_text"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="@string/enter_text"

android:inputType="textMultiLine" >

 

<requestFocus />

</EditText>

 

<TextView

android:id="@+id/tv_alphabet"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/alphabet"

android:layout_marginLeft="5dp"

android:textColor="@color/black"

android:textSize="20sp" />

 

<Spinner

android:id="@+id/spinner_alphabet"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

 

<TextView

android:id="@+id/tv_key"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="5dp"

android:textColor="@color/black"

android:textSize="20sp" />

 

<EditText

android:id="@+id/et_key"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:ems="10"

android:hint="@string/enter_key" />

 

<Spinner

android:id="@+id/spinner_move"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

 

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content" >

 

<Button

android:id="@+id/btn_cript"

android:layout_width="wrap_content"

android:layout_height="60dp"

android:layout_weight="1"

android:onClick="onCriptBtnClick"

android:text="@string/code"

android:textSize="19sp" />

 

<Button

android:id="@+id/btn_encript"

android:layout_width="wrap_content"

android:layout_height="60dp"

android:layout_weight="1"

android:onClick="onEncriptBtnClick"

android:text="@string/decode"

android:textSize="19sp" />

</LinearLayout>

 

<TextView

android:id="@+id/tv_answer"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="5dp"

android:text="@string/result"

android:textColor="@color/black"

android:textSize="20sp" />

 

<TextView

android:id="@+id/tv_result"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:hint="@string/here_is_result"

android:paddingBottom="30dp"

android:paddingLeft="20dp"

android:paddingRight="20dp"

android:paddingTop="10dp"

android:textColor="@color/black"

android:textIsSelectable="true"

android:textSize="20sp" />

</LinearLayout>

</ScrollView>

 

task_layout.xml:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/beige_theme_color"

android:scrollbars="none">

<LinearLayout

android:layout_width="match_parent"

android:layout_marginLeft="10dp"

android:layout_marginRight="10dp"

android:layout_height="wrap_content"

android:orientation="vertical">

 

<TextView

android:id="@+id/tv_task_name"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:layout_marginTop="20dp"

android:textSize="30sp"

android:textColor="@color/black" />

 

<TextView

android:id="@+id/tv_task_text"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:autoLink="web|email"

android:textSize="18sp"

android:textColor="@color/black" />

 

<ImageView

android:id="@+id/iv"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:scaleType="fitCenter" />

 

<EditText

android:id="@+id/et_task"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:ems="10"

android:hint="@string/write_it_here" />

 

<Button

android:id="@+id/btn_request"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:onClick="onClickRequest"

android:textSize="20sp"

android:text="@string/request"

android:layout_gravity="center_horizontal" />

</LinearLayout>

</ScrollView>

 

Tasks_list_item.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@color/beige_theme_color"

android:orientation="vertical" >

 

<TextView

android:id="@+id/tv_cripting"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:layout_marginRight="10dp"

android:textColor="@color/black"

android:textSize="30sp" >

</TextView>

<TextView

android:id="@+id/tv_level"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="20dp"

android:layout_marginRight="10dp"

android:textColor="@color/black"

android:textSize="20sp" >

</TextView>

<TextView

android:id="@+id/tv_complition"

android:layout_width="match_parent"

android:layout_marginLeft="20dp"

android:layout_marginRight="10dp"

android:layout_height="wrap_content"

android:textColor="@color/black"

android:textSize="20sp" >

</TextView>

</LinearLayout>

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...