From 83913cb8e960452000f71b34218aa7819c5a2771 Mon Sep 17 00:00:00 2001 From: gouri-panda Date: Fri, 26 Mar 2021 23:42:28 +0530 Subject: [PATCH 1/3] #2608_zim_manage_view_model_leak_fixed --- .../ConnectivityBroadcastReceiver.kt | 4 ++++ .../zim_manager/ZimManageViewModel.kt | 18 ++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ConnectivityBroadcastReceiver.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ConnectivityBroadcastReceiver.kt index 43f8f0b8a..adde7f166 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ConnectivityBroadcastReceiver.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ConnectivityBroadcastReceiver.kt @@ -43,4 +43,8 @@ class ConnectivityBroadcastReceiver @Inject constructor( ) { _networkStates.onNext(connectivityManager.networkState) } + + fun stopNetworkState() { + _networkStates.onComplete() + } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt index 89a157fee..ae8fa0913 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt @@ -20,9 +20,10 @@ package org.kiwix.kiwixmobile.zim_manager import android.app.Application import android.net.ConnectivityManager +import android.net.wifi.p2p.WifiP2pDevice.CONNECTED import androidx.annotation.VisibleForTesting +import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel import io.reactivex.Flowable import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.Disposable @@ -52,7 +53,6 @@ import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.NORM import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem.BookOnDisk import org.kiwix.kiwixmobile.zim_manager.Fat32Checker.FileSystemState -import org.kiwix.kiwixmobile.zim_manager.NetworkState.CONNECTED import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.MultiModeFinished import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestDeleteMultiSelection import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestMultiSelection @@ -91,7 +91,7 @@ class ZimManageViewModel @Inject constructor( private val dataSource: DataSource, private val connectivityManager: ConnectivityManager, private val sharedPreferenceUtil: SharedPreferenceUtil -) : ViewModel() { +) : AndroidViewModel(context) { sealed class FileSelectActions { data class RequestNavigateTo(val bookOnDisk: BookOnDisk) : FileSelectActions() data class RequestSelect(val bookOnDisk: BookOnDisk) : FileSelectActions() @@ -116,10 +116,10 @@ class ZimManageViewModel @Inject constructor( val requestDownloadLibrary = BehaviorProcessor.createDefault(Unit) val requestFiltering = BehaviorProcessor.createDefault("") - private val compositeDisposable = CompositeDisposable() + private var compositeDisposable: CompositeDisposable? = CompositeDisposable() init { - compositeDisposable.addAll(*disposables()) + compositeDisposable?.addAll(*disposables()) context.registerReceiver(connectivityBroadcastReceiver) } @@ -129,8 +129,13 @@ class ZimManageViewModel @Inject constructor( } override fun onCleared() { - compositeDisposable.clear() + compositeDisposable?.clear() context.unregisterReceiver(connectivityBroadcastReceiver) + connectivityBroadcastReceiver.stopNetworkState() + requestFileSystemCheck.onComplete() + fileSelectActions.onComplete() + requestDownloadLibrary.onComplete() + compositeDisposable = null super.onCleared() } @@ -222,6 +227,7 @@ class ZimManageViewModel @Inject constructor( connectivityBroadcastReceiver.networkStates.distinctUntilChanged().filter( CONNECTED::equals ), + // PublishProcessor.create(), BiFunction { _, _ -> } ) .switchMap { From 8d4ed333b787da6dc8f0f2871153c654a30348d9 Mon Sep 17 00:00:00 2001 From: gouri-panda Date: Sat, 27 Mar 2021 13:15:48 +0530 Subject: [PATCH 2/3] #2608 Requested fixes --- .../org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt index ae8fa0913..dddd7b51f 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt @@ -22,8 +22,8 @@ import android.app.Application import android.net.ConnectivityManager import android.net.wifi.p2p.WifiP2pDevice.CONNECTED import androidx.annotation.VisibleForTesting -import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel import io.reactivex.Flowable import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.Disposable @@ -91,7 +91,7 @@ class ZimManageViewModel @Inject constructor( private val dataSource: DataSource, private val connectivityManager: ConnectivityManager, private val sharedPreferenceUtil: SharedPreferenceUtil -) : AndroidViewModel(context) { +) : ViewModel() { sealed class FileSelectActions { data class RequestNavigateTo(val bookOnDisk: BookOnDisk) : FileSelectActions() data class RequestSelect(val bookOnDisk: BookOnDisk) : FileSelectActions() @@ -227,7 +227,6 @@ class ZimManageViewModel @Inject constructor( connectivityBroadcastReceiver.networkStates.distinctUntilChanged().filter( CONNECTED::equals ), - // PublishProcessor.create(), BiFunction { _, _ -> } ) .switchMap { From 386c38741f3ad986b9caaf83aa17bf89538fee12 Mon Sep 17 00:00:00 2001 From: gouri-panda Date: Sat, 27 Mar 2021 13:17:06 +0530 Subject: [PATCH 3/3] #2608 Fixed test --- .../org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt index dddd7b51f..fb4fefc82 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zim_manager/ZimManageViewModel.kt @@ -20,7 +20,6 @@ package org.kiwix.kiwixmobile.zim_manager import android.app.Application import android.net.ConnectivityManager -import android.net.wifi.p2p.WifiP2pDevice.CONNECTED import androidx.annotation.VisibleForTesting import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -53,6 +52,7 @@ import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.NORM import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem.BookOnDisk import org.kiwix.kiwixmobile.zim_manager.Fat32Checker.FileSystemState +import org.kiwix.kiwixmobile.zim_manager.NetworkState.CONNECTED import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.MultiModeFinished import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestDeleteMultiSelection import org.kiwix.kiwixmobile.zim_manager.ZimManageViewModel.FileSelectActions.RequestMultiSelection