2020-10-06 08:46:04 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2020 Hemanth Savarla.
|
|
|
|
*
|
|
|
|
* Licensed under the GNU General Public License v3
|
|
|
|
*
|
|
|
|
* This is free software: you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
* See the GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
*/
|
2019-04-20 05:29:45 +00:00
|
|
|
package code.name.monkey.retromusic.activities.tageditor
|
2018-12-06 08:52:57 +00:00
|
|
|
|
|
|
|
import android.app.Activity
|
|
|
|
import android.content.res.ColorStateList
|
2019-12-01 15:45:12 +00:00
|
|
|
import android.graphics.Bitmap
|
|
|
|
import android.graphics.BitmapFactory
|
|
|
|
import android.graphics.Color
|
2019-09-16 18:02:40 +00:00
|
|
|
import android.graphics.drawable.Drawable
|
2018-12-06 08:52:57 +00:00
|
|
|
import android.net.Uri
|
|
|
|
import android.os.Bundle
|
2019-12-01 15:45:12 +00:00
|
|
|
import android.text.Editable
|
|
|
|
import android.text.TextWatcher
|
2020-01-05 20:25:55 +00:00
|
|
|
import android.transition.Slide
|
2021-09-08 18:30:20 +00:00
|
|
|
import android.view.LayoutInflater
|
|
|
|
import android.widget.ImageView
|
2018-12-06 08:52:57 +00:00
|
|
|
import android.widget.Toast
|
2019-12-01 15:45:12 +00:00
|
|
|
import code.name.monkey.appthemehelper.util.ATHUtil
|
2018-12-06 08:52:57 +00:00
|
|
|
import code.name.monkey.retromusic.R
|
2021-09-08 18:30:20 +00:00
|
|
|
import code.name.monkey.retromusic.databinding.ActivityAlbumTagEditorBinding
|
2019-07-30 21:46:50 +00:00
|
|
|
import code.name.monkey.retromusic.extensions.appHandleColor
|
2021-09-26 10:29:32 +00:00
|
|
|
import code.name.monkey.retromusic.extensions.setTint
|
2021-09-08 18:30:20 +00:00
|
|
|
import code.name.monkey.retromusic.glide.GlideApp
|
2019-12-01 15:45:12 +00:00
|
|
|
import code.name.monkey.retromusic.glide.palette.BitmapPaletteWrapper
|
2020-10-12 17:22:53 +00:00
|
|
|
import code.name.monkey.retromusic.model.ArtworkInfo
|
2020-09-17 21:25:41 +00:00
|
|
|
import code.name.monkey.retromusic.model.Song
|
2019-12-01 15:45:12 +00:00
|
|
|
import code.name.monkey.retromusic.util.ImageUtil
|
2018-12-12 20:59:07 +00:00
|
|
|
import code.name.monkey.retromusic.util.RetroColorUtil.generatePalette
|
|
|
|
import code.name.monkey.retromusic.util.RetroColorUtil.getColor
|
2018-12-06 08:52:57 +00:00
|
|
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
2021-09-08 18:30:20 +00:00
|
|
|
import com.bumptech.glide.request.target.ImageViewTarget
|
|
|
|
import com.bumptech.glide.request.transition.Transition
|
2018-12-06 08:52:57 +00:00
|
|
|
import org.jaudiotagger.tag.FieldKey
|
2021-09-08 18:30:20 +00:00
|
|
|
import java.util.*
|
2018-12-06 08:52:57 +00:00
|
|
|
|
2021-09-08 18:30:20 +00:00
|
|
|
class AlbumTagEditorActivity : AbsTagEditorActivity<ActivityAlbumTagEditorBinding>(), TextWatcher {
|
2020-08-13 17:08:37 +00:00
|
|
|
|
2021-09-08 18:30:20 +00:00
|
|
|
override val bindingInflater: (LayoutInflater) -> ActivityAlbumTagEditorBinding =
|
|
|
|
ActivityAlbumTagEditorBinding::inflate
|
2019-12-30 11:01:50 +00:00
|
|
|
|
2020-01-05 20:25:55 +00:00
|
|
|
private fun windowEnterTransition() {
|
|
|
|
val slide = Slide()
|
|
|
|
slide.excludeTarget(R.id.appBarLayout, true)
|
|
|
|
slide.excludeTarget(R.id.status_bar, true)
|
|
|
|
slide.excludeTarget(android.R.id.statusBarBackground, true)
|
|
|
|
slide.excludeTarget(android.R.id.navigationBarBackground, true)
|
|
|
|
|
|
|
|
window.enterTransition = slide
|
|
|
|
}
|
|
|
|
|
2020-08-21 18:01:52 +00:00
|
|
|
override fun loadImageFromFile(selectedFile: Uri?) {
|
2021-09-08 18:30:20 +00:00
|
|
|
GlideApp.with(this@AlbumTagEditorActivity).asBitmapPalette().load(selectedFile)
|
2019-12-30 11:01:50 +00:00
|
|
|
.diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true)
|
2021-09-08 18:30:20 +00:00
|
|
|
.into(object : ImageViewTarget<BitmapPaletteWrapper>(binding.editorImage) {
|
2019-12-30 11:01:50 +00:00
|
|
|
override fun onResourceReady(
|
2021-09-08 18:30:20 +00:00
|
|
|
resource: BitmapPaletteWrapper,
|
|
|
|
transition: Transition<in BitmapPaletteWrapper>?
|
2019-12-30 11:01:50 +00:00
|
|
|
) {
|
2021-09-08 18:30:20 +00:00
|
|
|
getColor(resource.palette, Color.TRANSPARENT)
|
|
|
|
albumArtBitmap = resource.bitmap?.let { ImageUtil.resizeBitmap(it, 2048) }
|
2019-12-30 11:01:50 +00:00
|
|
|
setImageBitmap(
|
|
|
|
albumArtBitmap,
|
|
|
|
getColor(
|
2021-09-08 18:30:20 +00:00
|
|
|
resource.palette,
|
2020-02-26 16:49:24 +00:00
|
|
|
ATHUtil.resolveColor(
|
|
|
|
this@AlbumTagEditorActivity,
|
|
|
|
R.attr.defaultFooterColor
|
|
|
|
)
|
2019-12-30 11:01:50 +00:00
|
|
|
)
|
|
|
|
)
|
|
|
|
deleteAlbumArt = false
|
|
|
|
dataChanged()
|
|
|
|
setResult(Activity.RESULT_OK)
|
|
|
|
}
|
|
|
|
|
2021-09-08 18:30:20 +00:00
|
|
|
override fun onLoadFailed(errorDrawable: Drawable?) {
|
|
|
|
super.onLoadFailed(errorDrawable)
|
|
|
|
Toast.makeText(this@AlbumTagEditorActivity, "Load Failed", Toast.LENGTH_LONG)
|
2019-12-30 11:01:50 +00:00
|
|
|
.show()
|
|
|
|
}
|
2021-09-08 18:30:20 +00:00
|
|
|
|
|
|
|
override fun setResource(resource: BitmapPaletteWrapper?) {}
|
2019-12-30 11:01:50 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
private var albumArtBitmap: Bitmap? = null
|
|
|
|
private var deleteAlbumArt: Boolean = false
|
|
|
|
|
|
|
|
private fun setupToolbar() {
|
2021-09-08 18:30:20 +00:00
|
|
|
binding.toolbar.setBackgroundColor(ATHUtil.resolveColor(this, R.attr.colorSurface))
|
|
|
|
setSupportActionBar(binding.toolbar)
|
2019-12-30 11:01:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
setDrawUnderStatusBar()
|
|
|
|
super.onCreate(savedInstanceState)
|
2020-01-05 20:25:55 +00:00
|
|
|
window.sharedElementsUseOverlay = true
|
2021-09-08 18:30:20 +00:00
|
|
|
binding.imageContainer.transitionName = getString(R.string.transition_album_art)
|
2020-01-05 20:25:55 +00:00
|
|
|
windowEnterTransition()
|
2019-12-30 11:01:50 +00:00
|
|
|
setUpViews()
|
|
|
|
setupToolbar()
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun setUpViews() {
|
|
|
|
fillViewsWithFileTags()
|
|
|
|
|
2021-09-26 10:29:32 +00:00
|
|
|
binding.yearContainer.setTint(false)
|
|
|
|
binding.genreContainer.setTint(false)
|
|
|
|
binding.albumTitleContainer.setTint(false)
|
|
|
|
binding.albumArtistContainer.setTint(false)
|
2019-12-30 11:01:50 +00:00
|
|
|
|
2021-09-08 18:30:20 +00:00
|
|
|
binding.albumText.appHandleColor().addTextChangedListener(this)
|
|
|
|
binding.albumArtistText.appHandleColor().addTextChangedListener(this)
|
|
|
|
binding.genreTitle.appHandleColor().addTextChangedListener(this)
|
|
|
|
binding.yearTitle.appHandleColor().addTextChangedListener(this)
|
2019-12-30 11:01:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private fun fillViewsWithFileTags() {
|
2021-09-08 18:30:20 +00:00
|
|
|
binding.albumText.setText(albumTitle)
|
|
|
|
binding.albumArtistText.setText(albumArtistName)
|
|
|
|
binding.genreTitle.setText(genreName)
|
|
|
|
binding.yearTitle.setText(songYear)
|
|
|
|
println(albumTitle + albumArtistName)
|
2019-12-30 11:01:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun loadCurrentImage() {
|
|
|
|
val bitmap = albumArt
|
|
|
|
setImageBitmap(
|
|
|
|
bitmap,
|
|
|
|
getColor(
|
|
|
|
generatePalette(bitmap),
|
|
|
|
ATHUtil.resolveColor(this, R.attr.defaultFooterColor)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
deleteAlbumArt = false
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun toastLoadingFailed() {
|
|
|
|
Toast.makeText(
|
|
|
|
this@AlbumTagEditorActivity,
|
|
|
|
R.string.could_not_download_album_cover,
|
|
|
|
Toast.LENGTH_SHORT
|
|
|
|
).show()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun searchImageOnWeb() {
|
2021-09-08 18:30:20 +00:00
|
|
|
searchWebFor(binding.albumText.text.toString(), binding.albumArtistText.text.toString())
|
2019-12-30 11:01:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun deleteImage() {
|
|
|
|
setImageBitmap(
|
2020-02-25 13:15:23 +00:00
|
|
|
BitmapFactory.decodeResource(resources, R.drawable.default_audio_art),
|
2019-12-30 11:01:50 +00:00
|
|
|
ATHUtil.resolveColor(this, R.attr.defaultFooterColor)
|
|
|
|
)
|
|
|
|
deleteAlbumArt = true
|
|
|
|
dataChanged()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun save() {
|
|
|
|
val fieldKeyValueMap = EnumMap<FieldKey, String>(FieldKey::class.java)
|
2021-09-08 18:30:20 +00:00
|
|
|
fieldKeyValueMap[FieldKey.ALBUM] = binding.albumText.text.toString()
|
2020-10-06 08:46:04 +00:00
|
|
|
// android seems not to recognize album_artist field so we additionally write the normal artist field
|
2021-09-08 18:30:20 +00:00
|
|
|
fieldKeyValueMap[FieldKey.ARTIST] = binding.albumArtistText.text.toString()
|
|
|
|
fieldKeyValueMap[FieldKey.ALBUM_ARTIST] = binding.albumArtistText.text.toString()
|
|
|
|
fieldKeyValueMap[FieldKey.GENRE] = binding.genreTitle.text.toString()
|
|
|
|
fieldKeyValueMap[FieldKey.YEAR] = binding.yearTitle.text.toString()
|
2019-12-30 11:01:50 +00:00
|
|
|
|
2020-01-29 17:25:43 +00:00
|
|
|
writeValuesToFiles(
|
|
|
|
fieldKeyValueMap,
|
2020-10-12 17:22:53 +00:00
|
|
|
when {
|
|
|
|
deleteAlbumArt -> ArtworkInfo(id, null)
|
|
|
|
albumArtBitmap == null -> null
|
|
|
|
else -> ArtworkInfo(id, albumArtBitmap!!)
|
|
|
|
}
|
2019-12-30 11:01:50 +00:00
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2020-08-31 12:30:07 +00:00
|
|
|
override fun getSongPaths(): List<String> {
|
2020-09-17 21:25:41 +00:00
|
|
|
return repository.albumById(id).songs
|
|
|
|
.map(Song::data)
|
2019-12-30 11:01:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun afterTextChanged(s: Editable) {
|
|
|
|
dataChanged()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun setColors(color: Int) {
|
|
|
|
super.setColors(color)
|
|
|
|
saveFab.backgroundTintList = ColorStateList.valueOf(color)
|
|
|
|
}
|
|
|
|
|
2021-09-08 18:30:20 +00:00
|
|
|
|
|
|
|
override val editorImage: ImageView
|
|
|
|
get() = binding.editorImage
|
|
|
|
|
2019-12-30 11:01:50 +00:00
|
|
|
companion object {
|
|
|
|
|
|
|
|
val TAG: String = AlbumTagEditorActivity::class.java.simpleName
|
|
|
|
}
|
2018-12-06 08:52:57 +00:00
|
|
|
}
|