Android Open Source - DoomPlay Abstract Controls






From Project

Back to project page DoomPlay.

License

The source code is released under:

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUC...

If you think the Android project DoomPlay 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

package com.perm.DoomPlay;
//w w  w .  j a  v  a 2  s  .  co  m

/*
 *    Copyright 2013 Vladislav Krot
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 *
 *    You can contact me <DoomPlaye@gmail.com>
 */


import android.content.*;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;

/*
    Base class for all classes which content layout with controls
 */

abstract class AbstractControls extends AbstractReceiver
{
    RelativeLayout linearControls;
    ImageView imgPlay;
    ImageView imgShuffle;
    ImageView imgRepeat;
    ImageView imgNext;
    ImageView imgPrevious;
    TextView textCurrentTime;
    TextView textTotalTime;
    SeekBar seekBar;
    private volatile boolean flagT;
    private final static int messageUpdate = 2957;
    boolean isShown;
    protected abstract void trackChanged();
    private static final String keySaveShown = "keySswn";

    @Override
    protected void onPause()
    {
        super.onPause();
        flagT = false;
    }
    @Override
    protected void onResume()
    {
        super.onResume();
        checkImage();

        if(isShown)
            loadUpdateThread();

    }

    protected void showHide()
    {
        if(isShown)
        {
            linearControls.setVisibility(View.GONE);
            isShown = false;
            flagT = false;
        }
        else
        {
            linearControls.setVisibility(View.VISIBLE);
            isShown = true;
            loadUpdateThread();
        }
    }
    protected void checkIsShown(Bundle savedInstanceState)
    {
        if(savedInstanceState != null)
        {
            final boolean savedState = savedInstanceState.getBoolean(AbstractControls.keySaveShown);

            if((savedState && !isShown) || (!savedState && isShown))
            {
                showHide();
            }
            isShown = savedState;
        }
        else if(!isShown && SettingActivity.getPreferences(SettingActivity.keyShowControls))
            showHide();
    }

    private void checkImage()
    {
        if(PlayingService.isPlaying)
            imgPlay.setImageResource(R.drawable.pause);
        else
            imgPlay.setImageResource(R.drawable.play);

        if(PlayingService.isLoop)
            imgRepeat.setImageResource(R.drawable.repeat_enable);
        else
            imgRepeat.setImageResource(R.drawable.repeat_disable);

        if(PlayingService.isShuffle)
            imgShuffle.setImageResource(R.drawable.shuffle_enable);
        else
            imgShuffle.setImageResource(R.drawable.shuffle_disable);
    }


    @Override
    protected void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);
        outState.putBoolean(keySaveShown,isShown);
    }


    void initializeAbstract()
    {
        isShown = false;
        flagT = false;

        seekBar.setOnSeekBarChangeListener(seekBarHandler);
        imgNext.setOnClickListener(onClickControlsListener);
        imgPlay.setOnClickListener(onClickControlsListener);
        imgPrevious.setOnClickListener(onClickControlsListener);
        imgRepeat.setOnClickListener(onClickControlsListener);
        imgShuffle.setOnClickListener(onClickControlsListener);
    }

    @Override
    protected void onStart()
    {
        super.onStart();
        connectService();
    }

    // for override
    void clickWithoutAction()
    {}

    private final View.OnClickListener onClickControlsListener = new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if(!PlayingService.serviceAlive)
                clickWithoutAction();
            else if(playingService != null && !playingService.isLoadingTrack())
            {
                onClickControl(v.getId());
            }
        }
    };
    void onClickControl(int id)
    {
            switch (id)
            {
                case (R.id.imageShuffle):
                    playingService.setShuffle();
                    if(PlayingService.isShuffle)
                        imgShuffle.setImageResource(R.drawable.shuffle_enable);
                    else
                        imgShuffle.setImageResource(R.drawable.shuffle_disable);
                    break;
                case (R.id.imagePrevious):
                    playingService.previousSong();
                    break;
                case (R.id.imagePlay):
                    playingService.playPause();
                    break;
                case (R.id.imageNext):
                    playingService.nextSong();
                    break;
                case (R.id.imageRepeat):
                    playingService.setLoop();
                    if(PlayingService.isLoop)
                        imgRepeat.setImageResource(R.drawable.repeat_enable);
                    else
                        imgRepeat.setImageResource(R.drawable.repeat_disable);
                    break;
            }
    }

    private final SeekBar.OnSeekBarChangeListener seekBarHandler = new SeekBar.OnSeekBarChangeListener()
    {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
        {
            if(fromUser && playingService != null && !playingService.isLoadingTrack())
                playingService.setCurrentPosition(playingService.getDuration()*progress / 100);
        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar){}
        @Override
        public void onStopTrackingTouch(SeekBar seekBar){}
    };

    @Override
    protected void createBroadcastRec()
    {
        broadcastReceiver = new BroadcastReceiver()
        {
            @Override
            public void onReceive(Context context, Intent intent)
            {
                String action = intent.getAction();

                if(action.equals(PlayingService.actionTrackChanged))
                {
                    trackChanged();
                    updateActionBar();
                }
                else if(action.equals(PlayingService.actionIconPlay))
                {
                    imgPlay.setImageResource(R.drawable.play);
                }

                else if(action.equals(PlayingService.actionIconPause))
                {
                    imgPlay.setImageResource(R.drawable.pause);
                }
            }
        };
        intentFilter = new IntentFilter(PlayingService.actionTrackChanged);
        intentFilter.addAction(PlayingService.actionIconPause);
        intentFilter.addAction(PlayingService.actionIconPlay);
        registerReceiver(broadcastReceiver, intentFilter);
        isRegister = true;
    }
    void loadUpdateThread()
    {
        flagT = false;
        flagT = true;
        Thread threadUpdate = new Thread(runnable);
        threadUpdate.start();
    }

    @Override
    protected void onServiceBound() {
      loadUpdateThread();
    }

    private final Runnable runnable = new Runnable()
    {
        @Override
        public void run()
        {
            while(flagT)
            {
                try
                {
                    Thread.sleep(450);
                }
                catch (InterruptedException e)
                {}
                handler.sendEmptyMessage(messageUpdate);
            }
        }
    };
    private final Handler handler = new Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
            if(isFinishing())
                return;
            if(playingService != null && PlayingService.serviceAlive && textCurrentTime != null)
            {
                textCurrentTime.setText(Utils.milliSecondsToTimer(playingService.getCurrentPosition()*1000));
                textTotalTime.setText(Utils.milliSecondsToTimer(playingService.getDuration()*1000));
                seekBar.setProgress(playingService.getProgressPercentage());
            }
        }
    };
}




