Search in sources :

Example 1 with UiSubItem

use of butter.droid.ui.media.detail.model.UiSubItem in project butter-android by butterproject.

the class EpisodeDialogFragment method onActivityCreated.

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (!TextUtils.isEmpty(episode.getTitle())) {
        title.setText(episode.getTitle());
        headerImage.setContentDescription(episode.getTitle());
    } else {
        title.setText(R.string.no_title_available);
        headerImage.setContentDescription(getString(R.string.no_title_available));
    }
    // TODO: 6/17/17 meta provider
    // aired.setVisibility(episode.aired > 0 ? View.VISIBLE : View.GONE);
    // Date airedDate = new Date((long) episode.aired * 1000);
    // aired.setText(String.format(getString(R.string.aired), new SimpleDateFormat("MMMM dd, yyyy", LocaleUtils.getCurrent())
    // .format(airedDate)));
    // if (!TextUtils.isEmpty(episode.getOverview())) {
    // synopsis.setText(episode.getOverview());
    // } else {
    // synopsis.setText(R.string.no_synopsis_available);
    // }
    // info.setText(String.format(Locale.US, "S%02dE%02d", episode.getSeasion(), episode.getEpisode()));
    // subtitlesPreview.setFragmentManager(getFragmentManager());
    subtitlesPreview.setOnClickListener(v -> showSubsPickerDialog());
    quality.setFragmentManager(getFragmentManager());
    final Format[] formats = mediaDisplayManager.getSortedTorrentFormats(episode.getTorrents());
    String[] formatDisplay = new String[formats.length];
    for (int i = 0; i < formats.length; i++) {
        formatDisplay[i] = mediaDisplayManager.getFormatDisplayName(formats[i]);
    }
    quality.setData(formatDisplay);
    int defaultFormatIndex = mediaDisplayManager.getDefaultFormatIndex(formats);
    // // TODO: 7/30/17 Handle sorting
    selectedTorrent = episode.getTorrents()[defaultFormatIndex];
    this.quality.setText(formatDisplay[defaultFormatIndex]);
    this.quality.setDefault(defaultFormatIndex);
    updateMagnet();
    this.quality.setListener((position, value) -> {
        selectedTorrent = episode.getTorrents()[position];
        updateMagnet();
    });
    if (providerManager.hasSubsProvider(mediaMeta.getProviderId())) {
        subtitlesPreview.setText(R.string.loading_subs);
        subtitlesPreview.setClickable(false);
        providerManager.getSubsProvider(mediaMeta.getProviderId()).list(episode).flatMap(subs -> {
            if (subs.isEmpty()) {
                return Single.<List<UiSubItem>>just(Collections.EMPTY_LIST);
            } else {
                final String defaultSubtitle = preferencesHandler.getSubtitleDefaultLanguage();
                return Observable.fromIterable(subs).map(sub -> new UiSubItem(sub, sub.equals(defaultSubtitle))).startWith(new UiSubItem(null, defaultSubtitle == null)).toList();
            }
        }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SingleObserver<List<UiSubItem>>() {

            @Override
            public void onSubscribe(final Disposable d) {
            // TODO dispose
            }

            @Override
            public void onSuccess(final List<UiSubItem> subs) {
                if (subs.isEmpty()) {
                    subtitlesPreview.setText(R.string.no_subs_available);
                    subtitleList = null;
                } else {
                    subtitlesPreview.setClickable(true);
                    subtitleList = subs;
                    UiSubItem selectedItem = null;
                    for (final UiSubItem sub : subs) {
                        if (sub.isSelected()) {
                            selectedItem = sub;
                            String name = sub.getName();
                            if (TextUtils.isEmpty(name)) {
                                subtitlesPreview.setText(R.string.no_subs);
                            } else {
                                subtitlesPreview.setText(name);
                            }
                            break;
                        }
                    }
                    if (selectedItem == null) {
                        selectedItem = subs.get(0);
                    }
                    selectedSub = selectedItem;
                }
            }

            @Override
            public void onError(final Throwable e) {
                // subtitleList = null;
                subtitlesPreview.setText(R.string.no_subs_available);
                subtitlesPreview.setClickable(false);
            }
        });
    } else {
        subtitlesPreview.setText(R.string.no_subs_available);
        subtitlesPreview.setClickable(false);
    }
    scrollView.setListener(new BottomSheetScrollView.Listener() {

        @Override
        public void onScroll(int scrollY, BottomSheetScrollView.Direction direction) {
        }

        @Override
        public void onTouch(boolean touching) {
            EpisodeDialogFragment.this.touching = touching;
            int scrollY = scrollView.getScrollY();
            if (!EpisodeDialogFragment.this.touching && opened && scrollY <= threshold) {
                smoothDismiss();
            }
        }

        @Override
        public void onScrollStart() {
        }

        @Override
        public void onScrollEnd() {
            if (!touching && opened && scrollView.getScrollY() <= threshold) {
                smoothDismiss();
            }
        }
    });
    if (metaProvider != null) {
    // TODO: 6/17/17 meta
    // metaProvider.getEpisodeMeta(episode.imdbId, episode.getSeasion(), episode.getEpisode(),
    // (Callback) (metaData, ex) -> {
    // String imageUrl = episode.getBackdrop();
    // if (ex == null) {
    // imageUrl = metaData.images.poster;
    // }
    // Picasso.with(headerImage.getContext()).load(imageUrl).into(headerImage);
    // });
    } else {
        Picasso.with(headerImage.getContext()).load(episode.getBackdrop()).into(headerImage);
    }
}
Also used : ImageButton(android.widget.ImageButton) LinearLayout(android.widget.LinearLayout) Bundle(android.os.Bundle) ImageView(android.widget.ImageView) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) OnClick(butterknife.OnClick) BindView(butterknife.BindView) Picasso(com.squareup.picasso.Picasso) ProviderManager(butter.droid.base.manager.internal.provider.ProviderManager) ContextThemeWrapper(android.view.ContextThemeWrapper) View(android.view.View) Schedulers(io.reactivex.schedulers.Schedulers) SubtitleWrapper(butter.droid.base.providers.subs.model.SubtitleWrapper) PreferencesHandler(butter.droid.base.content.preferences.PreferencesHandler) ViewGroup(android.view.ViewGroup) OptionPreview(butter.droid.widget.OptionPreview) SubsPickerCallback(butter.droid.ui.media.detail.dialog.subs.SubsPickerDialog.SubsPickerCallback) Disposable(io.reactivex.disposables.Disposable) List(java.util.List) TextView(android.widget.TextView) Nullable(android.support.annotation.Nullable) SubsPickerDialog(butter.droid.ui.media.detail.dialog.subs.SubsPickerDialog) KeyEvent(android.view.KeyEvent) DaggerAppCompatDialogFragment(dagger.android.support.DaggerAppCompatDialogFragment) ButterKnife(butterknife.ButterKnife) Dialog(android.app.Dialog) NonNull(android.support.annotation.NonNull) StreamInfo(butter.droid.base.providers.media.model.StreamInfo) Single(io.reactivex.Single) Format(butter.droid.provider.base.model.Format) SynopsisDialogFragment(butter.droid.ui.media.detail.streamable.dialog.SynopsisDialogFragment) Inject(javax.inject.Inject) Episode(butter.droid.provider.base.model.Episode) Observable(io.reactivex.Observable) MediaWrapper(butter.droid.base.providers.media.model.MediaWrapper) OptionSelector(butter.droid.widget.OptionSelector) DialogInterface(android.content.DialogInterface) MediaDisplayManager(butter.droid.base.manager.internal.media.MediaDisplayManager) R(butter.droid.R) LayoutInflater(android.view.LayoutInflater) TextUtils(android.text.TextUtils) MediaMeta(butter.droid.base.providers.media.model.MediaMeta) Torrent(butter.droid.provider.base.model.Torrent) BottomSheetScrollView(butter.droid.widget.BottomSheetScrollView) Magnet(butter.droid.base.torrent.Magnet) SingleObserver(io.reactivex.SingleObserver) MetaProvider(butter.droid.base.providers.meta.MetaProvider) UiSubItem(butter.droid.ui.media.detail.model.UiSubItem) PixelUtils(butter.droid.base.utils.PixelUtils) Activity(android.app.Activity) Collections(java.util.Collections) Disposable(io.reactivex.disposables.Disposable) Format(butter.droid.provider.base.model.Format) UiSubItem(butter.droid.ui.media.detail.model.UiSubItem) List(java.util.List) BottomSheetScrollView(butter.droid.widget.BottomSheetScrollView)

