PlayerManager.java 8.56 KB
/*
 * Copyright 2018-2019 KunMinX
 *
 * 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.
 */

package com.wd.musicplayer.player;

import android.content.Context;
import android.content.Intent;

import com.danikula.videocache.HttpProxyCacheServer;
import com.wd.basemusic.PlayerController;
import com.wd.basemusic.PlayingInfoManager;
import com.wd.basemusic.contract.ICacheProxy;
import com.wd.basemusic.contract.IPlayController;
import com.wd.basemusic.contract.IServiceNotifier;
import com.wd.basemusic.domain.PlayerInfoDispatcher;
import com.wd.musicplayer.data.bean.MusicAlbum;
import com.wd.musicplayer.player.helper.PlayerFileNameGenerator;
import com.wd.musicplayer.player.notification.PlayerService;
import com.wd.foundation.wdkit.base.BaseApplication;
import com.wd.common.floatingview.FloatWindow;
import com.wd.foundation.bean.music.bean.TestArtist;
import com.wd.foundation.bean.music.bean.VoicePlayerBean;

import java.util.List;

/**
 * 控制音频的数据源、播放模式、下一曲、上一曲、暂停、播放等操作
 * 源码地址:https://github.com/KunMinX/Jetpack-MusicPlayer/
 * Create by KunMinX at 19/10/31
 */
public class PlayerManager implements IPlayController<MusicAlbum, VoicePlayerBean, TestArtist> {


    private static final PlayerManager sManager = new PlayerManager();

    private final PlayerController<MusicAlbum, VoicePlayerBean, TestArtist> mController;
    private Long timing = 0L;
    private String seekBarTime = "00:00 / 00:00";


    public String getSeekBarTime() {
        return seekBarTime;
    }

    public void setSeekBarTime(String seekBarTime) {
        this.seekBarTime = seekBarTime;
    }

    public PlayerManager() {
        mController = new PlayerController<>();
        init();
    }

    public static PlayerManager getInstance() {
        return sManager;
    }

    private HttpProxyCacheServer mProxy;

    private boolean mIsInit;

    public void init() {

        if (!mIsInit) {
            this.init(BaseApplication.getInstance(), null, null);
            mIsInit = true;
        }
    }

    @Override
    public void init(Context context, IServiceNotifier iServiceNotifier, ICacheProxy iCacheProxy) {

        Context context1 = context.getApplicationContext();

        mProxy = new HttpProxyCacheServer.Builder(context1)
                .fileNameGenerator(new PlayerFileNameGenerator())
                .maxCacheSize(2147483648L) // 2GB
                .build();

        mController.init(context1, startOrStop -> {
            Intent intent = new Intent(context1, PlayerService.class);
            if (startOrStop) {
                context1.startService(intent);
            } else {
                context1.stopService(intent);
            }
        }, url -> mProxy.getProxyUrl(url));

    }

    @Override
    public void loadAlbum(MusicAlbum musicAlbum) {
        mController.loadAlbum(musicAlbum);
    }

    @Override
    public void loadAlbum(MusicAlbum musicAlbum, int playIndex) {
        mController.loadAlbum(musicAlbum, playIndex);
    }

    @Override
    public void playAudio() {

        if (FloatWindow.get() != null) {
            FloatWindow.get().setColseed(false);
        }
        mController.playAudio();
    }

    @Override
    public void playAudio(int albumIndex) {

        if (FloatWindow.get() != null) {
            FloatWindow.get().setColseed(false);
        }
        mController.playAudio(albumIndex);
    }

    @Override
    public void playNext() {

        if (FloatWindow.get() != null) {
            FloatWindow.get().setColseed(false);
        }
        mController.playNext(false);
    }

    @Override
    public void playPrevious() {
        mController.playPrevious();
    }

    @Override
    public void playAgain() {
        mController.playAgain();
    }

    /**
     * 收起悬浮窗
     * */
    public void packUpPop(){
        mController.packUpAnimation();
    }

