diff --git a/app/build.gradle b/app/build.gradle index 58c1f318..76ce89d3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,6 @@ plugins { id 'kotlin-parcelize' id 'org.jlleitschuh.gradle.ktlint' - id 'io.objectbox' id 'com.google.firebase.crashlytics' } @@ -65,7 +64,7 @@ android { } debug { - minifyEnabled true + minifyEnabled false debuggable true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' applicationIdSuffix '.debug' diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/PlaybackTracking.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/PlaybackTracking.kt index 8c666a7d..71c0293c 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/PlaybackTracking.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/PlaybackTracking.kt @@ -1,16 +1,16 @@ package kr.co.vividnext.sodalive.audio_content import androidx.annotation.Keep -import io.objectbox.annotation.Entity -import io.objectbox.annotation.Id +import androidx.room.Entity +import androidx.room.PrimaryKey import java.text.SimpleDateFormat import java.util.Date import java.util.Locale -@Entity +@Entity(tableName = "playback_tracking") @Keep data class PlaybackTracking( - @Id + @PrimaryKey(autoGenerate = true) var id: Long = 0, var contentId: Long, var totalDuration: Int, diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/PlaybackTrackingRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/PlaybackTrackingRepository.kt index 905e2248..dbe93a35 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/PlaybackTrackingRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/PlaybackTrackingRepository.kt @@ -1,29 +1,21 @@ package kr.co.vividnext.sodalive.audio_content -import kr.co.vividnext.sodalive.common.ObjectBox +import kr.co.vividnext.sodalive.audio_content.db.PlaybackTrackingDao -class PlaybackTrackingRepository(private val objectBox: ObjectBox) { +class PlaybackTrackingRepository(private val dao: PlaybackTrackingDao) { fun savePlaybackTracking(data: PlaybackTracking): Long { - return objectBox.playbackTrackingBox.put(data) + return dao.insert(data) } fun getPlaybackTracking(id: Long): PlaybackTracking? { - val query = objectBox.playbackTrackingBox - .query(PlaybackTracking_.id.equal(id)) - .build() - - val playbackTracking = query.findFirst() - query.close() - return playbackTracking + return dao.getById(id) } fun getAllPlaybackTracking(): List { - return objectBox - .playbackTrackingBox - .all + return dao.getAll() } fun removeAllPlaybackTracking() { - objectBox.playbackTrackingBox.removeAll() + dao.deleteAll() } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/db/PlaybackTrackingDao.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/db/PlaybackTrackingDao.kt new file mode 100644 index 00000000..02543e5f --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/db/PlaybackTrackingDao.kt @@ -0,0 +1,22 @@ +package kr.co.vividnext.sodalive.audio_content.db + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import kr.co.vividnext.sodalive.audio_content.PlaybackTracking + +@Dao +interface PlaybackTrackingDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insert(entity: PlaybackTracking): Long + + @Query("SELECT * FROM playback_tracking WHERE id = :id LIMIT 1") + fun getById(id: Long): PlaybackTracking? + + @Query("SELECT * FROM playback_tracking") + fun getAll(): List + + @Query("DELETE FROM playback_tracking") + fun deleteAll() +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/db/PlaybackTrackingDatabase.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/db/PlaybackTrackingDatabase.kt new file mode 100644 index 00000000..4983086d --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/db/PlaybackTrackingDatabase.kt @@ -0,0 +1,35 @@ +package kr.co.vividnext.sodalive.audio_content.db + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import androidx.room.TypeConverters +import kr.co.vividnext.sodalive.audio_content.PlaybackTracking +import kr.co.vividnext.sodalive.common.Converter + +@Database(entities = [PlaybackTracking::class], version = 1) +@TypeConverters(Converter::class) +abstract class PlaybackTrackingDatabase : RoomDatabase() { + abstract fun playbackTrackingDao(): PlaybackTrackingDao + + companion object { + @Volatile + private var INSTANCE: PlaybackTrackingDatabase? = null + + fun getDatabase(context: Context): PlaybackTrackingDatabase { + return INSTANCE ?: synchronized(this) { + val instance = Room.databaseBuilder( + context.applicationContext, + PlaybackTrackingDatabase::class.java, + "playback_tracking_database" + ) + .fallbackToDestructiveMigration() + .allowMainThreadQueries() + .build() + INSTANCE = instance + instance + } + } + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/common/ObjectBox.kt b/app/src/main/java/kr/co/vividnext/sodalive/common/ObjectBox.kt deleted file mode 100644 index d6517fbb..00000000 --- a/app/src/main/java/kr/co/vividnext/sodalive/common/ObjectBox.kt +++ /dev/null @@ -1,14 +0,0 @@ -package kr.co.vividnext.sodalive.common - -import android.content.Context -import io.objectbox.BoxStore -import kr.co.vividnext.sodalive.audio_content.MyObjectBox -import kr.co.vividnext.sodalive.audio_content.PlaybackTracking - -class ObjectBox(context: Context) { - private var store: BoxStore = MyObjectBox.builder() - .androidContext(context.applicationContext) - .build() - - val playbackTrackingBox = store.boxFor(PlaybackTracking::class.java) -} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt index 9dcc79d4..bf5c0c04 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt @@ -15,6 +15,8 @@ import kr.co.vividnext.sodalive.audio_content.comment.AudioContentCommentListVie import kr.co.vividnext.sodalive.audio_content.comment.AudioContentCommentReplyViewModel import kr.co.vividnext.sodalive.audio_content.comment.AudioContentCommentRepository import kr.co.vividnext.sodalive.audio_content.curation.AudioContentCurationViewModel +import kr.co.vividnext.sodalive.audio_content.db.PlaybackTrackingDao +import kr.co.vividnext.sodalive.audio_content.db.PlaybackTrackingDatabase import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailViewModel import kr.co.vividnext.sodalive.audio_content.main.banner.AudioContentMainBannerViewModel import kr.co.vividnext.sodalive.audio_content.main.curation.AudioContentMainCurationViewModel @@ -67,23 +69,24 @@ import kr.co.vividnext.sodalive.audition.role.AuditionRoleDetailViewModel import kr.co.vividnext.sodalive.chat.character.CharacterApi import kr.co.vividnext.sodalive.chat.character.CharacterTabRepository import kr.co.vividnext.sodalive.chat.character.CharacterTabViewModel -import kr.co.vividnext.sodalive.chat.character.newcharacters.NewCharactersAllViewModel -import kr.co.vividnext.sodalive.chat.character.newcharacters.NewCharactersRepository import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentApi +import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentListViewModel +import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentReplyViewModel import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentRepository import kr.co.vividnext.sodalive.chat.character.detail.detail.CharacterDetailRepository import kr.co.vividnext.sodalive.chat.character.detail.detail.CharacterDetailViewModel import kr.co.vividnext.sodalive.chat.character.detail.gallery.CharacterGalleryRepository import kr.co.vividnext.sodalive.chat.character.detail.gallery.CharacterGalleryViewModel +import kr.co.vividnext.sodalive.chat.character.newcharacters.NewCharactersAllViewModel +import kr.co.vividnext.sodalive.chat.character.newcharacters.NewCharactersRepository +import kr.co.vividnext.sodalive.chat.original.OriginalWorkApi +import kr.co.vividnext.sodalive.chat.original.OriginalWorkRepository +import kr.co.vividnext.sodalive.chat.original.OriginalWorkViewModel import kr.co.vividnext.sodalive.chat.talk.TalkApi import kr.co.vividnext.sodalive.chat.talk.TalkTabRepository import kr.co.vividnext.sodalive.chat.talk.TalkTabViewModel import kr.co.vividnext.sodalive.chat.talk.room.chatTalkRoomModule -import kr.co.vividnext.sodalive.chat.original.OriginalWorkApi -import kr.co.vividnext.sodalive.chat.original.OriginalWorkRepository -import kr.co.vividnext.sodalive.chat.original.OriginalWorkViewModel import kr.co.vividnext.sodalive.common.ApiBuilder -import kr.co.vividnext.sodalive.common.ObjectBox import kr.co.vividnext.sodalive.explorer.ExplorerApi import kr.co.vividnext.sodalive.explorer.ExplorerRepository import kr.co.vividnext.sodalive.explorer.ExplorerViewModel @@ -204,7 +207,8 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { private val otherModule = module { single { GsonBuilder().create() } - single { ObjectBox(get()) } + single { PlaybackTrackingDatabase.getDatabase(get()) } + single { get().playbackTrackingDao() } } private val networkModule = module { @@ -368,8 +372,8 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { viewModel { CharacterDetailViewModel(get()) } viewModel { CharacterGalleryViewModel(get()) } viewModel { TalkTabViewModel(get()) } - viewModel { kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentListViewModel(get()) } - viewModel { kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentReplyViewModel(get()) } + viewModel { CharacterCommentListViewModel(get()) } + viewModel { CharacterCommentReplyViewModel(get()) } viewModel { NewCharactersAllViewModel(get()) } viewModel { OriginalWorkViewModel(get()) } viewModel { kr.co.vividnext.sodalive.chat.original.detail.OriginalWorkDetailViewModel(get()) } diff --git a/build.gradle b/build.gradle index 704d14fb..94b97933 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,6 @@ buildscript { dependencies { classpath 'com.google.android.gms:oss-licenses-plugin:0.10.6' - classpath 'io.objectbox:objectbox-gradle-plugin:3.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }