172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/*
272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 Esmertec AG.
372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License.
772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at
872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and
1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License.
1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */
1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.ui;
1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
2072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.R;
2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
2272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.Context;
2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.content.res.Resources;
2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.graphics.Bitmap;
2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.media.AudioManager;
2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.media.MediaPlayer;
2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.media.MediaPlayer.OnCompletionListener;
2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.media.MediaPlayer.OnErrorListener;
2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.net.Uri;
3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.AttributeSet;
3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log;
3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.LinearLayout;
3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.widget.TextView;
3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport java.util.Map;
3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/**
3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * This class provides an embedded editor/viewer of audio attachment.
3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */
4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class AudioAttachmentView extends LinearLayout implements
4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        SlideViewInterface {
4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String TAG = "AudioAttachmentView";
4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private final Resources mRes;
4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private TextView mNameView;
4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private TextView mAlbumView;
4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private TextView mArtistView;
4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private TextView mErrorMsgView;
4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private Uri mAudioUri;
5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private MediaPlayer mMediaPlayer;
5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private boolean mIsPlaying;
5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public AudioAttachmentView(Context context) {
5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        super(context);
5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mRes = context.getResources();
5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public AudioAttachmentView(Context context, AttributeSet attrs) {
5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        super(context, attrs);
6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mRes = context.getResources();
6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    @Override
6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    protected void onFinishInflate() {
6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mNameView = (TextView) findViewById(R.id.audio_name);
6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mAlbumView = (TextView) findViewById(R.id.album_name);
6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mArtistView = (TextView) findViewById(R.id.artist_name);
6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mErrorMsgView = (TextView) findViewById(R.id.audio_error_msg);
6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private void onPlaybackError() {
7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        Log.e(TAG, "Error occurred while playing audio.");
7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        showErrorMessage(mRes.getString(R.string.cannot_play_audio));
7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        stopAudio();
7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private void cleanupMediaPlayer() {
7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (mMediaPlayer != null) {
7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            try {
8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mMediaPlayer.stop();
8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mMediaPlayer.release();
8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            } finally {
8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mMediaPlayer = null;
8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    synchronized public void startAudio() {
8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (!mIsPlaying && (mAudioUri != null)) {
9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mMediaPlayer = MediaPlayer.create(mContext, mAudioUri);
9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (mMediaPlayer != null) {
9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    public void onCompletion(MediaPlayer mp) {
9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                        stopAudio();
9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    }
9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                });
9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mMediaPlayer.setOnErrorListener(new OnErrorListener() {
9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    public boolean onError(MediaPlayer mp, int what, int extra) {
10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                        onPlaybackError();
10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                        return true;
10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                    }
10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                });
10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mIsPlaying = true;
10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                mMediaPlayer.start();
10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void startVideo() {
11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setAudio(Uri audio, String name, Map<String, ?> extras) {
11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        synchronized (this) {
11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mAudioUri = audio;
11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mNameView.setText(name);
12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mAlbumView.setText((String) extras.get("album"));
12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mArtistView.setText((String) extras.get("artist"));
12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setImage(String name, Bitmap bitmap) {
12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setImageRegionFit(String fit) {
13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setImageVisibility(boolean visible) {
13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setText(String name, String text) {
14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setTextVisibility(boolean visible) {
14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setVideo(String name, Uri video) {
15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
15679bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor    public void setVideoThumbnail(String name, Bitmap bitmap) {
15779bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor    }
15879bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor
15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setVideoVisibility(boolean visible) {
16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    synchronized public void stopAudio() {
16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            cleanupMediaPlayer();
16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } finally {
16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            mIsPlaying = false;
16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void stopVideo() {
17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void reset() {
17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        synchronized (this) {
17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (mIsPlaying) {
18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                stopAudio();
18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mErrorMsgView.setVisibility(GONE);
18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setVisibility(boolean visible) {
18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private void showErrorMessage(String msg) {
19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mErrorMsgView.setText(msg);
19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        mErrorMsgView.setVisibility(VISIBLE);
19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void pauseAudio() {
19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void pauseVideo() {
20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void seekAudio(int seekTo) {
20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void seekVideo(int seekTo) {
21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        // TODO Auto-generated method stub
21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project}
216