Skip to content
Snippets Groups Projects
Commit a1b41533 authored by akwizgran's avatar akwizgran
Browse files

Merge branch '926-class-cast-exception' into 'master'

Don't cast Context to BaseActivity

Closes #926

See merge request !505
parents 199a2ffc 10bb30e1
No related branches found
No related tags found
No related merge requests found
......@@ -43,6 +43,8 @@ import org.briarproject.briar.api.privategroup.PrivateGroupFactory;
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.thoughtcrime.securesms.components.emoji.EmojiProvider;
import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel;
import java.util.concurrent.Executor;
......@@ -138,10 +140,14 @@ public interface AndroidComponent
@IoExecutor
Executor ioExecutor();
void inject(BriarService activity);
void inject(BriarService briarService);
void inject(BriarReportSender briarReportSender);
void inject(EmojiProvider emojiProvider);
void inject(RecentEmojiPageModel recentEmojiPageModel);
// Eager singleton load
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.SharingModule;
import org.briarproject.briar.android.splash.SplashScreenActivity;
import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel;
import dagger.Component;
......@@ -151,10 +149,6 @@ public interface ActivityComponent {
void inject(RssFeedManageActivity activity);
void inject(EmojiProvider emojiProvider);
void inject(RecentEmojiPageModel recentEmojiPageModel);
// Fragments
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.system.AndroidExecutor;
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.ListenableFutureTask;
import org.thoughtcrime.securesms.util.BitmapDecodingException;
......@@ -35,6 +35,8 @@ import java.util.regex.Pattern;
import javax.annotation.Nullable;
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.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
import static java.util.logging.Level.INFO;
......@@ -47,7 +49,7 @@ public class EmojiProvider {
private static volatile EmojiProvider INSTANCE = null;
private static final Paint PAINT =
new Paint(Paint.FILTER_BITMAP_FLAG | Paint.ANTI_ALIAS_FLAG);
new Paint(FILTER_BITMAP_FLAG | ANTI_ALIAS_FLAG);
@Inject
AndroidExecutor androidExecutor;
......@@ -77,8 +79,9 @@ public class EmojiProvider {
if (INSTANCE == null) {
LOG.info("Creating new instance of EmojiProvider");
INSTANCE = new EmojiProvider(context);
((BaseActivity) context).getActivityComponent()
.inject(INSTANCE);
BriarApplication app =
(BriarApplication) context.getApplicationContext();
app.getApplicationComponent().inject(INSTANCE);
}
}
}
......@@ -93,7 +96,7 @@ public class EmojiProvider {
staticPages = EmojiPages.getPages(context);
for (EmojiPageModel page : staticPages) {
if (page.hasSpriteMap()) {
final EmojiPageBitmap pageBitmap = new EmojiPageBitmap(page);
EmojiPageBitmap pageBitmap = new EmojiPageBitmap(page);
for (int i = 0; i < page.getEmoji().length; i++) {
offsets.put(Character.codePointAt(page.getEmoji()[i], 0),
new DrawInfo(pageBitmap, i));
......
......@@ -2,19 +2,21 @@ package org.thoughtcrime.securesms.components.emoji;
import android.content.Context;
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.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.util.StringUtils;
import org.briarproject.briar.R;
import org.briarproject.briar.android.activity.BaseActivity;
import org.briarproject.briar.android.controller.DbController;
import org.briarproject.briar.android.BriarApplication;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
import javax.annotation.Nullable;
......@@ -23,7 +25,8 @@ import javax.inject.Inject;
import static java.util.logging.Level.WARNING;
import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
@UiThread
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class RecentEmojiPageModel implements EmojiPageModel {
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 int EMOJI_LRU_SIZE = 50;
private final LinkedHashSet<String> recentlyUsed;
private Settings settings;
private final LinkedHashSet<String> recentlyUsed; // UI thread
@Inject
SettingsManager settingsManager;
@Inject
DbController dbController;
@DatabaseExecutor
Executor dbExecutor;
RecentEmojiPageModel(Context context) {
if (!(context instanceof BaseActivity)) {
throw new IllegalArgumentException(
"Needs to be created from BaseActivity");
}
((BaseActivity) context).getActivityComponent().inject(this);
BriarApplication app =
(BriarApplication) context.getApplicationContext();
app.getApplicationComponent().inject(this);
recentlyUsed = getPersistedCache();
}
private LinkedHashSet<String> getPersistedCache() {
String serialized;
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);
} catch (DbException 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;
}
@NonNull
@Override
public String[] getEmoji() {
return toReversePrimitiveArray(recentlyUsed);
......@@ -92,31 +94,26 @@ public class RecentEmojiPageModel implements EmojiPageModel {
iterator.next();
iterator.remove();
}
save(recentlyUsed);
save(serialize(recentlyUsed));
}
private String serialize(LinkedHashSet<String> emojis) {
String result = "";
for (String emoji : emojis) {
result += emoji + ";";
}
if (!emojis.isEmpty())
result = result.substring(0, result.length() - 1);
return result;
return StringUtils.join(emojis, ";");
}
private LinkedHashSet<String> deserialize(@Nullable String str) {
String[] list = str == null ? new String[] {} : str.split(";");
private LinkedHashSet<String> deserialize(@Nullable String serialized) {
if (serialized == null) return new LinkedHashSet<>();
String[] list = serialized.split(";");
LinkedHashSet<String> result = new LinkedHashSet<>(list.length);
Collections.addAll(result, list);
return result;
}
private void save(final LinkedHashSet<String> recentlyUsed) {
dbController.runOnDbThread(new Runnable() {
private void save(final String serialized) {
dbExecutor.execute(new Runnable() {
@Override
public void run() {
String serialized = serialize(recentlyUsed);
Settings settings = new Settings();
settings.put(EMOJI_LRU_PREFERENCE, serialized);
try {
settingsManager.mergeSettings(settings, SETTINGS_NAMESPACE);
......@@ -128,8 +125,7 @@ public class RecentEmojiPageModel implements EmojiPageModel {
});
}
private String[] toReversePrimitiveArray(
@NonNull LinkedHashSet<String> emojiSet) {
private String[] toReversePrimitiveArray(LinkedHashSet<String> emojiSet) {
String[] emojis = new String[emojiSet.size()];
int i = emojiSet.size() - 1;
for (String emoji : emojiSet) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment