Android Open Source - EBrowser Db Adapter






From Project

Back to project page EBrowser.

License

The source code is released under:

GNU General Public License

If you think the Android project EBrowser listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Zirco Browser for Android/*w  w w . j  a  va 2s  . com*/
 * 
 * Copyright (C) 2010 - 2011 J. Devauchelle and contributors.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 3 as published by the Free Software Foundation.
 *
 * This program 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.
 */

package org.zirco.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.zirco.ui.runnables.XmlHistoryBookmarksExporter;
import org.zirco.utils.ApplicationUtils;
import org.zirco.utils.DateUtils;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.Browser;
import android.util.Log;

/**
 * Implementation of the database adapter.
 */
public class DbAdapter {
  
  private static final String TAG = "DbAdapter";

  private static final String DATABASE_NAME = "ZIRCO";
  private static final int DATABASE_VERSION = 6;
  
  /**
   * Adblock white list table.
   */
  public static final String ADBLOCK_ROWID = "_id";
  public static final String ADBLOCK_URL = "url";
  
  private static final String ADBLOCK_WHITELIST_DATABASE_TABLE = "ADBLOCK_WHITELIST";
  
  private static final String ADBLOCK_WHITELIST_DATABASE_CREATE = "CREATE TABLE " + ADBLOCK_WHITELIST_DATABASE_TABLE + " (" +
    ADBLOCK_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
    ADBLOCK_URL + " TEXT NOT NULL);";
  
  /**
   * Mobile view url table.
   */
  public static final String MOBILE_VIEW_URL_ROWID = "_id";
  public static final String MOBILE_VIEW_URL_URL = "url";
  
  private static final String MOBILE_VIEW_DATABASE_TABLE = "MOBILE_VIEW_URL";
  
  private static final String MOBILE_VIEW_DATABASE_CREATE = "CREATE TABLE " + MOBILE_VIEW_DATABASE_TABLE + " (" +
    MOBILE_VIEW_URL_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
    MOBILE_VIEW_URL_URL + " TEXT NOT NULL);";
  
  protected boolean mAdBlockListNeedPopulate = false;
  
  private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;
    
    private final Context mContext;
    
    /**
     * Constructor.
     * @param ctx The current context.
     */
    public DbAdapter(Context ctx) {
        this.mContext = ctx;
    }
    
    /**
     * Open the database helper.
     * @return The current database adapter.
     */
    public DbAdapter open() {
        mDbHelper = new DatabaseHelper(mContext, this);
        mDb = mDbHelper.getWritableDatabase();
        
        if (mAdBlockListNeedPopulate) {
          populateDefaultWhiteList();
          mAdBlockListNeedPopulate = false;
        }
        
        return this;
    }
    
    /**
     * Close the database helper.
     */
    public void close() {
        mDbHelper.close();
    }
    
    public SQLiteDatabase getDatabase() {
    return mDb;
  }
    
    /*******************************************************************************************************************************************************    
     * Adblock white list.
     */
    
    /**
     * Get the white list url given its id.
     * @param rowId The id.
     * @return The white list url. 
     */
    public String getWhiteListItemById(long rowId) {
      Cursor cursor = mDb.query(true, ADBLOCK_WHITELIST_DATABASE_TABLE, new String[] {ADBLOCK_ROWID, ADBLOCK_URL},
          ADBLOCK_ROWID + "=" + rowId, null, null, null, null, null);
      
      if (cursor.moveToFirst()) {
        
        String result;
        result = cursor.getString(cursor.getColumnIndex(ADBLOCK_URL));
        
        cursor.close();
        
        return result;
        
      } else {
        cursor.close();
        return null;
      }
    }
    
    /**
     * Get the list of url presents in white list.
     * @return The list of url presents in white list.
     */
    public List<String> getWhiteList() {
      List<String> result = new ArrayList<String>();
      
      Cursor cursor = getWhiteListCursor();
      
      if (cursor.moveToFirst()) {
        do {
          
          result.add(cursor.getString(cursor.getColumnIndex(ADBLOCK_URL)));
          
        } while (cursor.moveToNext());
      }
      
      cursor.close();
      
      return result;
    }
    
