Skip to content

Commit

Permalink
added a base controller
Browse files Browse the repository at this point in the history
luca committed Nov 28, 2019
1 parent 5326e64 commit 6fe180e
Showing 28 changed files with 140 additions and 353 deletions.
Original file line number Diff line number Diff line change
@@ -79,7 +79,7 @@ class ActivitySearch : AppCompatActivity() {
tickets.addAll(searchResult?.assets?.tickets?.values ?: listOf())
}, onPost = {

controller.setTickets(tickets)
controller.setItems(tickets)
})
}
}
Original file line number Diff line number Diff line change
@@ -72,7 +72,7 @@ class ArticlesActivity : AppCompatActivity() {
articles.addAll(client?.ticketArticles(ticket) ?: listOf())
}, onPost = {

controller.setArticles(articles)
controller.setItems(articles)
})
}
}
Original file line number Diff line number Diff line change
@@ -59,6 +59,6 @@ class AttachmentsActivity : AppCompatActivity() {
list.setController(controller)

attachments.addAll(article.attachments)
controller.setAttachments(attachments)
controller.setItems(attachments)
}
}
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ class GroupsActivity : AppCompatActivity() {
groups.addAll(client?.groups() ?: listOf())
}, onPost = {

controller.setGroups(groups)
controller.setItems(groups)
})
}
}
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@ import androidx.appcompat.app.AppCompatActivity
import com.kirkbushman.sampleapp.R
import com.kirkbushman.sampleapp.SampleApplication
import com.kirkbushman.sampleapp.controllers.NotificationsController
import com.kirkbushman.sampleapp.controllers.OnClickCallback
import com.kirkbushman.sampleapp.doAsync
import com.kirkbushman.zammad.models.OnlineNotification
import kotlinx.android.synthetic.main.activity_users.*
@@ -14,7 +15,12 @@ class NotificationsActivity : AppCompatActivity() {
private val client by lazy { SampleApplication.instance.getClient() }

private val notifications = ArrayList<OnlineNotification>()
private val controller by lazy { NotificationsController() }
private val controller by lazy {
NotificationsController(object : OnClickCallback {

override fun onClick(position: Int) {}
})
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -34,7 +40,7 @@ class NotificationsActivity : AppCompatActivity() {
notifications.addAll(client?.onlineNotifications() ?: listOf())
}, onPost = {

controller.setNotifications(notifications)
controller.setItems(notifications)
})
}
}
Original file line number Diff line number Diff line change
@@ -44,7 +44,7 @@ class ObjectsActivity : AppCompatActivity() {
objects.addAll(client?.objects() ?: emptyList())
}, onPost = {

controller.setObjects(objects)
controller.setItems(objects)
})
}
}
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ class OrganizationsActivity : AppCompatActivity() {
organizations.addAll(client?.organizations() ?: listOf())
}, onPost = {

controller.setOrganizations(organizations)
controller.setItems(organizations)
})
}
}
Original file line number Diff line number Diff line change
@@ -44,7 +44,7 @@ class OverviewsActivity : AppCompatActivity() {
overviews.addAll(client?.overviews() ?: listOf())
}, onPost = {

controller.setOverviews(overviews)
controller.setItems(overviews)
})
}
}
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ class PrioritiesActivity : AppCompatActivity() {
priorities.addAll(client?.ticketPrioritites() ?: listOf())
}, onPost = {

controller.setPriorities(priorities)
controller.setItems(priorities)
})
}
}
Original file line number Diff line number Diff line change
@@ -44,7 +44,7 @@ class RolesActivity : AppCompatActivity() {
roles.addAll(client?.roles() ?: listOf())
}, onPost = {

controller.setRoles(roles)
controller.setItems(roles)
})
}
}
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ class StatesActivity : AppCompatActivity() {
states.addAll(client?.ticketStates() ?: listOf())
}, onPost = {

controller.setStates(states)
controller.setItems(states)
})
}
}
Original file line number Diff line number Diff line change
@@ -40,7 +40,7 @@ class TagsActivity : AppCompatActivity() {
tags.addAll(client?.tags() ?: listOf())
}, onPost = {

controller.setTags(tags)
controller.setItems(tags)
})
}
}
Original file line number Diff line number Diff line change
@@ -74,7 +74,7 @@ class TicketsActivity : AppCompatActivity() {
tickets.addAll(client?.tickets() ?: listOf())
}, onPost = {

controller.setTickets(tickets)
controller.setItems(tickets)
})
}
}
Original file line number Diff line number Diff line change
@@ -63,7 +63,7 @@ class UsersActivity : AppCompatActivity() {
users.addAll(client?.users() ?: listOf())
}, onPost = {

controller.setUsers(users)
controller.setItems(users)
})
}
}
Original file line number Diff line number Diff line change
@@ -1,36 +1,17 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.article
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.zammad.models.TicketArticle

