1d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian/* 2d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Copyright (C) 2016 The Android Open Source Project 3d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 4d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License"); 5d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * you may not use this file except in compliance with the License. 6d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * You may obtain a copy of the License at 7d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 8d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * http://www.apache.org/licenses/LICENSE-2.0 9d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 10d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Unless required by applicable law or agreed to in writing, software 11d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS, 12d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * See the License for the specific language governing permissions and 14d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * limitations under the License 15d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 16d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 17d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpackage com.android.voicemail.impl.utils; 18d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 19d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.content.ContentResolver; 20d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.content.ContentValues; 21d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.content.Context; 22d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.net.Uri; 23d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.provider.VoicemailContract.Voicemails; 24d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.telecom.PhoneAccountHandle; 25d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport com.android.voicemail.impl.Voicemail; 26d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport java.util.List; 27d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 28d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpublic class VoicemailDatabaseUtil { 29d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 30d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 31d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Inserts a new voicemail into the voicemail content provider. 32d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 33d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param context The context of the app doing the inserting 34d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param voicemail Data to be inserted 35d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @return {@link Uri} of the newly inserted {@link Voicemail} 36d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @hide 37d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 38d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static Uri insert(Context context, Voicemail voicemail) { 39d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian ContentResolver contentResolver = context.getContentResolver(); 40d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian ContentValues contentValues = getContentValues(voicemail); 41d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return contentResolver.insert( 42d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Voicemails.buildSourceUri(context.getPackageName()), contentValues); 43d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 44d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 45d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 46d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Inserts a list of voicemails into the voicemail content provider. 47d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 48d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param context The context of the app doing the inserting 49d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @param voicemails Data to be inserted 50d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @return the number of voicemails inserted 51d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * @hide 52d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 53d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static int insert(Context context, List<Voicemail> voicemails) { 54d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian for (Voicemail voicemail : voicemails) { 55d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian insert(context, voicemail); 56d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 57d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return voicemails.size(); 58d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 59d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 60d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Maps structured {@link Voicemail} to {@link ContentValues} in content provider. */ 61d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private static ContentValues getContentValues(Voicemail voicemail) { 62d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian ContentValues contentValues = new ContentValues(); 63d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put(Voicemails.DATE, String.valueOf(voicemail.getTimestampMillis())); 64d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put(Voicemails.NUMBER, voicemail.getNumber()); 65d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put(Voicemails.DURATION, String.valueOf(voicemail.getDuration())); 66d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put(Voicemails.SOURCE_PACKAGE, voicemail.getSourcePackage()); 67d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put(Voicemails.SOURCE_DATA, voicemail.getSourceData()); 68d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put(Voicemails.IS_READ, voicemail.isRead() ? 1 : 0); 69d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put(Voicemails.IS_OMTP_VOICEMAIL, 1); 70d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 71d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian PhoneAccountHandle phoneAccount = voicemail.getPhoneAccount(); 72d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (phoneAccount != null) { 73d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put( 74d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Voicemails.PHONE_ACCOUNT_COMPONENT_NAME, 75d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian phoneAccount.getComponentName().flattenToString()); 76d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put(Voicemails.PHONE_ACCOUNT_ID, phoneAccount.getId()); 77d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 78d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 79d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (voicemail.getTranscription() != null) { 80d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian contentValues.put(Voicemails.TRANSCRIPTION, voicemail.getTranscription()); 81d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 82d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 83d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return contentValues; 84d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 85d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian} 86