Download File
Download Project
Settings
Line Wrap
Themes
default
ambiance
bespin
dracula
eclipse
material
mbo
mdn-like
neat
solarized dark
ttcn
zenburn
MainActivity.java
/* * Copyright 2017 Google Inc. All rights reserved. * * 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.example.android.mediaplayersample; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ScrollView; import android.widget.SeekBar; import android.widget.TextView; /** * Allows playback of a single MP3 file via the UI. It contains a {@link MediaPlayerHolder} * which implements the {@link PlayerAdapter} interface that the activity uses to control * audio playback. */ public final class MainActivity extends AppCompatActivity { public static final String TAG = "MainActivity"; public static final int MEDIA_RES_ID = R.raw.jazz_in_paris; private TextView mTextDebug; private SeekBar mSeekbarAudio; private ScrollView mScrollContainer; private PlayerAdapter mPlayerAdapter; private boolean mUserIsSeeking = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initializeUI(); initializeSeekbar(); initializePlaybackController(); Log.d(TAG, "onCreate: finished"); } @Override protected void onStart() { super.onStart(); mPlayerAdapter.loadMedia(MEDIA_RES_ID); Log.d(TAG, "onStart: create MediaPlayer"); } @Override protected void onStop() { super.onStop(); if (isChangingConfigurations() && mPlayerAdapter.isPlaying()) { Log.d(TAG, "onStop: don't release MediaPlayer as screen is rotating & playing"); } else { mPlayerAdapter.release(); Log.d(TAG, "onStop: release MediaPlayer"); } } private void initializeUI() { mTextDebug = (TextView) findViewById(R.id.text_debug); Button mPlayButton = (Button) findViewById(R.id.button_play); Button mPauseButton = (Button) findViewById(R.id.button_pause); Button mResetButton = (Button) findViewById(R.id.button_reset); mSeekbarAudio = (SeekBar) findViewById(R.id.seekbar_audio); mScrollContainer = (ScrollView) findViewById(R.id.scroll_container); mPauseButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { mPlayerAdapter.pause(); } }); mPlayButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { mPlayerAdapter.play(); } }); mResetButton.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { mPlayerAdapter.reset(); } }); } private void initializePlaybackController() { MediaPlayerHolder mMediaPlayerHolder = new MediaPlayerHolder(this); Log.d(TAG, "initializePlaybackController: created MediaPlayerHolder"); mMediaPlayerHolder.setPlaybackInfoListener(new PlaybackListener()); mPlayerAdapter = mMediaPlayerHolder; Log.d(TAG, "initializePlaybackController: MediaPlayerHolder progress callback set"); } private void initializeSeekbar() { mSeekbarAudio.setOnSeekBarChangeListener( new SeekBar.OnSeekBarChangeListener() { int userSelectedPosition = 0; @Override public void onStartTrackingTouch(SeekBar seekBar) { mUserIsSeeking = true; } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { userSelectedPosition = progress; } } @Override public void onStopTrackingTouch(SeekBar seekBar) { mUserIsSeeking = false; mPlayerAdapter.seekTo(userSelectedPosition); } }); } public class PlaybackListener extends PlaybackInfoListener { @Override public void onDurationChanged(int duration) { mSeekbarAudio.setMax(duration); Log.d(TAG, String.format("setPlaybackDuration: setMax(%d)", duration)); } @Override public void onPositionChanged(int position) { if (!mUserIsSeeking) { mSeekbarAudio.setProgress(position, true); Log.d(TAG, String.format("setPlaybackPosition: setProgress(%d)", position)); } } @Override public void onStateChanged(@State int state) { String stateToString = PlaybackInfoListener.convertStateToString(state); onLogUpdated(String.format("onStateChanged(%s)", stateToString)); } @Override public void onPlaybackCompleted() { } @Override public void onLogUpdated(String message) { if (mTextDebug != null) { mTextDebug.append(message); mTextDebug.append("\n"); // Moves the scrollContainer focus to the end. mScrollContainer.post( new Runnable() { @Override public void run() { mScrollContainer.fullScroll(ScrollView.FOCUS_DOWN); } }); } } } }