From 9cbfa8bf8614fa03a0b51af98d661da4439d7367 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Thu, 17 Jul 2014 16:59:42 +0200 Subject: [PATCH] Added MovedCertificatesStorage, only list moved system certs in GUI. --- .../MovedCertificatesStorageTest.java | 66 +++++++++++++ .../com/nutomic/zertman/MainActivity.java | 6 +- .../zertman/MovedCertificatesStorage.java | 95 +++++++++++++++++++ 3 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 app/src/androidTest/java/com.nutomic.zertman.test/MovedCertificatesStorageTest.java create mode 100644 app/src/main/java/com/nutomic/zertman/MovedCertificatesStorage.java diff --git a/app/src/androidTest/java/com.nutomic.zertman.test/MovedCertificatesStorageTest.java b/app/src/androidTest/java/com.nutomic.zertman.test/MovedCertificatesStorageTest.java new file mode 100644 index 0000000..0c1c8be --- /dev/null +++ b/app/src/androidTest/java/com.nutomic.zertman.test/MovedCertificatesStorageTest.java @@ -0,0 +1,66 @@ +package com.nutomic.zertman.test; + +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.MediumTest; +import android.test.suitebuilder.annotation.SmallTest; + +import com.nutomic.zertman.Certificate; +import com.nutomic.zertman.MovedCertificatesStorage; + +import java.util.List; + +/** + * NOTE: This test works on the app's actual data. + */ +public class MovedCertificatesStorageTest extends AndroidTestCase { + + private MovedCertificatesStorage mMovedCertificatesStorage; + + @Override + protected void setUp() throws Exception { + super.setUp(); + + mMovedCertificatesStorage = new MovedCertificatesStorage(getContext()); + assertTrue(mMovedCertificatesStorage.list().isEmpty()); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + + mMovedCertificatesStorage.close(); + } + + @SmallTest + public void testInvalidInsert() { + assertFalse(mMovedCertificatesStorage.insert(new Certificate("user", false))); + } + + @SmallTest + public void testInvalidDelete() { + assertFalse(mMovedCertificatesStorage.delete(new Certificate("cert", true))); + } + + @SmallTest + public void testDuplicateInsert() { + Certificate c = new Certificate("dupe", true); + assertTrue(mMovedCertificatesStorage.insert(c)); + assertFalse(mMovedCertificatesStorage.insert(c)); + assertTrue(mMovedCertificatesStorage.delete(c)); + } + + @MediumTest + public void testStorage() { + Certificate c1 = new Certificate("first", true); + Certificate c2 = new Certificate("second", true); + assertTrue(mMovedCertificatesStorage.insert(c1)); + assertTrue(mMovedCertificatesStorage.insert(c2)); + List list = mMovedCertificatesStorage.list(); + assertEquals(list.get(0), c1); + assertEquals(list.get(1), c2); + assertTrue(mMovedCertificatesStorage.delete(c1)); + assertTrue(mMovedCertificatesStorage.delete(c2)); + assertTrue(mMovedCertificatesStorage.list().isEmpty()); + } + +} diff --git a/app/src/main/java/com/nutomic/zertman/MainActivity.java b/app/src/main/java/com/nutomic/zertman/MainActivity.java index 33f422f..efbcd66 100644 --- a/app/src/main/java/com/nutomic/zertman/MainActivity.java +++ b/app/src/main/java/com/nutomic/zertman/MainActivity.java @@ -13,6 +13,8 @@ public class MainActivity extends ListActivity { private CertificateManager mCertificateManager; + private MovedCertificatesStorage mMovedCertificatesStorage; + /** * Sets up ListView showing all certificates. */ @@ -23,8 +25,10 @@ public class MainActivity extends ListActivity { mListView = getListView(); mCertificateAdapter = new CertificateAdapter(this); mCertificateManager = new CertificateManager(); + mMovedCertificatesStorage = new MovedCertificatesStorage(this); + mCertificateAdapter.addAll(mCertificateManager.getCertificates(false)); - mCertificateAdapter.addAll(mCertificateManager.getCertificates(true)); + mCertificateAdapter.addAll(mMovedCertificatesStorage.list()); mListView.setAdapter(mCertificateAdapter); } diff --git a/app/src/main/java/com/nutomic/zertman/MovedCertificatesStorage.java b/app/src/main/java/com/nutomic/zertman/MovedCertificatesStorage.java new file mode 100644 index 0000000..2a1c80f --- /dev/null +++ b/app/src/main/java/com/nutomic/zertman/MovedCertificatesStorage.java @@ -0,0 +1,95 @@ +package com.nutomic.zertman; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.provider.BaseColumns; + +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * Keeps information about certificates that have been moved to system memory. + */ +public class MovedCertificatesStorage implements Closeable { + + private static final String TAG = "MovedCertificatesStorage"; + + + private MovedCertificatesHelper mDbHelper; + + public MovedCertificatesStorage(Context context) { + mDbHelper = new MovedCertificatesHelper(context); + } + + @Override + public void close() throws IOException { + mDbHelper.close(); + } + + public boolean insert(Certificate cert) { + if (!cert.isSystemCertificate()) + return false; + + ContentValues cv = new ContentValues(); + cv.put(Table.COLUMN_NAME_FILE_NAME, cert.getFile().getName()); + SQLiteDatabase db = mDbHelper.getWritableDatabase(); + long row = db.insert(Table.TABLE_NAME, null, cv); + return row != -1; + } + + public List list() { + SQLiteDatabase db = mDbHelper.getReadableDatabase(); + Cursor c = db.query( + Table.TABLE_NAME, new String[]{Table.COLUMN_NAME_FILE_NAME}, + null, null, null, null, null); + ArrayList list = new ArrayList(c.getCount()); + c.moveToFirst(); + for (int i = 0; i < c.getCount(); i++) { + list.add(new Certificate( + c.getString(c.getColumnIndex(Table.COLUMN_NAME_FILE_NAME)), true)); + c.moveToNext(); + } + c.close(); + return list; + } + + public boolean delete(Certificate cert) { + SQLiteDatabase db = mDbHelper.getWritableDatabase(); + int count = db.delete(Table.TABLE_NAME, Table.COLUMN_NAME_FILE_NAME + " = ?", + new String[]{cert.getFile().getName()}); + return count == 1; + } + + public abstract class Table implements BaseColumns { + public static final String TABLE_NAME = "certificate"; + public static final String COLUMN_NAME_FILE_NAME = "file_name"; + } + + private class MovedCertificatesHelper extends SQLiteOpenHelper { + + private static final int DATABASE_VERSION = 1; + + private static final String DATABASE_NAME = "moved_certificates.db"; + + public MovedCertificatesHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL("CREATE TABLE " + Table.TABLE_NAME + " (" + + Table._ID + " INTEGER PRIMARY KEY," + + Table.COLUMN_NAME_FILE_NAME + " TEXT UNIQUE)"); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + } + } + +}