Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
AloqaIM-Android
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
AloqaIM-Android
Commits
044a9d5b
Commit
044a9d5b
authored
Jan 18, 2017
by
Tiago Cunha
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Using a dialog fragment
parent
c8493fbb
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
118 additions
and
176 deletions
+118
-176
RoomFragment.java
...a/chat/rocket/android/fragment/chatroom/RoomFragment.java
+29
-6
MessageFormManager.java
...ket/android/layouthelper/chatroom/MessageFormManager.java
+6
-37
ExtraActionPickerDialog.java
...cket/android/widget/internal/ExtraActionPickerDialog.java
+0
-92
ExtraActionPickerDialogFragment.java
...roid/widget/internal/ExtraActionPickerDialogFragment.java
+62
-0
MessageFormLayout.java
...chat/rocket/android/widget/message/MessageFormLayout.java
+21
-41
No files found.
app/src/main/java/chat/rocket/android/fragment/chatroom/RoomFragment.java
View file @
044a9d5b
...
...
@@ -19,6 +19,8 @@ import io.realm.Sort;
import
org.json.JSONObject
;
import
java.lang.reflect.Field
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.UUID
;
import
chat.rocket.android.R
;
import
chat.rocket.android.api.MethodCallHelper
;
...
...
@@ -35,6 +37,7 @@ import chat.rocket.android.layouthelper.chatroom.MessageFormManager;
import
chat.rocket.android.layouthelper.chatroom.MessageListAdapter
;
import
chat.rocket.android.layouthelper.chatroom.AbstractNewMessageIndicatorManager
;
import
chat.rocket.android.layouthelper.chatroom.PairedMessage
;
import
chat.rocket.android.layouthelper.extra_action.AbstractExtraActionItem
;
import
chat.rocket.android.layouthelper.extra_action.MessageExtraActionBehavior
;
import
chat.rocket.android.layouthelper.extra_action.upload.AbstractUploadActionItem
;
import
chat.rocket.android.layouthelper.extra_action.upload.AudioUploadActionItem
;
...
...
@@ -53,6 +56,7 @@ import chat.rocket.android.realm_helper.RealmModelListAdapter;
import
chat.rocket.android.realm_helper.RealmObjectObserver
;
import
chat.rocket.android.realm_helper.RealmStore
;
import
chat.rocket.android.service.RocketChatService
;
import
chat.rocket.android.widget.internal.ExtraActionPickerDialogFragment
;
import
chat.rocket.android.widget.message.MessageFormLayout
;
import
permissions.dispatcher.NeedsPermission
;
import
permissions.dispatcher.RuntimePermissions
;
...
...
@@ -79,6 +83,8 @@ public class RoomFragment extends AbstractChatRoomFragment
private
Snackbar
unreadIndicator
;
private
boolean
previousUnreadMessageExists
;
private
List
<
AbstractExtraActionItem
>
extraActionItems
;
public
RoomFragment
()
{
}
...
...
@@ -295,9 +301,15 @@ public class RoomFragment extends AbstractChatRoomFragment
}
private
void
setupMessageComposer
()
{
extraActionItems
=
new
ArrayList
<>(
3
);
// fixed number as of now
extraActionItems
.
add
(
new
ImageUploadActionItem
());
extraActionItems
.
add
(
new
AudioUploadActionItem
());
extraActionItems
.
add
(
new
VideoUploadActionItem
());
final
MessageFormLayout
messageFormLayout
=
(
MessageFormLayout
)
rootView
.
findViewById
(
R
.
id
.
message_composer
);
messageFormManager
=
new
MessageFormManager
(
messageFormLayout
);
messageFormManager
=
new
MessageFormManager
(
messageFormLayout
,
this
::
showExtraActionSelectionDialog
);
messageFormManager
.
setSendMessageCallback
(
messageText
->
realmHelper
.
executeTransaction
(
realm
->
realm
.
createOrUpdateObjectFromJson
(
Message
.
class
,
new
JSONObject
()
...
...
@@ -312,11 +324,6 @@ public class RoomFragment extends AbstractChatRoomFragment
scrollToLatestMessage
();
return
null
;
}));
messageFormManager
.
registerExtraActionItem
(
new
ImageUploadActionItem
());
messageFormManager
.
registerExtraActionItem
(
new
AudioUploadActionItem
());
messageFormManager
.
registerExtraActionItem
(
new
VideoUploadActionItem
());
messageFormManager
.
setExtraActionPickerCallback
(
item
->
RoomFragmentPermissionsDispatcher
.
onExtraActionSelectedWithCheck
(
RoomFragment
.
this
,
item
));
}
@Override
...
...
@@ -442,6 +449,22 @@ public class RoomFragment extends AbstractChatRoomFragment
super
.
onPause
();
}
private
void
showExtraActionSelectionDialog
()
{
ExtraActionPickerDialogFragment
.
create
(
new
ArrayList
<>(
extraActionItems
),
this
::
onExtraItemSelected
)
.
show
(
getFragmentManager
(),
"ExtraActionPickerDialogFragment"
);
}
private
void
onExtraItemSelected
(
int
itemId
)
{
for
(
AbstractExtraActionItem
extraActionItem
:
extraActionItems
)
{
if
(
extraActionItem
.
getItemId
()
==
itemId
)
{
RoomFragmentPermissionsDispatcher
.
onExtraActionSelectedWithCheck
(
RoomFragment
.
this
,
extraActionItem
);
return
;
}
}
}
@Override
public
boolean
onBackPressed
()
{
return
closeSideMenuIfNeeded
();
...
...
app/src/main/java/chat/rocket/android/layouthelper/chatroom/MessageFormManager.java
View file @
044a9d5b
package
chat
.
rocket
.
android
.
layouthelper
.
chatroom
;
import
java.util.HashMap
;
import
bolts.Task
;
import
chat.rocket.android.layouthelper.extra_action.AbstractExtraActionItem
;
import
chat.rocket.android.widget.message.MessageFormLayout
;
/**
...
...
@@ -11,42 +9,22 @@ import chat.rocket.android.widget.message.MessageFormLayout;
public
class
MessageFormManager
{
private
final
MessageFormLayout
messageFormLayout
;
private
SendMessageCallback
sendMessageCallback
;
private
ExtraActionPickerCallback
extraActionPickerCallback
;
private
final
HashMap
<
Integer
,
AbstractExtraActionItem
>
extraActionItemMap
;
public
MessageFormManager
(
MessageFormLayout
messageFormLayout
)
{
public
MessageFormManager
(
MessageFormLayout
messageFormLayout
,
MessageFormLayout
.
ShowExtraActionSelectionCallback
callback
)
{
this
.
messageFormLayout
=
messageFormLayout
;
this
.
extraActionItemMap
=
new
HashMap
<>();
init
();
init
(
callback
);
}
private
void
init
()
{
messageFormLayout
.
setOnActionListener
(
new
MessageFormLayout
.
ActionListener
()
{
@Override
public
void
onSubmitText
(
String
message
)
{
sendMessage
(
message
);
}
@Override
public
void
onExtraActionSelected
(
int
itemId
)
{
if
(
extraActionItemMap
.
containsKey
(
itemId
))
{
AbstractExtraActionItem
item
=
extraActionItemMap
.
get
(
itemId
);
if
(
extraActionPickerCallback
!=
null
)
{
extraActionPickerCallback
.
onExtraActionSelected
(
item
);
}
}
}
});
private
void
init
(
MessageFormLayout
.
ShowExtraActionSelectionCallback
callback
)
{
messageFormLayout
.
setShowExtraActionSelectionCallback
(
callback
);
messageFormLayout
.
setTextListener
(
this
::
sendMessage
);
}
public
void
setSendMessageCallback
(
SendMessageCallback
sendMessageCallback
)
{
this
.
sendMessageCallback
=
sendMessageCallback
;
}
public
void
setExtraActionPickerCallback
(
ExtraActionPickerCallback
extraActionPickerCallback
)
{
this
.
extraActionPickerCallback
=
extraActionPickerCallback
;
}
public
void
clearComposingText
()
{
messageFormLayout
.
setText
(
""
);
}
...
...
@@ -66,16 +44,7 @@ public class MessageFormManager {
});
}
public
void
registerExtraActionItem
(
AbstractExtraActionItem
actionItem
)
{
messageFormLayout
.
addExtraActionItem
(
actionItem
);
extraActionItemMap
.
put
(
actionItem
.
getItemId
(),
actionItem
);
}
public
interface
SendMessageCallback
{
Task
<
Void
>
onSubmitText
(
String
messageText
);
}
public
interface
ExtraActionPickerCallback
{
void
onExtraActionSelected
(
AbstractExtraActionItem
item
);
}
}
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/internal/ExtraActionPickerDialog.java
deleted
100644 → 0
View file @
c8493fbb
package
chat
.
rocket
.
android
.
widget
.
internal
;
import
android.content.Context
;
import
android.content.DialogInterface
;
import
android.os.Bundle
;
import
android.os.OperationCanceledException
;
import
android.support.annotation.NonNull
;
import
android.support.design.widget.BottomSheetDialog
;
import
android.support.v7.widget.RecyclerView
;
import
java.util.List
;
import
bolts.Task
;
import
bolts.TaskCompletionSource
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.layouthelper.MessageExtraActionListAdapter
;
import
chat.rocket.android.widget.message.MessageExtraActionItemPresenter
;
public
class
ExtraActionPickerDialog
{
/**
* show extra actions picker diaog.
*/
public
static
Task
<
Integer
>
showAsTask
(
Context
context
,
List
<
MessageExtraActionItemPresenter
>
actionItems
)
{
final
TaskCompletionSource
<
Integer
>
task
=
new
TaskCompletionSource
<>();
Impl
dialog
=
new
Impl
(
context
,
actionItems
);
dialog
.
setCallback
(
new
Impl
.
Callback
()
{
@Override
public
void
onItemSelected
(
int
itemId
)
{
task
.
setResult
(
itemId
);
}
@Override
public
void
onCanceled
()
{
task
.
setError
(
new
OperationCanceledException
());
}
});
dialog
.
show
();
return
task
.
getTask
();
}
private
static
class
Impl
extends
BottomSheetDialog
{
private
interface
Callback
{
void
onItemSelected
(
int
itemId
);
void
onCanceled
();
}
private
Callback
callback
;
private
final
List
<
MessageExtraActionItemPresenter
>
actionItems
;
public
void
setCallback
(
Callback
callback
)
{
this
.
callback
=
callback
;
}
public
Impl
(
@NonNull
Context
context
,
List
<
MessageExtraActionItemPresenter
>
actionItems
)
{
super
(
context
);
this
.
actionItems
=
actionItems
;
}
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
dialog_message_extra_action_picker
);
MessageExtraActionListAdapter
adapter
=
new
MessageExtraActionListAdapter
(
actionItems
);
adapter
.
setOnItemClickListener
(
new
MessageExtraActionListAdapter
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
int
itemId
)
{
doCallback
(
itemId
);
dismiss
();
}
});
RecyclerView
recyclerView
=
(
RecyclerView
)
findViewById
(
R
.
id
.
message_extra_action_listview
);
recyclerView
.
setAdapter
(
adapter
);
setOnCancelListener
(
new
OnCancelListener
()
{
@Override
public
void
onCancel
(
DialogInterface
dialogInterface
)
{
if
(
callback
!=
null
)
{
callback
.
onCanceled
();
}
}
});
}
private
void
doCallback
(
int
itemId
)
{
if
(
callback
!=
null
)
{
callback
.
onItemSelected
(
itemId
);
}
}
}
}
\ No newline at end of file
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/internal/ExtraActionPickerDialogFragment.java
0 → 100644
View file @
044a9d5b
package
chat
.
rocket
.
android
.
widget
.
internal
;
import
android.app.Dialog
;
import
android.support.design.widget.BottomSheetDialogFragment
;
import
android.support.v7.widget.RecyclerView
;
import
java.util.List
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.layouthelper.MessageExtraActionListAdapter
;
import
chat.rocket.android.widget.message.MessageExtraActionItemPresenter
;
public
class
ExtraActionPickerDialogFragment
extends
BottomSheetDialogFragment
{
private
List
<
MessageExtraActionItemPresenter
>
actionItems
;
private
Callback
callback
;
public
static
ExtraActionPickerDialogFragment
create
(
List
<
MessageExtraActionItemPresenter
>
actionItems
,
Callback
callback
)
{
ExtraActionPickerDialogFragment
fragment
=
new
ExtraActionPickerDialogFragment
();
fragment
.
setActionItems
(
actionItems
);
fragment
.
setCallback
(
callback
);
return
fragment
;
}
public
void
setActionItems
(
List
<
MessageExtraActionItemPresenter
>
actionItems
)
{
this
.
actionItems
=
actionItems
;
}
public
void
setCallback
(
Callback
callback
)
{
this
.
callback
=
callback
;
}
@Override
public
final
void
setupDialog
(
Dialog
dialog
,
int
style
)
{
super
.
setupDialog
(
dialog
,
style
);
dialog
.
setContentView
(
R
.
layout
.
dialog_message_extra_action_picker
);
MessageExtraActionListAdapter
adapter
=
new
MessageExtraActionListAdapter
(
actionItems
);
adapter
.
setOnItemClickListener
(
new
MessageExtraActionListAdapter
.
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
int
itemId
)
{
callbackOnItemSelected
(
itemId
);
dismiss
();
}
});
RecyclerView
recyclerView
=
(
RecyclerView
)
dialog
.
findViewById
(
R
.
id
.
message_extra_action_listview
);
recyclerView
.
setAdapter
(
adapter
);
}
private
void
callbackOnItemSelected
(
int
itemId
)
{
if
(
callback
!=
null
)
{
callback
.
onItemSelected
(
itemId
);
}
}
public
interface
Callback
{
void
onItemSelected
(
int
itemId
);
}
}
\ No newline at end of file
rocket-chat-android-widgets/src/main/java/chat/rocket/android/widget/message/MessageFormLayout.java
View file @
044a9d5b
...
...
@@ -3,7 +3,6 @@ package chat.rocket.android.widget.message;
import
android.annotation.TargetApi
;
import
android.content.Context
;
import
android.os.Build
;
import
android.support.annotation.Nullable
;
import
android.text.Editable
;
import
android.text.TextUtils
;
import
android.text.TextWatcher
;
...
...
@@ -16,20 +15,17 @@ import android.widget.LinearLayout;
import
android.widget.TextView
;
import
java.util.ArrayList
;
import
java.util.List
;
import
bolts.Continuation
;
import
bolts.Task
;
import
chat.rocket.android.widget.R
;
import
chat.rocket.android.widget.internal.ExtraActionPickerDialog
;
public
class
MessageFormLayout
extends
LinearLayout
{
protected
ActionListener
actionListener
;
protected
ViewGroup
composer
;
private
View
btnExtra
;
private
View
btnSubmit
;
private
List
<
MessageExtraActionItemPresenter
>
extraActionItems
;
private
ShowExtraActionSelectionCallback
showExtraActionSelectionCallback
;
private
TextListener
textListener
;
public
MessageFormLayout
(
Context
context
)
{
super
(
context
);
...
...
@@ -52,12 +48,7 @@ public class MessageFormLayout extends LinearLayout {
init
();
}
public
final
void
setOnActionListener
(
@Nullable
ActionListener
listener
)
{
actionListener
=
listener
;
}
private
void
init
()
{
extraActionItems
=
new
ArrayList
<>();
composer
=
(
ViewGroup
)
LayoutInflater
.
from
(
getContext
())
.
inflate
(
R
.
layout
.
message_composer
,
this
,
false
);
...
...
@@ -76,8 +67,8 @@ public class MessageFormLayout extends LinearLayout {
@Override
public
void
onClick
(
View
view
)
{
String
messageText
=
getText
();
if
(
messageText
.
length
()
>
0
&&
action
Listener
!=
null
)
{
action
Listener
.
onSubmitText
(
messageText
);
if
(
messageText
.
length
()
>
0
&&
text
Listener
!=
null
)
{
text
Listener
.
onSubmitText
(
messageText
);
}
}
});
...
...
@@ -110,17 +101,18 @@ public class MessageFormLayout extends LinearLayout {
addView
(
composer
);
}
public
void
addExtraActionItem
(
MessageExtraActionItemPresenter
itemPresenter
)
{
boolean
found
=
false
;
for
(
MessageExtraActionItemPresenter
item
:
extraActionItems
)
{
if
(
item
.
getItemId
()
==
itemPresenter
.
getItemId
())
{
found
=
true
;
break
;
}
}
public
void
setShowExtraActionSelectionCallback
(
ShowExtraActionSelectionCallback
showExtraActionSelectionCallback
)
{
this
.
showExtraActionSelectionCallback
=
showExtraActionSelectionCallback
;
}
if
(!
found
)
{
extraActionItems
.
add
(
itemPresenter
);
public
void
setTextListener
(
TextListener
textListener
)
{
this
.
textListener
=
textListener
;
}
private
void
showExtraActionSelectionDialog
()
{
if
(
showExtraActionSelectionCallback
!=
null
)
{
showExtraActionSelectionCallback
.
show
();
}
}
...
...
@@ -159,23 +151,11 @@ public class MessageFormLayout extends LinearLayout {
});
}
private
void
showExtraActionSelectionDialog
()
{
ExtraActionPickerDialog
.
showAsTask
(
getContext
(),
extraActionItems
)
.
onSuccess
(
new
Continuation
<
Integer
,
Object
>()
{
@Override
public
Object
then
(
Task
<
Integer
>
task
)
throws
Exception
{
int
which
=
task
.
getResult
();
if
(
actionListener
!=
null
)
{
actionListener
.
onExtraActionSelected
(
which
);
}
return
null
;
}
});
}
public
interface
ActionListener
{
void
onSubmitText
(
String
message
);
public
interface
ShowExtraActionSelectionCallback
{
void
show
();
}
void
onExtraActionSelected
(
int
itemId
);
public
interface
TextListener
{
void
onSubmitText
(
String
message
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment