Don't assume Context is a BaseActivity.

This commit is contained in:
akwizgran
2017-03-31 15:53:52 +01:00
parent 199a2ffc46
commit 10bb30e190
4 changed files with 41 additions and 42 deletions

View File

@@ -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);
} }

View File

@@ -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);

View File

@@ -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));

View File

@@ -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) {