diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/KiwixDatabaseTest.java b/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/KiwixDatabaseTest.java index 3b64400dd..0a0af0734 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/KiwixDatabaseTest.java +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/KiwixDatabaseTest.java @@ -70,14 +70,17 @@ public class KiwixDatabaseTest { kiwixDatabase.migrateBookmarksVersion6(); ArrayList bookmarkTitles = new ArrayList<>(); - try (SquidCursor bookmarkCursor = kiwixDatabase.query(Bookmark.class, - Query.selectDistinct(Bookmark.BOOKMARK_TITLE) - .where(Bookmark.ZIM_ID.eq(testId) - .or(Bookmark.ZIM_NAME.eq(""))) - .orderBy(Bookmark.BOOKMARK_TITLE.asc()))) { + try { + SquidCursor bookmarkCursor = kiwixDatabase.query(Bookmark.class, + Query.selectDistinct(Bookmark.BOOKMARK_TITLE) + .where(Bookmark.ZIM_ID.eq(testId) + .or(Bookmark.ZIM_NAME.eq(""))) + .orderBy(Bookmark.BOOKMARK_TITLE.asc())); while (bookmarkCursor.moveToNext()) { bookmarkTitles.add(bookmarkCursor.get(Bookmark.BOOKMARK_TITLE)); } + } catch (Exception exception) { + exception.printStackTrace(); } assertArrayEquals(testBookmarks, bookmarkTitles.toArray()); diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/dao/RecentSearchDaoTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/dao/RecentSearchDaoTest.kt index f78ef91dd..135541ccf 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/dao/RecentSearchDaoTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/data/local/dao/RecentSearchDaoTest.kt @@ -20,7 +20,6 @@ package org.kiwix.kiwixmobile.data.local.dao import androidx.test.ext.junit.runners.AndroidJUnit4 import com.yahoo.squidb.data.AbstractModel import com.yahoo.squidb.data.SquidCursor -import com.yahoo.squidb.sql.Query import io.mockk.every import io.mockk.mockk import io.mockk.verify @@ -38,6 +37,6 @@ class RecentSearchDaoTest { kiwixDatabase.query(any>(), any()) } returns mockk>(relaxed = true) RecentSearchDao(kiwixDatabase).recentSearches - verify { kiwixDatabase.query(any>(), Query.select()) } + verify { kiwixDatabase.query(any>(), any()) } } } diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index c4db2fe27..ff73480f0 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -28,7 +28,7 @@ object Versions { const val com_google_dagger: String = "2.29.1" - const val com_yahoo_squidb: String = "2.0.0" // available: "3.2.3" + const val com_yahoo_squidb: String = "4.0.0-beta.2" // available: "3.2.3" const val com_jakewharton: String = "10.2.3" diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchDao.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchDao.kt index 31a4d9123..66940c76e 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchDao.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchDao.kt @@ -19,7 +19,6 @@ package org.kiwix.kiwixmobile.core.dao import io.objectbox.Box import io.objectbox.kotlin.query -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.map import org.kiwix.kiwixmobile.core.dao.entities.RecentSearchEntity import org.kiwix.kiwixmobile.core.dao.entities.RecentSearchEntity_ @@ -31,7 +30,6 @@ class NewRecentSearchDao @Inject constructor( private val box: Box, private val flowBuilder: FlowBuilder ) { - @OptIn(ExperimentalCoroutinesApi::class) fun recentSearches(zimId: String?) = flowBuilder.buildCallbackFlow( box.query { equal(RecentSearchEntity_.zimId, zimId ?: "") diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/BookmarkEntity.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/BookmarkEntity.kt index 31ef33df7..5f751bdb8 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/BookmarkEntity.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/BookmarkEntity.kt @@ -19,8 +19,8 @@ package org.kiwix.kiwixmobile.core.dao.entities import io.objectbox.annotation.Entity import io.objectbox.annotation.Id -import org.kiwix.kiwixmobile.core.page.bookmark.adapter.BookmarkItem import org.kiwix.kiwixmobile.core.data.local.entity.Bookmark +import org.kiwix.kiwixmobile.core.page.bookmark.adapter.BookmarkItem @Entity data class BookmarkEntity( diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/RecentSearchEntity.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/RecentSearchEntity.kt index e36d84450..55c5719ba 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/RecentSearchEntity.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/entities/RecentSearchEntity.kt @@ -27,7 +27,6 @@ data class RecentSearchEntity( val searchTerm: String, val zimId: String ) { - constructor(recentSearch: RecentSearch) : this( 0, recentSearch.searchString, diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/KiwixDatabase.java b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/KiwixDatabase.java index 5a0c4d43c..7b1f72e24 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/KiwixDatabase.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/KiwixDatabase.java @@ -20,8 +20,11 @@ package org.kiwix.kiwixmobile.core.data.local; import android.content.Context; import android.util.Log; +import androidx.annotation.NonNull; +import com.yahoo.squidb.android.AndroidOpenHelper; +import com.yahoo.squidb.data.ISQLiteDatabase; +import com.yahoo.squidb.data.ISQLiteOpenHelper; import com.yahoo.squidb.data.SquidDatabase; -import com.yahoo.squidb.data.adapter.SQLiteDatabaseWrapper; import com.yahoo.squidb.sql.Table; import java.io.BufferedReader; import java.io.FileNotFoundException; @@ -63,7 +66,7 @@ public class KiwixDatabase extends SquidDatabase { public KiwixDatabase(Context context, NewBookDao bookDao, NewLanguagesDao languagesDao, NewBookmarksDao bookmarksDao, NewRecentSearchDao recentSearchDao) { - super(context); + super(); this.context = context; this.bookDao = bookDao; this.languagesDao = languagesDao; @@ -86,8 +89,14 @@ public class KiwixDatabase extends SquidDatabase { }; } + @NonNull @Override protected ISQLiteOpenHelper createOpenHelper( + @NonNull String databaseName, + @NonNull OpenHelperDelegate delegate, int version) { + return new AndroidOpenHelper(context, databaseName, delegate, version); + } + @Override - protected boolean onUpgrade(SQLiteDatabaseWrapper db, int oldVersion, int newVersion) { + protected boolean onUpgrade(ISQLiteDatabase db, int oldVersion, int newVersion) { Log.e("UPGRADE", "oldversion: " + oldVersion + " newVersion: " + newVersion); switch (oldVersion) { case 1: diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/BookDao.java b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/BookDao.java index f5f8f9dd9..63d0f1754 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/BookDao.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/BookDao.java @@ -58,13 +58,16 @@ public class BookDao { public ArrayList getBooks() { ArrayList books = new ArrayList<>(); - try (SquidCursor bookCursor = kiwixDatabase.query(BookDatabaseEntity.class, - Query.select())) { + try { + SquidCursor bookCursor = kiwixDatabase.query(BookDatabaseEntity.class, + Query.select()); while (bookCursor.moveToNext()) { Book book = new Book(); setBookDetails(book, bookCursor); books.add(book); } + } catch (Exception exception) { + exception.printStackTrace(); } return filterBookResults(books); } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/BookmarksDao.java b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/BookmarksDao.java index 4dd020e65..d3e652546 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/BookmarksDao.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/BookmarksDao.java @@ -42,8 +42,9 @@ public class BookmarksDao { public List getBookmarks() { ArrayList bookmarks = new ArrayList<>(); Query query = Query.select(); - try (SquidCursor squidCursor = kiwixDatabase - .query(Bookmark.class, query.orderBy(Bookmark.BOOKMARK_TITLE.asc()))) { + try { + SquidCursor squidCursor = kiwixDatabase + .query(Bookmark.class, query.orderBy(Bookmark.BOOKMARK_TITLE.asc())); while (squidCursor.moveToNext()) { Bookmark bookmark = new Bookmark(); bookmark.setZimId(squidCursor.get(Bookmark.ZIM_ID)); @@ -52,22 +53,27 @@ public class BookmarksDao { bookmark.setBookmarkUrl(squidCursor.get(Bookmark.BOOKMARK_URL)); bookmarks.add(bookmark); } + } catch (Exception exception) { + exception.printStackTrace(); } return bookmarks; } public void processBookmark(StringOperation operation) { - try (SquidCursor bookmarkCursor = kiwixDatabase.query(Bookmark.class, - Query.select(Bookmark.ID, Bookmark.BOOKMARK_URL))) { + try { + SquidCursor bookmarkCursor = kiwixDatabase.query(Bookmark.class, + Query.select(Bookmark.ROWID, Bookmark.BOOKMARK_URL)); while (bookmarkCursor.moveToNext()) { String url = bookmarkCursor.get(Bookmark.BOOKMARK_URL); url = operation.apply(url); if (url != null) { kiwixDatabase.update(Update.table(Bookmark.TABLE) - .where(Bookmark.ID.eq(bookmarkCursor.get(Bookmark.ID))) + .where(Bookmark.ROWID.eq(bookmarkCursor.get(Bookmark.ROWID))) .set(Bookmark.BOOKMARK_URL, url)); } } + } catch (Exception exception) { + exception.printStackTrace(); } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/NetworkLanguageDao.java b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/NetworkLanguageDao.java index 9367628ca..b5a53d114 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/NetworkLanguageDao.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/NetworkLanguageDao.java @@ -37,14 +37,17 @@ public class NetworkLanguageDao { public ArrayList getFilteredLanguages() { ArrayList result = new ArrayList<>(); - try (SquidCursor languageCursor = mDb.query( - NetworkLanguageDatabaseEntity.class, - Query.select())) { + try { + SquidCursor languageCursor = mDb.query( + NetworkLanguageDatabaseEntity.class, + Query.select()); while (languageCursor.moveToNext()) { String languageCode = languageCursor.get(NetworkLanguageDatabaseEntity.LANGUAGE_I_S_O_3); boolean enabled = languageCursor.get(NetworkLanguageDatabaseEntity.ENABLED); result.add(new Language(languageCode, enabled, 0)); } + } catch (Exception exception) { + exception.printStackTrace(); } return result; } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/RecentSearchDao.java b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/RecentSearchDao.java index 28ff62320..53fc78439 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/RecentSearchDao.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/dao/RecentSearchDao.java @@ -44,11 +44,14 @@ public class RecentSearchDao { */ public List getRecentSearches() { List result = new ArrayList<>(); - try (SquidCursor searchCursor = mDb.query( - RecentSearch.class, Query.select())) { + try { + SquidCursor searchCursor = mDb.query( + RecentSearch.class, Query.select()); while (searchCursor.moveToNext()) { result.add(new RecentSearch(searchCursor)); } + } catch (Exception exception) { + exception.printStackTrace(); } return result; } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/entity/BookmarksSpec.java b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/entity/BookmarksSpec.java index 0ed8f9d47..fbd9fc96c 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/entity/BookmarksSpec.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/entity/BookmarksSpec.java @@ -17,17 +17,16 @@ */ package org.kiwix.kiwixmobile.core.data.local.entity; -import com.yahoo.squidb.annotations.ColumnSpec; import com.yahoo.squidb.annotations.TableModelSpec; +import com.yahoo.squidb.annotations.tables.constraints.NotNull; /** * Squidb spec for saved bookmarks. */ @TableModelSpec(className = "Bookmark", tableName = "Bookmarks") public class BookmarksSpec { - @ColumnSpec(constraints = "NOT NULL") - public String ZimId; - public String ZimName; - public String bookmarkUrl; - public String bookmarkTitle; + @NotNull public String ZimId; + @NotNull public String ZimName; + @NotNull public String bookmarkUrl; + @NotNull public String bookmarkTitle; } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/entity/RecentSearchSpec.java b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/entity/RecentSearchSpec.java index c535ba718..085793c41 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/entity/RecentSearchSpec.java +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/entity/RecentSearchSpec.java @@ -17,18 +17,14 @@ */ package org.kiwix.kiwixmobile.core.data.local.entity; -import com.yahoo.squidb.annotations.ColumnSpec; import com.yahoo.squidb.annotations.TableModelSpec; +import com.yahoo.squidb.annotations.tables.constraints.NotNull; /** * Squidb spec for recent searches. */ @TableModelSpec(className = "RecentSearch", tableName = "recentSearches") public class RecentSearchSpec { - - @ColumnSpec(constraints = "NOT NULL") - public String searchString; - - @ColumnSpec(constraints = "NOT NULL") - public String zimID; + @NotNull public String searchString; + @NotNull String zimID; } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/OpenPage.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/OpenPage.kt index 6eadbc31a..89e7c400c 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/OpenPage.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/page/viewmodel/effects/OpenPage.kt @@ -33,7 +33,7 @@ data class OpenPage( activity as CoreMainActivity activity.popNavigationBackstack() if (page.zimFilePath != zimReaderContainer.zimCanonicalPath) { - activity.openPage(page.url, page.zimFilePath!!) + page.zimFilePath?.let { activity.openPage(page.url, it) } } else { activity.openPage(page.url) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt index f783fbdde..d37317b6a 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt @@ -90,7 +90,10 @@ class SearchViewModel @Inject constructor( recentSearchDao.recentSearches(zimReaderContainer.id), searchOrigin.asFlow() ) { searchTerm, searchResultsWithTerm, recentResults, searchOrigin -> - SearchState(searchTerm, searchResultsWithTerm, recentResults, searchOrigin) + SearchState( + searchTerm, searchResultsWithTerm, + recentResults as List, searchOrigin + ) } .collect { state.value = it } } diff --git a/core/src/test/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchDaoTest.kt b/core/src/test/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchDaoTest.kt index b53f04c9f..da64ca4bb 100644 --- a/core/src/test/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchDaoTest.kt +++ b/core/src/test/java/org/kiwix/kiwixmobile/core/dao/NewRecentSearchDaoTest.kt @@ -50,7 +50,9 @@ internal class NewRecentSearchDaoTest { expectFromRecentSearches(queryResult, zimId) newRecentSearchDao.recentSearches(zimId) .test(this) - .assertValues(queryResult.map { RecentSearchListItem(it.searchTerm) }) + .assertValues( + queryResult.map { RecentSearchListItem(it.searchTerm) } + ) .finish() } @@ -60,7 +62,9 @@ internal class NewRecentSearchDaoTest { expectFromRecentSearches(queryResult, "") newRecentSearchDao.recentSearches(null) .test(this) - .assertValues(queryResult.map { RecentSearchListItem(it.searchTerm) }) + .assertValues( + queryResult.map { RecentSearchListItem(it.searchTerm) } + ) .finish() } @@ -70,7 +74,9 @@ internal class NewRecentSearchDaoTest { expectFromRecentSearches(queryResult, "") newRecentSearchDao.recentSearches("") .test(this) - .assertValues(queryResult.take(1).map { RecentSearchListItem(it.searchTerm) }) + .assertValues( + queryResult.take(1).map { RecentSearchListItem(it.searchTerm) } + ) .finish() } diff --git a/lintConfig.xml b/lintConfig.xml index 1bfd165ce..a4e45d6b5 100644 --- a/lintConfig.xml +++ b/lintConfig.xml @@ -28,10 +28,9 @@ - - + @@ -41,5 +40,4 @@ -