From e537ceb805650a5f5857eb7a2f3e1a39721b2814 Mon Sep 17 00:00:00 2001 From: Mariotaku Lee Date: Sat, 30 Jan 2016 01:38:03 +0800 Subject: [PATCH] improved accent color handling fixed video indicator --- resources/Twidere Icon Assets.sketch | Bin 0 -> 32768 bytes .../twidere/model/ParcelableMedia.java | 11 ++ .../activity/support/MediaViewerActivity.java | 2 + .../fragment/support/StatusFragment.java | 4 +- .../fragment/support/UserFragment.java | 13 +- .../service/BackgroundOperationService.java | 1 - .../twidere/service/RefreshService.java | 1 - .../twidere/service/StreamingService.java | 1 - .../mariotaku/twidere/util/CheckUtils.java | 5 + .../twidere/util/MediaLoadingHandler.java | 46 +------- .../mariotaku/twidere/util/ThemeUtils.java | 22 ++-- .../twidere/view/CardMediaContainer.java | 3 + .../twidere/view/ForegroundImageView.java | 6 +- .../twidere/view/MediaPreviewImageView.java | 111 ++++++++++++++++++ .../twidere/view/MediaSizeImageView.java | 55 --------- .../res/drawable-hdpi/ic_card_media_play.png | Bin 1415 -> 0 bytes .../res/drawable-mdpi/ic_card_media_play.png | Bin 882 -> 0 bytes .../res/drawable-xhdpi/ic_card_media_play.png | Bin 1851 -> 0 bytes .../drawable-xxhdpi/ic_card_media_play.png | Bin 3247 -> 0 bytes .../layout/layout_card_media_preview_item.xml | 2 +- .../svg/drawable/ic_card_media_play-mdpi.svg | 13 ++ 21 files changed, 176 insertions(+), 120 deletions(-) create mode 100644 resources/Twidere Icon Assets.sketch create mode 100644 twidere/src/main/java/org/mariotaku/twidere/view/MediaPreviewImageView.java delete mode 100644 twidere/src/main/java/org/mariotaku/twidere/view/MediaSizeImageView.java delete mode 100755 twidere/src/main/res/drawable-hdpi/ic_card_media_play.png delete mode 100755 twidere/src/main/res/drawable-mdpi/ic_card_media_play.png delete mode 100755 twidere/src/main/res/drawable-xhdpi/ic_card_media_play.png delete mode 100755 twidere/src/main/res/drawable-xxhdpi/ic_card_media_play.png create mode 100644 twidere/src/main/svg/drawable/ic_card_media_play-mdpi.svg diff --git a/resources/Twidere Icon Assets.sketch b/resources/Twidere Icon Assets.sketch new file mode 100644 index 0000000000000000000000000000000000000000..d9c0f928bcb804e58ba8db3b52c9d0caa586ecef GIT binary patch literal 32768 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 Nu5^!Z9rzs8_+NBGq0s;U literal 0 HcmV?d00001 diff --git a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableMedia.java b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableMedia.java index 97943ce2c..c0b5b6c0a 100644 --- a/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableMedia.java +++ b/twidere.component.common/src/main/java/org/mariotaku/twidere/model/ParcelableMedia.java @@ -371,6 +371,17 @@ public class ParcelableMedia implements Parcelable { ParcelableMediaParcelablePlease.writeToParcel(this, dest, flags); } + public static boolean hasPlayIcon(@Type int type) { + switch (type) { + case Type.TYPE_VIDEO: + case Type.TYPE_ANIMATED_GIF: + case Type.TYPE_CARD_ANIMATED_GIF: + case Type.TYPE_EXTERNAL_PLAYER: + return true; + } + return false; + } + @IntDef({Type.TYPE_UNKNOWN, Type.TYPE_IMAGE, Type.TYPE_VIDEO, Type.TYPE_ANIMATED_GIF, Type.TYPE_CARD_ANIMATED_GIF, Type.TYPE_EXTERNAL_PLAYER, Type.TYPE_VARIABLE_TYPE}) @Retention(RetentionPolicy.SOURCE) diff --git a/twidere/src/main/java/org/mariotaku/twidere/activity/support/MediaViewerActivity.java b/twidere/src/main/java/org/mariotaku/twidere/activity/support/MediaViewerActivity.java index 7a1e102e0..e61acaa22 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/activity/support/MediaViewerActivity.java +++ b/twidere/src/main/java/org/mariotaku/twidere/activity/support/MediaViewerActivity.java @@ -236,6 +236,7 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements @Override protected void displayMedia(CacheDownloadLoader.Result result) { mVideoView.setVideoURI(result.cacheUri); + setMediaViewVisible(true); } @Override @@ -348,6 +349,7 @@ public final class MediaViewerActivity extends AbsMediaViewerActivity implements mPlayPauseButton.setOnClickListener(this); mVolumeButton.setOnClickListener(this); startLoading(); + setMediaViewVisible(false); updateVolume(); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java index 77fc3cab7..c1f05a4d1 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/StatusFragment.java @@ -111,6 +111,7 @@ import org.mariotaku.twidere.provider.TwidereDataStore.Activities; import org.mariotaku.twidere.provider.TwidereDataStore.Statuses; import org.mariotaku.twidere.util.AsyncTaskUtils; import org.mariotaku.twidere.util.AsyncTwitterWrapper; +import org.mariotaku.twidere.util.CheckUtils; import org.mariotaku.twidere.util.CompareUtils; import org.mariotaku.twidere.util.DataStoreUtils; import org.mariotaku.twidere.util.HtmlSpanBuilder; @@ -1092,7 +1093,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac final String lang = status.lang; - if (!Utils.isOfficialCredentials(context, account) || TextUtils.isEmpty(lang)) { + if (!Utils.isOfficialCredentials(context, account) || !CheckUtils.isValidLocale(lang)) { translateLabelView.setText(R.string.unknown_language); translateContainer.setVisibility(View.GONE); } else { @@ -1108,6 +1109,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac textView.setTextIsSelectable(true); quotedTextView.setTextIsSelectable(true); + translateResultView.setTextIsSelectable(true); textView.setMovementMethod(LinkMovementMethod.getInstance()); quotedTextView.setMovementMethod(LinkMovementMethod.getInstance()); diff --git a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserFragment.java b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserFragment.java index c99bb6b54..7a533c162 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserFragment.java +++ b/twidere/src/main/java/org/mariotaku/twidere/fragment/support/UserFragment.java @@ -1405,14 +1405,14 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener mActionBarBackground.setColor(actionBarColor); } ActivitySupport.setTaskDescription(activity, new TaskDescriptionCompat(null, null, actionBarColor)); - final int optimalLinkColor = ThemeUtils.getOptimalLinkColor(color, + final int optimalAccentColor = ThemeUtils.getOptimalAccentColor(color, mDescriptionView.getCurrentTextColor()); - mDescriptionView.setLinkTextColor(optimalLinkColor); - mLocationView.setLinkTextColor(optimalLinkColor); - mURLView.setLinkTextColor(optimalLinkColor); + mDescriptionView.setLinkTextColor(optimalAccentColor); + mLocationView.setLinkTextColor(optimalAccentColor); + mURLView.setLinkTextColor(optimalAccentColor); mProfileBannerView.setBackgroundColor(color); ViewSupport.setBackground(mPagerIndicator, ThemeUtils.getActionBarStackedBackground(activity, - themeRes, color, backgroundOption, true)); + themeRes, optimalAccentColor, backgroundOption, true)); final HeaderDrawerLayout drawer = mHeaderDrawerLayout; if (drawer != null) { @@ -1558,7 +1558,8 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener mPagerIndicator.setIconColor(tabContrastColor); mPagerIndicator.setLabelColor(tabContrastColor); if (ThemeUtils.isDarkTheme(themeId)) { - mPagerIndicator.setStripColor(mUiColor); + mPagerIndicator.setStripColor(ThemeUtils.getOptimalAccentColor(mUiColor, + tabContrastColor)); } else { mPagerIndicator.setStripColor(tabContrastColor); } diff --git a/twidere/src/main/java/org/mariotaku/twidere/service/BackgroundOperationService.java b/twidere/src/main/java/org/mariotaku/twidere/service/BackgroundOperationService.java index 0ae4d680e..1d1cdf229 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/service/BackgroundOperationService.java +++ b/twidere/src/main/java/org/mariotaku/twidere/service/BackgroundOperationService.java @@ -153,7 +153,6 @@ public class BackgroundOperationService extends IntentService implements Constan @Override public void onDestroy() { super.onDestroy(); - DebugModeUtils.watchReferenceLeak(this); } @Override diff --git a/twidere/src/main/java/org/mariotaku/twidere/service/RefreshService.java b/twidere/src/main/java/org/mariotaku/twidere/service/RefreshService.java index a54ef6a96..648843e68 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/service/RefreshService.java +++ b/twidere/src/main/java/org/mariotaku/twidere/service/RefreshService.java @@ -229,7 +229,6 @@ public class RefreshService extends Service implements Constants { startService(new Intent(this, getClass())); } super.onDestroy(); - DebugModeUtils.watchReferenceLeak(this); } protected boolean isAutoRefreshAllowed() { diff --git a/twidere/src/main/java/org/mariotaku/twidere/service/StreamingService.java b/twidere/src/main/java/org/mariotaku/twidere/service/StreamingService.java index 34b26c3a6..05dd1762c 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/service/StreamingService.java +++ b/twidere/src/main/java/org/mariotaku/twidere/service/StreamingService.java @@ -108,7 +108,6 @@ public class StreamingService extends Service implements Constants { Log.d(Constants.LOGTAG, "Stream service stopped."); } super.onDestroy(); - DebugModeUtils.watchReferenceLeak(this); } private void clearTwitterInstances() { diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/CheckUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/CheckUtils.java index d1ce8a812..1e147ee32 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/CheckUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/CheckUtils.java @@ -20,6 +20,7 @@ package org.mariotaku.twidere.util; import android.support.annotation.Nullable; +import android.text.TextUtils; /** * Common tool to check strings, objects etc. @@ -44,4 +45,8 @@ public class CheckUtils { } return true; } + + public static boolean isValidLocale(String locale) { + return !TextUtils.isEmpty(locale) && !"und".equals(locale); + } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/MediaLoadingHandler.java b/twidere/src/main/java/org/mariotaku/twidere/util/MediaLoadingHandler.java index 83cf1d07a..f36cdc0b1 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/MediaLoadingHandler.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/MediaLoadingHandler.java @@ -20,13 +20,10 @@ package org.mariotaku.twidere.util; import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; -import android.support.v4.content.res.ResourcesCompat; import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; -import android.widget.ImageView; import android.widget.ProgressBar; import com.nostra13.universalimageloader.core.assist.FailReason; @@ -34,7 +31,6 @@ import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener; import org.mariotaku.twidere.R; -import org.mariotaku.twidere.model.ParcelableMedia; import org.mariotaku.twidere.util.support.ViewSupport; import org.mariotaku.twidere.view.ForegroundImageView; @@ -58,8 +54,7 @@ public class MediaLoadingHandler implements ImageLoadingListener, ImageLoadingPr @Override public void onLoadingStarted(final String imageUri, final View view) { final int viewHashCode = System.identityHashCode(view); - if (view == null || imageUri == null || imageUri.equals(mLoadingUris.get(viewHashCode))) - return; + if (view == null || imageUri == null || imageUri.equals(getLoadingUri(view))) return; ViewGroup parent = (ViewGroup) view.getParent(); if (view instanceof ForegroundImageView) { ViewSupport.setForeground(view, null); @@ -76,12 +71,6 @@ public class MediaLoadingHandler implements ImageLoadingListener, ImageLoadingPr @Override public void onLoadingFailed(final String imageUri, final View view, final FailReason reason) { if (view == null) return; - if (view instanceof ForegroundImageView) { - ((ImageView) view).setImageDrawable(null); - final Drawable foreground = ResourcesCompat.getDrawable(view.getResources(), - R.drawable.image_preview_refresh, null); - ViewSupport.setForeground(view, foreground); - } mLoadingUris.remove(System.identityHashCode(view)); final ProgressBar progress = findProgressBar(view.getParent()); if (progress != null) { @@ -94,35 +83,17 @@ public class MediaLoadingHandler implements ImageLoadingListener, ImageLoadingPr if (view == null) return; mLoadingUris.remove(System.identityHashCode(view)); final ViewGroup parent = (ViewGroup) view.getParent(); - setVideoIndicator(view, parent); final ProgressBar progress = findProgressBar(parent); if (progress != null) { progress.setVisibility(View.GONE); } } - public static void setVideoIndicator(View view, ViewGroup parent) { - if (view instanceof ForegroundImageView) { - final Drawable foreground; - if (isVideoItem(parent)) { - foreground = ResourcesCompat.getDrawable(view.getResources(), - R.drawable.ic_card_media_play, null); - } else { - foreground = null; - } - ViewSupport.setForeground(view, foreground); - } - } - @Override public void onLoadingCancelled(final String imageUri, final View view) { final int viewHashCode = System.identityHashCode(view); - if (view == null || imageUri == null || imageUri.equals(mLoadingUris.get(viewHashCode))) - return; + if (view == null || imageUri == null || imageUri.equals(getLoadingUri(view))) return; mLoadingUris.remove(viewHashCode); - if (view instanceof ForegroundImageView) { - ViewSupport.setForeground(view, null); - } final ProgressBar progress = findProgressBar(view.getParent()); if (progress != null) { progress.setVisibility(View.GONE); @@ -130,7 +101,8 @@ public class MediaLoadingHandler implements ImageLoadingListener, ImageLoadingPr } @Override - public void onProgressUpdate(final String imageUri, final View view, final int current, final int total) { + public void onProgressUpdate(final String imageUri, final View view, final int current, + final int total) { if (total == 0 || view == null) return; final ProgressBar progress = findProgressBar(view.getParent()); if (progress != null) { @@ -149,14 +121,4 @@ public class MediaLoadingHandler implements ImageLoadingListener, ImageLoadingPr return null; } - private static boolean isVideoItem(ViewGroup parent) { - final Object tag = parent.getTag(); - if (tag instanceof ParcelableMedia) { - final int type = ((ParcelableMedia) tag).type; - return type == ParcelableMedia.Type.TYPE_VIDEO || type == ParcelableMedia.Type.TYPE_ANIMATED_GIF - || type == ParcelableMedia.Type.TYPE_CARD_ANIMATED_GIF - || type == ParcelableMedia.Type.TYPE_EXTERNAL_PLAYER; - } - return false; - } } diff --git a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java index 033ab951c..d646fc9c4 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java +++ b/twidere/src/main/java/org/mariotaku/twidere/util/ThemeUtils.java @@ -77,6 +77,8 @@ import java.lang.reflect.Field; public class ThemeUtils implements Constants { public static final int ACCENT_COLOR_THRESHOLD = 192; + public static final int DARK_COLOR_THRESHOLD = 64; + public static final int[] ATTRS_TEXT_COLOR_PRIMARY = {android.R.attr.textColorPrimary}; public static final int[] ATTRS_TEXT_COLOR_PRIMARY_AND_INVERSE = {android.R.attr.textColorPrimary, android.R.attr.textColorPrimaryInverse}; @@ -353,18 +355,18 @@ public class ThemeUtils implements Constants { return R.style.Theme_Twidere_Light_NoDisplay; } - public static int getOptimalLinkColor(int linkColor, int textColor) { + public static int getOptimalAccentColor(int accentColor, int foregroundColor) { final int[] yiq = new int[3]; - TwidereColorUtils.colorToYIQ(textColor, yiq); - final int y = yiq[0]; - TwidereColorUtils.colorToYIQ(linkColor, yiq); - if (y < 32 && yiq[0] <= ACCENT_COLOR_THRESHOLD) { - return linkColor; - } else if (y > ACCENT_COLOR_THRESHOLD && yiq[0] > 32) { - return linkColor; + TwidereColorUtils.colorToYIQ(foregroundColor, yiq); + final int foregroundColorY = yiq[0]; + TwidereColorUtils.colorToYIQ(accentColor, yiq); + if (foregroundColorY < DARK_COLOR_THRESHOLD && yiq[0] <= ACCENT_COLOR_THRESHOLD) { + return accentColor; + } else if (foregroundColorY > ACCENT_COLOR_THRESHOLD && yiq[0] > DARK_COLOR_THRESHOLD) { + return accentColor; } - yiq[0] = yiq[0] + (y - yiq[0]) / 2; - return TwidereColorUtils.YIQToColor(Color.alpha(linkColor), yiq); + yiq[0] = yiq[0] + (foregroundColorY - yiq[0]) / 2; + return TwidereColorUtils.YIQToColor(Color.alpha(accentColor), yiq); } public static int getQuickSearchBarThemeResource(final Context context) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java b/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java index b14ed589e..726c0b0ca 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/CardMediaContainer.java @@ -132,6 +132,9 @@ public class CardMediaContainer extends ViewGroup implements Constants { } else { loader.displayPreviewImage(imageView, url, loadingHandler); } + if (imageView instanceof MediaPreviewImageView) { + ((MediaPreviewImageView) imageView).setHasPlayIcon(ParcelableMedia.hasPlayIcon(media.type)); + } child.setTag(media); child.setVisibility(VISIBLE); if (i == j - 1) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundImageView.java b/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundImageView.java index f30bb360e..e9d7d417a 100644 --- a/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundImageView.java +++ b/twidere/src/main/java/org/mariotaku/twidere/view/ForegroundImageView.java @@ -35,11 +35,13 @@ public class ForegroundImageView extends ImageView implements IForegroundView { private final ForegroundViewHelper mForegroundViewHelper; public ForegroundImageView(final Context context) { - this(context, null); + super(context); + mForegroundViewHelper = new ForegroundViewHelper(this, context, null, 0); } public ForegroundImageView(final Context context, final AttributeSet attrs) { - this(context, attrs, 0); + super(context, attrs); + mForegroundViewHelper = new ForegroundViewHelper(this, context, attrs, 0); } public ForegroundImageView(final Context context, final AttributeSet attrs, final int defStyle) { diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/MediaPreviewImageView.java b/twidere/src/main/java/org/mariotaku/twidere/view/MediaPreviewImageView.java new file mode 100644 index 000000000..7652e20a9 --- /dev/null +++ b/twidere/src/main/java/org/mariotaku/twidere/view/MediaPreviewImageView.java @@ -0,0 +1,111 @@ +package org.mariotaku.twidere.view; + +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; +import android.util.AttributeSet; +import android.widget.ImageView; + +import org.mariotaku.twidere.R; +import org.mariotaku.twidere.view.iface.IForegroundView; + +/** + * Created by mariotaku on 16/1/30. + */ +public class MediaPreviewImageView extends ImageView { + + private final IForegroundView.ForegroundViewHelper mForegroundViewHelper; + + private boolean mHasPlayIcon; + + public MediaPreviewImageView(Context context) { + this(context, null); + } + + public MediaPreviewImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public MediaPreviewImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mForegroundViewHelper = new IForegroundView.ForegroundViewHelper(this, context, attrs, defStyle); + } + + @Override + public void setImageDrawable(Drawable drawable) { + super.setImageDrawable(drawable); + updatePlayIcon(); + } + + protected void updatePlayIcon() { + if (mHasPlayIcon && getDrawable() != null) { + mForegroundViewHelper.setForeground(ContextCompat.getDrawable(getContext(), R.drawable.ic_card_media_play)); + } else { + mForegroundViewHelper.setForeground(null); + } + } + + public void setHasPlayIcon(boolean hasPlayIcon) { + mHasPlayIcon = hasPlayIcon; + updatePlayIcon(); + } + + + @Override + protected void onSizeChanged(final int w, final int h, final int oldw, final int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + if (mForegroundViewHelper != null) { + mForegroundViewHelper.dispatchOnSizeChanged(w, h, oldw, oldh); + } + } + + @Override + protected void onLayout(final boolean changed, final int left, final int top, final int right, final int bottom) { + if (mForegroundViewHelper != null) { + mForegroundViewHelper.dispatchOnLayout(changed, left, top, right, bottom); + } + super.onLayout(changed, left, top, right, bottom); + } + + @Override + protected boolean verifyDrawable(final Drawable who) { + return super.verifyDrawable(who) || (mForegroundViewHelper != null && mForegroundViewHelper.verifyDrawable(who)); + } + + @Override + public void jumpDrawablesToCurrentState() { + super.jumpDrawablesToCurrentState(); + if (mForegroundViewHelper != null) { + mForegroundViewHelper.jumpDrawablesToCurrentState(); + } + } + + @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + if (mForegroundViewHelper != null) { + mForegroundViewHelper.drawableStateChanged(); + } + } + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public void drawableHotspotChanged(float x, float y) { + super.drawableHotspotChanged(x, y); + if (mForegroundViewHelper != null) { + mForegroundViewHelper.dispatchDrawableHotspotChanged(x, y); + } + } + + @Override + protected void onDraw(@NonNull final Canvas canvas) { + super.onDraw(canvas); + if (mForegroundViewHelper != null) { + mForegroundViewHelper.dispatchOnDraw(canvas); + } + } +} diff --git a/twidere/src/main/java/org/mariotaku/twidere/view/MediaSizeImageView.java b/twidere/src/main/java/org/mariotaku/twidere/view/MediaSizeImageView.java deleted file mode 100644 index 321acf4d9..000000000 --- a/twidere/src/main/java/org/mariotaku/twidere/view/MediaSizeImageView.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.mariotaku.twidere.view; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.ViewGroup; -import android.widget.ImageView; - -/** - * Created by mariotaku on 14/11/5. - */ -public class MediaSizeImageView extends ImageView { - - private int mMediaWidth, mMediaHeight; - - public MediaSizeImageView(final Context context) { - this(context, null); - } - - public MediaSizeImageView(final Context context, final AttributeSet attrs) { - this(context, attrs, 0); - } - - public MediaSizeImageView(final Context context, final AttributeSet attrs, final int defStyle) { - super(context, attrs, defStyle); - } - - public void setMediaSize(int width, int height) { - mMediaWidth = width; - mMediaHeight = height; - requestLayout(); - } - - @Override - protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { - if (mMediaWidth == 0 || mMediaHeight == 0) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - return; - } - final float whRatio = (float) mMediaWidth / mMediaHeight; - final int width = MeasureSpec.getSize(widthMeasureSpec), height = MeasureSpec.getSize(heightMeasureSpec); - final ViewGroup.LayoutParams lp = getLayoutParams(); - if (lp.height == ViewGroup.LayoutParams.MATCH_PARENT && lp.width == ViewGroup.LayoutParams.WRAP_CONTENT) { - final int calcWidth = Math.round(height * whRatio); - super.onMeasure(MeasureSpec.makeMeasureSpec(calcWidth, MeasureSpec.EXACTLY), heightMeasureSpec); - setMeasuredDimension(calcWidth, height); - } else if (lp.width == ViewGroup.LayoutParams.MATCH_PARENT && lp.height == ViewGroup.LayoutParams.WRAP_CONTENT) { - final int calcHeight = Math.round(width / whRatio); - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(calcHeight, MeasureSpec.EXACTLY)); - setMeasuredDimension(width, calcHeight); - } else { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - } - -} diff --git a/twidere/src/main/res/drawable-hdpi/ic_card_media_play.png b/twidere/src/main/res/drawable-hdpi/ic_card_media_play.png deleted file mode 100755 index 3d64897e27d58210d9128ad0d0be4e1b5e36cf22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1415 zcmV;21$g?2P)YY;!FDiXKpwQQSs~z21;i32gBqBRs0z(Icu4)Xige`4EOnfjre{t~(o>(_q#b<| z0H5(Qe1~grE$*Qzg_s(GHfR^~BO_{dxlFx7^R)MyDSGroj_N)buL|6=_w*FXpt+SY z{YPb)rl1UJW+q6`ba9>DygWls^iALw)dI>o#AQw|u9GavAy&T)+9jE@THd7hez`|G z+#4f;vQY=>5;TFB{W7RQYF57$O7#5KxAmDJ@B-I`It67ByLp3z7xMYrOO*WhCIa^r z)OmhtNqljeHmHjnbaHr}9yy*vz=43ePmau!pe|DewL0ZF2(11%0u2_#(C2JYfoaig zP=Yx}3gOZA`^gcWB&oTbV-h+IYG*2{7qb8F91+BX*qnwX?Yazt(_@OR96gAOzwkIc z`}w3Vy_-V{Fv=u!7_^TRLJs04@P^(T-T$XduV1=r+@xb1ql4OX7?dF!A&W(#=GLH< zhnslL>C~?UYBZco-ce`VXT2JM+3V@nX<5vJpnqsMxbXHu@^JKu@M_Xg8^slURkWxiu)M zm|(}WgE51k-256n_vP<84MNOL%`EB0po6N(uB|6>Mh$|N);H<3i+8DBlR=0Xu`6`I zjX_7rM(JBcRH(@yS)W}m(Bmid^m2$@p`&gLN|TM=zB22pLD1OTs+J~)>05>R-54}P zHfldJ?YlwHGB>$5F3)%x5F>VlhTIsGCmUfh-JC(PPTyE?onjz%h4R%JRL?Aujj-Zi z-XOWjJ?-KTh1eA;GIiA$wB0U)E^k(lx(99$w6L~8ul(>wwZjh8y4xDF?SF4jqc?-% zCMFmZzoetz&0q4?&39<-=KIM;M}kTeztE5HYNDeg~3+YhfK&=f{|60~NSWPme zTAA*6(RsRKr``#(;pk16eJD(r>78<2si`T~!(I$(RyDKkf#^)ycN?6v2WQDfcQh{h znA}6uXn5HNw2?x`20bnuUi4w%aM1k1VS*V|Ej{lE@zV1i^Gnb2=7mXYUic(@n->t% zr1R#5{kr!DWk{h5*#06UkA8w!5R-#4CN@yDIBlRxjr<*&4OEE5%myl%PJ+}X1^OhR zZowR=)AT0J6e)$~_8^dV66!?Vf>M6$a^1>gNiDn_<=#zmZ-qJqWf8j{27x9fCv7B0 z4$>%&tK5UK-yghBs7uf|Vh-XcLXHF>i|roJdlUhgH_FV1;wXarBxOk!28$R`W2(f> zd=l=#y(pua!z=^79cB^UNvUd&L#1&X>Z*Jk3fFw=?l@Emv4!bCU1x|6)V&(kBbhBs zCcq<^8N?8UQ_uUEQSwhCs56Sk!rPed3?2(d*)K)oSh$=L9Ac6Jg zX)Uw7!}K#lOr9w+Yry)Px4!GQu6@~Q^&$EO$<#61Eb1cv&rQq|8x$K98x$K9^Dhuy V@y^0bUgrP+002ovPDHLkV1g_qrBna_ diff --git a/twidere/src/main/res/drawable-mdpi/ic_card_media_play.png b/twidere/src/main/res/drawable-mdpi/ic_card_media_play.png deleted file mode 100755 index 6c2101198585d2bfedb6c3e88c280ecd92e982df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmV-&1C9KNP)+*7U1AEjN&0jx$#&I9Ao(L@Nx$nUl;anWL&=#hYay$=o0f z?CgT13&c!@X~1FLryBUV{gcMZ*=MLCp!HgM@R3Zshf$v@fzO48m!#|&~R)U zIL4eKA7l$l1qs z1F>qEaEuN3rOooDOBbd;;zL*=Vl8jEDN1T z=osh|Pgp#70vYgPdTEnRG>}qVtO;#_J{<$23aHkw8Yj7$l@^Ya?dJ-R$QJZTxMq=1KklY5UCW3{Ezs*D5E3$ z=0Wye=Ru~?N_0i6mGEii)|%eT4YH_w_G0{_dtTJFa*h-NAz9pOKgtS=+ zX|M%4K66pzDSm9mqs8HOdBidpEgBAYa~oyUZ0&~~h_!>S*Ld%C=)+z4pGfW19;5BJ z?isIli}5<%LwitXyq>Z?UKbo-7DBk-C?IyTu9#w~Hdn|T6%{Mis!P7H1~2(OtG#FT z!!>I=vsbmdGt7*v2}S8IAjW7Yx#dh7%vaM5kV0|SxfKb_rYPK15orT_o{07*qo IM6N<$f;vr?_5c6? diff --git a/twidere/src/main/res/drawable-xhdpi/ic_card_media_play.png b/twidere/src/main/res/drawable-xhdpi/ic_card_media_play.png deleted file mode 100755 index 84ec2029dbfe1ca9becbca1f5eb14d5d965b68d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1851 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 diff --git a/twidere/src/main/res/layout/layout_card_media_preview_item.xml b/twidere/src/main/res/layout/layout_card_media_preview_item.xml index 8d2662c2a..b01e52a15 100644 --- a/twidere/src/main/res/layout/layout_card_media_preview_item.xml +++ b/twidere/src/main/res/layout/layout_card_media_preview_item.xml @@ -23,7 +23,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + + + ic_card_media_play-mdpi + Created with Sketch. + + + + + + + + \ No newline at end of file