Merge branch 'dev' into enqueue-playlist
This commit is contained in:
commit
fb4cd98014
8 changed files with 218 additions and 28 deletions
|
@ -57,7 +57,7 @@ dependencies {
|
||||||
exclude module: 'support-annotations'
|
exclude module: 'support-annotations'
|
||||||
})
|
})
|
||||||
|
|
||||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:e7e411dc296d8633'
|
implementation 'com.github.TeamNewPipe:NewPipeExtractor:aa4f03a'
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
testImplementation 'org.mockito:mockito-core:2.23.0'
|
testImplementation 'org.mockito:mockito-core:2.23.0'
|
||||||
|
|
|
@ -36,7 +36,6 @@ import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
|
import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
|
||||||
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||||
import org.schabi.newpipe.extractor.stream.VideoStream;
|
import org.schabi.newpipe.extractor.stream.VideoStream;
|
||||||
import org.schabi.newpipe.player.helper.PlayerHelper;
|
|
||||||
import org.schabi.newpipe.player.playqueue.ChannelPlayQueue;
|
import org.schabi.newpipe.player.playqueue.ChannelPlayQueue;
|
||||||
import org.schabi.newpipe.player.playqueue.PlayQueue;
|
import org.schabi.newpipe.player.playqueue.PlayQueue;
|
||||||
import org.schabi.newpipe.player.playqueue.PlaylistPlayQueue;
|
import org.schabi.newpipe.player.playqueue.PlaylistPlayQueue;
|
||||||
|
@ -81,10 +80,13 @@ public class RouterActivity extends AppCompatActivity {
|
||||||
protected int selectedPreviously = -1;
|
protected int selectedPreviously = -1;
|
||||||
|
|
||||||
protected String currentUrl;
|
protected String currentUrl;
|
||||||
|
protected boolean internalRoute = false;
|
||||||
protected final CompositeDisposable disposables = new CompositeDisposable();
|
protected final CompositeDisposable disposables = new CompositeDisposable();
|
||||||
|
|
||||||
private boolean selectionIsDownload = false;
|
private boolean selectionIsDownload = false;
|
||||||
|
|
||||||
|
public static final String internalRouteKey = "internalRoute";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -99,6 +101,8 @@ public class RouterActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internalRoute = getIntent().getBooleanExtra(internalRouteKey, false);
|
||||||
|
|
||||||
setTheme(ThemeHelper.isLightThemeSelected(this)
|
setTheme(ThemeHelper.isLightThemeSelected(this)
|
||||||
? R.style.RouterActivityThemeLight : R.style.RouterActivityThemeDark);
|
? R.style.RouterActivityThemeLight : R.style.RouterActivityThemeDark);
|
||||||
}
|
}
|
||||||
|
@ -383,8 +387,10 @@ public class RouterActivity extends AppCompatActivity {
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(intent -> {
|
.subscribe(intent -> {
|
||||||
|
if(!internalRoute){
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||||
|
}
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
|
|
||||||
finish();
|
finish();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package org.schabi.newpipe.info_list.holder;
|
package org.schabi.newpipe.info_list.holder;
|
||||||
|
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.text.TextUtils;
|
import android.text.util.Linkify;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
@ -11,9 +11,13 @@ import org.schabi.newpipe.extractor.InfoItem;
|
||||||
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
|
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
|
||||||
import org.schabi.newpipe.info_list.InfoItemBuilder;
|
import org.schabi.newpipe.info_list.InfoItemBuilder;
|
||||||
import org.schabi.newpipe.report.ErrorActivity;
|
import org.schabi.newpipe.report.ErrorActivity;
|
||||||
|
import org.schabi.newpipe.util.CommentTextOnTouchListener;
|
||||||
import org.schabi.newpipe.util.ImageDisplayConstants;
|
import org.schabi.newpipe.util.ImageDisplayConstants;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import de.hdodenhof.circleimageview.CircleImageView;
|
import de.hdodenhof.circleimageview.CircleImageView;
|
||||||
|
|
||||||
public class CommentsMiniInfoItemHolder extends InfoItemHolder {
|
public class CommentsMiniInfoItemHolder extends InfoItemHolder {
|
||||||
|
@ -26,6 +30,25 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
|
||||||
private static final int commentDefaultLines = 2;
|
private static final int commentDefaultLines = 2;
|
||||||
private static final int commentExpandedLines = 1000;
|
private static final int commentExpandedLines = 1000;
|
||||||
|
|
||||||
|
private String commentText;
|
||||||
|
private String streamUrl;
|
||||||
|
|
||||||
|
private static final Pattern pattern = Pattern.compile("(\\d+:)?(\\d+)?:(\\d+)");
|
||||||
|
|
||||||
|
private final Linkify.TransformFilter timestampLink = new Linkify.TransformFilter() {
|
||||||
|
@Override
|
||||||
|
public String transformUrl(Matcher match, String url) {
|
||||||
|
int timestamp = 0;
|
||||||
|
String hours = match.group(1);
|
||||||
|
String minutes = match.group(2);
|
||||||
|
String seconds = match.group(3);
|
||||||
|
if(hours != null) timestamp += (Integer.parseInt(hours.replace(":", ""))*3600);
|
||||||
|
if(minutes != null) timestamp += (Integer.parseInt(minutes.replace(":", ""))*60);
|
||||||
|
if(seconds != null) timestamp += (Integer.parseInt(seconds));
|
||||||
|
return streamUrl + url.replace(match.group(0), "&t=" + String.valueOf(timestamp));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
CommentsMiniInfoItemHolder(InfoItemBuilder infoItemBuilder, int layoutId, ViewGroup parent) {
|
CommentsMiniInfoItemHolder(InfoItemBuilder infoItemBuilder, int layoutId, ViewGroup parent) {
|
||||||
super(infoItemBuilder, layoutId, parent);
|
super(infoItemBuilder, layoutId, parent);
|
||||||
|
|
||||||
|
@ -66,34 +89,59 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// ellipsize if not already ellipsized
|
streamUrl = item.getUrl();
|
||||||
if (null == itemContentView.getEllipsize()) {
|
|
||||||
itemContentView.setEllipsize(TextUtils.TruncateAt.END);
|
|
||||||
itemContentView.setMaxLines(commentDefaultLines);
|
itemContentView.setMaxLines(commentDefaultLines);
|
||||||
|
commentText = item.getCommentText();
|
||||||
|
itemContentView.setText(commentText);
|
||||||
|
linkify();
|
||||||
|
itemContentView.setOnTouchListener(CommentTextOnTouchListener.INSTANCE);
|
||||||
|
|
||||||
|
if(itemContentView.getLineCount() == 0){
|
||||||
|
itemContentView.post(() -> ellipsize());
|
||||||
|
}else{
|
||||||
|
ellipsize();
|
||||||
}
|
}
|
||||||
|
|
||||||
itemContentView.setText(item.getCommentText());
|
|
||||||
if (null != item.getLikeCount()) {
|
if (null != item.getLikeCount()) {
|
||||||
itemLikesCountView.setText(String.valueOf(item.getLikeCount()));
|
itemLikesCountView.setText(String.valueOf(item.getLikeCount()));
|
||||||
}
|
}
|
||||||
itemPublishedTime.setText(item.getPublishedTime());
|
itemPublishedTime.setText(item.getPublishedTime());
|
||||||
|
|
||||||
itemView.setOnClickListener(view -> {
|
itemView.setOnClickListener(view -> {
|
||||||
toggleEllipsize(item.getCommentText());
|
toggleEllipsize();
|
||||||
if (itemBuilder.getOnCommentsSelectedListener() != null) {
|
if (itemBuilder.getOnCommentsSelectedListener() != null) {
|
||||||
itemBuilder.getOnCommentsSelectedListener().selected(item);
|
itemBuilder.getOnCommentsSelectedListener().selected(item);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void toggleEllipsize(String text) {
|
private void ellipsize() {
|
||||||
// toggle ellipsize
|
if (itemContentView.getLineCount() > commentDefaultLines){
|
||||||
if (null == itemContentView.getEllipsize()) {
|
int endOfLastLine = itemContentView.getLayout().getLineEnd(commentDefaultLines - 1);
|
||||||
itemContentView.setEllipsize(TextUtils.TruncateAt.END);
|
String newVal = itemContentView.getText().subSequence(0, endOfLastLine - 3) + "...";
|
||||||
itemContentView.setMaxLines(commentDefaultLines);
|
itemContentView.setText(newVal);
|
||||||
} else {
|
linkify();
|
||||||
itemContentView.setEllipsize(null);
|
|
||||||
itemContentView.setMaxLines(commentExpandedLines);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void toggleEllipsize() {
|
||||||
|
if (itemContentView.getText().toString().equals(commentText)) {
|
||||||
|
ellipsize();
|
||||||
|
} else {
|
||||||
|
expand();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void expand() {
|
||||||
|
itemContentView.setMaxLines(commentExpandedLines);
|
||||||
|
itemContentView.setText(commentText);
|
||||||
|
linkify();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void linkify(){
|
||||||
|
Linkify.addLinks(itemContentView, Linkify.WEB_URLS);
|
||||||
|
Linkify.addLinks(itemContentView, pattern, null, null, timestampLink);
|
||||||
|
itemContentView.setMovementMethod(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
package org.schabi.newpipe.util;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.text.Layout;
|
||||||
|
import android.text.Selection;
|
||||||
|
import android.text.Spannable;
|
||||||
|
import android.text.Spanned;
|
||||||
|
import android.text.style.ClickableSpan;
|
||||||
|
import android.text.style.URLSpan;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
|
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||||
|
import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory;
|
||||||
|
import org.schabi.newpipe.extractor.stream.StreamInfo;
|
||||||
|
import org.schabi.newpipe.player.playqueue.PlayQueue;
|
||||||
|
import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import io.reactivex.Single;
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
|
||||||
|
public class CommentTextOnTouchListener implements View.OnTouchListener {
|
||||||
|
|
||||||
|
public static final CommentTextOnTouchListener INSTANCE = new CommentTextOnTouchListener();
|
||||||
|
|
||||||
|
private static final Pattern timestampPattern = Pattern.compile(".*&t=(\\d+)");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
|
if(!(v instanceof TextView)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
TextView widget = (TextView) v;
|
||||||
|
Object text = widget.getText();
|
||||||
|
if (text instanceof Spanned) {
|
||||||
|
Spannable buffer = (Spannable) text;
|
||||||
|
|
||||||
|
int action = event.getAction();
|
||||||
|
|
||||||
|
if (action == MotionEvent.ACTION_UP
|
||||||
|
|| action == MotionEvent.ACTION_DOWN) {
|
||||||
|
int x = (int) event.getX();
|
||||||
|
int y = (int) event.getY();
|
||||||
|
|
||||||
|
x -= widget.getTotalPaddingLeft();
|
||||||
|
y -= widget.getTotalPaddingTop();
|
||||||
|
|
||||||
|
x += widget.getScrollX();
|
||||||
|
y += widget.getScrollY();
|
||||||
|
|
||||||
|
Layout layout = widget.getLayout();
|
||||||
|
int line = layout.getLineForVertical(y);
|
||||||
|
int off = layout.getOffsetForHorizontal(line, x);
|
||||||
|
|
||||||
|
ClickableSpan[] link = buffer.getSpans(off, off,
|
||||||
|
ClickableSpan.class);
|
||||||
|
|
||||||
|
if (link.length != 0) {
|
||||||
|
if (action == MotionEvent.ACTION_UP) {
|
||||||
|
boolean handled = false;
|
||||||
|
if(link[0] instanceof URLSpan){
|
||||||
|
handled = handleUrl(v.getContext(), (URLSpan) link[0]);
|
||||||
|
}
|
||||||
|
if(!handled) link[0].onClick(widget);
|
||||||
|
} else if (action == MotionEvent.ACTION_DOWN) {
|
||||||
|
Selection.setSelection(buffer,
|
||||||
|
buffer.getSpanStart(link[0]),
|
||||||
|
buffer.getSpanEnd(link[0]));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean handleUrl(Context context, URLSpan urlSpan) {
|
||||||
|
String url = urlSpan.getURL();
|
||||||
|
StreamingService service;
|
||||||
|
StreamingService.LinkType linkType;
|
||||||
|
try {
|
||||||
|
service = NewPipe.getServiceByUrl(url);
|
||||||
|
linkType = service.getLinkTypeByUrl(url);
|
||||||
|
} catch (ExtractionException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(linkType == StreamingService.LinkType.NONE){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Matcher matcher = timestampPattern.matcher(url);
|
||||||
|
if(linkType == StreamingService.LinkType.STREAM && matcher.matches()){
|
||||||
|
int seconds = Integer.parseInt(matcher.group(1));
|
||||||
|
return playOnPopup(context, url, service, seconds);
|
||||||
|
}else{
|
||||||
|
NavigationHelper.openRouterActivity(context, url);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean playOnPopup(Context context, String url, StreamingService service, int seconds) {
|
||||||
|
LinkHandlerFactory factory = service.getStreamLHFactory();
|
||||||
|
String cleanUrl = null;
|
||||||
|
try {
|
||||||
|
cleanUrl = factory.getUrl(factory.getId(url));
|
||||||
|
} catch (ParsingException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Single single = ExtractorHelper.getStreamInfo(service.getServiceId(), cleanUrl, false);
|
||||||
|
single.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(info -> {
|
||||||
|
PlayQueue playQueue = new SinglePlayQueue((StreamInfo) info);
|
||||||
|
((StreamInfo) info).setStartPosition(seconds);
|
||||||
|
NavigationHelper.enqueueOnPopupPlayer(context, playQueue, true);
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,6 +21,7 @@ import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
|
|
||||||
import org.schabi.newpipe.MainActivity;
|
import org.schabi.newpipe.MainActivity;
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
|
import org.schabi.newpipe.RouterActivity;
|
||||||
import org.schabi.newpipe.about.AboutActivity;
|
import org.schabi.newpipe.about.AboutActivity;
|
||||||
import org.schabi.newpipe.download.DownloadActivity;
|
import org.schabi.newpipe.download.DownloadActivity;
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
@ -34,11 +35,11 @@ import org.schabi.newpipe.fragments.MainFragment;
|
||||||
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
|
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
|
||||||
import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
|
import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
|
||||||
import org.schabi.newpipe.fragments.list.comments.CommentsFragment;
|
import org.schabi.newpipe.fragments.list.comments.CommentsFragment;
|
||||||
import org.schabi.newpipe.local.bookmark.BookmarkFragment;
|
|
||||||
import org.schabi.newpipe.local.feed.FeedFragment;
|
|
||||||
import org.schabi.newpipe.fragments.list.kiosk.KioskFragment;
|
import org.schabi.newpipe.fragments.list.kiosk.KioskFragment;
|
||||||
import org.schabi.newpipe.fragments.list.playlist.PlaylistFragment;
|
import org.schabi.newpipe.fragments.list.playlist.PlaylistFragment;
|
||||||
import org.schabi.newpipe.fragments.list.search.SearchFragment;
|
import org.schabi.newpipe.fragments.list.search.SearchFragment;
|
||||||
|
import org.schabi.newpipe.local.bookmark.BookmarkFragment;
|
||||||
|
import org.schabi.newpipe.local.feed.FeedFragment;
|
||||||
import org.schabi.newpipe.local.history.StatisticsPlaylistFragment;
|
import org.schabi.newpipe.local.history.StatisticsPlaylistFragment;
|
||||||
import org.schabi.newpipe.local.playlist.LocalPlaylistFragment;
|
import org.schabi.newpipe.local.playlist.LocalPlaylistFragment;
|
||||||
import org.schabi.newpipe.local.subscription.SubscriptionFragment;
|
import org.schabi.newpipe.local.subscription.SubscriptionFragment;
|
||||||
|
@ -422,6 +423,13 @@ public class NavigationHelper {
|
||||||
context.startActivity(mIntent);
|
context.startActivity(mIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void openRouterActivity(Context context, String url) {
|
||||||
|
Intent mIntent = new Intent(context, RouterActivity.class);
|
||||||
|
mIntent.setData(Uri.parse(url));
|
||||||
|
mIntent.putExtra(RouterActivity.internalRouteKey, true);
|
||||||
|
context.startActivity(mIntent);
|
||||||
|
}
|
||||||
|
|
||||||
public static void openAbout(Context context) {
|
public static void openAbout(Context context) {
|
||||||
Intent intent = new Intent(context, AboutActivity.class);
|
Intent intent = new Intent(context, AboutActivity.class);
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:lines="1"
|
android:lines="1"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textSize="@dimen/video_item_search_title_text_size"
|
android:textSize="@dimen/comment_item_title_text_size"
|
||||||
tools:text="Author Name, Lorem ipsum" />
|
tools:text="Author Name, Lorem ipsum" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -43,10 +43,8 @@
|
||||||
android:layout_marginBottom="@dimen/channel_item_description_to_details_margin"
|
android:layout_marginBottom="@dimen/channel_item_description_to_details_margin"
|
||||||
android:layout_toEndOf="@+id/itemThumbnailView"
|
android:layout_toEndOf="@+id/itemThumbnailView"
|
||||||
android:layout_toRightOf="@+id/itemThumbnailView"
|
android:layout_toRightOf="@+id/itemThumbnailView"
|
||||||
android:ellipsize="end"
|
|
||||||
android:lines="2"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textSize="@dimen/video_item_search_uploader_text_size"
|
android:textSize="@dimen/comment_item_content_text_size"
|
||||||
tools:text="Comment Content, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blandit" />
|
tools:text="Comment Content, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blandit" />
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,8 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="@dimen/channel_item_description_to_details_margin"
|
android:layout_marginBottom="@dimen/channel_item_description_to_details_margin"
|
||||||
android:layout_toRightOf="@+id/itemThumbnailView"
|
android:layout_toRightOf="@+id/itemThumbnailView"
|
||||||
android:ellipsize="end"
|
|
||||||
android:lines="2"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textSize="@dimen/video_item_search_uploader_text_size"
|
android:textSize="@dimen/comment_item_content_text_size"
|
||||||
tools:text="Channel description, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blandit" />
|
tools:text="Channel description, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blandit" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
|
|
@ -85,4 +85,8 @@
|
||||||
|
|
||||||
<!-- File picker dimensions -->
|
<!-- File picker dimensions -->
|
||||||
<dimen name="file_picker_items_text_size">14sp</dimen>
|
<dimen name="file_picker_items_text_size">14sp</dimen>
|
||||||
|
|
||||||
|
<!-- Text Size -->
|
||||||
|
<dimen name="comment_item_title_text_size">12sp</dimen>
|
||||||
|
<dimen name="comment_item_content_text_size">12sp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue