/* * Copyright (C) 2008 Esmertec AG. * Copyright (C) 2008 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.mms.ui; import java.util.Map; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.net.Uri; import android.util.AttributeSet; import android.util.Log; import android.widget.LinearLayout; import android.widget.TextView; import com.android.mms.R; /** * This class provides an embedded editor/viewer of audio attachment. */ public class AudioAttachmentView extends LinearLayout implements SlideViewInterface { private static final String TAG = "AudioAttachmentView"; private final Resources mRes; private TextView mNameView; private TextView mAlbumView; private TextView mArtistView; private TextView mErrorMsgView; private Uri mAudioUri; private MediaPlayer mMediaPlayer; private boolean mIsPlaying; public AudioAttachmentView(Context context) { super(context); mRes = context.getResources(); } public AudioAttachmentView(Context context, AttributeSet attrs) { super(context, attrs); mRes = context.getResources(); } @Override protected void onFinishInflate() { mNameView = (TextView) findViewById(R.id.audio_name); mAlbumView = (TextView) findViewById(R.id.album_name); mArtistView = (TextView) findViewById(R.id.artist_name); mErrorMsgView = (TextView) findViewById(R.id.audio_error_msg); } private void onPlaybackError() { Log.e(TAG, "Error occurred while playing audio."); showErrorMessage(mRes.getString(R.string.cannot_play_audio)); stopAudio(); } private void cleanupMediaPlayer() { if (mMediaPlayer != null) { try { mMediaPlayer.stop(); mMediaPlayer.release(); } finally { mMediaPlayer = null; } } } synchronized public void startAudio() { if (!mIsPlaying && (mAudioUri != null)) { mMediaPlayer = MediaPlayer.create(mContext, mAudioUri); if (mMediaPlayer != null) { mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) { stopAudio(); } }); mMediaPlayer.setOnErrorListener(new OnErrorListener() { public boolean onError(MediaPlayer mp, int what, int extra) { onPlaybackError(); return true; } }); mIsPlaying = true; mMediaPlayer.start(); } } } public void startVideo() { // TODO Auto-generated method stub } public void setAudio(Uri audio, String name, Map extras) { synchronized (this) { mAudioUri = audio; } mNameView.setText(name); mAlbumView.setText((String) extras.get("album")); mArtistView.setText((String) extras.get("artist")); } public void setImage(String name, Bitmap bitmap) { // TODO Auto-generated method stub } public void setImageRegionFit(String fit) { // TODO Auto-generated method stub } public void setImageVisibility(boolean visible) { // TODO Auto-generated method stub } public void setText(String name, String text) { // TODO Auto-generated method stub } public void setTextVisibility(boolean visible) { // TODO Auto-generated method stub } public void setVideo(String name, Uri video) { // TODO Auto-generated method stub } public void setVideoThumbnail(String name, Bitmap bitmap) { } public void setVideoVisibility(boolean visible) { // TODO Auto-generated method stub } synchronized public void stopAudio() { try { cleanupMediaPlayer(); } finally { mIsPlaying = false; } } public void stopVideo() { // TODO Auto-generated method stub } public void reset() { synchronized (this) { if (mIsPlaying) { stopAudio(); } } mErrorMsgView.setVisibility(GONE); } public void setVisibility(boolean visible) { // TODO Auto-generated method stub } private void showErrorMessage(String msg) { mErrorMsgView.setText(msg); mErrorMsgView.setVisibility(VISIBLE); } public void pauseAudio() { // TODO Auto-generated method stub } public void pauseVideo() { // TODO Auto-generated method stub } public void seekAudio(int seekTo) { // TODO Auto-generated method stub } public void seekVideo(int seekTo) { // TODO Auto-generated method stub } }