Added tranlators

This commit is contained in:
h4h13 2020-04-25 00:20:46 +05:30
parent c2bc78e7ea
commit 369411ffc6
10 changed files with 147 additions and 22 deletions

View file

@ -25,29 +25,28 @@ import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.base.AbsBaseActivity import code.name.monkey.retromusic.activities.base.AbsBaseActivity
import code.name.monkey.retromusic.adapter.ContributorAdapter import code.name.monkey.retromusic.adapter.ContributorAdapter
import code.name.monkey.retromusic.model.Contributor import code.name.monkey.retromusic.model.Contributor
import code.name.monkey.retromusic.mvp.presenter.AboutPresenter
import code.name.monkey.retromusic.mvp.presenter.AboutView
import code.name.monkey.retromusic.util.NavigationUtil import code.name.monkey.retromusic.util.NavigationUtil
import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.PreferenceUtil
import com.afollestad.materialdialogs.LayoutMode import com.afollestad.materialdialogs.LayoutMode
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.bottomsheets.BottomSheet import com.afollestad.materialdialogs.bottomsheets.BottomSheet
import com.afollestad.materialdialogs.list.listItems import com.afollestad.materialdialogs.list.listItems
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import kotlinx.android.synthetic.main.activity_about.* import kotlinx.android.synthetic.main.activity_about.*
import kotlinx.android.synthetic.main.card_credit.* import kotlinx.android.synthetic.main.card_credit.*
import kotlinx.android.synthetic.main.card_other.* import kotlinx.android.synthetic.main.card_other.*
import kotlinx.android.synthetic.main.card_retro_info.* import kotlinx.android.synthetic.main.card_retro_info.*
import kotlinx.android.synthetic.main.card_social.* import kotlinx.android.synthetic.main.card_social.*
import java.io.IOException import javax.inject.Inject
import java.nio.charset.StandardCharsets
class AboutActivity : AbsBaseActivity(), View.OnClickListener { class AboutActivity : AbsBaseActivity(), View.OnClickListener, AboutView {
private val assetJsonData: String? /*private val assetJsonData: String?
get() { get() {
val json: String val json: String
try { try {
val inputStream = assets.open("contributors.json") val inputStream = assets.open("data/contributors.json")
val size = inputStream.available() val size = inputStream.available()
val buffer = ByteArray(size) val buffer = ByteArray(size)
inputStream.read(buffer) inputStream.read(buffer)
@ -60,6 +59,9 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener {
return json return json
} }
*/
@Inject
lateinit var aboutPresenter: AboutPresenter
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
setDrawUnderStatusBar() setDrawUnderStatusBar()
@ -69,13 +71,27 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener {
setNavigationbarColorAuto() setNavigationbarColorAuto()
setLightNavigationBar(true) setLightNavigationBar(true)
App.musicComponent.inject(this)
aboutPresenter.attachView(this)
val toolbarColor = ATHUtil.resolveColor(this, R.attr.colorSurface) val toolbarColor = ATHUtil.resolveColor(this, R.attr.colorSurface)
toolbar.setBackgroundColor(toolbarColor) toolbar.setBackgroundColor(toolbarColor)
ToolbarContentTintHelper.colorBackButton(toolbar) ToolbarContentTintHelper.colorBackButton(toolbar)
setSupportActionBar(toolbar) setSupportActionBar(toolbar)
version.setSummary(getAppVersion()) version.setSummary(getAppVersion())
setUpView() setUpView()
loadContributors() //loadContributors()
}
override fun onResume() {
super.onResume()
aboutPresenter.loadContributors()
aboutPresenter.loadTranslators()
}
override fun onDestroy() {
super.onDestroy()
aboutPresenter.detachView()
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
@ -159,15 +175,14 @@ class AboutActivity : AbsBaseActivity(), View.OnClickListener {
.setText(String.format(getString(R.string.app_share), packageName)).startChooser() .setText(String.format(getString(R.string.app_share), packageName)).startChooser()
} }
private fun loadContributors() { override fun showContributors(contributor: List<Contributor>) {
val type = object : TypeToken<List<Contributor>>() { val contributorAdapter = ContributorAdapter(contributor)
}.type
val contributors = Gson().fromJson<List<Contributor>>(assetJsonData, type)
val contributorAdapter = ContributorAdapter(contributors)
recyclerView.layoutManager = LinearLayoutManager(this) recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.itemAnimator = DefaultItemAnimator() recyclerView.itemAnimator = DefaultItemAnimator()
recyclerView.adapter = contributorAdapter recyclerView.adapter = contributorAdapter
} }
override fun translators(contributor: List<Contributor>) {
}
} }

