Skip to content

Commit

Permalink
add process when disconnected on communication view
Browse files Browse the repository at this point in the history
  • Loading branch information
Komeyama committed Jan 26, 2020
1 parent 2828333 commit a4027e3
Show file tree
Hide file tree
Showing 21 changed files with 157 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule
import com.komeyama.offline.chat.domain.ActiveUser
import com.komeyama.offline.chat.nearbyclient.ConnectingStatus
import com.komeyama.offline.chat.nearbyclient.NearbyClient
import com.komeyama.offline.chat.nearbyclient.NearbyCommunicationContent
import com.komeyama.offline.chat.nearbyclient.RequestResult
import com.komeyama.offline.chat.ui.MainActivity
import com.komeyama.offline.chat.util.RequestResult
import com.komeyama.offline.chat.util.toDateString
import org.junit.After
import org.junit.Before
Expand All @@ -43,6 +44,7 @@ class CommunicationScreenTest {
@Inject lateinit var nearbyClient: NearbyClient
private lateinit var aroundEndpointInfo: MutableLiveData<List<ActiveUser>>
private lateinit var requestResult: MutableLiveData<RequestResult>
private lateinit var connectingStatus: MutableLiveData<ConnectingStatus>

@Before
fun setUp() {
Expand All @@ -55,9 +57,13 @@ class CommunicationScreenTest {
aroundEndpointInfoFiled.isAccessible = true
aroundEndpointInfo = aroundEndpointInfoFiled.get(nearbyClient) as MutableLiveData<List<ActiveUser>>

val requestedEndpointInfoFiled = NearbyClient::class.java.getDeclaredField("_requestResult")
requestedEndpointInfoFiled.isAccessible = true
requestResult = requestedEndpointInfoFiled.get(nearbyClient) as MutableLiveData<RequestResult>
val requestedResultFiled = NearbyClient::class.java.getDeclaredField("_requestResult")
requestedResultFiled.isAccessible = true
requestResult = requestedResultFiled.get(nearbyClient) as MutableLiveData<RequestResult>

val connectingStatusFiled = NearbyClient::class.java.getDeclaredField("_connectingStatus")
connectingStatusFiled.isAccessible = true
connectingStatus = connectingStatusFiled.get(nearbyClient) as MutableLiveData<ConnectingStatus>

ActivityScenario.launch(MainActivity::class.java)
}
Expand All @@ -84,17 +90,26 @@ class CommunicationScreenTest {
))
waitNextProcess(1)
Espresso.onView(ViewMatchers.withId(android.R.id.button1)).perform(ViewActions.click())
countingTaskExecutorRule.drainTasks(3, TimeUnit.SECONDS)
requestResult.postValue(RequestResult.SUCCESS)
countingTaskExecutorRule.drainTasks(3, TimeUnit.SECONDS)
requestResult.postValue(RequestResult.UNREQUEST)
countingTaskExecutorRule.drainTasks(3, TimeUnit.SECONDS)
waitNextProcess(3)
nearbyClient.receiveContent.onNext(
NearbyCommunicationContent("dummySenderID_0", "dummySenderName_0", "dummyReceiverID", "dummyReceiverName", Date().toDateString(), "Hello")
)
countingTaskExecutorRule.drainTasks(3, TimeUnit.SECONDS)
waitNextProcess(3)
nearbyClient.receiveContent.onNext(
NearbyCommunicationContent("dummySenderID_1", "dummySenderName_1", "dummyReceiverID", "dummyReceiverName", Date().toDateString(), "Hello!")
)
waitNextProcess(10)
countingTaskExecutorRule.drainTasks(3, TimeUnit.SECONDS)
waitNextProcess(3)
connectingStatus.postValue(ConnectingStatus.LOST)
Espresso.onView(ViewMatchers.withId(android.R.id.button1)).perform(ViewActions.click())
countingTaskExecutorRule.drainTasks(3, TimeUnit.SECONDS)
waitNextProcess(5)
}

