Android Open Source - akuplayer Main Activity






From Project

Back to project page akuplayer.

License

The source code is released under:

Copyright (c) 2014, Dmitry Kuznetsov aka kudzmi All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditi...

If you think the Android project akuplayer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
Copyright (c) 2014, Dmitry Kuznetsov aka kudzmi
All rights reserved./* w w  w .ja va 2  s.  c om*/

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.kudzmi.akuplayer;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Environment;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SeekBar;

import com.kudzmi.akuplayer.player.AKuPlayerService;
import com.kudzmi.akuplayer.player.BroadcastCommander;
import com.kudzmi.akuplayer.player.PlayerCommand;
import com.kudzmi.akuplayer.player.PlayerSeekCommand;
import com.kudzmi.akuplayer.player.PlayerStatus;
import com.kudzmi.akuplayer.player.TrackList;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends ActionBarActivity {

    private ListView lvTrackList;
    private SeekBar seekBar;
    private ImageButton ibPrev, ibPlayPause, ibNext;
    private final String TEST_DIR = "/AKuTestDir/"; // TEST dir. You must make it manually!!!!
    private TrackListAdapter mAdapter;
    private boolean isInit = false, isSeeking = false;

    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            switch (action) {
                case BroadcastCommander.SRV2UI_EVENT:
                    PlayerStatus ps = (PlayerStatus) intent.getSerializableExtra(BroadcastCommander.MESSAGE_EXTRA);
                    processStatus(ps);

                    break;
            }

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initUI();
        fillTrackList();
    }

    @Override
    protected void onResume() {
        super.onResume();

        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(BroadcastCommander.SRV2UI_EVENT);
        LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, intentFilter);
        startService(new Intent(this, AKuPlayerService.class));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        stopService(new Intent(this, AKuPlayerService.class));
        if (mReceiver != null)
            LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
    }

    private void initUI(){
        lvTrackList = (ListView) findViewById(R.id.tracks_list_view);
        lvTrackList.setOnItemClickListener(onTrackClickListener);

        seekBar = (SeekBar) findViewById(R.id.seek_bar);

        seekBar.setOnSeekBarChangeListener(onSeekListener);

        ibPrev = (ImageButton) findViewById(R.id.player_prev);
        ibPrev.setOnClickListener(onPrevClickListener);
        ibPlayPause = (ImageButton) findViewById(R.id.player_play_pause);
        ibPlayPause.setOnClickListener(onPlayPauseClickListener);
        ibNext = (ImageButton) findViewById(R.id.player_next);
        ibNext.setOnClickListener(onNextClickListener);
    }

    private void processStatus(PlayerStatus status) {
        setButtonToPlay(status.isPlaying());
        setCurrentSeekBarPos(status.getDuration(), status.getCurrentPos());
        if (mAdapter != null){
            if(status.isPlaying())
                mAdapter.highlightItem(status.getCurrentTrackId());
            else {
                mAdapter.clearHighlight();
                isInit = false;
            }
        }
    }

    private void fillTrackList(){
        String dir = Environment.getExternalStorageDirectory().getAbsolutePath() + TEST_DIR;
        List<Audio> list = new ArrayList<>();
        // WARNING! This is test list. You need to add files by yourself.
        // Or get track list from the server.
        list.add(new Audio(0L, "GUMI - CANDY CANDY",    dir + "GUMI - CANDY CANDY.mp3",     230));
        list.add(new Audio(1L, "GUMI - COSMiCA",        dir + "GUMI - COSMiCA.mp3",         307));
        list.add(new Audio(2L, "GUMI - For my soul",    dir + "GUMI - For my soul.mp3",     196));


        mAdapter = new TrackListAdapter(this, list);
        lvTrackList.setAdapter(mAdapter);
    }

    private void sendPlaylistToPlayer() {
        TrackList tl = new TrackList(mAdapter.getItems(), true);
        BroadcastCommander.sendPlaylist(this, tl);
        isInit = true;
    }

    private void setButtonToPlay(Boolean isPlay) {
        ibPlayPause.setTag(isPlay);
        if (isPlay) ibPlayPause.setImageResource(android.R.drawable.ic_media_pause);
        else ibPlayPause.setImageResource(android.R.drawable.ic_media_play);

    }

    public void setCurrentSeekBarPos(int totalTime, int currentTime){
        if(!isSeeking) {
            int percents = (int) (((float)currentTime / (float)totalTime) * 100);
            seekBar.setProgress(percents);
        }
    }




    /* Listeners */

    AdapterView.OnItemClickListener onTrackClickListener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
            if (mAdapter != null) {
                PlayerCommand cmd = new PlayerCommand(true, id, false, false);
                cmd.setStartTrackId(id);
                sendPlaylistToPlayer();
                BroadcastCommander.sendCommand(MainActivity.this, cmd);
                setButtonToPlay(true);
                mAdapter.highlightItem(id);
            }
        }
    };

    View.OnClickListener onPlayPauseClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            boolean isPlaying;
            try {
                isPlaying = (boolean) view.getTag();
            } catch (Exception ex) {
                isPlaying = false;
            }

            if (isPlaying) {
                BroadcastCommander.sendCommand(MainActivity.this,
                        new PlayerCommand().setToPause()
                );
                setButtonToPlay(false);
                if (mAdapter != null) mAdapter.clearHighlight();
            } else {
                PlayerCommand cmd = new PlayerCommand().setToPlay();
                if (!isInit) {
                    if (mAdapter != null && mAdapter.getCount() > 0) {
                        sendPlaylistToPlayer();
                        cmd.setStartTrackId(mAdapter.getItemId(0));
                    } else return;
                }
                BroadcastCommander.sendCommand(MainActivity.this, cmd);
                setButtonToPlay(true);
            }
        }
    };

    View.OnClickListener onPrevClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            BroadcastCommander.sendCommand(MainActivity.this, new PlayerCommand().setToPrev());
        }
    };

    View.OnClickListener onNextClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            BroadcastCommander.sendCommand(MainActivity.this, new PlayerCommand().setToNext());
        }
    };


    private SeekBar.OnSeekBarChangeListener onSeekListener = new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int i, boolean isUser) {
            if(isUser){
                Log.i("Seek","onProgressChanged");
                BroadcastCommander.sendSeekCommand(MainActivity.this, new PlayerSeekCommand(true,i));
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            isSeeking = true;
            Log.i("Seek","onStartTrackingTouch");
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            isSeeking = false;
            Log.i("Seek","onStopTrackingTouch");
        }
    };
}




Java Source Code List

com.kudzmi.akuplayer.Audio.java
com.kudzmi.akuplayer.MainActivity.java
com.kudzmi.akuplayer.PrefStorage.java
com.kudzmi.akuplayer.SimpleListAdapter.java
com.kudzmi.akuplayer.TrackListAdapter.java
com.kudzmi.akuplayer.player.AKuPlayerService.java
com.kudzmi.akuplayer.player.BroadcastCommander.java
com.kudzmi.akuplayer.player.ItemHighlighter.java
com.kudzmi.akuplayer.player.PlayerCommand.java
com.kudzmi.akuplayer.player.PlayerSeekCommand.java
com.kudzmi.akuplayer.player.PlayerStatus.java
com.kudzmi.akuplayer.player.TrackList.java