class ArticlesController(private val callback: OnArticleCallback) : EpoxyController() {
class ArticlesController(callback: OnArticleCallback) : BaseController<TicketArticle>(callback) {

private val articles = ArrayList<TicketArticle>()
override fun onItem(item: TicketArticle) {

fun setArticles(articles: Collection<TicketArticle>) {
this.articles.clear()
this.articles.addAll(articles)
requestModelBuild()
}

override fun buildModels() {

if (articles.isEmpty()) {
empty {
id("empty_items")
}
}

articles.forEach {

article {
id(it.id)
article(it)
clickListener { _, _, _, position -> callback.onClick(position) }
attachmentsClick { _, _, _, position -> callback.onAttachmentsClick(position) }
}
article {
id(item.id)
article(item)
clickListener { _, _, _, position -> callback.onClick(position) }
attachmentsClick { _, _, _, position -> (callback as OnArticleCallback).onAttachmentsClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,35 +1,16 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.attachment
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.zammad.models.ArticleAttachment

class AttachmentsController(private val callback: OnClickCallback) : EpoxyController() {
class AttachmentsController(callback: OnClickCallback) : BaseController<ArticleAttachment>(callback) {

private val attachments = ArrayList<ArticleAttachment>()
override fun onItem(item: ArticleAttachment) {

fun setAttachments(attachments: Collection<ArticleAttachment>) {
this.attachments.clear()
this.attachments.addAll(attachments)
requestModelBuild()
}

override fun buildModels() {

if (attachments.isEmpty()) {
empty {
id("empty_items")
}
}

attachments.forEach {

attachment {
id(it.id)
attachment(it)
clickListener { _, _, _, position -> callback.onClick(position) }
}
attachment {
id(item.id)
attachment(item)
clickListener { _, _, _, position -> callback.onClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty

abstract class BaseController<T>(protected val callback: OnClickCallback) : EpoxyController() {

private val items = ArrayList<T>()

fun setItems(items: Collection<T>) {
this.items.clear()
this.items.addAll(items)
requestModelBuild()
}

override fun buildModels() {

if (items.isEmpty()) {
empty {
id("empty_items")
}
}

items.forEach { onItem(it) }
}

abstract fun onItem(item: T)
}
Original file line number Diff line number Diff line change
@@ -1,37 +1,18 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.group
import com.kirkbushman.zammad.models.Group

class GroupsController(private val callback: OnUpDelCallback) : EpoxyController() {
class GroupsController(callback: OnUpDelCallback) : BaseController<Group>(callback) {

private val groups = ArrayList<Group>()
override fun onItem(item: Group) {

fun setGroups(groups: Collection<Group>) {
this.groups.clear()
this.groups.addAll(groups)
requestModelBuild()
}

override fun buildModels() {

if (groups.isEmpty()) {
empty {
id("empty_items")
}
}

groups.forEach {

group {
id(it.id)
group(it)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> callback.onUpdateClick(position) }
deleteListener { _, _, _, position -> callback.onDeleteClick(position) }
}
group {
id(item.id)
group(item)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> (callback as OnUpDelCallback).onUpdateClick(position) }
deleteListener { _, _, _, position -> (callback as OnUpDelCallback).onDeleteClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,34 +1,15 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.notification
import com.kirkbushman.zammad.models.OnlineNotification

class NotificationsController : EpoxyController() {
class NotificationsController(callback: OnClickCallback) : BaseController<OnlineNotification>(callback) {

private val notifications = ArrayList<OnlineNotification>()
override fun onItem(item: OnlineNotification) {

fun setNotifications(notifications: Collection<OnlineNotification>) {
this.notifications.clear()
this.notifications.addAll(notifications)
requestModelBuild()
}

override fun buildModels() {

if (notifications.isEmpty()) {
empty {
id("empty_items")
}
}

notifications.forEach {

notification {
id(it.id)
notification(it)
}
notification {
id(item.id)
notification(item)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,36 +1,17 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.`object`
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.zammad.models.Object

class ObjectsController(private val callback: OnClickCallback) : EpoxyController() {
class ObjectsController(callback: OnClickCallback) : BaseController<Object>(callback) {

private val objects = ArrayList<Object>()
override fun onItem(item: Object) {

fun setObjects(items: Collection<Object>) {
this.objects.clear()
this.objects.addAll(items)
requestModelBuild()
}

override fun buildModels() {

if (objects.isEmpty()) {
empty {
id("empty_items")
}
}

objects.forEach {

`object` {
`object` {

id(it.id)
`object`(it)
clickListener { _, _, _, position -> callback.onClick(position) }
}
id(item.id)
`object`(item)
clickListener { _, _, _, position -> callback.onClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,37 +1,18 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.organization
import com.kirkbushman.zammad.models.Organization

class OrganizationsController(private val callback: OnUpDelCallback) : EpoxyController() {
class OrganizationsController(callback: OnUpDelCallback) : BaseController<Organization>(callback) {

private val organizations = ArrayList<Organization>()
override fun onItem(item: Organization) {

fun setOrganizations(organizations: Collection<Organization>) {
this.organizations.clear()
this.organizations.addAll(organizations)
requestModelBuild()
}

override fun buildModels() {

if (organizations.isEmpty()) {
empty {
id("empty_items")
}
}

organizations.forEach {

organization {
id(it.id)
organization(it)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> callback.onUpdateClick(position) }
deleteListener { _, _, _, position -> callback.onDeleteClick(position) }
}
organization {
id(item.id)
organization(item)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> (callback as OnUpDelCallback).onUpdateClick(position) }
deleteListener { _, _, _, position -> (callback as OnUpDelCallback).onDeleteClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,35 +1,16 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.overview
import com.kirkbushman.zammad.models.Overview

class OverviewsController(private val callback: OnClickCallback) : EpoxyController() {
class OverviewsController(callback: OnClickCallback) : BaseController<Overview>(callback) {

private val overviews = ArrayList<Overview>()
override fun onItem(item: Overview) {

fun setOverviews(overviews: Collection<Overview>) {
this.overviews.clear()
this.overviews.addAll(overviews)
requestModelBuild()
}

override fun buildModels() {

if (overviews.isEmpty()) {
empty {
id("empty_items")
}
}

overviews.forEach {

overview {
id(it.id)
overview(it)
clickListener { _, _, _, position -> callback.onClick(position) }
}
overview {
id(item.id)
overview(item)
clickListener { _, _, _, position -> callback.onClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,37 +1,18 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.priority
import com.kirkbushman.zammad.models.TicketPriority

class PrioritiesController(private val callback: OnUpDelCallback) : EpoxyController() {
class PrioritiesController(callback: OnUpDelCallback) : BaseController<TicketPriority>(callback) {

private val priorities = ArrayList<TicketPriority>()
override fun onItem(item: TicketPriority) {

fun setPriorities(priorities: Collection<TicketPriority>) {
this.priorities.clear()
this.priorities.addAll(priorities)
requestModelBuild()
}

override fun buildModels() {

if (priorities.isEmpty()) {
empty {
id("empty_items")
}
}

priorities.forEach {

priority {
id(it.id)
priority(it)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> callback.onUpdateClick(position) }
deleteListener { _, _, _, position -> callback.onDeleteClick(position) }
}
priority {
id(item.id)
priority(item)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> (callback as OnUpDelCallback).onUpdateClick(position) }
deleteListener { _, _, _, position -> (callback as OnUpDelCallback).onDeleteClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,35 +1,16 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.role
import com.kirkbushman.zammad.models.Role

class RolesController(private val callback: OnClickCallback) : EpoxyController() {
class RolesController(callback: OnClickCallback) : BaseController<Role>(callback) {

private val roles = ArrayList<Role>()
override fun onItem(item: Role) {

fun setRoles(roles: Collection<Role>) {
this.roles.clear()
this.roles.addAll(roles)
requestModelBuild()
}

override fun buildModels() {

if (roles.isEmpty()) {
empty {
id("empty_items")
}
}

roles.forEach {

role {
id(it.id)
role(it)
clickListener { _, _, _, position -> callback.onClick(position) }
}
role {
id(item.id)
role(item)
clickListener { _, _, _, position -> callback.onClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,37 +1,18 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.state
import com.kirkbushman.zammad.models.TicketState

class StatesController(private val callback: OnUpDelCallback) : EpoxyController() {
class StatesController(callback: OnUpDelCallback) : BaseController<TicketState>(callback) {

private val states = ArrayList<TicketState>()
override fun onItem(item: TicketState) {

fun setStates(states: Collection<TicketState>) {
this.states.clear()
this.states.addAll(states)
requestModelBuild()
}

override fun buildModels() {

if (states.isEmpty()) {
empty {
id("empty_items")
}
}

states.forEach {

state {
id(it.id)
state(it)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> callback.onUpdateClick(position) }
deleteListener { _, _, _, position -> callback.onDeleteClick(position) }
}
state {
id(item.id)
state(item)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> (callback as OnUpDelCallback).onUpdateClick(position) }
deleteListener { _, _, _, position -> (callback as OnUpDelCallback).onDeleteClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,35 +1,16 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.tag
import com.kirkbushman.zammad.models.Tag

class TagsController(private val callback: OnClickCallback) : EpoxyController() {
class TagsController(callback: OnClickCallback) : BaseController<Tag>(callback) {

private val tags = ArrayList<Tag>()
override fun onItem(item: Tag) {

fun setTags(tags: Collection<Tag>) {
this.tags.clear()
this.tags.addAll(tags)
requestModelBuild()
}

override fun buildModels() {

if (tags.isEmpty()) {
empty {
id("empty_items")
}
}

tags.forEach {

tag {
id(it.id)
tag(it)
clickListener { _, _, _, position -> callback.onClick(position) }
}
tag {
id(item.id)
tag(item)
clickListener { _, _, _, position -> callback.onClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,38 +1,19 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.ticket
import com.kirkbushman.zammad.models.Ticket

class TicketsController(private val callback: OnTicketCallback) : EpoxyController() {
class TicketsController(callback: OnTicketCallback) : BaseController<Ticket>(callback) {

private val tickets = ArrayList<Ticket>()
override fun onItem(item: Ticket) {

fun setTickets(tickets: Collection<Ticket>) {
this.tickets.clear()
this.tickets.addAll(tickets)
requestModelBuild()
}

override fun buildModels() {

if (tickets.isEmpty()) {
empty {
id("empty_items")
}
}

tickets.forEach {

ticket {
id(it.id)
ticket(it)
clickListener { _, _, _, position -> callback.onClick(position) }
articleListener { _, _, _, position -> callback.onArticleClick(position) }
updateListener { _, _, _, position -> callback.onUpdateClick(position) }
deleteListener { _, _, _, position -> callback.onDeleteClick(position) }
}
ticket {
id(item.id)
ticket(item)
clickListener { _, _, _, position -> callback.onClick(position) }
articleListener { _, _, _, position -> (callback as OnTicketCallback).onArticleClick(position) }
updateListener { _, _, _, position -> (callback as OnTicketCallback).onUpdateClick(position) }
deleteListener { _, _, _, position -> (callback as OnTicketCallback).onDeleteClick(position) }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,37 +1,18 @@
package com.kirkbushman.sampleapp.controllers

import com.airbnb.epoxy.EpoxyController
import com.kirkbushman.sampleapp.models.empty
import com.kirkbushman.sampleapp.models.user
import com.kirkbushman.zammad.models.User

class UsersController(private val callback: OnUpDelCallback) : EpoxyController() {
class UsersController(callback: OnUpDelCallback) : BaseController<User>(callback) {

private val users = ArrayList<User>()
override fun onItem(item: User) {

fun setUsers(users: Collection<User>) {
this.users.clear()
this.users.addAll(users)
requestModelBuild()
}

override fun buildModels() {

if (users.isEmpty()) {
empty {
id("empty_items")
}
}

users.forEach {

user {
id(it.id)
user(it)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> callback.onUpdateClick(position) }
deleteListener { _, _, _, position -> callback.onDeleteClick(position) }
}
user {
id(item.id)
user(item)
clickListener { _, _, _, position -> callback.onClick(position) }
updateListener { _, _, _, position -> (callback as OnUpDelCallback).onUpdateClick(position) }
deleteListener { _, _, _, position -> (callback as OnUpDelCallback).onDeleteClick(position) }
}
}
}

0 comments on commit 6fe180e

Please sign in to comment.