Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove butterknife #127

Merged
merged 3 commits into from
Apr 10, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions client/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
if (project.hasProperty("enable-performance-plugin")) {
apply plugin: 'com.google.firebase.firebase-perf'
Expand Down Expand Up @@ -78,9 +79,6 @@ dependencies {

implementation 'com.facebook.fresco:fresco:1.11.0'

implementation 'com.jakewharton:butterknife:10.1.0'
kapt 'com.jakewharton:butterknife-compiler:10.1.0'

implementation 'com.airbnb.android:epoxy:3.3.0'

kapt 'com.google.dagger:dagger-compiler:2.21'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,36 +1,20 @@
package com.jraska.github.client.settings

import android.view.View
import android.widget.EditText
import butterknife.BindView
import butterknife.ButterKnife
import com.airbnb.epoxy.EpoxyHolder
import com.airbnb.epoxy.EpoxyModelWithHolder
import com.airbnb.epoxy.EpoxyModel
import com.jraska.github.client.R
import kotlinx.android.synthetic.main.item_row_purchase.view.*

internal class PurchaseReportModel(private val listener: PurchaseListener)
: EpoxyModelWithHolder<PurchaseReportModel.PurchaseHolder>() {
: EpoxyModel<View>() {
override fun getDefaultLayout(): Int {
return R.layout.item_row_purchase
}

override fun createNewHolder(): PurchaseHolder {
return PurchaseHolder()
}

override fun bind(holder: PurchaseHolder) {
holder.submitButton.setOnClickListener({
val valueEntered = holder.inputView.text.toString()
override fun bind(itemView: View) {
itemView.settings_purchase_submit_button.setOnClickListener {
val valueEntered = itemView.settings_purchase_input.text.toString()
listener.onPurchaseButtonClicked(valueEntered)
})
}

class PurchaseHolder : EpoxyHolder() {
@BindView(R.id.settings_purchase_input) lateinit var inputView: EditText
@BindView(R.id.settings_purchase_submit_button) lateinit var submitButton: View

override fun bindView(itemView: View) {
ButterKnife.bind(this, itemView)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,24 @@ import android.app.Activity
import android.content.Intent
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import butterknife.BindView
import com.airbnb.epoxy.SimpleEpoxyAdapter
import com.jraska.github.client.R
import com.jraska.github.client.ui.BaseActivity
import com.jraska.github.client.viewModel
import kotlinx.android.synthetic.main.content_settings.*

class SettingsActivity : BaseActivity(), PurchaseReportModel.PurchaseListener {
@BindView(R.id.settings_recycler) lateinit var recyclerView: RecyclerView

private lateinit var viewModel: SettingsViewModel
private val viewModel: SettingsViewModel by lazy { viewModel(SettingsViewModel::class.java) }

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)

viewModel = viewModel(SettingsViewModel::class.java)

recyclerView.layoutManager = LinearLayoutManager(this)
settings_recycler.layoutManager = LinearLayoutManager(this)
val adapter = SimpleEpoxyAdapter()
adapter.addModels(PurchaseReportModel(this))
adapter.addModels(ConsoleModel())
recyclerView.adapter = adapter
settings_recycler.adapter = adapter
}

override fun onPurchaseButtonClicked(value: String) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,10 @@ package com.jraska.github.client.ui
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import butterknife.BindView
import butterknife.ButterKnife
import com.jraska.github.client.R
import kotlinx.android.synthetic.main.activity_settings.*

abstract class BaseActivity : AppCompatActivity() {

@BindView(R.id.toolbar) lateinit var toolbar: Toolbar

override fun setContentView(layoutResID: Int) {
super.setContentView(layoutResID)
onSetContentView()
Expand All @@ -28,7 +23,6 @@ abstract class BaseActivity : AppCompatActivity() {
}

protected fun onSetContentView() {
ButterKnife.bind(this)
setSupportActionBar(toolbar)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,18 @@ import android.content.Intent
import android.os.Bundle
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import butterknife.BindView
import butterknife.OnClick
import com.airbnb.epoxy.SimpleEpoxyAdapter
import com.airbnb.epoxy.SimpleEpoxyModel
import com.jraska.github.client.R
import com.jraska.github.client.users.RepoDetail
import com.jraska.github.client.users.RepoDetailViewModel
import com.jraska.github.client.viewModel
import kotlinx.android.synthetic.main.activity_repo_detail.*
import kotlinx.android.synthetic.main.content_repo_detail.*

class RepoDetailActivity : BaseActivity() {

@BindView(R.id.repo_detail_recycler) internal lateinit var recyclerView: RecyclerView

private lateinit var viewModel: RepoDetailViewModel
private val viewModel: RepoDetailViewModel by lazy { viewModel(RepoDetailViewModel::class.java) }

private fun fullRepoName(): String {
return intent.getStringExtra(EXTRA_FULL_REPO_NAME)
Expand All @@ -29,17 +26,14 @@ class RepoDetailActivity : BaseActivity() {
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_repo_detail)
recyclerView.layoutManager = LinearLayoutManager(this)
repo_detail_recycler.layoutManager = LinearLayoutManager(this)

title = fullRepoName()

viewModel = viewModel(RepoDetailViewModel::class.java)
val liveData = viewModel.repoDetail(fullRepoName())
liveData.observe(this, Observer { this.setState(it) })
}

@OnClick(R.id.repo_detail_github_fab) internal fun onFitHubIconClicked() {
viewModel.onFitHubIconClicked(fullRepoName())
repo_detail_github_fab.setOnClickListener { viewModel.onFitHubIconClicked(fullRepoName()) }
}

private fun setState(state: RepoDetailViewModel.ViewState) {
Expand All @@ -51,11 +45,11 @@ class RepoDetailActivity : BaseActivity() {
}

private fun showLoading() {
recyclerView.adapter = SimpleEpoxyAdapter().apply { addModels(SimpleEpoxyModel(R.layout.item_loading)) }
repo_detail_recycler.adapter = SimpleEpoxyAdapter().apply { addModels(SimpleEpoxyModel(R.layout.item_loading)) }
}

private fun setError(error: Throwable) {
ErrorHandler.displayError(error, recyclerView)
ErrorHandler.displayError(error, repo_detail_recycler)
}

private fun setRepoDetail(repoDetail: RepoDetail) {
Expand All @@ -74,7 +68,7 @@ class RepoDetailActivity : BaseActivity() {
)
adapter.addModels(SimpleTextModel(issuesText))

recyclerView.adapter = adapter
repo_detail_recycler.adapter = adapter
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,44 +1,26 @@
package com.jraska.github.client.ui

import android.view.View
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import com.airbnb.epoxy.EpoxyHolder
import com.airbnb.epoxy.EpoxyModelWithHolder
import com.airbnb.epoxy.EpoxyModel
import com.jraska.github.client.R
import com.jraska.github.client.users.RepoDetail
import kotlinx.android.synthetic.main.item_repo_detail_stats.view.*
import org.threeten.bp.format.DateTimeFormatter

internal class RepoDetailHeaderModel(private val repoDetail: RepoDetail)
: EpoxyModelWithHolder<RepoDetailHeaderModel.Holder>() {
: EpoxyModel<View>() {

override fun getDefaultLayout(): Int {
return R.layout.item_repo_detail_stats
}

override fun createNewHolder(): Holder {
return Holder()
}

override fun bind(holder: Holder) {
override fun bind(itemView: View) {
val createdText = CREATED_DATE_FORMAT.format(repoDetail.data.created)
holder.createdTextView.text = createdText

holder.subscribersTextView.text = repoDetail.data.subscribersCount.toString()
holder.forksTextView.text = repoDetail.header.forks.toString()
holder.starsTextView.text = repoDetail.header.stars.toString()
}

internal class Holder : EpoxyHolder() {
@BindView(R.id.repo_detail_created) lateinit var createdTextView: TextView
@BindView(R.id.repo_detail_subscribers_count) lateinit var subscribersTextView: TextView
@BindView(R.id.repo_detail_stars_count) lateinit var starsTextView: TextView
@BindView(R.id.repo_detail_forks_count) lateinit var forksTextView: TextView
itemView.repo_detail_created.text = createdText

override fun bindView(view: View) {
ButterKnife.bind(this, view)
}
itemView.repo_detail_subscribers_count.text = repoDetail.data.subscribersCount.toString()
itemView.repo_detail_forks_count.text = repoDetail.header.forks.toString()
itemView.repo_detail_stars_count.text = repoDetail.header.stars.toString()
}

companion object {
Expand Down
49 changes: 12 additions & 37 deletions client/src/main/java/com/jraska/github/client/ui/RepoHeaderModel.kt
Original file line number Diff line number Diff line change
@@ -1,51 +1,26 @@
package com.jraska.github.client.ui

import android.view.View
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import com.airbnb.epoxy.EpoxyHolder
import com.airbnb.epoxy.EpoxyModelWithHolder
import com.airbnb.epoxy.EpoxyModel
import com.jraska.github.client.R
import com.jraska.github.client.users.RepoHeader
import kotlinx.android.synthetic.main.item_row_user_detail_repo.view.*

internal class RepoHeaderModel(private val repo: RepoHeader, repoListener: RepoListener)
: EpoxyModelWithHolder<RepoHeaderModel.RepoHolder>() {
private val itemClickListener: View.OnClickListener

init {
this.itemClickListener = View.OnClickListener { repoListener.onRepoClicked(repo) }
}

override fun createNewHolder(): RepoHolder {
return RepoHolder()
}

internal class RepoHeaderModel(
private val repo: RepoHeader,
private val repoListener: RepoListener
) : EpoxyModel<View>() {
override fun getDefaultLayout(): Int {
return R.layout.item_row_user_detail_repo
}

override fun bind(holder: RepoHolder) {
holder.titleTextView.text = repo.name
holder.descriptionTextView.text = repo.description
holder.starsTextView.text = repo.stars.toString()
holder.forksTextView.text = repo.forks.toString()

holder.itemView.setOnClickListener(itemClickListener)
}

internal class RepoHolder : EpoxyHolder() {
lateinit var itemView: View

@BindView(R.id.repo_item_title) lateinit var titleTextView: TextView
@BindView(R.id.repo_item_description) lateinit var descriptionTextView: TextView
@BindView(R.id.repo_item_stars) lateinit var starsTextView: TextView
@BindView(R.id.repo_item_forks) lateinit var forksTextView: TextView
override fun bind(itemView: View) {
itemView.repo_item_title.text = repo.name
itemView.repo_item_description.text = repo.description
itemView.repo_item_stars.text = repo.stars.toString()
itemView.repo_item_forks.text = repo.forks.toString()

override fun bindView(itemView: View) {
ButterKnife.bind(this, itemView)
this.itemView = itemView
}
itemView.setOnClickListener { repoListener.onRepoClicked(repo) }
}

internal interface RepoListener {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,28 @@
package com.jraska.github.client.ui

import android.view.View
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import com.airbnb.epoxy.EpoxyHolder
import com.airbnb.epoxy.EpoxyModelWithHolder
import com.airbnb.epoxy.EpoxyModel
import com.airbnb.epoxy.SimpleEpoxyAdapter
import com.jraska.github.client.R
import com.jraska.github.client.users.RepoHeader
import com.jraska.github.client.widget.RepeaterLayout
import kotlinx.android.synthetic.main.item_repos_section.view.*

internal class ReposSectionModel(
private val title: String,
private val repos: List<RepoHeader>,
private val repoListener: RepoHeaderModel.RepoListener
) : EpoxyModelWithHolder<ReposSectionModel.ReposHolder>() {

override fun createNewHolder(): ReposHolder {
return ReposHolder()
}
) : EpoxyModel<View>() {

override fun getDefaultLayout(): Int {
return R.layout.item_repos_section
}

override fun bind(holder: ReposHolder) {
holder.reposTitle.text = title
override fun bind(itemView: View) {
itemView.repos_title.text = title

val adapter = SimpleEpoxyAdapter()
adapter.addModels(repos.map { repo -> RepoHeaderModel(repo, repoListener) })

holder.reposRepeater.setAdapter(adapter)
}

internal class ReposHolder : EpoxyHolder() {
@BindView(R.id.repos_repeater)
lateinit var reposRepeater: RepeaterLayout
@BindView(R.id.repos_title)
lateinit var reposTitle: TextView

override fun bindView(itemView: View) {
ButterKnife.bind(this, itemView)
}
itemView.repos_repeater.setAdapter(adapter)
}
}
Loading