    /**
     * Get a cursor to the list of url presents in white list.
     * @return A cursor to the list of url presents in white list.
     */
    public Cursor getWhiteListCursor() {      
      return mDb.query(ADBLOCK_WHITELIST_DATABASE_TABLE, new String[] {ADBLOCK_ROWID, ADBLOCK_URL}, null, null, null, null, null);
    }
    
    /**
     * Insert an item in the white list.
     * @param url The url to insert.
     */
    public void insertInWhiteList(String url) {
      ContentValues initialValues = new ContentValues();
        initialValues.put(ADBLOCK_URL, url);
        
        mDb.insert(ADBLOCK_WHITELIST_DATABASE_TABLE, null, initialValues);
    }
    
    /**
     * Delete an item in white list given its id.
     * @param id The id to delete.
     */
    public void deleteFromWhiteList(long id) {
      mDb.execSQL("DELETE FROM " + ADBLOCK_WHITELIST_DATABASE_TABLE + " WHERE " + ADBLOCK_ROWID + " = " + id + ";");
    }
    
    /**
     * Delete all records from the white list.
     */
    public void clearWhiteList() {
      mDb.execSQL("DELETE FROM " + ADBLOCK_WHITELIST_DATABASE_TABLE + ";");
    }
    
    /*******************************************************************************************************************************************************    
     * Mobile view list.
     */
    
    /**
     * Get an url from the mobile view list from its id.
     * @param rowId The id.
     * @return The url.
     */
    public String getMobileViewUrlItemById(long rowId) {
      Cursor cursor = mDb.query(true, MOBILE_VIEW_DATABASE_TABLE, new String[] {MOBILE_VIEW_URL_ROWID, MOBILE_VIEW_URL_URL},
          MOBILE_VIEW_URL_ROWID + "=" + rowId, null, null, null, null, null);
      
      if (cursor.moveToFirst()) {
        
        String result;
        result = cursor.getString(cursor.getColumnIndex(MOBILE_VIEW_URL_URL));
        
        cursor.close();
        
        return result;
        
      } else {
        cursor.close();
        return null;
      }
    }
    
    /**
     * Get a list of all urls in mobile view list.
     * @return A list of url.
     */
    public List<String> getMobileViewUrlList() {
      List<String> result = new ArrayList<String>();
      
      Cursor cursor = getMobileViewUrlCursor();
      
      if (cursor.moveToFirst()) {
        do {
          
          result.add(cursor.getString(cursor.getColumnIndex(MOBILE_VIEW_URL_URL)));
          
        } while (cursor.moveToNext());
      }
      
      cursor.close();
      
      return result;
    }
    
    /**
     * Get a Cursor to the mobile view url list.
     * @return A Cursor to the mobile view url list.
     */
    public Cursor getMobileViewUrlCursor() {
      return mDb.query(MOBILE_VIEW_DATABASE_TABLE, new String[] {MOBILE_VIEW_URL_ROWID, MOBILE_VIEW_URL_URL}, null, null, null, null, null);
    }
    
    /**
     * Insert an url in the mobile view url list.
     * @param url The new url.
     */
    public void insertInMobileViewUrlList(String url) {
      ContentValues initialValues = new ContentValues();
        initialValues.put(MOBILE_VIEW_URL_URL, url);
        
        mDb.insert(MOBILE_VIEW_DATABASE_TABLE, null, initialValues);
    }
    
    /**
     * Delete an url from the mobile view url list.
     * @param id The id of the url to delete.
     */
    public void deleteFromMobileViewUrlList(long id) {
      mDb.execSQL("DELETE FROM " + MOBILE_VIEW_DATABASE_TABLE + " WHERE " + MOBILE_VIEW_URL_ROWID + " = " + id + ";");
    }
    
    /**
     * Clear the mobile view url list.
     */
    public void clearMobileViewUrlList() {
      mDb.execSQL("DELETE FROM " + MOBILE_VIEW_DATABASE_TABLE + ";");
    }
    
    /**
     * Populate the white list with default values.
     */
    private void populateDefaultWhiteList() {
      insertInWhiteList("google.com/reader");      
    }
    
    /**
     * DatabaseHelper.
     */
    private static class DatabaseHelper extends SQLiteOpenHelper {

      private DbAdapter mParent;
      
