18d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee/*
28d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Copyright (C) 2011 The Android Open Source Project
38d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee *
48d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License");
58d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * you may not use this file except in compliance with the License.
68d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * You may obtain a copy of the License at
78d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee *
88d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee *      http://www.apache.org/licenses/LICENSE-2.0
98d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee *
108d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Unless required by applicable law or agreed to in writing, software
118d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS,
128d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * See the License for the specific language governing permissions and
148d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * limitations under the License.
158d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */
168d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
178d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeepackage com.example.android.voicemail;
188d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
19d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport com.example.android.voicemail.common.core.Voicemail;
20d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport com.example.android.voicemail.common.core.VoicemailImpl;
21d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport com.example.android.voicemail.common.core.VoicemailProviderHelper;
22d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport com.example.android.voicemail.common.core.VoicemailProviderHelpers;
23d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport com.example.android.voicemail.common.inject.InjectView;
24d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport com.example.android.voicemail.common.inject.Injector;
25d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport com.example.android.voicemail.common.logging.Logger;
26d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport com.example.android.voicemail.common.ui.DialogHelperImpl;
27d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport com.example.android.voicemail.common.utils.CloseUtils;
28d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjee
298d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.app.Activity;
308d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.app.Dialog;
318d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.content.Intent;
328d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.net.Uri;
338d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.os.AsyncTask;
348d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.os.Bundle;
358d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.provider.MediaStore;
368d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.util.Pair;
378d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.view.View;
388d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.widget.Button;
398d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.widget.TextView;
408d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
418d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport java.io.IOException;
428d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport java.io.InputStream;
438d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport java.io.OutputStream;
448d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport java.text.ParseException;
458d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport java.text.SimpleDateFormat;
468d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport java.util.Date;
478d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
488d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee/**
498d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * A simple activity that stores user entered voicemail data into voicemail content provider. To be
508d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * used as a test voicemail source.
518d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */
528d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeepublic class AddVoicemailActivity extends Activity {
538d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private static final Logger logger = Logger.getLogger(AddVoicemailActivity.class);
548d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
558d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat("dd/MM/yyyy h:mm");
568d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
578d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private static final int REQUEST_CODE_RECORDING = 100;
588d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
598d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private final DialogHelperImpl mDialogHelper = new DialogHelperImpl(this);
608d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    /**
618d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee     * This is created in {@link #onCreate(Bundle)}, and needs to be released in
628d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee     * {@link #onDestroy()}.
638d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee     */
648d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private VoicemailProviderHelper mVoicemailProviderHelper;
658d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private Uri mRecordingUri;
668d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
678d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    // Mark the views as injectable. These objects are instantiated automatically during
688d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    // onCreate() by finding the appropriate view that matches the specified resource_id.
698d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @InjectView(R.id.start_recording_btn)
708d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private Button mStartRec;
718d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @InjectView(R.id.save_btn)
728d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private Button mSaveButton;
738d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @InjectView(R.id.time)
748d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private TextView mTime;
758d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @InjectView(R.id.provider_package)
768d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private TextView mProviderPackage;
778d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @InjectView(R.id.mime_type)
788d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private TextView mMimeType;
798d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @InjectView(R.id.sender_number)
808d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private TextView mSenderNumber;
818d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @InjectView(R.id.duration)
828d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private TextView mDuration;
838d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
848d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    /** Called when the activity is first created. */
858d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @Override
868d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    public void onCreate(Bundle savedInstanceState) {
878d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        super.onCreate(savedInstanceState);
888d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        setContentView(R.layout.add_voicemail);
898d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        // Inject all objects that are marked by @InjectView annotation.
908d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        Injector.get(this).inject();
918d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        mVoicemailProviderHelper = VoicemailProviderHelpers.createPackageScopedVoicemailProvider(this);
928d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
938d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        setDefaultValues();
948d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
958d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        // Record voice button.
968d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        mStartRec.setOnClickListener(new View.OnClickListener() {
978d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            @Override
988d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            public void onClick(View v) {
998d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                startRecording();
1008d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            }
1018d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        });
1028d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1038d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        // Save voicemail button.
1048d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        mSaveButton.setOnClickListener(new View.OnClickListener() {
1058d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            @Override
1068d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            public void onClick(View v) {
1078d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                storeVoicemail();
1088d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            }
1098d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1108d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        });
1118d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
1128d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1138d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private void storeVoicemail() {
1148d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        try {
1158d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            Pair<Voicemail, Uri> newVoicemail = new Pair<Voicemail, Uri>(
1168d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                    buildVoicemailObjectFromUiElements(), mRecordingUri);
1178d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            new InsertVoicemailTask().execute(newVoicemail);
1188d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        } catch (ParseException e) {
1198d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            handleError(e);
1208d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        }
1218d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
1228d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1238d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private Voicemail buildVoicemailObjectFromUiElements() throws ParseException {
1248d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        String sender = mSenderNumber.getText().toString();
1258d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        String dateStr = mTime.getText().toString();
1268d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        String durationStr = mDuration.getText().toString();
1278d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        String mimeType = mMimeType.getText().toString();
1288d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        String sourcePackageName = mProviderPackage.getText().toString();
1298d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        long time = DATE_FORMATTER.parse(dateStr.trim()).getTime();
1308d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        long duration = durationStr.length() != 0 ? Long.parseLong(durationStr) : 0;
1318d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        return VoicemailImpl.createForInsertion(time, sender)
1328d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                .setDuration(duration)
133c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee                .setSourcePackage(sourcePackageName)
1348d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                .build();
1358d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
1368d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1378d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @Override
1388d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
1398d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        super.onActivityResult(requestCode, resultCode, data);
1408d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        switch (requestCode) {
1418d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            case REQUEST_CODE_RECORDING:
1428d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                handleRecordingResult(resultCode, data);
1438d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                break;
1448d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            default:
1458d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                logger.e("onActivityResult: Unexpected requestCode: " + requestCode);
1468d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        }
1478d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
1488d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1498d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    @Override
1508d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    protected Dialog onCreateDialog(int id, Bundle bundle) {
1518d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        return mDialogHelper.handleOnCreateDialog(id, bundle);
1528d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
1538d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1548d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    /** Set default values in the display */
1558d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private void setDefaultValues() {
1568d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        // Set time to current time.
1578d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        mTime.setText(DATE_FORMATTER.format(new Date()));
1588d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1598d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        // Set provider package to this app's package.
1608d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        mProviderPackage.setText(getPackageName());
1618d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
1628d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1638d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private void startRecording() {
1648d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        Intent recordingIntent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
1658d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        startActivityForResult(recordingIntent, REQUEST_CODE_RECORDING);
1668d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
1678d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1688d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private void handleRecordingResult(int resultCode, Intent data) {
1698d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        if (resultCode != RESULT_OK) {
1708d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            handleError(new Exception("Failed to do recording. Error Code: " + resultCode));
1718d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        }
1728d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1738d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        Uri uri = data.getData();
1748d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        logger.d("Received recording URI: " + uri);
1758d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        if (uri != null) {
1768d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            mRecordingUri = uri;
1778d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            mMimeType.setText(getContentResolver().getType(uri));
1788d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        }
1798d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
1808d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1818d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private void handleError(Exception e) {
1828d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        mDialogHelper.showErrorMessageDialog(R.string.voicemail_store_error, e);
1838d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
1848d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
1858d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    /**
1868d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee     * An async task that inserts a new voicemail record using a background thread.
1878d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee     * The tasks accepts a pair of voicemail object and the recording Uri as the param.
1888d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee     * The result returned is the error exception, if any, encountered during the operation.
1898d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee     */
1908d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    private class InsertVoicemailTask extends AsyncTask<Pair<Voicemail, Uri>, Void, Exception> {
1918d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        @Override
1928d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        protected Exception doInBackground(Pair<Voicemail, Uri>... params) {
1938d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            if (params.length > 0) {
1948d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                try {
1958d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                    insertVoicemail(params[0].first, params[0].second);
1968d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                } catch (IOException e) {
1978d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                    return e;
1988d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                }
1998d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            }
2008d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            return null;
2018d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        }
2028d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
2038d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        private void insertVoicemail(Voicemail voicemail, Uri recordingUri) throws IOException {
2048d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            InputStream inputAudioStream = recordingUri == null ? null :
2058d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                  getContentResolver().openInputStream(recordingUri);
2068d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            Uri newVoicemailUri = mVoicemailProviderHelper.insert(voicemail);
2078d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            logger.i("Inserted new voicemail URI: " + newVoicemailUri);
2088d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            if (inputAudioStream != null) {
2098d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                try {
210b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee                    mVoicemailProviderHelper.setVoicemailContent(newVoicemailUri, inputAudioStream,
211b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee                            getContentResolver().getType(recordingUri));
2128d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                } finally {
2138d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                    CloseUtils.closeQuietly(inputAudioStream);
2148d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                }
2158d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            }
2168d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        }
2178d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
2188d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        @Override
2198d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        protected void onPostExecute(Exception error) {
2208d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            if (error == null) {
2218d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                // No error - done.
2228d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                finish();
2238d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            } else {
2248d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee                handleError(error);
2258d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee            }
2268d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee        }
2278d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee
2288d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee    }
2298d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee}
230