2018-03-18 21:52:49 +00:00
|
|
|
package org.thoughtcrime.securesms.glide.cache;
|
|
|
|
|
|
|
|
|
|
|
|
import android.graphics.Bitmap;
|
|
|
|
import android.support.annotation.NonNull;
|
|
|
|
import android.support.annotation.Nullable;
|
2018-08-01 15:09:24 +00:00
|
|
|
import org.thoughtcrime.securesms.logging.Log;
|
2018-03-18 21:52:49 +00:00
|
|
|
|
|
|
|
import com.bumptech.glide.load.Options;
|
|
|
|
import com.bumptech.glide.load.ResourceDecoder;
|
|
|
|
import com.bumptech.glide.load.engine.Resource;
|
|
|
|
import com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
|
|
|
public class EncryptedBitmapCacheDecoder extends EncryptedCoder implements ResourceDecoder<File, Bitmap> {
|
|
|
|
|
|
|
|
private static final String TAG = EncryptedBitmapCacheDecoder.class.getSimpleName();
|
|
|
|
|
|
|
|
private final StreamBitmapDecoder streamBitmapDecoder;
|
|
|
|
private final byte[] secret;
|
|
|
|
|
|
|
|
public EncryptedBitmapCacheDecoder(@NonNull byte[] secret, @NonNull StreamBitmapDecoder streamBitmapDecoder) {
|
|
|
|
this.secret = secret;
|
|
|
|
this.streamBitmapDecoder = streamBitmapDecoder;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean handles(@NonNull File source, @NonNull Options options)
|
|
|
|
throws IOException
|
|
|
|
{
|
2018-08-02 13:25:33 +00:00
|
|
|
Log.i(TAG, "Checking item for encrypted Bitmap cache decoder: " + source.toString());
|
2018-03-18 21:52:49 +00:00
|
|
|
|
|
|
|
try (InputStream inputStream = createEncryptedInputStream(secret, source)) {
|
|
|
|
return streamBitmapDecoder.handles(inputStream, options);
|
|
|
|
} catch (IOException e) {
|
|
|
|
Log.w(TAG, e);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
@Override
|
|
|
|
public Resource<Bitmap> decode(@NonNull File source, int width, int height, @NonNull Options options)
|
|
|
|
throws IOException
|
|
|
|
{
|
2018-08-02 13:25:33 +00:00
|
|
|
Log.i(TAG, "Encrypted Bitmap cache decoder running: " + source.toString());
|
2018-03-18 21:52:49 +00:00
|
|
|
try (InputStream inputStream = createEncryptedInputStream(secret, source)) {
|
|
|
|
return streamBitmapDecoder.decode(inputStream, width, height, options);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|