Java Source Code List

com.api.Account.java
com.api.Api.java
com.api.AudioAlbum.java
com.api.Auth.java
com.api.Group.java
com.api.IdsPair.java
com.api.KException.java
com.api.Media.java
com.api.Params.java
com.api.PhotoTag.java
com.api.Photo.java
com.api.SearchDialogItem.java
com.api.User.java
com.api.Utils.java
com.api.VkStatus.java
com.api.WrongResponseCodeException.java
com.perm.DoomPlay.AbstractControls.java
com.perm.DoomPlay.AbstractList.java
com.perm.DoomPlay.AbstractReceiver.java
com.perm.DoomPlay.AbstractVkItems.java
com.perm.DoomPlay.AddListDialog.java
com.perm.DoomPlay.AddTrackFromPlaybackDialog.java
com.perm.DoomPlay.AddTrackToAlbumDialog.java
com.perm.DoomPlay.AlbumArtGetter.java
com.perm.DoomPlay.AlbumArtistActivity.java
com.perm.DoomPlay.Audio.java
com.perm.DoomPlay.BassPlayer.java
com.perm.DoomPlay.BigWidget.java
com.perm.DoomPlay.CustomViewPager.java
com.perm.DoomPlay.DirectoryChooserActivity.java
com.perm.DoomPlay.DownloadNotifBuilder.java
com.perm.DoomPlay.Download.java
com.perm.DoomPlay.DownloadingService.java
com.perm.DoomPlay.EqualizerActivity.java
com.perm.DoomPlay.EqualizerBandsFragment.java
com.perm.DoomPlay.EqualizerEffectsFragment.java
com.perm.DoomPlay.ExceptionLog.java
com.perm.DoomPlay.FileSystemActivity.java
com.perm.DoomPlay.FullPlaybackActivity.java
com.perm.DoomPlay.ListTracksActivity.java
com.perm.DoomPlay.ListVkActivity.java
com.perm.DoomPlay.ListsAdapter.java
com.perm.DoomPlay.LoginActivity.java
com.perm.DoomPlay.LyricsDialog.java
com.perm.DoomPlay.MainLocalFragment.java
com.perm.DoomPlay.MainScreenActivity.java
com.perm.DoomPlay.MainVkFragment.java
com.perm.DoomPlay.MediaButtonReceiver.java
com.perm.DoomPlay.MyApplication.java
com.perm.DoomPlay.PageFragment.java
com.perm.DoomPlay.PlayingService.java
com.perm.DoomPlay.PlaylistActivity.java
com.perm.DoomPlay.PlaylistDB.java
com.perm.DoomPlay.PlaylistParser.java
com.perm.DoomPlay.ReportDialog.java
com.perm.DoomPlay.SearchActivity.java
com.perm.DoomPlay.SearchVkActivity.java
com.perm.DoomPlay.Serializator.java
com.perm.DoomPlay.SettingActivity.java
com.perm.DoomPlay.SleepDialog.java
com.perm.DoomPlay.SmallWidget.java
com.perm.DoomPlay.TracksHolder.java
com.perm.DoomPlay.Utils.java
com.perm.DoomPlay.VerticalSeekBar.java
com.perm.DoomPlay.VkAlbumsActivity.java
com.perm.DoomPlay.VkFrActivity.java
com.perm.DoomPlay.VkGrActivity.java
com.perm.DoomPlay.VkPopularActivity.java
com.un4seen.bass.BASSFLAC.java
com.un4seen.bass.BASSMIDI.java
com.un4seen.bass.BASSOPUS.java
com.un4seen.bass.BASSWV.java
com.un4seen.bass.BASS_AAC.java
com.un4seen.bass.BASS_ALAC.java
com.un4seen.bass.BASS_APE.java
com.un4seen.bass.BASS_MPC.java
com.un4seen.bass.BASS.java