1/* 2 * Copyright (C) 2008 Esmertec AG. 3 * Copyright (C) 2008 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18package com.android.mms.ui; 19 20import java.util.Map; 21 22import android.content.Context; 23import android.content.res.Resources; 24import android.graphics.Bitmap; 25import android.media.AudioManager; 26import android.media.MediaPlayer; 27import android.media.MediaPlayer.OnCompletionListener; 28import android.media.MediaPlayer.OnErrorListener; 29import android.net.Uri; 30import android.util.AttributeSet; 31import android.util.Log; 32import android.widget.LinearLayout; 33import android.widget.TextView; 34 35import com.android.mms.R; 36 37/** 38 * This class provides an embedded editor/viewer of audio attachment. 39 */ 40public class AudioAttachmentView extends LinearLayout implements 41 SlideViewInterface { 42 private static final String TAG = "AudioAttachmentView"; 43 44 private final Resources mRes; 45 private TextView mNameView; 46 private TextView mAlbumView; 47 private TextView mArtistView; 48 private TextView mErrorMsgView; 49 private Uri mAudioUri; 50 private MediaPlayer mMediaPlayer; 51 private boolean mIsPlaying; 52 53 public AudioAttachmentView(Context context) { 54 super(context); 55 mRes = context.getResources(); 56 } 57 58 public AudioAttachmentView(Context context, AttributeSet attrs) { 59 super(context, attrs); 60 mRes = context.getResources(); 61 } 62 63 @Override 64 protected void onFinishInflate() { 65 mNameView = (TextView) findViewById(R.id.audio_name); 66 mAlbumView = (TextView) findViewById(R.id.album_name); 67 mArtistView = (TextView) findViewById(R.id.artist_name); 68 mErrorMsgView = (TextView) findViewById(R.id.audio_error_msg); 69 } 70 71 private void onPlaybackError() { 72 Log.e(TAG, "Error occurred while playing audio."); 73 showErrorMessage(mRes.getString(R.string.cannot_play_audio)); 74 stopAudio(); 75 } 76 77 private void cleanupMediaPlayer() { 78 if (mMediaPlayer != null) { 79 try { 80 mMediaPlayer.stop(); 81 mMediaPlayer.release(); 82 } finally { 83 mMediaPlayer = null; 84 } 85 } 86 } 87 88 synchronized public void startAudio() { 89 if (!mIsPlaying && (mAudioUri != null)) { 90 mMediaPlayer = MediaPlayer.create(mContext, mAudioUri); 91 if (mMediaPlayer != null) { 92 mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 93 mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { 94 public void onCompletion(MediaPlayer mp) { 95 stopAudio(); 96 } 97 }); 98 mMediaPlayer.setOnErrorListener(new OnErrorListener() { 99 public boolean onError(MediaPlayer mp, int what, int extra) { 100 onPlaybackError(); 101 return true; 102 } 103 }); 104 105 mIsPlaying = true; 106 mMediaPlayer.start(); 107 } 108 } 109 } 110 111 public void startVideo() { 112 // TODO Auto-generated method stub 113 114 } 115 116 public void setAudio(Uri audio, String name, Map<String, ?> extras) { 117 synchronized (this) { 118 mAudioUri = audio; 119 } 120 121 mNameView.setText(name); 122 mAlbumView.setText((String) extras.get("album")); 123 mArtistView.setText((String) extras.get("artist")); 124 } 125 126 public void setImage(String name, Bitmap bitmap) { 127 // TODO Auto-generated method stub 128 129 } 130 131 public void setImageRegionFit(String fit) { 132 // TODO Auto-generated method stub 133 134 } 135 136 public void setImageVisibility(boolean visible) { 137 // TODO Auto-generated method stub 138 139 } 140 141 public void setText(String name, String text) { 142 // TODO Auto-generated method stub 143 144 } 145 146 public void setTextVisibility(boolean visible) { 147 // TODO Auto-generated method stub 148 149 } 150 151 public void setVideo(String name, Uri video) { 152 // TODO Auto-generated method stub 153 154 } 155 156 public void setVideoThumbnail(String name, Bitmap bitmap) { 157 } 158 159 public void setVideoVisibility(boolean visible) { 160 // TODO Auto-generated method stub 161 162 } 163 164 synchronized public void stopAudio() { 165 try { 166 cleanupMediaPlayer(); 167 } finally { 168 mIsPlaying = false; 169 } 170 } 171 172 public void stopVideo() { 173 // TODO Auto-generated method stub 174 175 } 176 177 public void reset() { 178 synchronized (this) { 179 if (mIsPlaying) { 180 stopAudio(); 181 } 182 } 183 mErrorMsgView.setVisibility(GONE); 184 } 185 186 public void setVisibility(boolean visible) { 187 // TODO Auto-generated method stub 188 189 } 190 191 private void showErrorMessage(String msg) { 192 mErrorMsgView.setText(msg); 193 mErrorMsgView.setVisibility(VISIBLE); 194 } 195 196 public void pauseAudio() { 197 // TODO Auto-generated method stub 198 199 } 200 201 public void pauseVideo() { 202 // TODO Auto-generated method stub 203 204 } 205 206 public void seekAudio(int seekTo) { 207 // TODO Auto-generated method stub 208 209 } 210 211 public void seekVideo(int seekTo) { 212 // TODO Auto-generated method stub 213 214 } 215} 216