| /* |
| * Copyright (C) 2022 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.ondevicepersonalization.services.data; |
| |
| import android.content.Context; |
| import android.database.sqlite.SQLiteDatabase; |
| import android.database.sqlite.SQLiteOpenHelper; |
| import android.util.Log; |
| |
| import com.android.internal.annotations.VisibleForTesting; |
| import com.android.ondevicepersonalization.services.data.user.UserDataTables; |
| |
| /** |
| * Helper to manage the OnDevicePersonalization database. |
| */ |
| public class OnDevicePersonalizationDbHelper extends SQLiteOpenHelper { |
| |
| private static final String TAG = "OnDevicePersonalizationDbHelper"; |
| |
| private static final int DATABASE_VERSION = 1; |
| private static final String DATABASE_NAME = "ondevicepersonalization.db"; |
| |
| private static OnDevicePersonalizationDbHelper sSingleton = null; |
| |
| private OnDevicePersonalizationDbHelper(Context context, String dbName) { |
| super(context, dbName, null, DATABASE_VERSION); |
| } |
| |
| /** Returns an instance of the OnDevicePersonalizationDbHelper given a context. */ |
| public static OnDevicePersonalizationDbHelper getInstance(Context context) { |
| synchronized (OnDevicePersonalizationDbHelper.class) { |
| if (sSingleton == null) { |
| sSingleton = new OnDevicePersonalizationDbHelper(context, DATABASE_NAME); |
| } |
| return sSingleton; |
| } |
| } |
| |
| /** |
| * Returns an instance of the OnDevicePersonalizationDbHelper given a context. This is used |
| * for testing only. |
| */ |
| @VisibleForTesting |
| public static OnDevicePersonalizationDbHelper getInstanceForTest(Context context) { |
| synchronized (OnDevicePersonalizationDbHelper.class) { |
| if (sSingleton == null) { |
| // Use null database name to make it in-memory |
| sSingleton = new OnDevicePersonalizationDbHelper(context, null); |
| } |
| return sSingleton; |
| } |
| } |
| |
| @Override |
| public void onCreate(SQLiteDatabase db) { |
| db.execSQL(VendorSettingsContract.VendorSettingsEntry.CREATE_TABLE_STATEMENT); |
| |
| // User data tables and indexes. |
| db.execSQL(UserDataTables.LocationHistory.CREATE_TABLE_STATEMENT); |
| db.execSQL(UserDataTables.LocationHistory.CREATE_INDEXES_STATEMENT); |
| db.execSQL(UserDataTables.AppUsageHistory.CREATE_TABLE_STATEMENT); |
| db.execSQL(UserDataTables.AppUsageHistory.CREATE_STARTING_TIME_SEC_INDEX_STATEMENT); |
| db.execSQL(UserDataTables.AppUsageHistory.CREATE_ENDING_TIME_SEC_INDEX_STATEMENT); |
| db.execSQL(UserDataTables.AppUsageHistory.CREATE_TOTAL_TIME_USED_SEC_INDEX_STATEMENT); |
| } |
| |
| @Override |
| public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { |
| // TODO: handle upgrade when the db schema is changed. |
| Log.d(TAG, "DB upgrade from " + oldVersion + " to " + newVersion); |
| throw new UnsupportedOperationException( |
| "Database upgrade for OnDevicePersonalization is unsupported"); |
| } |
| } |