Switched primary <=> secodary items for drawer.
Added source icon fetching.
This commit is contained in:
parent
f363bbcc0c
commit
95f267f701
@ -5,6 +5,7 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
@ -21,6 +22,7 @@ import android.util.DisplayMetrics
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.Toast
|
||||
import apps.amine.bou.readerforselfoss.adapters.ItemCardAdapter
|
||||
import apps.amine.bou.readerforselfoss.adapters.ItemListAdapter
|
||||
@ -30,10 +32,12 @@ import apps.amine.bou.readerforselfoss.utils.Config
|
||||
import apps.amine.bou.readerforselfoss.utils.checkAndDisplayStoreApk
|
||||
import apps.amine.bou.readerforselfoss.utils.checkApkVersion
|
||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||
import apps.amine.bou.readerforselfoss.utils.drawer.CustomUrlPrimaryDrawerItem
|
||||
import apps.amine.bou.readerforselfoss.utils.longHash
|
||||
import com.anupcowkur.reservoir.Reservoir
|
||||
import com.anupcowkur.reservoir.ReservoirGetCallback
|
||||
import com.anupcowkur.reservoir.ReservoirPutCallback
|
||||
import com.bumptech.glide.Glide
|
||||
import com.crashlytics.android.answers.Answers
|
||||
import com.crashlytics.android.answers.InviteEvent
|
||||
import com.github.stkent.amplify.prompt.DefaultLayoutPromptView
|
||||
@ -45,11 +49,14 @@ import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.mikepenz.aboutlibraries.Libs
|
||||
import com.mikepenz.aboutlibraries.LibsBuilder
|
||||
import com.mikepenz.iconics.IconicsDrawable
|
||||
import com.mikepenz.materialdrawer.Drawer
|
||||
import com.mikepenz.materialdrawer.DrawerBuilder
|
||||
import com.mikepenz.materialdrawer.model.DividerDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
||||
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
||||
import com.roughike.bottombar.BottomBar
|
||||
import com.roughike.bottombar.BottomBarTab
|
||||
import retrofit2.Call
|
||||
@ -187,7 +194,7 @@ class HomeActivity : AppCompatActivity() {
|
||||
fun handleTags(maybeTags: List<Tag>?) {
|
||||
if (maybeTags == null) {
|
||||
if (loadedFromCache)
|
||||
drawer!!.addItem(PrimaryDrawerItem().withName(getString(R.string.drawer_error_loading_tags)).withSelectable(false))
|
||||
drawer!!.addItem(SecondaryDrawerItem().withName(getString(R.string.drawer_error_loading_tags)).withSelectable(false))
|
||||
}
|
||||
else {
|
||||
for (tag in maybeTags) {
|
||||
@ -197,7 +204,7 @@ class HomeActivity : AppCompatActivity() {
|
||||
gd.setSize(30, 30)
|
||||
gd.cornerRadius = 30F
|
||||
drawer!!.addItem(
|
||||
SecondaryDrawerItem()
|
||||
PrimaryDrawerItem()
|
||||
.withName(tag.tag)
|
||||
.withIdentifier(longHash(tag.tag))
|
||||
.withIcon(gd)
|
||||
@ -214,14 +221,15 @@ class HomeActivity : AppCompatActivity() {
|
||||
fun handleSources(maybeSources: List<Sources>?) {
|
||||
if (maybeSources == null) {
|
||||
if (loadedFromCache)
|
||||
drawer!!.addItem(PrimaryDrawerItem().withName(getString(R.string.drawer_error_loading_sources)).withSelectable(false))
|
||||
drawer!!.addItem(SecondaryDrawerItem().withName(getString(R.string.drawer_error_loading_sources)).withSelectable(false))
|
||||
}
|
||||
else
|
||||
for (tag in maybeSources)
|
||||
drawer!!.addItem(
|
||||
SecondaryDrawerItem()
|
||||
CustomUrlPrimaryDrawerItem()
|
||||
.withName(tag.title)
|
||||
.withIdentifier(tag.id.toLong())
|
||||
.withIcon(tag.getIcon(this@HomeActivity))
|
||||
.withOnDrawerItemClickListener { _, _, _ ->
|
||||
getElementsAccordingToTab(maybeSourceFilter = tag)
|
||||
false
|
||||
@ -233,7 +241,7 @@ class HomeActivity : AppCompatActivity() {
|
||||
drawer!!.removeAllItems()
|
||||
if (maybeDrawerData != null) {
|
||||
drawer!!.addItem(
|
||||
PrimaryDrawerItem()
|
||||
SecondaryDrawerItem()
|
||||
.withName(getString(R.string.drawer_item_filters))
|
||||
.withSelectable(false)
|
||||
.withIdentifier(DRAWER_ID_FILTERS)
|
||||
@ -244,10 +252,10 @@ class HomeActivity : AppCompatActivity() {
|
||||
}
|
||||
)
|
||||
drawer!!.addItem(DividerDrawerItem())
|
||||
drawer!!.addItem(PrimaryDrawerItem().withName(getString(R.string.drawer_item_tags)).withIdentifier(DRAWER_ID_TAGS).withSelectable(false))
|
||||
drawer!!.addItem(SecondaryDrawerItem().withName(getString(R.string.drawer_item_tags)).withIdentifier(DRAWER_ID_TAGS).withSelectable(false))
|
||||
handleTags(maybeDrawerData.tags)
|
||||
drawer!!.addItem(
|
||||
PrimaryDrawerItem()
|
||||
SecondaryDrawerItem()
|
||||
.withName(getString(R.string.drawer_item_sources))
|
||||
.withIdentifier(DRAWER_ID_TAGS)
|
||||
.withBadge(getString(R.string.drawer_action_edit))
|
||||
@ -271,8 +279,8 @@ class HomeActivity : AppCompatActivity() {
|
||||
})
|
||||
} else {
|
||||
if (!loadedFromCache) {
|
||||
drawer!!.addItem(SecondaryDrawerItem().withName(getString(R.string.no_tags_loaded)).withIdentifier(DRAWER_ID_TAGS).withSelectable(false))
|
||||
drawer!!.addItem(SecondaryDrawerItem().withName(getString(R.string.no_sources_loaded)).withIdentifier(DRAWER_ID_SOURCES).withSelectable(false))
|
||||
drawer!!.addItem(PrimaryDrawerItem().withName(getString(R.string.no_tags_loaded)).withIdentifier(DRAWER_ID_TAGS).withSelectable(false))
|
||||
drawer!!.addItem(PrimaryDrawerItem().withName(getString(R.string.no_sources_loaded)).withIdentifier(DRAWER_ID_SOURCES).withSelectable(false))
|
||||
}
|
||||
}
|
||||
|
||||
@ -311,7 +319,7 @@ class HomeActivity : AppCompatActivity() {
|
||||
})
|
||||
}
|
||||
|
||||
drawer!!.addItem(SecondaryDrawerItem().withName(getString(R.string.drawer_loading)).withSelectable(false))
|
||||
drawer!!.addItem(PrimaryDrawerItem().withName(getString(R.string.drawer_loading)).withSelectable(false))
|
||||
|
||||
val resultType = object : TypeToken<DrawerData>() {}.type
|
||||
Reservoir.getAsync("drawerData", resultType, object: ReservoirGetCallback<DrawerData> {
|
||||
|
@ -1,10 +1,18 @@
|
||||
package apps.amine.bou.readerforselfoss
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.support.multidex.MultiDexApplication
|
||||
import android.widget.ImageView
|
||||
import com.crashlytics.android.Crashlytics
|
||||
import com.github.stkent.amplify.tracking.Amplify
|
||||
import io.fabric.sdk.android.Fabric
|
||||
import com.anupcowkur.reservoir.Reservoir
|
||||
import com.bumptech.glide.Glide
|
||||
import com.mikepenz.iconics.IconicsDrawable
|
||||
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
||||
import java.io.IOException
|
||||
|
||||
|
||||
@ -24,5 +32,19 @@ class MyApp : MultiDexApplication() {
|
||||
} catch (e: IOException) {
|
||||
//failure
|
||||
}
|
||||
|
||||
DrawerImageLoader.init(object : AbstractDrawerImageLoader() {
|
||||
override fun set(imageView: ImageView?, uri: Uri?, placeholder: Drawable?, tag: String?) {
|
||||
Glide.with(imageView?.context).load(uri).placeholder(placeholder).into(imageView)
|
||||
}
|
||||
|
||||
override fun cancel(imageView: ImageView?) {
|
||||
Glide.clear(imageView)
|
||||
}
|
||||
|
||||
override fun placeholder(ctx: Context?, tag: String?): Drawable {
|
||||
return applicationContext.resources.getDrawable(R.mipmap.ic_launcher)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
/* From https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomBaseViewHolder.java */
|
||||
package apps.amine.bou.readerforselfoss.utils.drawer
|
||||
|
||||
|
||||
import android.support.v7.widget.RecyclerView
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
|
||||
import apps.amine.bou.readerforselfoss.R
|
||||
|
||||
|
||||
open class CustomBaseViewHolder(var view: View) : RecyclerView.ViewHolder(view) {
|
||||
var icon: ImageView = view.findViewById(R.id.material_drawer_icon) as ImageView
|
||||
var name: TextView = view.findViewById(R.id.material_drawer_name) as TextView
|
||||
var description: TextView = view.findViewById(R.id.material_drawer_description) as TextView
|
||||
}
|
@ -0,0 +1,108 @@
|
||||
/* From https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlBasePrimaryDrawerItem.java */
|
||||
package apps.amine.bou.readerforselfoss.utils.drawer
|
||||
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import android.support.annotation.ColorInt
|
||||
import android.support.annotation.ColorRes
|
||||
import android.support.annotation.StringRes
|
||||
import android.support.v7.widget.RecyclerView
|
||||
|
||||
import com.mikepenz.materialdrawer.holder.ColorHolder
|
||||
import com.mikepenz.materialdrawer.holder.ImageHolder
|
||||
import com.mikepenz.materialdrawer.holder.StringHolder
|
||||
import com.mikepenz.materialdrawer.model.BaseDrawerItem
|
||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
||||
import com.mikepenz.materialdrawer.util.DrawerUIUtils
|
||||
import com.mikepenz.materialize.util.UIUtils
|
||||
|
||||
|
||||
abstract class CustomUrlBasePrimaryDrawerItem<T, VH : RecyclerView.ViewHolder> : BaseDrawerItem<T, VH>() {
|
||||
fun withIcon(url: String): T {
|
||||
this.icon = ImageHolder(url)
|
||||
return this as T
|
||||
}
|
||||
|
||||
fun withIcon(uri: Uri): T {
|
||||
this.icon = ImageHolder(uri)
|
||||
return this as T
|
||||
}
|
||||
|
||||
var description: StringHolder? = null
|
||||
private set
|
||||
var descriptionTextColor: ColorHolder? = null
|
||||
private set
|
||||
|
||||
fun withDescription(description: String): T {
|
||||
this.description = StringHolder(description)
|
||||
return this as T
|
||||
}
|
||||
|
||||
fun withDescription(@StringRes descriptionRes: Int): T {
|
||||
this.description = StringHolder(descriptionRes)
|
||||
return this as T
|
||||
}
|
||||
|
||||
fun withDescriptionTextColor(@ColorInt color: Int): T {
|
||||
this.descriptionTextColor = ColorHolder.fromColor(color)
|
||||
return this as T
|
||||
}
|
||||
|
||||
fun withDescriptionTextColorRes(@ColorRes colorRes: Int): T {
|
||||
this.descriptionTextColor = ColorHolder.fromColorRes(colorRes)
|
||||
return this as T
|
||||
}
|
||||
|
||||
/**
|
||||
* a helper method to have the logic for all secondaryDrawerItems only once
|
||||
|
||||
* @param viewHolder
|
||||
*/
|
||||
protected fun bindViewHelper(viewHolder: CustomBaseViewHolder) {
|
||||
val ctx = viewHolder.itemView.context
|
||||
|
||||
//set the identifier from the drawerItem here. It can be used to run tests
|
||||
viewHolder.itemView.id = hashCode()
|
||||
|
||||
//set the item selected if it is
|
||||
viewHolder.itemView.isSelected = isSelected
|
||||
|
||||
//get the correct color for the background
|
||||
val selectedColor = getSelectedColor(ctx)
|
||||
//get the correct color for the text
|
||||
val color = getColor(ctx)
|
||||
val selectedTextColor = getSelectedTextColor(ctx)
|
||||
//get the correct color for the icon
|
||||
val iconColor = getIconColor(ctx)
|
||||
val selectedIconColor = getSelectedIconColor(ctx)
|
||||
|
||||
//set the background for the item
|
||||
UIUtils.setBackground(viewHolder.view, UIUtils.getSelectableBackground(ctx, selectedColor, true))
|
||||
//set the text for the name
|
||||
StringHolder.applyTo(this.getName(), viewHolder.name)
|
||||
//set the text for the description or hide
|
||||
StringHolder.applyToOrHide(this.description, viewHolder.description)
|
||||
|
||||
//set the colors for textViews
|
||||
viewHolder.name.setTextColor(getTextColorStateList(color, selectedTextColor))
|
||||
//set the description text color
|
||||
ColorHolder.applyToOr(descriptionTextColor,
|
||||
viewHolder.description, getTextColorStateList(color, selectedTextColor))
|
||||
|
||||
//define the typeface for our textViews
|
||||
if (getTypeface() != null) {
|
||||
viewHolder.name.typeface = getTypeface()
|
||||
viewHolder.description.typeface = getTypeface()
|
||||
}
|
||||
|
||||
//we make sure we reset the image first before setting the new one in case there is an empty one
|
||||
DrawerImageLoader.getInstance().cancelImage(viewHolder.icon)
|
||||
viewHolder.icon.setImageBitmap(null)
|
||||
//get the drawables for our icon and set it
|
||||
ImageHolder.applyTo(icon, viewHolder.icon, "customUrlItem")
|
||||
|
||||
//for android API 17 --> Padding not applied via xml
|
||||
DrawerUIUtils.setDrawerVerticalPadding(viewHolder.view)
|
||||
}
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
/* From https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlPrimaryDrawerItem.java */
|
||||
package apps.amine.bou.readerforselfoss.utils.drawer
|
||||
|
||||
|
||||
import android.content.Context
|
||||
import android.support.annotation.LayoutRes
|
||||
import android.support.annotation.StringRes
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
|
||||
import apps.amine.bou.readerforselfoss.R
|
||||
import com.mikepenz.materialdrawer.holder.BadgeStyle
|
||||
import com.mikepenz.materialdrawer.holder.StringHolder
|
||||
import com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable
|
||||
|
||||
|
||||
class CustomUrlPrimaryDrawerItem : CustomUrlBasePrimaryDrawerItem<CustomUrlPrimaryDrawerItem, CustomUrlPrimaryDrawerItem.ViewHolder>(), ColorfulBadgeable<CustomUrlPrimaryDrawerItem> {
|
||||
protected var mBadge: StringHolder = StringHolder("")
|
||||
protected var mBadgeStyle = BadgeStyle()
|
||||
|
||||
override fun withBadge(badge: StringHolder): CustomUrlPrimaryDrawerItem {
|
||||
this.mBadge = badge
|
||||
return this
|
||||
}
|
||||
|
||||
override fun withBadge(badge: String): CustomUrlPrimaryDrawerItem {
|
||||
this.mBadge = StringHolder(badge)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun withBadge(@StringRes badgeRes: Int): CustomUrlPrimaryDrawerItem {
|
||||
this.mBadge = StringHolder(badgeRes)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun withBadgeStyle(badgeStyle: BadgeStyle): CustomUrlPrimaryDrawerItem {
|
||||
this.mBadgeStyle = badgeStyle
|
||||
return this
|
||||
}
|
||||
|
||||
override fun getBadge(): StringHolder {
|
||||
return mBadge
|
||||
}
|
||||
|
||||
override fun getBadgeStyle(): BadgeStyle {
|
||||
return mBadgeStyle
|
||||
}
|
||||
|
||||
override fun getType(): Int {
|
||||
return R.id.material_drawer_item_custom_url_item
|
||||
}
|
||||
|
||||
@LayoutRes
|
||||
override fun getLayoutRes(): Int {
|
||||
return R.layout.material_drawer_item_primary
|
||||
}
|
||||
|
||||
override fun bindView(viewHolder: ViewHolder, payloads: List<*>?) {
|
||||
super.bindView(viewHolder, payloads)
|
||||
|
||||
val ctx = viewHolder.itemView.context
|
||||
|
||||
//bind the basic view parts
|
||||
bindViewHelper(viewHolder)
|
||||
|
||||
//set the text for the badge or hide
|
||||
val badgeVisible = StringHolder.applyToOrHide(mBadge, viewHolder.badge)
|
||||
//style the badge if it is visible
|
||||
if (badgeVisible) {
|
||||
mBadgeStyle.style(viewHolder.badge, getTextColorStateList(getColor(ctx), getSelectedTextColor(ctx)))
|
||||
viewHolder.badgeContainer.visibility = View.VISIBLE
|
||||
} else {
|
||||
viewHolder.badgeContainer.visibility = View.GONE
|
||||
}
|
||||
|
||||
//define the typeface for our textViews
|
||||
if (getTypeface() != null) {
|
||||
viewHolder.badge.typeface = getTypeface()
|
||||
}
|
||||
|
||||
//call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)
|
||||
onPostBindView(this, viewHolder.itemView)
|
||||
}
|
||||
|
||||
override fun getViewHolder(v: View): ViewHolder {
|
||||
return ViewHolder(v)
|
||||
}
|
||||
|
||||
class ViewHolder(view: View) : CustomBaseViewHolder(view) {
|
||||
val badgeContainer: View = view.findViewById(R.id.material_drawer_badge_container)
|
||||
val badge: TextView = view.findViewById(R.id.material_drawer_badge) as TextView
|
||||
|
||||
}
|
||||
}
|
4
app/src/main/res/values/ids.xml
Normal file
4
app/src/main/res/values/ids.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<item name="material_drawer_item_custom_url_item" type="id" />
|
||||
</resources>
|
Loading…
Reference in New Issue
Block a user