View file

@ -54,4 +54,6 @@ interface MusicComponent {
fun inject(searchActivity: SearchActivity) fun inject(searchActivity: SearchActivity)
fun inject(bannerHomeFragment: BannerHomeFragment) fun inject(bannerHomeFragment: BannerHomeFragment)
fun inject(aboutActivity: AboutActivity)
} }

View file

@ -16,6 +16,7 @@ package code.name.monkey.retromusic.dagger.module
import android.content.Context import android.content.Context
import code.name.monkey.retromusic.mvp.presenter.* import code.name.monkey.retromusic.mvp.presenter.*
import code.name.monkey.retromusic.mvp.presenter.AboutPresenter.AboutPresenterImpl
import code.name.monkey.retromusic.mvp.presenter.AlbumDetailsPresenter.AlbumDetailsPresenterImpl import code.name.monkey.retromusic.mvp.presenter.AlbumDetailsPresenter.AlbumDetailsPresenterImpl
import code.name.monkey.retromusic.mvp.presenter.AlbumsPresenter.AlbumsPresenterImpl import code.name.monkey.retromusic.mvp.presenter.AlbumsPresenter.AlbumsPresenterImpl
import code.name.monkey.retromusic.mvp.presenter.ArtistDetailsPresenter.ArtistDetailsPresenterImpl import code.name.monkey.retromusic.mvp.presenter.ArtistDetailsPresenter.ArtistDetailsPresenterImpl
@ -98,4 +99,9 @@ class PresenterModule {
fun providesSongPresenter(presenter: SongPresenterImpl): SongPresenter { fun providesSongPresenter(presenter: SongPresenterImpl): SongPresenter {
return presenter return presenter
} }
@Provides
fun providesAboutPresenter(presenter: AboutPresenterImpl): AboutPresenter {
return presenter
}
} }

View file

@ -0,0 +1,26 @@
package code.name.monkey.retromusic.data
import code.name.monkey.retromusic.model.Contributor
import com.google.gson.GsonBuilder
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.GET
private const val BASE_URL = "https://github.com/h4h13/RetroMusicPlayer/blob/dev/data/"
interface RetroDataService {
@GET("translators.json")
suspend fun getContributors(): List<Contributor>
@GET("translators.json")
suspend fun getTranslators(): List<Contributor>
companion object {
val retoService = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))
.build()
.create(RetroDataService::class.java)
}
}

View file

