mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-18 21:59:54 +01:00
Don't assume Context is a BaseActivity.
This commit is contained in:
@@ -43,6 +43,8 @@ import org.briarproject.briar.api.privategroup.PrivateGroupFactory;
|
|||||||
import org.briarproject.briar.api.privategroup.PrivateGroupManager;
|
import org.briarproject.briar.api.privategroup.PrivateGroupManager;
|
||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory;
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationFactory;
|
||||||
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
|
import org.briarproject.briar.api.privategroup.invitation.GroupInvitationManager;
|
||||||
|
import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
|
||||||
|
import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@@ -138,10 +140,14 @@ public interface AndroidComponent
|
|||||||
@IoExecutor
|
@IoExecutor
|
||||||
Executor ioExecutor();
|
Executor ioExecutor();
|
||||||
|
|
||||||
void inject(BriarService activity);
|
void inject(BriarService briarService);
|
||||||
|
|
||||||
void inject(BriarReportSender briarReportSender);
|
void inject(BriarReportSender briarReportSender);
|
||||||
|
|
||||||
|
void inject(EmojiProvider emojiProvider);
|
||||||
|
|
||||||
|
void inject(RecentEmojiPageModel recentEmojiPageModel);
|
||||||
|
|
||||||
// Eager singleton load
|
// Eager singleton load
|
||||||
void inject(AppModule.EagerSingletons init);
|
void inject(AppModule.EagerSingletons init);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,8 +64,6 @@ import org.briarproject.briar.android.sharing.ShareForumFragment;
|
|||||||
import org.briarproject.briar.android.sharing.ShareForumMessageFragment;
|
import org.briarproject.briar.android.sharing.ShareForumMessageFragment;
|
||||||
import org.briarproject.briar.android.sharing.SharingModule;
|
import org.briarproject.briar.android.sharing.SharingModule;
|
||||||
import org.briarproject.briar.android.splash.SplashScreenActivity;
|
import org.briarproject.briar.android.splash.SplashScreenActivity;
|
||||||
import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
|
|
||||||
import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel;
|
|
||||||
|
|
||||||
import dagger.Component;
|
import dagger.Component;
|
||||||
|
|
||||||
@@ -151,10 +149,6 @@ public interface ActivityComponent {
|
|||||||
|
|
||||||
void inject(RssFeedManageActivity activity);
|
void inject(RssFeedManageActivity activity);
|
||||||
|
|
||||||
void inject(EmojiProvider emojiProvider);
|
|
||||||
|
|
||||||
void inject(RecentEmojiPageModel recentEmojiPageModel);
|
|
||||||
|
|
||||||
// Fragments
|
// Fragments
|
||||||
void inject(ContactListFragment fragment);
|
void inject(ContactListFragment fragment);
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
|||||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||||
import org.briarproject.bramble.api.system.AndroidExecutor;
|
import org.briarproject.bramble.api.system.AndroidExecutor;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.activity.BaseActivity;
|
import org.briarproject.briar.android.BriarApplication;
|
||||||
import org.thoughtcrime.securesms.components.util.FutureTaskListener;
|
import org.thoughtcrime.securesms.components.util.FutureTaskListener;
|
||||||
import org.thoughtcrime.securesms.components.util.ListenableFutureTask;
|
import org.thoughtcrime.securesms.components.util.ListenableFutureTask;
|
||||||
import org.thoughtcrime.securesms.util.BitmapDecodingException;
|
import org.thoughtcrime.securesms.util.BitmapDecodingException;
|
||||||
@@ -35,6 +35,8 @@ import java.util.regex.Pattern;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import static android.graphics.Paint.ANTI_ALIAS_FLAG;
|
||||||
|
import static android.graphics.Paint.FILTER_BITMAP_FLAG;
|
||||||
import static android.graphics.PixelFormat.TRANSLUCENT;
|
import static android.graphics.PixelFormat.TRANSLUCENT;
|
||||||
import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
|
import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
|
||||||
import static java.util.logging.Level.INFO;
|
import static java.util.logging.Level.INFO;
|
||||||
@@ -47,7 +49,7 @@ public class EmojiProvider {
|
|||||||
private static volatile EmojiProvider INSTANCE = null;
|
private static volatile EmojiProvider INSTANCE = null;
|
||||||
|
|
||||||
private static final Paint PAINT =
|
private static final Paint PAINT =
|
||||||
new Paint(Paint.FILTER_BITMAP_FLAG | Paint.ANTI_ALIAS_FLAG);
|
new Paint(FILTER_BITMAP_FLAG | ANTI_ALIAS_FLAG);
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
AndroidExecutor androidExecutor;
|
AndroidExecutor androidExecutor;
|
||||||
@@ -77,8 +79,9 @@ public class EmojiProvider {
|
|||||||
if (INSTANCE == null) {
|
if (INSTANCE == null) {
|
||||||
LOG.info("Creating new instance of EmojiProvider");
|
LOG.info("Creating new instance of EmojiProvider");
|
||||||
INSTANCE = new EmojiProvider(context);
|
INSTANCE = new EmojiProvider(context);
|
||||||
((BaseActivity) context).getActivityComponent()
|
BriarApplication app =
|
||||||
.inject(INSTANCE);
|
(BriarApplication) context.getApplicationContext();
|
||||||
|
app.getApplicationComponent().inject(INSTANCE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,7 +96,7 @@ public class EmojiProvider {
|
|||||||
staticPages = EmojiPages.getPages(context);
|
staticPages = EmojiPages.getPages(context);
|
||||||
for (EmojiPageModel page : staticPages) {
|
for (EmojiPageModel page : staticPages) {
|
||||||
if (page.hasSpriteMap()) {
|
if (page.hasSpriteMap()) {
|
||||||
final EmojiPageBitmap pageBitmap = new EmojiPageBitmap(page);
|
EmojiPageBitmap pageBitmap = new EmojiPageBitmap(page);
|
||||||
for (int i = 0; i < page.getEmoji().length; i++) {
|
for (int i = 0; i < page.getEmoji().length; i++) {
|
||||||
offsets.put(Character.codePointAt(page.getEmoji()[i], 0),
|
offsets.put(Character.codePointAt(page.getEmoji()[i], 0),
|
||||||
new DrawInfo(pageBitmap, i));
|
new DrawInfo(pageBitmap, i));
|
||||||
|
|||||||
@@ -2,19 +2,21 @@ package org.thoughtcrime.securesms.components.emoji;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.support.annotation.DrawableRes;
|
import android.support.annotation.DrawableRes;
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.annotation.UiThread;
|
|
||||||
|
|
||||||
|
import org.briarproject.bramble.api.db.DatabaseExecutor;
|
||||||
import org.briarproject.bramble.api.db.DbException;
|
import org.briarproject.bramble.api.db.DbException;
|
||||||
|
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.Settings;
|
||||||
import org.briarproject.bramble.api.settings.SettingsManager;
|
import org.briarproject.bramble.api.settings.SettingsManager;
|
||||||
|
import org.briarproject.bramble.util.StringUtils;
|
||||||
import org.briarproject.briar.R;
|
import org.briarproject.briar.R;
|
||||||
import org.briarproject.briar.android.activity.BaseActivity;
|
import org.briarproject.briar.android.BriarApplication;
|
||||||
import org.briarproject.briar.android.controller.DbController;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@@ -23,7 +25,8 @@ import javax.inject.Inject;
|
|||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
|
import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
|
||||||
|
|
||||||
@UiThread
|
@MethodsNotNullByDefault
|
||||||
|
@ParametersNotNullByDefault
|
||||||
public class RecentEmojiPageModel implements EmojiPageModel {
|
public class RecentEmojiPageModel implements EmojiPageModel {
|
||||||
|
|
||||||
private static final Logger LOG =
|
private static final Logger LOG =
|
||||||
@@ -32,27 +35,27 @@ public class RecentEmojiPageModel implements EmojiPageModel {
|
|||||||
private static final String EMOJI_LRU_PREFERENCE = "pref_emoji_recent";
|
private static final String EMOJI_LRU_PREFERENCE = "pref_emoji_recent";
|
||||||
private static final int EMOJI_LRU_SIZE = 50;
|
private static final int EMOJI_LRU_SIZE = 50;
|
||||||
|
|
||||||
private final LinkedHashSet<String> recentlyUsed;
|
private final LinkedHashSet<String> recentlyUsed; // UI thread
|
||||||
private Settings settings;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
SettingsManager settingsManager;
|
SettingsManager settingsManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
DbController dbController;
|
@DatabaseExecutor
|
||||||
|
Executor dbExecutor;
|
||||||
|
|
||||||
RecentEmojiPageModel(Context context) {
|
RecentEmojiPageModel(Context context) {
|
||||||
if (!(context instanceof BaseActivity)) {
|
BriarApplication app =
|
||||||
throw new IllegalArgumentException(
|
(BriarApplication) context.getApplicationContext();
|
||||||
"Needs to be created from BaseActivity");
|
app.getApplicationComponent().inject(this);
|
||||||
}
|
|
||||||
((BaseActivity) context).getActivityComponent().inject(this);
|
|
||||||
recentlyUsed = getPersistedCache();
|
recentlyUsed = getPersistedCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
private LinkedHashSet<String> getPersistedCache() {
|
private LinkedHashSet<String> getPersistedCache() {
|
||||||
String serialized;
|
String serialized;
|
||||||
try {
|
try {
|
||||||
settings = settingsManager.getSettings(SETTINGS_NAMESPACE);
|
// FIXME: Don't make DB calls on the UI thread
|
||||||
|
Settings settings = settingsManager.getSettings(SETTINGS_NAMESPACE);
|
||||||
serialized = settings.get(EMOJI_LRU_PREFERENCE);
|
serialized = settings.get(EMOJI_LRU_PREFERENCE);
|
||||||
} catch (DbException e) {
|
} catch (DbException e) {
|
||||||
if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
|
if (LOG.isLoggable(WARNING)) LOG.log(WARNING, e.toString(), e);
|
||||||
@@ -67,7 +70,6 @@ public class RecentEmojiPageModel implements EmojiPageModel {
|
|||||||
return R.drawable.ic_emoji_recent;
|
return R.drawable.ic_emoji_recent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
|
||||||
@Override
|
@Override
|
||||||
public String[] getEmoji() {
|
public String[] getEmoji() {
|
||||||
return toReversePrimitiveArray(recentlyUsed);
|
return toReversePrimitiveArray(recentlyUsed);
|
||||||
@@ -92,31 +94,26 @@ public class RecentEmojiPageModel implements EmojiPageModel {
|
|||||||
iterator.next();
|
iterator.next();
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
}
|
}
|
||||||
save(recentlyUsed);
|
save(serialize(recentlyUsed));
|
||||||
}
|
}
|
||||||
|
|
||||||
private String serialize(LinkedHashSet<String> emojis) {
|
private String serialize(LinkedHashSet<String> emojis) {
|
||||||
String result = "";
|
return StringUtils.join(emojis, ";");
|
||||||
for (String emoji : emojis) {
|
|
||||||
result += emoji + ";";
|
|
||||||
}
|
|
||||||
if (!emojis.isEmpty())
|
|
||||||
result = result.substring(0, result.length() - 1);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private LinkedHashSet<String> deserialize(@Nullable String str) {
|
private LinkedHashSet<String> deserialize(@Nullable String serialized) {
|
||||||
String[] list = str == null ? new String[] {} : str.split(";");
|
if (serialized == null) return new LinkedHashSet<>();
|
||||||
|
String[] list = serialized.split(";");
|
||||||
LinkedHashSet<String> result = new LinkedHashSet<>(list.length);
|
LinkedHashSet<String> result = new LinkedHashSet<>(list.length);
|
||||||
Collections.addAll(result, list);
|
Collections.addAll(result, list);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void save(final LinkedHashSet<String> recentlyUsed) {
|
private void save(final String serialized) {
|
||||||
dbController.runOnDbThread(new Runnable() {
|
dbExecutor.execute(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
String serialized = serialize(recentlyUsed);
|
Settings settings = new Settings();
|
||||||
settings.put(EMOJI_LRU_PREFERENCE, serialized);
|
settings.put(EMOJI_LRU_PREFERENCE, serialized);
|
||||||
try {
|
try {
|
||||||
settingsManager.mergeSettings(settings, SETTINGS_NAMESPACE);
|
settingsManager.mergeSettings(settings, SETTINGS_NAMESPACE);
|
||||||
@@ -128,8 +125,7 @@ public class RecentEmojiPageModel implements EmojiPageModel {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private String[] toReversePrimitiveArray(
|
private String[] toReversePrimitiveArray(LinkedHashSet<String> emojiSet) {
|
||||||
@NonNull LinkedHashSet<String> emojiSet) {
|
|
||||||
String[] emojis = new String[emojiSet.size()];
|
String[] emojis = new String[emojiSet.size()];
|
||||||
int i = emojiSet.size() - 1;
|
int i = emojiSet.size() - 1;
|
||||||
for (String emoji : emojiSet) {
|
for (String emoji : emojiSet) {
|
||||||
|
|||||||
Reference in New Issue
Block a user