/*
* Copyright (C) 2009 Apps Organizer
*
* This file is part of Apps Organizer
*
* Apps Organizer is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Apps Organizer 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.
*
* You should have received a copy of the GNU General Public License
* along with Apps Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
package com.google.code.appsorganizer.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.google.code.appsorganizer.R;
import com.google.code.appsorganizer.SplashScreenActivity;
import com.google.code.appsorganizer.model.Label;
public class DatabaseHelperBasic extends SQLiteOpenHelper {
private static final String TAG = "DatabaseHelper";
private static final int DATABASE_VERSION = 25;
protected final SQLiteDatabase db;
private Context context;
public DatabaseHelperBasic(Context context) {
super(context, "data", null, DATABASE_VERSION);
this.context = context;
db = getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(LabelDao.getCreateTableScript());
db.execSQL(AppLabelDao.getCreateTableScript());
db.execSQL(AppCacheDao.getCreateTableScript());
long internetId = insertLabel(db, null, context.getString(R.string.label_default_internet), Label.convertToIconDb(R.drawable.globe));
long androidId = insertLabel(db, null, context.getString(R.string.label_default_android), Label.convertToIconDb(R.drawable.pda_black));
long multimediaId = insertLabel(db, null, context.getString(R.string.label_default_multimedia), Label.convertToIconDb(R.drawable.multimedia));
long utilityId = insertLabel(db, null, context.getString(R.string.label_default_tools), Label.convertToIconDb(R.drawable.service_manager));
insertLabel(db, null, context.getString(R.string.label_default_games), Label.convertToIconDb(R.drawable.joystick));
insertInterneApps(db, internetId);
insertAndroidApps(db, androidId);
insertMultimediaApps(db, multimediaId);
insertUtilityApps(db, utilityId);
}
private void insertUtilityApps(SQLiteDatabase db, long id) {
insertApp(db, "com.google.code.appsorganizer", SplashScreenActivity.class.getName(), id);
}
private void insertMultimediaApps(SQLiteDatabase db, long id) {
insertApp(db, "com.android.music", "com.android.music.MusicBrowserActivity", id);
insertApp(db, "com.android.music", "com.android.music.VideoBrowserActivity", id);
insertApp(db, "com.android.camera", "com.android.camera.Camera", id);
insertApp(db, "com.android.camera", "com.android.camera.VideoCamera", id);
insertApp(db, "com.android.camera", "com.android.camera.GalleryPicker", id);
}
private void insertAndroidApps(SQLiteDatabase db, long id) {
insertApp(db, "com.android.alarmclock", "com.android.alarmclock.AlarmClock", id);
insertApp(db, "com.android.calendar", "com.android.calendar.LaunchActivity", id);
insertApp(db, "com.android.vending", "com.android.vending.AssetBrowserActivity", id);
insertApp(db, "com.android.settings", "com.android.settings.Settings", id);
insertApp(db, "com.android.contacts", "com.android.contacts.DialtactsActivity", id);
insertApp(db, "com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity", id);
insertApp(db, "com.android.mms", "com.android.mms.ui.ConversationList", id);
insertApp(db, "com.android.calculator2", "com.android.calculator2.Calculator", id);
}
private void insertInterneApps(SQLiteDatabase db, long id) {
insertApp(db, "com.android.browser", "com.android.browser.BrowserActivity", id);
insertApp(db, "com.google.android.talk", "com.google.android.talk.SigningInActivity", id);
insertApp(db, "com.google.android.apps.maps", "com.google.android.maps.MapsActivity", id);
insertApp(db, "com.google.android.youtube", "com.google.android.youtube.HomePage", id);
insertApp(db, "com.google.android.gm", "com.google.android.gm.ConversationListActivityGmail", id);
insertApp(db, "com.android.email", "com.android.email.activity.Welcome", id);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion);
if (oldVersion <= 11) {
db.execSQL(AppCacheDao.getCreateTableScript());
}
if (oldVersion <= 13) {
addColumn(db, AppCacheDao.TABLE_NAME, AppCacheDao.STARRED);
}
if (oldVersion <= 14) {
db.delete(AppCacheDao.TABLE_NAME, null, null);
addColumn(db, AppCacheDao.TABLE_NAME, AppCacheDao.PACKAGE_NAME);
}
if (oldVersion <= 18) {
addColumn(db, LabelDao.TABLE_NAME, LabelDao.IMAGE);
}
if (oldVersion <= 19) {
addColumn(db, AppLabelDao.TABLE_NAME, AppLabelDao.PACKAGE);
}
if (oldVersion <= 20) {
addPackages(db);
}
// if (oldVersion <= 22) {
// db.delete(AppCacheDao.TABLE_NAME, null, null);
// }
if (oldVersion <= 23) {
addColumn(db, AppCacheDao.TABLE_NAME, AppCacheDao.IMAGE);
}
if (oldVersion <= 24) {
addColumn(db, AppCacheDao.TABLE_NAME, AppCacheDao.DISABLED);
}
// db.execSQL(appsLabelDao.getDropTableScript());
// db.execSQL(labelDao.getDropTableScript());
// onCreate(db);
}
public void addPackages() {
addPackages(db);
}
private void addPackages(SQLiteDatabase db) {
Cursor query = db.query(AppLabelDao.TABLE_NAME, new String[] { "_id", AppLabelDao.APP_COL_NAME }, AppLabelDao.PACKAGE_NAME_COL_NAME
+ " is null", null, null, null, null);
try {
while (query.moveToNext()) {
Cursor c = db.query(AppCacheDao.TABLE_NAME, new String[] { AppCacheDao.PACKAGE_NAME_COL_NAME }, AppCacheDao.NAME_COL_NAME
+ "=?", new String[] { query.getString(1) }, null, null, null);
try {
if (c.moveToNext()) {
ContentValues contentValues = new ContentValues();
contentValues.put(AppLabelDao.PACKAGE_NAME_COL_NAME, c.getString(0));
db.update(AppLabelDao.TABLE_NAME, contentValues, "_id=?", new String[] { Long.toString(query.getLong(0)) });
} else {
db.delete(AppLabelDao.TABLE_NAME, "_id=?", new String[] { Long.toString(query.getLong(0)) });
}
} finally {
c.close();
}
}
} finally {
query.close();
}
//
// db.execSQL("update " + AppLabelDao.TABLE_NAME + " set " +
// AppLabelDao.PACKAGE_NAME_COL_NAME + "=(select min(ac.package) from "
// + AppCacheDao.TABLE_NAME + " ac where ac." +
// AppCacheDao.NAME_COL_NAME + "=" + AppLabelDao.APP_COL_NAME +
// ") where "
// + AppLabelDao.PACKAGE_NAME_COL_NAME + " is null");
}
private boolean addColumn(SQLiteDatabase db, String tableName, DbColumns column) {
// add column only if does't exists
Cursor c = null;
try {
c = db.query(tableName, new String[] { column.getName() }, null, null, null, null, null);
c.close();
return false;
} catch (Exception e) {
if (c != null) {
c.close();
}
db.execSQL("alter table " + tableName + " add " + column.getName() + ' ' + column.getDescription());
return true;
}
}
private long insertLabel(SQLiteDatabase db, Long id, String value, Integer icon) {
ContentValues v = new ContentValues();
v.put(LabelDao.LABEL.getName(), value);
v.put(LabelDao.ICON.getName(), icon);
if (id != null) {
v.put(LabelDao.ID_COL_NAME, id);
}
return db.insert(LabelDao.TABLE_NAME, null, v);
}
private void insertApp(SQLiteDatabase db, String packageName, String value, long labelId) {
ContentValues v = new ContentValues();
v.put(AppLabelDao.APP.getName(), value);
v.put(AppLabelDao.LABEL_ID.getName(), labelId);
v.put(AppLabelDao.PACKAGE_NAME_COL_NAME, packageName);
db.insert(AppLabelDao.TABLE_NAME, null, v);
}
public SQLiteDatabase getDb() {
return db;
}
}