package io.github.mthli.Ninja.Database; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import io.github.mthli.Ninja.Unit.RecordUnit; import io.github.mthli.Ninja.View.GridItem; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class RecordAction { private SQLiteDatabase database; private RecordHelper helper; public RecordAction(Context context) { this.helper = new RecordHelper(context); } public void open(boolean rw) { if (rw) { database = helper.getWritableDatabase(); } else { database = helper.getReadableDatabase(); } } public void close() { helper.close(); } public boolean addBookmark(Record record) { if (record == null || record.getTitle() == null || record.getTitle().trim().isEmpty() || record.getURL() == null || record.getURL().trim().isEmpty() || record.getTime() < 0l) { return false; } ContentValues values = new ContentValues(); values.put(RecordUnit.COLUMN_TITLE, record.getTitle().trim()); values.put(RecordUnit.COLUMN_URL, record.getURL().trim()); values.put(RecordUnit.COLUMN_TIME, record.getTime()); database.insert(RecordUnit.TABLE_BOOKMARKS, null, values); return true; } public boolean addHistory(Record record) { if (record == null || record.getTitle() == null || record.getTitle().trim().isEmpty() || record.getURL() == null || record.getURL().trim().isEmpty() || record.getTime() < 0l) { return false; } ContentValues values = new ContentValues(); values.put(RecordUnit.COLUMN_TITLE, record.getTitle().trim()); values.put(RecordUnit.COLUMN_URL, record.getURL().trim()); values.put(RecordUnit.COLUMN_TIME, record.getTime()); database.insert(RecordUnit.TABLE_HISTORY, null, values); return true; } public boolean addDomain(String domain) { if (domain == null || domain.trim().isEmpty()) { return false; } ContentValues values = new ContentValues(); values.put(RecordUnit.COLUMN_DOMAIN, domain.trim()); database.insert(RecordUnit.TABLE_WHITELIST, null, values); return true; } public boolean addGridItem(GridItem item) { if (item == null || item.getTitle() == null || item.getTitle().trim().isEmpty() || item.getURL() == null || item.getURL().trim().isEmpty() || item.getFilename() == null || item.getFilename().trim().isEmpty() || item.getOrdinal() < 0) { return false; } ContentValues values = new ContentValues(); values.put(RecordUnit.COLUMN_TITLE, item.getTitle().trim()); values.put(RecordUnit.COLUMN_URL, item.getURL().trim()); values.put(RecordUnit.COLUMN_FILENAME, item.getFilename().trim()); values.put(RecordUnit.COLUMN_ORDINAL, item.getOrdinal()); database.insert(RecordUnit.TABLE_GRID, null, values); return true; } public boolean updateBookmark(Record record) { if (record == null || record.getTitle() == null || record.getTitle().trim().isEmpty() || record.getURL() == null || record.getURL().trim().isEmpty() || record.getTime() < 0) { return false; } ContentValues values = new ContentValues(); values.put(RecordUnit.COLUMN_TITLE, record.getTitle().trim()); values.put(RecordUnit.COLUMN_URL, record.getURL().trim()); values.put(RecordUnit.COLUMN_TIME, record.getTime()); database.update(RecordUnit.TABLE_BOOKMARKS, values, RecordUnit.COLUMN_TIME + "=?", new String[] {String.valueOf(record.getTime())}); return true; } public boolean updateGridItem(GridItem item) { if (item == null || item.getTitle() == null || item.getTitle().trim().isEmpty() || item.getURL() == null || item.getURL().trim().isEmpty() || item.getFilename() == null || item.getFilename().trim().isEmpty() || item.getOrdinal() < 0) { return false; } ContentValues values = new ContentValues(); values.put(RecordUnit.COLUMN_TITLE, item.getTitle().trim()); values.put(RecordUnit.COLUMN_URL, item.getURL().trim()); values.put(RecordUnit.COLUMN_FILENAME, item.getFilename().trim()); values.put(RecordUnit.COLUMN_ORDINAL, item.getOrdinal()); database.update(RecordUnit.TABLE_GRID, values, RecordUnit.COLUMN_URL + "=?", new String[] {item.getURL()}); return true; } public boolean checkBookmark(Record record) { if (record == null || record.getURL() == null || record.getURL().trim().isEmpty()) { return false; } Cursor cursor = database.query( RecordUnit.TABLE_BOOKMARKS, new String[] {RecordUnit.COLUMN_URL}, RecordUnit.COLUMN_URL + "=?", new String[] {record.getURL().trim()}, null, null, null ); if (cursor != null) { boolean result = false; if (cursor.moveToFirst()) { result = true; } cursor.close(); return result; } return false; } public boolean checkBookmark(String url) { if (url == null || url.trim().isEmpty()) { return false; } Cursor cursor = database.query( RecordUnit.TABLE_BOOKMARKS, new String[] {RecordUnit.COLUMN_URL}, RecordUnit.COLUMN_URL + "=?", new String[] {url.trim()}, null, null, null ); if (cursor != null) { boolean result = false; if (cursor.moveToFirst()) { result = true; } cursor.close(); return result; } return false; } public boolean checkDomain(String domain) { if (domain == null || domain.trim().isEmpty()) { return false; } Cursor cursor = database.query( RecordUnit.TABLE_WHITELIST, new String[] {RecordUnit.COLUMN_DOMAIN}, RecordUnit.COLUMN_DOMAIN + "=?", new String[] {domain.trim()}, null, null, null ); if (cursor != null) { boolean result = false; if (cursor.moveToFirst()) { result = true; } cursor.close(); return result; } return false; } public boolean checkGridItem(GridItem item) { if (item == null || item.getURL() == null || item.getURL().trim().isEmpty()) { return false; } Cursor cursor = database.query( RecordUnit.TABLE_GRID, new String[] {RecordUnit.COLUMN_URL}, RecordUnit.COLUMN_URL + "=?", new String[] {item.getURL().trim()}, null, null, null ); if (cursor != null) { boolean result = false; if (cursor.moveToFirst()) { result = true; } cursor.close(); return result; } return false; } public boolean checkGridItem(String url) { if (url == null || url.trim().isEmpty()) { return false; } Cursor cursor = database.query( RecordUnit.TABLE_GRID, new String[] {RecordUnit.COLUMN_URL}, RecordUnit.COLUMN_URL + "=?", new String[] {url.trim()}, null, null, null ); if (cursor != null) { boolean result = false; if (cursor.moveToFirst()) { result = true; } cursor.close(); return result; } return false; } public boolean deleteBookmark(Record record) { if (record == null || record.getURL() == null || record.getURL().trim().isEmpty()) { return false; } database.execSQL("DELETE FROM " + RecordUnit.TABLE_BOOKMARKS + " WHERE " + RecordUnit.COLUMN_URL + " = " + "\"" + record.getURL().trim() + "\""); return true; } public boolean deleteBookmark(String url) { if (url == null || url.trim().isEmpty()) { return false; } database.execSQL("DELETE FROM "+ RecordUnit.TABLE_BOOKMARKS + " WHERE " + RecordUnit.COLUMN_URL + " = " + "\"" + url.trim() + "\""); return true; } public boolean deleteHistory(Record record) { if (record == null || record.getTime() <= 0) { return false; } database.execSQL("DELETE FROM "+ RecordUnit.TABLE_HISTORY + " WHERE " + RecordUnit.COLUMN_TIME + " = " + record.getTime()); return true; } public boolean deleteDomain(String domain) { if (domain == null || domain.trim().isEmpty()) { return false; } database.execSQL("DELETE FROM "+ RecordUnit.TABLE_WHITELIST + " WHERE " + RecordUnit.COLUMN_DOMAIN + " = " + "\"" + domain.trim() + "\""); return true; } public boolean deleteGridItem(GridItem item) { if (item == null || item.getURL() == null || item.getURL().trim().isEmpty()) { return false; } database.execSQL("DELETE FROM " + RecordUnit.TABLE_GRID + " WHERE " + RecordUnit.COLUMN_URL + " = " + "\"" + item.getURL().trim() + "\""); return true; } public boolean deleteGridItem(String url) { if (url == null || url.trim().isEmpty()) { return false; } database.execSQL("DELETE FROM "+ RecordUnit.TABLE_GRID + " WHERE " + RecordUnit.COLUMN_URL + " = " + "\"" + url.trim() + "\""); return true; } public void clearBookmarks() { database.execSQL("DELETE FROM " + RecordUnit.TABLE_BOOKMARKS); } public void clearHistory() { database.execSQL("DELETE FROM " + RecordUnit.TABLE_HISTORY); } public void clearDomains() { database.execSQL("DELETE FROM " + RecordUnit.TABLE_WHITELIST); } public void clearGrid() { database.execSQL("DELETE FROM " + RecordUnit.TABLE_GRID); } private Record getRecord(Cursor cursor) { Record record = new Record(); record.setTitle(cursor.getString(0)); record.setURL(cursor.getString(1)); record.setTime(cursor.getLong(2)); return record; } private GridItem getGridItem(Cursor cursor) { GridItem item = new GridItem(); item.setTitle(cursor.getString(0)); item.setURL(cursor.getString(1)); item.setFilename(cursor.getString(2)); item.setOrdinal(cursor.getInt(3)); return item; } public List<Record> listBookmarks() { List<Record> list = new ArrayList<>(); Cursor cursor = database.query( RecordUnit.TABLE_BOOKMARKS, new String[] { RecordUnit.COLUMN_TITLE, RecordUnit.COLUMN_URL, RecordUnit.COLUMN_TIME }, null, null, null, null, RecordUnit.COLUMN_TIME + " desc" ); if (cursor == null) { return list; } cursor.moveToFirst(); while (!cursor.isAfterLast()) { list.add(getRecord(cursor)); cursor.moveToNext(); } cursor.close(); return list; } public List<Record> listHistory() { List<Record> list = new ArrayList<>(); Cursor cursor = database.query( RecordUnit.TABLE_HISTORY, new String[] { RecordUnit.COLUMN_TITLE, RecordUnit.COLUMN_URL, RecordUnit.COLUMN_TIME }, null, null, null, null, RecordUnit.COLUMN_TIME + " desc" ); if (cursor == null) { return list; } cursor.moveToFirst(); while (!cursor.isAfterLast()) { list.add(getRecord(cursor)); cursor.moveToNext(); } cursor.close(); return list; } public List<String> listDomains() { List<String> list = new ArrayList<>(); Cursor cursor = database.query( RecordUnit.TABLE_WHITELIST, new String[] {RecordUnit.COLUMN_DOMAIN}, null, null, null, null, RecordUnit.COLUMN_DOMAIN ); if (cursor == null) { return list; } cursor.moveToFirst(); while (!cursor.isAfterLast()) { list.add(cursor.getString(0)); cursor.moveToNext(); } cursor.close(); return list; } public List<GridItem> listGrid() { List<GridItem> list = new LinkedList<>(); Cursor cursor = database.query( RecordUnit.TABLE_GRID, new String[] { RecordUnit.COLUMN_TITLE, RecordUnit.COLUMN_URL, RecordUnit.COLUMN_FILENAME, RecordUnit.COLUMN_ORDINAL }, null, null, null, null, RecordUnit.COLUMN_ORDINAL ); if (cursor == null) { return list; } cursor.moveToFirst(); while (!cursor.isAfterLast()) { list.add(getGridItem(cursor)); cursor.moveToNext(); } cursor.close(); return list; } }