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/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/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/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/IssuesListFragment.kt b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesListFragment.kt
new file mode 100644
index 0000000..a0d3893
--- /dev/null
+++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/IssuesListFragment.kt
@@ -0,0 +1,124 @@
+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 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.*
+import kotlinx.android.synthetic.main.view_state_loading.*
+import org.koin.android.viewmodel.ext.android.viewModel
+
+class IssuesListFragment : 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.fragment_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 rootView
+
+ }
+
+ 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 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/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
new file mode 100644
index 0000000..61fcfbe
--- /dev/null
+++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsActivity.kt
@@ -0,0 +1,45 @@
+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_repo_details.*
+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()
+
+ val fragmentAdapter = RepoDetailsPagerAdapter(this, supportFragmentManager, owner, repoName)
+ viewPagerRepoDetail.adapter = fragmentAdapter
+
+ tabLayoutRepoDetail.setupWithViewPager(viewPagerRepoDetail)
+ }
+
+ 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
+ }
+}
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..b6b9314
--- /dev/null
+++ b/app/src/main/java/br/com/luisfernandez/github/client/repodetails/RepoDetailsPagerAdapter.kt
@@ -0,0 +1,57 @@
+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(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
+
+ override fun getCount(): Int {
+ return 5
+ }
+
+ override fun getItem(position: Int): Fragment {
+ val bundle = Bundle()
+ bundle.putString(OWNER, owner)
+ bundle.putString(REPONAME, repoName)
+
+ var fragment = when(position) {
+ 0 -> PullRequestsFragment()
+ 1 -> IssuesListFragment()
+ 2 -> CommitsFragment()
+ 3 -> CollaboratorsFragment()
+ 4 -> BranchesFragment()
+
+ else -> PullRequestsFragment()
+ }
+
+ fragment.arguments = bundle
+
+ return fragment
+ }
+
+ override fun getPageTitle(position: Int): CharSequence? {
+ return when(position){
+ 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 -> context.getString(R.string.titlePullRequestsTab)
+ }
+ }
+
+}
\ No newline at end of file
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..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
@@ -12,9 +12,8 @@ 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_
import com.crashlytics.android.answers.Answers
import com.crashlytics.android.answers.SearchEvent
import com.miguelcatalan.materialsearchview.MaterialSearchView
@@ -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
@@ -120,23 +118,14 @@ class RepoListActivity : AppCompatActivity(), RepoListView {
private fun getRepoListAdapter(): RepoListAdapter {
return RepoListAdapter(
getOnItemClickListener(),
- getOnLoadMoreContentClickListener(),
- getOnIssueClickListener()
+ getOnLoadMoreContentClickListener()
)
}
private fun getOnItemClickListener(): OnItemClickListener {
return object : OnItemClickListener {
override fun onItemClick(type: Repo) {
- goToPullRequestActivity(type)
- }
- }
- }
-
- private fun getOnIssueClickListener(): OnItemClickListener {
- return object : OnItemClickListener {
- override fun onItemClick(type: Repo) {
- goToIssueListActivity(type)
+ goToRepoDetailsActivity(type)
}
}
}
@@ -149,16 +138,8 @@ 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_
+ private fun goToRepoDetailsActivity(type: Repo) {
+ RepoDetailsActivity_
.intent(this@RepoListActivity)
.owner(type.owner.login)
.repoName(type.name)
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
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..46f8ff9
--- /dev/null
+++ b/app/src/main/res/layout/activity_repo_details.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_branches.xml b/app/src/main/res/layout/fragment_branches.xml
new file mode 100644
index 0000000..20a29b3
--- /dev/null
+++ b/app/src/main/res/layout/fragment_branches.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ 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/activity_issues_list.xml b/app/src/main/res/layout/fragment_issues_list.xml
similarity index 66%
rename from app/src/main/res/layout/activity_issues_list.xml
rename to app/src/main/res/layout/fragment_issues_list.xml
index 9c199fd..796314b 100644
--- a/app/src/main/res/layout/activity_issues_list.xml
+++ b/app/src/main/res/layout/fragment_issues_list.xml
@@ -1,15 +1,9 @@
-
-
+ xmlns:tools="http://schemas.android.com/tools"
+ android:animateLayoutChanges="true"
+ tools:context=".repodetails.IssuesListFragment">
+
+
+
+
+
\ 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..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