Use Glide for all contact photo caching

// FREEBIE
This commit is contained in:
Moxie Marlinspike
2017-10-16 13:11:42 -07:00
parent 10f224ede5
commit b80408bcb4
66 changed files with 931 additions and 946 deletions

View File

@@ -18,6 +18,8 @@ import android.view.View;
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
import org.thoughtcrime.securesms.scribbles.viewmodel.Font;
import org.thoughtcrime.securesms.scribbles.viewmodel.Layer;
@@ -48,22 +50,24 @@ public class ScribbleActivity extends PassphraseRequiredActionBarActivity implem
private ScribbleToolbar toolbar;
private ScribbleView scribbleView;
private MasterSecret masterSecret;
private GlideRequests glideRequests;
@Override
protected void onCreate(Bundle savedInstanceState, @NonNull MasterSecret masterSecret) {
setContentView(R.layout.scribble_activity);
this.masterSecret = masterSecret;
this.scribbleView = (ScribbleView) findViewById(R.id.scribble_view);
this.toolbar = (ScribbleToolbar) findViewById(R.id.toolbar);
this.colorPicker = (VerticalSlideColorPicker) findViewById(R.id.scribble_color_picker);
this.masterSecret = masterSecret;
this.glideRequests = GlideApp.with(this);
this.scribbleView = findViewById(R.id.scribble_view);
this.toolbar = findViewById(R.id.toolbar);
this.colorPicker = findViewById(R.id.scribble_color_picker);
this.toolbar.setListener(this);
this.toolbar.setToolColor(Color.RED);
scribbleView.setMotionViewCallback(motionViewCallback);
scribbleView.setDrawingMode(false);
scribbleView.setImage(getIntent().getData(), masterSecret);
scribbleView.setImage(masterSecret, glideRequests, getIntent().getData());
colorPicker.setOnColorChangeListener(this);
colorPicker.setVisibility(View.GONE);
@@ -214,7 +218,7 @@ public class ScribbleActivity extends PassphraseRequiredActionBarActivity implem
@Override
public void onSave() {
ListenableFuture<Bitmap> future = scribbleView.getRenderedImage();
ListenableFuture<Bitmap> future = scribbleView.getRenderedImage(glideRequests);
future.addListener(new ListenableFuture.Listener<Bitmap>() {
@Override

View File

@@ -35,11 +35,13 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
public class StickerSelectFragment extends Fragment implements LoaderManager.LoaderCallbacks<String[]> {
private RecyclerView recyclerView;
private String assetDirectory;
private RecyclerView recyclerView;
private GlideRequests glideRequests;
private String assetDirectory;
private StickerSelectionListener listener;
public static StickerSelectFragment newInstance(String assetDirectory) {
@@ -67,6 +69,7 @@ public class StickerSelectFragment extends Fragment implements LoaderManager.Loa
public void onActivityCreated(Bundle bundle) {
super.onActivityCreated(bundle);
this.glideRequests = GlideApp.with(this);
this.assetDirectory = getArguments().getString("assetDirectory");
getLoaderManager().initLoader(0, null, this);
@@ -80,7 +83,7 @@ public class StickerSelectFragment extends Fragment implements LoaderManager.Loa
@Override
public void onLoadFinished(Loader<String[]> loader, String[] data) {
recyclerView.setAdapter(new StickersAdapter(getActivity(), data));
recyclerView.setAdapter(new StickersAdapter(getActivity(), glideRequests, data));
}
@Override
@@ -94,12 +97,12 @@ public class StickerSelectFragment extends Fragment implements LoaderManager.Loa
class StickersAdapter extends RecyclerView.Adapter<StickersAdapter.StickerViewHolder> {
private final Context context;
private final GlideRequests glideRequests;
private final String[] stickerFiles;
private final LayoutInflater layoutInflater;
StickersAdapter(@NonNull Context context, @NonNull String[] stickerFiles) {
this.context = context;
StickersAdapter(@NonNull Context context, @NonNull GlideRequests glideRequests, @NonNull String[] stickerFiles) {
this.glideRequests = glideRequests;
this.stickerFiles = stickerFiles;
this.layoutInflater = LayoutInflater.from(context);
}
@@ -113,10 +116,9 @@ public class StickerSelectFragment extends Fragment implements LoaderManager.Loa
public void onBindViewHolder(StickerViewHolder holder, int position) {
holder.fileName = stickerFiles[position];
GlideApp.with(context)
.load(Uri.parse("file:///android_asset/" + holder.fileName))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(holder.image);
glideRequests.load(Uri.parse("file:///android_asset/" + holder.fileName))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(holder.image);
}
@Override
@@ -127,7 +129,7 @@ public class StickerSelectFragment extends Fragment implements LoaderManager.Loa
@Override
public void onViewRecycled(StickerViewHolder holder) {
super.onViewRecycled(holder);
GlideApp.with(context).clear(holder.image);
glideRequests.clear(holder.image);
}
private void onStickerSelected(String fileName) {

View File

@@ -1,4 +1,4 @@
/**
/*
* Copyright (C) 2016 Open Whisper Systems
*
* This program is free software: you can redistribute it and/or modify
@@ -36,7 +36,7 @@ import com.bumptech.glide.request.target.Target;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.scribbles.widget.entity.MotionEntity;
import org.thoughtcrime.securesms.scribbles.widget.entity.TextEntity;
import org.thoughtcrime.securesms.util.Util;
@@ -77,18 +77,17 @@ public class ScribbleView extends FrameLayout {
initialize(context);
}
public void setImage(@NonNull Uri uri, @NonNull MasterSecret masterSecret) {
public void setImage(@NonNull MasterSecret masterSecret, @NonNull GlideRequests glideRequests, @NonNull Uri uri) {
this.imageUri = uri;
this.masterSecret = masterSecret;
GlideApp.with(getContext())
.load(new DecryptableUri(masterSecret, uri))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.fitCenter()
.into(imageView);
glideRequests.load(new DecryptableUri(masterSecret, uri))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.fitCenter()
.into(imageView);
}
public @NonNull ListenableFuture<Bitmap> getRenderedImage() {
public @NonNull ListenableFuture<Bitmap> getRenderedImage(@NonNull GlideRequests glideRequests) {
final SettableFuture<Bitmap> future = new SettableFuture<>();
final Context context = getContext();
final boolean isLowMemory = Util.isLowMemory(context);
@@ -110,13 +109,12 @@ public class ScribbleView extends FrameLayout {
height = 768;
}
return GlideApp.with(context)
.asBitmap()
.load(new DecryptableUri(masterSecret, imageUri))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(width, height)
.get();
return glideRequests.asBitmap()
.load(new DecryptableUri(masterSecret, imageUri))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(width, height)
.get();
} catch (InterruptedException | ExecutionException e) {
Log.w(TAG, e);
return null;
@@ -143,9 +141,9 @@ public class ScribbleView extends FrameLayout {
private void initialize(@NonNull Context context) {
inflate(context, R.layout.scribble_view, this);
this.imageView = (ImageView) findViewById(R.id.image_view);
this.motionView = (MotionView) findViewById(R.id.motion_view);
this.canvasView = (CanvasView) findViewById(R.id.canvas_view);
this.imageView = findViewById(R.id.image_view);
this.motionView = findViewById(R.id.motion_view);
this.canvasView = findViewById(R.id.canvas_view);
}
public void setMotionViewCallback(MotionView.MotionViewCallback callback) {