Skip to content

Commit

Permalink
v13 0.1.9
Browse files Browse the repository at this point in the history
Fixes
* fix add variant
  • Loading branch information
aadilmirrani committed Dec 14, 2018
1 parent cf1595c commit 5c468e0
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 52 deletions.
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ android {
applicationId "com.reacttive.aadilmirrani.multilistselector"
minSdkVersion 16
targetSdkVersion 28
versionCode 12
versionName "0.1.8"
versionCode 13
versionName "0.1.9"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.reacttive.aadilmirrani.multilistselector

import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.reacttive.aadilmirrani.mlslibrary.listener.OnTagSelectListener
Expand All @@ -17,6 +16,7 @@ class MainActivity : AppCompatActivity(), OnTagSelectListener {
setContentView(R.layout.activity_main)

var value = 1
var counter = 0

val listVariant = arrayListOf<Variant>()
listVariant.add(Variant(TagHeader("A", "Color"), arrayListOf(TagName("a1", "Alpha"), TagName("a2", "Beta"), TagName("a3", "Gamma"))))
Expand Down Expand Up @@ -64,7 +64,8 @@ class MainActivity : AppCompatActivity(), OnTagSelectListener {
}

btn_add_group.setOnClickListener {
recycler_view.addIndependentGroup(Variant(TagHeader("C", "Home", true), arrayListOf(TagName("c1", "Cup"), TagName("c2", "Light"), TagName("c3", "Table"))))
counter++
recycler_view.addIndependentGroup( Variant(TagHeader("C", "Home", true), arrayListOf(TagName("c1", "Cup $counter"), TagName("c2", "Light"), TagName("c3", "Table"))))
}

}
Expand Down
4 changes: 2 additions & 2 deletions mlslibrary/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ android {
defaultConfig {
minSdkVersion 16
targetSdkVersion 28
versionCode 12
versionName "0.1.8"
versionCode 13
versionName "0.1.9"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import com.reacttive.aadilmirrani.mlslibrary.listener.OnTagSelectListener
import com.reacttive.aadilmirrani.mlslibrary.model.MLSTagStyle
import com.reacttive.aadilmirrani.mlslibrary.model.Variant
import java.util.*
import kotlin.collections.LinkedHashMap


class MLSView : LinearLayout {
Expand Down Expand Up @@ -138,22 +139,30 @@ class MLSView : LinearLayout {

clearAll()
RecyclerData.delimiter = delimiter
RecyclerData.listVariant = listVariant
RecyclerData.listVariant = listVariant.associateByTo(RecyclerData.listVariant, {it.title.key}, {it} )
RecyclerData.listValue = listValue
RecyclerData.generateNormal()

for(variant in listVariant) {
AppData.tvList.add(this.addHeaderTextView(context, variant.title, headerTextColor?: defaultHeaderTextColor, headerTextSize ?: defaultHeaderTextSize))
AppData.rvList.add(this.addRecyclerView(context, mlsTagStyle, variant, groupBotomPadding ?: defaultGroupBottomPadding))
AppData.tvList[variant.title.key] = this.addHeaderTextView(context, variant.title, headerTextColor?: defaultHeaderTextColor, headerTextSize ?: defaultHeaderTextSize)
AppData.rvList[variant.title.key] = this.addRecyclerView(context, mlsTagStyle, variant, groupBotomPadding ?: defaultGroupBottomPadding)
}
this.invalidate()
}

fun addIndependentGroup(variant: Variant) {
if(variant.title.independent) {
RecyclerData.listVariant.add(variant)
AppData.tvList.add(this.addHeaderTextView(context, variant.title, headerTextColor?: defaultHeaderTextColor, headerTextSize ?: defaultHeaderTextSize))
AppData.rvList.add(this.addRecyclerView(context, mlsTagStyle, variant, groupBotomPadding ?: defaultGroupBottomPadding))
if(RecyclerData.listVariant.containsKey(variant.title.key)) {
this.removeView(AppData.tvList[variant.title.key])
this.removeView(AppData.rvList[variant.title.key])

AppData.tvList.remove(variant.title.key)
AppData.tvList.remove(variant.title.key)
}

RecyclerData.listVariant[variant.title.key] = variant
AppData.tvList[variant.title.key] = this.addHeaderTextView(context, variant.title, headerTextColor?: defaultHeaderTextColor, headerTextSize ?: defaultHeaderTextSize)
AppData.rvList[variant.title.key] = this.addRecyclerView(context, mlsTagStyle, variant, groupBotomPadding ?: defaultGroupBottomPadding)
RecyclerData.addIndependentGroup(variant)
AppData.notifyDataSetChanged()
}
Expand Down Expand Up @@ -182,7 +191,7 @@ class MLSView : LinearLayout {
fun setHeaderTypeface(typeface: Typeface?) {
typeface?.let { tf ->
AppData.headerTypeface = tf
AppData.tvList.forEach { it.typeface = tf }
AppData.tvList.forEach { it.value.typeface = tf }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ import com.reacttive.aadilmirrani.mlslibrary.listener.OnTagSelectListener

object AppData {

internal val tvList = arrayListOf<TextView>()
internal val rvList = arrayListOf<RecyclerView>()
internal val tvList = hashMapOf<String, TextView>()
internal val rvList = hashMapOf<String, RecyclerView>()

internal var mOnTagSelectListener: OnTagSelectListener? = null

internal var headerTypeface: Typeface? = null
internal var tagTypeface: Typeface? = null

fun notifyDataSetChanged() {
rvList.forEach { it.adapter?.notifyDataSetChanged() }
rvList.forEach { it.value.adapter?.notifyDataSetChanged() }
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.reacttive.aadilmirrani.mlslibrary.helper

import android.util.Log
import com.reacttive.aadilmirrani.mlslibrary.model.Variant


Expand All @@ -12,7 +11,7 @@ object RecyclerData {
internal val listIndependentSelected = linkedMapOf<String, String>()

internal var delimiter: Char = '+'
internal var listVariant = arrayListOf<Variant>()
internal var listVariant = linkedMapOf<String, Variant>()
internal var listValue = hashMapOf<String, Int>()
internal var enableAll: Boolean = false
internal var preSelected: Boolean = false
Expand All @@ -26,25 +25,25 @@ object RecyclerData {
listVariant.forEach { variant ->
val hashMap = linkedMapOf<String, Int>()
var pre = false
variant.data.forEach { tag ->
variant.value.data.forEach { tag ->
if(tag.selected) {
pre = true
if(preSelected && !variant.title.independent) listSelected[variant.title.key] = tag.key
if(preSelected && !variant.value.title.independent) listSelected[variant.value.title.key] = tag.key
}
hashMap[tag.key] = 1
}
listNormal[variant.title.key] = hashMap
if(preSelected && !pre && !variant.title.independent) listSelected[variant.title.key] = variant.data[0].key
listNormal[variant.value.title.key] = hashMap
if(preSelected && !pre && !variant.value.title.independent) listSelected[variant.value.title.key] = variant.value.data[0].key
}
} else {
val hashMap = linkedMapOf<String, Int>()
listVariant[0].data.forEach { tag ->
listVariant.entries.first().value.data.forEach { tag ->
listValue.forEach { value ->
if(value.key.contains(tag.key)) {
hashMap[tag.key] = 1
}
}
if(hashMap.size > 0) listNormal[listVariant[0].title.key] = hashMap
if(hashMap.size > 0) listNormal[listVariant.entries.first().value.title.key] = hashMap
}
if(preSelected) generatePerSelected()
}
Expand All @@ -54,40 +53,40 @@ object RecyclerData {
fun generateUpdatedValues() {
if(/*delimiter.isNotEmpty() && */listVariant.size > 0 && listValue.size > 0) {
listVariant.forEach { variant ->
if(!variant.title.independent)
if(!variant.value.title.independent)
return@forEach
val hashMap = linkedMapOf<String, Int>()
variant.data.forEach { tag ->
variant.value.data.forEach { tag ->
hashMap[tag.key] = 1
}
listNormal[variant.title.key] = hashMap
listNormal[variant.value.title.key] = hashMap
}

if(!enableAll) {
var clearRest = false
var key = ""
listVariant.forEach { variant ->
if(clearRest) {
if(!variant.title.independent) {
listNormal.remove(variant.title.key)
listSelected.remove(variant.title.key)
if(!variant.value.title.independent) {
listNormal.remove(variant.value.title.key)
listSelected.remove(variant.value.title.key)
}
} else {
val hashMap = linkedMapOf<String, Int>()
variant.data.forEach { tag ->
variant.value.data.forEach { tag ->
listValue.filter { it.key.contains(key) }.forEach { value ->
if(value.key.contains(tag.key)) {
hashMap[tag.key] = 1
}
}
if(hashMap.size > 0) listNormal[variant.title.key] = hashMap
if(hashMap.size > 0) listNormal[variant.value.title.key] = hashMap
}

listSelected[variant.title.key]?.let { select ->
listNormal[variant.title.key]?.get(select)?.let {
listSelected[variant.value.title.key]?.let { select ->
listNormal[variant.value.title.key]?.get(select)?.let {
key = if(key.isEmpty()) select else "$key+$select"
} ?: kotlin.run {
listSelected.remove(variant.title.key)
listSelected.remove(variant.value.title.key)
clearRest = true
}
} ?: kotlin.run {
Expand Down Expand Up @@ -116,43 +115,43 @@ object RecyclerData {

private fun addIndependent() {
listVariant.forEach { variant ->
if(!variant.title.independent)
if(!variant.value.title.independent)
return@forEach
val hashMap = linkedMapOf<String, Int>()
var pre = false
variant.data.forEach { tag ->
variant.value.data.forEach { tag ->
if(tag.selected) {
pre = true
listIndependentSelected[variant.title.key] = tag.key
listIndependentSelected[variant.value.title.key] = tag.key
}
hashMap[tag.key] = 1
}
listNormal[variant.title.key] = hashMap
if(preSelected && !pre) listIndependentSelected[variant.title.key] = variant.data[0].key
listNormal[variant.value.title.key] = hashMap
if(preSelected && !pre) listIndependentSelected[variant.value.title.key] = variant.value.data[0].key
}
}

private fun generatePerSelected() {
listVariant.forEach { variant ->
if(variant.title.independent)
if(variant.value.title.independent)
return@forEach
var pre = false
variant.data.forEach { tag ->
variant.value.data.forEach { tag ->
if(tag.selected) {
listNormal[variant.title.key]?.get(tag.key)?.let {
listNormal[variant.value.title.key]?.get(tag.key)?.let {
// RecyclerData.updateSelectedData(variant.title.key, tag.key)
// RecyclerData.updateNormalList(variant.title.key)
updateData(variant, tag.key)
updateData(variant.value, tag.key)
pre = true
}
}
}
if(!pre) {
listNormal[variant.title.key]?.entries?.first()?.let { tag ->
listNormal[variant.title.key]?.get(tag.key)?.let {
listNormal[variant.value.title.key]?.entries?.first()?.let { tag ->
listNormal[variant.value.title.key]?.get(tag.key)?.let {
// RecyclerData.updateSelectedData(variant.title.key, tag.key)
// RecyclerData.updateNormalList(variant.title.key)
updateData(variant, tag.key)
updateData(variant.value, tag.key)
}
}
}
Expand All @@ -164,7 +163,7 @@ object RecyclerData {
if(group.title.independent) listIndependentSelected[group.title.key] = item
else {
listSelected[group.title.key] = item
listVariant.forEachIndexed { index, variant ->
listVariant.values.forEachIndexed { index, variant ->
if(variant.title.key == group.title.key) {
if(!enableAll) {
updateSelectedFrom(index)
Expand All @@ -186,7 +185,7 @@ object RecyclerData {
}
*/
private fun updateSelectedFrom(index: Int) {
listVariant.forEachIndexed { i, variant ->
listVariant.values.forEachIndexed { i, variant ->
if(i > index) {
listSelected.remove(variant.title.key)
}
Expand All @@ -203,7 +202,7 @@ object RecyclerData {
*/
private fun updateNormalFrom(index: Int) {
var once = true
listVariant.forEachIndexed { i, variant ->
listVariant.values.forEachIndexed { i, variant ->
if(i >= index) {
if(once) {
if(variant.title.independent) return@forEachIndexed
Expand Down Expand Up @@ -256,7 +255,7 @@ object RecyclerData {
}

internal fun isSelected(): Boolean {
val groupSize = listVariant.filter { !it.title.independent }.size
val groupSize = listVariant.filter { !it.value.title.independent }.size
val delimiterCount = getPQKey().split("+").size
return groupSize == delimiterCount
}
Expand Down

0 comments on commit 5c468e0

Please sign in to comment.