Ripple cover and color adjustment

This commit is contained in:
h4h13 2019-12-10 23:06:20 +05:30
commit 8dc9083ff7
50 changed files with 485 additions and 675 deletions

View file

@ -44,7 +44,6 @@ import com.afollestad.materialcab.MaterialCab
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.activity_album.*
import kotlinx.android.synthetic.main.activity_album_content.*
import kotlinx.android.synthetic.main.status_bar.*
import java.util.*
import javax.inject.Inject
import android.util.Pair as UtilPair
@ -203,7 +202,7 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C
MaterialUtil.setTint(button = playAction, color = buttonColor)
val toolbarColor = ATHUtil.resolveColor(this, R.attr.colorSurface)
status_bar.setBackgroundColor(toolbarColor)
//status_bar.setBackgroundColor(toolbarColor)
toolbar.setBackgroundColor(toolbarColor)
setSupportActionBar(toolbar)
supportActionBar?.title = null
@ -266,14 +265,10 @@ class AlbumDetailsActivity : AbsSlidingMusicPanelActivity(), AlbumDetailsView, C
private fun setUpSortOrderMenu(sortOrder: SubMenu) {
when (savedSortOrder) {
AlbumSongSortOrder.SONG_A_Z -> sortOrder.findItem(R.id.action_sort_order_title)
.isChecked = true
AlbumSongSortOrder.SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc)
.isChecked = true
AlbumSongSortOrder.SONG_TRACK_LIST -> sortOrder.findItem(R.id.action_sort_order_track_list)
.isChecked = true
AlbumSongSortOrder.SONG_DURATION -> sortOrder.findItem(R.id.action_sort_order_artist_song_duration)
.isChecked = true
AlbumSongSortOrder.SONG_A_Z -> sortOrder.findItem(R.id.action_sort_order_title).isChecked = true
AlbumSongSortOrder.SONG_Z_A -> sortOrder.findItem(R.id.action_sort_order_title_desc).isChecked = true
AlbumSongSortOrder.SONG_TRACK_LIST -> sortOrder.findItem(R.id.action_sort_order_track_list).isChecked = true
AlbumSongSortOrder.SONG_DURATION -> sortOrder.findItem(R.id.action_sort_order_artist_song_duration).isChecked = true
}
}

View file

@ -38,7 +38,6 @@ import com.afollestad.materialcab.MaterialCab
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.activity_artist_content.*
import kotlinx.android.synthetic.main.activity_artist_details.*
import kotlinx.android.synthetic.main.status_bar.*
import java.util.*
import javax.inject.Inject
import kotlin.collections.ArrayList
@ -243,7 +242,7 @@ class ArtistDetailActivity : AbsSlidingMusicPanelActivity(), ArtistDetailsView,
MaterialUtil.setTint(button = playAction, color = buttonColor)
val toolbarColor = ATHUtil.resolveColor(this, R.attr.colorSurface)
status_bar.setBackgroundColor(toolbarColor)
//status_bar.setBackgroundColor(toolbarColor)
toolbar.setBackgroundColor(toolbarColor)
setSupportActionBar(toolbar)
supportActionBar?.title = null

View file

@ -90,7 +90,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
val statusBar = window.decorView.rootView.findViewById<View>(R.id.status_bar)
if (statusBar != null) {
when {
VersionUtils.hasMarshmallow() -> window.statusBarColor = color
VersionUtils.hasMarshmallow() -> statusBar.setBackgroundColor(color)
VersionUtils.hasLollipop() -> statusBar.setBackgroundColor(ColorUtil.darkenColor(color))
else -> statusBar.setBackgroundColor(color)
}
@ -105,7 +105,7 @@ abstract class AbsThemeActivity : ATHToolbarActivity(), Runnable {
fun setStatusbarColorAuto() {
// we don't want to use statusbar color because we are doing the color darkening on our own to support KitKat
//setStatusbarColor(ATHUtil.resolveColor(this, android.R.attr.windowBackground))
setStatusbarColor(ATHUtil.resolveColor(this, R.attr.colorSurface))
setLightStatusbarAuto(ATHUtil.resolveColor(this, R.attr.colorSurface))
}

View file

@ -3,198 +3,195 @@ package code.name.monkey.retromusic.adapter.album
import android.app.ActivityOptions
import android.content.res.ColorStateList
import android.graphics.drawable.Drawable
import android.view.*
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import code.name.monkey.appthemehelper.util.*
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.adapter.base.*
import code.name.monkey.retromusic.glide.*
import code.name.monkey.retromusic.helper.*
import code.name.monkey.retromusic.adapter.base.AbsMultiSelectAdapter
import code.name.monkey.retromusic.adapter.base.MediaEntryViewHolder
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.glide.SongGlideRequest
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.SortOrder
import code.name.monkey.retromusic.helper.menu.SongsMenuHelper
import code.name.monkey.retromusic.interfaces.CabHolder
import code.name.monkey.retromusic.model.*
import code.name.monkey.retromusic.util.*
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.NavigationUtil
import code.name.monkey.retromusic.util.PreferenceUtil
import com.bumptech.glide.Glide
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView
open class AlbumAdapter(
protected val activity: AppCompatActivity,
dataSet: ArrayList<Album>,
protected var itemLayoutRes: Int,
usePalette: Boolean,
cabHolder: CabHolder?
protected val activity: AppCompatActivity,
dataSet: ArrayList<Album>,
protected var itemLayoutRes: Int,
usePalette: Boolean,
cabHolder: CabHolder?
) : AbsMultiSelectAdapter<AlbumAdapter.ViewHolder, Album>(
activity, cabHolder, code.name.monkey.retromusic.R.menu.menu_media_selection
activity,
cabHolder,
R.menu.menu_media_selection
), FastScrollRecyclerView.SectionedAdapter {
var dataSet: ArrayList<Album>
protected set
var dataSet: ArrayList<Album>
protected set
protected var usePalette = false
protected var usePalette = false
init {
this.dataSet = dataSet
this.usePalette = usePalette
this.setHasStableIds(true)
}
init {
this.dataSet = dataSet
this.usePalette = usePalette
this.setHasStableIds(true)
}
fun useItemLayout(itemLayoutRes: Int) {
this.itemLayoutRes = itemLayoutRes
notifyDataSetChanged()
}
fun useItemLayout(itemLayoutRes: Int) {
this.itemLayoutRes = itemLayoutRes
notifyDataSetChanged()
}
fun usePalette(usePalette: Boolean) {
this.usePalette = usePalette
notifyDataSetChanged()
}
fun usePalette(usePalette: Boolean) {
this.usePalette = usePalette
notifyDataSetChanged()
}
fun swapDataSet(dataSet: ArrayList<Album>) {
this.dataSet = dataSet
notifyDataSetChanged()
}
fun swapDataSet(dataSet: ArrayList<Album>) {
this.dataSet = dataSet
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(activity).inflate(itemLayoutRes, parent, false)
return createViewHolder(view, viewType)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(activity).inflate(itemLayoutRes, parent, false)
return createViewHolder(view, viewType)
}
protected open fun createViewHolder(view: View, viewType: Int): ViewHolder {
return ViewHolder(view)
}
protected open fun createViewHolder(view: View, viewType: Int): ViewHolder {
return ViewHolder(view)
}
private fun getAlbumTitle(album: Album): String? {
return album.title
}
private fun getAlbumTitle(album: Album): String? {
return album.title
}
protected open fun getAlbumText(album: Album): String? {
return album.artistName
}
protected open fun getAlbumText(album: Album): String? {
return album.artistName
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val album = dataSet[position]
val isChecked = isChecked(album)
holder.itemView.isActivated = isChecked
holder.title?.text = getAlbumTitle(album)
holder.text?.text = getAlbumText(album)
holder.playSongs?.setOnClickListener {
album.songs?.let { songs ->
MusicPlayerRemote.openQueue(
songs, 0, true
)
}
}
loadAlbumCover(album, holder)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val album = dataSet[position]
val isChecked = isChecked(album)
holder.itemView.isActivated = isChecked
holder.title?.text = getAlbumTitle(album)
holder.text?.text = getAlbumText(album)
holder.playSongs?.setOnClickListener { album.songs?.let { songs -> MusicPlayerRemote.openQueue(songs, 0, true) } }
loadAlbumCover(album, holder)
}
protected open fun setColors(color: Int, holder: ViewHolder) {
if (holder.paletteColorContainer != null) {
holder.title?.setTextColor(
MaterialValueHelper.getPrimaryTextColor(activity, ColorUtil.isColorLight(color))
)
holder.text?.setTextColor(
MaterialValueHelper.getSecondaryTextColor(
activity, ColorUtil.isColorLight(
color
)
)
)
holder.paletteColorContainer?.setBackgroundColor(color)
}
protected open fun setColors(color: Int, holder: ViewHolder) {
if (holder.paletteColorContainer != null) {
holder.title?.setTextColor(MaterialValueHelper.getPrimaryTextColor(activity, ColorUtil.isColorLight(color)))
holder.text?.setTextColor(MaterialValueHelper.getSecondaryTextColor(activity, ColorUtil.isColorLight(color)))
holder.paletteColorContainer?.setBackgroundColor(color)
}
holder.mask?.backgroundTintList = ColorStateList.valueOf(color)
}
holder.mask?.backgroundTintList = ColorStateList.valueOf(color)
}
protected open fun loadAlbumCover(album: Album, holder: ViewHolder) {
if (holder.image == null) {
return
}
protected open fun loadAlbumCover(album: Album, holder: ViewHolder) {
if (holder.image == null) {
return
}
SongGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong())
.checkIgnoreMediaStore(activity).generatePalette(activity).build()
.into(object : RetroMusicColoredTarget(holder.image!!) {
override fun onLoadCleared(placeholder: Drawable?) {
super.onLoadCleared(placeholder)
setColors(defaultFooterColor, holder)
}
SongGlideRequest.Builder.from(Glide.with(activity), album.safeGetFirstSong())
.checkIgnoreMediaStore(activity).generatePalette(activity).build()
.into(object : RetroMusicColoredTarget(holder.image!!) {
override fun onLoadCleared(placeholder: Drawable?) {
super.onLoadCleared(placeholder)
setColors(defaultFooterColor, holder)
}
override fun onColorReady(color: Int) {
setColors(color, holder)
}
})
}
override fun onColorReady(color: Int) {
setColors(color, holder)
}
})
}
override fun getItemCount(): Int {
return dataSet.size
}
override fun getItemCount(): Int {
return dataSet.size
}
override fun getItemId(position: Int): Long {
return dataSet[position].id.toLong()
}
override fun getItemId(position: Int): Long {
return dataSet[position].id.toLong()
}
override fun getIdentifier(position: Int): Album? {
return dataSet[position]
}
override fun getIdentifier(position: Int): Album? {
return dataSet[position]
}
override fun getName(album: Album): String {
return album.title!!
}
override fun getName(album: Album): String {
return album.title!!
}
override fun onMultipleItemAction(
menuItem: MenuItem, selection: ArrayList<Album>
) {
SongsMenuHelper.handleMenuClick(activity, getSongList(selection), menuItem.itemId)
}
override fun onMultipleItemAction(
menuItem: MenuItem, selection: ArrayList<Album>
) {
SongsMenuHelper.handleMenuClick(activity, getSongList(selection), menuItem.itemId)
}
private fun getSongList(albums: List<Album>): ArrayList<Song> {
val songs = ArrayList<Song>()
for (album in albums) {
songs.addAll(album.songs!!)
}
return songs
}
private fun getSongList(albums: List<Album>): ArrayList<Song> {
val songs = ArrayList<Song>()
for (album in albums) {
songs.addAll(album.songs!!)
}
return songs
}
override fun getSectionName(position: Int): String {
var sectionName: String? = null
when (PreferenceUtil.getInstance(activity).albumSortOrder) {
SortOrder.AlbumSortOrder.ALBUM_A_Z, SortOrder.AlbumSortOrder.ALBUM_Z_A -> sectionName = dataSet[position].title
SortOrder.AlbumSortOrder.ALBUM_ARTIST -> sectionName = dataSet[position].artistName
SortOrder.AlbumSortOrder.ALBUM_YEAR -> return MusicUtil.getYearString(
dataSet[position].year
)
}
override fun getSectionName(position: Int): String {
var sectionName: String? = null
when (PreferenceUtil.getInstance(activity).albumSortOrder) {
SortOrder.AlbumSortOrder.ALBUM_A_Z, SortOrder.AlbumSortOrder.ALBUM_Z_A -> sectionName = dataSet[position].title
SortOrder.AlbumSortOrder.ALBUM_ARTIST -> sectionName = dataSet[position].artistName
SortOrder.AlbumSortOrder.ALBUM_YEAR -> return MusicUtil.getYearString(
dataSet[position].year
)
}
return MusicUtil.getSectionName(sectionName)
}
return MusicUtil.getSectionName(sectionName)
}
inner class ViewHolder(itemView: View) : MediaEntryViewHolder(itemView) {
inner class ViewHolder(itemView: View) : MediaEntryViewHolder(itemView) {
init {
setImageTransitionName(activity.getString(R.string.transition_album_art))
menu?.visibility = View.GONE
}
init {
setImageTransitionName(activity.getString(R.string.transition_album_art))
menu?.visibility = View.GONE
}
override fun onClick(v: View?) {
super.onClick(v)
if (isInQuickSelectMode) {
toggleChecked(adapterPosition)
} else {
val activityOptions = ActivityOptions.makeSceneTransitionAnimation(
activity, image, activity.getString(
R.string.transition_album_art
)
)
NavigationUtil.goToAlbumOptions(
activity, dataSet[adapterPosition].id, activityOptions
)
}
}
override fun onClick(v: View?) {
super.onClick(v)
if (isInQuickSelectMode) {
toggleChecked(adapterPosition)
} else {
val activityOptions = ActivityOptions.makeSceneTransitionAnimation(
activity, image, activity.getString(
R.string.transition_album_art
)
)
NavigationUtil.goToAlbumOptions(
activity, dataSet[adapterPosition].id, activityOptions
)
}
}
override fun onLongClick(v: View?): Boolean {
toggleChecked(adapterPosition)
return super.onLongClick(v)
}
}
override fun onLongClick(v: View?): Boolean {
toggleChecked(adapterPosition)
return super.onLongClick(v)
}
}
companion object {
val TAG: String = AlbumAdapter::class.java.simpleName
}
companion object {
val TAG: String = AlbumAdapter::class.java.simpleName
}
}

View file

@ -1,10 +1,13 @@
package code.name.monkey.retromusic.adapter.album
import android.graphics.drawable.Drawable
import android.view.*
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import code.name.monkey.appthemehelper.util.*
import code.name.monkey.retromusic.glide.*
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.MaterialValueHelper
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.glide.SongGlideRequest
import code.name.monkey.retromusic.helper.HorizontalAdapterHelper
import code.name.monkey.retromusic.interfaces.CabHolder
import code.name.monkey.retromusic.model.Album
@ -28,22 +31,8 @@ class HorizontalAlbumAdapter(
}
override fun setColors(color: Int, holder: ViewHolder) {
holder.title?.setTextColor(
MaterialValueHelper.getPrimaryTextColor(
activity,
ColorUtil.isColorLight(
color
)
)
)
holder.text?.setTextColor(
MaterialValueHelper.getSecondaryTextColor(
activity,
ColorUtil.isColorLight(
color
)
)
)
holder.title?.setTextColor(MaterialValueHelper.getPrimaryTextColor(activity, ColorUtil.isColorLight(color)))
holder.text?.setTextColor(MaterialValueHelper.getSecondaryTextColor(activity, ColorUtil.isColorLight(color)))
}
override fun loadAlbumCover(album: Album, holder: ViewHolder) {

View file

@ -65,7 +65,7 @@ open class AlbumsFragment : AbsLibraryPagerRecyclerViewCustomGridSizeFragment<Al
}
override fun setUsePalette(usePalette: Boolean) {
adapter!!.usePalette(usePalette)
adapter?.usePalette(usePalette)
}
override fun setGridSize(gridSize: Int) {

View file

@ -16,6 +16,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.webkit.MimeTypeMap;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
@ -47,7 +48,6 @@ import java.util.Objects;
import code.name.monkey.appthemehelper.ThemeStore;
import code.name.monkey.appthemehelper.common.ATHToolbarActivity;
import code.name.monkey.appthemehelper.util.ATHUtil;
import code.name.monkey.appthemehelper.util.ColorUtil;
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
import code.name.monkey.retromusic.R;
import code.name.monkey.retromusic.adapter.SongFileAdapter;
@ -87,15 +87,11 @@ public class FoldersFragment extends AbsMainActivityFragment implements
private static final int LOADER_ID = LoaderIds.Companion.getFOLDERS_FRAGMENT();
private View coordinatorLayout, empty;
private TextView emojiText;
private MaterialCardView toolbarContainer;
private Toolbar toolbar;
private BreadCrumbLayout breadCrumbs;
private AppBarLayout appBarLayout;
private FastScrollRecyclerView recyclerView;
private Comparator<File> fileComparator = (lhs, rhs) -> {
@ -151,6 +147,10 @@ public class FoldersFragment extends AbsMainActivityFragment implements
}
}
private String getEmojiByUnicode(int unicode) {
return new String(Character.toChars(unicode));
}
private void initViews(View view) {
coordinatorLayout = view.findViewById(R.id.coordinatorLayout);
toolbarContainer = view.findViewById(R.id.toolbarContainer);
@ -159,6 +159,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
breadCrumbs = view.findViewById(R.id.breadCrumbs);
toolbar = view.findViewById(R.id.toolbar);
empty = view.findViewById(android.R.id.empty);
emojiText = view.findViewById(R.id.emptyEmoji);
}
private void setCrumb(BreadCrumbLayout.Crumb crumb, boolean addToHistory) {
@ -232,13 +233,14 @@ public class FoldersFragment extends AbsMainActivityFragment implements
private void setUpAppbarColor() {
int primaryColor = ATHUtil.INSTANCE.resolveColor(requireContext(), R.attr.colorSurface);
getMainActivity().setSupportActionBar(toolbar);
toolbar.setBackgroundTintList(ColorStateList.valueOf(ATHUtil.INSTANCE.resolveColor(requireContext(), R.attr.colorSurface)));
toolbar.setBackgroundTintList(ColorStateList.valueOf(primaryColor));
toolbarContainer.setCardBackgroundColor(ColorStateList.valueOf(primaryColor));
toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
toolbar.setNavigationOnClickListener(v -> {
showMainMenu(OptionsSheetDialogFragment.FOLDER);
});
breadCrumbs.setActivatedContentColor(ToolbarContentTintHelper.toolbarTitleColor(requireActivity(), ColorUtil.INSTANCE.darkenColor(primaryColor)));
breadCrumbs.setDeactivatedContentColor(ToolbarContentTintHelper.toolbarSubtitleColor(requireActivity(), ColorUtil.INSTANCE.darkenColor(primaryColor)));
breadCrumbs.setActivatedContentColor(ATHUtil.INSTANCE.resolveColor(requireContext(), android.R.attr.textColorPrimary));
breadCrumbs.setDeactivatedContentColor(ATHUtil.INSTANCE.resolveColor(requireContext(), android.R.attr.textColorSecondary));
appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> getMainActivity().setLightStatusbar(!ATHUtil.INSTANCE.isWindowBackgroundDark(requireContext())));
toolbar.setOnClickListener(v -> {
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(getMainActivity(), toolbarContainer, getString(R.string.transition_toolbar));
@ -470,6 +472,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
}
private void checkIsEmpty() {
emojiText.setText(getEmojiByUnicode(0x1F631));
if (empty != null) {
empty.setVisibility(adapter == null || adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE);
}
@ -491,8 +494,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements
adapter.swapDataSet(files);
BreadCrumbLayout.Crumb crumb = getActiveCrumb();
if (crumb != null && recyclerView != null) {
((LinearLayoutManager) recyclerView.getLayoutManager())
.scrollToPositionWithOffset(crumb.getScrollPosition(), 0);
((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(crumb.getScrollPosition(), 0);
}
}

View file

@ -28,10 +28,10 @@ import com.bumptech.glide.request.animation.GlideAnimation
abstract class RetroMusicColoredTarget(view: ImageView) : BitmapPaletteTarget(view) {
protected val defaultFooterColor: Int
get() = ATHUtil.resolveColor(getView().context, R.attr.defaultFooterColor)
get() = ATHUtil.resolveColor(getView().context, R.attr.colorSurface)
protected val albumArtistFooterColor: Int
get() = ATHUtil.resolveColor(getView().context, R.attr.cardBackgroundColor)
get() = ATHUtil.resolveColor(getView().context, R.attr.colorSurface)
abstract fun onColorReady(color: Int)

View file

@ -48,9 +48,7 @@ interface ArtistsPresenter : Presenter<ArtistsView> {
override fun loadArtists() {
launch {
when (val result = repository.allArtists()) {
is Result.Success -> withContext(Dispatchers.Main) {
view?.artists(result.data)
}
is Result.Success -> withContext(Dispatchers.Main) { view?.artists(result.data) }
is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() }
}
}

View file

@ -48,7 +48,7 @@ class ColorIconsImageView : AppCompatImageView {
attributes.recycle()
}
private fun setIconBackgroundColor(color: Int) {
fun setIconBackgroundColor(color: Int) {
setBackgroundResource(R.drawable.color_circle_gradient)
if (ATHUtil.isWindowBackgroundDark(context) && PreferenceUtil.getInstance(context).desaturatedColor()) {
val desaturatedColor = RetroColorUtil.desaturateColor(color, 0.4f)

View file

@ -0,0 +1,56 @@
/*
* Copyright (c) 2019 Hemanth Savarala.
*
* 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.
*/
package code.name.monkey.retromusic.views
import android.content.Context
import android.graphics.Color
import android.util.AttributeSet
import android.view.View
import android.widget.FrameLayout
import code.name.monkey.retromusic.R
import kotlinx.android.synthetic.main.list_setting_item_view.view.*
/**
* Created by hemanths on 2019-12-10.
*/
class SettingListItemView : FrameLayout {
constructor(context: Context) : super(context) {
init(context, null)
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init(context, attrs)
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
init(context, attrs)
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) {
init(context, attrs)
}
private fun init(context: Context, attributeSet: AttributeSet?) {
View.inflate(context, R.layout.list_setting_item_view, this)
val typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.SettingListItemView)
icon as ColorIconsImageView
if (typedArray.hasValue(R.styleable.SettingListItemView_settingListItemIcon)) {
icon.setImageDrawable(typedArray.getDrawable(R.styleable.SettingListItemView_settingListItemIcon))
}
icon.setIconBackgroundColor(typedArray.getColor(R.styleable.SettingListItemView_settingListItemIconColor, Color.WHITE))
title.text = typedArray.getText(R.styleable.SettingListItemView_settingListItemTitle)
text.text = typedArray.getText(R.styleable.SettingListItemView_settingListItemText)
typedArray.recycle()
}
}

View file

@ -16,7 +16,6 @@ package code.name.monkey.retromusic.views;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
@ -27,14 +26,17 @@ public class StatusBarView extends View {
public StatusBarView(@NonNull Context context) {
super(context);
init(context);
}
public StatusBarView(@NonNull Context context, @NonNull AttributeSet attrs) {
super(context, attrs);
init(context);
}
public StatusBarView(@NonNull Context context, @NonNull AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public static int getStatusBarHeight(@NonNull Resources r) {
@ -46,6 +48,10 @@ public class StatusBarView extends View {
return result;
}
private void init(Context context) {
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), getStatusBarHeight(getResources()));