Постараюсь преподнести вопрос корректно (открыт для замечаний/правок).
Начну пожалуй с начала. Есть кнопка по нажатию на которую открывается диалог. В диалоге
пользователь может вставить ссылку из vimeo и youtube.
После того, как ссылка вставлена в поле диалога и нажата кнопка "OK", в методе getIdUrl
вытаскивается id из ссылки, после чего добавляется сама картинка из видео(preview)
- пользователь(грубо говоря) видит как добавилась картинка из этого видео(следовательно
видео загружено).
На данный момент, приложение реализовано так, что пользователь может добавлять n-ое
кол-во видео(с одинаковыми ссылками), что само собой неприемлемо.
Задача заключается в поиске решения данной проблемы, а именно:
Добавить возможность для пользователя добавления не более 10 файлов.
Если ссылка повторяется(url видео), не добавлять его.
Отрывок диалога:
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Toast.makeText(getContext(), "ОК", Toast.LENGTH_SHORT).show();
String string = input.getText().toString();
getIdUrl(string, pos);
}
И часть реализации метода getIdUrl для youtube:
void getIdUrl(String url, int position) {
String video_id = "";
String expression = "";
if (url != null && url.trim().length() > 0 && url.matches(".*\\byoutube\\b.*")) {
expression = "^.*((youtu.be" + "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*";
CharSequence input = url;
Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
String groupIndex1 = matcher.group(7);
if (groupIndex1 != null && groupIndex1.length() == 11)
video_id = groupIndex1;
}
ImageUpload imageUpload = new ImageUpload();
imageUpload.setLoadImage(true);
OutputMetadata outputMetadata = new OutputMetadata();
outputMetadata.setVideoUrl("http://img.youtube.com/vi/" + video_id + "/0.jpg");
outputMetadata.setFilename("http://img.youtube.com/vi/" + video_id + "/0.jpg");
imageUpload.setOutputMetadata(outputMetadata);
controlList.get(position).getImageUploads().add(imageUpload);
adapterForm.notifyDataSetChanged();
Дополнительно к разбору:
Модель VideoUpload
public class VideoUpload {
@SerializedName("id")
@Expose
private String id;
@SerializedName("videoUrl")
@Expose
String videoUrl;
@SerializedName("user_portrait_huge")
@Expose
private String userPortraitHuge;
@SerializedName("url")
@Expose
private String url;
public String getUserPortraitHuge() {
return userPortraitHuge;
}
Прописаны все get'ры и set'ры.
Метод contains(во фрагменте)
public boolean contains(VideoUpload newVideoUpload) {
for (VideoUpload videoUpload : videoUploads) {
if (videoUpload.getUrl().equals(newVideoUpload.getUrl()))
return true;
}
return false;
}
Ответы
Ответ 1
Постановка задачи:
По ссылке на видео с youtube.com или vimeo.com получить превью видео и отобразить
его в списке на экране.
При этом:
Максимально можно добавить 10 видео;
Не добавлять уже существующие видео.
Превью можно добавить по трем типам ссылок:
https://www.youtube.com/watch?v=XXXXXXXXXXX
https://youtu.be/XXXXXXXXXXX
https://vimeo.com/XXXXXXXXX
Решение:
Создаем activity_video_preview.xml:
Комментариев нет:
Отправить комментарий