Example 2 with UiSubItem

use of butter.droid.ui.media.detail.model.UiSubItem in project butter-android by butterproject.

the class EpisodeDialogFragment method playClick.

@OnClick(R.id.play_button)
public void playClick() {
    smoothDismiss();
    // TODO parent
    UiSubItem selectedSub = this.selectedSub;
    final SubtitleWrapper subtitleWrapper;
    if (selectedSub != null) {
        subtitleWrapper = new SubtitleWrapper(selectedSub.getSubtitle());
    } else {
        subtitleWrapper = null;
    }
    // TODO use pare presenter
    StreamInfo streamInfo = new StreamInfo(selectedTorrent, new MediaWrapper(episode, mediaMeta), null, subtitleWrapper);
    ((FragmentListener) getActivity()).playStream(streamInfo);
}
Also used : MediaWrapper(butter.droid.base.providers.media.model.MediaWrapper) UiSubItem(butter.droid.ui.media.detail.model.UiSubItem) StreamInfo(butter.droid.base.providers.media.model.StreamInfo) SubtitleWrapper(butter.droid.base.providers.subs.model.SubtitleWrapper) OnClick(butterknife.OnClick)

Example 3 with UiSubItem

use of butter.droid.ui.media.detail.model.UiSubItem in project butter-android by butterproject.