@After
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import androidx.test.espresso.matcher.ViewMatchers.isRoot
import androidx.test.rule.ActivityTestRule
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.komeyama.offline.chat.nearbyclient.ConnectionType
import com.komeyama.offline.chat.util.RequestResult
import com.komeyama.offline.chat.nearbyclient.RequestResult
import org.junit.After
import org.junit.Rule
import java.util.concurrent.TimeUnit
Expand Down
14 changes: 7 additions & 7 deletions app/src/main/java/com/komeyama/offline/chat/di/AppComponent.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.komeyama.offline.chat.di

import android.app.Application
import com.komeyama.offline.chat.ui.communicableuserlist.CommunicableUserListFragment
import com.komeyama.offline.chat.ui.communicationhistorylist.CommunicationHistoryListFragment
import com.komeyama.offline.chat.ui.fragment.CommunicableUserListFragment
import com.komeyama.offline.chat.ui.fragment.CommunicationHistoryListFragment
import com.komeyama.offline.chat.ui.MainActivity
import com.komeyama.offline.chat.ui.ConfirmAcceptanceDialog
import com.komeyama.offline.chat.ui.ConfirmRequestDialog
import com.komeyama.offline.chat.ui.InitialSettingDialog
import com.komeyama.offline.chat.ui.communication.CommunicationFragment
import com.komeyama.offline.chat.ui.setting.SettingFragment
import com.komeyama.offline.chat.ui.dialog.ConfirmAcceptanceDialog
import com.komeyama.offline.chat.ui.dialog.ConfirmRequestDialog
import com.komeyama.offline.chat.ui.dialog.InitialSettingDialog
import com.komeyama.offline.chat.ui.fragment.CommunicationFragment
import com.komeyama.offline.chat.ui.fragment.SettingFragment
import dagger.BindsInstance
import dagger.Component
import javax.inject.Singleton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import com.google.android.gms.nearby.connection.Strategy.P2P_POINT_TO_POINT
import com.komeyama.offline.chat.domain.ActiveUser
import com.komeyama.offline.chat.domain.CommunicationContent
import com.komeyama.offline.chat.domain.asNearbyMessage
import com.komeyama.offline.chat.util.RequestResult
import com.komeyama.offline.chat.util.splitUserIdAndName
import com.squareup.moshi.Moshi
import io.reactivex.processors.PublishProcessor
Expand All @@ -23,6 +22,19 @@ enum class ConnectionType{
RECEIVER
}

enum class RequestResult{
UNREQUEST,
LOADING,
SUCCESS,
CANCELED,
INTERRUPTED
}

enum class ConnectingStatus{
CONNECTING,
LOST
}

class NearbyClient @Inject constructor(
val application: Application,
val moshi: Moshi
Expand All @@ -46,6 +58,9 @@ class NearbyClient @Inject constructor(
private val _requestResult: MutableLiveData<RequestResult> = MutableLiveData()
val requestResult: LiveData<RequestResult>
get() = _requestResult
private val _connectingStatus: MutableLiveData<ConnectingStatus> = MutableLiveData()
val connectingStatus: LiveData<ConnectingStatus>
get() = _connectingStatus

fun startNearbyClient(userIdAndName: String) {
currentUserIdAndName = userIdAndName
Expand All @@ -69,6 +84,7 @@ class NearbyClient @Inject constructor(

fun acceptConnection(acceptEndpointId: String) {
Timber.d("acceptConnection: %s", acceptEndpointId)
_connectingStatus.postValue(ConnectingStatus.CONNECTING)
connectedEndpointId = acceptEndpointId
connectionsClient.acceptConnection(acceptEndpointId, payloadCallback)
}
Expand All @@ -86,6 +102,7 @@ class NearbyClient @Inject constructor(
Timber.d("success requestConnection! :%s", requestEndpointId)
connectionsClient.acceptConnection(requestEndpointId, payloadCallback)
_requestResult.postValue(RequestResult.SUCCESS)
_connectingStatus.postValue(ConnectingStatus.CONNECTING)
}.addOnFailureListener {
Timber.d("failure requestConnection!")
_requestResult.postValue(RequestResult.CANCELED)
Expand Down Expand Up @@ -159,7 +176,6 @@ class NearbyClient @Inject constructor(
when(result.status) {
Status.RESULT_SUCCESS -> {
connectedEndpointId = endpointId
_requestResult.postValue(RequestResult.SUCCESS)
}
Status.RESULT_CANCELED -> {
_requestResult.postValue(RequestResult.CANCELED)
Expand All @@ -172,6 +188,9 @@ class NearbyClient @Inject constructor(

override fun onDisconnected(endpointId: String) {
Timber.d("onDisconnected: %s", endpointId)
_requestResult.postValue(RequestResult.UNREQUEST)
_connectingStatus.postValue(ConnectingStatus.LOST)
reStartNearbyClient()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ import com.komeyama.offline.chat.databinding.ActivityMainBinding
import com.komeyama.offline.chat.di.MainViewModelFactory
import com.komeyama.offline.chat.domain.ActiveUser
import com.komeyama.offline.chat.nearbyclient.ConnectionType
import com.komeyama.offline.chat.ui.communicableuserlist.CommunicableUserListFragmentDirections
import com.komeyama.offline.chat.ui.communicationhistorylist.CommunicationHistoryListFragmentDirections
import com.komeyama.offline.chat.ui.setting.SettingFragmentDirections
import com.komeyama.offline.chat.ui.fragment.CommunicableUserListFragmentDirections
import com.komeyama.offline.chat.ui.fragment.CommunicationHistoryListFragmentDirections
import com.komeyama.offline.chat.ui.fragment.SettingFragmentDirections
import kotlinx.android.synthetic.main.activity_main.*
import permissions.dispatcher.NeedsPermission
import permissions.dispatcher.RuntimePermissions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class MainViewModel @Inject constructor(
val activeUserList = nearbyClient.aroundEndpointInfo
val invitedInfo = nearbyClient.inviteEndpointInfo
val requestResult = nearbyClient.requestResult
val connectingStatus = nearbyClient.connectingStatus
private val _isExistUserInformation: MutableLiveData<Boolean> = MutableLiveData()
val isExistUserInformation:LiveData<Boolean>
get() = _isExistUserInformation
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.komeyama.offline.chat.ui
package com.komeyama.offline.chat.ui.dialog

import android.app.Dialog
import android.os.Bundle
Expand All @@ -12,6 +12,7 @@ import androidx.navigation.fragment.findNavController
import com.komeyama.offline.chat.MainApplication
import com.komeyama.offline.chat.R
import com.komeyama.offline.chat.di.MainViewModelFactory
import com.komeyama.offline.chat.ui.MainViewModel
import timber.log.Timber
import javax.inject.Inject

Expand All @@ -23,7 +24,8 @@ class ConfirmAcceptanceDialog : DialogFragment() {

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

val args = ConfirmAcceptanceDialogArgs.fromBundle(arguments!!)
val args =
ConfirmAcceptanceDialogArgs.fromBundle(arguments!!)
val message: String = getString(R.string.confirm_acceptance_dialog_message) + " " + args.userName
return AlertDialog.Builder(requireActivity())
.setTitle(R.string.confirm_acceptance_dialog_title)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.komeyama.offline.chat.ui
package com.komeyama.offline.chat.ui.dialog

import android.app.Dialog
import android.os.Bundle
Expand All @@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModelProviders
import com.komeyama.offline.chat.MainApplication
import com.komeyama.offline.chat.R
import com.komeyama.offline.chat.di.MainViewModelFactory
import com.komeyama.offline.chat.ui.MainViewModel
import timber.log.Timber
import javax.inject.Inject

Expand All @@ -22,7 +23,8 @@ class ConfirmRequestDialog : DialogFragment() {

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

val args = ConfirmAcceptanceDialogArgs.fromBundle(arguments!!)
val args =
ConfirmAcceptanceDialogArgs.fromBundle(arguments!!)
val message: String = getString(R.string.confirm_request_dialog_message) + " " + args.userName + " ?"
return AlertDialog.Builder(requireActivity())
.setTitle(R.string.confirm_request_dialog_title)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.komeyama.offline.chat.ui.dialog

import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment
import androidx.navigation.fragment.findNavController
import com.komeyama.offline.chat.R
import timber.log.Timber

class DisconnectedMessageDialog: DialogFragment() {

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

val dialog = AlertDialog.Builder(requireActivity())
.setMessage(R.string.disconnected_message_dialog_message)
.setPositiveButton(R.string.confirm_request_dialog_ok) { _, _ ->
Timber.d("dialog disconnected message fragment ok")
findNavController().navigate(R.id.action_disconnectedMessageDialog_to_CommunicableUserListFragment)
}
.create()
dialog.setCanceledOnTouchOutside(false)

return dialog
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.komeyama.offline.chat.ui
package com.komeyama.offline.chat.ui.dialog

import android.app.Dialog
import android.os.Bundle
Expand All @@ -14,6 +14,7 @@ import com.komeyama.offline.chat.MainApplication
import com.komeyama.offline.chat.R
import com.komeyama.offline.chat.databinding.FragmentInitialBinding
import com.komeyama.offline.chat.di.MainViewModelFactory
import com.komeyama.offline.chat.ui.MainViewModel
import javax.inject.Inject

class InitialSettingDialog : DialogFragment(){
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.komeyama.offline.chat.ui.communicableuserlist
package com.komeyama.offline.chat.ui.fragment

import android.os.Bundle
import android.view.LayoutInflater
Expand All @@ -18,8 +18,8 @@ import com.komeyama.offline.chat.databinding.ActiveUserItemBinding
import com.komeyama.offline.chat.databinding.FragmentCommunicableUserListBinding
import com.komeyama.offline.chat.di.MainViewModelFactory
import com.komeyama.offline.chat.domain.ActiveUser
import com.komeyama.offline.chat.nearbyclient.RequestResult
import com.komeyama.offline.chat.ui.MainViewModel
import com.komeyama.offline.chat.util.RequestResult
import timber.log.Timber
import javax.inject.Inject

Expand All @@ -45,17 +45,22 @@ class CommunicableUserListFragment :Fragment(){
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel

viewModelAdapter = CommunicableUserListAdapter(ActiveUserClick {
communicationOpponentInfo = CommunicationOpponentInfo(it.id, it.name, it.endPointId)
findNavController().navigate(
CommunicableUserListFragmentDirections.
actionCommunicableUserListFragmentToConfirmRequestDialog(
viewModelAdapter =
CommunicableUserListAdapter(ActiveUserClick {
communicationOpponentInfo =
CommunicationOpponentInfo(
it.id,
it.name,
it.endPointId
)
findNavController().navigate(
CommunicableUserListFragmentDirections.actionCommunicableUserListFragmentToConfirmRequestDialog(
id = it.id,
userName = it.name,
endPointId = it.endPointId
)
)
})
)
})

binding.recyclerView.findViewById<RecyclerView>(R.id.recycler_view).apply {
layoutManager = LinearLayoutManager(context)
Expand All @@ -76,10 +81,10 @@ class CommunicableUserListFragment :Fragment(){
when(it) {
RequestResult.SUCCESS -> {
findNavController().navigate(
CommunicableUserListFragmentDirections.
actionCommunicableUserListFragmentToCommunicationFragment(
communicationOpponentId = communicationOpponentInfo.id,
communicationOpponentName = communicationOpponentInfo.name)
CommunicableUserListFragmentDirections.actionCommunicableUserListFragmentToCommunicationFragment(
communicationOpponentId = communicationOpponentInfo.id,
communicationOpponentName = communicationOpponentInfo.name
)
)
}
else -> {
Expand Down
Loading

0 comments on commit a4027e3

Please sign in to comment.