mirror of
https://github.com/kuba2k2/NavLib.git
synced 2025-01-18 06:16:43 -06:00
Update MaterialDrawer to v8.0.0. Update gradle and libraries.
This commit is contained in:
parent
5c8b13c0d9
commit
fd757f4228
@ -11,6 +11,8 @@ android {
|
||||
targetSdkVersion setup.targetSdk
|
||||
versionCode release.versionCode
|
||||
versionName release.versionName
|
||||
|
||||
multiDexEnabled true
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
@ -34,14 +36,14 @@ dependencies {
|
||||
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
implementation "androidx.appcompat:appcompat:${versions.appcompat}"
|
||||
implementation "androidx.legacy:legacy-support-v4:${versions.legacy}"
|
||||
implementation "com.github.kuba2k2:MaterialDrawer:${versions.materialdrawer}"
|
||||
//implementation "com.mikepenz:crossfader:1.6.0" // do not update
|
||||
implementation "com.mikepenz:iconics-core:${versions.iconics}" // do not update. >3.1.0 Breaks jelly bean
|
||||
implementation "com.mikepenz:iconics-views:${versions.iconics}" // do not update
|
||||
implementation "com.mikepenz:materialdrawer:${versions.materialdrawer}"
|
||||
implementation "com.mikepenz:iconics-core:${versions.iconics}"
|
||||
implementation "com.mikepenz:iconics-views:${versions.iconics}"
|
||||
implementation "com.mikepenz:community-material-typeface:${versions.font_cmd}@aar"
|
||||
implementation "androidx.core:core-ktx:${versions.ktx}"
|
||||
implementation "androidx.constraintlayout:constraintlayout:${versions.constraintLayout}"
|
||||
implementation "com.google.android.material:material:${versions.material}"
|
||||
implementation "pl.droidsonroids.gif:android-gif-drawable:${versions.gifdrawable}"
|
||||
implementation 'androidx.multidex:multidex:2.0.1'
|
||||
implementation project(":navlib")
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:name="androidx.multidex.MultiDexApplication"
|
||||
android:theme="@style/AppTheme.Light"><!--
|
||||
android:windowSoftInputMode="adjustResize"-->
|
||||
<activity android:name=".MainActivity"
|
||||
@ -24,4 +25,4 @@
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
</manifest>
|
||||
|
@ -12,12 +12,10 @@ import com.mikepenz.iconics.IconicsColor
|
||||
import com.mikepenz.iconics.IconicsDrawable
|
||||
import com.mikepenz.iconics.IconicsSize
|
||||
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
|
||||
import com.mikepenz.materialdrawer.Drawer
|
||||
import com.mikepenz.materialdrawer.holder.StringHolder
|
||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.ProfileDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.interfaces.*
|
||||
import com.mikepenz.materialdrawer.model.utils.withIsHiddenInMiniDrawer
|
||||
import kotlinx.android.synthetic.main.sample_nav_view.*
|
||||
import pl.szczodrzynski.navlib.SystemBarsUtil
|
||||
import pl.szczodrzynski.navlib.SystemBarsUtil.Companion.COLOR_DO_NOT_CHANGE
|
||||
@ -29,9 +27,9 @@ import pl.szczodrzynski.navlib.bottomsheet.NavBottomSheet.Companion.SORT_MODE_DE
|
||||
import pl.szczodrzynski.navlib.bottomsheet.NavBottomSheet.Companion.TOGGLE_GROUP_SORTING_ORDER
|
||||
import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetPrimaryItem
|
||||
import pl.szczodrzynski.navlib.bottomsheet.items.BottomSheetSeparatorItem
|
||||
import pl.szczodrzynski.navlib.drawer.IDrawerProfile
|
||||
import pl.szczodrzynski.navlib.drawer.items.DrawerPrimaryItem
|
||||
import pl.szczodrzynski.navlib.getColorFromAttr
|
||||
import pl.szczodrzynski.navlib.withIcon
|
||||
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
@ -262,7 +260,7 @@ class MainActivity : AppCompatActivity() {
|
||||
|
||||
DrawerPrimaryItem().withName("Lock screen")
|
||||
.withDescription("aaand not visible in Mini Drawer")
|
||||
.withHiddenInMiniDrawer(true)
|
||||
.withIsHiddenInMiniDrawer(true)
|
||||
.withIdentifier(62)
|
||||
.withBadgeStyle(badgeStyle)
|
||||
.withIcon(CommunityMaterial.Icon.cmd_fingerprint),
|
||||
@ -307,15 +305,13 @@ class MainActivity : AppCompatActivity() {
|
||||
.withIcon(
|
||||
IconicsDrawable(context, CommunityMaterial.Icon2.cmd_plus)
|
||||
.actionBar()
|
||||
.padding(IconicsSize.dp(5))
|
||||
.color(IconicsColor.colorRes(pl.szczodrzynski.navlib.R.color.material_drawer_dark_primary_text))
|
||||
.padding { IconicsSize.dp(5) }
|
||||
.color { IconicsColor.colorInt(getColorFromAttr(context, R.attr.materialDrawerPrimaryText)) }
|
||||
)
|
||||
.withOnDrawerItemClickListener(object : Drawer.OnDrawerItemClickListener {
|
||||
override fun onItemClick(view: View?, position: Int, drawerItem: IDrawerItem<*>): Boolean {
|
||||
Toast.makeText(context, "Add account", Toast.LENGTH_SHORT).show()
|
||||
return true
|
||||
}
|
||||
}),
|
||||
.withOnDrawerItemClickListener { v, item, position ->
|
||||
Toast.makeText(context, "Add account", Toast.LENGTH_SHORT).show()
|
||||
true
|
||||
},
|
||||
ProfileSettingDrawerItem()
|
||||
.withName("Manage Account")
|
||||
.withIcon(CommunityMaterial.Icon2.cmd_settings)
|
||||
|
30
build.gradle
30
build.gradle
@ -6,8 +6,8 @@ buildscript {
|
||||
|
||||
release = [
|
||||
// major.minor.patch.rc.beta
|
||||
versionName: "0.5.0",
|
||||
versionCode: 50099
|
||||
versionName: "0.6.0",
|
||||
versionCode: 60099
|
||||
]
|
||||
|
||||
setup = [
|
||||
@ -18,14 +18,16 @@ buildscript {
|
||||
]
|
||||
|
||||
versions = [
|
||||
kotlin : "1.3.61",
|
||||
ktx : "1.1.0",
|
||||
gradleAndroid : "4.0.0-beta03",
|
||||
|
||||
kotlin : ext.kotlin_version,
|
||||
ktx : "1.2.0",
|
||||
|
||||
androidX : '1.0.0',
|
||||
annotation : '1.1.0',
|
||||
recyclerView : '1.2.0-alpha01',
|
||||
material : '1.2.0-alpha03',
|
||||
appcompat : '1.2.0-alpha01',
|
||||
material : '1.2.0-alpha05',
|
||||
appcompat : '1.2.0-alpha03',
|
||||
constraintLayout : '2.0.0-beta4',
|
||||
cardview : '1.0.0',
|
||||
gridLayout : '1.0.0',
|
||||
@ -33,22 +35,22 @@ buildscript {
|
||||
navigationFragment: "1.0.0",
|
||||
legacy : "1.0.0",
|
||||
|
||||
room : "2.2.3",
|
||||
lifecycle : "2.2.0-rc03",
|
||||
work : "2.2.0",
|
||||
room : "2.2.5",
|
||||
lifecycle : "2.2.0",
|
||||
work : "2.3.4",
|
||||
|
||||
firebase : '17.2.2',
|
||||
firebasemessaging: "20.1.0",
|
||||
firebasemessaging: "20.1.3",
|
||||
play_services : "17.0.0",
|
||||
|
||||
materialdialogs : "0.9.6.0",
|
||||
materialdrawer : "cad66092a6",
|
||||
materialdrawer : "8.0.0-rc02",
|
||||
iconics : "4.0.1",
|
||||
font_cmd : "3.5.95.1-kotlin",
|
||||
|
||||
gifdrawable : "1.2.15",
|
||||
|
||||
retrofit : '2.6.2'
|
||||
retrofit : "2.6.4"
|
||||
]
|
||||
}
|
||||
|
||||
@ -57,8 +59,8 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath "com.android.tools.build:gradle:${versions.gradleAndroid}"
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}"
|
||||
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip
|
||||
|
@ -45,9 +45,10 @@ dependencies {
|
||||
implementation "androidx.recyclerview:recyclerview:${versions.recyclerView}"
|
||||
implementation "com.google.android.material:material:${versions.material}"
|
||||
|
||||
api "com.github.kuba2k2:MaterialDrawer:${versions.materialdrawer}"
|
||||
api "com.mikepenz:materialdrawer:${versions.materialdrawer}"
|
||||
api "com.mikepenz:community-material-typeface:${versions.font_cmd}@aar"
|
||||
api "com.mikepenz:iconics-core:${versions.iconics}"
|
||||
implementation "com.mikepenz:materialize:1.2.1"
|
||||
implementation "com.mikepenz:itemanimators:1.1.0"
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${versions.kotlin}"
|
||||
implementation "pl.droidsonroids.gif:android-gif-drawable:${versions.gifdrawable}"
|
||||
|
@ -10,7 +10,6 @@ import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewOutlineProvider
|
||||
import androidx.appcompat.widget.AppCompatImageView
|
||||
import androidx.core.view.ViewCompat
|
||||
import com.mikepenz.materialdrawer.R
|
||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
||||
@ -22,7 +21,7 @@ import pl.droidsonroids.gif.GifImageView
|
||||
* drawable on top. This is useful for applying a beveled look to image contents, but is also
|
||||
* flexible enough for use with other desired aesthetics.
|
||||
*/
|
||||
open class BezelGifImageView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) : GifImageView(context, attrs, defStyle) {
|
||||
open class BezelImageView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) : GifImageView(context, attrs, defStyle) {
|
||||
private val mBlackPaint: Paint
|
||||
private val mMaskedPaint: Paint
|
||||
|
||||
@ -54,14 +53,14 @@ open class BezelGifImageView @JvmOverloads constructor(context: Context, attrs:
|
||||
// Attribute initialization
|
||||
val a = context.obtainStyledAttributes(attrs, R.styleable.BezelImageView, defStyle, R.style.BezelImageView)
|
||||
|
||||
mMaskDrawable = a.getDrawable(R.styleable.BezelImageView_biv_maskDrawable)
|
||||
mMaskDrawable = a.getDrawable(R.styleable.BezelImageView_materialDrawerMaskDrawable)
|
||||
if (mMaskDrawable != null) {
|
||||
mMaskDrawable.callback = this
|
||||
}
|
||||
|
||||
mDrawCircularShadow = a.getBoolean(R.styleable.BezelImageView_biv_drawCircularShadow, true)
|
||||
mDrawCircularShadow = a.getBoolean(R.styleable.BezelImageView_materialDrawerDrawCircularShadow, true)
|
||||
|
||||
mSelectorColor = a.getColor(R.styleable.BezelImageView_biv_selectorOnPress, 0)
|
||||
mSelectorColor = a.getColor(R.styleable.BezelImageView_materialDrawerSelectorOnPress, 0)
|
||||
|
||||
a.recycle()
|
||||
|
||||
|
@ -1,11 +1,18 @@
|
||||
package pl.szczodrzynski.navlib
|
||||
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.mikepenz.iconics.typeface.IIcon
|
||||
import com.mikepenz.materialdrawer.*
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IProfile
|
||||
import com.mikepenz.materialdrawer.holder.StringHolder
|
||||
import com.mikepenz.materialdrawer.model.AbstractDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.BaseDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.interfaces.*
|
||||
import com.mikepenz.materialdrawer.util.getDrawerItem
|
||||
import com.mikepenz.materialdrawer.util.updateItem
|
||||
import com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView
|
||||
|
||||
inline fun DrawerBuilder.withOnDrawerItemClickListener(crossinline listener: (view: View?, position: Int, drawerItem: IDrawerItem<*>) -> Boolean): DrawerBuilder {
|
||||
/*inline fun DrawerBuilder.withOnDrawerItemClickListener(crossinline listener: (view: View?, position: Int, drawerItem: IDrawerItem<*>) -> Boolean): DrawerBuilder {
|
||||
return this.withOnDrawerItemClickListener(object : Drawer.OnDrawerItemClickListener {
|
||||
override fun onItemClick(view: View?, position: Int, drawerItem: IDrawerItem<*>): Boolean {
|
||||
return listener(view, position, drawerItem)
|
||||
@ -65,4 +72,14 @@ inline fun MiniDrawer.withOnMiniDrawerItemClickListener(crossinline listener: (v
|
||||
return listener(view, position, drawerItem, type)
|
||||
}
|
||||
})
|
||||
}
|
||||
}*/
|
||||
|
||||
fun MaterialDrawerSliderView.updateBadge(identifier: Long, badge: StringHolder?) {
|
||||
val drawerItem = getDrawerItem(identifier)
|
||||
if (drawerItem is Badgeable) {
|
||||
drawerItem.withBadge(badge)
|
||||
updateItem(drawerItem)
|
||||
}
|
||||
}
|
||||
|
||||
fun <T : Iconable> T.withIcon(icon: IIcon) = withIcon(pl.szczodrzynski.navlib.ImageHolder(icon))
|
||||
|
@ -1,20 +1,21 @@
|
||||
package pl.szczodrzynski.navlib
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.PorterDuff
|
||||
import android.graphics.PorterDuffColorFilter
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import com.mikepenz.iconics.IconicsColor
|
||||
import com.mikepenz.iconics.IconicsDrawable
|
||||
import com.mikepenz.iconics.IconicsSize
|
||||
import com.mikepenz.iconics.typeface.IIcon
|
||||
import com.mikepenz.iconics.utils.paddingDp
|
||||
import com.mikepenz.iconics.utils.sizeDp
|
||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
||||
import pl.droidsonroids.gif.GifDrawable
|
||||
import java.io.FileNotFoundException
|
||||
@ -25,31 +26,24 @@ import java.io.FileNotFoundException
|
||||
|
||||
open class ImageHolder : com.mikepenz.materialdrawer.holder.ImageHolder {
|
||||
|
||||
constructor(url: String) : super(url) {}
|
||||
|
||||
constructor(uri: Uri) : super(uri) {}
|
||||
|
||||
constructor(icon: Drawable?) : super(icon) {}
|
||||
|
||||
constructor(bitmap: Bitmap?) : super(bitmap) {}
|
||||
|
||||
constructor(@DrawableRes iconRes: Int) : super(iconRes) {}
|
||||
|
||||
constructor(@DrawableRes iconRes: Int, colorFilter: Int?) : super(iconRes) {
|
||||
this.colorFilter = colorFilter
|
||||
}
|
||||
|
||||
constructor(iicon: IIcon) : super(null as Bitmap?) {
|
||||
this.iIcon = iicon
|
||||
constructor(iicon: IIcon) : super(null as Drawable?) {
|
||||
this.iicon = iicon
|
||||
}
|
||||
constructor() : super()
|
||||
constructor(url: String) : super(url)
|
||||
constructor(uri: Uri) : super(uri)
|
||||
constructor(icon: Drawable?) : super(icon)
|
||||
constructor(bitmap: Bitmap) : super(bitmap)
|
||||
constructor(iconRes: Int) : super(iconRes)
|
||||
|
||||
var iicon: IIcon? = null
|
||||
@ColorInt
|
||||
var colorFilter: Int? = null
|
||||
var colorFilterMode: PorterDuff.Mode = PorterDuff.Mode.DST_OVER
|
||||
|
||||
override fun applyTo(imageView: ImageView): Boolean {
|
||||
return applyTo(imageView, null)
|
||||
}
|
||||
|
||||
/**
|
||||
* sets an existing image to the imageView
|
||||
@ -59,14 +53,14 @@ open class ImageHolder : com.mikepenz.materialdrawer.holder.ImageHolder {
|
||||
* @return true if an image was set
|
||||
*/
|
||||
override fun applyTo(imageView: ImageView, tag: String?): Boolean {
|
||||
val ii = iIcon
|
||||
val ii = iicon
|
||||
|
||||
if (uri != null) {
|
||||
if (uri.toString().endsWith(".gif", true)) {
|
||||
imageView.setImageDrawable(GifDrawable(uri.toString()))
|
||||
}
|
||||
else {
|
||||
val consumed = DrawerImageLoader.instance.setImage(imageView, uri, tag)
|
||||
val consumed = DrawerImageLoader.instance.setImage(imageView, uri!!, tag)
|
||||
if (!consumed) {
|
||||
imageView.setImageURI(uri)
|
||||
}
|
||||
@ -90,4 +84,39 @@ open class ImageHolder : com.mikepenz.materialdrawer.holder.ImageHolder {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
* this only handles Drawables
|
||||
*
|
||||
* @param ctx
|
||||
* @param iconColor
|
||||
* @param tint
|
||||
* @return
|
||||
*/
|
||||
override fun decideIcon(ctx: Context, iconColor: ColorStateList, tint: Boolean, paddingDp: Int): Drawable? {
|
||||
var icon: Drawable? = icon
|
||||
val ii = iicon
|
||||
val uri = uri
|
||||
|
||||
when {
|
||||
ii != null -> icon = IconicsDrawable(ctx, ii).apply {
|
||||
color(IconicsColor.colorList(iconColor))
|
||||
sizeDp(24)
|
||||
paddingDp(paddingDp)
|
||||
}
|
||||
iconRes != -1 -> icon = AppCompatResources.getDrawable(ctx, iconRes)
|
||||
uri != null -> try {
|
||||
val inputStream = ctx.contentResolver.openInputStream(uri)
|
||||
icon = Drawable.createFromStream(inputStream, uri.toString())
|
||||
} catch (e: FileNotFoundException) {
|
||||
//no need to handle this
|
||||
}
|
||||
}
|
||||
//if we got an icon AND we have auto tinting enabled AND it is no IIcon, tint it ;)
|
||||
if (icon != null && tint && iicon == null) {
|
||||
icon = icon.mutate()
|
||||
icon.setColorFilter(iconColor.defaultColor, PorterDuff.Mode.SRC_IN)
|
||||
}
|
||||
return icon
|
||||
}
|
||||
}
|
||||
|
@ -198,4 +198,4 @@ class NavBottomBar : BottomAppBar {
|
||||
override fun setOnMenuItemClickListener(listener: OnMenuItemClickListener?) {
|
||||
onMenuItemClickListener = listener
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,15 +13,12 @@ import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.LinearLayout
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import androidx.core.view.children
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import kotlinx.android.synthetic.main.nav_view.view.*
|
||||
import pl.szczodrzynski.navlib.bottomsheet.NavBottomSheet
|
||||
import pl.szczodrzynski.navlib.drawer.NavDrawer
|
||||
import android.graphics.drawable.RippleDrawable
|
||||
import android.os.Build
|
||||
import androidx.core.view.children
|
||||
import com.mikepenz.materialize.util.UIUtils
|
||||
|
||||
|
||||
class NavView : FrameLayout {
|
||||
@ -82,9 +79,8 @@ class NavView : FrameLayout {
|
||||
|
||||
drawer = NavDrawer(
|
||||
context,
|
||||
findViewById(R.id.nv_drawerContainer),
|
||||
findViewById(R.id.nv_fixedDrawerContainer),
|
||||
findViewById(R.id.nv_miniDrawerContainerLandscape),
|
||||
findViewById(R.id.nv_drawerLayout),
|
||||
findViewById(R.id.nv_drawerContainerLandscape),
|
||||
findViewById(R.id.nv_miniDrawerContainerPortrait),
|
||||
findViewById(R.id.nv_miniDrawerElevation)
|
||||
)
|
||||
@ -108,11 +104,17 @@ class NavView : FrameLayout {
|
||||
//bottomSheetBehavior.peekHeight = displayHeight
|
||||
}
|
||||
|
||||
private fun convertDpToPixel(dp: Float): Float {
|
||||
val resources = context.resources
|
||||
val metrics = resources.displayMetrics
|
||||
return dp * (metrics.densityDpi / 160f)
|
||||
}
|
||||
|
||||
fun gainAttentionOnBottomBar() {
|
||||
var x = ripple.width.toFloat()
|
||||
var y = ripple.height.toFloat()
|
||||
x -= UIUtils.convertDpToPixel(56f, context) / 2
|
||||
y -= UIUtils.convertDpToPixel(56f, context) / 2
|
||||
x -= convertDpToPixel(56f) / 2
|
||||
y -= convertDpToPixel(56f) / 2
|
||||
ripple.performRipple(Point(x.toInt(), y.toInt()))
|
||||
}
|
||||
|
||||
@ -122,7 +124,7 @@ class NavView : FrameLayout {
|
||||
this.navigationBarBgView = navigationBarBackground
|
||||
this.statusBarDarkView = nv_statusBarDarker
|
||||
//this.navigationBarDarkView = navigationBarBackground
|
||||
this.insetsListener = nv_drawerContainer
|
||||
this.insetsListener = nv_drawerLayout
|
||||
this.marginBySystemBars = mainView
|
||||
this.paddingByNavigationBar = bottomSheet.getContentView()
|
||||
}
|
||||
@ -185,7 +187,7 @@ class NavView : FrameLayout {
|
||||
}
|
||||
|
||||
fun onBackPressed(): Boolean {
|
||||
if (drawer.isOpen) {
|
||||
if (drawer.isOpen && !drawer.fixedDrawerEnabled()) {
|
||||
if (drawer.profileSelectionIsOpen) {
|
||||
drawer.profileSelectionClose()
|
||||
return true
|
||||
|
@ -295,7 +295,7 @@ class SystemBarsUtil(private val activity: Activity) {
|
||||
|
||||
// PADDING
|
||||
if (insetsListener != null) {
|
||||
if (SDK_INT >= LOLLIPOP) {
|
||||
if (SDK_INT >= LOLLIPOP && false) {
|
||||
ViewCompat.setOnApplyWindowInsetsListener(insetsListener!!) { _, insets ->
|
||||
Log.d("NavLib", "Got insets left = ${insets.systemWindowInsetLeft}, top = ${insets.systemWindowInsetTop}, right = ${insets.systemWindowInsetRight}, bottom = ${insets.systemWindowInsetBottom}")
|
||||
if (insetsApplied)
|
||||
@ -374,4 +374,4 @@ class SystemBarsUtil(private val activity: Activity) {
|
||||
keyboardUtil?.disable()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,20 +5,18 @@ import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Build
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.TypedValue
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import androidx.annotation.AttrRes
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.annotation.ColorRes
|
||||
import androidx.annotation.DrawableRes
|
||||
import com.google.android.material.elevation.ElevationOverlayProvider
|
||||
import com.mikepenz.iconics.IconicsColor
|
||||
import com.mikepenz.iconics.IconicsDrawable
|
||||
import android.util.DisplayMetrics
|
||||
import android.view.WindowManager
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.annotation.ColorRes
|
||||
import com.mikepenz.materialdrawer.Drawer
|
||||
import com.mikepenz.materialdrawer.holder.StringHolder
|
||||
import com.mikepenz.materialdrawer.model.interfaces.Badgeable
|
||||
import com.mikepenz.iconics.utils.colorInt
|
||||
|
||||
|
||||
/*private val displayMetrics by lazy {
|
||||
@ -122,7 +120,7 @@ fun hasNavigationBar(context: Context): Boolean {
|
||||
return hasNavigationBar
|
||||
}
|
||||
|
||||
fun IconicsDrawable.colorAttr(context: Context, @AttrRes attrRes: Int) = color(IconicsColor.colorInt(getColorFromAttr(context, attrRes)))
|
||||
fun IconicsDrawable.colorAttr(context: Context, @AttrRes attrRes: Int) = colorInt(getColorFromAttr(context, attrRes))
|
||||
|
||||
fun getColorFromAttr(context: Context, @AttrRes color: Int): Int {
|
||||
val typedValue = TypedValue()
|
||||
@ -149,14 +147,6 @@ fun Context.getColorFromRes(@ColorRes id: Int): Int {
|
||||
}
|
||||
}
|
||||
|
||||
fun Drawer.updateBadge(identifier: Long, badge: StringHolder?) {
|
||||
val drawerItem = getDrawerItem(identifier)
|
||||
if (drawerItem is Badgeable<*>) {
|
||||
drawerItem.withBadge(badge)
|
||||
updateItem(drawerItem)
|
||||
}
|
||||
}
|
||||
|
||||
fun crc16(buffer: String): Int {
|
||||
/* Note the change here */
|
||||
var crc = 0x1D0F
|
||||
@ -169,4 +159,4 @@ fun crc16(buffer: String): Int {
|
||||
}
|
||||
crc = crc and 0xffff
|
||||
return crc
|
||||
}
|
||||
}
|
||||
|
@ -431,4 +431,4 @@ class NavBottomSheet : CoordinatorLayout {
|
||||
return
|
||||
isOpen = !isOpen
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,9 +10,8 @@ import androidx.recyclerview.widget.RecyclerView
|
||||
import com.mikepenz.iconics.IconicsDrawable
|
||||
import com.mikepenz.iconics.typeface.IIcon
|
||||
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
|
||||
import com.mikepenz.iconics.utils.colorInt
|
||||
import com.mikepenz.iconics.utils.sizeDp
|
||||
import com.mikepenz.materialize.holder.ImageHolder
|
||||
import pl.szczodrzynski.navlib.ImageHolder
|
||||
import pl.szczodrzynski.navlib.R
|
||||
import pl.szczodrzynski.navlib.colorAttr
|
||||
import pl.szczodrzynski.navlib.getColorFromAttr
|
||||
@ -45,7 +44,7 @@ data class BottomSheetPrimaryItem(override val isContextual: Boolean = true) : I
|
||||
|
||||
viewHolder.image.setImageDrawable(IconicsDrawable(viewHolder.text.context)
|
||||
.icon(iconicsIcon ?: CommunityMaterial.Icon.cmd_android)
|
||||
.colorAttr(viewHolder.text.context, R.attr.material_drawer_primary_icon)
|
||||
.colorAttr(viewHolder.text.context, android.R.attr.textColorSecondary)
|
||||
.sizeDp(24))
|
||||
|
||||
viewHolder.description.visibility = View.VISIBLE
|
||||
@ -59,7 +58,7 @@ data class BottomSheetPrimaryItem(override val isContextual: Boolean = true) : I
|
||||
titleRes != null -> viewHolder.text.setText(titleRes!!)
|
||||
else -> viewHolder.text.text = title
|
||||
}
|
||||
viewHolder.text.setTextColor(getColorFromAttr(viewHolder.text.context, R.attr.material_drawer_primary_text))
|
||||
viewHolder.text.setTextColor(getColorFromAttr(viewHolder.text.context, android.R.attr.textColorPrimary))
|
||||
}
|
||||
|
||||
/*_____ _
|
||||
@ -122,4 +121,4 @@ data class BottomSheetPrimaryItem(override val isContextual: Boolean = true) : I
|
||||
this.onClickListener = onClickListener
|
||||
return this
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,33 +9,42 @@ import android.graphics.Color
|
||||
import android.graphics.PorterDuff
|
||||
import android.graphics.drawable.LayerDrawable
|
||||
import android.util.Log
|
||||
import android.view.Gravity
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
|
||||
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.customview.widget.ViewDragHelper
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import com.mikepenz.fastadapter.IAdapter
|
||||
import com.mikepenz.itemanimators.AlphaCrossFadeAnimator
|
||||
import com.mikepenz.materialdrawer.*
|
||||
import com.mikepenz.materialdrawer.holder.BadgeStyle
|
||||
import com.mikepenz.materialdrawer.holder.ColorHolder
|
||||
import com.mikepenz.materialdrawer.holder.StringHolder
|
||||
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.Badgeable
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.interfaces.IProfile
|
||||
import com.mikepenz.materialdrawer.model.interfaces.*
|
||||
import com.mikepenz.materialdrawer.util.*
|
||||
import com.mikepenz.materialdrawer.widget.AccountHeaderView
|
||||
import com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView
|
||||
import com.mikepenz.materialdrawer.widget.MiniDrawerSliderView
|
||||
import com.mikepenz.materialize.util.UIUtils
|
||||
import pl.szczodrzynski.navlib.*
|
||||
import pl.szczodrzynski.navlib.R
|
||||
import pl.szczodrzynski.navlib.drawer.items.DrawerPrimaryItem
|
||||
|
||||
class NavDrawer(
|
||||
val context: Context,
|
||||
val drawerContainer: LinearLayout,
|
||||
val fixedDrawerContainer: FrameLayout,
|
||||
val miniDrawerContainerLandscape: FrameLayout,
|
||||
val miniDrawerContainerPortrait: FrameLayout,
|
||||
val drawerLayout: DrawerLayout,
|
||||
val drawerContainerLandscape: FrameLayout,
|
||||
val drawerContainerPortrait: FrameLayout,
|
||||
val miniDrawerElevation: View
|
||||
) {
|
||||
companion object {
|
||||
@ -51,11 +60,9 @@ class NavDrawer(
|
||||
internal lateinit var toolbar: NavToolbar
|
||||
internal lateinit var bottomBar: NavBottomBar
|
||||
|
||||
private var drawer: Drawer? = null
|
||||
private var drawerView: View? = null
|
||||
private var accountHeader: AccountHeader? = null
|
||||
private var miniDrawer: MiniDrawer? = null
|
||||
private var miniDrawerView: View? = null
|
||||
private lateinit var drawer: MaterialDrawerSliderView
|
||||
private lateinit var accountHeader: AccountHeaderView
|
||||
private lateinit var miniDrawer: MiniDrawerSliderView
|
||||
|
||||
private var drawerMode: Int = DRAWER_MODE_NORMAL
|
||||
private var selection: Int = -1
|
||||
@ -73,123 +80,109 @@ class NavDrawer(
|
||||
getColorFromAttr(context, R.attr.colorOnError)
|
||||
)*/
|
||||
|
||||
badgeStyle = BadgeStyle()
|
||||
.withTextColor(Color.WHITE)
|
||||
.withColorRes(R.color.md_red_700)
|
||||
|
||||
val drawerBuilder = DrawerBuilder()
|
||||
.withActivity(activity)
|
||||
.withDrawerLayout(R.layout.material_drawer_fits_not)
|
||||
//.withHasStableIds(true)
|
||||
.withItemAnimator(AlphaCrossFadeAnimator())
|
||||
.withRootView(drawerContainer)
|
||||
.withFullscreen(true)
|
||||
.withTranslucentStatusBar(false)
|
||||
.withTranslucentNavigationBar(true)
|
||||
.withTranslucentNavigationBarProgrammatically(false)
|
||||
//.withToolbar(bottomBar)
|
||||
.withDisplayBelowStatusBar(false)
|
||||
//.withActionBarDrawerToggleAnimated(true)
|
||||
.withShowDrawerOnFirstLaunch(true)
|
||||
//.withShowDrawerUntilDraggedOpened(true)
|
||||
.withGenerateMiniDrawer(true /* if it is not showing on screen, clicking items throws an exception */)
|
||||
.withOnDrawerListener(object : Drawer.OnDrawerListener {
|
||||
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {}
|
||||
override fun onDrawerOpened(drawerView: View) {
|
||||
drawerOpenedListener?.invoke()
|
||||
}
|
||||
override fun onDrawerClosed(drawerView: View) {
|
||||
drawerClosedListener?.invoke()
|
||||
profileSelectionClose()
|
||||
}
|
||||
})
|
||||
.withOnDrawerItemClickListener { _, position, drawerItem ->
|
||||
if (drawerItem.identifier.toInt() == selection) {
|
||||
return@withOnDrawerItemClickListener false
|
||||
}
|
||||
when (drawerItemSelectedListener?.invoke(drawerItem.identifier.toInt(), position, drawerItem)) {
|
||||
true -> {
|
||||
when {
|
||||
!drawerItem.isSelectable -> {
|
||||
setSelection(selection, false)
|
||||
return@withOnDrawerItemClickListener false
|
||||
}
|
||||
drawerItem is DrawerPrimaryItem -> toolbar.title = drawerItem.appTitle ?: drawerItem.name?.getText(context) ?: ""
|
||||
drawerItem is BaseDrawerItem<*, *> -> toolbar.title = drawerItem.name?.getText(context) ?: ""
|
||||
}
|
||||
//setSelection(drawerItem.identifier.toInt(), false)
|
||||
return@withOnDrawerItemClickListener false
|
||||
}
|
||||
false -> {
|
||||
setSelection(selection, false)
|
||||
return@withOnDrawerItemClickListener true
|
||||
}
|
||||
else -> {
|
||||
return@withOnDrawerItemClickListener false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.withOnDrawerItemLongClickListener { _, position, drawerItem ->
|
||||
drawerItemLongClickListener?.invoke(drawerItem.identifier.toInt(), position, drawerItem) ?: true
|
||||
}
|
||||
|
||||
|
||||
val accountHeaderBuilder = AccountHeaderBuilder()
|
||||
.withActivity(activity)
|
||||
.withTranslucentStatusBar(true)
|
||||
.withOnAccountHeaderListener { view, profile, current ->
|
||||
if (profile is ProfileSettingDrawerItem) {
|
||||
return@withOnAccountHeaderListener drawerProfileSettingClickListener?.invoke(profile.identifier.toInt(), view) ?: false
|
||||
}
|
||||
updateBadges()
|
||||
if (current) {
|
||||
close()
|
||||
profileSelectionClose()
|
||||
return@withOnAccountHeaderListener true
|
||||
}
|
||||
(drawerProfileSelectedListener?.invoke(profile.identifier.toInt(), profile, current, view) ?: false).also {
|
||||
setToolbarProfileImage(profileList.singleOrNull { it.id == profile.identifier.toInt() })
|
||||
}
|
||||
}
|
||||
.withOnAccountHeaderItemLongClickListener { view, profile, current ->
|
||||
if (profile is ProfileSettingDrawerItem) {
|
||||
return@withOnAccountHeaderItemLongClickListener drawerProfileSettingLongClickListener?.invoke(profile.identifier.toInt(), view) ?: true
|
||||
}
|
||||
drawerProfileLongClickListener?.invoke(profile.identifier.toInt(), profile, current, view) ?: false
|
||||
}
|
||||
.withOnAccountHeaderProfileImageListener(
|
||||
onClick = { view, profile, current ->
|
||||
drawerProfileImageClickListener?.invoke(profile.identifier.toInt(), profile, current, view) ?: false
|
||||
},
|
||||
onLongClick = { view, profile, current ->
|
||||
drawerProfileImageLongClickListener?.invoke(profile.identifier.toInt(), profile, current, view) ?: false
|
||||
}
|
||||
)
|
||||
.withHeaderBackground(R.drawable.header)
|
||||
.withTextColor(ContextCompat.getColor(context, R.color.material_drawer_dark_primary_text))
|
||||
|
||||
accountHeader = accountHeaderBuilder.build()
|
||||
drawerBuilder.withAccountHeader(accountHeader!!)
|
||||
drawer = drawerBuilder.build()
|
||||
|
||||
drawerView = drawer?.slider
|
||||
|
||||
miniDrawer = drawer?.miniDrawer
|
||||
miniDrawer?.withOnMiniDrawerItemClickListener { _, _, _, type ->
|
||||
if (type == MiniDrawer.PROFILE) {
|
||||
profileSelectionOpen()
|
||||
open()
|
||||
return@withOnMiniDrawerItemClickListener true
|
||||
}
|
||||
return@withOnMiniDrawerItemClickListener false
|
||||
badgeStyle = BadgeStyle().apply {
|
||||
textColor = ColorHolder.fromColor(Color.WHITE)
|
||||
color = ColorHolder.fromColor(0xffd32f2f.toInt())
|
||||
}
|
||||
|
||||
drawerLayout.addDrawerListener(object : DrawerLayout.DrawerListener {
|
||||
override fun onDrawerStateChanged(newState: Int) {}
|
||||
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {}
|
||||
override fun onDrawerClosed(drawerView: View) {
|
||||
drawerClosedListener?.invoke()
|
||||
profileSelectionClose()
|
||||
}
|
||||
override fun onDrawerOpened(drawerView: View) {
|
||||
drawerOpenedListener?.invoke()
|
||||
}
|
||||
})
|
||||
|
||||
accountHeader = AccountHeaderView(context).apply {
|
||||
headerBackground = ImageHolder(R.drawable.header)
|
||||
|
||||
onAccountHeaderListener = { view, profile, current ->
|
||||
if (profile is ProfileSettingDrawerItem) {
|
||||
drawerProfileSettingClickListener?.invoke(profile.identifier.toInt(), view) ?: false
|
||||
}
|
||||
else {
|
||||
updateBadges()
|
||||
if (current) {
|
||||
close()
|
||||
profileSelectionClose()
|
||||
true
|
||||
}
|
||||
else {
|
||||
(drawerProfileSelectedListener?.invoke(profile.identifier.toInt(), profile, current, view) ?: false).also {
|
||||
setToolbarProfileImage(profileList.singleOrNull { it.id == profile.identifier.toInt() })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onAccountHeaderItemLongClickListener = { view, profile, current ->
|
||||
if (profile is ProfileSettingDrawerItem) {
|
||||
drawerProfileSettingLongClickListener?.invoke(profile.identifier.toInt(), view) ?: true
|
||||
}
|
||||
else {
|
||||
drawerProfileLongClickListener?.invoke(profile.identifier.toInt(), profile, current, view) ?: false
|
||||
}
|
||||
}
|
||||
|
||||
onAccountHeaderProfileImageListener = { view, profile, current ->
|
||||
drawerProfileImageClickListener?.invoke(profile.identifier.toInt(), profile, current, view) ?: false
|
||||
}
|
||||
//.withTextColor(ContextCompat.getColor(context, R.color.material_drawer_dark_primary_text))
|
||||
}
|
||||
|
||||
drawer = MaterialDrawerSliderView(context).apply {
|
||||
accountHeader = this@NavDrawer.accountHeader
|
||||
itemAnimator = AlphaCrossFadeAnimator()
|
||||
//hasStableIds = true
|
||||
|
||||
onDrawerItemClickListener = { _, drawerItem, position ->
|
||||
if (drawerItem.identifier.toInt() == selection) {
|
||||
false
|
||||
}
|
||||
else {
|
||||
val consumed = drawerItemSelectedListener?.invoke(drawerItem.identifier.toInt(), position, drawerItem)
|
||||
if (consumed == false || !drawerItem.isSelectable) {
|
||||
setSelection(selection, false)
|
||||
consumed == false
|
||||
}
|
||||
else if (consumed == true) {
|
||||
when (drawerItem) {
|
||||
is DrawerPrimaryItem -> toolbar.title = drawerItem.appTitle ?: drawerItem.name?.getText(context) ?: ""
|
||||
is BaseDrawerItem<*, *> -> toolbar.title = drawerItem.name?.getText(context) ?: ""
|
||||
}
|
||||
false
|
||||
}
|
||||
else {
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onDrawerItemLongClickListener = { _, drawerItem, position ->
|
||||
drawerItemLongClickListener?.invoke(drawerItem.identifier.toInt(), position, drawerItem) ?: true
|
||||
}
|
||||
}
|
||||
|
||||
miniDrawer = MiniDrawerSliderView(context).apply {
|
||||
drawer = this@NavDrawer.drawer
|
||||
includeSecondaryDrawerItems = false
|
||||
this::class.java.getDeclaredField("onMiniDrawerItemClickListener").let {
|
||||
it.isAccessible = true
|
||||
it.set(this, { v: View?, position: Int, item: IDrawerItem<*>, type: Int ->
|
||||
if (item is MiniProfileDrawerItem) {
|
||||
profileSelectionOpen()
|
||||
open()
|
||||
true
|
||||
}
|
||||
else false
|
||||
})
|
||||
}
|
||||
}
|
||||
miniDrawer?.withIncludeSecondaryDrawerItems(false)
|
||||
|
||||
// TODO 2019-08-27 build miniDrawerView only if needed
|
||||
// building in decideDrawerMode causes an exception when clicking drawer items
|
||||
// also update method updateMiniDrawer...
|
||||
miniDrawerView = miniDrawer?.build(context)
|
||||
updateMiniDrawer()
|
||||
|
||||
toolbar.profileImageClickListener = {
|
||||
@ -215,62 +208,62 @@ class NavDrawer(
|
||||
appendItem(item)
|
||||
}
|
||||
fun appendItem(item: IDrawerItem<*>) {
|
||||
drawer?.addItem(item)
|
||||
drawer.addItems(item)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
fun appendItems(vararg items: IDrawerItem<*>) {
|
||||
drawer?.addItems(*items)
|
||||
drawer.addItems(*items)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
fun prependItem(item: IDrawerItem<*>) {
|
||||
drawer?.addItemAtPosition(item, 0)
|
||||
drawer.addItemAtPosition(0, item)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
fun prependItems(vararg items: IDrawerItem<*>) {
|
||||
drawer?.addItemsAtPosition(0, *items)
|
||||
drawer.addItemsAtPosition(0, *items)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
fun addItemAt(index: Int, item: IDrawerItem<*>) {
|
||||
drawer?.addItemAtPosition(item, index)
|
||||
drawer.addItemAtPosition(index, item)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
fun addItemsAt(index: Int, vararg items: IDrawerItem<*>) {
|
||||
drawer?.addItemsAtPosition(index, *items)
|
||||
drawer.addItemsAtPosition(index, *items)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
fun removeItemById(id: Int) {
|
||||
drawer?.removeItem(id.toLong())
|
||||
drawer.removeItems(id.toLong())
|
||||
updateMiniDrawer()
|
||||
}
|
||||
fun removeItemAt(index: Int) {
|
||||
drawer?.removeItemByPosition(index)
|
||||
drawer.removeItemByPosition(index)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
fun removeAllItems() {
|
||||
drawer?.removeAllItems()
|
||||
drawer.removeAllItems()
|
||||
updateMiniDrawer()
|
||||
}
|
||||
|
||||
fun getItemById(id: Int, run: (it: IDrawerItem<*>?) -> Unit) {
|
||||
drawer?.getDrawerItem(id.toLong()).also {
|
||||
drawer.getDrawerItem(id.toLong()).also {
|
||||
run(it)
|
||||
if (it != null)
|
||||
drawer?.updateItem(it)
|
||||
drawer.updateItem(it)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
}
|
||||
fun getItemByIndex(index: Int, run: (it: IDrawerItem<*>?) -> Unit) {
|
||||
drawer?.drawerItems?.getOrNull(index).also {
|
||||
drawer.itemAdapter.itemList.get(index).also {
|
||||
run(it)
|
||||
if (it != null)
|
||||
drawer?.updateItem(it)
|
||||
drawer.updateItem(it)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
}
|
||||
|
||||
fun setItems(vararg items: IDrawerItem<*>) {
|
||||
drawer?.removeAllItems()
|
||||
drawer?.addItems(*items)
|
||||
drawer.removeAllItems()
|
||||
drawer.addItems(*items)
|
||||
updateMiniDrawer()
|
||||
}
|
||||
|
||||
@ -282,12 +275,12 @@ class NavDrawer(
|
||||
|_| |_| |_| \_/ \__,_|\__\___| |_| |_| |_|\___|\__|_| |_|\___/ \__,_|__*/
|
||||
private fun drawerSetDragMargin(size: Float) {
|
||||
try {
|
||||
val mDrawerLayout = drawer?.drawerLayout
|
||||
val mDragger = mDrawerLayout?.javaClass?.getDeclaredField(
|
||||
val mDrawerLayout = drawerLayout
|
||||
val mDragger = mDrawerLayout::class.java.getDeclaredField(
|
||||
"mLeftDragger"
|
||||
)//mRightDragger for right obviously
|
||||
mDragger?.isAccessible = true
|
||||
val draggerObj = mDragger?.get(mDrawerLayout) as ViewDragHelper?
|
||||
mDragger.isAccessible = true
|
||||
val draggerObj = mDragger.get(mDrawerLayout) as ViewDragHelper?
|
||||
|
||||
val mEdgeSize = draggerObj?.javaClass?.getDeclaredField(
|
||||
"mEdgeSize"
|
||||
@ -327,36 +320,37 @@ class NavDrawer(
|
||||
}
|
||||
|
||||
internal fun decideDrawerMode(orientation: Int, widthDp: Int, heightDp: Int) {
|
||||
val drawerLayoutParams = DrawerLayout.LayoutParams(WRAP_CONTENT, MATCH_PARENT).apply {
|
||||
gravity = Gravity.START
|
||||
}
|
||||
val fixedLayoutParams = FrameLayout.LayoutParams(UIUtils.convertDpToPixel(300f, context).toInt(), MATCH_PARENT)
|
||||
|
||||
Log.d("NavLib", "Deciding drawer mode:")
|
||||
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
|
||||
if (fixedDrawerContainer.childCount > 0) {
|
||||
fixedDrawerContainer.removeAllViews()
|
||||
}
|
||||
Log.d("NavLib", "- fixed container disabled")
|
||||
drawer?.drawerLayout?.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
|
||||
if (drawer?.drawerLayout?.indexOfChild(drawerView) == -1) {
|
||||
drawer?.drawerLayout?.addView(drawerView)
|
||||
}
|
||||
Log.d("NavLib", "- slider enabled")
|
||||
|
||||
if (miniDrawerContainerLandscape.childCount > 0) {
|
||||
miniDrawerContainerLandscape.removeAllViews()
|
||||
if (drawerContainerLandscape.childCount > 0) {
|
||||
drawerContainerLandscape.removeAllViews()
|
||||
}
|
||||
Log.d("NavLib", "- mini drawer land disabled")
|
||||
|
||||
if (drawerLayout.indexOfChild(drawer) == -1) {
|
||||
drawerLayout.addView(drawer, drawerLayoutParams)
|
||||
}
|
||||
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
|
||||
Log.d("NavLib", "- slider enabled")
|
||||
|
||||
if ((widthDp >= 480 && miniDrawerVisiblePortrait != false) || miniDrawerVisiblePortrait == true) {
|
||||
if (miniDrawerView == null)
|
||||
miniDrawerView = miniDrawer?.build(context)
|
||||
if (miniDrawerContainerPortrait.indexOfChild(miniDrawerView) == -1)
|
||||
miniDrawerContainerPortrait.addView(miniDrawerView)
|
||||
if (drawerContainerPortrait.indexOfChild(miniDrawer) == -1)
|
||||
drawerContainerPortrait.addView(miniDrawer)
|
||||
Log.d("NavLib", "- mini drawer port enabled")
|
||||
drawerSetDragMargin(72 * resources.displayMetrics.density)
|
||||
drawerMode = DRAWER_MODE_MINI
|
||||
updateMiniDrawer()
|
||||
}
|
||||
else {
|
||||
if (miniDrawerContainerPortrait.childCount > 0) {
|
||||
miniDrawerContainerPortrait.removeAllViews()
|
||||
if (drawerContainerPortrait.childCount > 0) {
|
||||
drawerContainerPortrait.removeAllViews()
|
||||
}
|
||||
Log.d("NavLib", "- mini drawer port disabled")
|
||||
drawerSetDragMargin(20 * resources.displayMetrics.density)
|
||||
@ -364,68 +358,67 @@ class NavDrawer(
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (miniDrawerContainerPortrait.childCount > 0) {
|
||||
miniDrawerContainerPortrait.removeAllViews()
|
||||
if (drawerContainerPortrait.childCount > 0) {
|
||||
drawerContainerPortrait.removeAllViews()
|
||||
}
|
||||
Log.d("NavLib", "- mini drawer port disabled")
|
||||
|
||||
if ((widthDp in 480 until 9000 && miniDrawerVisibleLandscape != false) || miniDrawerVisibleLandscape == true) {
|
||||
if (miniDrawerView == null)
|
||||
miniDrawerView = miniDrawer?.build(context)
|
||||
if (miniDrawerContainerLandscape.indexOfChild(miniDrawerView) == -1)
|
||||
miniDrawerContainerLandscape.addView(miniDrawerView)
|
||||
if ((widthDp in 480 until 900 && miniDrawerVisibleLandscape != false) || miniDrawerVisibleLandscape == true) {
|
||||
if (drawerContainerLandscape.indexOfChild(miniDrawer) == -1)
|
||||
drawerContainerLandscape.addView(miniDrawer)
|
||||
Log.d("NavLib", "- mini drawer land enabled")
|
||||
drawerSetDragMargin(72 * resources.displayMetrics.density)
|
||||
drawerMode = DRAWER_MODE_MINI
|
||||
updateMiniDrawer()
|
||||
}
|
||||
else {
|
||||
if (miniDrawerContainerLandscape.childCount > 0) {
|
||||
miniDrawerContainerLandscape.removeAllViews()
|
||||
if (drawerContainerLandscape.childCount > 0) {
|
||||
drawerContainerLandscape.removeAllViews()
|
||||
}
|
||||
Log.d("NavLib", "- mini drawer land disabled")
|
||||
drawerSetDragMargin(20 * resources.displayMetrics.density)
|
||||
drawerMode = DRAWER_MODE_NORMAL
|
||||
}
|
||||
if (widthDp >= 9000) {
|
||||
if (widthDp >= 900) {
|
||||
// screen is big enough to show fixed drawer
|
||||
if (drawer?.drawerLayout?.indexOfChild(drawerView) != -1) {
|
||||
if (drawerLayout.indexOfChild(drawer) != -1) {
|
||||
// remove from slider
|
||||
drawer?.drawerLayout?.removeView(drawerView)
|
||||
drawerLayout.removeView(drawer)
|
||||
}
|
||||
// lock the slider
|
||||
drawer?.drawerLayout?.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
|
||||
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
|
||||
Log.d("NavLib", "- slider disabled")
|
||||
// add to fixed container
|
||||
if (fixedDrawerContainer.indexOfChild(drawerView) == -1)
|
||||
fixedDrawerContainer.addView(drawerView)
|
||||
if (drawerContainerLandscape.indexOfChild(drawer) == -1)
|
||||
drawerContainerLandscape.addView(drawer, fixedLayoutParams)
|
||||
drawer.visibility = View.VISIBLE
|
||||
Log.d("NavLib", "- fixed container enabled")
|
||||
drawerMode = DRAWER_MODE_FIXED
|
||||
}
|
||||
else {
|
||||
// screen is too small for the fixed drawer
|
||||
if (fixedDrawerContainer.childCount > 0) {
|
||||
if (drawerContainerLandscape.indexOfChild(drawer) != -1) {
|
||||
// remove from fixed container
|
||||
fixedDrawerContainer.removeAllViews()
|
||||
drawerContainerLandscape.removeView(drawer)
|
||||
}
|
||||
Log.d("NavLib", "- fixed container disabled")
|
||||
// unlock the slider
|
||||
drawer?.drawerLayout?.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
|
||||
if (drawer?.drawerLayout?.indexOfChild(drawerView) == -1) {
|
||||
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
|
||||
if (drawerLayout.indexOfChild(drawer) == -1) {
|
||||
// add to slider
|
||||
drawer?.drawerLayout?.addView(drawerView)
|
||||
drawerLayout.addView(drawer, drawerLayoutParams)
|
||||
}
|
||||
Log.d("NavLib", "- slider enabled")
|
||||
}
|
||||
}
|
||||
|
||||
miniDrawerElevation.visibility = if (drawerMode == DRAWER_MODE_MINI) View.VISIBLE else View.GONE
|
||||
miniDrawerElevation.visibility = if (drawerMode == DRAWER_MODE_MINI || drawerMode == DRAWER_MODE_FIXED) View.VISIBLE else View.GONE
|
||||
}
|
||||
|
||||
private fun updateMiniDrawer() {
|
||||
selection = drawer?.currentSelection?.toInt() ?: -1
|
||||
selection = drawer.selectedItemIdentifier.toInt()
|
||||
//if (drawerMode == DRAWER_MODE_MINI)
|
||||
miniDrawer?.createItems()
|
||||
miniDrawer.createItems()
|
||||
}
|
||||
|
||||
/* _____ _ _ _ _ _ _
|
||||
@ -435,45 +428,37 @@ class NavDrawer(
|
||||
| | | |_| | |_) | | | (__ | | | | | | __/ |_| | | | (_) | (_| \__ \
|
||||
|_| \__,_|_.__/|_|_|\___| |_| |_| |_|\___|\__|_| |_|\___/ \__,_|__*/
|
||||
var isOpen
|
||||
get() = drawer?.isDrawerOpen ?: false || drawerMode == DRAWER_MODE_FIXED
|
||||
get() = drawerLayout.isOpen || drawerMode == DRAWER_MODE_FIXED
|
||||
set(value) {
|
||||
if (drawerMode == DRAWER_MODE_FIXED)
|
||||
return
|
||||
if (value && !isOpen) drawer?.openDrawer() else if (!value && isOpen) drawer?.closeDrawer()
|
||||
if (value && !isOpen) drawerLayout.open() else if (!value && isOpen) drawerLayout.close()
|
||||
}
|
||||
fun open() { isOpen = true }
|
||||
fun close() { isOpen = false }
|
||||
fun toggle() {
|
||||
if (drawer == null)
|
||||
return
|
||||
isOpen = !isOpen
|
||||
}
|
||||
fun toggle() { isOpen = !isOpen }
|
||||
|
||||
var profileSelectionIsOpen
|
||||
get() = accountHeader?.isSelectionListShown == true
|
||||
get() = accountHeader.selectionListShown
|
||||
set(value) {
|
||||
if (value != profileSelectionIsOpen)
|
||||
profileSelectionToggle()
|
||||
}
|
||||
fun profileSelectionOpen() { profileSelectionIsOpen = true }
|
||||
fun profileSelectionClose() { profileSelectionIsOpen = false }
|
||||
fun profileSelectionToggle() {
|
||||
accountHeader?.let {
|
||||
it.toggleSelectionList(it.view.context)
|
||||
}
|
||||
}
|
||||
fun profileSelectionToggle() { accountHeader.selectionListShown = !accountHeader.selectionListShown }
|
||||
|
||||
var drawerOpenedListener: (() -> Unit)? = null
|
||||
var drawerClosedListener: (() -> Unit)? = null
|
||||
var drawerItemSelectedListener: ((id: Int, position: Int, drawerItem: IDrawerItem<*>) -> Boolean)? = null
|
||||
var drawerItemLongClickListener: ((id: Int, position: Int, drawerItem: IDrawerItem<*>) -> Boolean)? = null
|
||||
var drawerProfileSelectedListener: ((id: Int, profile: IProfile<*>, current: Boolean, view: View?) -> Boolean)? = null
|
||||
var drawerProfileLongClickListener: ((id: Int, profile: IProfile<*>, current: Boolean, view: View) -> Boolean)? = null
|
||||
var drawerProfileImageClickListener: ((id: Int, profile: IProfile<*>, current: Boolean, view: View) -> Boolean)? = null
|
||||
var drawerProfileImageLongClickListener: ((id: Int, profile: IProfile<*>, current: Boolean, view: View) -> Boolean)? = null
|
||||
var drawerProfileSelectedListener: ((id: Int, profile: IProfile, current: Boolean, view: View?) -> Boolean)? = null
|
||||
var drawerProfileLongClickListener: ((id: Int, profile: IProfile, current: Boolean, view: View?) -> Boolean)? = null
|
||||
var drawerProfileImageClickListener: ((id: Int, profile: IProfile, current: Boolean, view: View) -> Boolean)? = null
|
||||
var drawerProfileImageLongClickListener: ((id: Int, profile: IProfile, current: Boolean, view: View) -> Boolean)? = null
|
||||
var drawerProfileListEmptyListener: (() -> Unit)? = null
|
||||
var drawerProfileSettingClickListener: ((id: Int, view: View?) -> Boolean)? = null
|
||||
var drawerProfileSettingLongClickListener: ((id: Int, view: View) -> Boolean)? = null
|
||||
var drawerProfileSettingLongClickListener: ((id: Int, view: View?) -> Boolean)? = null
|
||||
|
||||
fun miniDrawerEnabled(): Boolean = drawerMode == DRAWER_MODE_MINI
|
||||
fun fixedDrawerEnabled(): Boolean = drawerMode == DRAWER_MODE_FIXED
|
||||
@ -485,26 +470,26 @@ class NavDrawer(
|
||||
profileSelectionClose()
|
||||
selection = id
|
||||
|
||||
if (drawer?.currentSelection != id.toLong()) {
|
||||
if (drawer.selectedItemIdentifier != id.toLong()) {
|
||||
|
||||
}
|
||||
|
||||
if (drawer?.currentSelection != id.toLong() || !fireOnClick)
|
||||
drawer?.setSelection(id.toLong(), fireOnClick)
|
||||
if (drawer.selectedItemIdentifier != id.toLong() || !fireOnClick)
|
||||
drawer.setSelection(id.toLong(), fireOnClick)
|
||||
|
||||
miniDrawer?.setSelection(-1L)
|
||||
miniDrawer.setSelection(-1L)
|
||||
if (drawerMode == DRAWER_MODE_MINI)
|
||||
miniDrawer?.setSelection(id.toLong())
|
||||
miniDrawer.setSelection(id.toLong())
|
||||
}
|
||||
fun getSelection(): Int = selection
|
||||
|
||||
// TODO 2019-08-27 add methods for Drawable, @DrawableRes
|
||||
fun setAccountHeaderBackground(path: String?) {
|
||||
if (path == null) {
|
||||
accountHeader?.setBackgroundRes(R.drawable.header)
|
||||
accountHeader.headerBackground = ImageHolder(R.drawable.header)
|
||||
return
|
||||
}
|
||||
accountHeader?.setHeaderBackground(ImageHolder(path))
|
||||
accountHeader.headerBackground = ImageHolder(path)
|
||||
}
|
||||
|
||||
/* _____ __ _ _
|
||||
@ -516,12 +501,12 @@ class NavDrawer(
|
||||
private var profileList: MutableList<IDrawerProfile> = mutableListOf()
|
||||
|
||||
fun addProfileSettings(vararg items: ProfileSettingDrawerItem) {
|
||||
accountHeader?.profiles?.addAll(items)
|
||||
accountHeader.profiles?.addAll(items)
|
||||
}
|
||||
|
||||
private fun updateProfileList() {
|
||||
// remove all profile items
|
||||
val profiles = accountHeader?.profiles?.filterNot { it is ProfileDrawerItem } as MutableList<IProfile<*>>?
|
||||
val profiles = accountHeader.profiles?.filterNot { it is ProfileDrawerItem } as MutableList<IProfile>?
|
||||
|
||||
if (profileList.isEmpty())
|
||||
drawerProfileListEmptyListener?.invoke()
|
||||
@ -537,7 +522,7 @@ class NavDrawer(
|
||||
.also { profiles?.add(index, it) }
|
||||
}
|
||||
|
||||
accountHeader?.profiles = profiles
|
||||
accountHeader.profiles = profiles
|
||||
|
||||
updateMiniDrawer()
|
||||
}
|
||||
@ -550,10 +535,10 @@ class NavDrawer(
|
||||
val profileListEmpty: Boolean
|
||||
get() = profileList.isEmpty()
|
||||
var currentProfile: Int
|
||||
get() = accountHeader?.activeProfile?.identifier?.toInt() ?: -1
|
||||
get() = accountHeader.activeProfile?.identifier?.toInt() ?: -1
|
||||
set(value) {
|
||||
Log.d("NavDebug", "currentProfile = $value")
|
||||
accountHeader?.setActiveProfile(value.toLong(), false)
|
||||
accountHeader.setActiveProfile(value.toLong(), false)
|
||||
currentProfileObj = profileList.singleOrNull { it.id == value }
|
||||
setToolbarProfileImage(currentProfileObj)
|
||||
updateBadges()
|
||||
@ -595,7 +580,7 @@ class NavDrawer(
|
||||
updateProfileList()
|
||||
}
|
||||
fun removeAllProfileSettings() {
|
||||
accountHeader?.profiles = accountHeader?.profiles?.filterNot { it is ProfileSettingDrawerItem }?.toMutableList()
|
||||
accountHeader.profiles = accountHeader.profiles?.filterNot { it is ProfileSettingDrawerItem }?.toMutableList()
|
||||
}
|
||||
|
||||
fun getProfileById(id: Int, run: (it: IDrawerProfile?) -> Unit) {
|
||||
@ -631,10 +616,10 @@ class NavDrawer(
|
||||
|
||||
currentProfileObj = profileList.singleOrNull { it.id == currentProfile }
|
||||
|
||||
drawer?.drawerItems?.forEachIndexed { index, item ->
|
||||
if (item is Badgeable<*>) {
|
||||
item.withBadge(null)
|
||||
drawer!!.updateItem(item)
|
||||
drawer.itemAdapter.itemList.items.forEachIndexed { index, item ->
|
||||
if (item is Badgeable) {
|
||||
item.badge = null
|
||||
drawer.updateItem(item)
|
||||
}
|
||||
}
|
||||
|
||||
@ -652,7 +637,7 @@ class NavDrawer(
|
||||
return@forEach
|
||||
}
|
||||
Log.d("NavDebug", "- Set badge ${it.count} for ${it.drawerItemId}")
|
||||
drawer?.updateBadge(
|
||||
drawer.updateBadge(
|
||||
it.drawerItemId?.toLong() ?: 0,
|
||||
when {
|
||||
it.count == 0 -> null
|
||||
@ -720,4 +705,4 @@ class NavDrawer(
|
||||
unreadCounterList.add(UnreadCounter(profileId, type, null, count))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,8 +7,8 @@
|
||||
android:orientation="horizontal"
|
||||
tools:parentTag="FrameLayout">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/nv_drawerContainer"
|
||||
<androidx.drawerlayout.widget.DrawerLayout
|
||||
android:id="@+id/nv_drawerLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="horizontal"
|
||||
@ -37,10 +37,11 @@
|
||||
tools:paddingBottom="48dp">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/nv_miniDrawerContainerLandscape"
|
||||
android:id="@+id/nv_drawerContainerLandscape"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/colorSurface_4dp"/><!--tools:layout_width="72dp"-->
|
||||
android:background="@color/colorSurface_4dp"
|
||||
tools:layout_width="72dp" />
|
||||
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
android:id="@+id/nv_coordinator"
|
||||
@ -68,7 +69,7 @@
|
||||
android:layout_marginEnd="13dp"
|
||||
android:layout_marginRight="13dp"
|
||||
android:scaleType="centerCrop"
|
||||
app:biv_selectorOnPress="#80ffffff"
|
||||
app:materialDrawerSelectorOnPress="#80ffffff"
|
||||
tools:src="@tools:sample/backgrounds/scenic" />
|
||||
|
||||
</pl.szczodrzynski.navlib.NavToolbar>
|
||||
@ -94,7 +95,8 @@
|
||||
android:id="@+id/nv_miniDrawerContainerPortrait"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/colorSurface_4dp" /><!--tools:layout_width="72dp"-->
|
||||
android:background="@color/colorSurface_4dp"
|
||||
tools:layout_width="72dp" /><!--tools:layout_width="72dp"-->
|
||||
|
||||
<View
|
||||
android:id="@+id/nv_miniDrawerElevation"
|
||||
@ -178,13 +180,7 @@
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/nv_fixedDrawerContainer"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
tools:background="#4caf50"/><!--tools:layout_width="300dp"-->
|
||||
|
||||
</LinearLayout>
|
||||
</androidx.drawerlayout.widget.DrawerLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/nv_statusBarDarker"
|
||||
@ -212,4 +208,4 @@
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
|
||||
</merge>
|
||||
</merge>
|
||||
|
@ -95,16 +95,9 @@
|
||||
<item name="android:textViewStyle">@style/NavView.TextView</item>
|
||||
|
||||
<!-- drawer & bottom sheet styling -->
|
||||
<item name="material_drawer_background">?android:colorBackground</item>
|
||||
<item name="material_drawer_primary_text">?android:textColorPrimary</item>
|
||||
<item name="material_drawer_primary_icon">#5F6368</item>
|
||||
<item name="material_drawer_secondary_text">?android:textColorSecondary</item>
|
||||
<item name="material_drawer_hint_text">@color/material_drawer_hint_text</item>
|
||||
<item name="material_drawer_divider">@color/material_drawer_divider</item>
|
||||
<item name="material_drawer_selected">@color/material_drawer_selected</item> <!-- Material 2 defines 12% alpha, primary color -->
|
||||
<item name="material_drawer_selected_text">#242424</item>
|
||||
<item name="material_drawer_header_selection_text">@color/material_drawer_header_selection_text</item>
|
||||
<item name="material_drawer_header_selection_subtext">@color/material_drawer_dark_header_selection_subtext</item>
|
||||
<item name="materialDrawerStyle">@style/Widget.MaterialDrawerStyle</item>
|
||||
<item name="materialDrawerHeaderStyle">@style/Widget.MaterialDrawerHeaderStyle</item>
|
||||
<!--<item name="materialDrawerPrimaryIcon">#5F6368</item>-->
|
||||
</style>
|
||||
|
||||
<style name="NavView.Dark" parent="Theme.MaterialComponents.NoActionBar">
|
||||
@ -148,16 +141,9 @@
|
||||
<item name="android:textViewStyle">@style/NavView.TextView</item>
|
||||
|
||||
<!-- drawer & bottom sheet styling -->
|
||||
<item name="material_drawer_background">?android:colorBackground</item>
|
||||
<item name="material_drawer_primary_text">?android:textColorPrimary</item>
|
||||
<item name="material_drawer_primary_icon">#9AA0A6</item>
|
||||
<item name="material_drawer_secondary_text">?android:textColorSecondary</item>
|
||||
<item name="material_drawer_hint_text">@color/material_drawer_dark_hint_text</item>
|
||||
<item name="material_drawer_divider">@color/material_drawer_dark_divider</item>
|
||||
<item name="material_drawer_selected">@color/material_drawer_dark_selected</item> <!-- Material 2 defines 12% alpha, primary color -->
|
||||
<item name="material_drawer_selected_text">#FFFFFF</item>
|
||||
<item name="material_drawer_header_selection_text">@color/material_drawer_dark_header_selection_text</item>
|
||||
<item name="material_drawer_header_selection_subtext">@color/material_drawer_dark_header_selection_subtext</item>
|
||||
<item name="materialDrawerStyle">@style/Widget.MaterialDrawerStyle</item>
|
||||
<item name="materialDrawerHeaderStyle">@style/Widget.MaterialDrawerHeaderStyle</item>
|
||||
<!--<item name="material_drawer_primary_icon">#9AA0A6</item>-->
|
||||
</style>
|
||||
|
||||
<style name="NavView.Black" parent="NavView.Dark">
|
||||
@ -170,4 +156,4 @@
|
||||
<style name="width_max_600dp">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
</style>
|
||||
</resources>
|
||||
</resources>
|
||||
|
Loading…
x
Reference in New Issue
Block a user