summaryrefslogtreecommitdiffstats
path: root/samples/VoicemailProviderDemo
diff options
context:
space:
mode:
authorDebashish Chatterjee <debashishc@google.com>2011-06-09 14:11:10 +0100
committerDebashish Chatterjee <debashishc@google.com>2011-06-15 17:09:49 +0100
commitc635aaacffbfa695f479fe0aadeeee769224d14e (patch)
tree918d2fd0e4f08b4f31dc2d0ffd07b5172764e2b4 /samples/VoicemailProviderDemo
parent67b3e5aba4981d80a1ad6685890d7ce7aefd6833 (diff)
downloadandroid_development-c635aaacffbfa695f479fe0aadeeee769224d14e.tar.gz
android_development-c635aaacffbfa695f479fe0aadeeee769224d14e.tar.bz2
android_development-c635aaacffbfa695f479fe0aadeeee769224d14e.zip
Changed VoicemailProvider demo app to use new VoicemailContract api.
- Use new VoicemailContract instead of VoicemailProvider for API. VoicemailContract will soon be submitted to framework/base. The local copy will then be deleted. - Got rid of some unused util/core classes. Change-Id: Ic7ac76777023a8b94a5ddf2f90caf0bf48d1f60c
Diffstat (limited to 'samples/VoicemailProviderDemo')
-rw-r--r--samples/VoicemailProviderDemo/AndroidManifest.xml6
-rw-r--r--samples/VoicemailProviderDemo/src/com/android/providers/voicemail/api/VoicemailProvider.java84
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/provider/VoicemailContract.java155
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/AddVoicemailActivity.java3
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/Voicemail.java25
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailFilterFactory.java66
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailImpl.java24
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailIntentUtils.java64
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailPayload.java26
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailPayloadImpl.java40
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelper.java8
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelpers.java85
-rw-r--r--samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/utils/DbQueryUtils.java9
13 files changed, 266 insertions, 329 deletions
diff --git a/samples/VoicemailProviderDemo/AndroidManifest.xml b/samples/VoicemailProviderDemo/AndroidManifest.xml
index 7dd0a0c31..e1a34047d 100644
--- a/samples/VoicemailProviderDemo/AndroidManifest.xml
+++ b/samples/VoicemailProviderDemo/AndroidManifest.xml
@@ -23,10 +23,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1" android:versionName="1.0" package="com.example.android.voicemail">
- <uses-sdk android:minSdkVersion="9" />
- <uses-sdk android:targetSdkVersion="9" />
+ <uses-sdk android:minSdkVersion="13"
+ android:targetSdkVersion="13" />
- <uses-permission android:name="com.android.providers.voicemail.permission.READ_WRITE_OWN_VOICEMAIL" />
+ <uses-permission android:name="com.android.voicemail.permission.READ_WRITE_OWN_VOICEMAIL" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
diff --git a/samples/VoicemailProviderDemo/src/com/android/providers/voicemail/api/VoicemailProvider.java b/samples/VoicemailProviderDemo/src/com/android/providers/voicemail/api/VoicemailProvider.java
deleted file mode 100644
index 4d8876f00..000000000
--- a/samples/VoicemailProviderDemo/src/com/android/providers/voicemail/api/VoicemailProvider.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.providers.voicemail.api;
-
-import android.content.Intent;
-import android.net.Uri;
-
-/**
- * Defines the constants needed to access and interact with the voicemail content provider.
- */
-public class VoicemailProvider {
- /** The authority used by the voicemail provider. */
- public static final String AUTHORITY =
- "com.android.providers.voicemail";
-
- /** The main URI exposed by the service. */
- public static final Uri CONTENT_URI =
- Uri.parse("content://" + AUTHORITY + "/voicemail");
- /** The URI to fetch an individual voicemail. */
- public static final Uri CONTENT_URI_ID_QUERY =
- Uri.parse("content://" + AUTHORITY + "/voicemail/");
- /** The URI to fetch all voicemails from a given provider. */
- public static final Uri CONTENT_URI_PROVIDER_QUERY =
- Uri.parse("content://" + AUTHORITY + "/voicemail/provider/");
- /** The URI to fetch an individual voicemail from a given provider. */
- public static final Uri CONTENT_URI_PROVIDER_ID_QUERY =
- Uri.parse("content://" + AUTHORITY + "/voicemail/provider/");
-
- /** Broadcast intent when a new voicemail record is inserted. */
- public static final String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL";
- /**
- * Extra included in {@value Intent#ACTION_PROVIDER_CHANGED} and {@value #ACTION_NEW_VOICEMAIL}
- * broadcast intents to indicate the package that caused the change in content provider.
- * <p>
- * Receivers of the broadcast can use this field to determine if this is a self change.
- */
- public static final String EXTRA_CHANGED_BY =
- "com.android.providers.voicemail.changed_by";
-
- /** The different tables defined by the content provider. */
- public static final class Tables {
- /** The table containing voicemail information. */
- public static final class Voicemails {
- public static final String NAME = "voicemails";
-
- /** The mime type for a collection of voicemails. */
- public static final String DIR_TYPE =
- "vnd.android.cursor.dir/voicemails";
-
- /** The different columns contained within the voicemail table. */
- public static final class Columns {
- public static final String _ID = "_id";
- public static final String _DATA = "_data";
- public static final String _DATA_FILE_EXISTS = "_data_file_exists";
- public static final String NUMBER = "number";
- public static final String DATE = "date";
- public static final String DURATION = "duration";
- public static final String PROVIDER = "provider";
- public static final String PROVIDER_DATA = "provider_data";
- public static final String DATA_MIME_TYPE = "data_mime_type";
- public static final String READ_STATUS = "read_status";
- /**
- * Current mailbox state of the message.
- * <p>
- * Legal values: 0(Inbox)/1(Deleted)/2(Undeleted).
- */
- public static final String STATE = "state";
- }
- }
- }
-}
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/provider/VoicemailContract.java b/samples/VoicemailProviderDemo/src/com/example/android/provider/VoicemailContract.java
new file mode 100644
index 000000000..b1d736176
--- /dev/null
+++ b/samples/VoicemailProviderDemo/src/com/example/android/provider/VoicemailContract.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.example.android.provider;
+
+// This is a COPY of the voicemail provider contract file checked in at
+// framework/base/core/java/android/provider. The API is currently hidden so
+// it is not available through the SDK and hence is not available to the sample
+// code.
+// TODO: get rid of this copy once the voicemail provider API is opened ups.
+
+import android.content.Intent;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.provider.BaseColumns;
+import android.provider.CallLog.Calls;
+
+/**
+ * The contract between the voicemail provider and applications. Contains
+ * definitions for the supported URIs and columns.
+ *
+ * <P>Voicemails are inserted by what is called as a "voicemail source"
+ * application, which is responsible for syncing voicemail data between a remote
+ * server and the local voicemail content provider. "voicemail source"
+ * application should use the source specific {@link #CONTENT_URI_SOURCE} URI
+ * to insert and retrieve voicemails.
+ *
+ * <P>In addition to the {@link ContentObserver} notifications the voicemail
+ * provider also generates broadcast intents to notify change for applications
+ * that are not active and therefore cannot listen to ContentObserver
+ * notifications. Broadcast intents with following actions are generated:
+ * <ul>
+ * <li> {@link #ACTION_NEW_VOICEMAIL} is generated for each new voicemail
+ * inserted.
+ * </li>
+ * <li> {@link Intent#ACTION_PROVIDER_CHANGED} is generated for any change
+ * made into the database, including new voicemail.
+ * </li>
+ * </ul>
+ * @hide
+ */
+// TODO: unhide when the API is approved by android-api-council
+public class VoicemailContract {
+ /** Not instantiable. */
+ private VoicemailContract() {
+ }
+
+ /** The authority used by the voicemail provider. */
+ public static final String AUTHORITY = "com.android.voicemail";
+
+ /** URI to insert/retrieve all voicemails. */
+ public static final Uri CONTENT_URI =
+ Uri.parse("content://" + AUTHORITY + "/voicemail");
+ /** URI to insert/retrieve voicemails by a given voicemail source. */
+ public static final Uri CONTENT_URI_SOURCE =
+ Uri.parse("content://" + AUTHORITY + "/voicemail/source/");
+
+ // TODO: Move ACTION_NEW_VOICEMAIL to the Intent class.
+ /** Broadcast intent when a new voicemail record is inserted. */
+ public static final String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL";
+ /**
+ * Extra included in {@value Intent#ACTION_PROVIDER_CHANGED} and
+ * {@value #ACTION_NEW_VOICEMAIL} broadcast intents to indicate the package
+ * that caused the change in content provider.
+ * <p>Receivers of the broadcast can use this field to determine if this is
+ * a self change.
+ */
+ public static final String EXTRA_CHANGED_BY = "com.android.voicemail.extra.CHANGED_BY";
+
+ /** The mime type for a collection of voicemails. */
+ public static final String DIR_TYPE =
+ "vnd.android.cursor.dir/voicemails";
+
+ public static final class Voicemails implements BaseColumns {
+ /** Not instantiable. */
+ private Voicemails() {
+ }
+
+ /**
+ * Phone number of the voicemail sender.
+ * <P>Type: TEXT</P>
+ */
+ public static final String NUMBER = Calls.NUMBER;
+ /**
+ * The date the voicemail was sent, in milliseconds since the epoch
+ * <P>Type: INTEGER (long)</P>
+ */
+ public static final String DATE = Calls.DATE;
+ /**
+ * The duration of the voicemail in seconds.
+ * <P>Type: INTEGER (long)</P>
+ */
+ public static final String DURATION = Calls.DURATION;
+ /**
+ * Whether this is a new voicemail (i.e. has not been heard).
+ * <P>Type: INTEGER (boolean)</P>
+ */
+ public static final String NEW = Calls.NEW;
+ /**
+ * The mail box state of the voicemail.
+ * <P> Possible values: {@link #STATE_INBOX}, {@link #STATE_DELETED},
+ * {@link #STATE_UNDELETED}.
+ * <P>Type: INTEGER</P>
+ */
+ public static final String STATE = "state";
+ /** Value of {@link #STATE} when the voicemail is in inbox. */
+ public static int STATE_INBOX = 0;
+ /** Value of {@link #STATE} when the voicemail has been marked as deleted. */
+ public static int STATE_DELETED = 1;
+ /** Value of {@link #STATE} when the voicemail has marked as undeleted. */
+ public static int STATE_UNDELETED = 2;
+ /**
+ * Package name of the source application that inserted the voicemail.
+ * <P>Type: TEXT</P>
+ */
+ public static final String SOURCE_PACKAGE = "source_package";
+ /**
+ * Application-specific data available to the source application that
+ * inserted the voicemail. This is typically used to store the source
+ * specific message id to identify this voicemail on the remote
+ * voicemail server.
+ * <P>Type: TEXT</P>
+ * <P> Note that this is NOT the voicemail media content data.
+ */
+ public static final String SOURCE_DATA = "source_data";
+ /**
+ * Whether the media content for this voicemail is available for
+ * consumption.
+ * <P>Type: INTEGER (boolean)</P>
+ */
+ public static final String HAS_CONTENT = "has_content";
+ /**
+ * MIME type of the media content for the voicemail.
+ * <P>Type: TEXT</P>
+ */
+ public static final String MIME_TYPE = "mime_type";
+ /**
+ * Path to the media content file. Internal only field.
+ * @hide
+ */
+ public static final String _DATA = "_data";
+ }
+}
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/AddVoicemailActivity.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/AddVoicemailActivity.java
index 2a6f8fed0..c2a34aee0 100644
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/AddVoicemailActivity.java
+++ b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/AddVoicemailActivity.java
@@ -130,7 +130,8 @@ public class AddVoicemailActivity extends Activity {
long duration = durationStr.length() != 0 ? Long.parseLong(durationStr) : 0;
return VoicemailImpl.createForInsertion(time, sender)
.setDuration(duration)
- .setSource(sourcePackageName)
+ .setSourcePackage(sourcePackageName)
+ .setMailbox(Voicemail.Mailbox.INBOX)
.build();
}
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/Voicemail.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/Voicemail.java
index f48122b38..17f03c7b3 100644
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/Voicemail.java
+++ b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/Voicemail.java
@@ -16,6 +16,8 @@
package com.example.android.voicemail.common.core;
+import com.example.android.provider.VoicemailContract;
+
import android.net.Uri;
/**
@@ -41,11 +43,11 @@ public interface Voicemail {
*/
public enum Mailbox {
/** After being fetched from the server, a message usually starts in the inbox. */
- INBOX(0),
+ INBOX(VoicemailContract.Voicemails.STATE_INBOX),
/** Indicates that a message has been deleted. */
- DELETED(1),
+ DELETED(VoicemailContract.Voicemails.STATE_DELETED),
/** Restored from having been deleted, distinct from being in the inbox. */
- UNDELETED(2);
+ UNDELETED(VoicemailContract.Voicemails.STATE_UNDELETED);
private final int mValue;
@@ -89,24 +91,21 @@ public interface Voicemail {
* Returns the package name of the source that added this voicemail, or null if this field is
* not set.
*/
- public String getSource();
+ public String getSourcePackage();
- public boolean hasSource();
+ public boolean hasSourcePackage();
/**
- * Returns the provider-specific data type stored with the voicemail, or null if this field is
- * not set.
+ * Returns the application-specific data type stored with the voicemail, or null if this field
+ * is not set.
* <p>
- * Provider data is typically used as an identifier to uniquely identify the voicemail against
+ * Source data is typically used as an identifier to uniquely identify the voicemail against
* the voicemail server. This is likely to be something like the IMAP UID, or some other
* server-generated identifying string.
*/
- // TODO:4: we should rename the provider data field to be called provider message id, which is
- // more explicit. I think we should also rename the get id method to get content id or something
- // like that.
- public String getProviderData();
+ public String getSourceData();
- public boolean hasProviderData();
+ public boolean hasSourceData();
/**
* Gets the Uri that can be used to refer to this voicemail, and to make it play.
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailFilterFactory.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailFilterFactory.java
index dbb73385c..b3eab917d 100644
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailFilterFactory.java
+++ b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailFilterFactory.java
@@ -16,38 +16,31 @@
package com.example.android.voicemail.common.core;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.DATE;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.DURATION;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.NUMBER;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.PROVIDER;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.PROVIDER_DATA;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.READ_STATUS;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.STATE;
import static com.example.android.voicemail.common.utils.DbQueryUtils.concatenateClausesWithAnd;
import static com.example.android.voicemail.common.utils.DbQueryUtils.concatenateClausesWithOr;
+import static com.example.android.voicemail.common.utils.DbQueryUtils.getEqualityClause;
import com.example.android.voicemail.common.core.Voicemail.Mailbox;
-import com.example.android.voicemail.common.utils.DbQueryUtils;
+import com.example.android.provider.VoicemailContract.Voicemails;
import android.text.TextUtils;
-import com.android.providers.voicemail.api.VoicemailProvider;
-
import java.util.ArrayList;
import java.util.List;
/**
* Factory class to create {@link VoicemailFilter} objects for various filtering needs.
* <p>
- * Factory methods like {@link #createWithMailbox(Mailbox)}, {@link #createWithReadStatus(boolean)} and
- * {@link #createWithMatchingFields(Voicemail)} can be used to create a voicemail filter that matches the
- * value of the specific field.
+ * Factory methods like {@link #createWithMailbox(Mailbox)}, {@link #createWithReadStatus(boolean)}
+ * and {@link #createWithMatchingFields(Voicemail)} can be used to create a voicemail filter that
+ * matches the value of the specific field.
* <p>
- * It it possible to combine multiple filters with OR or AND operation using the methods
- * {@link #createWithOrOf(VoicemailFilter...)} and {@link #createWithAndOf(VoicemailFilter...)} respectively.
+ * It is possible to combine multiple filters with OR or AND operation using the methods
+ * {@link #createWithOrOf(VoicemailFilter...)} and {@link #createWithAndOf(VoicemailFilter...)}
+ * respectively.
* <p>
- * {@link #createWithWhereClause(String)} can be used to create an arbitrary filter for a specific where
- * clause. Using this method requires the knowledge of the name of columns used in voicemail
+ * {@link #createWithWhereClause(String)} can be used to create an arbitrary filter for a specific
+ * where clause. Using this method requires the knowledge of the name of columns used in voicemail
* content provider database and is therefore less recommended.
*/
public class VoicemailFilterFactory {
@@ -60,8 +53,8 @@ public class VoicemailFilterFactory {
/**
* Creates a voicemail filter with the specified where clause. Use this method only if you know
- * and want to directly use the column names of the content provider. For most of the usages one
- * the other factory methods should be good enough.
+ * and want to directly use the column names of the content provider. For most of the usages
+ * one of the other factory methods should be good enough.
*/
public static VoicemailFilter createWithWhereClause(final String whereClause) {
return new VoicemailFilter() {
@@ -81,17 +74,20 @@ public class VoicemailFilterFactory {
if (fieldMatch == null) {
throw new IllegalArgumentException("Cannot create filter null fieldMatch");
}
- return VoicemailFilterFactory.createWithWhereClause(getWhereClauseForMatchingFields(fieldMatch));
+ return VoicemailFilterFactory.createWithWhereClause(
+ getWhereClauseForMatchingFields(fieldMatch));
}
/** Creates a voicemail filter with the specified mailbox state. */
public static VoicemailFilter createWithMailbox(Mailbox mailbox) {
- return createWithMatchingFields(VoicemailImpl.createEmptyBuilder().setMailbox(mailbox).build());
+ return createWithMatchingFields(
+ VoicemailImpl.createEmptyBuilder().setMailbox(mailbox).build());
}
/** Creates a voicemail filter with the specified read status. */
public static VoicemailFilter createWithReadStatus(boolean isRead) {
- return createWithMatchingFields(VoicemailImpl.createEmptyBuilder().setIsRead(isRead).build());
+ return createWithMatchingFields(
+ VoicemailImpl.createEmptyBuilder().setIsRead(isRead).build());
}
/** Combine multiple filters with OR clause. */
@@ -115,26 +111,29 @@ public class VoicemailFilterFactory {
private static String getWhereClauseForMatchingFields(Voicemail fieldMatch) {
List<String> clauses = new ArrayList<String>();
if (fieldMatch.hasRead()) {
- clauses.add(getEqualityClause(READ_STATUS, fieldMatch.isRead() ? "1" : "0"));
+ clauses.add(getEqualityClause(Voicemails.NEW, fieldMatch.isRead() ? "1" : "0"));
}
if (fieldMatch.hasMailbox()) {
- clauses.add(getEqualityClause(STATE,
+ clauses.add(getEqualityClause(Voicemails.STATE,
Integer.toString(fieldMatch.getMailbox().getValue())));
}
if (fieldMatch.hasNumber()) {
- clauses.add(getEqualityClause(NUMBER, fieldMatch.getNumber()));
+ clauses.add(getEqualityClause(Voicemails.NUMBER, fieldMatch.getNumber()));
}
- if (fieldMatch.hasSource()) {
- clauses.add(getEqualityClause(PROVIDER, fieldMatch.getSource()));
+ if (fieldMatch.hasSourcePackage()) {
+ clauses.add(getEqualityClause(Voicemails.SOURCE_PACKAGE,
+ fieldMatch.getSourcePackage()));
}
- if (fieldMatch.hasProviderData()) {
- clauses.add(getEqualityClause(PROVIDER_DATA, fieldMatch.getProviderData()));
+ if (fieldMatch.hasSourceData()) {
+ clauses.add(getEqualityClause(Voicemails.SOURCE_DATA, fieldMatch.getSourceData()));
}
if (fieldMatch.hasDuration()) {
- clauses.add(getEqualityClause(DURATION, Long.toString(fieldMatch.getDuration())));
+ clauses.add(getEqualityClause(Voicemails.DURATION,
+ Long.toString(fieldMatch.getDuration())));
}
if (fieldMatch.hasTimestampMillis()) {
- clauses.add(getEqualityClause(DATE, Long.toString(fieldMatch.getTimestampMillis())));
+ clauses.add(getEqualityClause(Voicemails.DATE,
+ Long.toString(fieldMatch.getTimestampMillis())));
}
// Empty filter.
if (clauses.size() == 0) {
@@ -142,9 +141,4 @@ public class VoicemailFilterFactory {
}
return concatenateClausesWithAnd(clauses.toArray(new String[0]));
}
-
- private static String getEqualityClause(String field, String value) {
- return DbQueryUtils.getEqualityClause(VoicemailProvider.Tables.Voicemails.NAME, field,
- value);
- }
}
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailImpl.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailImpl.java
index 60f90696a..9e08b6838 100644
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailImpl.java
+++ b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailImpl.java
@@ -89,14 +89,16 @@ public final class VoicemailImpl implements Voicemail {
* Builder pattern for creating a {@link VoicemailImpl}.
* <p>
* All fields are optional, and can be set with the various {@code setXXX} methods.
+ * <p>
+ * This class is <b>not thread safe</b>
*/
public static class Builder {
private Long mBuilderTimestamp;
private String mBuilderNumber;
private Long mBuilderId;
private Long mBuilderDuration;
- private String mBuilderSource;
- private String mBuilderProviderData;
+ private String mBuilderSourcePackage;
+ private String mBuilderSourceData;
private Uri mBuilderUri;
private Voicemail.Mailbox mBuilderMailbox;
private Boolean mBuilderIsRead;
@@ -126,13 +128,13 @@ public final class VoicemailImpl implements Voicemail {
return this;
}
- public Builder setSource(String source) {
- mBuilderSource = source;
+ public Builder setSourcePackage(String sourcePackage) {
+ mBuilderSourcePackage = sourcePackage;
return this;
}
- public Builder setProviderData(String providerData) {
- mBuilderProviderData = providerData;
+ public Builder setSourceData(String sourceData) {
+ mBuilderSourceData = sourceData;
return this;
}
@@ -159,7 +161,7 @@ public final class VoicemailImpl implements Voicemail {
public VoicemailImpl build() {
return new VoicemailImpl(mBuilderTimestamp, mBuilderNumber, mBuilderId,
mBuilderDuration,
- mBuilderSource, mBuilderProviderData, mBuilderUri, mBuilderMailbox,
+ mBuilderSourcePackage, mBuilderSourceData, mBuilderUri, mBuilderMailbox,
mBuilderIsRead,
mBuilderHasContent);
}
@@ -206,22 +208,22 @@ public final class VoicemailImpl implements Voicemail {
}
@Override
- public String getSource() {
+ public String getSourcePackage() {
return mSource;
}
@Override
- public boolean hasSource() {
+ public boolean hasSourcePackage() {
return mSource != null;
}
@Override
- public String getProviderData() {
+ public String getSourceData() {
return mProviderData;
}
@Override
- public boolean hasProviderData() {
+ public boolean hasSourceData() {
return mProviderData != null;
}
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailIntentUtils.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailIntentUtils.java
deleted file mode 100644
index 82d971a15..000000000
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailIntentUtils.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.voicemail.common.core;
-
-import android.content.Intent;
-import android.os.Bundle;
-
-/**
- * Stores and retrieves relevant bits of voicemails in an Intent.
- */
-public class VoicemailIntentUtils {
- /** The String used when storing provider data in intents. */
- public static final String PROVIDER_DATA_KEY = VoicemailImpl.class.getName() + ".PROVIDER_DATA";
-
- // Private constructor, utility class.
- private VoicemailIntentUtils() {
- }
-
- /**
- * Stores the {@link Voicemail#getProviderData()} value into an intent.
- *
- * @see #extractIdentifierFromIntent(Intent)
- */
- public static void storeIdentifierInIntent(Intent intent, Voicemail message) {
- intent.putExtra(PROVIDER_DATA_KEY, message.getProviderData());
- }
-
- /**
- * Retrieves the {@link Voicemail#getProviderData()} from an intent.
- * <p>
- * Returns null if the Intent contains no such identifier, or has no extras.
- *
- * @see #storeIdentifierInIntent(Intent, Voicemail)
- */
- public static String extractIdentifierFromIntent(Intent intent) {
- Bundle extras = intent.getExtras();
- return (extras == null ? null : extras.getString(PROVIDER_DATA_KEY));
- }
-
- /**
- * Copies the extras stored by {@link #storeIdentifierInIntent(Intent, Voicemail)} between two
- * intents.
- */
- public static void copyExtrasBetween(Intent from, Intent to) {
- Bundle extras = from.getExtras();
- if (extras.containsKey(PROVIDER_DATA_KEY)) {
- to.putExtra(PROVIDER_DATA_KEY, extras.getString(PROVIDER_DATA_KEY));
- }
- }
-}
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailPayload.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailPayload.java
deleted file mode 100644
index 0e088a693..000000000
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailPayload.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.voicemail.common.core;
-
-/**
- * The payload for a voicemail, usually audio data.
- */
-public interface VoicemailPayload {
- public String getMimeType();
-
- public byte[] getBytes();
-}
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailPayloadImpl.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailPayloadImpl.java
deleted file mode 100644
index 3694b569b..000000000
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailPayloadImpl.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.voicemail.common.core;
-
-/**
- * Concrete implementation of {@link VoicemailPayload} interface.
- */
-public class VoicemailPayloadImpl implements VoicemailPayload {
- private final String mMimeType;
- private final byte[] mBytes;
-
- public VoicemailPayloadImpl(String mimeType, byte[] bytes) {
- mMimeType = mimeType;
- mBytes = bytes.clone();
- }
-
- @Override
- public byte[] getBytes() {
- return mBytes.clone();
- }
-
- @Override
- public String getMimeType() {
- return mMimeType;
- }
-}
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelper.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelper.java
index 72610a58c..d3ff51469 100644
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelper.java
+++ b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelper.java
@@ -16,9 +16,9 @@
package com.example.android.voicemail.common.core;
-import android.net.Uri;
+import com.example.android.provider.VoicemailContract;
-import com.android.providers.voicemail.api.VoicemailProvider;
+import android.net.Uri;
import java.io.IOException;
import java.io.OutputStream;
@@ -74,7 +74,7 @@ public interface VoicemailProviderHelper {
* It is expected that there be one such voicemail. Returns null if no such voicemail exists,
* and returns one chosen arbitrarily if more than one exists.
*/
- public Voicemail findVoicemailByProviderData(String providerData);
+ public Voicemail findVoicemailBySourceData(String providerData);
/**
* Returns the {@link Voicemail} corresponding to a given Uri. The uri must correspond to a
@@ -121,7 +121,7 @@ public interface VoicemailProviderHelper {
*
* @param filter The filter to apply while retrieving voicemails.
* @param sortColumn The column to sort by. Must be one of the values defined in
- * {@link VoicemailProvider.Tables.Voicemails.Columns}.
+ * {@link VoicemailContract.Voicemails}.
* @param sortOrder Order to sort by
* @return the list of voicemails, sorted by the requested DB column in specified sort order.
*/
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelpers.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelpers.java
index eda9b5498..cbcf86bc3 100644
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelpers.java
+++ b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/core/VoicemailProviderHelpers.java
@@ -16,18 +16,8 @@
package com.example.android.voicemail.common.core;
-import static com.android.providers.voicemail.api.VoicemailProvider.CONTENT_URI_PROVIDER_ID_QUERY;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.DATA_MIME_TYPE;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.DATE;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.DURATION;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.NUMBER;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.PROVIDER;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.PROVIDER_DATA;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.READ_STATUS;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns.STATE;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns._DATA_FILE_EXISTS;
-import static com.android.providers.voicemail.api.VoicemailProvider.Tables.Voicemails.Columns._ID;
-
+import com.example.android.provider.VoicemailContract;
+import com.example.android.provider.VoicemailContract.Voicemails;
import com.example.android.voicemail.common.logging.Logger;
import com.example.android.voicemail.common.utils.CloseUtils;
import com.example.android.voicemail.common.utils.DbQueryUtils;
@@ -39,8 +29,6 @@ import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
-import com.android.providers.voicemail.api.VoicemailProvider;
-
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
@@ -54,8 +42,15 @@ public final class VoicemailProviderHelpers implements VoicemailProviderHelper {
/** Full projection on the voicemail table, giving us all the columns. */
private static final String[] FULL_PROJECTION = new String[] {
- _ID, _DATA_FILE_EXISTS, NUMBER, DURATION, DATE, PROVIDER, PROVIDER_DATA, READ_STATUS,
- STATE
+ Voicemails._ID,
+ Voicemails.HAS_CONTENT,
+ Voicemails.NUMBER,
+ Voicemails.DURATION,
+ Voicemails.DATE,
+ Voicemails.SOURCE_PACKAGE,
+ Voicemails.SOURCE_DATA,
+ Voicemails.NEW,
+ Voicemails.STATE
};
private final ContentResolver mContentResolver;
@@ -81,7 +76,7 @@ public final class VoicemailProviderHelpers implements VoicemailProviderHelper {
* <code>com.android.providers.voicemail.permission.READ_WRITE_OWN_VOICEMAIL</code>.
*/
public static VoicemailProviderHelper createFullVoicemailProvider(Context context) {
- return new VoicemailProviderHelpers(VoicemailProvider.CONTENT_URI,
+ return new VoicemailProviderHelpers(VoicemailContract.CONTENT_URI,
context.getContentResolver());
}
@@ -93,7 +88,7 @@ public final class VoicemailProviderHelpers implements VoicemailProviderHelper {
* <code>com.android.providers.voicemail.permission.READ_WRITE_OWN_VOICEMAIL</code>.
*/
public static VoicemailProviderHelper createPackageScopedVoicemailProvider(Context context) {
- Uri providerUri = Uri.withAppendedPath(VoicemailProvider.CONTENT_URI_PROVIDER_QUERY,
+ Uri providerUri = Uri.withAppendedPath(VoicemailContract.CONTENT_URI_SOURCE,
context.getPackageName());
return new VoicemailProviderHelpers(providerUri, context.getContentResolver());
}
@@ -120,7 +115,7 @@ public final class VoicemailProviderHelpers implements VoicemailProviderHelper {
@Override
public OutputStream setVoicemailContent(Uri voicemailUri, String mimeType) throws IOException {
ContentValues values = new ContentValues();
- values.put(DATA_MIME_TYPE, mimeType);
+ values.put(Voicemails.MIME_TYPE, mimeType);
int updatedCount = mContentResolver.update(voicemailUri, values, null, null);
if (updatedCount != 1) {
throw new IOException("Updating voicemail should have updated 1 row, was: "
@@ -131,15 +126,14 @@ public final class VoicemailProviderHelpers implements VoicemailProviderHelper {
}
@Override
- public Voicemail findVoicemailByProviderData(String providerData) {
+ public Voicemail findVoicemailBySourceData(String sourceData) {
Cursor cursor = null;
try {
cursor = mContentResolver.query(mBaseUri, FULL_PROJECTION,
- DbQueryUtils.getEqualityClause(
- VoicemailProvider.Tables.Voicemails.NAME, PROVIDER_DATA, providerData),
+ DbQueryUtils.getEqualityClause(Voicemails.SOURCE_DATA, sourceData),
null, null);
if (cursor.getCount() != 1) {
- logger.w("Expected 1 voicemail matching providerData " + providerData + ", got " +
+ logger.w("Expected 1 voicemail matching sourceData " + sourceData + ", got " +
cursor.getCount());
return null;
}
@@ -244,23 +238,26 @@ public final class VoicemailProviderHelpers implements VoicemailProviderHelper {
}
private VoicemailImpl getVoicemailFromCursor(Cursor cursor) {
- long id = cursor.getLong(cursor.getColumnIndexOrThrow(_ID));
- String provider = cursor.getString(cursor.getColumnIndexOrThrow(PROVIDER));
+ long id = cursor.getLong(cursor.getColumnIndexOrThrow(Voicemails._ID));
+ String sourcePackage = cursor.getString(
+ cursor.getColumnIndexOrThrow(Voicemails.SOURCE_PACKAGE));
Uri voicemailUri = ContentUris.withAppendedId(
- Uri.withAppendedPath(CONTENT_URI_PROVIDER_ID_QUERY, provider), id);
+ Uri.withAppendedPath(VoicemailContract.CONTENT_URI_SOURCE, sourcePackage), id);
VoicemailImpl voicemail = VoicemailImpl
.createEmptyBuilder()
- .setTimestamp(cursor.getLong(cursor.getColumnIndexOrThrow(DATE)))
- .setNumber(cursor.getString(cursor.getColumnIndexOrThrow(NUMBER)))
+ .setTimestamp(cursor.getLong(cursor.getColumnIndexOrThrow(Voicemails.DATE)))
+ .setNumber(cursor.getString(cursor.getColumnIndexOrThrow(Voicemails.NUMBER)))
.setId(id)
- .setDuration(cursor.getLong(cursor.getColumnIndexOrThrow(DURATION)))
- .setSource(provider)
- .setProviderData(cursor.getString(cursor.getColumnIndexOrThrow(PROVIDER_DATA)))
+ .setDuration(cursor.getLong(cursor.getColumnIndexOrThrow(Voicemails.DURATION)))
+ .setSourcePackage(sourcePackage)
+ .setSourceData(cursor.getString(
+ cursor.getColumnIndexOrThrow(Voicemails.SOURCE_DATA)))
.setUri(voicemailUri)
- .setHasContent(cursor.getInt(cursor.getColumnIndexOrThrow(_DATA_FILE_EXISTS)) == 1)
- .setIsRead(cursor.getInt(cursor.getColumnIndexOrThrow(READ_STATUS)) == 1)
- .setMailbox(
- mapValueToMailBoxEnum(cursor.getInt(cursor.getColumnIndexOrThrow(STATE))))
+ .setHasContent(cursor.getInt(
+ cursor.getColumnIndexOrThrow(Voicemails.HAS_CONTENT)) == 1)
+ .setIsRead(cursor.getInt(cursor.getColumnIndexOrThrow(Voicemails.NEW)) == 1)
+ .setMailbox(mapValueToMailBoxEnum(cursor.getInt(
+ cursor.getColumnIndexOrThrow(Voicemails.STATE))))
.build();
return voicemail;
}
@@ -280,25 +277,25 @@ public final class VoicemailProviderHelpers implements VoicemailProviderHelper {
private ContentValues getContentValues(Voicemail voicemail) {
ContentValues contentValues = new ContentValues();
if (voicemail.hasTimestampMillis()) {
- contentValues.put(DATE, String.valueOf(voicemail.getTimestampMillis()));
+ contentValues.put(Voicemails.DATE, String.valueOf(voicemail.getTimestampMillis()));
}
if (voicemail.hasNumber()) {
- contentValues.put(NUMBER, voicemail.getNumber());
+ contentValues.put(Voicemails.NUMBER, voicemail.getNumber());
}
if (voicemail.hasDuration()) {
- contentValues.put(DURATION, String.valueOf(voicemail.getDuration()));
+ contentValues.put(Voicemails.DURATION, String.valueOf(voicemail.getDuration()));
}
- if (voicemail.hasSource()) {
- contentValues.put(PROVIDER, voicemail.getSource());
+ if (voicemail.hasSourcePackage()) {
+ contentValues.put(Voicemails.SOURCE_PACKAGE, voicemail.getSourcePackage());
}
- if (voicemail.hasProviderData()) {
- contentValues.put(PROVIDER_DATA, voicemail.getProviderData());
+ if (voicemail.hasSourceData()) {
+ contentValues.put(Voicemails.SOURCE_DATA, voicemail.getSourceData());
}
if (voicemail.hasRead()) {
- contentValues.put(READ_STATUS, voicemail.isRead() ? 1 : 0);
+ contentValues.put(Voicemails.NEW, voicemail.isRead() ? 1 : 0);
}
if (voicemail.hasMailbox()) {
- contentValues.put(STATE, voicemail.getMailbox().getValue());
+ contentValues.put(Voicemails.STATE, voicemail.getMailbox().getValue());
}
return contentValues;
}
diff --git a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/utils/DbQueryUtils.java b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/utils/DbQueryUtils.java
index 180563455..a80977096 100644
--- a/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/utils/DbQueryUtils.java
+++ b/samples/VoicemailProviderDemo/src/com/example/android/voicemail/common/utils/DbQueryUtils.java
@@ -27,11 +27,14 @@ public class DbQueryUtils {
private DbQueryUtils() {
}
- /** Returns a WHERE clause assert equality of a field to a value. */
+ /** Returns a WHERE clause assert equality of a field to a value for the specified table . */
public static String getEqualityClause(String table, String field, String value) {
+ return getEqualityClause(table + "." + field, value);
+ }
+
+ /** Returns a WHERE clause assert equality of a field to a value. */
+ public static String getEqualityClause(String field, String value) {
StringBuilder clause = new StringBuilder();
- clause.append(table);
- clause.append(".");
clause.append(field);
clause.append(" = ");
DatabaseUtils.appendEscapedSQLString(clause, value);