This wires up a notification and some basic metadata for testing in OneMedia. Change-Id: I0f2e922536c85caa63f66dae7deb55ffe94fe231
235 lines
8.3 KiB
Java
235 lines
8.3 KiB
Java
/*
|
|
* 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 = (Button) findViewById(R.id.start_button);
|
|
mPlayButton = (Button) findViewById(R.id.play_button);
|
|
mRouteButton = (Button) findViewById(R.id.route_button);
|
|
mStatusView = (TextView) findViewById(R.id.status);
|
|
mContentText = (EditText) findViewById(R.id.content);
|
|
mNextContentText = (EditText) findViewById(R.id.next_content);
|
|
mHasVideo = (CheckBox) findViewById(R.id.has_video);
|
|
mArtView = (ImageView) findViewById(R.id.art);
|
|
|
|
final Button artPicker = (Button) 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;
|
|
}
|
|
};
|
|
}
|