    public void unfoldAnimation(){
        mController.unfoldAnimation();
    }

    @Override
    public void pauseAudio() {
        mController.pauseAudio();
    }

    @Override
    public void resumeAudio() {
        mController.resumeAudio();
    }

    @Override
    public void clear() {

        if (FloatWindow.get() != null) {
            FloatWindow.get().setColseed(true);
        }
        mController.clear();
    }

    @Override
    public void changeMode() {
        mController.changeMode();
    }

    @Override
    public void onlyChangeMode() {
        mController.onlyChangeMode();
    }

    @Override
    public boolean isPlaying() {
        return mController.isPlaying();
    }

    @Override
    public boolean isPaused() {
        return mController.isPaused();
    }

    @Override
    public boolean isInit() {
        return mController.isInit();
    }

    @Override
    public void requestLastPlayingInfo() {
        mController.requestLastPlayingInfo();
    }

    @Override
    public void setSeek(int progress) {
        mController.setSeek(progress);
    }

    @Override
    public void updateDownCount() {
        mController.requestDownCount();
    }

    @Override
    public void setPlaybackSpeed(float speed) {
        mController.switchPlaybackSpeed(speed);
    }

    @Override
    public String getTrackTime(int progress) {
        return mController.getTrackTime(progress);
    }

    @Override
    public PlayerInfoDispatcher getDispatcher() {
        return mController.getDispatcher();
    }

    @Override
    public MusicAlbum getAlbum() {
        return mController.getAlbum();
    }

    @Override
    public List<VoicePlayerBean> getAlbumMusics() {
        return mController.getAlbumMusics();
    }

    @Override
    public void setChangingPlayingMusic(boolean changingPlayingMusic) {
        mController.setChangingPlayingMusic(changingPlayingMusic);
    }

    @Override
    public int getAlbumIndex() {
        return mController.getAlbumIndex();
    }

    @Override
    public Enum<PlayingInfoManager.RepeatMode> getRepeatMode() {
        return mController.getRepeatMode();
    }

    @Override
    public void togglePlay() {

        if (FloatWindow.get() != null) {
            FloatWindow.get().setColseed(false);
        }
        mController.togglePlay();
    }

    @Override
    public VoicePlayerBean getCurrentPlayingMusic() {
        return mController.getCurrentPlayingMusic();
    }

    public String getNowTime() {
        return mController.getNowTime();
    }

    public String getAllTime() {
        return mController.getAllTime();
    }
    public int getTotalIntTime(){
        return mController.getTotalTime();
    }
    public long getCurrentProcess(){
        return mController.getCurrentProcess();
    }
    /**
     * 剩余时间
     * */
    public long getResidueDuration(){
        return mController.getResidueDuration();
    }

    // 播放完当前 暂替
    public void timingMode(int timingMode) {
        mController.timingMode(timingMode);
    }

    public int getTimingMode(){
        return mController.getTimingMode();
    }


//    public void restoreTimingMode(){
//        mController.restoreTimingMode();
//    }

    public boolean isTimingMode(){
        return mController.isTimingMode();
    }

    // 随机播放
    public void randomPlay() {
        if (FloatWindow.get() != null) {
            FloatWindow.get().setColseed(false);
        }
        mController.randomPlay();
    }

    // 单曲循环播放
    public void singleCyclechange() {
        mController.singleCyclechange();
    }

    // 列表播放
    public void singleListChange() {
        mController.singleListChange();
    }

    // 单曲播放,不循环
    public void single() {
        mController.single();
    }

    // 发送定时器更新时间
    public void setTimer(Long timing) {
        this.timing = timing;
    }

    // 获取定时器更新时间
    public Long getTimer() {
        return timing;
    }

    // 音频悬浮数据展示更新
    public void changeMusicTextFloatWindow() {
        mController.changeMusicTextFloatWindow();
    }

    public void setFirstPlayAudio() {

        if (FloatWindow.get() != null) {
            FloatWindow.get().setColseed(false);
        }
        mController.setFirstPlayAudio();
    }

}