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 } val areAllGranted = result.values.all { it }
if (areAllGranted) { if (areAllGranted) {
contributionController.locationPermissionCallback.onLocationPermissionGranted() contributionController.locationPermissionCallback?.onLocationPermissionGranted()
} else { } else {
if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) { if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
contributionController.handleShowRationaleFlowCameraLocation( contributionController.handleShowRationaleFlowCameraLocation(
activity, requireActivity(),
inAppCameraLocationPermissionLauncher, inAppCameraLocationPermissionLauncher,
cameraPickLauncherForResult cameraPickLauncherForResult
) )
} else { } else {
contributionController.locationPermissionCallback contributionController.locationPermissionCallback
.onLocationPermissionDenied( ?.onLocationPermissionDenied(
getString(R.string.in_app_camera_location_permission_denied) 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.Scheduler
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import timber.log.Timber
import java.util.Objects import java.util.Objects
import javax.inject.Named import javax.inject.Named
import javax.inject.Singleton 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(""" db.execSQL("""
INSERT INTO bookmarks_locations ( INSERT INTO bookmarks_locations (
location_name, location_language, location_description, location_category, 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_label_text, location_label_icon, location_lat, location_long,
location_image_url, location_wikipedia_link, location_wikidata_link, location_image_url, location_wikipedia_link, location_wikidata_link,
location_commons_link, location_pic, location_exists location_commons_link, location_pic, location_exists
FROM bookmarksLocations FROM oldDb.bookmarksLocations
""") """)
db.execSQL("DROP TABLE IF EXISTS bookmarkLocations") 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.R
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import timber.log.Timber
object NearbyUtil { object NearbyUtil {
@ -16,7 +17,7 @@ object NearbyUtil {
) { ) {
scope?.launch { scope?.launch {
val isBookmarked = bookmarksLocationsDao.findBookmarkLocation(name) val isBookmarked = bookmarksLocationsDao.findBookmarkLocation(name)
Log.d("isBookmarked", isBookmarked.toString()) Timber.i("isBookmarked: $isBookmarked")
if (isBookmarked) { if (isBookmarked) {
bottomSheetAdapter.updateBookmarkIcon(R.drawable.ic_round_star_filled_24px) bottomSheetAdapter.updateBookmarkIcon(R.drawable.ic_round_star_filled_24px)
} else { } 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.NearbyController
import fr.free.nrw.commons.nearby.NearbyFilterSearchRecyclerViewAdapter import fr.free.nrw.commons.nearby.NearbyFilterSearchRecyclerViewAdapter
import fr.free.nrw.commons.nearby.NearbyFilterState 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.Place
import fr.free.nrw.commons.nearby.PlacesRepository import fr.free.nrw.commons.nearby.PlacesRepository
import fr.free.nrw.commons.nearby.WikidataFeedback import fr.free.nrw.commons.nearby.WikidataFeedback
@ -638,21 +639,23 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
private fun initRvNearbyList() { private fun initRvNearbyList() {
binding!!.bottomSheetNearby.rvNearbyList.layoutManager = LinearLayoutManager(context) binding!!.bottomSheetNearby.rvNearbyList.layoutManager = LinearLayoutManager(context)
adapter = PlaceAdapter( adapter = PlaceAdapter(
bookmarkLocationDao!!, bookmarkLocationsDao = bookmarkLocationDao,
{ place: Place -> scope = scope,
onPlaceClicked = { place: Place ->
moveCameraToPosition( moveCameraToPosition(
GeoPoint(place.location.latitude, place.location.longitude) GeoPoint(
place.location.latitude,
place.location.longitude
)
) )
Unit
}, },
{ place: Place?, isBookmarked: Boolean? -> onBookmarkClicked = { place: Place?, _: Boolean? ->
presenter!!.toggleBookmarkedStatus(place) presenter!!.toggleBookmarkedStatus(place, scope)
Unit
}, },
commonPlaceClickActions!!, commonPlaceClickActions = commonPlaceClickActions,
inAppCameraLocationPermissionLauncher, inAppCameraLocationPermissionLauncher = inAppCameraLocationPermissionLauncher,
galleryPickLauncherForResult, galleryPickLauncherForResult = galleryPickLauncherForResult,
cameraPickLauncherForResult cameraPickLauncherForResult = cameraPickLauncherForResult
) )
binding!!.bottomSheetNearby.rvNearbyList.adapter = adapter binding!!.bottomSheetNearby.rvNearbyList.adapter = adapter
} }
@ -2249,34 +2252,34 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
// TODO: Decide button text for fitting in the screen // TODO: Decide button text for fitting in the screen
(dataList as ArrayList<BottomSheetItem>).add( (dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem( BottomSheetItem(
fr.free.nrw.commons.R.drawable.ic_round_star_border_24px, R.drawable.ic_round_star_border_24px,
"" ""
) )
) )
(dataList as ArrayList<BottomSheetItem>).add( (dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem( 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) resources.getString(fr.free.nrw.commons.R.string.nearby_directions)
) )
) )
if (place.hasWikidataLink()) { if (place.hasWikidataLink()) {
(dataList as ArrayList<BottomSheetItem>).add( (dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem( 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) resources.getString(fr.free.nrw.commons.R.string.nearby_wikidata)
) )
) )
} }
(dataList as ArrayList<BottomSheetItem>).add( (dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem( 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) resources.getString(fr.free.nrw.commons.R.string.nearby_wikitalk)
) )
) )
if (place.hasWikipediaLink()) { if (place.hasWikipediaLink()) {
(dataList as ArrayList<BottomSheetItem>).add( (dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem( 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) resources.getString(fr.free.nrw.commons.R.string.nearby_wikipedia)
) )
) )
@ -2284,7 +2287,7 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
if (selectedPlace!!.hasCommonsLink()) { if (selectedPlace!!.hasCommonsLink()) {
(dataList as ArrayList<BottomSheetItem>).add( (dataList as ArrayList<BottomSheetItem>).add(
BottomSheetItem( 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) resources.getString(fr.free.nrw.commons.R.string.nearby_commons)
) )
) )
@ -2363,12 +2366,16 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
} }
private fun updateBookmarkButtonImage(place: Place) { private fun updateBookmarkButtonImage(place: Place) {
val bookmarkIcon = if (bookmarkLocationDao!!.findBookmarkLocation(place)) { NearbyUtil.getBookmarkLocationExists(
fr.free.nrw.commons.R.drawable.ic_round_star_filled_24px bookmarkLocationDao,
} else { place.getName(),
fr.free.nrw.commons.R.drawable.ic_round_star_border_24px scope,
} bottomSheetAdapter!!
bottomSheetAdapter!!.updateBookmarkIcon(bookmarkIcon) )
}
private fun toggleBookmarkButtonImage() {
bottomSheetAdapter?.toggleBookmarkIcon()
} }
override fun onAttach(context: Context) { override fun onAttach(context: Context) {
@ -2546,26 +2553,31 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
override fun onBottomSheetItemClick(view: View?, position: Int) { override fun onBottomSheetItemClick(view: View?, position: Int) {
val item = dataList?.get(position) ?: return // Null check for dataList val item = dataList?.get(position) ?: return // Null check for dataList
when (item.imageResourceId) { when (item.imageResourceId) {
fr.free.nrw.commons.R.drawable.ic_round_star_border_24px, R.drawable.ic_round_star_border_24px -> {
fr.free.nrw.commons.R.drawable.ic_round_star_filled_24px -> { presenter?.toggleBookmarkedStatus(selectedPlace, scope)
presenter?.toggleBookmarkedStatus(selectedPlace) toggleBookmarkButtonImage()
}
R.drawable.ic_round_star_filled_24px -> {
presenter?.toggleBookmarkedStatus(selectedPlace, scope)
toggleBookmarkButtonImage()
selectedPlace?.let { updateBookmarkButtonImage(it) } selectedPlace?.let { updateBookmarkButtonImage(it) }
} }
fr.free.nrw.commons.R.drawable.ic_directions_black_24dp -> { R.drawable.ic_directions_black_24dp -> {
selectedPlace?.let { selectedPlace?.let {
Utils.handleGeoCoordinates(this.context, it.getLocation()) Utils.handleGeoCoordinates(this.context, it.getLocation())
binding?.map?.zoomLevelDouble ?: 0.0 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 { selectedPlace?.siteLinks?.wikidataLink?.let {
Utils.handleWebUrl(this.context, it) Utils.handleWebUrl(this.context, it)
} }
} }
fr.free.nrw.commons.R.drawable.ic_feedback_black_24dp -> { R.drawable.ic_feedback_black_24dp -> {
selectedPlace?.let { selectedPlace?.let {
val intent = Intent(this.context, WikidataFeedback::class.java).apply { val intent = Intent(this.context, WikidataFeedback::class.java).apply {
putExtra("lat", it.location.latitude) 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 { selectedPlace?.siteLinks?.wikipediaLink?.let {
Utils.handleWebUrl(this.context, it) 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 { selectedPlace?.siteLinks?.commonsLink?.let {
Utils.handleWebUrl(this.context, it) Utils.handleWebUrl(this.context, it)
} }
@ -2597,13 +2609,13 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(), NearbyParentFragmen
override fun onBottomSheetItemLongClick(view: View?, position: Int) { override fun onBottomSheetItemLongClick(view: View?, position: Int) {
val item = dataList!![position] val item = dataList!![position]
val message = when (item.imageResourceId) { 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) 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) 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) 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) 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) 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) 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_commons_icon_vector -> getString(fr.free.nrw.commons.R.string.nearby_commons)
else -> "Long click" else -> "Long click"
} }
Toast.makeText(this.context, message, Toast.LENGTH_SHORT).show() Toast.makeText(this.context, message, Toast.LENGTH_SHORT).show()

View file

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