Skip to content

Commit

Permalink
Merge pull request #294 from Chooloo/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
roeiedri authored Dec 28, 2021
2 parents 9d8e6c9 + 53ccab1 commit 350331c
Show file tree
Hide file tree
Showing 451 changed files with 2,649 additions and 3,148 deletions.
11 changes: 6 additions & 5 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'kotlin-android'

android {
compileSdkVersion 30
compileSdkVersion 31

defaultConfig {
applicationId "com.chooloo.www.koler"
minSdkVersion 25
targetSdkVersion 30
versionCode 63
versionName "v1.2.0"
targetSdkVersion 31
versionCode 64
versionName "v1.3.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

javaCompileOptions {
Expand Down Expand Up @@ -54,7 +54,7 @@ dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')

annotationProcessor(
'androidx.room:room-compiler:2.3.0'
'androidx.room:room-compiler:2.4.0'
)

testImplementation(
Expand All @@ -81,6 +81,7 @@ dependencies {
'io.reactivex.rxjava2:rxjava:2.1.16',
'androidx.appcompat:appcompat:1.2.0',
'com.jakewharton.timber:timber:4.7.1',
'io.github.l4digital:fastscroll:2.0.1',
'androidx.arch.core:core-common:2.1.0',
'io.reactivex.rxjava2:rxandroid:2.0.1',
'androidx.annotation:annotation:1.1.0',
Expand Down
1 change: 0 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/KolerTheme"
android:windowSoftInputMode="adjustResize"
tools:ignore="AllowBackup,GoogleAppIndexingWarning">

<!--region activities-->
Expand Down
13 changes: 2 additions & 11 deletions app/src/main/java/com/chooloo/www/koler/KolerApp.kt
Original file line number Diff line number Diff line change
@@ -1,28 +1,19 @@
package com.chooloo.www.koler

import android.app.Application
import android.content.res.Resources
import androidx.appcompat.app.AppCompatDelegate
import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
import com.chooloo.www.koler.di.component.ComponentRootImpl
import com.chooloo.www.koler.data.call.CallNotification
import com.chooloo.www.koler.di.contextcomponent.ContextComponentImpl

open class KolerApp : Application() {

val componentRoot by lazy {
ComponentRootImpl(this)
}
val component by lazy { ContextComponentImpl(this) }

override fun onCreate() {
super.onCreate()
KolerApp.resources = resources
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM)
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
CallNotification(this).createNotificationChannel()
}
}

companion object {
var resources: Resources? = null
}
}
20 changes: 13 additions & 7 deletions app/src/main/java/com/chooloo/www/koler/adapter/ContactsAdapter.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,28 @@
package com.chooloo.www.koler.adapter

import android.net.Uri
import com.chooloo.www.koler.data.account.Contact
import com.chooloo.www.koler.di.boundcomponent.BoundComponentRoot
import com.chooloo.www.koler.data.account.ContactAccount
import com.chooloo.www.koler.di.activitycomponent.ActivityComponent
import com.chooloo.www.koler.ui.list.ListData
import com.chooloo.www.koler.ui.widgets.listitem.ListItem
import com.chooloo.www.koler.util.initials

class ContactsAdapter(boundComponent: BoundComponentRoot) :
ListAdapter<Contact>(boundComponent) {
override fun onBindListItem(listItem: ListItem, item: Contact) {
open class ContactsAdapter(activityComponent: ActivityComponent) :
ListAdapter<ContactAccount>(activityComponent) {

override fun onBindListItem(listItem: ListItem, item: ContactAccount) {
listItem.apply {
titleText = item.name
boundComponent.phoneAccountsInteractor.getContactAccounts(item.id) { account ->
captionText = account?.firstOrNull()?.number
isCompact = component.preferences.isCompact
component.phones.getContactAccounts(item.id) { accounts ->
captionText = accounts?.firstOrNull()?.number
}

setImageInitials(item.name?.initials())
setImageUri(if (item.photoUri != null) Uri.parse(item.photoUri) else null)
}
}

override fun convertDataToListData(data: List<ContactAccount>) =
ListData.fromContacts(data, true)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.chooloo.www.koler.adapter

import com.chooloo.www.koler.data.account.ContactAccount
import com.chooloo.www.koler.di.activitycomponent.ActivityComponent
import com.chooloo.www.koler.ui.list.ListData
import com.chooloo.www.koler.ui.widgets.listitem.ListItem

class ContactsSuggestionsAdapter(activityComponent: ActivityComponent) :
ContactsAdapter(activityComponent) {

override fun onBindListItem(listItem: ListItem, item: ContactAccount) {
super.onBindListItem(listItem, item)
listItem.isCompact = true
}

override fun convertDataToListData(data: List<ContactAccount>) = ListData.fromContacts(data)
}
120 changes: 39 additions & 81 deletions app/src/main/java/com/chooloo/www/koler/adapter/ListAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,26 @@ package com.chooloo.www.koler.adapter

import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.chooloo.www.koler.data.ListBundle
import com.chooloo.www.koler.di.boundcomponent.BoundComponentRoot
import com.chooloo.www.koler.di.activitycomponent.ActivityComponent
import com.chooloo.www.koler.ui.list.ListData
import com.chooloo.www.koler.ui.widgets.listitem.ListItem
import com.chooloo.www.koler.ui.widgets.listitem.ListItemHolder
import com.l4digital.fastscroll.FastScroller

abstract class ListAdapter<DataType>(
protected val boundComponent: BoundComponentRoot
) : RecyclerView.Adapter<ListItemHolder>() {
private var _isCompact = false
private var _isSelecting = false
private var _isSelectable = true
private var _data: ListBundle<DataType> = ListBundle()
private var _selectedItems: ArrayList<DataType> = arrayListOf()

private var _onItemClickListener: (item: DataType) -> Unit = {}
private var _onItemLongClickListener: (item: DataType) -> Unit = {}
private var _onSelectingChangeListener: (isSelecting: Boolean) -> Unit = {}
private var _onItemsSelectedListener: (items: ArrayList<DataType>) -> Unit = {}

var data: ListBundle<DataType>
get() = _data
@Synchronized
set(value) {
_data = value
notifyDataSetChanged()
}
abstract class ListAdapter<ItemType>(
protected val component: ActivityComponent
) : RecyclerView.Adapter<ListItemHolder>(), FastScroller.SectionIndexer {
private var _data: ListData<ItemType> = ListData()
private var _onItemClickListener: (item: ItemType) -> Unit = {}
private var _onItemLongClickListener: (item: ItemType) -> Unit = {}

var isCompact
get() = _isCompact
var items: List<ItemType>
get() = _data.items
set(value) {
_isCompact = value
_data = convertDataToListData(value)
notifyDataSetChanged()
}

val isSelecting: Boolean
get() = _isSelecting

val selectedItems: ArrayList<DataType>
get() = _selectedItems


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
ListItemHolder(parent.context)
Expand All @@ -49,77 +30,54 @@ abstract class ListAdapter<DataType>(
val dataItem = getItem(position)
holder.listItem.apply {
headerText = getHeader(position)
isCompact = this@ListAdapter.isCompact

setOnClickListener {
if (isSelected && _isSelectable) {
isSelected = false
_selectedItems.remove(dataItem)
if (_selectedItems.size == 0) {
_isSelecting = false
_onSelectingChangeListener.invoke(false)
}
} else if (!isSelected && _isSelecting) {
isSelected = true
_selectedItems.add(dataItem)
_onItemsSelectedListener.invoke(_selectedItems)
} else {
_onItemClickListener.invoke(getItem(position))
}
}

setOnClickListener { _onItemClickListener.invoke(dataItem) }
setOnLongClickListener {
// if (_isSelectable) {
// isSelected = true
// _isSelecting = true
// _selectedItems.add(dataItem)
// _onItemsSelectedListener.invoke(_selectedItems)
// _onSelectingChangeListener.invoke(true)
// } else {
// _onItemLongClickListener.invoke(dataItem)
// }
_onItemLongClickListener.invoke(dataItem)
true
}
boundComponent.animationInteractor.animateIn(this, false)
onBindListItem(this, getItem(position))
component.animations.show(this, false)

onBindListItem(this, dataItem)
}
}

override fun getItemCount() = _data.items.size

fun getHeader(position: Int): String? {
override fun getSectionText(position: Int): String? {
var total = 0
_data.headersCounts.withIndex().forEach { (index, count) ->
when (position) {
total -> return _data.headers[index]
else -> total += count
_data.headersToCounts.values.withIndex().forEach { (index, count) ->
if (position <= total) {
return _data.headersToCounts.keys.toList()[index]
} else {
total += count
}
}
return null
}

private fun getItem(position: Int) = _data.items[position]

fun getHeader(position: Int): String? {
var total = 0
_data.headersToCounts.values.withIndex().forEach { (index, count) ->
when (position) {
total -> return _data.headersToCounts.keys.toList()[index]
else -> total += count
}
}
return null
}

//region listeners setters

fun setOnItemClickListener(onItemClickListener: (item: DataType) -> Unit) {
fun setOnItemClickListener(onItemClickListener: (item: ItemType) -> Unit) {
_onItemClickListener = onItemClickListener
}

fun setOnItemLongClickListener(onItemLongClickListener: (item: DataType) -> Unit) {
fun setOnItemLongClickListener(onItemLongClickListener: (item: ItemType) -> Unit) {
_onItemLongClickListener = onItemLongClickListener
}

fun setOnSelectingChangeListener(onSelectingChangeListener: (isSelecting: Boolean) -> Unit) {
_onSelectingChangeListener = onSelectingChangeListener
}

fun setOnItemsSelectedListener(onItemsSelectedListener: (items: ArrayList<DataType>) -> Unit) {
_onItemsSelectedListener = onItemsSelectedListener
}

//endregion


abstract fun onBindListItem(listItem: ListItem, item: DataType)
abstract fun onBindListItem(listItem: ListItem, item: ItemType)
abstract fun convertDataToListData(data: List<ItemType>): ListData<ItemType>
}

This file was deleted.

28 changes: 28 additions & 0 deletions app/src/main/java/com/chooloo/www/koler/adapter/MenuAdapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.chooloo.www.koler.adapter

import android.graphics.Color
import android.view.MenuItem
import com.chooloo.www.koler.R
import com.chooloo.www.koler.di.activitycomponent.ActivityComponent
import com.chooloo.www.koler.ui.list.ListData
import com.chooloo.www.koler.ui.widgets.listitem.ListItem
import com.google.android.material.internal.ViewUtils

class MenuAdapter(component: ActivityComponent) : ListAdapter<MenuItem>(component) {
override fun onBindListItem(listItem: ListItem, item: MenuItem) {
listItem.apply {
setBackgroundColor(Color.TRANSPARENT)
setTitleTextAppearance(R.style.Koler_Text_Subtitle1)
setImageTint(component.colors.getColor(R.color.color_opposite))
setTitleColor(component.colors.getColor(R.color.color_opposite))

paddingTop = 28
paddingBottom = 28
imageDrawable = item.icon
titleText = item.title.toString()
imageSize = ViewUtils.dpToPx(context, 30).toInt()
}
}

override fun convertDataToListData(data: List<MenuItem>) = ListData(data)
}
11 changes: 7 additions & 4 deletions app/src/main/java/com/chooloo/www/koler/adapter/PhonesAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ import android.provider.ContactsContract.CommonDataKinds.Phone
import android.view.ViewGroup
import com.chooloo.www.koler.R
import com.chooloo.www.koler.data.account.PhoneAccount
import com.chooloo.www.koler.di.boundcomponent.BoundComponentRoot
import com.chooloo.www.koler.di.activitycomponent.ActivityComponent
import com.chooloo.www.koler.ui.list.ListData
import com.chooloo.www.koler.ui.widgets.listitem.ListItem
import com.chooloo.www.koler.ui.widgets.listitem.ListItemButton
import com.chooloo.www.koler.ui.widgets.listitem.ListItemHolder

class PhonesAdapter(boundComponent: BoundComponentRoot) :
ListAdapter<PhoneAccount>(boundComponent) {
class PhonesAdapter(activityComponent: ActivityComponent) :
ListAdapter<PhoneAccount>(activityComponent) {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
ListItemHolder(ListItemButton(parent.context))
Expand All @@ -22,11 +23,13 @@ class PhonesAdapter(boundComponent: BoundComponentRoot) :
isPadded = false
titleText = item.number
captionText =
boundComponent.stringInteractor.getString(Phone.getTypeLabelResource(item.type))
component.strings.getString(Phone.getTypeLabelResource(item.type))

setTitleBold(true)
setImageBackgroundColor(Color.TRANSPARENT)
setImageResource(R.drawable.ic_call_black_24dp)
}
}

override fun convertDataToListData(data: List<PhoneAccount>) = ListData.fromPhones(data)
}
Loading

0 comments on commit 350331c

Please sign in to comment.