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.common.core; 188d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 19d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjeeimport android.provider.VoicemailContract; 208d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 21c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjeeimport android.net.Uri; 228d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 238d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport java.io.IOException; 24b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjeeimport java.io.InputStream; 258d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport java.util.List; 268d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 278d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee/** 288d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Provides a simple interface to manipulate voicemails within the voicemail content provider. 298d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <p> 308d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Methods on this interface throw checked exceptions only where the corresponding underlying 318d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * methods perform an operation that itself requires a checked exception. In all other cases a 328d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * {@link RuntimeException} will be thrown here. 338d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <p> 348d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * These methods are blocking, and will return control to the caller only when the operation 358d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * completes. You should not call any of these methods from your main ui thread, as this may result 368d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * in your application becoming unresponsive. 378d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 388d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeepublic interface VoicemailProviderHelper { 398d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 408d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** Sort order to return results by. */ 418d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public enum SortOrder { 428d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee ASCENDING, 438d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee DESCENDING, 448d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** Default sort order returned by DB. (Typically Ascending, but no guarantees made). */ 458d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee DEFAULT 468d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 478d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 488d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 498d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Clears all voicemails accessible to this voicemail content provider. 508d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * 518d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @return the number of voicemails deleted 528d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 538d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public int deleteAll(); 548d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 558d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 568d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Inserts a new voicemail into the voicemail content provider. 578d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * 588d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @param voicemail data to be inserted 598d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @return {@link Uri} of the newly inserted {@link Voicemail} 608d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @throws IllegalArgumentException if any of the following are true: 618d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <ul> 628d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <li>your voicemail is missing a timestamp</li> 638d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <li>your voiceamil is missing a number</li> 648d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <li>your voicemail is missing the provider id field</li> 658d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <li>voicemail has an id (which would indicate that it has already been inserted) 668d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * </li> 678d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * </ul> 688d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 698d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Uri insert(Voicemail voicemail); 708d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 718d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 728d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Returns the {@link Voicemail} whose provider data matches the given value. 738d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <p> 748d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * It is expected that there be one such voicemail. Returns null if no such voicemail exists, 758d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * and returns one chosen arbitrarily if more than one exists. 768d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 77c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee public Voicemail findVoicemailBySourceData(String providerData); 788d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 798d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 808d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Returns the {@link Voicemail} corresponding to a given Uri. The uri must correspond to a 818d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * unique voicemail record. 828d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <p> 838d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Returns null if no voicemail was found that exactly matched the given uri. 848d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 858d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Voicemail findVoicemailByUri(Uri uri); 868d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 878d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 888d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Updates an existing voicemail in the content provider. 898d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <p> 908d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Note that <b>only the fields that are set</b> on the {@link Voicemail} that you provide will 918d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * be used to perform the update. The remaining fields will be left unmodified. To mark a 928d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * voicemail as read, create a new {@link Voicemail} that is marked as read, and call update. 938d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * 948d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @throws IllegalArgumentException if you provide a {@link Voicemail} that already has a Uri 958d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * set, because we don't support altering the Uri of a voicemail, and this most 968d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * likely implies that you're using this api incorrectly 978d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @return the number of rows that were updated 988d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 998d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public int update(Uri uri, Voicemail voicemail); 1008d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1018d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 102b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee * Sets the voicemail content from the supplied input stream. 1038d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <p> 104b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee * The inputStream is owned by the caller and must be closed by it as usual after the call has 105b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee * returned. 1068d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * 1078d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @throws IOException if there is a problem creating the file or no voicemail is found matching 1088d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * the given Uri 1098d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 110b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee public void setVoicemailContent(Uri voicemailUri, InputStream inputStream, String mimeType) 111b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee throws IOException; 112b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee 113b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee /** 114b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee * Sets the voicemail content from the supplied byte array. 115b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee * 116b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee * @throws IOException if there is a problem creating the file or no voicemail is found matching 117b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee * the given Uri 118b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee */ 119b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee public void setVoicemailContent(Uri voicemailUri, byte[] inputBytes, String mimeType) 120b01f5d5251f712e10fadeede1762daaa824807baDebashish Chatterjee throws IOException; 1218d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1228d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 1238d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Fetch all the voicemails accessible to this voicemail content provider. 1248d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * 1258d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @return the list of voicemails, no guarantee is made about the ordering 1268d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 1278d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public List<Voicemail> getAllVoicemails(); 1288d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1298d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 1308d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Same as {@link #getAllVoicemails()} but also sorts them by the requested column and allows to 1318d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * set a filter. 1328d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * 1338d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @param filter The filter to apply while retrieving voicemails. 1348d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @param sortColumn The column to sort by. Must be one of the values defined in 135c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee * {@link VoicemailContract.Voicemails}. 1368d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @param sortOrder Order to sort by 1378d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * @return the list of voicemails, sorted by the requested DB column in specified sort order. 1388d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 1398d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public List<Voicemail> getAllVoicemails(VoicemailFilter filter, 1408d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee String sortColumn, SortOrder sortOrder); 1418d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1428d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 1438d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Returns the Uri for the voicemail with the specified message Id. 1448d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 1458d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Uri getUriForVoicemailWithId(long id); 1468d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee} 147