Files
app_Settings/src/com/android/settings/homepage/contextualcards/CardDatabaseHelper.java
Yi-Ling Chuang deea015b65 Implement new dismissal behaviour of contextual card
Currently, if a contextual card gets dismissed, it will be gone forever.
After this change, all cards being dismissed can be shown again after a
certain amount of time(e.g one day). In order to calculate the amount of
time, CARD_DISMISSED column is replaced with DISMISSED_TIMESTAMP. Once a
card gets dismissed, a timestamp will be recorded for a corresponding
card.

In this change, some methods are moved from CardDatabaseHelper to
ContextualCardFeatureProvider. So OEMs could replace the providers with
their own ones to get cards and have different dismissal behaviours.

Bug: 143055685
Test: rototests
Change-Id: I00ace98991cabcbfcae4fc47a44e9448683d680c
2020-02-20 18:45:14 +08:00

128 lines
3.8 KiB
Java

/*
* Copyright (C) 2018 The Android Open Source Project
*
* 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.android.settings.homepage.contextualcards;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
/**
* Defines the schema for the Homepage Cards database.
*/
public class CardDatabaseHelper extends SQLiteOpenHelper {
private static final String TAG = "CardDatabaseHelper";
private static final String DATABASE_NAME = "homepage_cards.db";
private static final int DATABASE_VERSION = 7;
public static final String CARD_TABLE = "cards";
public interface CardColumns {
/**
* Primary key. Name of the card.
*/
String NAME = "name";
/**
* Type of the card.
*/
String TYPE = "type";
/**
* Score of the card. Higher numbers have higher priorities.
*/
String SCORE = "score";
/**
* URI of the slice card.
*/
String SLICE_URI = "slice_uri";
/**
* Category of the card.
*/
String CATEGORY = "category";
/**
* Package name for all card candidates.
*/
String PACKAGE_NAME = "package_name";
/**
* Application version of the package.
*/
String APP_VERSION = "app_version";
/**
* Timestamp of card being dismissed.
*/
String DISMISSED_TIMESTAMP = "dismissed_timestamp";
}
private static final String CREATE_CARD_TABLE =
"CREATE TABLE "
+ CARD_TABLE
+ "("
+ CardColumns.NAME
+ " TEXT NOT NULL PRIMARY KEY, "
+ CardColumns.TYPE
+ " INTEGER NOT NULL, "
+ CardColumns.SCORE
+ " DOUBLE NOT NULL, "
+ CardColumns.SLICE_URI
+ " TEXT, "
+ CardColumns.CATEGORY
+ " INTEGER DEFAULT 0, "
+ CardColumns.PACKAGE_NAME
+ " TEXT NOT NULL, "
+ CardColumns.APP_VERSION
+ " INTEGER NOT NULL, "
+ CardColumns.DISMISSED_TIMESTAMP
+ " INTEGER"
+ ");";
public CardDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_CARD_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < newVersion) {
Log.d(TAG, "Reconstructing DB from " + oldVersion + " to " + newVersion);
db.execSQL("DROP TABLE IF EXISTS " + CARD_TABLE);
onCreate(db);
}
}
@VisibleForTesting
static CardDatabaseHelper sCardDatabaseHelper;
public static synchronized CardDatabaseHelper getInstance(Context context) {
if (sCardDatabaseHelper == null) {
sCardDatabaseHelper = new CardDatabaseHelper(context.getApplicationContext());
}
return sCardDatabaseHelper;
}
}