Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 6 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,18 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".views.mainactivity.MainActivity">
<activity android:name=".views.activities.mainactivity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".views.activities.itemdetailactivity.ItemDetailsActivity"
android:label=""
android:theme="@style/AppTheme">
</activity>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.adamg.hnreader.dagger.component

import com.adamg.hnreader.api.HackerNewsApi
import com.adamg.hnreader.networking.HackerNewsApi
import com.adamg.hnreader.dagger.module.ApplicationModule
import com.adamg.hnreader.dagger.scope.PerApplication
import dagger.Component
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.adamg.hnreader.dagger.component

import com.adamg.hnreader.dagger.module.AsksModule
import com.adamg.hnreader.dagger.scope.PerActivity
import com.adamg.hnreader.views.listfragments.newstories.AsksPresenter
import com.adamg.hnreader.views.fragments.listfragments.newstories.AsksPresenter
import dagger.Component

@PerActivity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.adamg.hnreader.dagger.component

import com.adamg.hnreader.dagger.module.CommentsModule
import com.adamg.hnreader.dagger.scope.PerActivity
import com.adamg.hnreader.views.comments.CommentsPresenter
import com.adamg.hnreader.views.fragments.comments.CommentsPresenter
import dagger.Component

@PerActivity
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.adamg.hnreader.dagger.component

import com.adamg.hnreader.dagger.module.ItemDetailsModule
import com.adamg.hnreader.dagger.scope.PerActivity
import com.adamg.hnreader.views.activities.itemdetailactivity.ItemDetailsPresenter
import dagger.Component

