Move compression of image to IoExecutor

This commit is contained in:
Sebastian Kürten
2020-12-04 10:35:08 +01:00
committed by Torsten Grote
parent 53d985161f
commit cbb87aa00c

View File

@@ -8,6 +8,7 @@ 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.identity.IdentityManager; import org.briarproject.bramble.api.identity.IdentityManager;
import org.briarproject.bramble.api.identity.LocalAuthor; import org.briarproject.bramble.api.identity.LocalAuthor;
import org.briarproject.bramble.api.lifecycle.IoExecutor;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.util.LogUtils; import org.briarproject.bramble.util.LogUtils;
import org.briarproject.briar.android.attachment.ImageCompressor; import org.briarproject.briar.android.attachment.ImageCompressor;
@@ -42,6 +43,8 @@ class SettingsViewModel extends AndroidViewModel {
private final AvatarManager avatarManager; private final AvatarManager avatarManager;
private final AuthorManager authorManager; private final AuthorManager authorManager;
private final ImageCompressor imageCompressor; private final ImageCompressor imageCompressor;
@IoExecutor
private final Executor ioExecutor;
@DatabaseExecutor @DatabaseExecutor
private final Executor dbExecutor; private final Executor dbExecutor;
@@ -54,12 +57,14 @@ class SettingsViewModel extends AndroidViewModel {
AvatarManager avatarManager, AvatarManager avatarManager,
AuthorManager authorManager, AuthorManager authorManager,
ImageCompressor imageCompressor, ImageCompressor imageCompressor,
@IoExecutor Executor ioExecutor,
@DatabaseExecutor Executor dbExecutor) { @DatabaseExecutor Executor dbExecutor) {
super(application); super(application);
this.identityManager = identityManager; this.identityManager = identityManager;
this.imageCompressor = imageCompressor; this.imageCompressor = imageCompressor;
this.avatarManager = avatarManager; this.avatarManager = avatarManager;
this.authorManager = authorManager; this.authorManager = authorManager;
this.ioExecutor = ioExecutor;
this.dbExecutor = dbExecutor; this.dbExecutor = dbExecutor;
loadOwnIdentityInfo(); loadOwnIdentityInfo();
@@ -83,16 +88,16 @@ class SettingsViewModel extends AndroidViewModel {
} }
void setAvatar(Uri uri) { void setAvatar(Uri uri) {
dbExecutor.execute(() -> { ioExecutor.execute(() -> {
try { try {
trySetAvatar(uri); trySetAvatar(uri);
} catch (IOException | DbException e) { } catch (IOException e) {
LogUtils.logException(LOG, WARNING, e); LogUtils.logException(LOG, WARNING, e);
} }
}); });
} }
private void trySetAvatar(Uri uri) throws IOException, DbException { private void trySetAvatar(Uri uri) throws IOException {
ContentResolver contentResolver = ContentResolver contentResolver =
getApplication().getContentResolver(); getApplication().getContentResolver();
String contentType = contentResolver.getType(uri); String contentType = contentResolver.getType(uri);
@@ -103,10 +108,17 @@ class SettingsViewModel extends AndroidViewModel {
InputStream is = contentResolver.openInputStream(uri); InputStream is = contentResolver.openInputStream(uri);
if (is == null) throw new IOException( if (is == null) throw new IOException(
"ContentResolver returned null when opening InputStream"); "ContentResolver returned null when opening InputStream");
is = imageCompressor InputStream compressed = imageCompressor
.compressImage(is, contentType); .compressImage(is, contentType);
avatarManager.addAvatar(ImageCompressor.MIME_TYPE, is);
loadOwnIdentityInfo(); dbExecutor.execute(() -> {
try {
avatarManager.addAvatar(ImageCompressor.MIME_TYPE, compressed);
loadOwnIdentityInfo();
} catch (IOException | DbException e) {
LogUtils.logException(LOG, WARNING, e);
}
});
} }
} }