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