@@ -22,6 +22,7 @@ import android.content.Context
22
22
import android.content.Intent
23
23
import android.os.Bundle
24
24
import android.view.View
25
+ import android.widget.Toast
25
26
import androidx.appcompat.app.AlertDialog
26
27
import com.airbnb.mvrx.Async
27
28
import com.airbnb.mvrx.Fail
@@ -37,6 +38,8 @@ import im.vector.app.core.extensions.exhaustive
37
38
import im.vector.app.core.platform.SimpleFragmentActivity
38
39
import im.vector.app.core.platform.WaitingViewData
39
40
import im.vector.app.core.utils.PERMISSIONS_FOR_MEMBERS_SEARCH
41
+ import im.vector.app.core.utils.PERMISSIONS_FOR_TAKING_PHOTO
42
+ import im.vector.app.core.utils.PERMISSION_REQUEST_CODE_LAUNCH_CAMERA
40
43
import im.vector.app.core.utils.PERMISSION_REQUEST_CODE_READ_CONTACTS
41
44
import im.vector.app.core.utils.allGranted
42
45
import im.vector.app.core.utils.checkPermissions
@@ -72,35 +75,45 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() {
72
75
super .onCreate(savedInstanceState)
73
76
toolbar.visibility = View .GONE
74
77
sharedActionViewModel = viewModelProvider.get(UserDirectorySharedActionViewModel ::class .java)
75
- sharedActionViewModel
76
- .observe()
77
- .subscribe { sharedAction ->
78
- when (sharedAction) {
79
- UserDirectorySharedAction .OpenUsersDirectory ->
80
- addFragmentToBackstack(R .id.container, UserDirectoryFragment ::class .java)
81
- UserDirectorySharedAction .Close -> finish()
82
- UserDirectorySharedAction .GoBack -> onBackPressed()
83
- is UserDirectorySharedAction .OnMenuItemSelected -> onMenuItemSelected(sharedAction)
84
- UserDirectorySharedAction .OpenPhoneBook -> openPhoneBook()
85
- }.exhaustive
86
- }
87
- .disposeOnDestroy()
88
- if (isFirstCreation()) {
89
- addFragment(
90
- R .id.container,
91
- KnownUsersFragment ::class .java,
92
- KnownUsersFragmentArgs (
93
- title = getString(R .string.fab_menu_create_chat),
94
- menuResId = R .menu.vector_create_direct_room,
95
- isCreatingRoom = true
96
- )
97
- )
78
+ if (intent?.getBooleanExtra(BY_QR_CODE , false )!! ) {
79
+ if (isFirstCreation()) { openAddByQrCode() }
80
+ } else {
81
+ sharedActionViewModel
82
+ .observe()
83
+ .subscribe { sharedAction ->
84
+ when (sharedAction) {
85
+ UserDirectorySharedAction .OpenUsersDirectory ->
86
+ addFragmentToBackstack(R .id.container, UserDirectoryFragment ::class .java)
87
+ UserDirectorySharedAction .Close -> finish()
88
+ UserDirectorySharedAction .GoBack -> onBackPressed()
89
+ is UserDirectorySharedAction .OnMenuItemSelected -> onMenuItemSelected(sharedAction)
90
+ UserDirectorySharedAction .OpenPhoneBook -> openPhoneBook()
91
+ }.exhaustive
92
+ }
93
+ .disposeOnDestroy()
94
+ if (isFirstCreation()) {
95
+ addFragment(
96
+ R .id.container,
97
+ KnownUsersFragment ::class .java,
98
+ KnownUsersFragmentArgs (
99
+ title = getString(R .string.fab_menu_create_chat),
100
+ menuResId = R .menu.vector_create_direct_room,
101
+ isCreatingRoom = true
102
+ )
103
+ )
104
+ }
98
105
}
99
106
viewModel.selectSubscribe(this , CreateDirectRoomViewState ::createAndInviteState) {
100
107
renderCreateAndInviteState(it)
101
108
}
102
109
}
103
110
111
+ private fun openAddByQrCode () {
112
+ if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO , this , PERMISSION_REQUEST_CODE_LAUNCH_CAMERA , 0 )) {
113
+ addFragment(R .id.container, CreateDirectRoomByQrCodeFragment ::class .java)
114
+ }
115
+ }
116
+
104
117
private fun openPhoneBook () {
105
118
// Check permission first
106
119
if (checkPermissions(PERMISSIONS_FOR_MEMBERS_SEARCH ,
@@ -116,6 +129,13 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() {
116
129
if (allGranted(grantResults)) {
117
130
if (requestCode == PERMISSION_REQUEST_CODE_READ_CONTACTS ) {
118
131
doOnPostResume { addFragmentToBackstack(R .id.container, ContactsBookFragment ::class .java) }
132
+ } else if (requestCode == PERMISSION_REQUEST_CODE_LAUNCH_CAMERA && intent?.getBooleanExtra(BY_QR_CODE , false )!! ) {
133
+ addFragment(R .id.container, CreateDirectRoomByQrCodeFragment ::class .java)
134
+ }
135
+ } else {
136
+ Toast .makeText(baseContext, R .string.missing_permissions_error, Toast .LENGTH_SHORT ).show()
137
+ if (requestCode == PERMISSION_REQUEST_CODE_LAUNCH_CAMERA && intent?.getBooleanExtra(BY_QR_CODE , false )!! ) {
138
+ finish()
119
139
}
120
140
}
121
141
}
@@ -178,8 +198,12 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() {
178
198
}
179
199
180
200
companion object {
181
- fun getIntent (context : Context ): Intent {
182
- return Intent (context, CreateDirectRoomActivity ::class .java)
201
+ private const val BY_QR_CODE = " BY_QR_CODE"
202
+
203
+ fun getIntent (context : Context , byQrCode : Boolean = false): Intent {
204
+ return Intent (context, CreateDirectRoomActivity ::class .java).apply {
205
+ putExtra(BY_QR_CODE , byQrCode)
206
+ }
183
207
}
184
208
}
185
209
}
0 commit comments