From 8b3da70d926edb6212bd3ce2d70d55a9aadd3099 Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Thu, 26 Mar 2015 11:09:09 -0400 Subject: [PATCH] Rename HistoryDatabase and convert it to a singleton for easier usage. Improved database structure. --- .../browser/lightning/BrowserActivity.java | 32 +++----- ...abaseHandler.java => HistoryDatabase.java} | 80 ++++++++++--------- src/acr/browser/lightning/HistoryPage.java | 2 +- .../lightning/PrivacySettingsActivity.java | 2 +- src/acr/browser/lightning/SearchAdapter.java | 8 +- 5 files changed, 57 insertions(+), 67 deletions(-) rename src/acr/browser/lightning/{HistoryDatabaseHandler.java => HistoryDatabase.java} (71%) diff --git a/src/acr/browser/lightning/BrowserActivity.java b/src/acr/browser/lightning/BrowserActivity.java index 2caab85..5229245 100644 --- a/src/acr/browser/lightning/BrowserActivity.java +++ b/src/acr/browser/lightning/BrowserActivity.java @@ -108,7 +108,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl private Bitmap mDefaultVideoPoster; private View mVideoProgressView; private LinearLayout mToolbarLayout; - private HistoryDatabaseHandler mHistoryHandler; + private HistoryDatabase mHistoryDatabase; private SharedPreferences mPreferences; private Context mContext; private Bitmap mWebpageBitmap; @@ -196,9 +196,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl mDrawerListRight.setOnItemClickListener(new BookmarkItemClickListener()); mDrawerListRight.setOnItemLongClickListener(new BookmarkItemLongClickListener()); - if (mHistoryHandler == null || !mHistoryHandler.isOpen()) { - mHistoryHandler = new HistoryDatabaseHandler(this); - } + mHistoryDatabase = HistoryDatabase.getInstance(this); // set display options of the ActionBar @@ -1407,7 +1405,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl @SuppressWarnings("deprecation") public void clearHistory() { - this.deleteDatabase(HistoryDatabaseHandler.DATABASE_NAME); + this.deleteDatabase(HistoryDatabase.DATABASE_NAME); WebViewDatabase m = WebViewDatabase.getInstance(this); m.clearFormData(); m.clearHttpAuthUsernamePassword(); @@ -1470,12 +1468,6 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl mCurrentView.pauseTimers(); mCurrentView.onPause(); } - if (mHistoryHandler != null) { - if (mHistoryHandler.isOpen()) { - mHistoryHandler.close(); - } - } - } public void saveOpenTabs() { @@ -1493,10 +1485,8 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl @Override protected void onDestroy() { Log.d(Constants.TAG, "onDestroy"); - if (mHistoryHandler != null) { - if (mHistoryHandler.isOpen()) { - mHistoryHandler.close(); - } + if (mHistoryDatabase != null) { + mHistoryDatabase.close(); } super.onDestroy(); } @@ -1513,11 +1503,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl mCurrentView.resumeTimers(); mCurrentView.onResume(); - if (mHistoryHandler == null) { - mHistoryHandler = new HistoryDatabaseHandler(this); - } else if (!mHistoryHandler.isOpen()) { - mHistoryHandler = new HistoryDatabaseHandler(this); - } + mHistoryDatabase = HistoryDatabase.getInstance(this); mBookmarkList = mBookmarkManager.getBookmarks(true); notifyBookmarkDataSetChanged(); } @@ -1970,10 +1956,10 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl } } try { - if (mHistoryHandler == null || !mHistoryHandler.isOpen()) { - mHistoryHandler = new HistoryDatabaseHandler(mContext); + if (mHistoryDatabase == null) { + mHistoryDatabase = HistoryDatabase.getInstance(mContext); } - mHistoryHandler.visitHistoryItem(url, title); + mHistoryDatabase.visitHistoryItem(url, title); } catch (IllegalStateException e) { Log.e(Constants.TAG, "IllegalStateException in updateHistory"); } catch (NullPointerException e) { diff --git a/src/acr/browser/lightning/HistoryDatabaseHandler.java b/src/acr/browser/lightning/HistoryDatabase.java similarity index 71% rename from src/acr/browser/lightning/HistoryDatabaseHandler.java rename to src/acr/browser/lightning/HistoryDatabase.java index 9341527..6ece034 100644 --- a/src/acr/browser/lightning/HistoryDatabaseHandler.java +++ b/src/acr/browser/lightning/HistoryDatabase.java @@ -8,15 +8,14 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; - import java.util.ArrayList; import java.util.List; -public class HistoryDatabaseHandler extends SQLiteOpenHelper { +public class HistoryDatabase extends SQLiteOpenHelper { // All Static variables // Database Version - private static final int DATABASE_VERSION = 1; + private static final int DATABASE_VERSION = 2; // Database Name public static final String DATABASE_NAME = "historyManager"; @@ -26,14 +25,22 @@ public class HistoryDatabaseHandler extends SQLiteOpenHelper { // HistoryItems Table Columns names public static final String KEY_ID = "id"; - public static final String KEY_URL = "url"; - public static final String KEY_TITLE = "title"; + public static final String KEY_TIME_VISITED = "time"; public static SQLiteDatabase mDatabase; - public HistoryDatabaseHandler(Context context) { + private static HistoryDatabase mInstance; + + public static HistoryDatabase getInstance(Context context) { + if (mInstance == null || mInstance.isClosed()) { + mInstance = new HistoryDatabase(context); + } + return mInstance; + } + + private HistoryDatabase(Context context) { super(context.getApplicationContext(), DATABASE_NAME, null, DATABASE_VERSION); mDatabase = this.getWritableDatabase(); } @@ -42,22 +49,22 @@ public class HistoryDatabaseHandler extends SQLiteOpenHelper { @Override public void onCreate(SQLiteDatabase db) { String CREATE_HISTORY_TABLE = "CREATE TABLE " + TABLE_HISTORY + "(" + KEY_ID - + " INTEGER PRIMARY KEY," + KEY_URL + " TEXT," + KEY_TITLE + " TEXT" + ")"; + + " INTEGER PRIMARY KEY," + KEY_URL + " TEXT," + KEY_TITLE + " TEXT," + + KEY_TIME_VISITED + " INTEGER" + ")"; db.execSQL(CREATE_HISTORY_TABLE); } // Upgrading database @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - // Drop older table if existed + // Drop older table if it exists db.execSQL("DROP TABLE IF EXISTS " + TABLE_HISTORY); - // Create tables again onCreate(db); } - public boolean isOpen() { - return mDatabase != null && mDatabase.isOpen(); + public boolean isClosed() { + return mDatabase == null || !mDatabase.isOpen(); } @Override @@ -68,34 +75,34 @@ public class HistoryDatabaseHandler extends SQLiteOpenHelper { super.close(); } - /** - * All CRUD(Create, Read, Update, Delete) Operations - */ - public synchronized void deleteHistoryItem(String url) { mDatabase.delete(TABLE_HISTORY, KEY_URL + " = ?", new String[] { url }); } public synchronized void visitHistoryItem(String url, String title) { - mDatabase.delete(TABLE_HISTORY, KEY_URL + " = ?", new String[] { url }); ContentValues values = new ContentValues(); - values.put(KEY_URL, url); values.put(KEY_TITLE, title); - mDatabase.insert(TABLE_HISTORY, null, values); + values.put(KEY_TIME_VISITED, System.currentTimeMillis()); + Cursor q = mDatabase.query(false, TABLE_HISTORY, new String[] { KEY_URL }, + KEY_URL + " = ?", new String[] { url }, null, null, null, "1"); + if (q.getCount() > 0) { + mDatabase.update(TABLE_HISTORY, values, KEY_URL + " = ?", new String[] { url }); + } else { + addHistoryItem(new HistoryItem(url, title)); + } } - // Adding new item public synchronized void addHistoryItem(HistoryItem item) { ContentValues values = new ContentValues(); values.put(KEY_URL, item.getUrl()); values.put(KEY_TITLE, item.getTitle()); + values.put(KEY_TIME_VISITED, System.currentTimeMillis()); mDatabase.insert(TABLE_HISTORY, null, values); } - // Getting single item String getHistoryItem(String url) { Cursor cursor = mDatabase.query(TABLE_HISTORY, new String[] { KEY_ID, KEY_URL, KEY_TITLE }, - KEY_URL + "=?", new String[] { url }, null, null, null, null); + KEY_URL + " = ?", new String[] { url }, null, null, null, null); String m = null; if (cursor != null) { cursor.moveToFirst(); @@ -103,43 +110,40 @@ public class HistoryDatabaseHandler extends SQLiteOpenHelper { cursor.close(); } - // return item return m; } public List findItemsContaining(String search) { List itemList = new ArrayList(); - // select query String selectQuery = "SELECT * FROM " + TABLE_HISTORY + " WHERE " + KEY_TITLE + " LIKE '%" - + search + "%' OR " + KEY_URL + " LIKE '%" + search + "%' LIMIT 5"; + + search + "%' OR " + KEY_URL + " LIKE '%" + search + "%' " + "ORDER BY " + + KEY_TIME_VISITED + " DESC LIMIT 5"; Cursor cursor = mDatabase.rawQuery(selectQuery, null); - // looping through all rows and adding to list int n = 0; - if (cursor.moveToLast()) { + if (cursor.moveToFirst()) { do { HistoryItem item = new HistoryItem(); item.setID(Integer.parseInt(cursor.getString(0))); item.setUrl(cursor.getString(1)); item.setTitle(cursor.getString(2)); item.setImageId(R.drawable.ic_history); - // Adding item to list itemList.add(item); n++; - } while (cursor.moveToPrevious() && n < 5); + } while (cursor.moveToNext() && n < 5); } cursor.close(); - // return item list return itemList; } public List getLastHundredItems() { List itemList = new ArrayList(); - String selectQuery = "SELECT * FROM " + TABLE_HISTORY; + String selectQuery = "SELECT * FROM " + TABLE_HISTORY + " ORDER BY " + KEY_TIME_VISITED + + " DESC"; Cursor cursor = mDatabase.rawQuery(selectQuery, null); int counter = 0; - if (cursor.moveToLast()) { + if (cursor.moveToFirst()) { do { HistoryItem item = new HistoryItem(); item.setID(Integer.parseInt(cursor.getString(0))); @@ -148,7 +152,7 @@ public class HistoryDatabaseHandler extends SQLiteOpenHelper { item.setImageId(R.drawable.ic_history); itemList.add(item); counter++; - } while (cursor.moveToPrevious() && counter < 100); + } while (cursor.moveToNext() && counter < 100); } cursor.close(); return itemList; @@ -156,7 +160,8 @@ public class HistoryDatabaseHandler extends SQLiteOpenHelper { public List getAllHistoryItems() { List itemList = new ArrayList(); - String selectQuery = "SELECT * FROM " + TABLE_HISTORY; + String selectQuery = "SELECT * FROM " + TABLE_HISTORY + " ORDER BY " + KEY_TIME_VISITED + + " DESC"; Cursor cursor = mDatabase.rawQuery(selectQuery, null); @@ -174,23 +179,22 @@ public class HistoryDatabaseHandler extends SQLiteOpenHelper { return itemList; } - // Updating single item public synchronized int updateHistoryItem(HistoryItem item) { ContentValues values = new ContentValues(); values.put(KEY_URL, item.getUrl()); values.put(KEY_TITLE, item.getTitle()); + values.put(KEY_TIME_VISITED, System.currentTimeMillis()); return mDatabase.update(TABLE_HISTORY, values, KEY_ID + " = ?", new String[] { String.valueOf(item.getId()) }); } - // Getting items Count public int getHistoryItemsCount() { - String countQuery = "SELECT * FROM " + TABLE_HISTORY; + String countQuery = "SELECT * FROM " + TABLE_HISTORY; Cursor cursor = mDatabase.rawQuery(countQuery, null); + int n = cursor.getCount(); cursor.close(); - // return count - return cursor.getCount(); + return n; } } diff --git a/src/acr/browser/lightning/HistoryPage.java b/src/acr/browser/lightning/HistoryPage.java index 676dcf9..e5d82ab 100644 --- a/src/acr/browser/lightning/HistoryPage.java +++ b/src/acr/browser/lightning/HistoryPage.java @@ -53,7 +53,7 @@ public class HistoryPage { } private static List getWebHistory(Context context) { - HistoryDatabaseHandler databaseHandler = new HistoryDatabaseHandler(context); + HistoryDatabase databaseHandler = HistoryDatabase.getInstance(context); return databaseHandler.getLastHundredItems(); } } diff --git a/src/acr/browser/lightning/PrivacySettingsActivity.java b/src/acr/browser/lightning/PrivacySettingsActivity.java index 534d018..00afa57 100644 --- a/src/acr/browser/lightning/PrivacySettingsActivity.java +++ b/src/acr/browser/lightning/PrivacySettingsActivity.java @@ -431,7 +431,7 @@ public class PrivacySettingsActivity extends ActionBarActivity { @SuppressWarnings("deprecation") public void clearHistory() { - deleteDatabase(HistoryDatabaseHandler.DATABASE_NAME); + deleteDatabase(HistoryDatabase.DATABASE_NAME); WebViewDatabase m = WebViewDatabase.getInstance(this); m.clearFormData(); m.clearHttpAuthUsernamePassword(); diff --git a/src/acr/browser/lightning/SearchAdapter.java b/src/acr/browser/lightning/SearchAdapter.java index eb4610c..ee7fefa 100644 --- a/src/acr/browser/lightning/SearchAdapter.java +++ b/src/acr/browser/lightning/SearchAdapter.java @@ -29,7 +29,7 @@ public class SearchAdapter extends BaseAdapter implements Filterable { private List mSuggestions; private List mFilteredList; private List mAllBookmarks; - private HistoryDatabaseHandler mDatabaseHandler; + private HistoryDatabase mDatabaseHandler; private SharedPreferences mPreferences; private boolean mUseGoogle = true; private Context mContext; @@ -42,7 +42,7 @@ public class SearchAdapter extends BaseAdapter implements Filterable { private String mSearchSubtitle; public SearchAdapter(Context context, boolean incognito) { - mDatabaseHandler = new HistoryDatabaseHandler(context); + mDatabaseHandler = HistoryDatabase.getInstance(context); mFilteredList = new ArrayList(); mHistory = new ArrayList(); mBookmarks = new ArrayList(); @@ -186,8 +186,8 @@ public class SearchAdapter extends BaseAdapter implements Filterable { } } - if (mDatabaseHandler == null || !mDatabaseHandler.isOpen()) { - mDatabaseHandler = new HistoryDatabaseHandler(mContext); + if (mDatabaseHandler == null) { + mDatabaseHandler = HistoryDatabase.getInstance(mContext); } mHistory = mDatabaseHandler.findItemsContaining(constraint.toString());