Страницы

Поиск по вопросам

вторник, 27 ноября 2018 г.

Добавить десять уникальных элементов

Постараюсь преподнести вопрос корректно (открыт для замечаний/правок).
Начну пожалуй с начала. Есть кнопка по нажатию на которую открывается диалог. В диалоге пользователь может вставить ссылку из 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





Комментариев нет:

Отправить комментарий