diff --git a/app/src/main/java/com/mikepenz/materialdrawer/app/DrawerActivity.kt b/app/src/main/java/com/mikepenz/materialdrawer/app/DrawerActivity.kt index 049141ef9..423b40cf4 100755 --- a/app/src/main/java/com/mikepenz/materialdrawer/app/DrawerActivity.kt +++ b/app/src/main/java/com/mikepenz/materialdrawer/app/DrawerActivity.kt @@ -20,9 +20,6 @@ import com.mikepenz.materialdrawer.iconics.iconicsIcon import com.mikepenz.materialdrawer.iconics.withIcon import com.mikepenz.materialdrawer.model.* import com.mikepenz.materialdrawer.model.interfaces.* -import com.mikepenz.materialdrawer.model.utils.descriptionRes -import com.mikepenz.materialdrawer.model.utils.nameRes -import com.mikepenz.materialdrawer.model.utils.nameText import com.mikepenz.materialdrawer.util.addItems import com.mikepenz.materialdrawer.util.updateBadge import com.mikepenz.materialdrawer.widget.AccountHeaderView @@ -47,15 +44,18 @@ class DrawerActivity : AppCompatActivity() { // Create a few sample profile // NOTE you have to define the loader logic too. See the CustomApplication for more details - val profile = ProfileDrawerItem().withName("Mike Penz").withEmail("mikepenz@gmail.com").withIcon("https://avatars3.githubusercontent.com/u/1476232?v=3&s=460").withIdentifier(100) - val profile2 = ProfileDrawerItem().withName("Demo User").withEmail("demo@github.com").withIcon("https://avatars2.githubusercontent.com/u/3597376?v=3&s=460").withIdentifier(101) - val profile3 = ProfileDrawerItem().withName("Max Muster").withEmail("max.mustermann@gmail.com").withIcon(R.drawable.profile2).withIdentifier(102) - val profile4 = ProfileDrawerItem().withName("Felix House").withEmail("felix.house@gmail.com").withIcon(R.drawable.profile3).withIdentifier(103) - val profile5 = ProfileDrawerItem().withName("Mr. X").withEmail("mister.x.super@gmail.com").withIcon(R.drawable.profile4).withIdentifier(104) - val profile6 = ProfileDrawerItem().withName("Batman").withEmail("batman@gmail.com").withIcon(R.drawable.profile5).withIdentifier(105).withBadge("123").withBadgeStyle(BadgeStyle().apply { - textColor = ColorHolder.fromColor(Color.BLACK) - color = ColorHolder.fromColor(Color.WHITE) - }) + val profile = ProfileDrawerItem().apply { nameText = "Mike Penz"; descriptionText = "mikepenz@gmail.com"; iconUrl = "https://avatars3.githubusercontent.com/u/1476232?v=3&s=460"; identifier = 100 } + val profile2 = ProfileDrawerItem().apply { nameText = "Demo User"; descriptionText = "demo@github.com"; iconUrl = "https://avatars2.githubusercontent.com/u/3597376?v=3&s=460"; identifier = 101 } + val profile3 = ProfileDrawerItem().apply { nameText = "Max Muster"; descriptionText = "max.mustermann@gmail.com"; iconRes = R.drawable.profile2; identifier = 102 } + val profile4 = ProfileDrawerItem().apply { nameText = "Felix House"; descriptionText = "felix.house@gmail.com"; iconRes = R.drawable.profile3; identifier = 103 } + val profile5 = ProfileDrawerItem().apply { nameText = "Mr. X"; descriptionText = "mister.x.super@gmail.com"; iconRes = R.drawable.profile4; identifier = 104 } + val profile6 = ProfileDrawerItem().apply { + nameText = "Batman"; descriptionText = "batman@gmail.com"; iconRes = R.drawable.profile5; identifier = 105; badgeText = "123"; + badgeStyle = BadgeStyle().apply { + textColor = ColorHolder.fromColor(Color.BLACK) + color = ColorHolder.fromColor(Color.WHITE) + } + } // Create the AccountHeader headerView = AccountHeaderView(this).apply { @@ -68,8 +68,8 @@ class DrawerActivity : AppCompatActivity() { profile5, profile6, //don't ask but google uses 14dp for the add account icon in gmail but 20dp for the normal icons (like manage account) - ProfileSettingDrawerItem().withName("Add Account").withDescription("Add new GitHub Account").withIcon(IconicsDrawable(context, GoogleMaterial.Icon.gmd_add).apply { actionBar(); paddingDp = 5 }.mutate()).withIconTinted(true).withIdentifier(PROFILE_SETTING.toLong()), - ProfileSettingDrawerItem().withName("Manage Account").withIcon(GoogleMaterial.Icon.gmd_settings).withIdentifier(100001) + ProfileSettingDrawerItem().apply { nameText = "Add Account"; descriptionText = "Add new GitHub Account"; iconDrawable = IconicsDrawable(context, GoogleMaterial.Icon.gmd_add).apply { actionBar(); paddingDp = 5 }.mutate(); isIconTinted = true; identifier = PROFILE_SETTING.toLong() }, + ProfileSettingDrawerItem().apply { nameText = "Manage Account"; iconicsIcon = GoogleMaterial.Icon.gmd_settings; identifier = 100001 } ) onAccountHeaderListener = { view, profile, current -> //sample usage of the onProfileChanged listener diff --git a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.kt b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.kt index 48292d373..1c91cd5df 100644 --- a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.kt +++ b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.kt @@ -1,5 +1,6 @@ package com.mikepenz.materialdrawer.app.drawerItems +import android.content.res.ColorStateList import android.view.View import androidx.annotation.LayoutRes import androidx.core.view.ViewCompat @@ -19,17 +20,10 @@ class AccountDividerDrawerItem : AbstractDrawerItem) { super.bindView(holder, payloads) diff --git a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/IconDrawerItem.kt b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/IconDrawerItem.kt index b227c3944..c4539b682 100644 --- a/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/IconDrawerItem.kt +++ b/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/IconDrawerItem.kt @@ -9,15 +9,18 @@ import androidx.recyclerview.widget.RecyclerView import com.mikepenz.materialdrawer.app.R import com.mikepenz.materialdrawer.holder.ImageHolder import com.mikepenz.materialdrawer.model.AbstractDrawerItem +import com.mikepenz.materialdrawer.model.interfaces.Iconable +import com.mikepenz.materialdrawer.model.interfaces.SelectIconable import com.mikepenz.materialdrawer.util.createDrawerItemColorStateList /** * Created by mikepenz on 03.02.15. */ -class IconDrawerItem : AbstractDrawerItem() { - var icon: ImageHolder? = null - var selectedIcon: ImageHolder? = null - var isIconTinted = false +class IconDrawerItem : AbstractDrawerItem(), Iconable, SelectIconable { + override var icon: ImageHolder? = null + override var iconColor: ColorStateList? = null + override var selectedIcon: ImageHolder? = null + override var isIconTinted = false override val type: Int get() = R.id.material_drawer_item_icon_only diff --git a/library-iconics/src/main/java/com/mikepenz/materialdrawer/iconics/IconicsExtension.kt b/library-iconics/src/main/java/com/mikepenz/materialdrawer/iconics/IconicsExtension.kt index 35bad6df2..f1db25bc0 100644 --- a/library-iconics/src/main/java/com/mikepenz/materialdrawer/iconics/IconicsExtension.kt +++ b/library-iconics/src/main/java/com/mikepenz/materialdrawer/iconics/IconicsExtension.kt @@ -3,9 +3,8 @@ package com.mikepenz.materialdrawer.iconics import android.os.Build import com.mikepenz.iconics.typeface.IIcon import com.mikepenz.materialdrawer.model.BaseDrawerItem -import com.mikepenz.materialdrawer.model.MiniProfileDrawerItem -import com.mikepenz.materialdrawer.model.ProfileDrawerItem -import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem +import com.mikepenz.materialdrawer.model.interfaces.Iconable +import com.mikepenz.materialdrawer.model.interfaces.withIconTintingEnabled var > T.iconicsIcon: IIcon @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") @@ -33,7 +32,7 @@ fun > T.withIcon(icon: IIcon): T { return this } -var T.iconicsIcon: IIcon +var T.iconicsIcon: IIcon @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") get() = throw UnsupportedOperationException("Please use the direct property") set(value) { @@ -41,33 +40,7 @@ var T.iconicsIcon: IIcon } @Deprecated("Please consider to replace with the actual property setter") -fun ProfileDrawerItem.withIcon(icon: IIcon): ProfileDrawerItem { - this.icon = IconicsImageHolder(icon) - return this -} - -var T.iconicsIcon: IIcon - @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") - get() = throw UnsupportedOperationException("Please use the direct property") - set(value) { - this.icon = IconicsImageHolder(value) - } - -@Deprecated("Please consider to replace with the actual property setter") -fun ProfileSettingDrawerItem.withIcon(icon: IIcon): ProfileSettingDrawerItem { - this.icon = IconicsImageHolder(icon) - return this -} - -var T.iconicsIcon: IIcon - @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") - get() = throw UnsupportedOperationException("Please use the direct property") - set(value) { - this.icon = IconicsImageHolder(value) - } - -@Deprecated("Please consider to replace with the actual property setter") -fun MiniProfileDrawerItem.withIcon(icon: IIcon): MiniProfileDrawerItem { +fun T.withIcon(icon: IIcon): T { this.icon = IconicsImageHolder(icon) return this } \ No newline at end of file diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.kt index f357096ec..8782d4fd6 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.kt @@ -7,8 +7,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.CallSuper -import androidx.annotation.ColorInt -import androidx.annotation.ColorRes import androidx.recyclerview.widget.RecyclerView import com.google.android.material.shape.ShapeAppearanceModel import com.mikepenz.fastadapter.IItemVHFactory @@ -17,38 +15,39 @@ import com.mikepenz.fastadapter.ISubItem import com.mikepenz.materialdrawer.R import com.mikepenz.materialdrawer.holder.ColorHolder import com.mikepenz.materialdrawer.interfaces.OnPostBindViewListener -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem -import com.mikepenz.materialdrawer.model.interfaces.Selectable -import com.mikepenz.materialdrawer.model.interfaces.Tagable -import com.mikepenz.materialdrawer.model.interfaces.Typefaceable +import com.mikepenz.materialdrawer.model.interfaces.* import com.mikepenz.materialdrawer.util.getPrimaryDrawerTextColor import com.mikepenz.materialdrawer.util.getSelectedColor /** * The base abstract [IDrawerItem] implementation describing a drawerItem with the general functionality */ -abstract class AbstractDrawerItem : IDrawerItem, Selectable, Tagable, Typefaceable { +abstract class AbstractDrawerItem : IDrawerItem, Selectable, SelectableColor, Tagable, Typefaceable { // the identifier for this item override var identifier: Long = -1 // the tag for this item override var tag: Any? = null + // defines if this item is enabled override var isEnabled = true + /** The factory to use for creating this item, this does not have to be provided if the IItemFactory is implemented by this item too */ override val factory: IItemVHFactory? = null + // defines if the item is selected override var isSelected = false + // defines if this item is selectable override var isSelectable = true + // defines if the item's background' change should be animated when it is (de)selected var isSelectedBackgroundAnimated = true + // defines the content descripton of items var contentDescription: String? = null - var selectedColor: ColorHolder? = null - var textColor: ColorStateList? = null - var iconColor: ColorStateList? = null + override var selectedColor: ColorHolder? = null override var typeface: Typeface? = null open var onDrawerItemClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null @@ -58,6 +57,7 @@ abstract class AbstractDrawerItem : IDrawerItem // the parent of this item override var parent: IParentItem<*>? = null + // the subItems to expand for this item private var _subItems: MutableList> = mutableListOf() override var subItems: MutableList> @@ -89,18 +89,6 @@ abstract class AbstractDrawerItem : IDrawerItem return this as T } - @Deprecated("Please consider to replace with the actual property setter") - fun withSelectedColor(@ColorInt selectedColor: Int): T { - this.selectedColor = ColorHolder.fromColor(selectedColor) - return this as T - } - - @Deprecated("Please consider to replace with the actual property setter") - fun withSelectedColorRes(@ColorRes selectedColorRes: Int): T { - this.selectedColor = ColorHolder.fromColorRes(selectedColorRes) - return this as T - } - /** * set if this item is selectable * @@ -188,12 +176,6 @@ abstract class AbstractDrawerItem : IDrawerItem return this as T } - @Deprecated("Please consider to replace with the actual property setter") - fun withIconColor(iconColor: ColorStateList): T { - this.iconColor = iconColor - return this as T - } - /** * generates a view by the defined LayoutRes * diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.kt index 1ea9798ab..b1293afcf 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.kt @@ -1,9 +1,10 @@ package com.mikepenz.materialdrawer.model import android.content.res.ColorStateList -import androidx.annotation.StringRes import com.mikepenz.materialdrawer.holder.ImageHolder import com.mikepenz.materialdrawer.holder.StringHolder +import com.mikepenz.materialdrawer.model.interfaces.Describable +import com.mikepenz.materialdrawer.model.interfaces.DescribableColor import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem import com.mikepenz.materialdrawer.util.getSecondaryDrawerTextColor import com.mikepenz.materialdrawer.util.setDrawerVerticalPadding @@ -12,21 +13,9 @@ import com.mikepenz.materialdrawer.util.themeDrawerItem /** * An abstract [IDrawerItem] implementation describing a drawerItem with support for a description */ -abstract class BaseDescribeableDrawerItem : BaseDrawerItem() { - var description: StringHolder? = null - var descriptionTextColor: ColorStateList? = null - - @Deprecated("Please consider to replace with the actual property setter") - fun withDescription(description: String): T { - this.description = StringHolder(description) - return this as T - } - - @Deprecated("Please consider to replace with the actual property setter") - fun withDescription(@StringRes descriptionRes: Int): T { - this.description = StringHolder(descriptionRes) - return this as T - } +abstract class BaseDescribeableDrawerItem : BaseDrawerItem(), Describable, DescribableColor { + override var description: StringHolder? = null + override var descriptionTextColor: ColorStateList? = null /** * a helper method to have the logic for all secondaryDrawerItems only once diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDrawerItem.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDrawerItem.kt index 4e8a84a8a..fd6e8926e 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDrawerItem.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/BaseDrawerItem.kt @@ -2,54 +2,26 @@ package com.mikepenz.materialdrawer.model import android.content.Context import android.content.res.ColorStateList -import android.graphics.drawable.Drawable -import androidx.annotation.DrawableRes import androidx.recyclerview.widget.RecyclerView import com.mikepenz.materialdrawer.holder.ImageHolder import com.mikepenz.materialdrawer.holder.StringHolder -import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem -import com.mikepenz.materialdrawer.model.interfaces.Iconable -import com.mikepenz.materialdrawer.model.interfaces.Nameable -import com.mikepenz.materialdrawer.model.interfaces.Tagable +import com.mikepenz.materialdrawer.model.interfaces.* import com.mikepenz.materialdrawer.util.getPrimaryDrawerIconColor /** * An abstract [IDrawerItem] implementation providing the base properties with their default value */ -abstract class BaseDrawerItem : AbstractDrawerItem(), Nameable, Iconable, Tagable { +abstract class BaseDrawerItem : AbstractDrawerItem(), Nameable, NameableColor, Iconable, SelectIconable, Tagable { override var icon: ImageHolder? = null - var selectedIcon: ImageHolder? = null + override var iconColor: ColorStateList? = null + override var selectedIcon: ImageHolder? = null override var name: StringHolder? = null - var isIconTinted = false + override var textColor: ColorStateList? = null + override var isIconTinted = false var level = 1 protected set - @Deprecated("Please consider to replace with the actual property setter") - fun withSelectedIcon(selectedIcon: Drawable): T { - this.selectedIcon = ImageHolder(selectedIcon) - return this as T - } - - @Deprecated("Please consider to replace with the actual property setter") - fun withSelectedIcon(@DrawableRes selectedIconRes: Int): T { - this.selectedIcon = ImageHolder(selectedIconRes) - return this as T - } - - /** - * will tint the icon with the default (or set) colors - * (default and selected state) - * - * @param iconTintingEnabled - * @return - */ - @Deprecated("Please consider to replace with the actual property setter") - fun withIconTintingEnabled(iconTintingEnabled: Boolean): T { - this.isIconTinted = iconTintingEnabled - return this as T - } - @Deprecated("Please consider to replace with the actual property setter") fun withLevel(level: Int): T { this.level = level diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.kt index 3c7b84ff5..91d9c522c 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.kt @@ -1,5 +1,6 @@ package com.mikepenz.materialdrawer.model +import android.content.res.ColorStateList import android.view.View import android.widget.ImageView import androidx.annotation.DimenRes @@ -16,6 +17,7 @@ import com.mikepenz.materialdrawer.model.interfaces.IProfile */ open class MiniProfileDrawerItem : AbstractDrawerItem, IProfile { override var icon: ImageHolder? = null + override var iconColor: ColorStateList? = null // not supported for this item override var name: StringHolder? = null override var description: StringHolder? = null var customHeight: DimenHolder? = null diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.kt index 35be97327..1ed8fe037 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.kt @@ -1,5 +1,6 @@ package com.mikepenz.materialdrawer.model +import android.content.res.ColorStateList import android.view.View import android.widget.ImageView import android.widget.TextView @@ -9,9 +10,7 @@ import com.mikepenz.materialdrawer.R import com.mikepenz.materialdrawer.holder.BadgeStyle import com.mikepenz.materialdrawer.holder.ImageHolder import com.mikepenz.materialdrawer.holder.StringHolder -import com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable -import com.mikepenz.materialdrawer.model.interfaces.IProfile -import com.mikepenz.materialdrawer.model.interfaces.Tagable +import com.mikepenz.materialdrawer.model.interfaces.* import com.mikepenz.materialdrawer.util.DrawerImageLoader import com.mikepenz.materialdrawer.util.DrawerUtils.setDrawerVerticalPadding import com.mikepenz.materialdrawer.util.themeDrawerItem @@ -19,10 +18,13 @@ import com.mikepenz.materialdrawer.util.themeDrawerItem /** * Describes a [IProfile] being used with the [com.mikepenz.materialdrawer.widget.AccountHeaderView] */ -open class ProfileDrawerItem : AbstractDrawerItem(), IProfile, Tagable, ColorfulBadgeable { +open class ProfileDrawerItem : AbstractDrawerItem(), IProfile, Tagable, ColorfulBadgeable, NameableColor, DescribableColor { override var icon: ImageHolder? = null + override var iconColor: ColorStateList? = null // not supported for this item override var name: StringHolder? = null + override var textColor: ColorStateList? = null override var description: StringHolder? = null + override var descriptionTextColor: ColorStateList? = null var isNameShown = false override var badge: StringHolder? = null @@ -71,6 +73,7 @@ open class ProfileDrawerItem : AbstractDrawerItem(), IProfile, Tagable, Typefaceable, ColorfulBadgeable { +open class ProfileSettingDrawerItem : AbstractDrawerItem(), IProfile, Tagable, Typefaceable, ColorfulBadgeable, NameableColor, DescribableColor, SelectIconable { override var icon: ImageHolder? = null + override var iconColor: ColorStateList? = null + override var selectedIcon: ImageHolder? = null override var name: StringHolder? = null + override var textColor: ColorStateList? = null override var description: StringHolder? = null - - var isIconTinted = false - var descriptionTextColor: ColorStateList? = null + override var descriptionTextColor: ColorStateList? = null + override var isIconTinted = false override var badge: StringHolder? = null override var badgeStyle: BadgeStyle? = BadgeStyle() @@ -43,24 +41,6 @@ open class ProfileSettingDrawerItem : AbstractDrawerItem) { super.bindView(holder, payloads) @@ -118,7 +98,9 @@ open class ProfileSettingDrawerItem : AbstractDrawerItem Padding not applied via xml setDrawerVerticalPadding(holder.view) diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.kt index 077f38f1a..22b39ce07 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.kt @@ -1,5 +1,6 @@ package com.mikepenz.materialdrawer.model +import android.content.res.ColorStateList import android.view.View import android.widget.TextView import androidx.annotation.LayoutRes @@ -8,6 +9,7 @@ import com.mikepenz.materialdrawer.R import com.mikepenz.materialdrawer.holder.StringHolder import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem import com.mikepenz.materialdrawer.model.interfaces.Nameable +import com.mikepenz.materialdrawer.model.interfaces.NameableColor import com.mikepenz.materialdrawer.model.interfaces.Typefaceable import com.mikepenz.materialdrawer.util.getDividerColor import com.mikepenz.materialdrawer.util.getSecondaryDrawerTextColor @@ -15,9 +17,10 @@ import com.mikepenz.materialdrawer.util.getSecondaryDrawerTextColor /** * Describes a [IDrawerItem] acting as a divider with description to describe a section. */ -open class SectionDrawerItem : AbstractDrawerItem(), Nameable, Typefaceable { +open class SectionDrawerItem : AbstractDrawerItem(), Nameable, NameableColor, Typefaceable { var divider = true override var name: StringHolder? = null + override var textColor: ColorStateList? = null override var isEnabled: Boolean = false override var isSelected: Boolean = false @@ -46,8 +49,10 @@ open class SectionDrawerItem : AbstractDrawerItem T.withBadge(badge: StringHolder?): T { this.badge = badge return this } + +/** Set the badge name */ +var Badgeable.badgeRes: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + badge = StringHolder(value) + } + +/** Set the badge name */ +var Badgeable.badgeText: CharSequence + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + badge = StringHolder(value) + } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/ColorfulBadgeable.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/ColorfulBadgeable.kt index afc6d548c..6d54b440d 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/ColorfulBadgeable.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/ColorfulBadgeable.kt @@ -6,6 +6,7 @@ import com.mikepenz.materialdrawer.holder.BadgeStyle * Defines a [IDrawerItem] which allows to have a colorful badge */ interface ColorfulBadgeable : Badgeable { + /** defines the style for the badge in the item */ var badgeStyle: BadgeStyle? } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Describable.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Describable.kt new file mode 100644 index 000000000..84a66f07b --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Describable.kt @@ -0,0 +1,40 @@ +package com.mikepenz.materialdrawer.model.interfaces + +import androidx.annotation.StringRes +import com.mikepenz.materialdrawer.holder.StringHolder + +/** + * Defines a [IDrawerItem] with support for defining a description + */ +interface Describable { + /** The text to show as description */ + var description: StringHolder? +} + +@Deprecated("Please consider to replace with the actual property setter") +fun T.withDescription(description: String): T { + this.description = StringHolder(description) + return this +} + +@Deprecated("Please consider to replace with the actual property setter") +fun T.withDescription(@StringRes descriptionRes: Int): T { + this.description = StringHolder(descriptionRes) + return this +} + +/** Set the description */ +var Describable.descriptionRes: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + description = StringHolder(value) + } + +/** Set the description */ +var Describable.descriptionText: CharSequence + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + description = StringHolder(value) + } \ No newline at end of file diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/DescribableColor.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/DescribableColor.kt new file mode 100644 index 000000000..f7b123ae6 --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/DescribableColor.kt @@ -0,0 +1,30 @@ +package com.mikepenz.materialdrawer.model.interfaces + +import android.content.res.ColorStateList +import androidx.annotation.ColorInt +import androidx.annotation.ColorRes +import com.mikepenz.materialdrawer.holder.ColorHolder + +/** + * Defines a [IDrawerItem] with support for defining a description + */ +interface DescribableColor { + /** The color for the description text */ + var descriptionTextColor: ColorStateList? +} + +/** Set the description color as color resource */ +var SelectableColor.descriptionTextColorRes: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(@ColorRes value) { + selectedColor = ColorHolder.fromColorRes(value) + } + +/** Set the description color as color int */ +var SelectableColor.descriptionTextColorInt: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(@ColorInt value) { + selectedColor = ColorHolder.fromColor(value) + } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IProfile.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IProfile.kt index fb6bac746..a29f83392 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IProfile.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IProfile.kt @@ -7,8 +7,7 @@ import com.mikepenz.materialdrawer.holder.StringHolder /** * Defines a general [IProfile] to be displayed in the [com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView] with the [com.mikepenz.materialdrawer.widget.AccountHeaderView] */ -interface IProfile : IIdentifyable, Nameable, Iconable, Selectable, Tagable { - var description: StringHolder? +interface IProfile : IIdentifyable, Nameable, Iconable, Selectable, Tagable, Describable { } @Deprecated("Please consider to replace with the actual property setter") @@ -22,15 +21,3 @@ fun T.withEmail(email: String?): T { this.description = StringHolder(email) return this } - -@Deprecated("Please consider to replace with the actual property setter") -fun T.withDescription(@StringRes emailRes: Int): T { - this.description = StringHolder(emailRes) - return this -} - -@Deprecated("Please consider to replace with the actual property setter") -fun T.withDescription(email: String?): T { - this.description = StringHolder(email) - return this -} \ No newline at end of file diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Iconable.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Iconable.kt index 2cefdf9f4..4732b9218 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Iconable.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Iconable.kt @@ -1,5 +1,6 @@ package com.mikepenz.materialdrawer.model.interfaces +import android.content.res.ColorStateList import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.net.Uri @@ -10,9 +11,47 @@ import com.mikepenz.materialdrawer.holder.ImageHolder * Defines a [IDrawerItem] with support for an icon */ interface Iconable { + /** the icon to show in the drawer */ var icon: ImageHolder? + + /** the color of the icon */ + var iconColor: ColorStateList? +} + +@Deprecated("Please consider to replace with the actual property setter") +fun T.withIconColor(iconColor: ColorStateList): T { + this.iconColor = iconColor + return this } +var T.iconDrawable: Drawable + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + this.icon = ImageHolder(value) + } + +var T.iconBitmap: Bitmap + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + this.icon = ImageHolder(value) + } + +var T.iconRes: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(@DrawableRes value) { + this.icon = ImageHolder(value) + } + +var T.iconUrl: String + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + this.icon = ImageHolder(value) + } + @Deprecated("Please consider to replace with the actual property setter") fun T.withIcon(icon: Drawable?): T { this.icon = ImageHolder(icon) diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Nameable.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Nameable.kt index e2d1ed4be..335d9e4fe 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Nameable.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Nameable.kt @@ -7,6 +7,7 @@ import com.mikepenz.materialdrawer.holder.StringHolder * Defines a [IDrawerItem] with support for defining a name */ interface Nameable { + /** the name to show for the item */ var name: StringHolder? } @@ -26,4 +27,20 @@ fun T.withName(@StringRes name: Int): T { fun T.withName(name: StringHolder?): T { this.name = name return this -} \ No newline at end of file +} + +/** Set the name */ +var Nameable.nameRes: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + name = StringHolder(value) + } + +/** Set the name */ +var Nameable.nameText: CharSequence + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + name = StringHolder(value) + } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/NameableColor.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/NameableColor.kt new file mode 100644 index 000000000..b5629b9eb --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/NameableColor.kt @@ -0,0 +1,30 @@ +package com.mikepenz.materialdrawer.model.interfaces + +import android.content.res.ColorStateList +import androidx.annotation.ColorInt +import androidx.annotation.ColorRes +import com.mikepenz.materialdrawer.holder.ColorHolder + +/** + * Defines a [IDrawerItem] with support for defining a name + */ +interface NameableColor { + /** defines the color for the text */ + var textColor: ColorStateList? +} + +/** Set the selected text color as color resource */ +var SelectableColor.textColorRes: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(@ColorRes value) { + selectedColor = ColorHolder.fromColorRes(value) + } + +/** Set the selected text color as color int */ +var SelectableColor.textColorInt: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(@ColorInt value) { + selectedColor = ColorHolder.fromColor(value) + } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/SelectIconable.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/SelectIconable.kt new file mode 100644 index 000000000..ce685dc2e --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/SelectIconable.kt @@ -0,0 +1,71 @@ +package com.mikepenz.materialdrawer.model.interfaces + +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import androidx.annotation.DrawableRes +import com.mikepenz.materialdrawer.holder.ImageHolder + +/** + * Defines a [IDrawerItem] with support for an icon + */ +interface SelectIconable { + /** the icon to show when this item gets selected */ + var selectedIcon: ImageHolder? + + /** defines if the icon should get proper tinting with the defined color */ + var isIconTinted: Boolean +} + +var T.selectedIconDrawable: Drawable + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + this.icon = ImageHolder(value) + } + +var T.selectedIconBitmap: Bitmap + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + this.icon = ImageHolder(value) + } + +var T.selectedIconRes: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(@DrawableRes value) { + this.icon = ImageHolder(value) + } + +var T.selectedIconUrl: String + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(value) { + this.icon = ImageHolder(value) + } + +@Deprecated("Please consider to replace with the actual property setter") +fun T.withSelectedIcon(selectedIcon: Drawable): T { + this.selectedIcon = ImageHolder(selectedIcon) + return this as T +} + +@Deprecated("Please consider to replace with the actual property setter") +fun T.withSelectedIcon(@DrawableRes selectedIconRes: Int): T { + this.selectedIcon = ImageHolder(selectedIconRes) + return this as T +} + +/** will tint the icon with the default (or set) colors (default and selected state) */ +@Deprecated("Please consider to replace with the actual property setter") +fun T.withIconTintingEnabled(iconTintingEnabled: Boolean): T { + this.isIconTinted = iconTintingEnabled + return this as T +} + +/** will tint the icon with the default (or set) colors (default and selected state) */ +@Deprecated("Please consider to replace with the actual property setter") +fun T.withIconTinted(iconTintingEnabled: Boolean): T { + this.isIconTinted = iconTintingEnabled + return this as T +} \ No newline at end of file diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Selectable.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Selectable.kt index 3447b7ff1..c0492486b 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Selectable.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Selectable.kt @@ -4,7 +4,6 @@ package com.mikepenz.materialdrawer.model.interfaces * Defines a [IDrawerItem] with support for being selected */ interface Selectable { - /** If the item is selectable */ var isSelectable: Boolean } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/SelectableColor.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/SelectableColor.kt new file mode 100644 index 000000000..bea9d56b2 --- /dev/null +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/SelectableColor.kt @@ -0,0 +1,42 @@ +package com.mikepenz.materialdrawer.model.interfaces + +import androidx.annotation.ColorInt +import androidx.annotation.ColorRes +import com.mikepenz.materialdrawer.holder.ColorHolder + +/** + * Defines a [IDrawerItem] with support for having a different color when selected + */ +interface SelectableColor { + /** The background color of a selectable item */ + var selectedColor: ColorHolder? +} + + +@Deprecated("Please consider to replace with the actual property setter") +fun T.withSelectedColor(@ColorInt selectedColor: Int): T { + this.selectedColor = ColorHolder.fromColor(selectedColor) + return this +} + +@Deprecated("Please consider to replace with the actual property setter") +fun T.withSelectedColorRes(@ColorRes selectedColorRes: Int): T { + this.selectedColor = ColorHolder.fromColorRes(selectedColorRes) + return this +} + +/** Set the selected color as color resource */ +var SelectableColor.selectedColorRes: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(@ColorRes value) { + selectedColor = ColorHolder.fromColorRes(value) + } + +/** Set the selected color as color int */ +var SelectableColor.selectedColorInt: Int + @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") + get() = throw UnsupportedOperationException("Please use the direct property") + set(@ColorInt value) { + selectedColor = ColorHolder.fromColor(value) + } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Tagable.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Tagable.kt index 464547f76..b480e5fac 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Tagable.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Tagable.kt @@ -4,6 +4,7 @@ package com.mikepenz.materialdrawer.model.interfaces * Defines a [IDrawerItem] with support for being tagged */ interface Tagable { + /** specify a tag attached to the item to use for different situations */ var tag: Any? } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Typefaceable.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Typefaceable.kt index 58d95fcea..c6d42d4b0 100644 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Typefaceable.kt +++ b/library/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Typefaceable.kt @@ -6,6 +6,7 @@ import android.graphics.Typeface * Defines a [IDrawerItem] with support for defining the [Typeface] */ interface Typefaceable { + /** the typeface used for texts */ var typeface: Typeface? } diff --git a/library/src/main/java/com/mikepenz/materialdrawer/model/utils/DrawerItemExtensions.kt b/library/src/main/java/com/mikepenz/materialdrawer/model/utils/DrawerItemExtensions.kt deleted file mode 100644 index 60a3a9000..000000000 --- a/library/src/main/java/com/mikepenz/materialdrawer/model/utils/DrawerItemExtensions.kt +++ /dev/null @@ -1,57 +0,0 @@ -package com.mikepenz.materialdrawer.model.utils - -import androidx.annotation.ColorInt -import androidx.annotation.ColorRes -import com.mikepenz.materialdrawer.holder.ColorHolder -import com.mikepenz.materialdrawer.holder.StringHolder -import com.mikepenz.materialdrawer.model.AbstractDrawerItem -import com.mikepenz.materialdrawer.model.BaseDescribeableDrawerItem -import com.mikepenz.materialdrawer.model.BaseDrawerItem - -/** Set the name */ -var BaseDrawerItem<*, *>.nameRes: Int - @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") - get() = throw UnsupportedOperationException("Please use the direct property") - set(value) { - name = StringHolder(value) - } - -/** Set the name */ -var BaseDrawerItem<*, *>.nameText: CharSequence - @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") - get() = throw UnsupportedOperationException("Please use the direct property") - set(value) { - name = StringHolder(value) - } - -/** Set the description */ -var BaseDescribeableDrawerItem<*, *>.descriptionRes: Int - @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") - get() = throw UnsupportedOperationException("Please use the direct property") - set(value) { - description = StringHolder(value) - } - -/** Set the description */ -var BaseDescribeableDrawerItem<*, *>.descriptionText: CharSequence - @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") - get() = throw UnsupportedOperationException("Please use the direct property") - set(value) { - description = StringHolder(value) - } - -/** Set the selected color as color resource */ -var AbstractDrawerItem<*, *>.selectedColorRes: Int - @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") - get() = throw UnsupportedOperationException("Please use the direct property") - set(@ColorRes value) { - selectedColor = ColorHolder.fromColorRes(value) - } - -/** Set the selected color as color resource */ -var AbstractDrawerItem<*, *>.selectedColorInt: Int - @Deprecated(level = DeprecationLevel.ERROR, message = "Not readable") - get() = throw UnsupportedOperationException("Please use the direct property") - set(@ColorInt value) { - selectedColor = ColorHolder.fromColor(value) - } \ No newline at end of file