mirror of
https://github.com/TwidereProject/Twidere-Android
synced 2025-02-07 15:28:51 +01:00
improved combined emoji
improved user agent improved dns
This commit is contained in:
parent
8c8bd746dc
commit
ee48b63e63
@ -148,9 +148,9 @@ public abstract class AbsActivitiesAdapter<Data> extends LoadMoreSupportAdapter<
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int position) {
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int statusPosition) {
|
||||
if (mActivityAdapterListener != null) {
|
||||
mActivityAdapterListener.onMediaClick(holder, view, media, position);
|
||||
mActivityAdapterListener.onMediaClick(holder, view, media, statusPosition);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -163,9 +163,9 @@ public abstract class AbsStatusesAdapter<D> extends LoadMoreSupportAdapter<ViewH
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, final ParcelableMedia media, int position) {
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, final ParcelableMedia media, int statusPosition) {
|
||||
if (mStatusAdapterListener == null) return;
|
||||
mStatusAdapterListener.onMediaClick(holder, view, media, position);
|
||||
mStatusAdapterListener.onMediaClick(holder, view, media, statusPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -289,7 +289,7 @@ public abstract class AbsStatusesAdapter<D> extends LoadMoreSupportAdapter<ViewH
|
||||
public interface StatusAdapterListener {
|
||||
void onGapClick(GapViewHolder holder, int position);
|
||||
|
||||
void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int position);
|
||||
void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int statusPosition);
|
||||
|
||||
void onStatusActionClick(IStatusViewHolder holder, int id, int position);
|
||||
|
||||
|
@ -325,9 +325,9 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentListRecyclerVi
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int position) {
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int statusPosition) {
|
||||
final AbsStatusesAdapter<Data> adapter = getAdapter();
|
||||
final ParcelableStatus status = adapter.getStatus(position);
|
||||
final ParcelableStatus status = adapter.getStatus(statusPosition);
|
||||
if (status == null) return;
|
||||
final Bundle options = Utils.createMediaViewerActivityOption(view);
|
||||
Utils.openMedia(getActivity(), status, media, options);
|
||||
|
@ -80,6 +80,7 @@ import android.widget.TextView;
|
||||
import com.squareup.otto.Subscribe;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.mariotaku.sqliteqb.library.Expression;
|
||||
import org.mariotaku.twidere.R;
|
||||
import org.mariotaku.twidere.activity.support.ColorPickerDialogActivity;
|
||||
@ -369,8 +370,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int position) {
|
||||
final ParcelableStatus status = mStatusAdapter.getStatus(position);
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int statusPosition) {
|
||||
final ParcelableStatus status = mStatusAdapter.getStatus(statusPosition);
|
||||
if (status == null) return;
|
||||
final Bundle options = Utils.createMediaViewerActivityOption(view);
|
||||
Utils.openMedia(getActivity(), status, media, options);
|
||||
@ -925,8 +926,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
private final ImageView profileTypeView;
|
||||
private final TextView timeSourceView;
|
||||
private final TextView retweetedByView;
|
||||
private final View retweetsContainer, favoritesContainer;
|
||||
private final TextView retweetsCountView, favoritesCountView;
|
||||
private final View repliesContainer, retweetsContainer, favoritesContainer;
|
||||
private final TextView repliesCountView, retweetsCountView, favoritesCountView;
|
||||
private final View countsContainer;
|
||||
|
||||
private final TextView quoteOriginalLink;
|
||||
@ -943,7 +944,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
private final TwitterCardContainer twitterCard;
|
||||
private final StatusLinkClickHandler linkClickHandler;
|
||||
private final TwidereLinkify linkify;
|
||||
private final TextView retweetsLabel, favoritesLabel;
|
||||
private final TextView repliesLabel, retweetsLabel, favoritesLabel;
|
||||
private final View translateContainer;
|
||||
private final TextView translateResultView;
|
||||
private final RecyclerView interactUsersView;
|
||||
@ -961,8 +962,10 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
profileTypeView = (ImageView) itemView.findViewById(R.id.profile_type);
|
||||
timeSourceView = (TextView) itemView.findViewById(R.id.time_source);
|
||||
retweetedByView = (TextView) itemView.findViewById(R.id.retweeted_by);
|
||||
repliesContainer = itemView.findViewById(R.id.replies_container);
|
||||
retweetsContainer = itemView.findViewById(R.id.retweets_container);
|
||||
favoritesContainer = itemView.findViewById(R.id.favorites_container);
|
||||
repliesCountView = (TextView) itemView.findViewById(R.id.replies_count);
|
||||
retweetsCountView = (TextView) itemView.findViewById(R.id.retweets_count);
|
||||
favoritesCountView = (TextView) itemView.findViewById(R.id.favorites_count);
|
||||
mediaPreviewContainer = itemView.findViewById(R.id.media_preview_container);
|
||||
@ -972,6 +975,8 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
quoteOriginalLink = (TextView) itemView.findViewById(R.id.quote_original_link);
|
||||
profileContainer = (ColorLabelRelativeLayout) itemView.findViewById(R.id.profile_container);
|
||||
twitterCard = (TwitterCardContainer) itemView.findViewById(R.id.twitter_card);
|
||||
|
||||
repliesLabel = (TextView) itemView.findViewById(R.id.replies_label);
|
||||
retweetsLabel = (TextView) itemView.findViewById(R.id.retweets_label);
|
||||
favoritesLabel = (TextView) itemView.findViewById(R.id.favorites_label);
|
||||
|
||||
@ -1096,19 +1101,24 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
locationView.setText(null);
|
||||
}
|
||||
|
||||
final long retweetCount, favoriteCount;
|
||||
final long repliesCount, retweetCount, favoriteCount;
|
||||
if (statusActivity != null) {
|
||||
repliesCount = statusActivity.getReplyCount();
|
||||
retweetCount = statusActivity.getRetweetCount();
|
||||
favoriteCount = statusActivity.getFavoriteCount();
|
||||
} else {
|
||||
repliesCount = status.reply_count;
|
||||
retweetCount = status.retweet_count;
|
||||
favoriteCount = status.favorite_count;
|
||||
}
|
||||
|
||||
repliesContainer.setVisibility(repliesCount > 0 ? View.VISIBLE : View.GONE);
|
||||
retweetsContainer.setVisibility(!status.user_is_protected && retweetCount > 0 ? View.VISIBLE : View.GONE);
|
||||
favoritesContainer.setVisibility(favoriteCount > 0 ? View.VISIBLE : View.GONE);
|
||||
|
||||
if (retweetsContainer.getVisibility() == View.VISIBLE || favoritesContainer.getVisibility() == View.VISIBLE) {
|
||||
if (retweetsContainer.getVisibility() == View.VISIBLE
|
||||
|| favoritesContainer.getVisibility() == View.VISIBLE
|
||||
|| repliesContainer.getVisibility() == View.VISIBLE) {
|
||||
countsContainer.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
countsContainer.setVisibility(View.GONE);
|
||||
@ -1116,6 +1126,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
|
||||
final Locale locale = context.getResources().getConfiguration().locale;
|
||||
|
||||
repliesCountView.setText(Utils.getLocalizedNumber(locale, repliesCount));
|
||||
retweetsCountView.setText(Utils.getLocalizedNumber(locale, retweetCount));
|
||||
favoritesCountView.setText(Utils.getLocalizedNumber(locale, favoriteCount));
|
||||
final UserProfileImagesAdapter interactUsersAdapter = (UserProfileImagesAdapter) interactUsersView.getAdapter();
|
||||
@ -1316,6 +1327,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
retweetsCountView.setTextSize(defaultTextSize * 1.25f);
|
||||
favoritesCountView.setTextSize(defaultTextSize * 1.25f);
|
||||
|
||||
repliesLabel.setTextSize(defaultTextSize * 0.85f);
|
||||
retweetsLabel.setTextSize(defaultTextSize * 0.85f);
|
||||
favoritesLabel.setTextSize(defaultTextSize * 0.85f);
|
||||
|
||||
@ -1401,14 +1413,26 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
final ParcelableStatus status = adapter.getStatus();
|
||||
if (status.media != null) {
|
||||
for (final ParcelableMedia media : status.media) {
|
||||
if (media.start == start && media.end == end) {
|
||||
adapter.setDetailMediaExpanded(true);
|
||||
if (link.equals(media.page_url)) {
|
||||
expandOrOpenMedia();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (type == TwidereLinkify.LINK_TYPE_STATUS && status.id == NumberUtils.toLong(link)) {
|
||||
expandOrOpenMedia();
|
||||
return;
|
||||
}
|
||||
super.onLinkClick(link, orig, accountId, extraId, type, sensitive, start, end);
|
||||
}
|
||||
|
||||
private void expandOrOpenMedia() {
|
||||
if (adapter.isDetailMediaExpanded()) {
|
||||
//TODO open first media
|
||||
return;
|
||||
}
|
||||
adapter.setDetailMediaExpanded(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1904,9 +1928,9 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int position) {
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int statusPosition) {
|
||||
if (mStatusAdapterListener != null) {
|
||||
mStatusAdapterListener.onMediaClick(holder, view, media, position);
|
||||
mStatusAdapterListener.onMediaClick(holder, view, media, statusPosition);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -158,7 +158,7 @@ public class UserMediaTimelineFragment extends AbsContentRecyclerViewFragment<St
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int position) {
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int statusPosition) {
|
||||
|
||||
}
|
||||
|
||||
|
@ -22,12 +22,15 @@ package org.mariotaku.twidere.util.net;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.Log;
|
||||
import android.util.LruCache;
|
||||
import android.util.TimingLogger;
|
||||
|
||||
import com.squareup.okhttp.Dns;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.mariotaku.twidere.BuildConfig;
|
||||
import org.mariotaku.twidere.Constants;
|
||||
import org.mariotaku.twidere.util.SharedPreferencesWrapper;
|
||||
@ -49,27 +52,28 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class TwidereDns implements Constants, Dns {
|
||||
|
||||
private static final String RESOLVER_LOGTAG = "Twidere.Host";
|
||||
private static final String RESOLVER_LOGTAG = "TwidereDns";
|
||||
|
||||
private static final String DEFAULT_DNS_SERVER_ADDRESS = "8.8.8.8";
|
||||
|
||||
private final SharedPreferences mHostMapping, mPreferences;
|
||||
private final LruCache<String, InetAddress[]> mHostCache = new LruCache<>(512);
|
||||
private final String mDnsAddress;
|
||||
private final SystemHosts mResolver;
|
||||
private final SystemHosts mSystemHosts;
|
||||
|
||||
private Resolver mDns;
|
||||
private TimingLogger mLogger;
|
||||
|
||||
public TwidereDns(final Context context) {
|
||||
mLogger = new TimingLogger(RESOLVER_LOGTAG, "resolve");
|
||||
mHostMapping = SharedPreferencesWrapper.getInstance(context, HOST_MAPPING_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
mPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
final String address = mPreferences.getString(KEY_DNS_SERVER, DEFAULT_DNS_SERVER_ADDRESS);
|
||||
mDnsAddress = isValidIpAddress(address) ? address : DEFAULT_DNS_SERVER_ADDRESS;
|
||||
mResolver = new SystemHosts();
|
||||
mSystemHosts = new SystemHosts();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@ -80,38 +84,44 @@ public class TwidereDns implements Constants, Dns {
|
||||
|
||||
@NonNull
|
||||
private InetAddress[] resolveInternal(String originalHost, String host) throws IOException {
|
||||
if (isValidIpAddress(host)) {
|
||||
final InetAddress[] inetAddresses = fromAddressString(originalHost, host);
|
||||
if (inetAddresses != null) return inetAddresses;
|
||||
mLogger.reset();
|
||||
// Return if host is an address
|
||||
final InetAddress[] fromAddressString = fromAddressString(originalHost, host);
|
||||
if (fromAddressString != null) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
mLogger.dumpToLog();
|
||||
}
|
||||
return fromAddressString;
|
||||
}
|
||||
// First, I'll try to load address cached.
|
||||
final InetAddress[] cachedHostAddr = mHostCache.get(host);
|
||||
if (cachedHostAddr != null) {
|
||||
if (BuildConfig.DEBUG && Log.isLoggable(RESOLVER_LOGTAG, Log.VERBOSE)) {
|
||||
Log.v(RESOLVER_LOGTAG, "Got cached " + Arrays.toString(cachedHostAddr));
|
||||
return cachedHostAddr;
|
||||
// Find from cache
|
||||
final InetAddress[] fromCache = getCached(host);
|
||||
if (fromCache != null) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
mLogger.dumpToLog();
|
||||
}
|
||||
return fromCache;
|
||||
}
|
||||
final String customMappedHost = findHost(host);
|
||||
if (customMappedHost != null) {
|
||||
final InetAddress[] hostAddr = fromAddressString(originalHost, customMappedHost);
|
||||
putCache(originalHost, hostAddr);
|
||||
if (BuildConfig.DEBUG && Log.isLoggable(RESOLVER_LOGTAG, Log.VERBOSE)) {
|
||||
Log.v(RESOLVER_LOGTAG, "Got mapped address " + customMappedHost + " for host " + host);
|
||||
}
|
||||
if (hostAddr != null) {
|
||||
return hostAddr;
|
||||
// Load from custom mapping
|
||||
mLogger.addSplit("start custom mappong resolve");
|
||||
final InetAddress[] fromMapping = getFromMapping(host);
|
||||
mLogger.addSplit("end custom mappong resolve");
|
||||
if (fromMapping != null) {
|
||||
putCache(originalHost, fromMapping);
|
||||
if (BuildConfig.DEBUG) {
|
||||
mLogger.dumpToLog();
|
||||
}
|
||||
return fromMapping;
|
||||
}
|
||||
try {
|
||||
final InetAddress[] hostAddr = mResolver.resolve(host);
|
||||
putCache(originalHost, hostAddr);
|
||||
if (BuildConfig.DEBUG && Log.isLoggable(RESOLVER_LOGTAG, Log.VERBOSE)) {
|
||||
Log.v(RESOLVER_LOGTAG, "Got hosts " + Arrays.toString(hostAddr));
|
||||
// Load from /etc/hosts
|
||||
mLogger.addSplit("start /etc/hosts resolve");
|
||||
final InetAddress[] fromSystemHosts = fromSystemHosts(host);
|
||||
mLogger.addSplit("end /etc/hosts resolve");
|
||||
if (fromSystemHosts != null) {
|
||||
putCache(originalHost, fromSystemHosts);
|
||||
if (BuildConfig.DEBUG) {
|
||||
mLogger.dumpToLog();
|
||||
}
|
||||
return hostAddr;
|
||||
} catch (UnknownHostException e) {
|
||||
// Ignore
|
||||
return fromSystemHosts;
|
||||
}
|
||||
// Use TCP DNS Query if enabled.
|
||||
// final Resolver dns = getResolver();
|
||||
@ -119,14 +129,28 @@ public class TwidereDns implements Constants, Dns {
|
||||
// final InetAddress[] hostAddr = resolveDns(originalHost, host, dns);
|
||||
// if (hostAddr != null) return hostAddr;
|
||||
// }
|
||||
if (BuildConfig.DEBUG && Log.isLoggable(RESOLVER_LOGTAG, Log.VERBOSE)) {
|
||||
Log.v(RESOLVER_LOGTAG, "Resolve address " + host + " failed, using original host");
|
||||
}
|
||||
mLogger.addSplit("start system default resolve");
|
||||
final InetAddress[] defaultAddresses = InetAddress.getAllByName(host);
|
||||
mLogger.addSplit("end system default resolve");
|
||||
putCache(host, defaultAddresses);
|
||||
if (BuildConfig.DEBUG) {
|
||||
mLogger.dumpToLog();
|
||||
}
|
||||
return defaultAddresses;
|
||||
}
|
||||
|
||||
private InetAddress[] fromSystemHosts(String host) {
|
||||
try {
|
||||
return mSystemHosts.resolve(host);
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private InetAddress[] getCached(String host) {
|
||||
return mHostCache.get(host);
|
||||
}
|
||||
|
||||
private InetAddress[] resolveDns(String originalHost, String host, Resolver dns) throws IOException {
|
||||
final Lookup lookup = new Lookup(new Name(host), Type.A, DClass.IN);
|
||||
final Record[] records;
|
||||
@ -151,7 +175,7 @@ public class TwidereDns implements Constants, Dns {
|
||||
if (!resolvedAddresses.isEmpty()) {
|
||||
final InetAddress[] hostAddr = resolvedAddresses.toArray(new InetAddress[resolvedAddresses.size()]);
|
||||
putCache(originalHost, hostAddr);
|
||||
if (BuildConfig.DEBUG && Log.isLoggable(RESOLVER_LOGTAG, Log.VERBOSE)) {
|
||||
if (BuildConfig.DEBUG) {
|
||||
Log.v(RESOLVER_LOGTAG, "Resolved " + Arrays.toString(hostAddr));
|
||||
}
|
||||
return hostAddr;
|
||||
@ -176,9 +200,27 @@ public class TwidereDns implements Constants, Dns {
|
||||
return new InetAddress[]{resolved};
|
||||
}
|
||||
|
||||
private String findHost(final String host) {
|
||||
@Nullable
|
||||
private InetAddress[] getFromMapping(final String host) {
|
||||
return getFromMappingInternal(host, host, false);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private InetAddress[] getFromMappingInternal(String host, String origHost, boolean checkRecursive) {
|
||||
if (checkRecursive && hostMatches(host, origHost)) {
|
||||
// Recursive resolution, stop this call
|
||||
return null;
|
||||
}
|
||||
for (final Entry<String, ?> entry : mHostMapping.getAll().entrySet()) {
|
||||
if (hostMatches(host, entry.getKey())) return (String) entry.getValue();
|
||||
if (hostMatches(host, entry.getKey())) {
|
||||
final String value = (String) entry.getValue();
|
||||
final InetAddress resolved = InetAddressUtils.getResolvedIPAddress(origHost, value);
|
||||
if (resolved == null) {
|
||||
// Maybe another hostname
|
||||
return getFromMappingInternal(value, origHost, true);
|
||||
}
|
||||
return new InetAddress[]{resolved};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -190,7 +232,7 @@ public class TwidereDns implements Constants, Dns {
|
||||
|
||||
private static boolean hostMatches(final String host, final String rule) {
|
||||
if (rule == null || host == null) return false;
|
||||
if (rule.startsWith(".")) return host.matches("(?i).*" + Pattern.quote(rule));
|
||||
if (rule.startsWith(".")) return StringUtils.endsWithIgnoreCase(host, rule);
|
||||
return host.equalsIgnoreCase(rule);
|
||||
}
|
||||
|
||||
|
@ -661,7 +661,7 @@ public class StatusViewHolder extends ViewHolder implements Constants, OnClickLi
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int position) {
|
||||
public void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int statusPosition) {
|
||||
|
||||
}
|
||||
|
||||
|
@ -53,7 +53,7 @@ public interface IStatusViewHolder extends CardMediaContainer.OnMediaClickListen
|
||||
|
||||
interface StatusClickListener extends ContentCardClickListener {
|
||||
|
||||
void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int position);
|
||||
void onMediaClick(IStatusViewHolder holder, View view, ParcelableMedia media, int statusPosition);
|
||||
|
||||
void onStatusClick(IStatusViewHolder holder, int position);
|
||||
|
||||
|
@ -380,13 +380,46 @@
|
||||
android:orientation="horizontal"
|
||||
android:splitMotionEvents="false">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/replies_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0"
|
||||
android:background="?selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:gravity="center_vertical"
|
||||
android:minWidth="@dimen/element_size_normal"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/element_spacing_normal">
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/replies_count"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/element_spacing_small"
|
||||
android:layout_marginRight="@dimen/element_spacing_small"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textStyle="bold"
|
||||
tools:text="255"/>
|
||||
|
||||
<org.mariotaku.twidere.view.themed.ThemedTextView
|
||||
android:id="@+id/replies_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:text="@string/replies"
|
||||
android:textAppearance="?android:textAppearanceSmall"
|
||||
android:textColor="?android:textColorSecondary"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/retweets_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0"
|
||||
android:background="?selectableItemBackground"
|
||||
android:baselineAligned="true"
|
||||
android:clickable="true"
|
||||
android:gravity="center_vertical"
|
||||
android:minWidth="@dimen/element_size_normal"
|
||||
@ -421,7 +454,6 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0"
|
||||
android:background="?selectableItemBackground"
|
||||
android:baselineAligned="true"
|
||||
android:clickable="true"
|
||||
android:gravity="center_vertical"
|
||||
android:minWidth="@dimen/element_size_normal"
|
||||
|
Loading…
x
Reference in New Issue
Block a user