summaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/yodle/android/kotlindemo/activity/RepositoryDetailActivity.kt
blob: d354365371cda229463f8d86a0a894c76f0ca16c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.yodle.android.kotlindemo.activity

import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import com.yodle.android.kotlindemo.MainApp
import com.yodle.android.kotlindemo.R
import com.yodle.android.kotlindemo.extension.*
import com.yodle.android.kotlindemo.model.Repository
import com.yodle.android.kotlindemo.model.RepositoryParcel
import com.yodle.android.kotlindemo.model.RepositoryReadme
import com.yodle.android.kotlindemo.service.GitHubService
import kotlinx.android.synthetic.main.activity_repository_detail.*
import rx.Observer
import timber.log.Timber
import javax.inject.Inject

class RepositoryDetailActivity : BaseActivity(), Observer<RepositoryReadme> {

    companion object {
        val REPOSITORY_KEY = "repository_key"

        @JvmStatic fun getIntent(context: Context, repository: Repository): Intent {
            val intent = Intent(context, RepositoryDetailActivity::class.java)
            intent.putExtra(REPOSITORY_KEY, RepositoryParcel(repository))
            return intent
        }
    }

    @Inject lateinit var gitHubService: GitHubService

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_repository_detail)
        MainApp.graph.inject(this)

        val repository = intent.getParcelableExtra<RepositoryParcel>(REPOSITORY_KEY).data

        setSupportActionBar(toolbar)
        supportActionBar?.title = "${repository.full_name}"
        supportActionBar?.setDisplayHomeAsUpEnabled(true)

        loadRepositoryDetails(repository.owner.login, repository.name)
        loadRepositoryImage(repository.owner.avatar_url)

        repositoryDetailFab.setOnClickListener { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(repository.html_url))) }

        repositoryDetailWebView.setProgressChangedListener { progress -> repositoryDetailSpinner.showIf(progress < 100) }
    }

    override fun onCompleted() {
    }

    override fun onError(e: Throwable) {
        Timber.e(e, "Failed to load repository readme")
        repositoryDetailSpinner.hide()
    }

    override fun onNext(readme: RepositoryReadme) {
        repositoryDetailWebView.loadUrl(readme.html_url)
    }

    fun loadRepositoryDetails(owner: String, repository: String) {
        repositoryDetailSpinner.show()
        subscribe(gitHubService.getRepositoryReadme(owner, repository), this)
    }

    fun loadRepositoryImage(imageUrl: String) {
        repositoryDetailImage.loadUrl(imageUrl) {
            onSuccess { setToolbarColorFromImage() }
            onError { Timber.e("Failed to load image") }
        }
    }

    fun setToolbarColorFromImage() {
        repositoryDetailImage.generatePalette gen@ {
            val swatch = it.mutedSwatch ?: it.vibrantSwatch ?: it.lightMutedSwatch ?: it.lightVibrantSwatch ?: return@gen
            val backgroundColor = swatch.rgb
            val titleTextColor = swatch.titleTextColor

            toolbar.setTitleTextColor(titleTextColor)
            toolbarLayout.setBackgroundColor(backgroundColor)
            toolbarLayout.setContentScrimColor(backgroundColor)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                window.statusBarColor = backgroundColor
            }
        }
    }
}