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