add debug backup/restore options to main menu

Closes #543
This commit is contained in:
Vincent Breitmoser 2014-04-11 20:25:50 +02:00
parent e02e9e6707
commit 227155d484
3 changed files with 90 additions and 1 deletions

View File

@ -36,6 +36,9 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UserIdsColumns;
import org.sufficientlysecure.keychain.provider.KeychainContract.CertsColumns;
import org.sufficientlysecure.keychain.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class KeychainDatabase extends SQLiteOpenHelper {
@ -210,7 +213,7 @@ public class KeychainDatabase extends SQLiteOpenHelper {
}
}
if(!hasApgDb)
if(!hasApgDb || true)
return;
Log.d(Constants.TAG, "apg.db exists! Importing...");
@ -300,4 +303,44 @@ public class KeychainDatabase extends SQLiteOpenHelper {
Log.d(Constants.TAG, "All done, (not) deleting apg.db");
}
private static void copy(File in, File out) throws IOException {
FileInputStream ss = new FileInputStream(in);
FileOutputStream ds = new FileOutputStream(out);
byte[] buf = new byte[512];
while(ss.available() > 0) {
int count = ss.read(buf, 0, 512);
ds.write(buf, 0, count);
}
}
public static void debugRead(Context context) throws IOException {
if(!Constants.DEBUG) {
return;
}
File in = context.getDatabasePath("debug.db");
File out = context.getDatabasePath("openkeychain.db");
if(!in.canRead()) {
throw new IOException("Cannot read " + in.getName());
}
if(!out.canRead()) {
throw new IOException("Cannot write " + out.getName());
}
copy(in, out);
}
public static void debugWrite(Context context) throws IOException {
if(!Constants.DEBUG) {
return;
}
File in = context.getDatabasePath("openkeychain.db");
File out = context.getDatabasePath("debug.db");
if(!in.canRead()) {
throw new IOException("Cannot read " + in.getName());
}
if(!out.canRead()) {
throw new IOException("Cannot write " + out.getName());
}
copy(in, out);
}
}

View File

@ -22,9 +22,16 @@ import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.devspark.appmsg.AppMsg;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.helper.ExportHelper;
import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainDatabase;
import org.sufficientlysecure.keychain.util.Log;
import java.io.IOException;
public class KeyListActivity extends DrawerActivity {
@ -46,6 +53,12 @@ public class KeyListActivity extends DrawerActivity {
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.key_list, menu);
if(Constants.DEBUG) {
menu.findItem(R.id.menu_key_list_debug_read).setVisible(true);
menu.findItem(R.id.menu_key_list_debug_write).setVisible(true);
}
return true;
}
@ -68,6 +81,27 @@ public class KeyListActivity extends DrawerActivity {
mExportHelper.showExportKeysDialog(null, Constants.Path.APP_DIR_FILE, true);
return true;
case R.id.menu_key_list_debug_read:
try {
KeychainDatabase.debugRead(this);
AppMsg.makeText(this, "Restored from backup", AppMsg.STYLE_CONFIRM).show();
getContentResolver().notifyChange(KeychainContract.KeyRings.CONTENT_URI, null);
} catch(IOException e) {
Log.e(Constants.TAG, "IO Error", e);
AppMsg.makeText(this, "IO Error: " + e.getMessage(), AppMsg.STYLE_ALERT).show();
}
return true;
case R.id.menu_key_list_debug_write:
try {
KeychainDatabase.debugWrite(this);
AppMsg.makeText(this, "Backup successful", AppMsg.STYLE_CONFIRM).show();
} catch(IOException e) {
Log.e(Constants.TAG, "IO Error", e);
AppMsg.makeText(this, "IO Error: " + e.getMessage(), AppMsg.STYLE_ALERT).show();
}
return true;
default:
return super.onOptionsItemSelected(item);
}

View File

@ -31,4 +31,16 @@
app:showAsAction="never"
android:title="@string/menu_create_key_expert" />
<item
android:id="@+id/menu_key_list_debug_read"
app:showAsAction="never"
android:title="Debug / DB restore"
android:visible="false" />
<item
android:id="@+id/menu_key_list_debug_write"
app:showAsAction="never"
android:title="Debug / DB backup"
android:visible="false" />
</menu>