package com.cfap.cfadevicemanager.dbmodels; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.cfap.cfadevicemanager.models.AppTrafficRecord; import com.cfap.cfadevicemanager.models.AppTrafficSnapshot; import com.cfap.cfadevicemanager.models.TrafficSnapshot; import java.util.ArrayList; import java.util.List; /** * Created by PraveenKatha on 29/09/15. */ public class DataTrackerDBHelper extends DatabaseHelper { private static DataTrackerDBHelper mInstance; public DataTrackerDBHelper(Context applicationContext) { super(applicationContext); } public static synchronized DataTrackerDBHelper getInstance(Context context) { if (mInstance == null) { mInstance = new DataTrackerDBHelper(context.getApplicationContext()); } return mInstance; } public void insertAppTrafficRecord(TrafficSnapshot trafficSnapshot) { SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); String day = trafficSnapshot.getDay(); for (AppTrafficSnapshot appTrafficSnapshot : trafficSnapshot.getApps().values()) { ContentValues values = new ContentValues(); values.put(DataTrackerDBModel.COLUMN_NAME_APP_UID, appTrafficSnapshot.getUid()); values.put(DataTrackerDBModel.COLUMN_NAME_APP_NAME, appTrafficSnapshot.getName()); values.put(DataTrackerDBModel.COLUMN_NAME_APP_ICON, appTrafficSnapshot.getIconDrawable()); values.put(DataTrackerDBModel.COLUMN_NAME_APP_MOBILE_DATA, 0); values.put(DataTrackerDBModel.COLUMN_NAME_APP_WIFI_DATA, 0); values.put(DataTrackerDBModel.COLUMN_NAME_APP_RECENT_DATA_STAMP, appTrafficSnapshot.getAppDataStamp()); values.put(DataTrackerDBModel.COLUMN_NAME_DAY, day); long row = db.insert(DataTrackerDBModel.TABLE_NAME, null, values); System.out.println(row); } db.setTransactionSuccessful(); db.endTransaction(); } public void updateAppTrafficRecords(List<AppTrafficRecord> appTrafficRecords, String day, boolean isWifiData) { SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); int rows = 0; for (AppTrafficRecord appTrafficRecord : appTrafficRecords) { ContentValues values = new ContentValues(); if (isWifiData) values.put(DataTrackerDBModel.COLUMN_NAME_APP_WIFI_DATA, appTrafficRecord.getWifiData()); else values.put(DataTrackerDBModel.COLUMN_NAME_APP_MOBILE_DATA, appTrafficRecord.getNetworkData()); values.put(DataTrackerDBModel.COLUMN_NAME_APP_RECENT_DATA_STAMP, appTrafficRecord.getAppDataStamp()); String[] whereArgs = {appTrafficRecord.getDay(), "" + appTrafficRecord.getUid()}; String where = DataTrackerDBModel.COLUMN_NAME_DAY + "=? AND " + DataTrackerDBModel.COLUMN_NAME_APP_UID + "=?"; rows += db.update(DataTrackerDBModel.TABLE_NAME, values, where, whereArgs); } System.out.println("Apps Updated records "+rows); db.setTransactionSuccessful(); db.endTransaction(); } public boolean isSnapshotExistForDay(String day) { SQLiteDatabase db = getReadableDatabase(); String palsQuery = "SELECT * FROM " + DataTrackerDBModel.TABLE_NAME + " WHERE " + DataTrackerDBModel.COLUMN_NAME_DAY + " = ?"; Cursor cr = db.rawQuery(palsQuery, new String[]{day}); if (cr == null) return false; boolean b = cr.getCount() > 0; cr.close(); return b; } public ArrayList<AppTrafficRecord> getAllAppsTrafficToday(String day) { ArrayList<AppTrafficRecord> appTrafficRecords = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM " + DataTrackerDBModel.TABLE_NAME + " WHERE " + DataTrackerDBModel.COLUMN_NAME_DAY + " = ?", new String[]{day}); if (cursor != null && cursor.moveToFirst()) { System.out.println("Apps records size " + cursor.getCount()); do { appTrafficRecords.add(getAppTrafficRecordFromCursor(cursor)); } while (cursor.moveToNext()); cursor.close(); } return appTrafficRecords; } public ArrayList<AppTrafficRecord> getAllAppsTrafficTodayUI(String day) { ArrayList<AppTrafficRecord> appTrafficRecords = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM " + DataTrackerDBModel.TABLE_NAME + " WHERE " + DataTrackerDBModel.COLUMN_NAME_DAY + " = ?", new String[]{day}); AppTrafficRecord appTrafficRecord; if (cursor != null && cursor.moveToFirst()) { do { appTrafficRecord = getAppTrafficRecordFromCursor(cursor); if (appTrafficRecord.getNetworkData() > 0 || appTrafficRecord.getWifiData() > 0) appTrafficRecords.add(appTrafficRecord); } while (cursor.moveToNext()); cursor.close(); } System.out.println("Apps records size " + appTrafficRecords.size()); return appTrafficRecords; } private AppTrafficRecord getAppTrafficRecordFromCursor(Cursor cr) { AppTrafficRecord appTrafficRecord = new AppTrafficRecord(); appTrafficRecord.setName(cr.getString(cr.getColumnIndex(DataTrackerDBModel.COLUMN_NAME_APP_NAME))); appTrafficRecord.setDay(cr.getString(cr.getColumnIndex(DataTrackerDBModel.COLUMN_NAME_DAY))); appTrafficRecord.setNetworkData(cr.getLong(cr.getColumnIndex(DataTrackerDBModel.COLUMN_NAME_APP_MOBILE_DATA))); appTrafficRecord.setWifiData(cr.getLong(cr.getColumnIndex(DataTrackerDBModel.COLUMN_NAME_APP_WIFI_DATA))); appTrafficRecord.setUid(cr.getInt(cr.getColumnIndex(DataTrackerDBModel.COLUMN_NAME_APP_UID))); appTrafficRecord.setAppDataStamp(cr.getLong(cr.getColumnIndex(DataTrackerDBModel.COLUMN_NAME_APP_RECENT_DATA_STAMP))); return appTrafficRecord; } }