Resolve conflicts and attach the commons.db with common_room.db during the migration to persist the data

This commit is contained in:
Saifuddin 2025-02-23 12:46:11 +05:30
parent 55fc6352f8
commit 17043a1064
6 changed files with 64 additions and 2447 deletions

View file

@ -95,17 +95,17 @@ class BookmarkLocationsFragment : DaggerFragment() {
val areAllGranted = result.values.all { it }
if (areAllGranted) {
contributionController.locationPermissionCallback.onLocationPermissionGranted()
contributionController.locationPermissionCallback?.onLocationPermissionGranted()
} else {
if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
contributionController.handleShowRationaleFlowCameraLocation(
activity,
requireActivity(),
inAppCameraLocationPermissionLauncher,
cameraPickLauncherForResult
)
} else {
contributionController.locationPermissionCallback
.onLocationPermissionDenied(
?.onLocationPermissionDenied(
getString(R.string.in_app_camera_location_permission_denied)
)
}

View file

@ -37,6 +37,7 @@ import fr.free.nrw.commons.wikidata.WikidataEditListenerImpl
import io.reactivex.Scheduler
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import timber.log.Timber
import java.util.Objects
import javax.inject.Named
import javax.inject.Singleton
@ -272,6 +273,8 @@ open class CommonsApplicationModule(private val applicationContext: Context) {
)
"""
)
db.execSQL("ATTACH DATABASE '/data/user/0/fr.free.nrw.commons.beta/databases/commons.db' AS oldDb")
db.execSQL("""
INSERT INTO bookmarks_locations (
location_name, location_language, location_description, location_category,
@ -284,10 +287,11 @@ open class CommonsApplicationModule(private val applicationContext: Context) {
location_label_text, location_label_icon, location_lat, location_long,
location_image_url, location_wikipedia_link, location_wikidata_link,
location_commons_link, location_pic, location_exists
FROM bookmarksLocations
FROM oldDb.bookmarksLocations
""")
db.execSQL("DROP TABLE IF EXISTS bookmarkLocations")
db.execSQL("DETACH DATABASE oldDb")
}
}
}

View file

@ -5,6 +5,7 @@ import androidx.lifecycle.LifecycleCoroutineScope
import fr.free.nrw.commons.R
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao
import kotlinx.coroutines.launch
import timber.log.Timber
object NearbyUtil {
@ -16,7 +17,7 @@ object NearbyUtil {
) {
scope?.launch {
val isBookmarked = bookmarksLocationsDao.findBookmarkLocation(name)
Log.d("isBookmarked", isBookmarked.toString())
Timber.i("isBookmarked: $isBookmarked")
if (isBookmarked) {
bottomSheetAdapter.updateBookmarkIcon(R.drawable.ic_round_star_filled_24px)
} else {

View file

@ -75,6 +75,7 @@ import fr.free.nrw.commons.nearby.MarkerPlaceGroup
import fr.free.nrw.commons.nearby.NearbyController
import fr.free.nrw.commons.nearby.NearbyFilterSearchRecyclerViewAdapter
import fr.free.nrw.commons.nearby.NearbyFilterState
import fr.free.nrw.commons.nearby.NearbyUtil
import fr.free.nrw.commons.nearby.Place
import fr.free.nrw.commons.nearby.PlacesRepository
import fr.free.nrw.commons.nearby.WikidataFeedback
@ -638,21 +639,23 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
private fun initRvNearbyList() {
binding!!.bottomSheetNearby.rvNearbyList.layoutManager = LinearLayoutManager(context)
adapter = PlaceAdapter(
bookmarkLocationDao!!,
{ place: Place ->
bookmarkLocationsDao = bookmarkLocationDao,
scope = scope,
onPlaceClicked = { place: Place ->
moveCameraToPosition(
GeoPoint(place.location.latitude, place.location.longitude)
GeoPoint(
place.location.latitude,
place.location.longitude
)
)
Unit
},
{ place: Place?, isBookmarked: Boolean? ->
presenter!!.toggleBookmarkedStatus(place)
Unit
onBookmarkClicked = { place: Place?, _: Boolean? ->
presenter!!.toggleBookmarkedStatus(place, scope)
},
commonPlaceClickActions!!,
inAppCameraLocationPermissionLauncher,
galleryPickLauncherForResult,
cameraPickLauncherForResult
commonPlaceClickActions = commonPlaceClickActions,
inAppCameraLocationPermissionLauncher = inAppCameraLocationPermissionLauncher,
galleryPickLauncherForResult = galleryPickLauncherForResult,
cameraPickLauncherForResult = cameraPickLauncherForResult
)
binding!!.bottomSheetNearby.rvNearbyList.adapter = adapter
}
@ -2249,34 +2252,34 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
// TODO: Decide button text for fitting in the screen
(dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem(
fr.free.nrw.commons.R.drawable.ic_round_star_border_24px,
R.drawable.ic_round_star_border_24px,
""
)
)
(dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem(
fr.free.nrw.commons.R.drawable.ic_directions_black_24dp,
R.drawable.ic_directions_black_24dp,
resources.getString(fr.free.nrw.commons.R.string.nearby_directions)
)
)
if (place.hasWikidataLink()) {
(dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem(
fr.free.nrw.commons.R.drawable.ic_wikidata_logo_24dp,
R.drawable.ic_wikidata_logo_24dp,
resources.getString(fr.free.nrw.commons.R.string.nearby_wikidata)
)
)
}
(dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem(
fr.free.nrw.commons.R.drawable.ic_feedback_black_24dp,
R.drawable.ic_feedback_black_24dp,
resources.getString(fr.free.nrw.commons.R.string.nearby_wikitalk)
)
)
if (place.hasWikipediaLink()) {
(dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem(
fr.free.nrw.commons.R.drawable.ic_wikipedia_logo_24dp,
R.drawable.ic_wikipedia_logo_24dp,
resources.getString(fr.free.nrw.commons.R.string.nearby_wikipedia)
)
)
@ -2284,7 +2287,7 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
if (selectedPlace!!.hasCommonsLink()) {
(dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem(
fr.free.nrw.commons.R.drawable.ic_commons_icon_vector,
R.drawable.ic_commons_icon_vector,
resources.getString(fr.free.nrw.commons.R.string.nearby_commons)
)
)
@ -2363,12 +2366,16 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
}
private fun updateBookmarkButtonImage(place: Place) {
val bookmarkIcon = if (bookmarkLocationDao!!.findBookmarkLocation(place)) {
fr.free.nrw.commons.R.drawable.ic_round_star_filled_24px
} else {
fr.free.nrw.commons.R.drawable.ic_round_star_border_24px
}
bottomSheetAdapter!!.updateBookmarkIcon(bookmarkIcon)
NearbyUtil.getBookmarkLocationExists(
bookmarkLocationDao,
place.getName(),
scope,
bottomSheetAdapter!!
)
}
private fun toggleBookmarkButtonImage() {
bottomSheetAdapter?.toggleBookmarkIcon()
}
override fun onAttach(context: Context) {
@ -2546,26 +2553,31 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
override fun onBottomSheetItemClick(view: View?, position: Int) {
val item = dataList?.get(position) ?: return // Null check for dataList
when (item.imageResourceId) {
fr.free.nrw.commons.R.drawable.ic_round_star_border_24px,
fr.free.nrw.commons.R.drawable.ic_round_star_filled_24px -> {
presenter?.toggleBookmarkedStatus(selectedPlace)
R.drawable.ic_round_star_border_24px -> {
presenter?.toggleBookmarkedStatus(selectedPlace, scope)
toggleBookmarkButtonImage()
}
R.drawable.ic_round_star_filled_24px -> {
presenter?.toggleBookmarkedStatus(selectedPlace, scope)
toggleBookmarkButtonImage()
selectedPlace?.let { updateBookmarkButtonImage(it) }
}
fr.free.nrw.commons.R.drawable.ic_directions_black_24dp -> {
R.drawable.ic_directions_black_24dp -> {
selectedPlace?.let {
Utils.handleGeoCoordinates(this.context, it.getLocation())
binding?.map?.zoomLevelDouble ?: 0.0
}
}
fr.free.nrw.commons.R.drawable.ic_wikidata_logo_24dp -> {
R.drawable.ic_wikidata_logo_24dp -> {
selectedPlace?.siteLinks?.wikidataLink?.let {
Utils.handleWebUrl(this.context, it)
}
}
fr.free.nrw.commons.R.drawable.ic_feedback_black_24dp -> {
R.drawable.ic_feedback_black_24dp -> {
selectedPlace?.let {
val intent = Intent(this.context, WikidataFeedback::class.java).apply {
putExtra("lat", it.location.latitude)
@ -2577,13 +2589,13 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
}
}
fr.free.nrw.commons.R.drawable.ic_wikipedia_logo_24dp -> {
R.drawable.ic_wikipedia_logo_24dp -> {
selectedPlace?.siteLinks?.wikipediaLink?.let {
Utils.handleWebUrl(this.context, it)
}
}
fr.free.nrw.commons.R.drawable.ic_commons_icon_vector -> {
R.drawable.ic_commons_icon_vector -> {
selectedPlace?.siteLinks?.commonsLink?.let {
Utils.handleWebUrl(this.context, it)
}
@ -2597,13 +2609,13 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
override fun onBottomSheetItemLongClick(view: View?, position: Int) {
val item = dataList!![position]
val message = when (item.imageResourceId) {
fr.free.nrw.commons.R.drawable.ic_round_star_border_24px -> getString(fr.free.nrw.commons.R.string.menu_bookmark)
fr.free.nrw.commons.R.drawable.ic_round_star_filled_24px -> getString(fr.free.nrw.commons.R.string.menu_bookmark)
fr.free.nrw.commons.R.drawable.ic_directions_black_24dp -> getString(fr.free.nrw.commons.R.string.nearby_directions)
fr.free.nrw.commons.R.drawable.ic_wikidata_logo_24dp -> getString(fr.free.nrw.commons.R.string.nearby_wikidata)
fr.free.nrw.commons.R.drawable.ic_feedback_black_24dp -> getString(fr.free.nrw.commons.R.string.nearby_wikitalk)
fr.free.nrw.commons.R.drawable.ic_wikipedia_logo_24dp -> getString(fr.free.nrw.commons.R.string.nearby_wikipedia)
fr.free.nrw.commons.R.drawable.ic_commons_icon_vector -> getString(fr.free.nrw.commons.R.string.nearby_commons)
R.drawable.ic_round_star_border_24px -> getString(fr.free.nrw.commons.R.string.menu_bookmark)
R.drawable.ic_round_star_filled_24px -> getString(fr.free.nrw.commons.R.string.menu_bookmark)
R.drawable.ic_directions_black_24dp -> getString(fr.free.nrw.commons.R.string.nearby_directions)
R.drawable.ic_wikidata_logo_24dp -> getString(fr.free.nrw.commons.R.string.nearby_wikidata)
R.drawable.ic_feedback_black_24dp -> getString(fr.free.nrw.commons.R.string.nearby_wikitalk)
R.drawable.ic_wikipedia_logo_24dp -> getString(fr.free.nrw.commons.R.string.nearby_wikipedia)
R.drawable.ic_commons_icon_vector -> getString(fr.free.nrw.commons.R.string.nearby_commons)
else -> "Long click"
}
Toast.makeText(this.context, message, Toast.LENGTH_SHORT).show()

View file

@ -400,7 +400,10 @@ class NearbyParentFragmentPresenter
onePlaceBatch.add(Pair(i, MarkerPlaceGroup(
bookmarkLocationDao.findBookmarkLocation(
fetchedPlace[0]),fetchedPlace[0])))
fetchedPlace[0].name
),
fetchedPlace[0]
)))
} catch (e: Exception) {
Timber.tag("NearbyPinDetails").e(e)
onePlaceBatch.add(Pair(i, updatedGroups[i]))