Skip to content

Commit 9dcf5e6

Browse files
author
arun.sharma
committed
fixed bug with force refresh
1 parent eb7a666 commit 9dcf5e6

18 files changed

Lines changed: 118 additions & 70 deletions

File tree

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ dependencies {
7878
implementation(project(":source-androidweekly"))
7979
implementation(project(":source-rss"))
8080
implementation(project(":services"))
81-
debugImplementation(project(":devik"))
82-
releaseImplementation(project(":devik-noop"))
81+
// debugImplementation(project(":devik"))
82+
// releaseImplementation(project(":devik-noop"))
8383
implementation(Dependencies.AndroidX.Material)
8484
implementation(Dependencies.Di.Hilt)
8585
implementation(Dependencies.AndroidX.AppCompat)

app/src/main/java/me/arunsharma/devupdates/app/DevUpdatesApp.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import android.app.Application
44
import android.os.StrictMode
55
import androidx.work.Configuration
66
import com.dev.core.extensions.d
7-
import com.dev.devik.DevikContext
7+
//import com.dev.devik.DevikContext
88
import dagger.hilt.android.HiltAndroidApp
99
import timber.log.Timber
1010
import javax.inject.Inject
@@ -23,7 +23,7 @@ class DevUpdatesApp : Application(), Configuration.Provider {
2323
override fun onCreate() {
2424
super.onCreate()
2525
enableStrictMode()
26-
DevikContext(this)
26+
// DevikContext(this)
2727
}
2828

2929
private fun enableStrictMode() {

app/src/main/java/me/arunsharma/devupdates/data/SourceConfigStore.kt

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ import me.arunsharma.devupdates.utils.cache.CachingProvider
1515
import javax.inject.Inject
1616

1717
interface SourceConfigStore {
18-
suspend fun getData(): List<ServiceRequest>
18+
suspend fun fetchFromRemote(): List<ServiceRequest>
1919
suspend fun save(data: List<ServiceRequest>)
20+
suspend fun get(): MutableList<ServiceRequest>
2021
suspend fun addSource(serviceRequest: ServiceRequest)
2122
}
2223

@@ -29,25 +30,29 @@ class SourceConfigStoreImpl @Inject constructor(
2930

3031
val appCache = AppCache(CacheConstants.CACHE_DATASOURCES)
3132

32-
override suspend fun getData(): List<ServiceRequest> {
33-
val config = cachingProvider.cacheData<List<ServiceRequest>>(appCache) {
34-
return try {
33+
override suspend fun fetchFromRemote(): List<ServiceRequest> {
34+
val config = cachingProvider.cacheData(appCache) {
35+
try {
3536
val result = serviceConfig.getConfig(AppConstants.CONFIG_URL)
36-
result.data
37+
result
3738
} catch (exception: Exception){
3839
val result = StorageUtils.getRawData(context, R.raw.sources)
3940
val jsonAdapter = moshi.adapter(SourceConfig::class.java)
40-
jsonAdapter.fromJson(result)?.data!!
41+
jsonAdapter.fromJson(result)
4142
}
4243
}
4344

44-
return config
45+
return config?.data ?: mutableListOf()
4546
}
4647

4748
override suspend fun save(data: List<ServiceRequest>) {
4849
cachingProvider.writeCacheData(appCache, SourceConfig(data = data))
4950
}
5051

52+
override suspend fun get(): MutableList<ServiceRequest> {
53+
return cachingProvider.readCacheData<SourceConfig>(appCache)?.data?.toMutableList() ?: mutableListOf()
54+
}
55+
5156
override suspend fun addSource(serviceRequest: ServiceRequest) {
5257

5358
}

app/src/main/java/me/arunsharma/devupdates/data/repo/RepoFeed.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class RepoFeed @Inject constructor(
3535
request.getGroupId(),
3636
request.next?.toLong() ?: System.currentTimeMillis()
3737
)
38-
if (forceUpdate || cacheData.isNullOrEmpty()) {
38+
if (forceUpdate || cacheData.isEmpty()) {
3939
val result =
4040
serviceIntegration[request.type.toString()]?.getData(request)
4141
if (result is ResponseStatus.Success) {

app/src/main/java/me/arunsharma/devupdates/ui/fragments/addsource/DataSourceAdapter.kt

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package me.arunsharma.devupdates.ui.fragments.addsource
22

3-
import android.graphics.Color
43
import android.view.LayoutInflater
54
import android.view.ViewGroup
65
import androidx.core.content.ContextCompat
76
import androidx.recyclerview.widget.RecyclerView
87
import com.dev.core.recyclerview.BaseRecyclerViewAdapter
98
import com.dev.core.recyclerview.BaseViewHolder
10-
import com.dev.services.models.DataSource
119
import com.dev.services.models.ServiceRequest
1210
import me.arunsharma.devupdates.R
1311
import me.arunsharma.devupdates.databinding.ItemDataSourceBinding
@@ -26,6 +24,7 @@ class DataSourceAdapter(items: List<ServiceRequest>, val mListener: DataSourceAd
2624
override fun convert(helper: VHDataSourceItem, item: ServiceRequest) {
2725
helper.binding.ivServiceLogo.setImageResource(FeedUtils.getDrawable(item.type))
2826
helper.binding.tvTitle.text = item.name
27+
helper.addOnClickListener(R.id.btnDelete)
2928
}
3029

3130
override fun createHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
@@ -45,12 +44,27 @@ class DataSourceAdapter(items: List<ServiceRequest>, val mListener: DataSourceAd
4544
}
4645

4746
override fun onRowSelected(viewHolder: RecyclerView.ViewHolder) {
48-
viewHolder.itemView.setBackgroundColor(ContextCompat.getColor(viewHolder.itemView.context, R.color.colorOnPrimary_80))
47+
viewHolder.itemView.setBackgroundColor(
48+
ContextCompat.getColor(
49+
viewHolder.itemView.context,
50+
R.color.colorOnPrimary_80
51+
)
52+
)
4953
}
5054

5155
override fun onRowClear(viewHolder: RecyclerView.ViewHolder) {
52-
viewHolder.itemView.setBackgroundColor(ContextCompat.getColor(viewHolder.itemView.context, R.color.colorOnPrimary))
56+
viewHolder.itemView.setBackgroundColor(
57+
ContextCompat.getColor(
58+
viewHolder.itemView.context,
59+
R.color.colorOnPrimary
60+
)
61+
)
5362
mListener.onDragComplete()
5463
}
5564

65+
fun removeItem(position: Int) {
66+
mData.removeAt(position)
67+
notifyItemRemoved(position)
68+
}
69+
5670
}

app/src/main/java/me/arunsharma/devupdates/ui/fragments/addsource/AddDataSourceFragment.kt renamed to app/src/main/java/me/arunsharma/devupdates/ui/fragments/addsource/DataSourceListFragment.kt

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
package me.arunsharma.devupdates.ui.fragments.addsource
22

3+
import android.view.View
34
import androidx.fragment.app.viewModels
45
import androidx.recyclerview.widget.DividerItemDecoration
56
import androidx.recyclerview.widget.LinearLayoutManager
67
import com.dev.core.base.BaseFragment
8+
import com.dev.core.recyclerview.BaseRecyclerViewAdapter
79
import com.dev.core.utils.viewBinding
810
import dagger.hilt.android.AndroidEntryPoint
911
import me.arunsharma.devupdates.R
1012
import me.arunsharma.devupdates.databinding.FragmentAddDataSourceBinding
1113
import me.arunsharma.devupdates.utils.SnackbarUtil
1214

1315
@AndroidEntryPoint
14-
class AddDataSourceFragment : BaseFragment(R.layout.fragment_add_data_source) {
16+
class DataSourceListFragment : BaseFragment(R.layout.fragment_add_data_source) {
1517

1618
private val binding by viewBinding(FragmentAddDataSourceBinding::bind)
1719

@@ -32,7 +34,7 @@ class AddDataSourceFragment : BaseFragment(R.layout.fragment_add_data_source) {
3234
setHasFixedSize(true)
3335
}
3436

35-
viewModel.lvFetchConfig.observe(viewLifecycleOwner, { listItems ->
37+
viewModel.lvFetchConfig.observe(viewLifecycleOwner) { listItems ->
3638
binding.recyclerView.adapter =
3739
DataSourceAdapter(listItems, object : DataSourceAdapter.DataSourceAdapterListener {
3840
override fun onDragComplete() {
@@ -48,15 +50,32 @@ class AddDataSourceFragment : BaseFragment(R.layout.fragment_add_data_source) {
4850
}).apply {
4951
val itemTouchHelper = RecyclerViewMoveHelper.create(this)
5052
itemTouchHelper.attachToRecyclerView(binding.recyclerView)
53+
54+
setOnItemChildClickListener(object :
55+
BaseRecyclerViewAdapter.OnItemChildClickListener {
56+
override fun onItemChildClick(view: View, position: Int) {
57+
when (view.id) {
58+
R.id.btnDelete -> onDeleteItem(this@apply, position)
59+
}
60+
}
61+
})
5162
}
5263

53-
})
64+
}
5465

5566
viewModel.getServices()
5667
}
5768

69+
private fun onDeleteItem(
70+
adapter: DataSourceAdapter,
71+
position: Int
72+
) {
73+
viewModel.deleteSource(adapter.mData[position])
74+
adapter.removeItem(position)
75+
}
76+
5877
companion object {
5978
const val TAG = "AddDataSourceFragment"
60-
fun newInstance(): AddDataSourceFragment = AddDataSourceFragment()
79+
fun newInstance(): DataSourceListFragment = DataSourceListFragment()
6180
}
6281
}

app/src/main/java/me/arunsharma/devupdates/ui/fragments/addsource/VMDataSource.kt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package me.arunsharma.devupdates.ui.fragments.addsource
33
import androidx.lifecycle.LiveData
44
import androidx.lifecycle.MutableLiveData
55
import com.dev.core.base.BaseViewModel
6-
import com.dev.services.models.ServiceItem
76
import com.dev.services.models.ServiceRequest
87
import dagger.hilt.android.lifecycle.HiltViewModel
98
import kotlinx.coroutines.Dispatchers
@@ -24,17 +23,31 @@ class VMDataSource @Inject constructor(
2423
fun getServices() {
2524
launchDataLoad {
2625
withContext(Dispatchers.IO) {
27-
val configList = sourceConfigStore.getData()
26+
val configList = sourceConfigStore.fetchFromRemote()
2827
_lvFetchConfig.postValue(configList)
2928
}
3029
}
3130
}
3231

33-
fun saveConfig(data: List<ServiceRequest>){
32+
fun saveConfig(data: List<ServiceRequest>) {
3433
launchDataLoad {
3534
withContext(Dispatchers.IO) {
3635
sourceConfigStore.save(data = data)
3736
}
3837
}
3938
}
39+
40+
fun deleteSource(item: ServiceRequest) {
41+
launchDataLoad {
42+
withContext(Dispatchers.IO) {
43+
val data = sourceConfigStore.get()
44+
data.removeAll { req ->
45+
req.type == item.type && req.name == item.name
46+
}
47+
if(data.isNotEmpty()) {
48+
sourceConfigStore.save(data = data)
49+
}
50+
}
51+
}
52+
}
4053
}

app/src/main/java/me/arunsharma/devupdates/ui/fragments/feed/FeedFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ class FeedFragment : BaseFragment(R.layout.fragment_feed) {
2525

2626
override fun initView() {
2727
binding.viewPager.offscreenPageLimit = 5
28-
viewModel.lvFetchConfig.observe(viewLifecycleOwner, {
28+
viewModel.lvFetchConfig.observe(viewLifecycleOwner) {
2929
setUpViewPager(it)
30-
})
30+
}
3131

3232
if(viewModel.lvFetchConfig.value == null) {
3333
viewModel.getConfig()

app/src/main/java/me/arunsharma/devupdates/ui/fragments/feed/viewmodel/VMFeed.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class VMFeed @Inject constructor(
2525
fun getConfig() {
2626
launchDataLoad {
2727
withContext(Dispatchers.IO) {
28-
val configList = sourceConfigStore.getData()
28+
val configList = sourceConfigStore.fetchFromRemote()
2929
_lvFetchConfig.postValue(configList.map { item ->
3030
if (item.type == DataSource.MEDIUM) {
3131
item.next = System.currentTimeMillis().toString()

app/src/main/java/me/arunsharma/devupdates/ui/fragments/feed/viewmodel/VMFeedList.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ open class VMFeedList @Inject constructor(
3737
showLoading: Boolean = true
3838
) {
3939
launchDataLoad {
40+
if (forceUpdate) {
41+
request.next = null
42+
}
4043
if (showLoading) {
4144
_lvUIState.value = FeedUIState.Loading
4245
}

0 commit comments

Comments
 (0)