From c9989428959d6250225f6cb3b5f1d18ddd7cacba Mon Sep 17 00:00:00 2001 From: HeCodes2Much Date: Sun, 26 May 2024 07:58:55 +0100 Subject: [PATCH] Fix: Fixed a few database bugs --- .../ktx/FragmentExtensions.kt | 9 +++--- .../droidworksstudio/ktx/ViewExtensions.kt | 8 ++--- .../launcher/data/AppDatabase.kt | 2 +- .../launcher/data/dao/AppInfoDAO.kt | 30 ++++++++++++------- .../launcher/di/DatabaseModule.kt | 23 +++++--------- .../launcher/ui/settings/SettingsFragment.kt | 3 +- 6 files changed, 37 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/github/droidworksstudio/ktx/FragmentExtensions.kt b/app/src/main/java/com/github/droidworksstudio/ktx/FragmentExtensions.kt index dca99bc..353334e 100644 --- a/app/src/main/java/com/github/droidworksstudio/ktx/FragmentExtensions.kt +++ b/app/src/main/java/com/github/droidworksstudio/ktx/FragmentExtensions.kt @@ -7,11 +7,10 @@ import android.widget.Toast import androidx.fragment.app.Fragment fun Fragment.showKeyboard() { - val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager - view?.let { v -> - v.requestFocus() - imm?.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT) - } + val view = view?.findFocus() ?: return + val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + @Suppress("DEPRECATION") + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY) } fun Fragment.hideKeyboard() { diff --git a/app/src/main/java/com/github/droidworksstudio/ktx/ViewExtensions.kt b/app/src/main/java/com/github/droidworksstudio/ktx/ViewExtensions.kt index e94d96a..cf82c1b 100644 --- a/app/src/main/java/com/github/droidworksstudio/ktx/ViewExtensions.kt +++ b/app/src/main/java/com/github/droidworksstudio/ktx/ViewExtensions.kt @@ -54,10 +54,10 @@ inline fun EditText.setHideKeyboardEditorActionListener(crossinline onAction: (I } fun View.showKeyboard() { - val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager - this.let { v -> - v.requestFocus() - imm?.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT) + if (this.requestFocus()) { + val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + @Suppress("DEPRECATION") + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY) } } diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/data/AppDatabase.kt b/app/src/main/java/com/github/droidworksstudio/launcher/data/AppDatabase.kt index 472efa2..ee748f0 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/data/AppDatabase.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/data/AppDatabase.kt @@ -6,7 +6,7 @@ import androidx.room.RoomDatabase import com.github.droidworksstudio.launcher.data.dao.AppInfoDAO import com.github.droidworksstudio.launcher.data.entities.AppInfo -@Database(entities = [AppInfo::class], version = 1) +@Database(entities = [AppInfo::class], version = 1, exportSchema = false) abstract class AppDatabase : RoomDatabase() { abstract fun appDao(): AppInfoDAO } \ No newline at end of file diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/data/dao/AppInfoDAO.kt b/app/src/main/java/com/github/droidworksstudio/launcher/data/dao/AppInfoDAO.kt index 0423b23..f0a0753 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/data/dao/AppInfoDAO.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/data/dao/AppInfoDAO.kt @@ -1,6 +1,5 @@ package com.github.droidworksstudio.launcher.data.dao - import android.util.Log import androidx.room.* import com.github.droidworksstudio.launcher.data.entities.AppInfo @@ -10,20 +9,23 @@ import kotlinx.coroutines.flow.Flow interface AppInfoDAO { @Insert(onConflict = OnConflictStrategy.IGNORE) suspend fun insert(app: AppInfo) + @Insert(onConflict = OnConflictStrategy.IGNORE) suspend fun insertAll(apps: List) + @Update suspend fun update(app: AppInfo) + @Delete suspend fun delete(app: AppInfo) - @Query("SELECT * FROM app ORDER BY app_name ASC") + @Query("SELECT * FROM app ORDER BY app_name COLLATE NOCASE ASC") fun getAllApps(): List - - @Query("SELECT * FROM app ORDER BY app_name ASC") + + @Query("SELECT * FROM app ORDER BY app_name COLLATE NOCASE ASC") fun getAllAppsFlow(): Flow> - @Query("SELECT * FROM app WHERE is_hidden = 0 ORDER BY app_name ASC") + @Query("SELECT * FROM app WHERE is_hidden = 0 ORDER BY app_name COLLATE NOCASE ASC") fun getDrawAppsFlow(): Flow> @Query("SELECT * FROM app WHERE is_favorite = 1 ORDER BY app_order ASC, id ASC") @@ -35,11 +37,11 @@ interface AppInfoDAO { @Query("SELECT * FROM app WHERE is_lock = 1 ORDER BY app_order ASC") fun getLockAppsFlow(): Flow> - @Query("SELECT * FROM app WHERE app_name LIKE :query AND is_hidden = 0") + @Query("SELECT * FROM app WHERE app_name LIKE :query COLLATE NOCASE AND is_hidden = 0") fun searchApps(query: String?): Flow> @Update - fun updateAppInfo(appInfo: AppInfo) + suspend fun updateAppInfo(appInfo: AppInfo) @Update suspend fun updateAppOrder(appInfo: List) @@ -48,21 +50,21 @@ interface AppInfoDAO { suspend fun updateAppName(appInfo: AppInfo, newAppName: String) { appInfo.appName = newAppName update(appInfo) - Log.d("Tag", "${appInfo.appName} : Repo Order: ${appInfo.appOrder}") + logUpdate("App name updated", appInfo) } @Transaction suspend fun updateAppHidden(appInfo: AppInfo, appHidden: Boolean) { appInfo.hidden = appHidden update(appInfo) - Log.d("Tag", "${appInfo.appName} : Repo Order: ${appInfo.hidden}") + logUpdate("App hidden status updated", appInfo) } @Transaction suspend fun updateLockApp(appInfo: AppInfo, appLock: Boolean) { appInfo.lock = appLock update(appInfo) - Log.d("Tag", "${appInfo.appName} : Repo Order: ${appInfo.lock}") + logUpdate("App lock status updated", appInfo) } @Query("SELECT MAX(`app_order`) FROM app") @@ -73,4 +75,12 @@ interface AppInfoDAO { @Query("SELECT * FROM app WHERE package_name = :packageName") suspend fun getAppByPackageName(packageName: String): AppInfo? + + private fun logUpdate(message: String, appInfo: AppInfo) { + // You can replace this with a logging library like Timber for more advanced logging capabilities. + Log.d( + "AppInfoDAO", + "$message: ${appInfo.appName} (Order: ${appInfo.appOrder}, Hidden: ${appInfo.hidden}, Lock: ${appInfo.lock})" + ) + } } diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/di/DatabaseModule.kt b/app/src/main/java/com/github/droidworksstudio/launcher/di/DatabaseModule.kt index 98e77bd..6f93609 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/di/DatabaseModule.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/di/DatabaseModule.kt @@ -11,15 +11,15 @@ import com.github.droidworksstudio.launcher.helper.PreferenceHelper import dagger.Module import dagger.Provides import dagger.hilt.InstallIn -import dagger.hilt.android.components.ViewModelComponent import dagger.hilt.android.qualifiers.ApplicationContext -import dagger.hilt.android.scopes.ViewModelScoped +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton @Module -@InstallIn(ViewModelComponent::class) +@InstallIn(SingletonComponent::class) object DatabaseModule { @Provides - @ViewModelScoped + @Singleton fun provideLocalDatabase( @ApplicationContext context: Context ): AppDatabase = @@ -30,36 +30,27 @@ object DatabaseModule { ).build() @Provides - @ViewModelScoped + @Singleton fun provideAppDao(appDatabase: AppDatabase): AppInfoDAO = appDatabase.appDao() @Provides - @ViewModelScoped fun providePackageManager(@ApplicationContext context: Context): PackageManager { return context.packageManager } @Provides - @ViewModelScoped + @Singleton fun providePreferenceHelper(@ApplicationContext context: Context): PreferenceHelper { return PreferenceHelper(context) } @Provides - @ViewModelScoped - fun provideContext(@ApplicationContext context: Context): Context { - return context - } - - @Provides - @ViewModelScoped fun provideAppHelper(): AppHelper { return AppHelper() } @Provides - @ViewModelScoped fun provideBottomDialogHelper(): BottomDialogHelper { return BottomDialogHelper() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsFragment.kt b/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsFragment.kt index 59d4424..922bf9e 100644 --- a/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/github/droidworksstudio/launcher/ui/settings/SettingsFragment.kt @@ -72,8 +72,7 @@ class SettingsFragment : Fragment(), val packageInfo = requireContext().packageManager.getPackageInfo(requireContext().packageName, 0) - binding.versionInfo.text = getString( - R.string.settings_version, + binding.versionInfo.text = getString(R.string.settings_version).format( getString(R.string.app_name), packageInfo.versionName )