Skip to content

Feature/30 migrate issuelist to a fragment tab #31

New issue

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

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

Already on GitHub? Sign in to your account

Open
wants to merge 16 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@
android:screenOrientation="portrait"
android:name=".issuelist.IssueListActivity_" />

<activity
android:label="@string/app_name"
android:screenOrientation="portrait"
android:name=".repodetails.RepoDetailsActivity_" />

<meta-data
android:name="io.fabric.ApiKey"
android:value="e31ee77a076b044cb52e3fedbad573fac9b5ee96" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class PullRequestListActivity : AppCompatActivity(), PullRequestListView {

recyclerView.layoutManager = layoutManager
recyclerView.setHasFixedSize(true)
//

setupViewModel()

viewModel.loadPullRequestList(owner, repoName)
Expand Down
Original file line number Diff line number Diff line change
@@ -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)
}


}
Original file line number Diff line number Diff line change
@@ -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)
}


}
Original file line number Diff line number Diff line change
@@ -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)
}


}
Original file line number Diff line number Diff line change
@@ -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<IssueListViewModel>()

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<GitHubErrorBody>) {
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<IssueResponse>) {
if (content.isEmpty()) {
showEmpty()
} else {
layoutProgress.setGone()
layoutEmpty.setGone()
layoutError.setGone()
recyclerView.setVisible()

recyclerView.adapter = this.getIssueListAdapter(content)
}
}

private fun getIssueListAdapter(content: List<IssueResponse>): IssueListAdapter {
return IssueListAdapter(
content as ArrayList<IssueResponse>
)
}
}
Original file line number Diff line number Diff line change
@@ -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)
}


}
Original file line number Diff line number Diff line change
@@ -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
}
}
Original file line number Diff line number Diff line change
@@ -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
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acho que isso pode dar problemas nos casos de onRestoreInstance(). Vamos aguardar após o merge e testamos juntos.


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)
}
}

}
Loading