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