Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
briar
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Julian Dehm
briar
Commits
428501cf
Verified
Commit
428501cf
authored
Jul 16, 2018
by
akwizgran
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use vanniktech emoji library.
parent
d8b04edc
Changes
60
Hide whitespace changes
Inline
Side-by-side
Showing
60 changed files
with
255 additions
and
1574 deletions
+255
-1574
bramble-api/src/main/java/org/briarproject/bramble/api/settings/SettingsManager.java
...rg/briarproject/bramble/api/settings/SettingsManager.java
+6
-0
bramble-core/src/main/java/org/briarproject/bramble/settings/SettingsManagerImpl.java
...rg/briarproject/bramble/settings/SettingsManagerImpl.java
+6
-0
briar-android/build.gradle
briar-android/build.gradle
+2
-3
briar-android/proguard-rules.txt
briar-android/proguard-rules.txt
+1
-6
briar-android/src/main/assets/emoji_activity.png
briar-android/src/main/assets/emoji_activity.png
+0
-0
briar-android/src/main/assets/emoji_animals_nature.png
briar-android/src/main/assets/emoji_animals_nature.png
+0
-0
briar-android/src/main/assets/emoji_flags.png
briar-android/src/main/assets/emoji_flags.png
+0
-0
briar-android/src/main/assets/emoji_food_drink.png
briar-android/src/main/assets/emoji_food_drink.png
+0
-0
briar-android/src/main/assets/emoji_objects.png
briar-android/src/main/assets/emoji_objects.png
+0
-0
briar-android/src/main/assets/emoji_smiley_people.png
briar-android/src/main/assets/emoji_smiley_people.png
+0
-0
briar-android/src/main/assets/emoji_symbols.png
briar-android/src/main/assets/emoji_symbols.png
+0
-0
briar-android/src/main/assets/emoji_travel_places.png
briar-android/src/main/assets/emoji_travel_places.png
+0
-0
briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
...java/org/briarproject/briar/android/AndroidComponent.java
+3
-6
briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
...c/main/java/org/briarproject/briar/android/AppModule.java
+11
-0
briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java
.../org/briarproject/briar/android/BriarApplicationImpl.java
+4
-0
briar-android/src/main/java/org/briarproject/briar/android/RecentEmojiImpl.java
.../java/org/briarproject/briar/android/RecentEmojiImpl.java
+114
-0
briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
...riar/android/privategroup/conversation/GroupActivity.java
+0
-1
briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java
...g/briarproject/briar/android/view/LargeTextInputView.java
+11
-9
briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
...va/org/briarproject/briar/android/view/TextInputView.java
+61
-100
briar-android/src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java
...thoughtcrime/securesms/components/RepeatableImageKey.java
+0
-94
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/AnimatingImageSpan.java
...tcrime/securesms/components/emoji/AnimatingImageSpan.java
+0
-15
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiDrawer.java
.../thoughtcrime/securesms/components/emoji/EmojiDrawer.java
+0
-202
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java
...houghtcrime/securesms/components/emoji/EmojiEditText.java
+0
-48
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java
.../thoughtcrime/securesms/components/emoji/EmojiFilter.java
+0
-36
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java
...oughtcrime/securesms/components/emoji/EmojiPageModel.java
+0
-20
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java
...houghtcrime/securesms/components/emoji/EmojiPageView.java
+0
-111
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPages.java
...g/thoughtcrime/securesms/components/emoji/EmojiPages.java
+0
-65
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java
...houghtcrime/securesms/components/emoji/EmojiProvider.java
+0
-306
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java
...rg/thoughtcrime/securesms/components/emoji/EmojiSpan.java
+0
-40
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java
...houghtcrime/securesms/components/emoji/EmojiTextView.java
+0
-62
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java
.../thoughtcrime/securesms/components/emoji/EmojiToggle.java
+0
-62
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiView.java
...rg/thoughtcrime/securesms/components/emoji/EmojiView.java
+0
-88
briar-android/src/main/java/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java
...rime/securesms/components/emoji/StaticEmojiPageModel.java
+0
-74
briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapDecodingException.java
.../thoughtcrime/securesms/util/BitmapDecodingException.java
+0
-12
briar-android/src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java
...main/java/org/thoughtcrime/securesms/util/BitmapUtil.java
+0
-96
briar-android/src/main/res/layout/activity_conversation.xml
briar-android/src/main/res/layout/activity_conversation.xml
+1
-1
briar-android/src/main/res/layout/author_view.xml
briar-android/src/main/res/layout/author_view.xml
+1
-1
briar-android/src/main/res/layout/emoji_drawer.xml
briar-android/src/main/res/layout/emoji_drawer.xml
+0
-52
briar-android/src/main/res/layout/emoji_grid_layout.xml
briar-android/src/main/res/layout/emoji_grid_layout.xml
+0
-19
briar-android/src/main/res/layout/introduction_message.xml
briar-android/src/main/res/layout/introduction_message.xml
+2
-2
briar-android/src/main/res/layout/list_item_blog_comment.xml
briar-android/src/main/res/layout/list_item_blog_comment.xml
+1
-1
briar-android/src/main/res/layout/list_item_blog_post.xml
briar-android/src/main/res/layout/list_item_blog_post.xml
+1
-1
briar-android/src/main/res/layout/list_item_contact.xml
briar-android/src/main/res/layout/list_item_contact.xml
+1
-1
briar-android/src/main/res/layout/list_item_contact_small.xml
...r-android/src/main/res/layout/list_item_contact_small.xml
+1
-1
briar-android/src/main/res/layout/list_item_conversation_msg_in.xml
...oid/src/main/res/layout/list_item_conversation_msg_in.xml
+1
-1
briar-android/src/main/res/layout/list_item_conversation_msg_out.xml
...id/src/main/res/layout/list_item_conversation_msg_out.xml
+1
-1
briar-android/src/main/res/layout/list_item_conversation_notice_in.xml
.../src/main/res/layout/list_item_conversation_notice_in.xml
+2
-2
briar-android/src/main/res/layout/list_item_conversation_notice_out.xml
...src/main/res/layout/list_item_conversation_notice_out.xml
+2
-2
briar-android/src/main/res/layout/list_item_conversation_request.xml
...id/src/main/res/layout/list_item_conversation_request.xml
+2
-2
briar-android/src/main/res/layout/list_item_forum.xml
briar-android/src/main/res/layout/list_item_forum.xml
+1
-1
briar-android/src/main/res/layout/list_item_group.xml
briar-android/src/main/res/layout/list_item_group.xml
+2
-2
briar-android/src/main/res/layout/list_item_group_join_notice.xml
...droid/src/main/res/layout/list_item_group_join_notice.xml
+1
-1
briar-android/src/main/res/layout/list_item_invitations.xml
briar-android/src/main/res/layout/list_item_invitations.xml
+2
-2
briar-android/src/main/res/layout/list_item_revealable_contact.xml
...roid/src/main/res/layout/list_item_revealable_contact.xml
+1
-1
briar-android/src/main/res/layout/list_item_rss_feed.xml
briar-android/src/main/res/layout/list_item_rss_feed.xml
+3
-3
briar-android/src/main/res/layout/list_item_selectable_contact.xml
...roid/src/main/res/layout/list_item_selectable_contact.xml
+1
-1
briar-android/src/main/res/layout/list_item_thread.xml
briar-android/src/main/res/layout/list_item_thread.xml
+1
-1
briar-android/src/main/res/layout/text_input_view.xml
briar-android/src/main/res/layout/text_input_view.xml
+3
-9
briar-android/src/main/res/layout/text_input_view_large.xml
briar-android/src/main/res/layout/text_input_view_large.xml
+3
-8
briar-android/witness.gradle
briar-android/witness.gradle
+2
-2
No files found.
bramble-api/src/main/java/org/briarproject/bramble/api/settings/SettingsManager.java
View file @
428501cf
package
org.briarproject.bramble.api.settings
;
import
org.briarproject.bramble.api.db.DbException
;
import
org.briarproject.bramble.api.db.Transaction
;
import
org.briarproject.bramble.api.nullsafety.NotNullByDefault
;
@NotNullByDefault
...
...
@@ -11,6 +12,11 @@ public interface SettingsManager {
*/
Settings
getSettings
(
String
namespace
)
throws
DbException
;
/**
* Returns all settings in the given namespace.
*/
Settings
getSettings
(
Transaction
txn
,
String
namespace
)
throws
DbException
;
/**
* Merges the given settings with any existing settings in the given
* namespace.
...
...
bramble-core/src/main/java/org/briarproject/bramble/settings/SettingsManagerImpl.java
View file @
428501cf
...
...
@@ -34,6 +34,12 @@ class SettingsManagerImpl implements SettingsManager {
return
s
;
}
@Override
public
Settings
getSettings
(
Transaction
txn
,
String
namespace
)
throws
DbException
{
return
db
.
getSettings
(
txn
,
namespace
);
}
@Override
public
void
mergeSettings
(
Settings
s
,
String
namespace
)
throws
DbException
{
Transaction
txn
=
db
.
startTransaction
(
false
);
...
...
briar-android/build.gradle
View file @
428501cf
...
...
@@ -31,9 +31,8 @@ dependencies {
implementation
'info.guardianproject.trustedintents:trustedintents:0.2'
implementation
'de.hdodenhof:circleimageview:2.2.0'
implementation
'com.google.zxing:core:3.3.0'
implementation
'com.jpardogo.materialtabstrip:library:1.1.0'
implementation
'com.github.bumptech.glide:glide:3.8.0'
implementation
'uk.co.samuelwall:material-tap-target-prompt:2.8.0'
implementation
'com.vanniktech:emoji-google:0.5.1'
annotationProcessor
'com.google.dagger:dagger-compiler:2.0.2'
...
...
@@ -80,7 +79,7 @@ android {
buildToolsVersion
'27.0.3'
defaultConfig
{
minSdkVersion
1
4
minSdkVersion
1
5
targetSdkVersion
26
versionCode
10013
versionName
"1.0.13"
...
...
briar-android/proguard-rules.txt
View file @
428501cf
...
...
@@ -27,9 +27,4 @@
-dontnote org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout
# Emoji
-keep class org.thoughtcrime.securesms.**
-keep class com.astuetz.PagerSlidingTabStrip$OnTabReselectedListener
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
-keep class com.vanniktech.emoji.**
briar-android/src/main/assets/emoji_activity.png
deleted
100644 → 0
View file @
d8b04edc
244 KB
briar-android/src/main/assets/emoji_animals_nature.png
deleted
100644 → 0
View file @
d8b04edc
349 KB
briar-android/src/main/assets/emoji_flags.png
deleted
100644 → 0
View file @
d8b04edc
901 KB
briar-android/src/main/assets/emoji_food_drink.png
deleted
100644 → 0
View file @
d8b04edc
258 KB
briar-android/src/main/assets/emoji_objects.png
deleted
100644 → 0
View file @
d8b04edc
478 KB
briar-android/src/main/assets/emoji_smiley_people.png
deleted
100644 → 0
View file @
d8b04edc
650 KB
briar-android/src/main/assets/emoji_symbols.png
deleted
100644 → 0
View file @
d8b04edc
412 KB
briar-android/src/main/assets/emoji_travel_places.png
deleted
100644 → 0
View file @
d8b04edc
547 KB
briar-android/src/main/java/org/briarproject/briar/android/AndroidComponent.java
View file @
428501cf
...
...
@@ -28,6 +28,7 @@ import org.briarproject.briar.BriarCoreEagerSingletons;
import
org.briarproject.briar.BriarCoreModule
;
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.api.android.AndroidNotificationManager
;
import
org.briarproject.briar.api.android.DozeWatchdog
;
import
org.briarproject.briar.api.android.LockManager
;
...
...
@@ -49,8 +50,6 @@ import org.briarproject.briar.api.privategroup.PrivateGroupManager;
import
org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory
;
import
org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager
;
import
org.briarproject.briar.api.test.TestDataCreator
;
import
org.thoughtcrime.securesms.components.emoji.EmojiProvider
;
import
org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel
;
import
java.util.concurrent.Executor
;
...
...
@@ -161,12 +160,10 @@ public interface AndroidComponent
void
inject
(
BriarReportSender
briarReportSender
);
void
inject
(
EmojiProvider
emojiProvider
);
void
inject
(
RecentEmojiPageModel
recentEmojiPageModel
);
void
inject
(
NotificationCleanupService
notificationCleanupService
);
void
inject
(
TextInputView
textInputView
);
// Eager singleton load
void
inject
(
AppModule
.
EagerSingletons
init
);
}
briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
View file @
428501cf
...
...
@@ -5,6 +5,8 @@ import android.content.Context;
import
android.content.SharedPreferences
;
import
android.os.StrictMode
;
import
com.vanniktech.emoji.RecentEmoji
;
import
org.briarproject.bramble.api.crypto.CryptoComponent
;
import
org.briarproject.bramble.api.crypto.PublicKey
;
import
org.briarproject.bramble.api.db.DatabaseConfig
;
...
...
@@ -65,6 +67,8 @@ public class AppModule {
NetworkUsageLogger
networkUsageLogger
;
@Inject
DozeWatchdog
dozeWatchdog
;
@Inject
RecentEmoji
recentEmoji
;
}
private
final
Application
application
;
...
...
@@ -211,4 +215,11 @@ public class AppModule {
return
lockManager
;
}
@Provides
@Singleton
RecentEmoji
provideRecentEmoji
(
LifecycleManager
lifecycleManager
,
RecentEmojiImpl
recentEmoji
)
{
lifecycleManager
.
registerClient
(
recentEmoji
);
return
recentEmoji
;
}
}
briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java
View file @
428501cf
...
...
@@ -9,6 +9,9 @@ import android.os.StrictMode.ThreadPolicy;
import
android.os.StrictMode.VmPolicy
;
import
android.preference.PreferenceManager
;
import
com.vanniktech.emoji.EmojiManager
;
import
com.vanniktech.emoji.google.GoogleEmojiProvider
;
import
org.acra.ACRA
;
import
org.acra.ReportingInteractionMode
;
import
org.acra.annotation.ReportsCrashes
;
...
...
@@ -89,6 +92,7 @@ public class BriarApplicationImpl extends Application
Localizer
.
getInstance
().
setLocale
(
base
));
setTheme
(
base
,
prefs
);
ACRA
.
init
(
this
);
EmojiManager
.
install
(
new
GoogleEmojiProvider
());
}
@Override
...
...
briar-android/src/main/java/org/
thoughtcrime/securesms/components/emoji/RecentEmojiPageMode
l.java
→
briar-android/src/main/java/org/
briarproject/briar/android/RecentEmojiImp
l.java
View file @
428501cf
package
org.
thoughtcrime.securesms.components.emoji
;
package
org.
briarproject.briar.android
;
import
android.content.Context
;
import
android.support.annotation.DrawableRes
;
import
com.vanniktech.emoji.EmojiRange
;
import
com.vanniktech.emoji.EmojiUtils
;
import
com.vanniktech.emoji.RecentEmoji
;
import
com.vanniktech.emoji.emoji.Emoji
;
import
org.briarproject.bramble.api.db.DatabaseExecutor
;
import
org.briarproject.bramble.api.db.DbException
;
import
org.briarproject.bramble.api.db.Transaction
;
import
org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault
;
import
org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault
;
import
org.briarproject.bramble.api.settings.Settings
;
import
org.briarproject.bramble.api.settings.SettingsManager
;
import
org.briarproject.bramble.api.sync.Client
;
import
org.briarproject.bramble.api.system.AndroidExecutor
;
import
org.briarproject.bramble.util.StringUtils
;
import
org.briarproject.briar.R
;
import
org.briarproject.briar.android.BriarApplication
;
import
java.util.Collections
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Iterator
;
import
java.util.LinkedHashSet
;
import
java.util.concurrent.Executor
;
import
java.util.logging.Logger
;
import
javax.annotation.Nullable
;
import
javax.inject.Inject
;
import
static
java
.
util
.
logging
.
Level
.
WARNING
;
...
...
@@ -28,85 +31,72 @@ import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public
class
RecentEmojiPageModel
implements
EmojiPageModel
{
class
RecentEmojiImpl
implements
RecentEmoji
,
Client
{
private
static
final
Logger
LOG
=
Logger
.
getLogger
(
RecentEmoji
PageMode
l
.
class
.
getName
());
Logger
.
getLogger
(
RecentEmoji
Imp
l
.
class
.
getName
());
private
static
final
String
EMOJI_LRU_PREFERENCE
=
"pref_emoji_recent2"
;
private
static
final
int
EMOJI_LRU_SIZE
=
50
;
private
final
LinkedHashSet
<
String
>
recentlyUsed
;
// UI thread
// UI thread
private
final
LinkedHashSet
<
Emoji
>
recentlyUsed
=
new
LinkedHashSet
<>();
@Inject
SettingsManager
settingsManager
;
private
final
Executor
dbExecutor
;
private
final
AndroidExecutor
androidExecutor
;
private
final
SettingsManager
settingsManager
;
@Inject
@DatabaseExecutor
Executor
dbExecutor
;
RecentEmojiPageModel
(
Context
context
)
{
BriarApplication
app
=
(
BriarApplication
)
context
.
getApplicationContext
();
app
.
getApplicationComponent
().
inject
(
this
);
recentlyUsed
=
getPersistedCache
();
}
private
LinkedHashSet
<
String
>
getPersistedCache
()
{
String
serialized
;
try
{
// FIXME: Don't make DB calls on the UI thread
Settings
settings
=
settingsManager
.
getSettings
(
SETTINGS_NAMESPACE
);
serialized
=
settings
.
get
(
EMOJI_LRU_PREFERENCE
);
}
catch
(
DbException
e
)
{
logException
(
LOG
,
WARNING
,
e
);
serialized
=
null
;
}
return
deserialize
(
serialized
);
RecentEmojiImpl
(
@DatabaseExecutor
Executor
dbExecutor
,
AndroidExecutor
androidExecutor
,
SettingsManager
settingsManager
)
{
this
.
dbExecutor
=
dbExecutor
;
this
.
androidExecutor
=
androidExecutor
;
this
.
settingsManager
=
settingsManager
;
}
@DrawableRes
@Override
public
int
getIcon
()
{
return
R
.
drawable
.
ic_emoji_recent
;
public
Collection
<
Emoji
>
getRecentEmojis
()
{
return
new
ArrayList
<>(
recentlyUsed
)
;
}
@Override
public
String
[]
getEmoji
()
{
return
toReversePrimitiveArray
(
recentlyUsed
);
}
@Override
public
boolean
hasSpriteMap
()
{
return
false
;
}
@Override
public
String
getSprite
()
{
return
null
;
}
void
onCodePointSelected
(
String
emoji
)
{
public
void
addEmoji
(
Emoji
emoji
)
{
recentlyUsed
.
remove
(
emoji
);
recentlyUsed
.
add
(
emoji
);
if
(
recentlyUsed
.
size
()
>
EMOJI_LRU_SIZE
)
{
Iterator
<
String
>
iterator
=
recentlyUsed
.
iterator
();
Iterator
<
Emoji
>
iterator
=
recentlyUsed
.
iterator
();
iterator
.
next
();
iterator
.
remove
();
}
save
(
serialize
(
recentlyUsed
));
}
private
String
serialize
(
LinkedHashSet
<
String
>
emojis
)
{
return
StringUtils
.
join
(
emojis
,
"\t"
);
@Override
public
void
persist
()
{
if
(!
recentlyUsed
.
isEmpty
())
save
(
serialize
(
recentlyUsed
));
}
@Override
public
void
createLocalState
(
Transaction
txn
)
throws
DbException
{
Settings
settings
=
settingsManager
.
getSettings
(
txn
,
SETTINGS_NAMESPACE
);
String
serialized
=
settings
.
get
(
EMOJI_LRU_PREFERENCE
);
if
(
serialized
!=
null
)
{
androidExecutor
.
runOnUiThread
(()
->
recentlyUsed
.
addAll
(
deserialize
(
serialized
)));
}
}
private
LinkedHashSet
<
String
>
deserialize
(
@Nullable
String
serialized
)
{
if
(
serialized
==
null
)
return
new
LinkedHashSet
<>();
String
[]
list
=
serialized
.
split
(
"\t"
);
LinkedHashSet
<
String
>
result
=
new
LinkedHashSet
<>(
list
.
length
);
Collections
.
addAll
(
result
,
list
);
private
String
serialize
(
Collection
<
Emoji
>
emojis
)
{
Collection
<
String
>
strings
=
new
ArrayList
<>(
emojis
.
size
());
for
(
Emoji
emoji
:
emojis
)
strings
.
add
(
emoji
.
getUnicode
());
return
StringUtils
.
join
(
strings
,
"\t"
);
}
private
Collection
<
Emoji
>
deserialize
(
String
serialized
)
{
Collection
<
EmojiRange
>
ranges
=
EmojiUtils
.
emojis
(
serialized
);
Collection
<
Emoji
>
result
=
new
ArrayList
<>(
ranges
.
size
());
for
(
EmojiRange
range
:
ranges
)
result
.
add
(
range
.
emoji
);
return
result
;
}
...
...
@@ -121,13 +111,4 @@ public class RecentEmojiPageModel implements EmojiPageModel {
}
});
}
private
String
[]
toReversePrimitiveArray
(
LinkedHashSet
<
String
>
emojiSet
)
{
String
[]
emojis
=
new
String
[
emojiSet
.
size
()];
int
i
=
emojiSet
.
size
()
-
1
;
for
(
String
emoji
:
emojiSet
)
{
emojis
[
i
--]
=
emoji
;
}
return
emojis
;
}
}
briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java
View file @
428501cf
...
...
@@ -202,7 +202,6 @@ public class GroupActivity extends
if
(!
enabled
)
{
textInput
.
setVisibility
(
GONE
);
if
(
textInput
.
isKeyboardOpen
())
textInput
.
hideSoftKeyboard
();
if
(
textInput
.
isEmojiDrawerOpen
())
textInput
.
hideEmojiDrawer
();
}
else
{
textInput
.
setVisibility
(
VISIBLE
);
}
...
...
briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java
View file @
428501cf
...
...
@@ -8,6 +8,8 @@ import android.view.LayoutInflater;
import
android.view.ViewGroup
;
import
android.widget.Button
;
import
org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault
;
import
org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault
;
import
org.briarproject.briar.R
;
import
javax.annotation.Nullable
;
...
...
@@ -15,6 +17,8 @@ import javax.annotation.Nullable;
import
static
android
.
view
.
ViewGroup
.
LayoutParams
.
MATCH_PARENT
;
@UiThread
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public
class
LargeTextInputView
extends
TextInputView
{
public
LargeTextInputView
(
Context
context
)
{
...
...
@@ -46,30 +50,28 @@ public class LargeTextInputView extends TextInputView {
R
.
styleable
.
LargeTextInputView
);
String
buttonText
=
attributes
.
getString
(
R
.
styleable
.
LargeTextInputView_buttonText
);
int
maxLines
=
attributes
.
getInteger
(
R
.
styleable
.
LargeTextInputView_maxLines
,
0
);
int
maxLines
=
attributes
.
getInteger
(
R
.
styleable
.
LargeTextInputView_maxLines
,
0
);
boolean
fillHeight
=
attributes
.
getBoolean
(
R
.
styleable
.
LargeTextInputView_fillHeight
,
false
);
.
getBoolean
(
R
.
styleable
.
LargeTextInputView_fillHeight
,
false
);
attributes
.
recycle
();
if
(
buttonText
!=
null
)
setButtonText
(
buttonText
);
if
(
maxLines
>
0
)
ui
.
editText
.
setMaxLines
(
maxLines
);
if
(
maxLines
>
0
)
editText
.
setMaxLines
(
maxLines
);
if
(
fillHeight
)
{
ViewGroup
layout
=
findViewById
(
R
.
id
.
input_layout
);
LayoutParams
params
=
(
LayoutParams
)
layout
.
getLayoutParams
();
params
.
height
=
0
;
params
.
weight
=
1
;
layout
.
setLayoutParams
(
params
);
ViewGroup
.
LayoutParams
editParams
=
ui
.
editText
.
getLayoutParams
();
ViewGroup
.
LayoutParams
editParams
=
editText
.
getLayoutParams
();
editParams
.
height
=
MATCH_PARENT
;
ui
.
editText
.
setLayoutParams
(
editParams
);
editText
.
setLayoutParams
(
editParams
);
}
}
public
void
setButtonText
(
String
text
)
{
((
Button
)
ui
.
sendButton
).
setText
(
text
);
((
Button
)
sendButton
).
setText
(
text
);
}
}
briar-android/src/main/java/org/briarproject/briar/android/view/TextInputView.java
View file @
428501cf
...
...
@@ -8,35 +8,47 @@ import android.os.IBinder;
import
android.support.annotation.CallSuper
;
import
android.support.annotation.StringRes
;
import
android.support.annotation.UiThread
;
import
android.support.v7.widget.AppCompatImageButton
;
import
android.text.Editable
;
import
android.text.TextWatcher
;
import
android.util.AttributeSet
;
import
android.view.KeyEvent
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.inputmethod.InputMethodManager
;
import
com.vanniktech.emoji.EmojiEditText
;
import
com.vanniktech.emoji.EmojiPopup
;
import
com.vanniktech.emoji.RecentEmoji
;
import
org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault
;
import
org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault
;
import
org.briarproject.briar.R
;
import
org.briarproject.briar.android.BriarApplication
;
import
org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout
;
import
org.thoughtcrime.securesms.components.emoji.EmojiDrawer
;
import
org.thoughtcrime.securesms.components.emoji.EmojiDrawer.EmojiEventListener
;
import
org.thoughtcrime.securesms.components.emoji.EmojiEditText
;
import
org.thoughtcrime.securesms.components.emoji.EmojiToggle
;
import
javax.annotation.Nullable
;
import
javax.inject.Inject
;
import
static
android
.
content
.
Context
.
INPUT_METHOD_SERVICE
;
import
static
android
.
content
.
Context
.
LAYOUT_INFLATER_SERVICE
;
import
static
android
.
view
.
KeyEvent
.
KEYCODE_BACK
;
import
static
android
.
view
.
KeyEvent
.
KEYCODE_ENTER
;
import
static
android
.
view
.
inputmethod
.
InputMethodManager
.
SHOW_IMPLICIT
;
@UiThread
public
class
TextInputView
extends
KeyboardAwareLinearLayout
implements
EmojiEventListener
{
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public
class
TextInputView
extends
KeyboardAwareLinearLayout
{
@Inject
RecentEmoji
recentEmoji
;
@Nullable
TextInputListener
listener
;
protected
final
ViewHolder
ui
;
protected
TextInputListener
listener
;
AppCompatImageButton
emojiToggle
;
EmojiEditText
editText
;
EmojiPopup
emojiPopup
;
View
sendButton
;
public
TextInputView
(
Context
context
)
{
this
(
context
,
null
);
...
...
@@ -49,11 +61,12 @@ public class TextInputView extends KeyboardAwareLinearLayout
public
TextInputView
(
Context
context
,
@Nullable
AttributeSet
attrs
,
int
defStyleAttr
)
{
super
(
context
,
attrs
,
defStyleAttr
);
BriarApplication
app
=
(
BriarApplication
)
context
.
getApplicationContext
();
app
.
getApplicationComponent
().
inject
(
this
);
setOrientation
(
VERTICAL
);
setLayoutTransition
(
new
LayoutTransition
());
inflateLayout
(
context
);
ui
=
new
ViewHolder
();
setUpViews
(
context
,
attrs
);
}
...
...
@@ -65,89 +78,79 @@ public class TextInputView extends KeyboardAwareLinearLayout
@CallSuper
protected
void
setUpViews
(
Context
context
,
@Nullable
AttributeSet
attrs
)
{
emojiToggle
=
findViewById
(
R
.
id
.
emoji_toggle
);
editText
=
findViewById
(
R
.
id
.
input_text
);
emojiPopup
=
EmojiPopup
.
Builder
.
fromRootView
(
this
)
.
setRecentEmoji
(
recentEmoji
)
.
setOnEmojiPopupShownListener
(
this
::
showKeyboardIcon
)
.
setOnEmojiPopupDismissListener
(
this
::
showEmojiIcon
)
.
build
(
editText
);
sendButton
=
findViewById
(
R
.
id
.
btn_send
);
// get attributes
TypedArray
attributes
=
context
.
obtainStyledAttributes
(
attrs
,
R
.
styleable
.
TextInputView
);
String
hint
=
attributes
.
getString
(
R
.
styleable
.
TextInputView_hint
);
attributes
.
recycle
();
if
(
hint
!=
null
)
{
ui
.
editText
.
setHint
(
hint
);
}
if
(
hint
!=
null
)
editText
.
setHint
(
hint
);
ui
.
emojiToggle
.
attach
(
ui
.
emojiDrawer
);
ui
.
emojiToggle
.
setOnClickListener
(
v
->
onEmojiToggleClicked
());
ui
.
editText
.
setOnClickListener
(
v
->
showSoftKeyboard
());
ui
.
editText
.
setOnKeyListener
((
v
,
keyCode
,
event
)
->
{
if
(
keyCode
==
KEYCODE_BACK
&&
isEmojiDrawerOpen
())
{
hideEmojiDrawer
();
return
true
;
}
emojiToggle
.
setOnClickListener
(
v
->
emojiPopup
.
toggle
());
editText
.
setOnClickListener
(
v
->
showSoftKeyboard
());
editText
.
setOnKeyListener
((
v
,
keyCode
,
event
)
->
{
if
(
keyCode
==
KEYCODE_ENTER
&&
event
.
isCtrlPressed
())
{
trySendMessage
();
return
true
;
}
return
false
;
});
ui
.
sendButton
.
setOnClickListener
(
v
->
trySendMessage
());
ui
.
emojiDrawer
.
setEmojiEventListener
(
this
);
sendButton
.
setOnClickListener
(
v
->
trySendMessage
());
}
private
void
trySendMessage
()
{
if
(
listener
!=
null
)
{
listener
.
onSendClick
(
ui
.
editText
.
getText
().
toString
());
}
private
void
showEmojiIcon
()
{
emojiToggle
.
setImageResource
(
R
.
drawable
.
ic_emoji_toggle
);
}
@Override
public
void
setVisibility
(
int
visibility
)
{
if
(
visibility
==
GONE
&&
isKeyboardOpen
())
{
onKeyboardClose
();
}
super
.
setVisibility
(
visibility
);
private
void
showKeyboardIcon
()
{
emojiToggle
.
setImageResource
(
R
.
drawable
.
ic_keyboard
);
}
@Override
public
void
onKeyEvent
(
KeyEvent
keyEvent
)
{
ui
.
editText
.
dispatchKeyEvent
(
keyEvent
);
}
@Override
public
void
onEmojiSelected
(
String
emoji
)
{
ui
.
editText
.
insertEmoji
(
emoji
);
private
void
trySendMessage
()
{
if
(
listener
!=
null
)
{
listener
.
onSendClick
(
editText
.
getText
().
toString
());
}
}
@Override
public
boolean
requestFocus
(
int
direction
,
Rect
previouslyFocusedRect
)
{
return
ui
.
editText
.
requestFocus
(
direction
,
previouslyFocusedRect
);
return
editText
.
requestFocus
(
direction
,
previouslyFocusedRect
);
}
private
void
onEmojiToggleClicked
()
{
if
(
isEmojiDrawerOpen
())
{
showSoftKeyboard
();
}
else
{
showEmojiDrawer
();
}
@Override
public
void
onDetachedFromWindow
()
{
super
.
onDetachedFromWindow
();
if
(
emojiPopup
.
isShowing
())
emojiPopup
.
dismiss
();
}
public
void
setText
(
String
text
)
{
ui
.
editText
.
setText
(
text
);
editText
.
setText
(
text
);
}
public
Editable
getText
()
{
return
ui
.
editText
.
getText
();
return
editText
.
getText
();
}
public
void
setHint
(
@StringRes
int
res
)
{
ui
.
editText
.
setHint
(
res
);
editText
.
setHint
(
res
);
}