Skip to content

Instantly share code, notes, and snippets.

@groverankush
Last active May 15, 2018 05:47
Show Gist options
  • Save groverankush/b61e51eec6bcac6331c84ae547fdc3e6 to your computer and use it in GitHub Desktop.
Save groverankush/b61e51eec6bcac6331c84ae547fdc3e6 to your computer and use it in GitHub Desktop.
A description of playing video ads via jwplayer
package com.selecttvapp.ui.activities.jw;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import com.longtailvideo.jwplayer.JWPlayerSupportFragment;
import com.longtailvideo.jwplayer.JWPlayerView;
import com.selecttvapp.ui.helper.MyApplication;
/**
* Created by Ankush Grover(ankush.grover@finoit.co.in) on 11/5/18.
*/
public class JWConfig {
private Context mContext;
private AppCompatActivity mActivity;
private JWPlayerView mPlayerView;
private JWListener mListener;
private JWPlayerSupportFragment mJWFragment;
public JWConfig(AppCompatActivity activity, JWPlayerView jwPlayerView, JWListener listener) {
mActivity = activity;
this.mPlayerView = jwPlayerView;
mListener = listener;
fetchAdURL();
}
private void fetchAdURL() {
// Taking in account how all the other requests are made, Thread is used. Something else must be used.
new Thread() {
@Override
public void run() {
String url = MyApplication.getmWebService().getAdURL();
mActivity.runOnUiThread(() -> {
if (url != null) {
mListener.onURLReceived(url);
} else mListener.onComplete();
});
}
}.start();
}
public interface JWListener {
void onComplete();
void onURLReceived(String url);
}
}
private JWPlayerSupportFragment mPlayerFragment;
private JWPlayerView mPlayerView;
private JWConfig jwConfig;
private AdvertisingEvents.OnAdErrorListener mJWErrorListener = new AdvertisingEvents.OnAdErrorListener() {
@Override
public void onAdError(String s, String s1) {
removeJWAd();
loadFirst();
}
};
private AdvertisingEvents.OnAdCompleteListenerV2 mJWAdCompleteListener = new AdvertisingEvents.OnAdCompleteListenerV2() {
@Override
public void onAdComplete(AdCompleteEvent adCompleteEvent) {
removeJWAd();
loadFirst();
}
};
private AdvertisingEvents.OnAdSkippedListenerV2 mJWSkipListener = new AdvertisingEvents.OnAdSkippedListenerV2() {
@Override
public void onAdSkipped(AdSkippedEvent adSkippedEvent) {
removeJWAd();
loadFirst();
}
};
public void playAd() {
/**
* This is to add player over the youtube player. R.layout.fragment_jw contains the JWPlayerSupportFragment
* and some other views to manage touch.
*/
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.both_players_container);
mJWContainer = getLayoutInflater().inflate(R.layout.fragment_jw, relativeLayout, false);
relativeLayout.addView(mJWContainer);
/**
* Empty click listeners to disable touch on the views below.
*/
findViewById(R.id.blank_top).setOnClickListener((v -> {}));
findViewById(R.id.blank_bottom).setOnClickListener((v -> {}));
mPlayerFragment = (JWPlayerSupportFragment) getSupportFragmentManager().findFragmentById(R.id.playerFragment);
mPlayerView = mPlayerFragment.getPlayer();
mPlayerView.setControls(false); // For hiding controls from the player.
/**** Make request to recieve the ad Url. **********/
jwConfig = new JWConfig(this, mPlayerView, new JWConfig.JWListener() {
@Override
public void onComplete() {
removeJWAd();
loadFirst();
}
@Override
public void onURLReceived(String url) {
mPlayerView.addOnCompleteListener(new VideoPlayerEvents.OnCompleteListener() {
@Override
public void onComplete() {
mPlayerView.removeOnCompleteListener(this);
mPlayerView.addOnAdCompleteListener(mJWAdCompleteListener);
mPlayerView.addOnAdErrorListener(mJWErrorListener);
mPlayerView.addOnAdSkippedListener(mJWSkipListener);
mPlayerView.playAd(url);
}
});
mPlayerView.load(new PlaylistItem("file:///android_asset/blank_video.mp4"));
mPlayerView.play();
}
});
}
private void removeJWAd() {
if (mPlayerView != null) {
mPlayerView.removeOnAdErrorListener(mJWErrorListener);
mPlayerView.removeOnAdCompleteListener(mJWAdCompleteListener);
mPlayerView.removeOnAdSkippedListener(mJWSkipListener);
try {
mPlayerView.stop();
mPlayerView.destroySurface();
} catch (Exception e) {
e.printStackTrace();
}
}
if (mJWContainer != null) {
mJWContainer.setVisibility(View.GONE);
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.both_players_container);
relativeLayout.removeView(mJWContainer);
getSupportFragmentManager().beginTransaction().remove(mPlayerFragment).commitNow();
}
}
/**
* Method to load the first Youtube video. Implementation can vary.
*/
public void loadFirst() {
getmChannelsRestFragment().setVideoType(mChannelSchedulerURI);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment