Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
briar
briar
Commits
5e5705c7
Commit
5e5705c7
authored
Dec 07, 2018
by
akwizgran
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '1438-send-image-attachments-ui' into 'master'
Implement UX for sending image attachments See merge request
!1004
parents
52ec56d6
e6229a3a
Pipeline
#2860
passed with stage
in 11 minutes and 10 seconds
Changes
41
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
1085 additions
and
1000 deletions
+1085
-1000
briar-android/build.gradle
briar-android/build.gradle
+1
-0
briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
...java/org/briarproject/briar/android/AndroidComponent.java
+2
-2
briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java
...java/org/briarproject/briar/android/TestingConstants.java
+6
-0
briar-android/src/main/java/org/briarproject/briar/android/activity/RequestCodes.java
...org/briarproject/briar/android/activity/RequestCodes.java
+1
-0
briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java
...a/org/briarproject/briar/android/blog/ReblogFragment.java
+15
-14
briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
...riarproject/briar/android/blog/WriteBlogPostActivity.java
+19
-31
briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java
...ject/briar/android/conversation/ConversationActivity.java
+40
-10
briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
...iar/android/introduction/IntroductionMessageFragment.java
+21
-17
briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
...riar/android/privategroup/conversation/GroupActivity.java
+1
-1
briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupController.java
.../android/privategroup/creation/CreateGroupController.java
+4
-1
briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
...roid/privategroup/creation/CreateGroupControllerImpl.java
+7
-5
briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
...ar/android/privategroup/creation/GroupInviteActivity.java
+1
-2
briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
...iarproject/briar/android/sharing/BaseMessageFragment.java
+21
-24
briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareActivity.java
...org/briarproject/briar/android/sharing/ShareActivity.java
+2
-3
briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogActivity.java
...briarproject/briar/android/sharing/ShareBlogActivity.java
+1
-1
briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogController.java
...iarproject/briar/android/sharing/ShareBlogController.java
+3
-1
briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareBlogControllerImpl.java
...roject/briar/android/sharing/ShareBlogControllerImpl.java
+4
-5
briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumActivity.java
...riarproject/briar/android/sharing/ShareForumActivity.java
+1
-1
briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumController.java
...arproject/briar/android/sharing/ShareForumController.java
+3
-1
briar-android/src/main/java/org/briarproject/briar/android/sharing/ShareForumControllerImpl.java
...oject/briar/android/sharing/ShareForumControllerImpl.java
+4
-5
briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadListActivity.java
...iarproject/briar/android/threaded/ThreadListActivity.java
+16
-14
briar-android/src/main/java/org/briarproject/briar/android/view/EmojiTextInputView.java
...g/briarproject/briar/android/view/EmojiTextInputView.java
+239
-0
briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreview.java
...ava/org/briarproject/briar/android/view/ImagePreview.java
+119
-0
briar-android/src/main/java/org/briarproject/briar/android/view/KeyboardAwareLinearLayout.java
...project/briar/android/view/KeyboardAwareLinearLayout.java
+8
-55
briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java
...g/briarproject/briar/android/view/LargeTextInputView.java
+12
-18
briar-android/src/main/java/org/briarproject/briar/android/view/TextAttachmentController.java
...rproject/briar/android/view/TextAttachmentController.java
+214
-0
briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
...va/org/briarproject/briar/android/view/TextInputView.java
+70
-99
briar-android/src/main/java/org/briarproject/briar/android/view/TextSendController.java
...g/briarproject/briar/android/view/TextSendController.java
+88
-0
briar-android/src/main/java/org/thoughtcrime/securesms/LICENSE
...-android/src/main/java/org/thoughtcrime/securesms/LICENSE
+0
-621
briar-android/src/main/res/drawable/ic_image.xml
briar-android/src/main/res/drawable/ic_image.xml
+10
-0
briar-android/src/main/res/layout/activity_conversation.xml
briar-android/src/main/res/layout/activity_conversation.xml
+11
-2
briar-android/src/main/res/layout/emoji_text_input_view.xml
briar-android/src/main/res/layout/emoji_text_input_view.xml
+34
-0
briar-android/src/main/res/layout/fragment_message.xml
briar-android/src/main/res/layout/fragment_message.xml
+1
-0
briar-android/src/main/res/layout/fragment_reblog.xml
briar-android/src/main/res/layout/fragment_reblog.xml
+1
-0
briar-android/src/main/res/layout/image_preview.xml
briar-android/src/main/res/layout/image_preview.xml
+49
-0
briar-android/src/main/res/layout/introduction_message.xml
briar-android/src/main/res/layout/introduction_message.xml
+1
-0
briar-android/src/main/res/layout/text_input_view.xml
briar-android/src/main/res/layout/text_input_view.xml
+38
-35
briar-android/src/main/res/layout/text_input_view_large.xml
briar-android/src/main/res/layout/text_input_view_large.xml
+6
-32
briar-android/src/main/res/values/attrs.xml
briar-android/src/main/res/values/attrs.xml
+7
-0
briar-android/src/main/res/values/strings.xml
briar-android/src/main/res/values/strings.xml
+3
-0
briar-android/witness.gradle
briar-android/witness.gradle
+1
-0
No files found.
briar-android/build.gradle
View file @
5e5705c7
...
...
@@ -105,6 +105,7 @@ dependencies {
implementation
"com.android.support:cardview-v7:$supportVersion"
implementation
"com.android.support:support-annotations:$supportVersion"
implementation
"com.android.support:exifinterface:$supportVersion"
implementation
"com.android.support:palette-v7:$supportVersion"
implementation
'com.android.support.constraint:constraint-layout:1.1.3'
implementation
"android.arch.lifecycle:extensions:1.1.1"
...
...
briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
View file @
5e5705c7
...
...
@@ -32,7 +32,7 @@ import org.briarproject.briar.BriarCoreModule;
import
org.briarproject.briar.android.conversation.glide.BriarModelLoader
;
import
org.briarproject.briar.android.login.SignInReminderReceiver
;
import
org.briarproject.briar.android.reporting.BriarReportSender
;
import
org.briarproject.briar.android.view.TextInputView
;
import
org.briarproject.briar.android.view.
Emoji
TextInputView
;
import
org.briarproject.briar.api.android.AndroidNotificationManager
;
import
org.briarproject.briar.api.android.DozeWatchdog
;
import
org.briarproject.briar.api.android.LockManager
;
...
...
@@ -169,7 +169,7 @@ public interface AndroidComponent
void
inject
(
NotificationCleanupService
notificationCleanupService
);
void
inject
(
TextInputView
textInputView
);
void
inject
(
Emoji
TextInputView
textInputView
);
void
inject
(
BriarModelLoader
briarModelLoader
);
...
...
briar-android/src/main/java/org/briarproject/briar/android/TestingConstants.java
View file @
5e5705c7
...
...
@@ -30,4 +30,10 @@ public interface TestingConstants {
long
EXPIRY_DATE
=
IS_DEBUG_BUILD
||
IS_BETA_BUILD
?
BuildConfig
.
BuildTimestamp
+
90
*
24
*
60
*
60
*
1000L
:
Long
.
MAX_VALUE
;
/**
* Feature flag for enabling image attachments.
*/
boolean
FEATURE_FLAG_IMAGE_ATTACHMENTS
=
IS_DEBUG_BUILD
;
}
briar-android/src/main/java/org/briarproject/briar/android/activity/RequestCodes.java
View file @
5e5705c7
...
...
@@ -14,5 +14,6 @@ public interface RequestCodes {
int
REQUEST_BLUETOOTH_DISCOVERABLE
=
10
;
int
REQUEST_UNLOCK
=
11
;
int
REQUEST_KEYGUARD_UNLOCK
=
12
;
int
REQUEST_ATTACH_IMAGE
=
13
;
}
briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java
View file @
5e5705c7
package
org.briarproject.briar.android.blog
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.view.LayoutInflater
;
import
android.view.View
;
...
...
@@ -18,7 +19,10 @@ import org.briarproject.briar.android.controller.handler.UiExceptionHandler;
import
org.briarproject.briar.android.controller.handler.UiResultExceptionHandler
;
import
org.briarproject.briar.android.fragment.BaseFragment
;
import
org.briarproject.briar.android.view.TextInputView
;
import
org.briarproject.briar.android.view.TextInputView.TextInputListener
;
import
org.briarproject.briar.android.view.TextSendController
;
import
org.briarproject.briar.android.view.TextSendController.SendListener
;
import
java.util.List
;
import
javax.annotation.Nullable
;
import
javax.inject.Inject
;
...
...
@@ -29,10 +33,11 @@ import static android.view.View.INVISIBLE;
import
static
android
.
view
.
View
.
VISIBLE
;
import
static
org
.
briarproject
.
briar
.
android
.
activity
.
BriarActivity
.
GROUP_ID
;
import
static
org
.
briarproject
.
briar
.
android
.
blog
.
BasePostFragment
.
POST_ID
;
import
static
org
.
briarproject
.
briar
.
api
.
blog
.
BlogConstants
.
MAX_BLOG_POST_TEXT_LENGTH
;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public
class
ReblogFragment
extends
BaseFragment
implements
TextInput
Listener
{
public
class
ReblogFragment
extends
BaseFragment
implements
Send
Listener
{
public
static
final
String
TAG
=
ReblogFragment
.
class
.
getName
();
...
...
@@ -77,7 +82,11 @@ public class ReblogFragment extends BaseFragment implements TextInputListener {
View
v
=
inflater
.
inflate
(
R
.
layout
.
fragment_reblog
,
container
,
false
);
ui
=
new
ViewHolder
(
v
);
ui
.
post
.
setTransitionName
(
postId
);
ui
.
input
.
setSendButtonEnabled
(
false
);
TextSendController
sendController
=
new
TextSendController
(
ui
.
input
,
this
,
true
);
ui
.
input
.
setSendController
(
sendController
);
ui
.
input
.
setEnabled
(
false
);
ui
.
input
.
setMaxTextLength
(
MAX_BLOG_POST_TEXT_LENGTH
);
showProgressBar
();
return
v
;
...
...
@@ -112,16 +121,14 @@ public class ReblogFragment extends BaseFragment implements TextInputListener {
ui
.
post
.
bindItem
(
item
);
ui
.
post
.
hideReblogButton
();
ui
.
input
.
setListener
(
this
);
ui
.
input
.
setSendButtonEnabled
(
true
);
ui
.
input
.
setEnabled
(
true
);
ui
.
scrollView
.
post
(()
->
ui
.
scrollView
.
fullScroll
(
FOCUS_DOWN
));
}
@Override
public
void
onSendClick
(
String
text
)
{
public
void
onSendClick
(
@Nullable
String
text
,
List
<
Uri
>
imageUris
)
{
ui
.
input
.
hideSoftKeyboard
();
String
comment
=
getComment
();
feedController
.
repeatPost
(
item
,
comment
,
feedController
.
repeatPost
(
item
,
text
,
new
UiExceptionHandler
<
DbException
>(
this
)
{
@Override
public
void
onExceptionUi
(
DbException
exception
)
{
...
...
@@ -131,12 +138,6 @@ public class ReblogFragment extends BaseFragment implements TextInputListener {
finish
();
}
@Nullable
private
String
getComment
()
{
if
(
ui
.
input
.
getText
().
length
()
==
0
)
return
null
;
return
ui
.
input
.
getText
().
toString
();
}
private
void
showProgressBar
()
{
ui
.
progressBar
.
setVisibility
(
VISIBLE
);
ui
.
input
.
setVisibility
(
GONE
);
...
...
briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java
View file @
5e5705c7
package
org.briarproject.briar.android.blog
;
import
android.content.Intent
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.text.Editable
;
import
android.text.TextWatcher
;
import
android.support.annotation.Nullable
;
import
android.view.KeyEvent
;
import
android.view.MenuItem
;
import
android.widget.ProgressBar
;
...
...
@@ -14,19 +14,22 @@ import org.briarproject.bramble.api.FormatException;
import
org.briarproject.bramble.api.db.DbException
;
import
org.briarproject.bramble.api.identity.IdentityManager
;
import
org.briarproject.bramble.api.identity.LocalAuthor
;
import
org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault
;
import
org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault
;
import
org.briarproject.bramble.api.sync.GroupId
;
import
org.briarproject.bramble.util.StringUtils
;
import
org.briarproject.briar.R
;
import
org.briarproject.briar.android.activity.ActivityComponent
;
import
org.briarproject.briar.android.activity.BriarActivity
;
import
org.briarproject.briar.android.view.TextInputView
;
import
org.briarproject.briar.android.view.TextInputView.TextInputListener
;
import
org.briarproject.briar.android.view.TextSendController
;
import
org.briarproject.briar.android.view.TextSendController.SendListener
;
import
org.briarproject.briar.api.android.AndroidNotificationManager
;
import
org.briarproject.briar.api.blog.BlogManager
;
import
org.briarproject.briar.api.blog.BlogPost
;
import
org.briarproject.briar.api.blog.BlogPostFactory
;
import
java.security.GeneralSecurityException
;
import
java.util.List
;
import
java.util.logging.Logger
;
import
javax.inject.Inject
;
...
...
@@ -35,10 +38,13 @@ import static android.view.View.GONE;
import
static
android
.
view
.
View
.
VISIBLE
;
import
static
java
.
util
.
logging
.
Level
.
WARNING
;
import
static
org
.
briarproject
.
bramble
.
util
.
LogUtils
.
logException
;
import
static
org
.
briarproject
.
bramble
.
util
.
StringUtils
.
isNullOrEmpty
;
import
static
org
.
briarproject
.
briar
.
api
.
blog
.
BlogConstants
.
MAX_BLOG_POST_TEXT_LENGTH
;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public
class
WriteBlogPostActivity
extends
BriarActivity
implements
OnEditorActionListener
,
TextInput
Listener
{
implements
OnEditorActionListener
,
Send
Listener
{
private
static
final
Logger
LOG
=
Logger
.
getLogger
(
WriteBlogPostActivity
.
class
.
getName
());
...
...
@@ -58,9 +64,8 @@ public class WriteBlogPostActivity extends BriarActivity
@Inject
volatile
BlogManager
blogManager
;
@SuppressWarnings
(
"ConstantConditions"
)
@Override
public
void
onCreate
(
Bundle
state
)
{
public
void
onCreate
(
@Nullable
Bundle
state
)
{
super
.
onCreate
(
state
);
Intent
i
=
getIntent
();
...
...
@@ -71,24 +76,10 @@ public class WriteBlogPostActivity extends BriarActivity
setContentView
(
R
.
layout
.
activity_write_blog_post
);
input
=
findViewById
(
R
.
id
.
textInput
);
input
.
setSendButtonEnabled
(
false
);
input
.
addTextChangedListener
(
new
TextWatcher
()
{
@Override
public
void
beforeTextChanged
(
CharSequence
s
,
int
start
,
int
count
,
int
after
)
{
}
@Override
public
void
onTextChanged
(
CharSequence
s
,
int
start
,
int
before
,
int
count
)
{
}
@Override
public
void
afterTextChanged
(
Editable
s
)
{
enableOrDisablePublishButton
();
}
});
input
.
setListener
(
this
);
TextSendController
sendController
=
new
TextSendController
(
input
,
this
,
false
);
input
.
setSendController
(
sendController
);
input
.
setMaxTextLength
(
MAX_BLOG_POST_TEXT_LENGTH
);
progressBar
=
findViewById
(
R
.
id
.
progressBar
);
}
...
...
@@ -127,18 +118,15 @@ public class WriteBlogPostActivity extends BriarActivity
return
true
;
}
private
void
enableOrDisablePublishButton
()
{
input
.
setSendButtonEnabled
(
input
.
getText
().
length
()
>
0
);
}
@Override
public
void
onSendClick
(
String
text
)
{
public
void
onSendClick
(
@Nullable
String
text
,
List
<
Uri
>
imageUris
)
{
if
(
isNullOrEmpty
(
text
))
throw
new
AssertionError
();
// hide publish button, show progress bar
input
.
hideSoftKeyboard
();
input
.
setVisibility
(
GONE
);
progressBar
.
setVisibility
(
VISIBLE
);
text
=
StringUtils
.
truncateUtf8
(
text
,
MAX_BLOG_POST_TEXT_LENGTH
);
storePost
(
text
);
}
...
...
briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java
View file @
5e5705c7
...
...
@@ -6,6 +6,7 @@ import android.arch.lifecycle.ViewModelProvider;
import
android.arch.lifecycle.ViewModelProviders
;
import
android.content.DialogInterface
;
import
android.content.Intent
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.UiThread
;
...
...
@@ -52,7 +53,6 @@ import org.briarproject.bramble.api.sync.Message;
import
org.briarproject.bramble.api.sync.MessageId
;
import
org.briarproject.bramble.api.sync.event.MessagesAckedEvent
;
import
org.briarproject.bramble.api.sync.event.MessagesSentEvent
;
import
org.briarproject.bramble.util.StringUtils
;
import
org.briarproject.briar.R
;
import
org.briarproject.briar.android.activity.ActivityComponent
;
import
org.briarproject.briar.android.activity.BriarActivity
;
...
...
@@ -63,8 +63,12 @@ import org.briarproject.briar.android.forum.ForumActivity;
import
org.briarproject.briar.android.introduction.IntroductionActivity
;
import
org.briarproject.briar.android.privategroup.conversation.GroupActivity
;
import
org.briarproject.briar.android.view.BriarRecyclerView
;
import
org.briarproject.briar.android.view.ImagePreview
;
import
org.briarproject.briar.android.view.TextAttachmentController
;
import
org.briarproject.briar.android.view.TextAttachmentController.AttachImageListener
;
import
org.briarproject.briar.android.view.TextInputView
;
import
org.briarproject.briar.android.view.TextInputView.TextInputListener
;
import
org.briarproject.briar.android.view.TextSendController
;
import
org.briarproject.briar.android.view.TextSendController.SendListener
;
import
org.briarproject.briar.api.android.AndroidNotificationManager
;
import
org.briarproject.briar.api.blog.BlogSharingManager
;
import
org.briarproject.briar.api.client.ProtocolStateException
;
...
...
@@ -106,6 +110,7 @@ import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAn
import
static
android
.
support
.
v4
.
view
.
ViewCompat
.
setTransitionName
;
import
static
android
.
support
.
v7
.
util
.
SortedList
.
INVALID_POSITION
;
import
static
android
.
view
.
Gravity
.
RIGHT
;
import
static
android
.
widget
.
Toast
.
LENGTH_LONG
;
import
static
android
.
widget
.
Toast
.
LENGTH_SHORT
;
import
static
java
.
util
.
Collections
.
emptyList
;
import
static
java
.
util
.
Collections
.
sort
;
...
...
@@ -115,6 +120,9 @@ import static java.util.logging.Level.WARNING;
import
static
org
.
briarproject
.
bramble
.
util
.
LogUtils
.
logDuration
;
import
static
org
.
briarproject
.
bramble
.
util
.
LogUtils
.
logException
;
import
static
org
.
briarproject
.
bramble
.
util
.
LogUtils
.
now
;
import
static
org
.
briarproject
.
bramble
.
util
.
StringUtils
.
isNullOrEmpty
;
import
static
org
.
briarproject
.
briar
.
android
.
TestingConstants
.
FEATURE_FLAG_IMAGE_ATTACHMENTS
;
import
static
org
.
briarproject
.
briar
.
android
.
activity
.
RequestCodes
.
REQUEST_ATTACH_IMAGE
;
import
static
org
.
briarproject
.
briar
.
android
.
activity
.
RequestCodes
.
REQUEST_INTRODUCTION
;
import
static
org
.
briarproject
.
briar
.
android
.
conversation
.
ImageActivity
.
ATTACHMENT
;
import
static
org
.
briarproject
.
briar
.
android
.
conversation
.
ImageActivity
.
DATE
;
...
...
@@ -130,8 +138,8 @@ import static uk.co.samuelwall.materialtaptargetprompt.MaterialTapTargetPrompt.S
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public
class
ConversationActivity
extends
BriarActivity
implements
EventListener
,
ConversationListener
,
TextInput
Listener
,
TextCache
,
AttachmentCache
{
implements
EventListener
,
ConversationListener
,
Send
Listener
,
TextCache
,
AttachmentCache
,
AttachImageListener
{
public
static
final
String
CONTACT_ID
=
"briar.CONTACT_ID"
;
...
...
@@ -161,6 +169,7 @@ public class ConversationActivity extends BriarActivity
private
BriarRecyclerView
list
;
private
LinearLayoutManager
layoutManager
;
private
TextInputView
textInputView
;
private
TextSendController
sendController
;
// Fields that are accessed from background threads must be volatile
@Inject
...
...
@@ -250,7 +259,16 @@ public class ConversationActivity extends BriarActivity
list
.
setEmptyText
(
getString
(
R
.
string
.
no_private_messages
));
textInputView
=
findViewById
(
R
.
id
.
text_input_container
);
textInputView
.
setListener
(
this
);
if
(
FEATURE_FLAG_IMAGE_ATTACHMENTS
)
{
ImagePreview
imagePreview
=
findViewById
(
R
.
id
.
imagePreview
);
sendController
=
new
TextAttachmentController
(
textInputView
,
imagePreview
,
this
,
this
);
}
else
{
sendController
=
new
TextSendController
(
textInputView
,
this
,
false
);
}
textInputView
.
setSendController
(
sendController
);
textInputView
.
setMaxTextLength
(
MAX_PRIVATE_MESSAGE_TEXT_LENGTH
);
textInputView
.
setEnabled
(
false
);
}
@Override
...
...
@@ -267,6 +285,9 @@ public class ConversationActivity extends BriarActivity
Snackbar
.
LENGTH_SHORT
);
snackbar
.
getView
().
setBackgroundResource
(
R
.
color
.
briar_primary
);
snackbar
.
show
();
}
else
if
(
request
==
REQUEST_ATTACH_IMAGE
&&
result
==
RESULT_OK
)
{
// remove cast when removing FEATURE_FLAG_IMAGE_ATTACHMENTS
((
TextAttachmentController
)
sendController
).
onImageReceived
(
data
);
}
}
...
...
@@ -405,7 +426,7 @@ public class ConversationActivity extends BriarActivity
runOnUiThreadUnlessDestroyed
(()
->
{
if
(
revision
==
adapter
.
getRevision
())
{
adapter
.
incrementRevision
();
textInputView
.
set
SendButton
Enabled
(
true
);
textInputView
.
setEnabled
(
true
);
List
<
ConversationItem
>
items
=
createItems
(
headers
);
adapter
.
addAll
(
items
);
list
.
showData
();
...
...
@@ -573,14 +594,23 @@ public class ConversationActivity extends BriarActivity
}
@Override
public
void
onSendClick
(
String
text
)
{
if
(
text
.
isEmpty
())
return
;
text
=
StringUtils
.
truncateUtf8
(
text
,
MAX_PRIVATE_MESSAGE_TEXT_LENGTH
);
public
void
onAttachImage
(
Intent
intent
)
{
startActivityForResult
(
intent
,
REQUEST_ATTACH_IMAGE
);
}
@Override
public
void
onSendClick
(
@Nullable
String
text
,
List
<
Uri
>
imageUris
)
{
if
(!
imageUris
.
isEmpty
())
{
Toast
.
makeText
(
this
,
"Not yet implemented."
,
LENGTH_LONG
).
show
();
textInputView
.
clearText
();
return
;
}
if
(
isNullOrEmpty
(
text
))
throw
new
AssertionError
();
long
timestamp
=
System
.
currentTimeMillis
();
timestamp
=
Math
.
max
(
timestamp
,
getMinTimestampForNewMessage
());
if
(
messagingGroupId
==
null
)
loadGroupId
(
text
,
timestamp
);
else
createMessage
(
text
,
timestamp
);
textInputView
.
set
Text
(
""
);
textInputView
.
clear
Text
();
}
private
long
getMinTimestampForNewMessage
()
{
...
...
briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java
View file @
5e5705c7
package
org.briarproject.briar.android.introduction
;
import
android.content.Context
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.Nullable
;
import
android.support.v7.app.ActionBar
;
import
android.view.LayoutInflater
;
...
...
@@ -17,14 +17,17 @@ import org.briarproject.bramble.api.contact.Contact;
import
org.briarproject.bramble.api.contact.ContactId
;
import
org.briarproject.bramble.api.contact.ContactManager
;
import
org.briarproject.bramble.api.db.DbException
;
import
org.briarproject.bramble.util.StringUtils
;
import
org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault
;
import
org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault
;
import
org.briarproject.briar.R
;
import
org.briarproject.briar.android.activity.ActivityComponent
;
import
org.briarproject.briar.android.fragment.BaseFragment
;
import
org.briarproject.briar.android.view.TextInputView
;
import
org.briarproject.briar.android.view.TextInputView.TextInputListener
;
import
org.briarproject.briar.android.view.TextSendController
;
import
org.briarproject.briar.android.view.TextSendController.SendListener
;
import
org.briarproject.briar.api.introduction.IntroductionManager
;
import
java.util.List
;
import
java.util.logging.Logger
;
import
javax.inject.Inject
;
...
...
@@ -41,8 +44,10 @@ import static org.briarproject.bramble.util.LogUtils.logException;
import
static
org
.
briarproject
.
briar
.
android
.
util
.
UiUtils
.
getContactDisplayName
;
import
static
org
.
briarproject
.
briar
.
api
.
introduction
.
IntroductionConstants
.
MAX_INTRODUCTION_TEXT_LENGTH
;
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public
class
IntroductionMessageFragment
extends
BaseFragment
implements
TextInput
Listener
{
implements
Send
Listener
{
public
static
final
String
TAG
=
IntroductionMessageFragment
.
class
.
getName
();
...
...
@@ -84,8 +89,9 @@ public class IntroductionMessageFragment extends BaseFragment
}
@Override
public
View
onCreateView
(
@NonNull
LayoutInflater
inflater
,
ViewGroup
container
,
Bundle
savedInstanceState
)
{
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
// change toolbar text
ActionBar
actionBar
=
introductionActivity
.
getSupportActionBar
();
...
...
@@ -97,7 +103,11 @@ public class IntroductionMessageFragment extends BaseFragment
View
v
=
inflater
.
inflate
(
R
.
layout
.
introduction_message
,
container
,
false
);
ui
=
new
ViewHolder
(
v
);
ui
.
message
.
setSendButtonEnabled
(
false
);
TextSendController
sendController
=
new
TextSendController
(
ui
.
message
,
this
,
true
);
ui
.
message
.
setSendController
(
sendController
);
ui
.
message
.
setMaxTextLength
(
MAX_INTRODUCTION_TEXT_LENGTH
);
ui
.
message
.
setEnabled
(
false
);
return
v
;
}
...
...
@@ -156,13 +166,10 @@ public class IntroductionMessageFragment extends BaseFragment
ui
.
progressBar
.
setVisibility
(
GONE
);
if
(
possible
)
{
// set button action
ui
.
message
.
setListener
(
IntroductionMessageFragment
.
this
);
// show views
ui
.
notPossible
.
setVisibility
(
GONE
);
ui
.
message
.
setVisibility
(
VISIBLE
);
ui
.
message
.
set
SendButton
Enabled
(
true
);
ui
.
message
.
setEnabled
(
true
);
ui
.
message
.
showSoftKeyboard
();
}
else
{
ui
.
notPossible
.
setVisibility
(
VISIBLE
);
...
...
@@ -184,14 +191,11 @@ public class IntroductionMessageFragment extends BaseFragment
}
@Override
public
void
onSendClick
(
@N
onN
ull
String
text
)
{
public
void
onSendClick
(
@Null
able
String
text
,
List
<
Uri
>
imageUris
)
{
// disable button to prevent accidental double invitations
ui
.
message
.
set
SendButton
Enabled
(
false
);
ui
.
message
.
setEnabled
(
false
);
String
txt
=
ui
.
message
.
getText
().
toString
();
if
(
txt
.
isEmpty
())
txt
=
null
;
else
txt
=
StringUtils
.
truncateUtf8
(
txt
,
MAX_INTRODUCTION_TEXT_LENGTH
);
makeIntroduction
(
contact1
,
contact2
,
txt
);
makeIntroduction
(
contact1
,
contact2
,
text
);
// don't wait for the introduction to be made before finishing activity
introductionActivity
.
hideSoftKeyboard
(
ui
.
message
);
...
...
briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
View file @
5e5705c7
...
...
@@ -196,7 +196,7 @@ public class GroupActivity extends
private
void
setGroupEnabled
(
boolean
enabled
)
{
isDissolved
=
!
enabled
;
textInput
.
set
SendButton
Enabled
(
enabled
);
textInput
.
setEnabled
(
enabled
);
list
.
getRecyclerView
().
setAlpha
(
enabled
?
1
f
:
0.5f
);
if
(!
enabled
)
{
...
...
briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupController.java
View file @
5e5705c7
package
org.briarproject.briar.android.privategroup.creation
;
import
android.support.annotation.Nullable
;
import
org.briarproject.bramble.api.contact.ContactId
;
import
org.briarproject.bramble.api.db.DbException
;
import
org.briarproject.bramble.api.nullsafety.NotNullByDefault
;
...
...
@@ -18,6 +20,7 @@ public interface CreateGroupController
ResultExceptionHandler
<
GroupId
,
DbException
>
result
);
void
sendInvitation
(
GroupId
g
,
Collection
<
ContactId
>
contacts
,
String
text
,
ResultExceptionHandler
<
Void
,
DbException
>
result
);
@Nullable
String
text
,
ResultExceptionHandler
<
Void
,
DbException
>
result
);
}
briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/CreateGroupControllerImpl.java
View file @
5e5705c7
package
org.briarproject.briar.android.privategroup.creation
;
import
android.support.annotation.Nullable
;
import
org.briarproject.bramble.api.contact.Contact
;
import
org.briarproject.bramble.api.contact.ContactId
;
import
org.briarproject.bramble.api.contact.ContactManager
;
...
...
@@ -123,7 +125,8 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
@Override
public
void
sendInvitation
(
GroupId
g
,
Collection
<
ContactId
>
contactIds
,
String
text
,
ResultExceptionHandler
<
Void
,
DbException
>
handler
)
{
@Nullable
String
text
,
ResultExceptionHandler
<
Void
,
DbException
>
handler
)
{
runOnDbThread
(()
->
{
try
{
LocalAuthor
localAuthor
=
identityManager
.
getLocalAuthor
();
...
...
@@ -144,7 +147,7 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
}
private
void
signInvitations
(
GroupId
g
,
LocalAuthor
localAuthor
,
Collection
<
Contact
>
contacts
,
String
text
,
Collection
<
Contact
>
contacts
,
@Nullable
String
text
,
ResultExceptionHandler
<
Void
,
DbException
>
handler
)
{
cryptoExecutor
.
execute
(()
->
{
long
timestamp
=
clock
.
currentTimeMillis
();
...
...
@@ -160,15 +163,14 @@ class CreateGroupControllerImpl extends ContactSelectorControllerImpl
}
private
void
sendInvitations
(
GroupId
g
,
Collection
<
InvitationContext
>
contexts
,
String
text
,
Collection
<
InvitationContext
>
contexts
,
@Nullable
String
text
,
ResultExceptionHandler
<
Void
,
DbException
>
handler
)
{
runOnDbThread
(()
->
{
try
{
String
txt
=
text
.
isEmpty
()
?
null
:
text
;
for
(
InvitationContext
context
:
contexts
)
{
try
{
groupInvitationManager
.
sendInvitation
(
g
,
context
.
contactId
,
txt
,
context
.
timestamp
,
context
.
contactId
,
t
e
xt
,
context
.
timestamp
,
context
.
signature
);
}
catch
(
NoSuchContactException
e
)
{
// Continue
...
...
briar-android/src/main/java/org/briarproject/briar/android/privategroup/creation/GroupInviteActivity.java
View file @
5e5705c7
...
...
@@ -55,7 +55,7 @@ public class GroupInviteActivity extends ContactSelectorActivity
}
@Override
public
boolean
onButtonClick
(
String
text
)
{
public
void
onButtonClick
(
@Nullable
String
text
)
{
if
(
groupId
==
null
)
throw
new
IllegalStateException
(
"GroupId was not initialized"
);
controller
.
sendInvitation
(
groupId
,
contacts
,
text
,
...
...
@@ -72,7 +72,6 @@ public class GroupInviteActivity extends ContactSelectorActivity
handleDbException
(
exception
);
}
});
return
true
;
}
@Override
...
...
briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java
View file @
5e5705c7
package
org.briarproject.briar.android.sharing
;
import
android.content.Context
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.support.annotation.Nullable
;
import
android.support.annotation.StringRes
;
import
android.support.annotation.UiThread
;