Skip to content

Commit

Permalink
Merge pull request #26 from emreesen27/develop
Browse files Browse the repository at this point in the history
v1.0.0-Beta is completed
  • Loading branch information
emreesen27 authored Sep 11, 2024
2 parents 70fdbc5 + 8842fdd commit 78def12
Show file tree
Hide file tree
Showing 22 changed files with 253 additions and 171 deletions.
20 changes: 20 additions & 0 deletions .github/workflows/lint
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: ktlint_ci
on:
pull_request:
branches:
- develop
jobs:
ktlint:
name: Check Code Quality
runs-on: ubuntu-latest
steps:
- name: Clone repo
uses: actions/checkout@master
with:
fetch-depth: 1
- name: ktlint
uses: ScaCap/action-ktlint@master
with:
github_token: ${{ secrets.action_token }}
level: info
reporter: github-pr-check
5 changes: 0 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
## v1.0.0-beta1 (11.09.2024)

* Fixed bug in version control
* Fixed error in download link

## v1.0.0-beta (11.09.2024)

* Initial release
37 changes: 36 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ android {
minSdk = 26
targetSdk = 34
versionCode = 1
versionName = "1.0.0-Beta1"
versionName = "1.0.0-Beta"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

Expand Down Expand Up @@ -68,3 +68,38 @@ tasks.register("printVersionName") {
println(android.defaultConfig.versionName)
}
}

tasks.register("installGitHook") {
doLast {
val gitHooksDir = file("$rootDir/.git/hooks")
val preCommitHook = file("$rootDir/scripts/pre-commit")
val commitMsgHook = file("$rootDir/scripts/commit-msg")

if (!gitHooksDir.exists()) {
println("Git hooks directory does not exist.")
return@doLast
}

if (preCommitHook.exists()) {
val destinationPreCommitHook = file("$gitHooksDir/pre-commit")
preCommitHook.copyTo(destinationPreCommitHook, overwrite = true)
destinationPreCommitHook.setExecutable(true)
println("Pre-commit hook installed successfully.")
} else {
println("Pre-commit hook script does not exist.")
}

if (commitMsgHook.exists()) {
val destinationCommitMsgHook = file("$gitHooksDir/commit-msg")
commitMsgHook.copyTo(destinationCommitMsgHook, overwrite = true)
destinationCommitMsgHook.setExecutable(true)
println("Commit-msg hook installed successfully.")
} else {
println("Commit-msg hook script does not exist.")
}
}
}

