Modified SettingsFragment to extend from ConnectedFragment, which in turns handles all the communication with the Node trough graphenej's NetworkService.

This commit is contained in:
Severiano Jaramillo 2019-02-21 12:25:56 -06:00
parent 3c0c3a5114
commit eb0ae56a26

View file

@ -9,7 +9,6 @@ import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.callbacks.onDismiss import com.afollestad.materialdialogs.callbacks.onDismiss
import com.afollestad.materialdialogs.customview.customView import com.afollestad.materialdialogs.customview.customView
@ -23,21 +22,19 @@ import cy.agorise.bitsybitshareswallet.repositories.AuthorityRepository
import cy.agorise.bitsybitshareswallet.utils.Constants import cy.agorise.bitsybitshareswallet.utils.Constants
import cy.agorise.bitsybitshareswallet.utils.CryptoUtils import cy.agorise.bitsybitshareswallet.utils.CryptoUtils
import cy.agorise.graphenej.BrainKey import cy.agorise.graphenej.BrainKey
import cy.agorise.graphenej.api.android.NetworkService import cy.agorise.graphenej.api.ConnectionStatusUpdate
import cy.agorise.graphenej.api.android.RxBus
import cy.agorise.graphenej.api.calls.GetDynamicGlobalProperties import cy.agorise.graphenej.api.calls.GetDynamicGlobalProperties
import cy.agorise.graphenej.models.DynamicGlobalProperties import cy.agorise.graphenej.models.DynamicGlobalProperties
import cy.agorise.graphenej.models.JsonRpcResponse import cy.agorise.graphenej.models.JsonRpcResponse
import cy.agorise.graphenej.network.FullNode import cy.agorise.graphenej.network.FullNode
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.fragment_settings.* import kotlinx.android.synthetic.main.fragment_settings.*
import java.text.NumberFormat import java.text.NumberFormat
class SettingsFragment : Fragment(), ServiceConnection, BaseSecurityLockDialog.OnPINPatternEnteredListener { class SettingsFragment : ConnectedFragment(), BaseSecurityLockDialog.OnPINPatternEnteredListener {
companion object { companion object {
private const val TAG = "SettingsFragment" private const val TAG = "SettingsFragment"
@ -47,14 +44,6 @@ class SettingsFragment : Fragment(), ServiceConnection, BaseSecurityLockDialog.O
private const val ACTION_SHOW_BRAINKEY = 2 private const val ACTION_SHOW_BRAINKEY = 2
} }
private var mDisposables = CompositeDisposable()
/* Network service connection */
private var mNetworkService: NetworkService? = null
/** Flag used to keep track of the NetworkService binding state */
private var mShouldUnbindNetwork: Boolean = false
// Dialog displaying the list of nodes and their latencies // Dialog displaying the list of nodes and their latencies
private var mNodesDialog: MaterialDialog? = null private var mNodesDialog: MaterialDialog? = null
@ -117,14 +106,6 @@ class SettingsFragment : Fragment(), ServiceConnection, BaseSecurityLockDialog.O
tvSecurityLockSelected.setOnClickListener { onSecurityLockTextSelected() } tvSecurityLockSelected.setOnClickListener { onSecurityLockTextSelected() }
btnViewBrainKey.setOnClickListener { onShowBrainKeyButtonSelected() } btnViewBrainKey.setOnClickListener { onShowBrainKeyButtonSelected() }
// Connect to the RxBus, which receives events from the NetworkService
mDisposables.add(
RxBus.getBusInstance()
.asFlowable()
.observeOn(AndroidSchedulers.mainThread())
.subscribe { handleIncomingMessage(it) }
)
} }
/** /**
@ -149,18 +130,18 @@ class SettingsFragment : Fragment(), ServiceConnection, BaseSecurityLockDialog.O
override fun onComplete() {} override fun onComplete() {}
} }
private fun handleIncomingMessage(message: Any?) { override fun handleJsonRpcResponse(response: JsonRpcResponse<*>) {
if (message is JsonRpcResponse<*>) { if (response.result is DynamicGlobalProperties) {
if (message.result is DynamicGlobalProperties) { val dynamicGlobalProperties = response.result as DynamicGlobalProperties
val dynamicGlobalProperties = message.result as DynamicGlobalProperties if (mNodesDialog != null && mNodesDialog?.isShowing == true) {
if (mNodesDialog != null && mNodesDialog?.isShowing == true) { val blockNumber = NumberFormat.getInstance().format(dynamicGlobalProperties.head_block_number)
val blockNumber = NumberFormat.getInstance().format(dynamicGlobalProperties.head_block_number) mNodesDialog?.message(text = getString(R.string.title__bitshares_nodes_dialog, blockNumber))
mNodesDialog?.message(text = getString(R.string.title__bitshares_nodes_dialog, blockNumber))
}
} }
} }
} }
override fun handleConnectionStatusUpdate(connectionStatusUpdate: ConnectionStatusUpdate) { }
/** /**
* Task used to obtain frequent updates on the global dynamic properties object * Task used to obtain frequent updates on the global dynamic properties object
*/ */
@ -374,42 +355,15 @@ class SettingsFragment : Fragment(), ServiceConnection, BaseSecurityLockDialog.O
} }
} }
override fun onResume() {
super.onResume()
val intent = Intent(context, NetworkService::class.java)
if (context?.bindService(intent, this, Context.BIND_AUTO_CREATE) == true) {
mShouldUnbindNetwork = true
} else {
Log.e(TAG, "Binding to the network service failed.")
}
}
override fun onPause() {
super.onPause()
// Unbinding from network service
if (mShouldUnbindNetwork) {
context?.unbindService(this)
mShouldUnbindNetwork = false
}
}
override fun onDestroy() {
super.onDestroy()
if (!mDisposables.isDisposed) mDisposables.dispose()
}
override fun onServiceDisconnected(name: ComponentName?) { override fun onServiceDisconnected(name: ComponentName?) {
super.onServiceDisconnected(name)
tvNetworkStatus.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, tvNetworkStatus.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null,
resources.getDrawable(R.drawable.ic_disconnected, null), null) resources.getDrawable(R.drawable.ic_disconnected, null), null)
} }
override fun onServiceConnected(name: ComponentName?, service: IBinder?) { override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
// We've bound to LocalService, cast the IBinder and get LocalService instance super.onServiceConnected(name, service)
val binder = service as NetworkService.LocalBinder
mNetworkService = binder.service
tvNetworkStatus.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, tvNetworkStatus.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null,
resources.getDrawable(R.drawable.ic_connected, null), null) resources.getDrawable(R.drawable.ic_connected, null), null)