/* * Copyright (C) 2016 Tielei Zhang (zhangtielei.com). * * 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 com.zhangtielei.demos.badge_number.datastore; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import com.zhangtielei.demos.badge_number.model.BadgeNumber; /** * badge number的数据访问层. */ public class BadgeNumberDAO { private static final String TAG = "BadgeNumberDAO"; private MyDatabaseOpenHelper dbHelper; public BadgeNumberDAO() { dbHelper = new MyDatabaseOpenHelper(); } public boolean setBadgeNumber(BadgeNumber badgeNumber) { SQLiteDatabase db = null; Cursor cursor = null; try { db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("type", badgeNumber.getType()); values.put("count", badgeNumber.getCount()); values.put("display_mode", badgeNumber.getDisplayMode()); //插入新的或替换旧的值 db.insertWithOnConflict(MyDatabaseOpenHelper.BADGE_NUMBER_TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE); return true; } catch (Exception e) { Log.e(TAG, "", e); } finally { if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return false; } public boolean addBadgeNumber(BadgeNumber badgeNumber) { SQLiteDatabase db = null; Cursor cursor = null; try { db = dbHelper.getWritableDatabase(); db.beginTransaction(); cursor = db.query(MyDatabaseOpenHelper.BADGE_NUMBER_TABLE_NAME, new String[]{"count"}, "type = ?", new String[] {String.valueOf(badgeNumber.getType())}, null, null, null); int oldCount = 0; if (cursor.moveToFirst()) { oldCount = cursor.getInt(cursor.getColumnIndex("count")); } int newCount = oldCount + badgeNumber.getCount(); ContentValues values = new ContentValues(); values.put("type", badgeNumber.getType()); values.put("count", newCount); values.put("display_mode", badgeNumber.getDisplayMode()); //插入新的或替换旧的值 db.insertWithOnConflict(MyDatabaseOpenHelper.BADGE_NUMBER_TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE); db.setTransactionSuccessful(); return true; } catch (Exception e) { Log.e(TAG, "", e); } finally { if (db != null) { db.endTransaction(); } if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return false; } public boolean clearBadgeNumber(int type) { SQLiteDatabase db = null; Cursor cursor = null; try { db = dbHelper.getWritableDatabase(); db.delete(MyDatabaseOpenHelper.BADGE_NUMBER_TABLE_NAME, "type = ?", new String[] {String.valueOf(type)}); return true; } catch (Exception e) { Log.e(TAG, "", e); } finally { if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return false; } /** * 获取指定类型区间内指定显示方式的badge number总数。 * @param typeMin 指定类型区间的最小值;取聊天的badge number时,请传0。 * @param typeMax 指定类型区间的最大值;取聊天的badge number时,请传0。 * @param displayMode 指定的显示方式. 可选值为:{@link BadgeNumber#DISPLAY_MODE_ON_PARENT_NUMBER}, {@link BadgeNumber#DISPLAY_MODE_ON_PARENT_DOT} * @return */ public int getBadgeNumber(int typeMin, int typeMax, int displayMode) { SQLiteDatabase db = null; Cursor cursor = null; try { db = dbHelper.getReadableDatabase(); cursor = db.query(MyDatabaseOpenHelper.BADGE_NUMBER_TABLE_NAME, new String[] {"sum(count)"}, "type >= ? AND type <= ? AND display_mode = ?", new String[] {String.valueOf(typeMin), String.valueOf(typeMax), String.valueOf(displayMode)}, null, null, null); if (cursor.moveToFirst()) { int sumCount = cursor.getInt(0); return sumCount; } } catch (Exception e) { Log.e(TAG, "", e); } finally { if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return 0; } /** * 获取指定类型的badge number * @param type badge number类型 * @return */ public int getBadgeNumber(int type) { SQLiteDatabase db = null; Cursor cursor = null; try { db = dbHelper.getReadableDatabase(); cursor = db.query(MyDatabaseOpenHelper.BADGE_NUMBER_TABLE_NAME, new String[] {"count"}, "type = ?", new String[] {String.valueOf(type)}, null, null, null); if (cursor.moveToFirst()) { int count = cursor.getInt(cursor.getColumnIndex("count")); return count; } } catch (Exception e) { Log.e(TAG, "", e); } finally { if (cursor != null) { cursor.close(); } if (db != null) { db.close(); } } return 0; } }