/*
* Copyright 2011 Artiom Chilaru (http://flexlabs.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.flexlabs.widgets.dualbattery.storage;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.text.TextUtils;
import java.util.Date;
public class BatteryLevelAdapter {
private static final String DB_NAME = "BatteryLevels.db";
private static final String DB_TABLE = "BatteryLevels";
private static final int DB_VERSION = 2;
public static final String KEY_ID = "_id";
public static final int ORD_ID = 0;
public static final String KEY_TIME = "Time";
public static final int ORD_TIME = 1;
public static final String KEY_STATUS = "Status";
public static final int ORD_STATUS = 2;
public static final String KEY_LEVEL = "Level";
public static final int ORD_LEVEL = 3;
public static final String KEY_DOCK_STATUS = "DockStatus";
public static final int ORD_DOCK_STATUS = 4;
public static final String KEY_DOCK_LEVEL = "DockLevel";
public static final int ORD_DOCK_LEVEL = 5;
public static final String KEY_SCREEN_STATE = "ScreenState";
public static final int ORD_SCREEN_STATE = 6;
private static final String DB_CREATE = "CREATE TABLE " + DB_TABLE + " (" +
KEY_ID + " integer PRIMARY KEY AUTOINCREMENT, " +
KEY_TIME + " LONG NOT NULL, " +
KEY_STATUS + " INT NOT NULL, " +
KEY_LEVEL + " INT NOT NULL, " +
KEY_DOCK_STATUS + " INT NOT NULL, " +
KEY_DOCK_LEVEL + " INT, " +
KEY_SCREEN_STATE + " INT NOT NULL);";
private SQLiteDatabase db;
private final Context context;
private DBHelper dbHelper;
public BatteryLevelAdapter(Context context) {
this.context = context;
dbHelper = new DBHelper(context, DB_NAME, null, DB_VERSION);
}
public BatteryLevelAdapter open() {
db = dbHelper.getWritableDatabase();
return this;
}
public BatteryLevelAdapter openRead() {
db = dbHelper.getReadableDatabase();
return this;
}
public void close() {
db.close();
}
public long insertEntry(Entry entry) {
ContentValues values = new ContentValues();
values.put(KEY_TIME, entry.date.getTime());
values.put(KEY_STATUS, entry.status);
values.put(KEY_LEVEL, entry.level);
values.put(KEY_DOCK_STATUS, entry.dock_status);
values.put(KEY_DOCK_LEVEL, entry.dock_level);
values.put(KEY_SCREEN_STATE, entry.screenOff ? 0 : 1);
return db.insert(DB_TABLE, null, values);
}
public boolean removeEntry(long index) {
return db.delete(DB_TABLE, KEY_ID + " = " + index, null) > 0;
}
public Cursor getAllEntries() {
return db.query(
DB_TABLE,
new String[] { KEY_ID, KEY_TIME, KEY_STATUS, KEY_LEVEL, KEY_DOCK_STATUS, KEY_DOCK_LEVEL, KEY_SCREEN_STATE },
null, null, null, null, null);
}
public Cursor getRecentEntries(int days) {
return db.query(
DB_TABLE,
new String[] { KEY_ID, KEY_TIME, KEY_STATUS, KEY_LEVEL, KEY_DOCK_STATUS, KEY_DOCK_LEVEL, KEY_SCREEN_STATE },
KEY_TIME + " > ?",
new String[] { String.valueOf(new Date().getTime() - (long)1000 * 60 * 60 * 24 * days) }, null, null, null);
}
public Cursor query(String[] projection, String selection, String[] selectionArgs, String sort) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(DB_TABLE);
String orderBy = TextUtils.isEmpty(sort) ? KEY_TIME : sort;
Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);
return c;
}
public Entry getEntry(long index) {
return null;
}
public static class Entry {
public Date date;
public int status, level, dock_status;
public Integer dock_level;
public boolean screenOff;
public Entry(int status, int level, int dock_status, Integer dock_level, boolean screenOff) {
this.status = status;
this.level = level;
this.dock_status = dock_status;
this.dock_level = dock_level;
this.date = new Date();
this.screenOff = screenOff;
}
}
private static class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);
onCreate(sqLiteDatabase);
}
}
}