the class StreamableDetailPresenterImpl method subtitleSelected.

@Override
public void subtitleSelected(UiSubItem item) {
    UiSubItem selectedSub = this.selectedSub;
    if (selectedSub != null) {
        selectedSub.setSelected(false);
    }
    this.selectedSub = item;
    item.setSelected(true);
    String language = item.getLanguage();
    parentPresenter.selectSubtitle(new SubtitleWrapper(item.getSubtitle()));
    if (language == null) {
        view.setSubtitleText(R.string.no_subs);
    } else {
        view.setSubtitleText(item.getName());
    }
    view.hideDialog();
}
Also used : UiSubItem(butter.droid.ui.media.detail.model.UiSubItem) SubtitleWrapper(butter.droid.base.providers.subs.model.SubtitleWrapper)

Example 4 with UiSubItem

use of butter.droid.ui.media.detail.model.UiSubItem in project butter-android by butterproject.

the class EpisodeDialogFragment method onSubsItemSelected.

@Override
public void onSubsItemSelected(final int position, final UiSubItem item) {
    UiSubItem selectedSub = this.selectedSub;
    if (selectedSub != null) {
        selectedSub.setSelected(false);
    }
    this.selectedSub = item;
    item.setSelected(true);
    String language = item.getLanguage();
    if (language == null) {
        subtitlesPreview.setText(R.string.no_subs);
    } else {
        subtitlesPreview.setText(item.getName());
    }
    subsDialog.dismiss();
    subsDialog = null;
}
Also used : UiSubItem(butter.droid.ui.media.detail.model.UiSubItem)

Example 5 with UiSubItem

use of butter.droid.ui.media.detail.model.UiSubItem in project butter-android by butterproject.

the class SubsPickerDialog method onViewCreated.

@Override
public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ButterKnife.bind(this, view);
    SubsPickerCallback callback;
    Fragment parentFragment = getParentFragment();
    FragmentActivity activity = getActivity();
    if (parentFragment != null && parentFragment instanceof SubsPickerCallback) {
        callback = (SubsPickerCallback) parentFragment;
    } else if (activity != null && activity instanceof SubsPickerCallback) {
        callback = (SubsPickerCallback) activity;
    } else {
        throw new IllegalStateException("Parent has to implement SubsPickerCallback");
    }
    SubsPickerAdapter subsPickerAdapter = new SubsPickerAdapter(itemsLayout, callback);
    ArrayList<UiSubItem> items = getArguments().getParcelableArrayList(ARG_ITEMS);
    subsPickerAdapter.setData(items);
}
Also used : FragmentActivity(android.support.v4.app.FragmentActivity) UiSubItem(butter.droid.ui.media.detail.model.UiSubItem) Fragment(android.support.v4.app.Fragment) BottomSheetDialogFragment(android.support.design.widget.BottomSheetDialogFragment)

Aggregations

UiSubItem (butter.droid.ui.media.detail.model.UiSubItem)6 SubtitleWrapper (butter.droid.base.providers.subs.model.SubtitleWrapper)4 MediaWrapper (butter.droid.base.providers.media.model.MediaWrapper)3 StreamInfo (butter.droid.base.providers.media.model.StreamInfo)3 TextUtils (android.text.TextUtils)2 R (butter.droid.R)2 PreferencesHandler (butter.droid.base.content.preferences.PreferencesHandler)2 MediaDisplayManager (butter.droid.base.manager.internal.media.MediaDisplayManager)2 ProviderManager (butter.droid.base.manager.internal.provider.ProviderManager)2 Format (butter.droid.provider.base.model.Format)2 Torrent (butter.droid.provider.base.model.Torrent)2 OnClick (butterknife.OnClick)2 Activity (android.app.Activity)1 Dialog (android.app.Dialog)1 DialogInterface (android.content.DialogInterface)1 Resources (android.content.res.Resources)1 Bundle (android.os.Bundle)1 NonNull (android.support.annotation.NonNull)1 Nullable (android.support.annotation.Nullable)1 BottomSheetDialogFragment (android.support.design.widget.BottomSheetDialogFragment)1