From c673a37af441f335a54f5b1f6da75b46302bd6f4 Mon Sep 17 00:00:00 2001 From: Oliver Silva Date: Tue, 9 Apr 2019 10:54:22 -0300 Subject: [PATCH 1/5] 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 2/5] 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 3/5] 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 4/5] 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 5/5] 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