@ -37,8 +37,7 @@ interface DeezerApiService {
fun createDefaultOkHttpClient( fun createDefaultOkHttpClient(
context: Context context: Context
): OkHttpClient.Builder = ): OkHttpClient.Builder = OkHttpClient.Builder()
OkHttpClient.Builder()
.cache(createDefaultCache(context)) .cache(createDefaultCache(context))
.addInterceptor(createCacheControlInterceptor()) .addInterceptor(createCacheControlInterceptor())

View file

@ -0,0 +1,57 @@
package code.name.monkey.retromusic.mvp.presenter
import code.name.monkey.retromusic.Result.Error
import code.name.monkey.retromusic.Result.Success
import code.name.monkey.retromusic.model.Contributor
import code.name.monkey.retromusic.mvp.Presenter
import code.name.monkey.retromusic.mvp.PresenterImpl
import code.name.monkey.retromusic.providers.interfaces.Repository
import kotlinx.coroutines.*
import javax.inject.Inject
import kotlin.coroutines.CoroutineContext
interface AboutView {
fun showContributors(contributor: List<Contributor>)
fun translators(contributor: List<Contributor>)
}
interface AboutPresenter : Presenter<AboutView> {
fun loadContributors()
fun loadTranslators()
class AboutPresenterImpl @Inject constructor(
private val repository: Repository
) : PresenterImpl<AboutView>(), AboutPresenter, CoroutineScope {
override fun loadContributors() {
launch {
when (val result = repository.contributors()) {
is Success -> withContext(Dispatchers.Main) {
view.showContributors(
result.data
)
}
is Error -> withContext(Dispatchers.Main) {}
}
}
}
override fun loadTranslators() {
launch {
when (val result = repository.translators()) {
is Success -> withContext(Dispatchers.Main) {
view.translators(
result.data
)
}
is Error -> withContext(Dispatchers.Main) {}
}
}
}
private var job: Job = Job()
override val coroutineContext: CoroutineContext
get() = Dispatchers.IO + job
}
}

View file

@ -20,6 +20,7 @@ import code.name.monkey.retromusic.Result
import code.name.monkey.retromusic.Result.Error import code.name.monkey.retromusic.Result.Error
import code.name.monkey.retromusic.Result.Success import code.name.monkey.retromusic.Result.Success
import code.name.monkey.retromusic.adapter.HomeAdapter import code.name.monkey.retromusic.adapter.HomeAdapter
import code.name.monkey.retromusic.data.RetroDataService
import code.name.monkey.retromusic.loaders.* import code.name.monkey.retromusic.loaders.*
import code.name.monkey.retromusic.model.* import code.name.monkey.retromusic.model.*
import code.name.monkey.retromusic.providers.interfaces.Repository import code.name.monkey.retromusic.providers.interfaces.Repository
@ -283,6 +284,22 @@ class RepositoryImpl @Inject constructor(private val context: Context) : Reposit
Error(Throwable("Error loading artist")) Error(Throwable("Error loading artist"))
} }
} }
override suspend fun contributors(): Result<List<Contributor>> {
return try {
Success(RetroDataService.retoService.getContributors())
} catch (e: Exception) {
Error(Throwable(e))
}
}
override suspend fun translators(): Result<List<Contributor>> {
return try {
Success(RetroDataService.retoService.getTranslators())
} catch (e: Exception) {
Error(Throwable(e))
}
}
} }
suspend fun <T : Any> safeApiCall(call: suspend () -> Result<T>, errorMessage: String): Result<T> = suspend fun <T : Any> safeApiCall(call: suspend () -> Result<T>, errorMessage: String): Result<T> =

View file

@ -58,4 +58,8 @@ interface Repository {
suspend fun albumInfo(artist: String, album: String): Result<LastFmAlbum> suspend fun albumInfo(artist: String, album: String): Result<LastFmAlbum>
suspend fun artistById(artistId: Int): Result<Artist> suspend fun artistById(artistId: Int): Result<Artist>
suspend fun contributors(): Result<List<Contributor>>
suspend fun translators(): Result<List<Contributor>>
} }

View file

@ -24,13 +24,12 @@ object LastFmClient {
} }
init { init {
val retrofit = Retrofit.Builder() lastFMService = Retrofit.Builder()
.baseUrl(baseUrl) .baseUrl(baseUrl)
.callFactory(createDefaultOkHttpClientBuilder().build()) .callFactory(createDefaultOkHttpClientBuilder().build())
.addConverterFactory(GsonConverterFactory.create(Gson())) .addConverterFactory(GsonConverterFactory.create(Gson()))
.build() .build()
.create(LastFMService::class.java)
lastFMService = retrofit.create(LastFMService::class.java)
} }
private fun createDefaultOkHttpClientBuilder(): OkHttpClient.Builder { private fun createDefaultOkHttpClientBuilder(): OkHttpClient.Builder {