Proyectos de Subversion Android Microlearning

Rev

Autoría | Ultima modificación | Ver Log |

package com.cesams.twogetskills.activity;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;

import com.cesams.twogetskills.Constants;
import com.cesams.twogetskills.R;
import com.cesams.twogetskills.library.MD5;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.ui.PlayerView;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
import com.google.android.exoplayer2.util.Util;

import java.util.Calendar;
import java.util.Random;
import java.util.TimeZone;

public class VideoAudioActivity extends AppCompatActivity {

    private static final String TAG = "C2GS - VideoßActivity";
    private SimpleExoPlayer simpleExoPlayer;
    private PlayerView playerView;
    private ProgressBar progressBar;
    private long playbackPosition;
    private String videoAudioUrl;
    private String deviceId;
    private String password;
    private boolean durationSet = false;
    private long realDurationMillis = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_audio);

        videoAudioUrl = getIntent().getStringExtra("videoAudioUrl");
        deviceId = getIntent().getStringExtra("deviceId");
        password = getIntent().getStringExtra("password");

        playerView = (PlayerView) findViewById(R.id.activity_video_audio_player);
        progressBar = (ProgressBar) findViewById(R.id.activity_video_audio_progress_bar);

        try {

        } catch (Exception e) {
            Log.e("VideoAudioActivity", " exoplayer error " + e.toString());
        }


    }

    public void onStart()
    {
        super.onStart();
        initializePlayer();
    }

    public void onStop()
    {
        super.onStop();
        releasePlayer();
    }

    @Override
    public void onBackPressed() {

        try {

            long currentPosition = simpleExoPlayer.getCurrentPosition();
            long duration = simpleExoPlayer.getDuration();
            long dif = duration - currentPosition;
            //10 seg x 1000 milliseconds
            if(dif <= 10000 ) {
                Intent intent = new Intent();
                intent.putExtra("completed", true);
                intent.putExtra("requestCode", Constants.REQUEST_CODE_AUDIO_VIDEO);
                setResult(RESULT_OK, intent);
                finish();
            }
        } catch(Exception e) {

        }

        setResult(RESULT_CANCELED);
        finish();
    }

    public void initializePlayer() {
        simpleExoPlayer = new SimpleExoPlayer.Builder(this).build();
        preparePlayer();
        playerView.setPlayer(simpleExoPlayer);

        simpleExoPlayer.setPlayWhenReady(true);
        simpleExoPlayer.seekTo(0, playbackPosition);
        simpleExoPlayer.addListener(new Player.EventListener() {


            @Override
            public void onPlaybackStateChanged(int state) {
                if (state == ExoPlayer.STATE_READY && !durationSet) {
                    realDurationMillis = simpleExoPlayer.getDuration();
                    durationSet = true;
                } else if(state == ExoPlayer.STATE_IDLE) {
                    playerView.setKeepScreenOn(false);


                } else  if(state == ExoPlayer.STATE_ENDED) {
                    playerView.setKeepScreenOn(false);

                    Intent intent = new Intent();
                    intent.putExtra("completed", true);
                    intent.putExtra("requestCode", Constants.REQUEST_CODE_AUDIO_VIDEO);
                    setResult(RESULT_OK, intent);
                    finish();
                } else {
                    playerView.setKeepScreenOn(true);
                }

            }

            @Override
            public void onIsLoadingChanged(boolean isLoading) {
                if (isLoading){
                    progressBar.setVisibility(View.VISIBLE);
                } else {
                    progressBar.setVisibility(View.INVISIBLE);
                }
            }
        });
    }

    public void preparePlayer()
    {
        TimeZone timeZone = TimeZone.getTimeZone("UTC");
        Calendar calendar = Calendar.getInstance(timeZone);
        TimeZone tz = calendar.getTimeZone();
        int created =  (int) (calendar.getTimeInMillis() / 1000);

        Random random = new Random(created);
        int rand = 1000 + random.nextInt(8999);


        Log.d(TAG, "token = " + deviceId);
        Log.d(TAG, "created = " + created);
        Log.d(TAG, "rand = " + rand);
        Log.d(TAG, "calc = " + password + ':' +  created + ':' + rand);

        String secret = MD5.generar(password + ':' +  created + ':' + rand);


        try {
            DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory(Util.getUserAgent(this, this.getString(R.string.app_name)), null);
            httpDataSourceFactory.getDefaultRequestProperties().set(Constants.HTTP_HEADER_SECURITY_TOKEN, deviceId);
            httpDataSourceFactory.getDefaultRequestProperties().set(Constants.HTTP_HEADER_SECURITY_SECRET, secret);
            httpDataSourceFactory.getDefaultRequestProperties().set(Constants.HTTP_HEADER_SECURITY_CREATED, String.valueOf(created));
            httpDataSourceFactory.getDefaultRequestProperties().set(Constants.HTTP_HEADER_SECURITY_RAND, String.valueOf(rand));

            DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, null, httpDataSourceFactory);


            // Create a progressive media source pointing to a stream uri.
            Log.d(TAG, "video file = " + videoAudioUrl);
            MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(Uri.parse(videoAudioUrl)));

            simpleExoPlayer.setMediaSource(mediaSource);


        } catch (Exception e) {
            Log.e("MainAcvtivity", " exoplayer error " + e.toString());
        }

    }

    public void releasePlayer() {
        playbackPosition = simpleExoPlayer.getCurrentPosition();
        simpleExoPlayer.release();
    }


}