      /**
       * Constructor.
       * @param context The current context.
       * @param parent The DbAdapter parent.
       */
    public DatabaseHelper(Context context, DbAdapter parent) {
      super(context, DATABASE_NAME, null, DATABASE_VERSION);
      mParent = parent;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
      //db.execSQL(BOOKMARKS_DATABASE_CREATE);
      //db.execSQL(HISTORY_DATABASE_CREATE);
      db.execSQL(ADBLOCK_WHITELIST_DATABASE_CREATE);
      db.execSQL(MOBILE_VIEW_DATABASE_CREATE);
      mParent.mAdBlockListNeedPopulate = true;
    }    

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {      
      
      Log.d(TAG, "Upgrading database.");
      
      switch (oldVersion) {
      case 1: //db.execSQL("ALTER TABLE " + BOOKMARKS_DATABASE_TABLE + " ADD " + BOOKMARKS_THUMBNAIL + " BLOB;");
      case 2: //db.execSQL("ALTER TABLE " + BOOKMARKS_DATABASE_TABLE + " ADD " + BOOKMARKS_COUNT + " INTEGER NOT NULL DEFAULT 0;");
      case 3:
        db.execSQL(ADBLOCK_WHITELIST_DATABASE_CREATE);
        mParent.mAdBlockListNeedPopulate = true;
      case 4: db.execSQL(MOBILE_VIEW_DATABASE_CREATE);
      case 5:
        // Export old bookmarks before dropping table.
        exportOldBookmarks(db);
        db.execSQL("DROP TABLE IF EXISTS BOOKMARKS;");
        db.execSQL("DROP TABLE IF EXISTS HISTORY;");
      default: break;
      }
    }
    
    /**
     * Export bookmarks from the old database. Transform the query result
     * into a MatrixCursor following the stock bookmarks database, so it 
     * can be exported with the XmlHistoryBookmarksExporter without any
     * change on it.
     * @param db The database.
     */
    private void exportOldBookmarks(SQLiteDatabase db) {
      
      Log.i("DbAdapter", "Start export of old bookmarks.");
      
      try {
        if (ApplicationUtils.checkCardState(mParent.mContext, false)) {

          Log.i("DbAdapter", "Export of old bookmarks: SDCard checked.");

          MatrixCursor cursor = null;

          Cursor c = db.query( "BOOKMARKS",
              new String[] { "_id",
                "title",
                "url",
                "creation_date",
                "count" },
              null,
              null,
              null,
              null,
              null);

          if (c != null) {      
            if (c.moveToFirst()) {

              cursor = new MatrixCursor(new String[] {
                  Browser.BookmarkColumns.TITLE,
                  Browser.BookmarkColumns.URL,
                  Browser.BookmarkColumns.VISITS,
                  Browser.BookmarkColumns.DATE,
                  Browser.BookmarkColumns.CREATED,
                  Browser.BookmarkColumns.BOOKMARK
              });

              int titleColumn = c.getColumnIndex("title");
              int urlColumn = c.getColumnIndex("url");
              int creationDateColumn = c.getColumnIndex("creation_date");
              int countColumn = c.getColumnIndex("count");

              while (!c.isAfterLast()) {

                Date date = DateUtils.convertFromDatabase(mParent.mContext, c.getString(creationDateColumn));

                Object[] data = new Object[6];
                data[0] = c.getString(titleColumn);
                data[1] = c.getString(urlColumn);
                data[2] = c.getInt(countColumn);
                data[3] = date.getTime();
                data[4] = date.getTime();
                data[5] = 1;

                cursor.addRow(data);

                c.moveToNext();
              }
            }

            c.close();
          }

          if (cursor != null) {
            Log.i("DbAdapter", "Export of old bookmarks: Writing file.");
            new Thread(new XmlHistoryBookmarksExporter(null, "auto-export.xml", cursor, null)).start();
          }
        }
      } catch (Exception e) {
        Log.i("DbAdapter", "Export of old bookmarks failed: " + e.getMessage());
      }
      
      Log.i("DbAdapter", "End of export of old bookmarks.");
    }
      
    }
  
}




Java Source Code List

org.emergent.android.weave.client.Base32.java
org.emergent.android.weave.client.Base64Encoder.java
org.emergent.android.weave.client.Base64.java
org.emergent.android.weave.client.BulkKeyCouplet.java
org.emergent.android.weave.client.Dbg.java
org.emergent.android.weave.client.HexEncoder.java
org.emergent.android.weave.client.Hex.java
org.emergent.android.weave.client.QueryParams.java
org.emergent.android.weave.client.QueryResult.java
org.emergent.android.weave.client.UserWeave.java
org.emergent.android.weave.client.WeaveAccountInfo.java
org.emergent.android.weave.client.WeaveBasicObject.java
org.emergent.android.weave.client.WeaveConstants.java
org.emergent.android.weave.client.WeaveCryptoUtil.java
org.emergent.android.weave.client.WeaveException.java
org.emergent.android.weave.client.WeaveFactory.java
org.emergent.android.weave.client.WeaveHeader.java
org.emergent.android.weave.client.WeaveResponse.java
org.emergent.android.weave.client.WeaveSSLSocketFactory.java
org.emergent.android.weave.client.WeaveTransport.java
org.emergent.android.weave.client.WeaveUtil.java
org.greendroid.QuickActionGrid.java
org.greendroid.QuickActionWidget.java
org.greendroid.QuickAction.java
org.zirco.controllers.Controller.java
org.zirco.events.EventConstants.java
org.zirco.events.EventController.java
org.zirco.events.IDownloadEventsListener.java
org.zirco.model.DbAdapter.java
org.zirco.model.UrlSuggestionItemComparator.java
org.zirco.model.adapters.BookmarksCursorAdapter.java
org.zirco.model.adapters.DownloadListAdapter.java
org.zirco.model.adapters.HistoryExpandableListAdapter.java
org.zirco.model.adapters.UrlSuggestionCursorAdapter.java
org.zirco.model.adapters.WeaveBookmarksCursorAdapter.java
org.zirco.model.items.BookmarkItem.java
org.zirco.model.items.DownloadItem.java
org.zirco.model.items.HistoryItem.java
org.zirco.model.items.UrlSuggestionItem.java
org.zirco.model.items.WeaveBookmarkItem.java
org.zirco.providers.BookmarksProviderWrapper.java
org.zirco.providers.WeaveColumns.java
org.zirco.providers.WeaveContentProvider.java
org.zirco.providers.ZircoBookmarksContentProvider.java
org.zirco.sync.ISyncListener.java
org.zirco.sync.WeaveSyncTask.java
org.zirco.ui.activities.AboutActivity.java
org.zirco.ui.activities.AdBlockerWhiteListActivity.java
org.zirco.ui.activities.BookmarksHistoryActivity.java
org.zirco.ui.activities.BookmarksListActivity.java
org.zirco.ui.activities.ChangelogActivity.java
org.zirco.ui.activities.DownloadsListActivity.java
org.zirco.ui.activities.EditBookmarkActivity.java
org.zirco.ui.activities.HistoryListActivity.java
org.zirco.ui.activities.IToolbarsContainer.java
org.zirco.ui.activities.MainActivity.java
org.zirco.ui.activities.MobileViewListActivity.java
org.zirco.ui.activities.WeaveBookmarksListActivity.java
org.zirco.ui.activities.preferences.BaseSpinnerCustomPreferenceActivity.java
org.zirco.ui.activities.preferences.HomepagePreferenceActivity.java
org.zirco.ui.activities.preferences.PreferencesActivity.java
org.zirco.ui.activities.preferences.SearchUrlPreferenceActivity.java
org.zirco.ui.activities.preferences.UserAgentPreferenceActivity.java
org.zirco.ui.activities.preferences.WeavePreferencesActivity.java
org.zirco.ui.activities.preferences.WeaveServerPreferenceActivity.java
org.zirco.ui.components.CustomWebViewClient.java
org.zirco.ui.components.CustomWebView.java
org.zirco.ui.runnables.DownloadRunnable.java
org.zirco.ui.runnables.FaviconUpdaterRunnable.java
org.zirco.ui.runnables.HideToolbarsRunnable.java
org.zirco.ui.runnables.HistoryUpdater.java
org.zirco.ui.runnables.XmlHistoryBookmarksExporter.java
org.zirco.ui.runnables.XmlHistoryBookmarksImporter.java
org.zirco.utils.AnimationManager.java
org.zirco.utils.ApplicationUtils.java
org.zirco.utils.Constants.java
org.zirco.utils.DateUtils.java
org.zirco.utils.IOUtils.java
org.zirco.utils.ProxyChangeReceiver.java
org.zirco.utils.ProxySettings.java
org.zirco.utils.UrlUtils.java