improved media preview

This commit is contained in:
Mariotaku Lee 2016-04-19 13:30:04 +08:00
parent 59e1d67e01
commit 582236cebb
3 changed files with 31 additions and 22 deletions

View File

@ -140,6 +140,7 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
String QUERY_PARAM_TIMESTAMP = "timestamp";
String QUERY_PARAM_FROM_NOTIFICATION = "from_notification";
String QUERY_PARAM_NOTIFICATION_TYPE = "notification_type";
String QUERY_PARAM_PREVIEW = "preview";
String DEFAULT_PROTOCOL = PROTOCOL_HTTPS;
@ -257,4 +258,5 @@ public interface TwidereConstants extends SharedPreferenceConstants, IntentConst
String USER_TYPE_TWITTER_COM = "twitter.com";
String USER_TYPE_FANFOU_COM = "fanfou.com";
}

View File

@ -146,8 +146,8 @@ dependencies {
compile 'com.lnikkila:extendedtouchview:0.1.0'
compile 'com.google.dagger:dagger:2.1'
compile 'org.attoparser:attoparser:1.4.0.RELEASE'
compile 'com.github.mariotaku.MediaViewerLibrary:base:0.9.16'
compile 'com.github.mariotaku.MediaViewerLibrary:subsample-image-view:0.9.16'
compile 'com.github.mariotaku.MediaViewerLibrary:base:0.9.17-SNAPSHOT'
compile 'com.github.mariotaku.MediaViewerLibrary:subsample-image-view:0.9.17-SNAPSHOT'
compile 'com.github.mariotaku.SQLiteQB:library:0.9.6'
compile 'com.github.mariotaku.ObjectCursor:core:0.9.7'
compile 'com.github.mariotaku:MultiValueSwitch:0.9.4'

View File

@ -61,7 +61,7 @@ import com.afollestad.appthemeengine.customizers.ATEToolbarCustomizer;
import com.commonsware.cwac.layouts.AspectLockedFrameLayout;
import com.davemorrissey.labs.subscaleview.ImageSource;
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
import com.davemorrissey.labs.subscaleview.decoder.ImageDecoder;
import com.davemorrissey.labs.subscaleview.decoder.SkiaImageDecoder;
import com.sprylab.android.widget.TextureVideoView;
import org.apache.commons.lang3.ArrayUtils;
@ -88,6 +88,7 @@ import org.mariotaku.twidere.util.IntentUtils;
import org.mariotaku.twidere.util.MenuUtils;
import org.mariotaku.twidere.util.PermissionUtils;
import org.mariotaku.twidere.util.TwidereMathUtils;
import org.mariotaku.twidere.util.UriUtils;
import org.mariotaku.twidere.util.Utils;
import org.mariotaku.twidere.util.dagger.GeneralComponentHelper;
import org.mariotaku.twidere.util.media.MediaExtra;
@ -637,19 +638,20 @@ public final class MediaViewerActivity extends BaseActivity implements Constants
@Override
protected ImageSource getImageSource(@NonNull CacheDownloadLoader.Result data) {
assert data.cacheUri != null;
if (data instanceof SizedResult) {
final ImageSource uri = ImageSource.uri(data.cacheUri);
uri.dimensions(((SizedResult) data).getWidth(), ((SizedResult) data).getHeight());
return uri;
if (!(data instanceof SizedResult)) {
return super.getImageSource(data);
}
return super.getImageSource(data);
final ImageSource imageSource = ImageSource.uri(data.cacheUri);
imageSource.tilingEnabled();
imageSource.dimensions(((SizedResult) data).getWidth(), ((SizedResult) data).getHeight());
return imageSource;
}
@Override
protected ImageSource getPreviewImageSource(@NonNull CacheDownloadLoader.Result data) {
if (!(data instanceof SizedResult)) return null;
assert data.cacheUri != null;
return ImageSource.uri(data.cacheUri);
return ImageSource.uri(UriUtils.appendQueryParameters(data.cacheUri, QUERY_PARAM_PREVIEW, true));
}
@Nullable
@ -741,21 +743,26 @@ public final class MediaViewerActivity extends BaseActivity implements Constants
}
public static class PreviewBitmapDecoder implements ImageDecoder {
public static class PreviewBitmapDecoder extends SkiaImageDecoder {
@Override
public Bitmap decode(Context context, Uri uri) throws Exception {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
o.inPreferredConfig = Bitmap.Config.RGB_565;
final ContentResolver cr = context.getContentResolver();
decodeBitmap(cr, uri, o);
final DisplayMetrics dm = context.getResources().getDisplayMetrics();
final int targetSize = Math.min(1024, Math.max(dm.widthPixels, dm.heightPixels));
o.inSampleSize = TwidereMathUtils.nextPowerOf2(Math.max(1, Math.min(o.outHeight, o.outWidth) / targetSize));
o.inJustDecodeBounds = false;
final Bitmap bitmap = decodeBitmap(cr, uri, o);
if (bitmap == null) throw new IOException();
return bitmap;
if (AUTHORITY_TWIDERE_CACHE.equals(uri.getAuthority())
&& uri.getBooleanQueryParameter(QUERY_PARAM_PREVIEW, false)) {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
o.inPreferredConfig = Bitmap.Config.RGB_565;
final ContentResolver cr = context.getContentResolver();
decodeBitmap(cr, uri, o);
final DisplayMetrics dm = context.getResources().getDisplayMetrics();
final int targetSize = Math.min(1024, Math.max(dm.widthPixels, dm.heightPixels));
o.inSampleSize = TwidereMathUtils.nextPowerOf2((int) Math.max(1,
Math.ceil(Math.min(o.outHeight, o.outWidth) / (float) targetSize)));
o.inJustDecodeBounds = false;
final Bitmap bitmap = decodeBitmap(cr, uri, o);
if (bitmap == null) throw new IOException();
return bitmap;
}
return super.decode(context, uri);
}
}