1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.multiuser.widget.data
18 
19 import android.content.Context
20 import androidx.room.Database
21 import androidx.room.Room
22 import androidx.room.RoomDatabase
23 import com.android.multiuser.widget.data.model.User
24 
25 @Database(
26     entities = [User::class],
27     version = 1,
28     exportSchema = false)
29 abstract class UsersDatabase : RoomDatabase() {
30 
31     // This is how the database exposes DAOs.
getUserDaonull32     abstract fun getUserDao(): UserDao
33 
34     companion object {
35         // Singleton prevents multiple instances of database opening at the same time.
36         @Volatile
37         private var INSTANCE: UsersDatabase? = null
38 
39         fun getDatabase(context: Context): UsersDatabase {
40             if(INSTANCE == null) {
41                 // temporary instance that will be populated with initial data
42                 val instance = Room.databaseBuilder(
43                     context.applicationContext,
44                     UsersDatabase::class.java,
45                     "multiuser_widget_database"
46                 ).build()
47                 populateWithInitialData(context, instance.getUserDao())
48                 INSTANCE = instance
49             }
50             return INSTANCE as UsersDatabase
51         }
52     }
53 }
54