Home | History | Annotate | Download | only in onemedia
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.onemedia;
     17 
     18 
     19 import android.app.Activity;
     20 import android.app.Notification;
     21 import android.app.NotificationManager;
     22 import android.app.PendingIntent;
     23 import android.content.ComponentName;
     24 import android.content.Intent;
     25 import android.graphics.Bitmap;
     26 import android.graphics.BitmapFactory;
     27 import android.media.MediaMetadata;
     28 import android.media.session.PlaybackState;
     29 import android.net.Uri;
     30 import android.os.Bundle;
     31 import android.provider.MediaStore;
     32 import android.text.format.DateUtils;
     33 import android.util.Log;
     34 import android.view.Menu;
     35 import android.view.View;
     36 import android.widget.Button;
     37 import android.widget.CheckBox;
     38 import android.widget.EditText;
     39 import android.widget.ImageView;
     40 import android.widget.TextView;
     41 
     42 import java.io.IOException;
     43 
     44 public class OnePlayerActivity extends Activity {
     45     private static final String TAG = "OnePlayerActivity";
     46 
     47     private static final int READ_REQUEST_CODE = 42;
     48 
     49     protected PlayerController mPlayer;
     50 
     51     private Button mStartButton;
     52     private Button mPlayButton;
     53     private Button mRouteButton;
     54     private TextView mStatusView;
     55 
     56     private EditText mContentText;
     57     private EditText mNextContentText;
     58     private CheckBox mHasVideo;
     59     private ImageView mArtView;
     60 
     61     private PlaybackState mPlaybackState;
     62     private Bitmap mAlbumArtBitmap;
     63 
     64     @Override
     65     protected void onCreate(Bundle savedInstanceState) {
     66         super.onCreate(savedInstanceState);
     67         setContentView(R.layout.activity_one_player);
     68         mPlayer = new PlayerController(this, OnePlayerService.getServiceIntent(this));
     69 
     70 
     71         mStartButton = (Button) findViewById(R.id.start_button);
     72         mPlayButton = (Button) findViewById(R.id.play_button);
     73         mRouteButton = (Button) findViewById(R.id.route_button);
     74         mStatusView = (TextView) findViewById(R.id.status);
     75         mContentText = (EditText) findViewById(R.id.content);
     76         mNextContentText = (EditText) findViewById(R.id.next_content);
     77         mHasVideo = (CheckBox) findViewById(R.id.has_video);
     78         mArtView = (ImageView) findViewById(R.id.art);
     79 
     80         final Button artPicker = (Button) findViewById(R.id.art_picker);
     81         artPicker.setOnClickListener(mButtonListener);
     82 
     83         mStartButton.setOnClickListener(mButtonListener);
     84         mPlayButton.setOnClickListener(mButtonListener);
     85         mRouteButton.setOnClickListener(mButtonListener);
     86 
     87     }
     88 
     89     @Override
     90     public boolean onCreateOptionsMenu(Menu menu) {
     91         // Inflate the menu; this adds items to the action bar if it is present.
     92         getMenuInflater().inflate(R.menu.main, menu);
     93         return true;
     94     }
     95 
     96     @Override
     97     public void onResume() {
     98         super.onResume();
     99         mPlayer.onResume();
    100         mPlayer.setListener(mListener);
    101     }
    102 
    103     @Override
    104     public void onPause() {
    105         mPlayer.setListener(null);
    106         mPlayer.onPause();
    107         super.onPause();
    108     }
    109 
    110     @Override
    111     public void onActivityResult(int requestCode, int resultCode,
    112             Intent resultData) {
    113         if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
    114             Uri uri = null;
    115             if (resultData != null) {
    116                 uri = resultData.getData();
    117                 Log.i(TAG, "Uri: " + uri.toString());
    118                 mAlbumArtBitmap = null;
    119                 try {
    120                     mAlbumArtBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
    121                 } catch (IOException e) {
    122                     Log.v(TAG, "Couldn't load album art", e);
    123                 }
    124                 mArtView.setImageBitmap(mAlbumArtBitmap);
    125                 if (mAlbumArtBitmap != null) {
    126                     mArtView.setVisibility(View.VISIBLE);
    127                 } else {
    128                     mArtView.setVisibility(View.GONE);
    129                 }
    130                 mPlayer.setArt(mAlbumArtBitmap);
    131             }
    132         }
    133     }
    134 
    135     private void setControlsEnabled(boolean enabled) {
    136         mStartButton.setEnabled(enabled);
    137         mPlayButton.setEnabled(enabled);
    138     }
    139 
    140     private View.OnClickListener mButtonListener = new View.OnClickListener() {
    141         @Override
    142         public void onClick(View v) {
    143             final int state = mPlaybackState.getState();
    144             switch (v.getId()) {
    145                 case R.id.play_button:
    146                     Log.d(TAG, "Play button pressed, in state " + state);
    147                     if (state == PlaybackState.STATE_PAUSED
    148                             || state == PlaybackState.STATE_STOPPED) {
    149                         mPlayer.play();
    150                     } else if (state == PlaybackState.STATE_PLAYING) {
    151                         mPlayer.pause();
    152                     }
    153                     break;
    154                 case R.id.start_button:
    155                     Log.d(TAG, "Start button pressed, in state " + state);
    156                     mPlayer.setContent(mContentText.getText().toString());
    157                     break;
    158                 case R.id.route_button:
    159                     mPlayer.showRoutePicker();
    160                     break;
    161                 case R.id.art_picker:
    162                     Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    163                     intent.addCategory(Intent.CATEGORY_OPENABLE);
    164                     intent.setType("image/*");
    165 
    166                     startActivityForResult(intent, READ_REQUEST_CODE);
    167                     break;
    168             }
    169 
    170         }
    171     };
    172 
    173     private PlayerController.Listener mListener = new PlayerController.Listener() {
    174         public MediaMetadata mMetadata;
    175 
    176         @Override
    177         public void onPlaybackStateChange(PlaybackState state) {
    178             mPlaybackState = state;
    179             boolean enablePlay = false;
    180             boolean enableControls = true;
    181             StringBuilder statusBuilder = new StringBuilder();
    182             switch (mPlaybackState.getState()) {
    183                 case PlaybackState.STATE_PLAYING:
    184                     statusBuilder.append("playing");
    185                     mPlayButton.setText("Pause");
    186                     enablePlay = true;
    187                     break;
    188                 case PlaybackState.STATE_PAUSED:
    189                     statusBuilder.append("paused");
    190                     mPlayButton.setText("Play");
    191                     enablePlay = true;
    192                     break;
    193                 case PlaybackState.STATE_STOPPED:
    194                     statusBuilder.append("ended");
    195                     mPlayButton.setText("Play");
    196                     enablePlay = true;
    197                     break;
    198                 case PlaybackState.STATE_ERROR:
    199                     statusBuilder.append("error: ").append(state.getErrorMessage());
    200                     break;
    201                 case PlaybackState.STATE_BUFFERING:
    202                     statusBuilder.append("buffering");
    203                     break;
    204                 case PlaybackState.STATE_NONE:
    205                     statusBuilder.append("none");
    206                     break;
    207                 case PlaybackState.STATE_CONNECTING:
    208                     statusBuilder.append("connecting");
    209                     enableControls = false;
    210                     break;
    211                 default:
    212                     statusBuilder.append(mPlaybackState);
    213             }
    214             statusBuilder.append(" -- At position: ").append(state.getPosition());
    215             mStatusView.setText(statusBuilder.toString());
    216             mPlayButton.setEnabled(enablePlay);
    217             setControlsEnabled(enableControls);
    218         }
    219 
    220         @Override
    221         public void onConnectionStateChange(int state) {
    222             if (state == PlayerController.STATE_DISCONNECTED) {
    223                 setControlsEnabled(false);
    224             } else if (state == PlayerController.STATE_CONNECTED) {
    225                 setControlsEnabled(true);
    226             }
    227         }
    228 
    229         @Override
    230         public void onMetadataChange(MediaMetadata metadata) {
    231             mMetadata = metadata;
    232         }
    233     };
    234 }
    235