tasks.named("preBuild") {
dependsOn("installGitHook")
}
5 changes: 3 additions & 2 deletions app/src/main/java/com/snstudio/hyper/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,9 @@ class MainActivity : AppCompatActivity() {
binding.root,
lifecycleOwner = this,
).apply {
setBackgroundColor(R.color.secondary_background_color)
setProgressBarColor(R.color.main_color)
setBackgroundColor(R.color.main_color)
setProgressBarColor(R.color.text_color)
setProgressTextColor(R.color.text_color)
setViewToMove(binding.playerView)
useRoundedCornerBackground(true)
setMessageMaxLines(1)
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/java/com/snstudio/hyper/core/extension/Long.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.snstudio.hyper.core.extension

import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import java.util.concurrent.TimeUnit

fun Long.toDuration(): String {
Expand All @@ -8,3 +11,8 @@ fun Long.toDuration(): String {
val seconds = TimeUnit.MILLISECONDS.toSeconds(this) % 60
return String.format("%02d:%02d:%02d", hours, minutes, seconds)
}

fun Long.formatAsDate(): String {
val sdf = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
return sdf.format(Date(this))
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ data class Playlist(
@PrimaryKey(autoGenerate = true)
val playlistId: Long = 0L,
val name: String,
val creationDate: Long,
)
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding, HomeViewModel>() {
override fun observeData() {
observe(viewModel.forceUpdateLiveData) { lastVersion ->
lastVersion?.let {
if(lastVersion != BuildConfig.VERSION_NAME) {
if (lastVersion != BuildConfig.VERSION_NAME) {
showVersionDialog(it)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
package com.snstudio.hyper.feature.picker

import androidx.constraintlayout.widget.ConstraintLayout
import androidx.fragment.app.viewModels
import com.snstudio.hyper.core.base.BaseDialog
import com.snstudio.hyper.core.extension.click
import com.snstudio.hyper.core.extension.observe
import com.snstudio.hyper.data.model.Media
import com.snstudio.hyper.databinding.DialogMusicPickerBinding
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MediaPickerDialog(
private val selectedCallback: ((List<Media>?) -> Unit)? = null,
private val containsItem: List<Media>? = null,
private val mediaItems: List<Media>? = null,
) : BaseDialog<DialogMusicPickerBinding>() {
private val mediaPickerAdapter: MediaPickerAdapter by lazy { MediaPickerAdapter() }
private val viewModel: MediaPickerViewModel by viewModels()

override fun getViewBinding() = DialogMusicPickerBinding.inflate(layoutInflater)

Expand All @@ -32,25 +29,7 @@ class MediaPickerDialog(

override fun setupViews() {
initAdapter()
observeData()
initCLickListener()
with(binding) {
vm = viewModel
lifecycleOwner = viewLifecycleOwner
}
}

private fun observeData() {
observe(viewModel.localMediaLiveData) { mediaList ->
containsItem?.let { containsItem ->
val filteredList =
mediaList.filterNot { mediaItem ->
containsItem.any { it.id == mediaItem.id }
}
viewModel.containsItemIsEmptyObservable.set(filteredList.isEmpty())
mediaPickerAdapter.setItems(filteredList)
}
}
}

private fun initCLickListener() {
Expand All @@ -62,5 +41,6 @@ class MediaPickerDialog(

private fun initAdapter() {
binding.recycler.adapter = mediaPickerAdapter
mediaItems?.let { mediaPickerAdapter.setItems(it) }
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,17 +1,34 @@
package com.snstudio.hyper.feature.playlist

import android.content.Context
import android.graphics.PorterDuff
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.snstudio.hyper.R
import com.snstudio.hyper.core.extension.click
import com.snstudio.hyper.core.extension.formatAsDate
import com.snstudio.hyper.data.model.Playlist
import com.snstudio.hyper.databinding.ItemPlayListBinding

class PlaylistAdapter(private val onClick: ((Playlist) -> Unit)? = null) :
class PlaylistAdapter(
private val context: Context,
private val onClick: ((Playlist) -> Unit)? = null,
) :
RecyclerView.Adapter<PlaylistAdapter.PlaylistViewHolder>() {
private var items: MutableList<Playlist> = mutableListOf()

private val colorList =
listOf(
R.color.main_color,
R.color.main_color_mid,
R.color.main_color_light,
R.color.purple_500,
R.color.purple_700,
)

fun setItems(newItems: List<Playlist>) {
val diffResult = DiffUtil.calculateDiff(PlaylistDiffCallback(items, newItems))
items = newItems.toMutableList()
Expand Down Expand Up @@ -43,8 +60,12 @@ class PlaylistAdapter(private val onClick: ((Playlist) -> Unit)? = null) :
inner class PlaylistViewHolder(val binding: ItemPlayListBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item: Playlist) {
val randomColorResId = colorList.random()
val color = ContextCompat.getColor(context, randomColorResId)

binding.playlistName.text = item.name
binding.thumbnail.text = item.name.first().uppercase()
binding.thumbnail.setColorFilter(color, PorterDuff.Mode.SRC_IN)
binding.description.text = item.creationDate.formatAsDate()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ package com.snstudio.hyper.feature.playlist
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.ItemTouchHelper
import com.snstudio.hyper.R
import com.snstudio.hyper.core.base.BaseFragment
import com.snstudio.hyper.core.extension.click
import com.snstudio.hyper.core.extension.infoToast
import com.snstudio.hyper.core.extension.observe
import com.snstudio.hyper.data.MediaItemBuilder
import com.snstudio.hyper.data.model.Media
Expand Down Expand Up @@ -86,11 +88,26 @@ class PlaylistDetailFragment : BaseFragment<FragmentPlaylistDetailBinding, Playl
}

private fun showMediaPickerDialog() {
val allMediaList = viewModel.localMediaListLiveData.value.orEmpty()
val playlistMedia = viewModel.playlistWithMediaLiveData.value.orEmpty()
val filteredList =
allMediaList.filterNot { mediaItem ->
playlistMedia.any { it.id == mediaItem.id }
}

if (allMediaList.isEmpty()) {
context?.let { it.infoToast(it.getString(R.string.no_music_downloaded_yet)) }
return
}
if (filteredList.isEmpty()) {
context?.let { it.infoToast(it.getString(R.string.all_music_contains)) }
return
}

MediaPickerDialog(
selectedCallback = { mediaList ->
mediaList?.let { viewModel.insertMediaListToPlaylist(args.playListId, it) }
},
containsItem = viewModel.playlistWithMediaLiveData.value,
).showDialog(childFragmentManager)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class PlaylistFragment : BaseFragment<FragmentPlaylistBinding, PlaylistViewModel>() {
private val playlistAdapter by lazy {
PlaylistAdapter(onClick = {
PlaylistAdapter(requireContext(), onClick = {
navigatePlaylistDetail(it)
})
}
Expand Down Expand Up @@ -54,7 +54,12 @@ class PlaylistFragment : BaseFragment<FragmentPlaylistBinding, PlaylistViewModel
private fun showCreatePlaylistDialog() {
val dialog = CreatePlaylistDialog()
dialog.onClick = { playlistName ->
viewModel.insertPlaylist(Playlist(name = playlistName))
viewModel.insertPlaylist(
Playlist(
name = playlistName,
creationDate = System.currentTimeMillis(),
),
)
dialog.dismiss()
}
dialog.showDialog(childFragmentManager)
Expand All @@ -68,7 +73,13 @@ class PlaylistFragment : BaseFragment<FragmentPlaylistBinding, PlaylistViewModel
val callback =
ItemTouchHelperCallback(
requireContext(),
onSwipedCallback = { pos -> viewModel.deletePlaylist(playlistAdapter.getItemWithPos(pos)) },
onSwipedCallback = { pos ->
viewModel.deletePlaylist(
playlistAdapter.getItemWithPos(
pos,
),
)
},
)
val itemTouchHelper = ItemTouchHelper(callback)
itemTouchHelper.attachToRecyclerView(binding.recyclerPlaylist)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.snstudio.hyper.data.local.repository.MediaRepository
import com.snstudio.hyper.data.local.repository.PlaylistMediaCrossRepository
import com.snstudio.hyper.data.local.repository.PlaylistRepository
import com.snstudio.hyper.data.model.Media
Expand All @@ -17,9 +18,13 @@ import javax.inject.Inject
class PlaylistViewModel
@Inject
constructor(
private val localMediaRepository: MediaRepository,
private val playlistRepository: PlaylistRepository,
private val playlistMediaCrossRepository: PlaylistMediaCrossRepository,
) : ViewModel() {
private val localMediaListMLiveData = MutableLiveData<List<Media>>()
val localMediaListLiveData: LiveData<List<Media>> = localMediaListMLiveData

private val playlistMLiveData = MutableLiveData<List<Playlist>>()
val playlistLiveData: LiveData<List<Playlist>> = playlistMLiveData

Expand All @@ -31,8 +36,16 @@ class PlaylistViewModel

init {
getPlayList()
collectLocalMediaData()
}

private fun collectLocalMediaData() =
viewModelScope.launch {
localMediaRepository.localMediaList.collect {
localMediaListMLiveData.value = it
}
}

private fun getPlayList() =
viewModelScope.launch {
playlistRepository.allPlaylists.collectLatest { playlist ->
Expand Down
12 changes: 12 additions & 0 deletions app/src/main/res/drawable/ic_music_square.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="64dp"
android:height="64dp"
android:viewportWidth="54"
android:viewportHeight="54">
<path
android:fillColor="#000000"
android:pathData="M42,10.996l-20,2.597l0,3.407l0,1.861l20,-2.597l0,-2.121z" />
<path
android:fillColor="#000000"
android:pathData="M41.824,0H12.176C5.462,0 0,5.462 0,12.176v29.648C0,48.538 5.462,54 12.176,54h29.648C48.538,54 54,48.538 54,41.824V12.176C54,5.462 48.538,0 41.824,0zM44,34.857c0,3.702 -3.333,6.714 -7.429,6.714c-4.096,0 -7.428,-3.012 -7.428,-6.714s3.333,-6.715 7.428,-6.715c2.182,0 4.141,0.86 5.502,2.219C42.029,30.249 42,30.128 42,30V18.28l-20,2.598V41c0,0.542 0,-0.91 0,0.286C22,44.988 18.636,48 14.5,48S7,44.988 7,41.286s3.364,-6.715 7.5,-6.715c2.174,0 4.129,0.838 5.5,2.165V20v-3v-4.286c0,-0.503 0.373,-0.927 0.871,-0.991l22,-2.856c0.283,-0.039 0.572,0.051 0.789,0.24C43.876,9.296 44,9.569 44,9.857v4.285v3V34" />
</vector>
Loading

0 comments on commit 78def12

Please sign in to comment.