Постараюсь преподнести вопрос корректно (открыт для замечаний/правок). Начну пожалуй с начала. Есть кнопка по нажатию на которую открывается диалог. В диалоге пользователь может вставить ссылку из 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;
}
Ответ
Постановка задачи: По ссылке на видео с youtube.com или vimeo.com получить превью видео и отобразить его в списке на экране. При этом:
Максимально можно добавить 10 видео;
Не добавлять уже существующие видео.
Превью можно добавить по трем типам ссылок:
https://www.youtube.com/watch?v=XXXXXXXXXXX
https://youtu.be/XXXXXXXXXXX
https://vimeo.com/XXXXXXXXX
Решение: Создаем activity_video_preview.xml
Комментариев нет:
Отправить комментарий