@PerActivity
@Component(modules = arrayOf(ItemDetailsModule::class), dependencies = arrayOf(ApplicationComponent::class))
interface ItemDetailsComponent {
fun presenter(): ItemDetailsPresenter
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.adamg.hnreader.dagger.component

import com.adamg.hnreader.dagger.module.JobsModule
import com.adamg.hnreader.dagger.scope.PerActivity
import com.adamg.hnreader.views.listfragments.newstories.JobsPresenter
import com.adamg.hnreader.views.fragments.listfragments.newstories.JobsPresenter
import dagger.Component

@PerActivity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.adamg.hnreader.dagger.component

import com.adamg.hnreader.dagger.module.NewStoriesModule
import com.adamg.hnreader.dagger.scope.PerActivity
import com.adamg.hnreader.views.listfragments.newstories.NewStoriesPresenter
import com.adamg.hnreader.views.fragments.listfragments.newstories.NewStoriesPresenter
import dagger.Component

@PerActivity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.adamg.hnreader.dagger.component

import com.adamg.hnreader.dagger.module.ShowsModule
import com.adamg.hnreader.dagger.scope.PerActivity
import com.adamg.hnreader.views.listfragments.newstories.ShowsPresenter
import com.adamg.hnreader.views.fragments.listfragments.newstories.ShowsPresenter
import dagger.Component

@PerActivity
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.adamg.hnreader.dagger.module

import com.adamg.hnreader.api.HackerNewsApi
import com.adamg.hnreader.networking.HackerNewsApi
import com.adamg.hnreader.dagger.scope.PerApplication
import com.commit451.regalia.moshi.RealmListJsonAdapterFactory
import com.facebook.stetho.okhttp3.StethoInterceptor
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.adamg.hnreader.dagger.module

import dagger.Module

@Module
class ItemDetailsModule {
}
17 changes: 14 additions & 3 deletions app/src/main/java/com/adamg/hnreader/data/dao/ItemDao.kt
Original file line number Diff line number Diff line change
@@ -1,17 +1,28 @@
package com.adamg.hnreader.data.dao

import com.adamg.hnreader.models.Item
import com.vicpin.krealmextensions.queryAllAsObservable
import com.vicpin.krealmextensions.queryAsObservable
import com.vicpin.krealmextensions.*
import rx.Observable
import javax.inject.Inject

class ItemDao @Inject constructor() {

fun getAllItems() = Item().queryAllAsObservable()

fun getItem(itemId: Long): Observable<Item> {
fun getItem(itemId: Long) = Item().queryFirst { query -> query.equalTo("id", itemId) }

fun getItemAsObservable(itemId: Long): Observable<Item> {
return Item().queryAsObservable { query -> query.equalTo("id", itemId) }
.map { it.first() }
}

fun saveItems(items: List<Item>) {
items.saveAll()
}

fun saveItem(item: Item) {
item.save()
}


}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.adamg.hnreader.data.repository

import com.adamg.hnreader.api.HackerNewsApi
import com.adamg.hnreader.networking.HackerNewsApi
import com.adamg.hnreader.data.dao.ItemDao
import com.adamg.hnreader.models.Item
import rx.Observable
Expand All @@ -11,12 +11,30 @@ import javax.inject.Inject
class ItemRepository @Inject constructor(private val itemDao: ItemDao,
private val hackerNewsApi: HackerNewsApi) {
fun getItem(itemId: Long): Observable<Item> {
return itemDao.getItem(itemId)
val cachedItem = itemDao.getItem(itemId)

val item = hackerNewsApi.getItem(itemId)
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.io())
.doOnNext { itemDao.saveItem(it!!) }
.flatMap { itemDao.getItemAsObservable(it.id) }

return item.mergeWith(Observable.just(cachedItem))
}

fun getNewStories(page: Int = 0): Observable<List<Item>> {
return hackerNewsApi.getNewStories(page)
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.io())
.doOnNext { itemDao.saveItems(it!!) }
.observeOn(AndroidSchedulers.mainThread())
}

fun getAsks(page: Int = 0): Observable<List<Item>> {
return hackerNewsApi.getAsks(page)
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.io())
.doOnNext { itemDao.saveItems(it!!) }
.observeOn(AndroidSchedulers.mainThread())
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.adamg.hnreader.api
package com.adamg.hnreader.networking

import com.adamg.hnreader.models.Item
import retrofit2.http.GET
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/adamg/hnreader/utils/ViewExtenstions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,8 @@ fun View.show() {

fun View.hide() {
this.visibility = View.GONE
}

fun View.fade() {
this.visibility = View.INVISIBLE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.adamg.hnreader.views.activities.itemdetailactivity

import android.content.Context
import android.os.Bundle
import com.adamg.hnreader.HNApp
import com.adamg.hnreader.R
import com.adamg.hnreader.dagger.component.DaggerItemDetailsComponent
import com.adamg.hnreader.dagger.component.ItemDetailsComponent
import com.adamg.hnreader.models.Item
import com.adamg.hnreader.utils.fade
import com.adamg.hnreader.utils.show
import com.adamg.hnreader.views.base.BaseActivityMvp
import kotlinx.android.synthetic.main.activity_item_details.*
import kotlinx.android.synthetic.main.item_details.*
import org.jetbrains.anko.intentFor

class ItemDetailsActivity : BaseActivityMvp<ItemDetailsView, ItemDetailsPresenter>(), ItemDetailsView {

lateinit var itemDetailsComponent: ItemDetailsComponent

companion object {
val ITEM_ID_KEY = "item_id_key"
fun start(context: Context, itemId: Long) {
context.startActivity(context.intentFor<ItemDetailsActivity>(ITEM_ID_KEY to itemId))
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_item_details)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
presenter.loadItem(intent?.extras?.getLong(ITEM_ID_KEY)!!)
}

override fun showItemDetails(item: Item) {
itemPointsCount.text = item.points?.let { resources.getQuantityString(R.plurals.points, it, it) }
itemTitle.text = item.title
if (item.content != null) {
itemContent.show()
itemContent.text = item.content
} else {
itemContent.fade()
itemContent.text = ""
}
itemDomain.text = item.domain
itemTimeAgo.text = item.time_ago
item.user?.let { itemUser.text = getString(R.string.value_dot_separator, it) }
}

override fun createPresenter() = itemDetailsComponent.presenter()

override fun injectDependencies() {
itemDetailsComponent = DaggerItemDetailsComponent.builder()
.applicationComponent(HNApp.applicationComponent)
.build()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.adamg.hnreader.views.activities.itemdetailactivity

import android.util.Log
import com.adamg.hnreader.data.repository.ItemRepository
import com.adamg.hnreader.views.base.BasePresenter
import rx.android.schedulers.AndroidSchedulers
import rx.lang.kotlin.subscribeBy
import javax.inject.Inject

class ItemDetailsPresenter @Inject constructor(private val itemRepository: ItemRepository): BasePresenter<ItemDetailsView>() {

fun loadItem(itemId: Long) {
itemRepository.getItem(itemId)
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onNext = { view?.showItemDetails(it!!)},
onError = { Log.e(ItemDetailsPresenter::class.java.simpleName, "LOL WTF", it)}
)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.adamg.hnreader.views.activities.itemdetailactivity

import com.adamg.hnreader.models.Item
import com.hannesdorfmann.mosby3.mvp.MvpView

interface ItemDetailsView: MvpView {
fun showItemDetails(item: Item)

}
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.adamg.hnreader.views.mainactivity
package com.adamg.hnreader.views.activities.mainactivity

import android.os.Bundle
import android.support.v4.view.ViewPager
import android.support.v7.app.AppCompatActivity
import com.adamg.hnreader.R
import com.adamg.hnreader.adapter.ViewPagerAdapter
import com.adamg.hnreader.views.listfragments.newstories.AsksFragment
import com.adamg.hnreader.views.listfragments.newstories.NewStoriesFragment
import com.adamg.hnreader.views.listfragments.shows.JobsFragment
import com.adamg.hnreader.views.listfragments.shows.ShowsFragment
import com.adamg.hnreader.views.fragments.listfragments.newstories.AsksFragment
import com.adamg.hnreader.views.fragments.listfragments.newstories.NewStoriesFragment
import com.adamg.hnreader.views.fragments.listfragments.shows.JobsFragment
import com.adamg.hnreader.views.fragments.listfragments.shows.ShowsFragment
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.adamg.hnreader.adapter
package com.adamg.hnreader.views.activities.mainactivity

import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@ import com.hannesdorfmann.mosby3.mvp.MvpView

abstract class BaseActivityMvp<V: MvpView, P: MvpPresenter<V>>: MvpActivity<V, P>() {

override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)

override fun onCreate(savedInstanceState: Bundle?) {
injectDependencies()
super.onCreate(savedInstanceState)
}

abstract fun injectDependencies()

override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.getItemId()) {
when (item.itemId) {
android.R.id.home -> {
super.onBackPressed()
return true
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.adamg.hnreader.customviews
package com.adamg.hnreader.views.customviews

import android.content.Context
import android.os.Build
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.adamg.hnreader.views.comments
package com.adamg.hnreader.views.fragments.comments

import com.adamg.hnreader.models.Comment

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.adamg.hnreader.adapter
package com.adamg.hnreader.views.fragments.comments

import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
Expand All @@ -9,7 +9,6 @@ import android.view.ViewGroup
import android.widget.LinearLayout
import com.adamg.hnreader.R
import com.adamg.hnreader.models.Comment
import com.adamg.hnreader.views.comments.CommentCardModel
import kotlinx.android.synthetic.main.comment_card.view.*


Expand All @@ -18,7 +17,7 @@ class CommentsAdapter(var commentCardModels: MutableList<CommentCardModel>,

private val cardViewMaxWeight = 20

override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): CommentViewHolder{
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): CommentViewHolder {
val view = LayoutInflater.from(parent?.context).inflate(R.layout.comment_card, parent, false)
return CommentViewHolder(view)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.adamg.hnreader.views.comments
package com.adamg.hnreader.views.fragments.comments


import android.os.Bundle
Expand All @@ -10,7 +10,6 @@ import android.view.ViewGroup
import com.adamg.hnreader.AppConstants
import com.adamg.hnreader.HNApp
import com.adamg.hnreader.R
import com.adamg.hnreader.adapter.CommentsAdapter
import com.adamg.hnreader.dagger.component.CommentsComponent
import com.adamg.hnreader.dagger.component.DaggerCommentsComponent
import com.adamg.hnreader.views.base.BaseFragmentMvp
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.adamg.hnreader.views.comments
package com.adamg.hnreader.views.fragments.comments

import android.os.Parcel
import android.os.Parcelable
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.adamg.hnreader.views.comments
package com.adamg.hnreader.views.fragments.comments

import com.adamg.hnreader.api.HackerNewsApi
import com.adamg.hnreader.networking.HackerNewsApi
import com.adamg.hnreader.views.base.BasePresenter
import com.adamg.hnreader.models.Item
import rx.android.schedulers.AndroidSchedulers
Expand Down
Loading