From e3f15002eb14fb854645ecaf63631b9f6e80e5f5 Mon Sep 17 00:00:00 2001 From: Zoey Chen Date: Tue, 25 Oct 2022 03:33:46 +0000 Subject: [PATCH] [Settings] Do not creat multiple database Bug: 254405469 Test: manual Change-Id: Iad53adec79d2207cc2892029c849074b31c6ad6d --- .../dataservice/MobileNetworkDatabase.java | 23 ++++++++++++++----- .../dataservice/SubscriptionInfoDao.java | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/MobileNetworkDatabase.java b/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/MobileNetworkDatabase.java index c1ee7ad647c61..ca457b04448d6 100644 --- a/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/MobileNetworkDatabase.java +++ b/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/MobileNetworkDatabase.java @@ -20,6 +20,7 @@ import android.content.Context; import android.util.Log; import java.util.List; +import java.util.Objects; import androidx.lifecycle.LiveData; import androidx.room.Database; @@ -39,17 +40,27 @@ public abstract class MobileNetworkDatabase extends RoomDatabase { public abstract MobileNetworkInfoDao mMobileNetworkInfoDao(); + private static MobileNetworkDatabase sInstance; + private static final Object sLOCK = new Object(); + + /** * Create the MobileNetworkDatabase. * * @param context The context. * @return The MobileNetworkDatabase. */ - public static MobileNetworkDatabase createDatabase(Context context) { - return Room.inMemoryDatabaseBuilder(context, MobileNetworkDatabase.class) - .fallbackToDestructiveMigration() - .enableMultiInstanceInvalidation() - .build(); + public static MobileNetworkDatabase getInstance(Context context) { + synchronized (sLOCK) { + if (Objects.isNull(sInstance)) { + Log.d(TAG, "createDatabase."); + sInstance = Room.inMemoryDatabaseBuilder(context, MobileNetworkDatabase.class) + .fallbackToDestructiveMigration() + .enableMultiInstanceInvalidation() + .build(); + } + } + return sInstance; } /** @@ -93,7 +104,7 @@ public abstract class MobileNetworkDatabase extends RoomDatabase { * Query the subscription info by the subscription ID from the SubscriptionInfoEntity * table. */ - public LiveData querySubInfoById(String id) { + public SubscriptionInfoEntity querySubInfoById(String id) { return mSubscriptionInfoDao().querySubInfoById(id); } diff --git a/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/SubscriptionInfoDao.java b/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/SubscriptionInfoDao.java index 45966376ea8ad..e835125b9b811 100644 --- a/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/SubscriptionInfoDao.java +++ b/packages/SettingsLib/src/com/android/settingslib/mobile/dataservice/SubscriptionInfoDao.java @@ -37,7 +37,7 @@ public interface SubscriptionInfoDao { @Query("SELECT * FROM " + DataServiceUtils.SubscriptionInfoData.TABLE_NAME + " WHERE " + DataServiceUtils.SubscriptionInfoData.COLUMN_ID + " = :subId") - LiveData querySubInfoById(String subId); + SubscriptionInfoEntity querySubInfoById(String subId); @Query("SELECT * FROM " + DataServiceUtils.SubscriptionInfoData.TABLE_NAME + " WHERE " + DataServiceUtils.SubscriptionInfoData.COLUMN_IS_ACTIVE_SUBSCRIPTION_ID