From c673a37af441f335a54f5b1f6da75b46302bd6f4 Mon Sep 17 00:00:00 2001 From: Oliver Silva Date: Tue, 9 Apr 2019 10:54:22 -0300 Subject: [PATCH 01/15] Adding feature of issues listing --- app/src/main/AndroidManifest.xml | 8 +- .../github/client/http/GitHubService.java | 4 + .../client/issuelist/IssueListActivity.kt | 129 ++++++++++++++++++ .../client/issuelist/IssueListAdapter.kt | 50 +++++++ .../github/client/issuelist/IssueListModel.kt | 11 ++ .../client/issuelist/IssueListModelImpl.kt | 18 +++ .../github/client/issuelist/IssueListView.kt | 11 ++ .../client/issuelist/IssueListViewModel.kt | 35 +++++ .../github/client/koin/ModelModule.kt | 8 ++ .../github/client/koin/ViewModelModule.kt | 7 + .../github/client/pojo/IssueResponse.kt | 11 ++ .../pullrequest/PullRequestListActivity.kt | 2 +- .../client/repolist/RepoListActivity.kt | 20 ++- .../github/client/repolist/RepoListAdapter.kt | 7 +- .../main/res/layout/activity_issues_list.xml | 33 +++++ app/src/main/res/layout/item_issue_list.xml | 66 +++++++++ 16 files changed, 415 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListActivity.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListAdapter.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListModel.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListModelImpl.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListView.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListViewModel.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/pojo/IssueResponse.kt create mode 100644 app/src/main/res/layout/activity_issues_list.xml create mode 100644 app/src/main/res/layout/item_issue_list.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d76f81e..7f5a082 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,8 +26,12 @@ + android:name=".pullrequest.PullRequestListActivity_" /> + + > listPullRequests(@Path("owner") String owner, @Path("repoName") String repoName); + + @GET("/repos/{owner}/{repoName}/issues") + Observable> listIssues(@Path("owner") String owner, @Path("repoName") String repoName); } diff --git a/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListActivity.kt new file mode 100644 index 0000000..eab0573 --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListActivity.kt @@ -0,0 +1,129 @@ +package br.com.luisfernandez.github.client.issuelist + +import android.annotation.SuppressLint +import android.arch.lifecycle.Observer +import android.support.v7.app.AppCompatActivity +import android.support.v7.widget.LinearLayoutManager +import br.com.luisfernandez.github.client.R +import br.com.luisfernandez.github.client.extensions.setGone +import br.com.luisfernandez.github.client.extensions.setVisible +import br.com.luisfernandez.github.client.http.model.GitHubErrorBody +import br.com.luisfernandez.github.client.http.model.ServerError +import br.com.luisfernandez.github.client.pojo.IssueResponse +import kotlinx.android.synthetic.main.activity_list.* +import kotlinx.android.synthetic.main.view_state_empty.* +import kotlinx.android.synthetic.main.view_state_error.* +import kotlinx.android.synthetic.main.view_state_loading.* +import org.androidannotations.annotations.AfterViews +import org.androidannotations.annotations.EActivity +import org.androidannotations.annotations.Extra +import org.koin.android.viewmodel.ext.android.viewModel + +@SuppressLint("Registered") +@EActivity(R.layout.activity_issues_list) +class IssueListActivity : AppCompatActivity(), IssueListView { + + @Extra + lateinit var owner: String + + @Extra + lateinit var repoName: String + + val viewModel by viewModel() + + @AfterViews + fun afterViews() { + this.configToolbar() + + val layoutManager = LinearLayoutManager(this) + + recyclerView.layoutManager = layoutManager + recyclerView.setHasFixedSize(true) + + setupViewModel() + + viewModel.loadIssueList(owner, repoName) + } + + private fun setupViewModel() { + viewModel.issueList.observe(this, Observer { + issueList -> + showContent(issueList!!) + }) + + viewModel.serverError.observe(this, Observer { + serverError -> + handleError(serverError!!) + }) + } + + private fun configToolbar() { + setSupportActionBar(toolbar) + supportActionBar?.let { + title = repoName + supportActionBar?.setDisplayHomeAsUpEnabled(true) + supportActionBar?.setDisplayShowHomeEnabled(true) + supportActionBar?.setDisplayShowTitleEnabled(true) + } + } + + override fun onSupportNavigateUp(): Boolean { + onBackPressed() + return true + } + + override fun handleError(serverError: ServerError) { + this.showErrorState() + + if (serverError.errorBody != null) { + textErrorMessage.text = serverError.errorBody!!.message + } else { + textErrorMessage.text = serverError.errorMessage + } + + buttonRetry.setOnClickListener { _ -> + showLoading() + viewModel.loadIssueList(owner, repoName) + } + } + + private fun showErrorState() { + layoutProgress.setGone() + layoutEmpty.setGone() + layoutError.setVisible() + recyclerView.setGone() + } + + override fun showLoading() { + layoutProgress.setVisible() + layoutEmpty.setGone() + layoutError.setGone() + recyclerView.setGone() + } + + override fun showEmpty() { + layoutProgress.setGone() + layoutEmpty.setVisible() + layoutError.setGone() + recyclerView.setGone() + } + + override fun showContent(content: List) { + if (content.isEmpty()) { + showEmpty() + } else { + layoutProgress.setGone() + layoutEmpty.setGone() + layoutError.setGone() + recyclerView.setVisible() + + recyclerView.adapter = this.getIssueListAdapter(content) + } + } + + private fun getIssueListAdapter(content: List): IssueListAdapter { + return IssueListAdapter( + content as ArrayList + ) + } +} diff --git a/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListAdapter.kt b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListAdapter.kt new file mode 100644 index 0000000..145f1d5 --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListAdapter.kt @@ -0,0 +1,50 @@ +package br.com.luisfernandez.github.client.issuelist + +import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import br.com.luisfernandez.github.client.R +import br.com.luisfernandez.github.client.misc.ImageLoader +import br.com.luisfernandez.github.client.pojo.IssueResponse +import kotlinx.android.synthetic.main.item_issue_list.view.* +import java.text.SimpleDateFormat +import java.util.* + +/** + * Created by luisfernandez on 12/05/18. + */ +class IssueListAdapter( + private val issueList: ArrayList = ArrayList() +) : RecyclerView.Adapter() +{ + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IssueViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_issue_list, parent, false) + return IssueViewHolder(view) + } + + override fun getItemCount(): Int { + return issueList.size + } + + override fun onBindViewHolder(holder: IssueViewHolder, position: Int) { + val item = issueList[position] + + + + holder.textTitle.text = item.title + holder.textAuthorName.text = item.user.login + holder.textDate.text = SimpleDateFormat("dd/MM/yyyy HH:mm", Locale.getDefault()).format(item.createdAt) + holder.textDescription.text = item.body + + ImageLoader.loadImage(item.user.avatarUrl, holder.imageIssueAuthor) + } + + class IssueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var imageIssueAuthor = itemView.imageIssueAuthor!! + var textAuthorName = itemView.textIssueAuthorName!! + var textTitle = itemView.textIssueTitle!! + var textDate = itemView.textIssueDate!! + var textDescription = itemView.textIssueDescription!! + } +} \ No newline at end of file diff --git a/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListModel.kt b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListModel.kt new file mode 100644 index 0000000..bf28b06 --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListModel.kt @@ -0,0 +1,11 @@ +package br.com.luisfernandez.github.client.issuelist + +import br.com.luisfernandez.github.client.pojo.IssueResponse +import io.reactivex.Observable + +/** + * Created by luisfernandez on 12/05/18. + */ +interface IssueListModel { + fun loadIssueList(owner: String, repoName: String): Observable> +} \ No newline at end of file diff --git a/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListModelImpl.kt b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListModelImpl.kt new file mode 100644 index 0000000..f47063d --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListModelImpl.kt @@ -0,0 +1,18 @@ +package br.com.luisfernandez.github.client.issuelist + +import br.com.luisfernandez.github.client.http.GitHubService +import br.com.luisfernandez.github.client.pojo.IssueResponse +import io.reactivex.Observable + +class IssueListModelImpl ( + private val gitHubService: GitHubService +) : IssueListModel +{ + override fun loadIssueList(owner: String, repoName: String): Observable> { + return gitHubService + .listIssues(owner, repoName) + .map { issueList -> + issueList + } + } +} \ No newline at end of file diff --git a/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListView.kt b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListView.kt new file mode 100644 index 0000000..6ddda1a --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListView.kt @@ -0,0 +1,11 @@ +package br.com.luisfernandez.github.client.issuelist + +import br.com.luisfernandez.github.client.http.model.GitHubErrorBody +import br.com.luisfernandez.github.client.mvp.LoadContentView +import br.com.luisfernandez.github.client.pojo.IssueResponse + + +/** + * Created by luisfernandez on 11/05/18. + */ +interface IssueListView : LoadContentView, GitHubErrorBody> \ No newline at end of file diff --git a/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListViewModel.kt b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListViewModel.kt new file mode 100644 index 0000000..50147c5 --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListViewModel.kt @@ -0,0 +1,35 @@ +package br.com.luisfernandez.github.client.issuelist + +import android.arch.lifecycle.MutableLiveData +import android.arch.lifecycle.ViewModel +import br.com.luisfernandez.github.client.http.CallbackWrapper +import br.com.luisfernandez.github.client.http.model.GitHubErrorBody +import br.com.luisfernandez.github.client.http.model.ServerError +import br.com.luisfernandez.github.client.pojo.IssueResponse +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers + +class IssueListViewModel ( + private val issueListModel: IssueListModel +) : ViewModel() +{ + + val issueList = MutableLiveData>() + val serverError = MutableLiveData>() + + fun loadIssueList(owner: String, repoName: String) { + issueListModel + .loadIssueList(owner, repoName) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeWith(object: CallbackWrapper, GitHubErrorBody>(GitHubErrorBody::class.java) { + override fun onError(error: ServerError) { + serverError.postValue(error) + } + + override fun onSuccess(listIssue: List) { + issueList.postValue(listIssue) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/br/com/luisfernandez/github/client/koin/ModelModule.kt b/app/src/main/java/br/com/luisfernandez/github/client/koin/ModelModule.kt index 9397c2e..001a183 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/koin/ModelModule.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/koin/ModelModule.kt @@ -1,5 +1,7 @@ package br.com.luisfernandez.github.client.koin +import br.com.luisfernandez.github.client.issuelist.IssueListModel +import br.com.luisfernandez.github.client.issuelist.IssueListModelImpl import br.com.luisfernandez.github.client.pullrequest.PullRequestModel import br.com.luisfernandez.github.client.pullrequest.PullRequestModelImpl import br.com.luisfernandez.github.client.repolist.RepoListModel @@ -19,4 +21,10 @@ val modelModule = module { get() ) } + + single { + IssueListModelImpl( + get() + ) + } } \ No newline at end of file diff --git a/app/src/main/java/br/com/luisfernandez/github/client/koin/ViewModelModule.kt b/app/src/main/java/br/com/luisfernandez/github/client/koin/ViewModelModule.kt index 38ec173..0ecf3d6 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/koin/ViewModelModule.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/koin/ViewModelModule.kt @@ -2,6 +2,7 @@ package br.com.luisfernandez.github.client.koin +import br.com.luisfernandez.github.client.issuelist.IssueListViewModel import br.com.luisfernandez.github.client.pullrequest.PullRequestViewModel import br.com.luisfernandez.github.client.repolist.RepoListViewModel import org.koin.android.viewmodel.ext.koin.viewModel @@ -21,4 +22,10 @@ val viewModelModule = module { ) } + viewModel { + IssueListViewModel( + get() + ) + } + } \ No newline at end of file diff --git a/app/src/main/java/br/com/luisfernandez/github/client/pojo/IssueResponse.kt b/app/src/main/java/br/com/luisfernandez/github/client/pojo/IssueResponse.kt new file mode 100644 index 0000000..6259f92 --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/pojo/IssueResponse.kt @@ -0,0 +1,11 @@ +package br.com.luisfernandez.github.client.pojo + +import com.google.gson.annotations.SerializedName +import java.util.Date + +data class IssueResponse( + @SerializedName("user") val user: User, + @SerializedName("title") val title: String, + @SerializedName("body") val body: String, + @SerializedName("created_at") val createdAt: Date +) \ No newline at end of file diff --git a/app/src/main/java/br/com/luisfernandez/github/client/pullrequest/PullRequestListActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/pullrequest/PullRequestListActivity.kt index 5b1b519..e54874d 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/pullrequest/PullRequestListActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/pullrequest/PullRequestListActivity.kt @@ -42,7 +42,7 @@ class PullRequestListActivity : AppCompatActivity(), PullRequestListView { recyclerView.layoutManager = layoutManager recyclerView.setHasFixedSize(true) -// + setupViewModel() viewModel.loadPullRequestList(owner, repoName) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt index 32d4b07..7862933 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt @@ -12,6 +12,7 @@ import br.com.luisfernandez.github.client.extensions.setGone import br.com.luisfernandez.github.client.extensions.setVisible import br.com.luisfernandez.github.client.http.model.GitHubErrorBody import br.com.luisfernandez.github.client.http.model.ServerError +import br.com.luisfernandez.github.client.issuelist.IssueListActivity_ import br.com.luisfernandez.github.client.pojo.Repo import br.com.luisfernandez.github.client.pullrequest.PullRequestListActivity_ import com.crashlytics.android.answers.Answers @@ -119,7 +120,8 @@ class RepoListActivity : AppCompatActivity(), RepoListView { private fun getRepoListAdapter(): RepoListAdapter { return RepoListAdapter( getOnItemClickListener(), - getOnLoadMoreContentClickListener() + getOnLoadMoreContentClickListener(), + getOnIssueClickListener() ) } @@ -131,6 +133,14 @@ class RepoListActivity : AppCompatActivity(), RepoListView { } } + private fun getOnIssueClickListener(): OnItemClickListener { + return object : OnItemClickListener { + override fun onItemClick(type: Repo) { + goToIssueListActivity(type) + } + } + } + private fun getOnLoadMoreContentClickListener(): OnItemClickListener { return object : OnItemClickListener { override fun onItemClick(type: String) { @@ -147,6 +157,14 @@ class RepoListActivity : AppCompatActivity(), RepoListView { .start() } + private fun goToIssueListActivity(type: Repo) { + IssueListActivity_ + .intent(this@RepoListActivity) + .owner(type.owner.login) + .repoName(type.name) + .start() + } + private fun loadMoreContent() { this@RepoListActivity.isLoadingState = true recyclerView.post { repoListAdapter.showFooter() } diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListAdapter.kt b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListAdapter.kt index 9572f80..c5d85fe 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListAdapter.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListAdapter.kt @@ -18,7 +18,8 @@ import kotlin.collections.ArrayList */ class RepoListAdapter( private val onItemClickListener: OnItemClickListener, - private val onRetryClickListener: OnItemClickListener + private val onRetryClickListener: OnItemClickListener, + private val onIssueClickListener: OnItemClickListener ) : RecyclerView.Adapter() { companion object { @@ -75,6 +76,10 @@ class RepoListAdapter( viewHolder.itemView.setOnClickListener { _ -> onItemClickListener.onItemClick(repo) } + + viewHolder.textIssuesCount.setOnClickListener { _ -> + onIssueClickListener.onItemClick(repo) + } } ERROR_FOOTER -> { val errorFooterHolder = viewHolder as ErrorFooterViewHolder diff --git a/app/src/main/res/layout/activity_issues_list.xml b/app/src/main/res/layout/activity_issues_list.xml new file mode 100644 index 0000000..9c199fd --- /dev/null +++ b/app/src/main/res/layout/activity_issues_list.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_issue_list.xml b/app/src/main/res/layout/item_issue_list.xml new file mode 100644 index 0000000..5d38927 --- /dev/null +++ b/app/src/main/res/layout/item_issue_list.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file From 095fa3c6d9f35a0b08a5a86291159c5640201e72 Mon Sep 17 00:00:00 2001 From: Oliver Silva Date: Thu, 11 Apr 2019 17:49:13 -0300 Subject: [PATCH 02/15] Adding activity RepoDetailsActivity and its layout and changing the destiny at click on the repository item --- app/src/main/AndroidManifest.xml | 5 +++ .../client/repodetails/RepoDetailsActivity.kt | 35 +++++++++++++++++++ .../client/repolist/RepoListActivity.kt | 11 +++++- .../main/res/layout/activity_repo_details.xml | 28 +++++++++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt create mode 100644 app/src/main/res/layout/activity_repo_details.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7f5a082..0e2ac4b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -33,6 +33,11 @@ android:screenOrientation="portrait" android:name=".issuelist.IssueListActivity_" /> + + diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt new file mode 100644 index 0000000..3ea2467 --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt @@ -0,0 +1,35 @@ +package br.com.luisfernandez.github.client.repodetails + +import android.annotation.SuppressLint +import android.support.v7.app.AppCompatActivity +import br.com.luisfernandez.github.client.R +import kotlinx.android.synthetic.main.activity_list.* +import org.androidannotations.annotations.AfterViews +import org.androidannotations.annotations.EActivity +import org.androidannotations.annotations.Extra + +@SuppressLint("Registered") +@EActivity(R.layout.activity_repo_details) +class RepoDetailsActivity : AppCompatActivity() { + + @Extra + lateinit var owner: String + + @Extra + lateinit var repoName: String + + @AfterViews + fun afterViews() { + this.configToolbar() + } + + private fun configToolbar() { + setSupportActionBar(toolbar) + supportActionBar?.let { + title = repoName + supportActionBar?.setDisplayHomeAsUpEnabled(true) + supportActionBar?.setDisplayShowHomeEnabled(true) + supportActionBar?.setDisplayShowTitleEnabled(true) + } + } +} diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt index 7862933..d458201 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt @@ -15,6 +15,7 @@ import br.com.luisfernandez.github.client.http.model.ServerError import br.com.luisfernandez.github.client.issuelist.IssueListActivity_ import br.com.luisfernandez.github.client.pojo.Repo import br.com.luisfernandez.github.client.pullrequest.PullRequestListActivity_ +import br.com.luisfernandez.github.client.repodetails.RepoDetailsActivity_ import com.crashlytics.android.answers.Answers import com.crashlytics.android.answers.SearchEvent import com.miguelcatalan.materialsearchview.MaterialSearchView @@ -128,7 +129,7 @@ class RepoListActivity : AppCompatActivity(), RepoListView { private fun getOnItemClickListener(): OnItemClickListener { return object : OnItemClickListener { override fun onItemClick(type: Repo) { - goToPullRequestActivity(type) + goToRepoDetailsActivity(type) } } } @@ -165,6 +166,14 @@ class RepoListActivity : AppCompatActivity(), RepoListView { .start() } + private fun goToRepoDetailsActivity(type: Repo) { + RepoDetailsActivity_ + .intent(this@RepoListActivity) + .owner(type.owner.login) + .repoName(type.name) + .start() + } + private fun loadMoreContent() { this@RepoListActivity.isLoadingState = true recyclerView.post { repoListAdapter.showFooter() } diff --git a/app/src/main/res/layout/activity_repo_details.xml b/app/src/main/res/layout/activity_repo_details.xml new file mode 100644 index 0000000..7124077 --- /dev/null +++ b/app/src/main/res/layout/activity_repo_details.xml @@ -0,0 +1,28 @@ + + + + + + + + + + \ No newline at end of file From 2188639af97d07b2c15b6c922179b679fd10c3a4 Mon Sep 17 00:00:00 2001 From: Oliver Silva Date: Thu, 11 Apr 2019 18:33:25 -0300 Subject: [PATCH 03/15] Adding navigation up support to toolbar and fixing the relative layout item position. --- .../github/client/repodetails/RepoDetailsActivity.kt | 5 +++++ app/src/main/res/layout/activity_repo_details.xml | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt index 3ea2467..f247830 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt @@ -32,4 +32,9 @@ class RepoDetailsActivity : AppCompatActivity() { supportActionBar?.setDisplayShowTitleEnabled(true) } } + + override fun onSupportNavigateUp(): Boolean { + onBackPressed() + return true + } } diff --git a/app/src/main/res/layout/activity_repo_details.xml b/app/src/main/res/layout/activity_repo_details.xml index 7124077..02bb28f 100644 --- a/app/src/main/res/layout/activity_repo_details.xml +++ b/app/src/main/res/layout/activity_repo_details.xml @@ -17,12 +17,14 @@ android:id="@+id/repo_detail_tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" - app:tabMode="fixed"/> + app:tabMode="fixed" + android:layout_below="@+id/toolbar"/> + android:clipToPadding="true" + android:layout_below="@+id/repo_detail_tablayout"/> \ No newline at end of file From 5aa866b6a53d4d170c27364c8182aac820971c70 Mon Sep 17 00:00:00 2001 From: Oliver Silva Date: Thu, 11 Apr 2019 20:15:04 -0300 Subject: [PATCH 04/15] Creating and addin RepoDetailsPagerAdapter to repo_detail_viewpager, creating its fragments, and joining everything at repo_detail_tablayout --- .../client/repodetails/BranchesFragment.kt | 21 ++++++++++ .../repodetails/CollaboratorsFragment.kt | 21 ++++++++++ .../client/repodetails/CommitsFragment.kt | 21 ++++++++++ .../client/repodetails/IssuesFragment.kt | 21 ++++++++++ .../repodetails/PullRequestsFragment.kt | 21 ++++++++++ .../client/repodetails/RepoDetailsActivity.kt | 7 +++- .../repodetails/RepoDetailsPagerAdapter.kt | 38 +++++++++++++++++++ .../main/res/layout/activity_repo_details.xml | 2 +- app/src/main/res/layout/fragment_branches.xml | 15 ++++++++ .../res/layout/fragment_collaborators.xml | 15 ++++++++ app/src/main/res/layout/fragment_commits.xml | 15 ++++++++ app/src/main/res/layout/fragment_issues.xml | 15 ++++++++ .../res/layout/fragment_pull_requests.xml | 15 ++++++++ app/src/main/res/values/strings.xml | 3 ++ 14 files changed, 228 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/repodetails/BranchesFragment.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/repodetails/CollaboratorsFragment.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/repodetails/CommitsFragment.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/repodetails/PullRequestsFragment.kt create mode 100644 app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt create mode 100644 app/src/main/res/layout/fragment_branches.xml create mode 100644 app/src/main/res/layout/fragment_collaborators.xml create mode 100644 app/src/main/res/layout/fragment_commits.xml create mode 100644 app/src/main/res/layout/fragment_issues.xml create mode 100644 app/src/main/res/layout/fragment_pull_requests.xml diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/BranchesFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/BranchesFragment.kt new file mode 100644 index 0000000..204ec0e --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/BranchesFragment.kt @@ -0,0 +1,21 @@ +package br.com.luisfernandez.github.client.repodetails + + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +import br.com.luisfernandez.github.client.R + +class BranchesFragment : Fragment() { + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + + return inflater.inflate(R.layout.fragment_branches, container, false) + } + + +} diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/CollaboratorsFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/CollaboratorsFragment.kt new file mode 100644 index 0000000..22b6fab --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/CollaboratorsFragment.kt @@ -0,0 +1,21 @@ +package br.com.luisfernandez.github.client.repodetails + + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +import br.com.luisfernandez.github.client.R + +class CollaboratorsFragment : Fragment() { + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + + return inflater.inflate(R.layout.fragment_collaborators, container, false) + } + + +} diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/CommitsFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/CommitsFragment.kt new file mode 100644 index 0000000..fc7122b --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/CommitsFragment.kt @@ -0,0 +1,21 @@ +package br.com.luisfernandez.github.client.repodetails + + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +import br.com.luisfernandez.github.client.R + +class CommitsFragment : Fragment() { + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + + return inflater.inflate(R.layout.fragment_commits, container, false) + } + + +} diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt new file mode 100644 index 0000000..1c2eb81 --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt @@ -0,0 +1,21 @@ +package br.com.luisfernandez.github.client.repodetails + + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +import br.com.luisfernandez.github.client.R + +class IssuesFragment : Fragment() { + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + + return inflater.inflate(R.layout.fragment_issues, container, false) + } + + +} diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/PullRequestsFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/PullRequestsFragment.kt new file mode 100644 index 0000000..273232f --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/PullRequestsFragment.kt @@ -0,0 +1,21 @@ +package br.com.luisfernandez.github.client.repodetails + + +import android.os.Bundle +import android.support.v4.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +import br.com.luisfernandez.github.client.R + +class PullRequestsFragment : Fragment() { + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle?): View? { + + return inflater.inflate(R.layout.fragment_pull_requests, container, false) + } + + +} diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt index f247830..7e29ef9 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt @@ -3,7 +3,7 @@ package br.com.luisfernandez.github.client.repodetails import android.annotation.SuppressLint import android.support.v7.app.AppCompatActivity import br.com.luisfernandez.github.client.R -import kotlinx.android.synthetic.main.activity_list.* +import kotlinx.android.synthetic.main.activity_repo_details.* import org.androidannotations.annotations.AfterViews import org.androidannotations.annotations.EActivity import org.androidannotations.annotations.Extra @@ -21,6 +21,11 @@ class RepoDetailsActivity : AppCompatActivity() { @AfterViews fun afterViews() { this.configToolbar() + + val fragmentAdapter = RepoDetailsPagerAdapter(supportFragmentManager) + repo_detail_viewpager.adapter = fragmentAdapter + + repo_detail_tablayout.setupWithViewPager(repo_detail_viewpager) } private fun configToolbar() { diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt new file mode 100644 index 0000000..0a1d403 --- /dev/null +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt @@ -0,0 +1,38 @@ +package br.com.luisfernandez.github.client.repodetails + +import android.support.v4.app.Fragment +import android.support.v4.app.FragmentManager +import android.support.v4.app.FragmentPagerAdapter + +class RepoDetailsPagerAdapter(fm: FragmentManager): + FragmentPagerAdapter(fm) { + + override fun getCount(): Int { + return 5 + } + + override fun getItem(position: Int): Fragment { + return when(position) { + 0 -> PullRequestsFragment() + 1 -> IssuesFragment() + 2 -> CommitsFragment() + 3 -> CollaboratorsFragment() + 4 -> BranchesFragment() + + else -> PullRequestsFragment() + } + } + + override fun getPageTitle(position: Int): CharSequence? { + return when(position){ + 0 -> "PullRequests" + 1 -> "Issues" + 2 -> "Commits" + 3 -> "Collaborators" + 4 -> "Branches" + + else -> "PullRequests" + } + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_repo_details.xml b/app/src/main/res/layout/activity_repo_details.xml index 02bb28f..54000b9 100644 --- a/app/src/main/res/layout/activity_repo_details.xml +++ b/app/src/main/res/layout/activity_repo_details.xml @@ -17,7 +17,7 @@ android:id="@+id/repo_detail_tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" - app:tabMode="fixed" + app:tabMode="scrollable" android:layout_below="@+id/toolbar"/> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_collaborators.xml b/app/src/main/res/layout/fragment_collaborators.xml new file mode 100644 index 0000000..6f5a920 --- /dev/null +++ b/app/src/main/res/layout/fragment_collaborators.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_commits.xml b/app/src/main/res/layout/fragment_commits.xml new file mode 100644 index 0000000..8be10b1 --- /dev/null +++ b/app/src/main/res/layout/fragment_commits.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_issues.xml b/app/src/main/res/layout/fragment_issues.xml new file mode 100644 index 0000000..8536989 --- /dev/null +++ b/app/src/main/res/layout/fragment_issues.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_pull_requests.xml b/app/src/main/res/layout/fragment_pull_requests.xml new file mode 100644 index 0000000..96f7bab --- /dev/null +++ b/app/src/main/res/layout/fragment_pull_requests.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2781954..cabf14b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,4 +8,7 @@ "Ohh no!\n%s is an invalid language\nPlease query a valid language ;)" TRY AGAIN + + + Hello blank fragment From 6903b05c397d34c9ae56790989cf4275b356536a Mon Sep 17 00:00:00 2001 From: Oliver Silva Date: Thu, 11 Apr 2019 21:04:39 -0300 Subject: [PATCH 05/15] Removing the default text string of fragments --- app/src/main/res/values/strings.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cabf14b..2781954 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,7 +8,4 @@ "Ohh no!\n%s is an invalid language\nPlease query a valid language ;)" TRY AGAIN - - - Hello blank fragment From 718dcd3fc80be84e9429d3446839236a11737511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81liver=20Silva?= Date: Fri, 12 Apr 2019 18:52:17 -0300 Subject: [PATCH 06/15] Adding funcionalities from IssueListActivity to the IssuesFragment. One issue detected: RecyclerView - No layout manager attached --- .../client/repodetails/IssuesFragment.kt | 113 +++++++++++++++++- .../client/repodetails/RepoDetailsActivity.kt | 2 +- .../repodetails/RepoDetailsPagerAdapter.kt | 16 ++- .../main/res/layout/activity_issues_list.xml | 4 +- app/src/main/res/layout/fragment_issues.xml | 3 +- 5 files changed, 126 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt index 1c2eb81..bf85fb3 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt @@ -1,21 +1,122 @@ package br.com.luisfernandez.github.client.repodetails - +import android.arch.lifecycle.Observer import android.os.Bundle import android.support.v4.app.Fragment +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup - import br.com.luisfernandez.github.client.R +import br.com.luisfernandez.github.client.extensions.setGone +import br.com.luisfernandez.github.client.extensions.setVisible +import br.com.luisfernandez.github.client.http.model.GitHubErrorBody +import br.com.luisfernandez.github.client.http.model.ServerError +import br.com.luisfernandez.github.client.issuelist.IssueListAdapter +import br.com.luisfernandez.github.client.issuelist.IssueListView +import br.com.luisfernandez.github.client.issuelist.IssueListViewModel +import br.com.luisfernandez.github.client.pojo.IssueResponse +import kotlinx.android.synthetic.main.activity_issues_list.* +import kotlinx.android.synthetic.main.view_state_empty.* +import kotlinx.android.synthetic.main.view_state_error.* +import kotlinx.android.synthetic.main.view_state_loading.* +import org.koin.android.viewmodel.ext.android.viewModel + +class IssuesFragment : Fragment(), IssueListView { + + lateinit var owner: String + lateinit var repoName: String + val viewModel by viewModel() + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + + val rootView = inflater.inflate(R.layout.activity_issues_list, container, false) + + val recyclerView = rootView.findViewById(R.id.recyclerView) as RecyclerView + + recyclerView.layoutManager = LinearLayoutManager(rootView.context) + recyclerView.setHasFixedSize(true) + + setupArguments() + + setupViewModel() + + viewModel.loadIssueList(owner, repoName) + + return inflater.inflate(R.layout.activity_issues_list, container, false) + + } -class IssuesFragment : Fragment() { + private fun setupArguments() { + owner = arguments!!.getString("OWNER") + repoName = arguments!!.getString("REPONAME") + } + + private fun setupViewModel() { + viewModel.issueList.observe(this, Observer { + issueList -> + showContent(issueList!!) + }) + + viewModel.serverError.observe(this, Observer { + serverError -> + handleError(serverError!!) + }) + } + + override fun handleError(serverError: ServerError) { + this.showErrorState() + + if (serverError.errorBody != null) { + textErrorMessage.text = serverError.errorBody!!.message + } else { + textErrorMessage.text = serverError.errorMessage + } + + buttonRetry.setOnClickListener { _ -> + showLoading() + viewModel.loadIssueList(owner, repoName) + } + } + + private fun showErrorState() { + layoutProgress.setGone() + layoutEmpty.setGone() + layoutError.setVisible() + recyclerView.setGone() + } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View? { + override fun showLoading() { + layoutProgress.setVisible() + layoutEmpty.setGone() + layoutError.setGone() + recyclerView.setGone() + } - return inflater.inflate(R.layout.fragment_issues, container, false) + override fun showEmpty() { + layoutProgress.setGone() + layoutEmpty.setVisible() + layoutError.setGone() + recyclerView.setGone() } + override fun showContent(content: List) { + if (content.isEmpty()) { + showEmpty() + } else { + layoutProgress.setGone() + layoutEmpty.setGone() + layoutError.setGone() + recyclerView.setVisible() + recyclerView.adapter = this.getIssueListAdapter(content) + } + } + + private fun getIssueListAdapter(content: List): IssueListAdapter { + return IssueListAdapter( + content as ArrayList + ) + } } diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt index 7e29ef9..78577b9 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt @@ -22,7 +22,7 @@ class RepoDetailsActivity : AppCompatActivity() { fun afterViews() { this.configToolbar() - val fragmentAdapter = RepoDetailsPagerAdapter(supportFragmentManager) + val fragmentAdapter = RepoDetailsPagerAdapter(supportFragmentManager, owner, repoName) repo_detail_viewpager.adapter = fragmentAdapter repo_detail_tablayout.setupWithViewPager(repo_detail_viewpager) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt index 0a1d403..a4fc5c7 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt @@ -3,16 +3,24 @@ package br.com.luisfernandez.github.client.repodetails import android.support.v4.app.Fragment import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentPagerAdapter +import android.os.Bundle -class RepoDetailsPagerAdapter(fm: FragmentManager): +class RepoDetailsPagerAdapter(fm: FragmentManager, owner: String, repoName: String): FragmentPagerAdapter(fm) { + val owner = owner + val repoName = repoName + override fun getCount(): Int { return 5 } override fun getItem(position: Int): Fragment { - return when(position) { + val bundle = Bundle() + bundle.putString("OWNER", owner) + bundle.putString("REPONAME", repoName) + + var fragment = when(position) { 0 -> PullRequestsFragment() 1 -> IssuesFragment() 2 -> CommitsFragment() @@ -21,6 +29,10 @@ class RepoDetailsPagerAdapter(fm: FragmentManager): else -> PullRequestsFragment() } + + fragment.arguments = bundle + + return fragment } override fun getPageTitle(position: Int): CharSequence? { diff --git a/app/src/main/res/layout/activity_issues_list.xml b/app/src/main/res/layout/activity_issues_list.xml index 9c199fd..768e678 100644 --- a/app/src/main/res/layout/activity_issues_list.xml +++ b/app/src/main/res/layout/activity_issues_list.xml @@ -1,7 +1,9 @@ + xmlns:tools="http://schemas.android.com/tools" + android:animateLayoutChanges="true" + tools:context=".repodetails.IssuesFragment"> + android:layout_height="match_parent"> Date: Sat, 13 Apr 2019 15:55:15 -0300 Subject: [PATCH 07/15] Fixing return of IssuesFragment.kt to fix the visibility of the fragment --- .../luisfernandez/github/client/repodetails/IssuesFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt index bf85fb3..caab457 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt @@ -44,7 +44,7 @@ class IssuesFragment : Fragment(), IssueListView { viewModel.loadIssueList(owner, repoName) - return inflater.inflate(R.layout.activity_issues_list, container, false) + return rootView } From ba86bf2e652eb33b5c9bd0d48f394079d6f0e3f4 Mon Sep 17 00:00:00 2001 From: Oliver Silva Date: Sat, 13 Apr 2019 16:00:41 -0300 Subject: [PATCH 08/15] Removing toolbar from activity_issues_list (that will be the fragment_issues_list) --- app/src/main/res/layout/activity_issues_list.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/src/main/res/layout/activity_issues_list.xml b/app/src/main/res/layout/activity_issues_list.xml index 768e678..6b90446 100644 --- a/app/src/main/res/layout/activity_issues_list.xml +++ b/app/src/main/res/layout/activity_issues_list.xml @@ -5,14 +5,6 @@ android:animateLayoutChanges="true" tools:context=".repodetails.IssuesFragment"> - - Date: Sat, 13 Apr 2019 16:08:24 -0300 Subject: [PATCH 09/15] Renaming IssuesFragment to IssuesListFragment and activity_issues_list to fragment_issues_list --- .../github/client/issuelist/IssueListActivity.kt | 2 +- .../{IssuesFragment.kt => IssuesListFragment.kt} | 6 +++--- .../github/client/repodetails/RepoDetailsPagerAdapter.kt | 2 +- .../{activity_issues_list.xml => fragment_issues_list.xml} | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) rename app/src/main/java/br/com/luisfernandez/github/client/repodetails/{IssuesFragment.kt => IssuesListFragment.kt} (95%) rename app/src/main/res/layout/{activity_issues_list.xml => fragment_issues_list.xml} (93%) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListActivity.kt index eab0573..0ac81b4 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/issuelist/IssueListActivity.kt @@ -20,7 +20,7 @@ import org.androidannotations.annotations.Extra import org.koin.android.viewmodel.ext.android.viewModel @SuppressLint("Registered") -@EActivity(R.layout.activity_issues_list) +@EActivity(R.layout.fragment_issues_list) class IssueListActivity : AppCompatActivity(), IssueListView { @Extra diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesListFragment.kt similarity index 95% rename from app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt rename to app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesListFragment.kt index caab457..9be3c45 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesFragment.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesListFragment.kt @@ -17,13 +17,13 @@ import br.com.luisfernandez.github.client.issuelist.IssueListAdapter import br.com.luisfernandez.github.client.issuelist.IssueListView import br.com.luisfernandez.github.client.issuelist.IssueListViewModel import br.com.luisfernandez.github.client.pojo.IssueResponse -import kotlinx.android.synthetic.main.activity_issues_list.* +import kotlinx.android.synthetic.main.fragment_issues_list.* import kotlinx.android.synthetic.main.view_state_empty.* import kotlinx.android.synthetic.main.view_state_error.* import kotlinx.android.synthetic.main.view_state_loading.* import org.koin.android.viewmodel.ext.android.viewModel -class IssuesFragment : Fragment(), IssueListView { +class IssuesListFragment : Fragment(), IssueListView { lateinit var owner: String lateinit var repoName: String @@ -31,7 +31,7 @@ class IssuesFragment : Fragment(), IssueListView { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - val rootView = inflater.inflate(R.layout.activity_issues_list, container, false) + val rootView = inflater.inflate(R.layout.fragment_issues_list, container, false) val recyclerView = rootView.findViewById(R.id.recyclerView) as RecyclerView diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt index a4fc5c7..b1f67df 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt @@ -22,7 +22,7 @@ class RepoDetailsPagerAdapter(fm: FragmentManager, owner: String, repoName: Stri var fragment = when(position) { 0 -> PullRequestsFragment() - 1 -> IssuesFragment() + 1 -> IssuesListFragment() 2 -> CommitsFragment() 3 -> CollaboratorsFragment() 4 -> BranchesFragment() diff --git a/app/src/main/res/layout/activity_issues_list.xml b/app/src/main/res/layout/fragment_issues_list.xml similarity index 93% rename from app/src/main/res/layout/activity_issues_list.xml rename to app/src/main/res/layout/fragment_issues_list.xml index 6b90446..796314b 100644 --- a/app/src/main/res/layout/activity_issues_list.xml +++ b/app/src/main/res/layout/fragment_issues_list.xml @@ -3,7 +3,7 @@ android:layout_height="match_parent" xmlns:tools="http://schemas.android.com/tools" android:animateLayoutChanges="true" - tools:context=".repodetails.IssuesFragment"> + tools:context=".repodetails.IssuesListFragment"> Date: Sat, 13 Apr 2019 16:17:51 -0300 Subject: [PATCH 10/15] Removing access to IssueListActivity and access function of PullRequestActivity --- .../client/repolist/RepoListActivity.kt | 28 +------------------ .../github/client/repolist/RepoListAdapter.kt | 7 +---- 2 files changed, 2 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt index d458201..b7e4f07 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt @@ -12,7 +12,6 @@ import br.com.luisfernandez.github.client.extensions.setGone import br.com.luisfernandez.github.client.extensions.setVisible import br.com.luisfernandez.github.client.http.model.GitHubErrorBody import br.com.luisfernandez.github.client.http.model.ServerError -import br.com.luisfernandez.github.client.issuelist.IssueListActivity_ import br.com.luisfernandez.github.client.pojo.Repo import br.com.luisfernandez.github.client.pullrequest.PullRequestListActivity_ import br.com.luisfernandez.github.client.repodetails.RepoDetailsActivity_ @@ -121,8 +120,7 @@ class RepoListActivity : AppCompatActivity(), RepoListView { private fun getRepoListAdapter(): RepoListAdapter { return RepoListAdapter( getOnItemClickListener(), - getOnLoadMoreContentClickListener(), - getOnIssueClickListener() + getOnLoadMoreContentClickListener() ) } @@ -134,14 +132,6 @@ class RepoListActivity : AppCompatActivity(), RepoListView { } } - private fun getOnIssueClickListener(): OnItemClickListener { - return object : OnItemClickListener { - override fun onItemClick(type: Repo) { - goToIssueListActivity(type) - } - } - } - private fun getOnLoadMoreContentClickListener(): OnItemClickListener { return object : OnItemClickListener { override fun onItemClick(type: String) { @@ -150,22 +140,6 @@ class RepoListActivity : AppCompatActivity(), RepoListView { } } - private fun goToPullRequestActivity(type: Repo) { - PullRequestListActivity_ - .intent(this@RepoListActivity) - .owner(type.owner.login) - .repoName(type.name) - .start() - } - - private fun goToIssueListActivity(type: Repo) { - IssueListActivity_ - .intent(this@RepoListActivity) - .owner(type.owner.login) - .repoName(type.name) - .start() - } - private fun goToRepoDetailsActivity(type: Repo) { RepoDetailsActivity_ .intent(this@RepoListActivity) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListAdapter.kt b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListAdapter.kt index c5d85fe..9572f80 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListAdapter.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListAdapter.kt @@ -18,8 +18,7 @@ import kotlin.collections.ArrayList */ class RepoListAdapter( private val onItemClickListener: OnItemClickListener, - private val onRetryClickListener: OnItemClickListener, - private val onIssueClickListener: OnItemClickListener + private val onRetryClickListener: OnItemClickListener ) : RecyclerView.Adapter() { companion object { @@ -76,10 +75,6 @@ class RepoListAdapter( viewHolder.itemView.setOnClickListener { _ -> onItemClickListener.onItemClick(repo) } - - viewHolder.textIssuesCount.setOnClickListener { _ -> - onIssueClickListener.onItemClick(repo) - } } ERROR_FOOTER -> { val errorFooterHolder = viewHolder as ErrorFooterViewHolder From 83586b6de7c2e0ec1b714fa61f96a59e8c35aad2 Mon Sep 17 00:00:00 2001 From: Oliver Silva Date: Sat, 13 Apr 2019 16:30:00 -0300 Subject: [PATCH 11/15] Optimizing imports from RepoListActivity --- .../luisfernandez/github/client/repolist/RepoListActivity.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt index b7e4f07..9e551a1 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repolist/RepoListActivity.kt @@ -13,7 +13,6 @@ import br.com.luisfernandez.github.client.extensions.setVisible import br.com.luisfernandez.github.client.http.model.GitHubErrorBody import br.com.luisfernandez.github.client.http.model.ServerError import br.com.luisfernandez.github.client.pojo.Repo -import br.com.luisfernandez.github.client.pullrequest.PullRequestListActivity_ import br.com.luisfernandez.github.client.repodetails.RepoDetailsActivity_ import com.crashlytics.android.answers.Answers import com.crashlytics.android.answers.SearchEvent @@ -24,7 +23,6 @@ import kotlinx.android.synthetic.main.view_state_error.* import kotlinx.android.synthetic.main.view_state_loading.* import org.androidannotations.annotations.AfterViews import org.androidannotations.annotations.EActivity -import org.koin.android.ext.android.inject import org.koin.android.viewmodel.ext.android.viewModel From e52f25079c3554be72ab9f0882b6f646888f07b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81liver=20Silva?= Date: Mon, 15 Apr 2019 11:45:35 -0300 Subject: [PATCH 12/15] Removing not used fragment. --- app/src/main/res/layout/fragment_issues.xml | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 app/src/main/res/layout/fragment_issues.xml diff --git a/app/src/main/res/layout/fragment_issues.xml b/app/src/main/res/layout/fragment_issues.xml deleted file mode 100644 index 1f212c6..0000000 --- a/app/src/main/res/layout/fragment_issues.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file From c21643afc827407055569604bcb177e62477f110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81liver=20Silva?= Date: Wed, 17 Apr 2019 15:54:47 -0300 Subject: [PATCH 13/15] Renaming TabLayout and ViewPager components --- .../github/client/repodetails/RepoDetailsActivity.kt | 4 ++-- app/src/main/res/layout/activity_repo_details.xml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt index 78577b9..7bc26a7 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt @@ -23,9 +23,9 @@ class RepoDetailsActivity : AppCompatActivity() { this.configToolbar() val fragmentAdapter = RepoDetailsPagerAdapter(supportFragmentManager, owner, repoName) - repo_detail_viewpager.adapter = fragmentAdapter + viewPagerRepoDetail.adapter = fragmentAdapter - repo_detail_tablayout.setupWithViewPager(repo_detail_viewpager) + tabLayoutRepoDetail.setupWithViewPager(viewPagerRepoDetail) } private fun configToolbar() { diff --git a/app/src/main/res/layout/activity_repo_details.xml b/app/src/main/res/layout/activity_repo_details.xml index 54000b9..46f8ff9 100644 --- a/app/src/main/res/layout/activity_repo_details.xml +++ b/app/src/main/res/layout/activity_repo_details.xml @@ -14,17 +14,17 @@ android:theme="@style/AppTheme.AppBarOverlay" /> + android:layout_below="@+id/tabLayoutRepoDetail"/> \ No newline at end of file From 20a08e755218d6a2f116cc00cde056e7faf85c79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81liver=20Silva?= Date: Wed, 17 Apr 2019 16:23:21 -0300 Subject: [PATCH 14/15] Tranferring titles to string resources and getting them by application context --- .../client/repodetails/RepoDetailsActivity.kt | 2 +- .../repodetails/RepoDetailsPagerAdapter.kt | 16 +++++++++------- app/src/main/res/values/strings.xml | 5 +++++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt index 7bc26a7..61fcfbe 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt @@ -22,7 +22,7 @@ class RepoDetailsActivity : AppCompatActivity() { fun afterViews() { this.configToolbar() - val fragmentAdapter = RepoDetailsPagerAdapter(supportFragmentManager, owner, repoName) + val fragmentAdapter = RepoDetailsPagerAdapter(this, supportFragmentManager, owner, repoName) viewPagerRepoDetail.adapter = fragmentAdapter tabLayoutRepoDetail.setupWithViewPager(viewPagerRepoDetail) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt index b1f67df..39429de 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt @@ -1,11 +1,13 @@ package br.com.luisfernandez.github.client.repodetails +import android.content.Context import android.support.v4.app.Fragment import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentPagerAdapter import android.os.Bundle +import br.com.luisfernandez.github.client.R -class RepoDetailsPagerAdapter(fm: FragmentManager, owner: String, repoName: String): +class RepoDetailsPagerAdapter(private val context: Context, fm: FragmentManager, owner: String, repoName: String): FragmentPagerAdapter(fm) { val owner = owner @@ -37,13 +39,13 @@ class RepoDetailsPagerAdapter(fm: FragmentManager, owner: String, repoName: Stri override fun getPageTitle(position: Int): CharSequence? { return when(position){ - 0 -> "PullRequests" - 1 -> "Issues" - 2 -> "Commits" - 3 -> "Collaborators" - 4 -> "Branches" + 0 -> context.getString(R.string.titlePullRequestsTab) + 1 -> context.getString(R.string.titleIssuesTab) + 2 -> context.getString(R.string.titleCommitsTab) + 3 -> context.getString(R.string.titleCollaboratorsTab) + 4 -> context.getString(R.string.titleBranchesTab) - else -> "PullRequests" + else -> context.getString(R.string.titlePullRequestsTab) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2781954..5bd0e2b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,4 +8,9 @@ "Ohh no!\n%s is an invalid language\nPlease query a valid language ;)" TRY AGAIN + PullRequests + Issues + Commits + Collaborators + Branches From 4384a55723594f6ab4e8ed72f8310c69bce43776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81liver=20Silva?= Date: Wed, 17 Apr 2019 17:11:21 -0300 Subject: [PATCH 15/15] Creating companion object to store constants on RepoDetailsPagerAdapter. Using OWNER and REPONAME as constants --- .../github/client/repodetails/IssuesListFragment.kt | 6 ++++-- .../github/client/repodetails/RepoDetailsPagerAdapter.kt | 9 +++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesListFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesListFragment.kt index 9be3c45..a0d3893 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesListFragment.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesListFragment.kt @@ -17,6 +17,8 @@ import br.com.luisfernandez.github.client.issuelist.IssueListAdapter import br.com.luisfernandez.github.client.issuelist.IssueListView import br.com.luisfernandez.github.client.issuelist.IssueListViewModel import br.com.luisfernandez.github.client.pojo.IssueResponse +import br.com.luisfernandez.github.client.repodetails.RepoDetailsPagerAdapter.Companion.OWNER +import br.com.luisfernandez.github.client.repodetails.RepoDetailsPagerAdapter.Companion.REPONAME import kotlinx.android.synthetic.main.fragment_issues_list.* import kotlinx.android.synthetic.main.view_state_empty.* import kotlinx.android.synthetic.main.view_state_error.* @@ -49,8 +51,8 @@ class IssuesListFragment : Fragment(), IssueListView { } private fun setupArguments() { - owner = arguments!!.getString("OWNER") - repoName = arguments!!.getString("REPONAME") + owner = arguments!!.getString(OWNER) + repoName = arguments!!.getString(REPONAME) } private fun setupViewModel() { diff --git a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt index 39429de..b6b9314 100644 --- a/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt +++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt @@ -10,6 +10,11 @@ import br.com.luisfernandez.github.client.R class RepoDetailsPagerAdapter(private val context: Context, fm: FragmentManager, owner: String, repoName: String): FragmentPagerAdapter(fm) { + companion object { + const val OWNER = "OWNER" + const val REPONAME = "REPONAME" + } + val owner = owner val repoName = repoName @@ -19,8 +24,8 @@ class RepoDetailsPagerAdapter(private val context: Context, fm: FragmentManager, override fun getItem(position: Int): Fragment { val bundle = Bundle() - bundle.putString("OWNER", owner) - bundle.putString("REPONAME", repoName) + bundle.putString(OWNER, owner) + bundle.putString(REPONAME, repoName) var fragment = when(position) { 0 -> PullRequestsFragment()