| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * 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.android.onemedia; |
| |
| |
| import android.app.Activity; |
| import android.app.Notification; |
| import android.app.NotificationManager; |
| import android.app.PendingIntent; |
| import android.content.ComponentName; |
| import android.content.Intent; |
| import android.graphics.Bitmap; |
| import android.graphics.BitmapFactory; |
| import android.media.MediaMetadata; |
| import android.media.session.PlaybackState; |
| import android.net.Uri; |
| import android.os.Bundle; |
| import android.provider.MediaStore; |
| import android.text.format.DateUtils; |
| import android.util.Log; |
| import android.view.Menu; |
| import android.view.View; |
| import android.widget.Button; |
| import android.widget.CheckBox; |
| import android.widget.EditText; |
| import android.widget.ImageView; |
| import android.widget.TextView; |
| |
| import java.io.IOException; |
| |
| public class OnePlayerActivity extends Activity { |
| private static final String TAG = "OnePlayerActivity"; |
| |
| private static final int READ_REQUEST_CODE = 42; |
| |
| protected PlayerController mPlayer; |
| |
| private Button mStartButton; |
| private Button mPlayButton; |
| private Button mRouteButton; |
| private TextView mStatusView; |
| |
| private EditText mContentText; |
| private EditText mNextContentText; |
| private CheckBox mHasVideo; |
| private ImageView mArtView; |
| |
| private PlaybackState mPlaybackState; |
| private Bitmap mAlbumArtBitmap; |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.activity_one_player); |
| mPlayer = new PlayerController(this, OnePlayerService.getServiceIntent(this)); |
| |
| |
| mStartButton = findViewById(R.id.start_button); |
| mPlayButton = findViewById(R.id.play_button); |
| mRouteButton = findViewById(R.id.route_button); |
| mStatusView = findViewById(R.id.status); |
| mContentText = findViewById(R.id.content); |
| mNextContentText = findViewById(R.id.next_content); |
| mHasVideo = findViewById(R.id.has_video); |
| mArtView = findViewById(R.id.art); |
| |
| final Button artPicker = findViewById(R.id.art_picker); |
| artPicker.setOnClickListener(mButtonListener); |
| |
| mStartButton.setOnClickListener(mButtonListener); |
| mPlayButton.setOnClickListener(mButtonListener); |
| mRouteButton.setOnClickListener(mButtonListener); |
| |
| } |
| |
| @Override |
| public boolean onCreateOptionsMenu(Menu menu) { |
| // Inflate the menu; this adds items to the action bar if it is present. |
| getMenuInflater().inflate(R.menu.main, menu); |
| return true; |
| } |
| |
| @Override |
| public void onResume() { |
| super.onResume(); |
| mPlayer.onResume(); |
| mPlayer.setListener(mListener); |
| } |
| |
| @Override |
| public void onPause() { |
| mPlayer.setListener(null); |
| mPlayer.onPause(); |
| super.onPause(); |
| } |
| |
| @Override |
| public void onActivityResult(int requestCode, int resultCode, |
| Intent resultData) { |
| if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) { |
| Uri uri = null; |
| if (resultData != null) { |
| uri = resultData.getData(); |
| Log.i(TAG, "Uri: " + uri.toString()); |
| mAlbumArtBitmap = null; |
| try { |
| mAlbumArtBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); |
| } catch (IOException e) { |
| Log.v(TAG, "Couldn't load album art", e); |
| } |
| mArtView.setImageBitmap(mAlbumArtBitmap); |
| if (mAlbumArtBitmap != null) { |
| mArtView.setVisibility(View.VISIBLE); |
| } else { |
| mArtView.setVisibility(View.GONE); |
| } |
| mPlayer.setArt(mAlbumArtBitmap); |
| } |
| } |
| } |
| |
| private void setControlsEnabled(boolean enabled) { |
| mStartButton.setEnabled(enabled); |
| mPlayButton.setEnabled(enabled); |
| } |
| |
| private View.OnClickListener mButtonListener = new View.OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| final int state = mPlaybackState.getState(); |
| switch (v.getId()) { |
| case R.id.play_button: |
| Log.d(TAG, "Play button pressed, in state " + state); |
| if (state == PlaybackState.STATE_PAUSED |
| || state == PlaybackState.STATE_STOPPED) { |
| mPlayer.play(); |
| } else if (state == PlaybackState.STATE_PLAYING) { |
| mPlayer.pause(); |
| } |
| break; |
| case R.id.start_button: |
| Log.d(TAG, "Start button pressed, in state " + state); |
| mPlayer.setContent(mContentText.getText().toString()); |
| break; |
| case R.id.route_button: |
| mPlayer.showRoutePicker(); |
| break; |
| case R.id.art_picker: |
| Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); |
| intent.addCategory(Intent.CATEGORY_OPENABLE); |
| intent.setType("image/*"); |
| |
| startActivityForResult(intent, READ_REQUEST_CODE); |
| break; |
| } |
| |
| } |
| }; |
| |
| private PlayerController.Listener mListener = new PlayerController.Listener() { |
| public MediaMetadata mMetadata; |
| |
| @Override |
| public void onPlaybackStateChange(PlaybackState state) { |
| mPlaybackState = state; |
| boolean enablePlay = false; |
| boolean enableControls = true; |
| StringBuilder statusBuilder = new StringBuilder(); |
| switch (mPlaybackState.getState()) { |
| case PlaybackState.STATE_PLAYING: |
| statusBuilder.append("playing"); |
| mPlayButton.setText("Pause"); |
| enablePlay = true; |
| break; |
| case PlaybackState.STATE_PAUSED: |
| statusBuilder.append("paused"); |
| mPlayButton.setText("Play"); |
| enablePlay = true; |
| break; |
| case PlaybackState.STATE_STOPPED: |
| statusBuilder.append("ended"); |
| mPlayButton.setText("Play"); |
| enablePlay = true; |
| break; |
| case PlaybackState.STATE_ERROR: |
| statusBuilder.append("error: ").append(state.getErrorMessage()); |
| break; |
| case PlaybackState.STATE_BUFFERING: |
| statusBuilder.append("buffering"); |
| break; |
| case PlaybackState.STATE_NONE: |
| statusBuilder.append("none"); |
| break; |
| case PlaybackState.STATE_CONNECTING: |
| statusBuilder.append("connecting"); |
| enableControls = false; |
| break; |
| default: |
| statusBuilder.append(mPlaybackState); |
| } |
| statusBuilder.append(" -- At position: ").append(state.getPosition()); |
| mStatusView.setText(statusBuilder.toString()); |
| mPlayButton.setEnabled(enablePlay); |
| setControlsEnabled(enableControls); |
| } |
| |
| @Override |
| public void onConnectionStateChange(int state) { |
| if (state == PlayerController.STATE_DISCONNECTED) { |
| setControlsEnabled(false); |
| } else if (state == PlayerController.STATE_CONNECTED) { |
| setControlsEnabled(true); |
| } |
| } |
| |
| @Override |
| public void onMetadataChange(MediaMetadata metadata) { |
| mMetadata = metadata; |
| } |
| }; |
| } |