diff --git a/AndroidManifest.xml b/AndroidManifest.xml index de696b10d..558086a7d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -10,9 +10,10 @@ - + + diff --git a/src/com/android/keepass/KeePass.java b/src/com/android/keepass/KeePass.java index b0ad5b68c..167269f1e 100644 --- a/src/com/android/keepass/KeePass.java +++ b/src/com/android/keepass/KeePass.java @@ -19,164 +19,30 @@ */ package com.android.keepass; -import java.io.FileNotFoundException; -import java.io.IOException; - -import org.bouncycastle1.crypto.InvalidCipherTextException; - -import com.android.keepass.keepasslib.InvalidKeyFileException; - import android.app.Activity; -import android.content.SharedPreferences; +import android.content.Intent; 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.Toast; public class KeePass extends Activity { public static final int EXIT_NORMAL = 0; public static final int EXIT_LOCK = 1; - public static final String LAST_FILENAME = "lastFile"; - public static final String LAST_KEYFILE = "lastKey"; - - private static final int MENU_HOMEPAGE = Menu.FIRST; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.password); - Button confirmButton = (Button) findViewById(R.id.pass_ok); - confirmButton.setOnClickListener(new ClickHandler(this)); + Intent i = new Intent(this, PasswordActivity.class); - loadDefaultPrefs(); - - } - - @Override - protected void onResume() { - super.onResume(); - - // Clear password on Database state - setEditText(R.id.pass_password, ""); - Database.clear(); + startActivityForResult(i, 0); } @Override - protected void onStop() { - super.onStop(); + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); - } - - private void loadDefaultPrefs() { - SharedPreferences settings = getPreferences(MODE_PRIVATE); - String lastFile = settings.getString(LAST_FILENAME, ""); - String lastKey = settings.getString(LAST_KEYFILE,""); - - if (lastFile == "") { - lastFile = "/sdcard/keepass/keepass.kdb"; + if (resultCode == 0) { + finish(); } - - setEditText(R.id.pass_filename, lastFile); - setEditText(R.id.pass_keyfile, lastKey); - } - - private void saveDefaultPrefs() { - SharedPreferences settings = getPreferences(MODE_PRIVATE); - SharedPreferences.Editor editor = settings.edit(); - editor.putString(LAST_FILENAME, getEditText(R.id.pass_filename)); - editor.putString(LAST_KEYFILE, getEditText(R.id.pass_keyfile)); - editor.commit(); - } - - - private void errorMessage(CharSequence text) - { - Toast.makeText(this, text, Toast.LENGTH_LONG).show(); - } - - private void errorMessage(int resId) - { - Toast.makeText(this, resId, Toast.LENGTH_LONG).show(); - } - - private class ClickHandler implements View.OnClickListener { - private Activity mAct; - - ClickHandler(Activity act) { - mAct = act; - } - - public void onClick(View view) { - String pass = getEditText(R.id.pass_password); - String key = getEditText(R.id.pass_keyfile); - if ( pass.length() == 0 && key.length() == 0 ) { - errorMessage(R.string.error_nopass); - return; - } - - try { - - Database.LoadData(getEditText(R.id.pass_filename), pass, key); - saveDefaultPrefs(); - GroupActivity.Launch(mAct, null); - - } catch (InvalidCipherTextException e) { - errorMessage(R.string.InvalidPassword); - } catch (FileNotFoundException e) { - errorMessage(R.string.FileNotFound); - } catch (IOException e) { - errorMessage("Unknown error."); - } catch (InvalidKeyFileException e) { - errorMessage(e.getMessage()); - } - } - - } - - private String getEditText(int resId) { - EditText te = (EditText) findViewById(resId); - assert(te == null); - - if (te != null) { - return te.getText().toString(); - } else { - return ""; - } - } - - private void setEditText(int resId, String str) { - EditText te = (EditText) findViewById(resId); - assert(te == null); - - if (te != null) { - te.setText(str); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - - menu.add(0, MENU_HOMEPAGE, 0, R.string.menu_homepage); - menu.findItem(MENU_HOMEPAGE).setIcon(android.R.drawable.ic_menu_upload); - - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch ( item.getItemId() ) { - case MENU_HOMEPAGE: - Util.gotoUrl(this, getText(R.string.homepage).toString()); - return true; - } - - return super.onOptionsItemSelected(item); } } diff --git a/src/com/android/keepass/PasswordActivity.java b/src/com/android/keepass/PasswordActivity.java new file mode 100644 index 000000000..1603d38b3 --- /dev/null +++ b/src/com/android/keepass/PasswordActivity.java @@ -0,0 +1,179 @@ +/* + * Copyright 2009 Brian Pellin. + * + * This file is part of KeePassDroid. + * + * KeePassDroid is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * KeePassDroid is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KeePassDroid. If not, see . + * + */ +package com.android.keepass; + +import java.io.FileNotFoundException; +import java.io.IOException; + +import org.bouncycastle1.crypto.InvalidCipherTextException; + +import com.android.keepass.keepasslib.InvalidKeyFileException; + +import android.app.Activity; +import android.content.SharedPreferences; +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.Toast; + +public class PasswordActivity extends Activity { + + public static final String LAST_FILENAME = "lastFile"; + public static final String LAST_KEYFILE = "lastKey"; + + private static final int MENU_HOMEPAGE = Menu.FIRST; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.password); + + Button confirmButton = (Button) findViewById(R.id.pass_ok); + confirmButton.setOnClickListener(new ClickHandler(this)); + + loadDefaultPrefs(); + + } + + @Override + protected void onResume() { + super.onResume(); + + // Clear password on Database state + setEditText(R.id.pass_password, ""); + Database.clear(); + } + + @Override + protected void onStop() { + super.onStop(); + + } + + private void loadDefaultPrefs() { + SharedPreferences settings = getPreferences(MODE_PRIVATE); + String lastFile = settings.getString(LAST_FILENAME, ""); + String lastKey = settings.getString(LAST_KEYFILE,""); + + if (lastFile == "") { + lastFile = "/sdcard/keepass/keepass.kdb"; + } + + setEditText(R.id.pass_filename, lastFile); + setEditText(R.id.pass_keyfile, lastKey); + } + + private void saveDefaultPrefs() { + SharedPreferences settings = getPreferences(MODE_PRIVATE); + SharedPreferences.Editor editor = settings.edit(); + editor.putString(LAST_FILENAME, getEditText(R.id.pass_filename)); + editor.putString(LAST_KEYFILE, getEditText(R.id.pass_keyfile)); + editor.commit(); + } + + + private void errorMessage(CharSequence text) + { + Toast.makeText(this, text, Toast.LENGTH_LONG).show(); + } + + private void errorMessage(int resId) + { + Toast.makeText(this, resId, Toast.LENGTH_LONG).show(); + } + + private class ClickHandler implements View.OnClickListener { + private Activity mAct; + + ClickHandler(Activity act) { + mAct = act; + } + + public void onClick(View view) { + String pass = getEditText(R.id.pass_password); + String key = getEditText(R.id.pass_keyfile); + if ( pass.length() == 0 && key.length() == 0 ) { + errorMessage(R.string.error_nopass); + return; + } + + try { + + Database.LoadData(getEditText(R.id.pass_filename), pass, key); + saveDefaultPrefs(); + GroupActivity.Launch(mAct, null); + + } catch (InvalidCipherTextException e) { + errorMessage(R.string.InvalidPassword); + } catch (FileNotFoundException e) { + errorMessage(R.string.FileNotFound); + } catch (IOException e) { + errorMessage("Unknown error."); + } catch (InvalidKeyFileException e) { + errorMessage(e.getMessage()); + } + } + } + + private String getEditText(int resId) { + EditText te = (EditText) findViewById(resId); + assert(te == null); + + if (te != null) { + return te.getText().toString(); + } else { + return ""; + } + } + + private void setEditText(int resId, String str) { + EditText te = (EditText) findViewById(resId); + assert(te == null); + + if (te != null) { + te.setText(str); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + + menu.add(0, MENU_HOMEPAGE, 0, R.string.menu_homepage); + menu.findItem(MENU_HOMEPAGE).setIcon(android.R.drawable.ic_menu_upload); + + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch ( item.getItemId() ) { + case MENU_HOMEPAGE: + Util.gotoUrl(this, getText(R.string.homepage).toString()); + return true; + } + + return super.onOptionsItemSelected(item); + } + +}