Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import org.fossify.gallery.helpers.MediaFetcher
import org.fossify.gallery.models.Favorite

class FavoriteViewModel(application: Application) : AndroidViewModel(application) {
private val mediaFetcher: MediaFetcher = MediaFetcher(application)
private val favoritesDao: FavoritesDao = GalleryDatabase.getInstance(application).favoritesDao()

fun favoriteMedium(mediumId: Int) {
val favorite = Favorite(mediumId = mediumId, timestamp = System.currentTimeMillis())
favoritesDao.insertFavorite(favorite)
mediaFetcher.notifyUI()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import org.fossify.gallery.fragments.PhotoFragment

class MediaActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val photoFragment = PhotoFragment()
supportFragmentManager.beginTransaction().add(R.id.fragment_container, photoFragment).commit()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@Database(entities = [Favorite::class], version = 1)
abstract class GalleryDatabase : RoomDatabase() {
abstract fun favoritesDao(): FavoritesDao
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import org.fossify.gallery.helpers.MediaFetcher
import org.fossify.gallery.models.Favorite

class PhotoFragment : Fragment() {
private lateinit var mediaFetcher: MediaFetcher
private lateinit var favoriteViewModel: FavoriteViewModel

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mediaFetcher = MediaFetcher(requireContext())
favoriteViewModel = ViewModelProvider(this).get(FavoriteViewModel::class.java)
}

fun favoriteMedium(mediumId: Int) {
mediaFetcher.favoriteMedium(mediumId)
favoriteViewModel.favoriteMedium(mediumId)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import android.content.Context
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.room.*
import org.fossify.gallery.models.Favorite

@Entity
data class Favorite(
@PrimaryKey(autoGenerate = true)
val id: Int,
val mediumId: Int,
val timestamp: Long
)

@Dao
interface FavoritesDao {
@Insert
suspend fun insertFavorite(favorite: Favorite)

@Query("SELECT * FROM Favorite WHERE mediumId = :mediumId")
suspend fun getFavorite(mediumId: Int): Favorite?

@Query("DELETE FROM Favorite WHERE mediumId = :mediumId")
suspend fun deleteFavorite(mediumId: Int)
}

@Database(entities = [Favorite::class], version = 1)
abstract class GalleryDatabase : RoomDatabase() {
abstract fun favoritesDao(): FavoritesDao
}

class MediaFetcher(private val context: Context) {
private val database: GalleryDatabase = Room.databaseBuilder(
context,
GalleryDatabase::class.java,
"gallery_database"
).build()

private val favoritesDao: FavoritesDao = database.favoritesDao()

fun favoriteMedium(mediumId: Int) {
val favorite = Favorite(mediumId = mediumId, timestamp = System.currentTimeMillis())
favoritesDao.insertFavorite(favorite)
notifyUI()
}

private fun notifyUI() {
// Notify the UI to update
// This can be done using LiveData or a similar mechanism
// For simplicity, we will use a simple callback
val callback = object : Callback {
override fun onCallback() {
// Update the UI here
}
}
callback.onCallback()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
data class Favorite(
val mediumId: Int,
val timestamp: Long
)
Loading