100e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee/*
200e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee * Copyright (C) 2011 The Android Open Source Project
300e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee *
400e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License");
500e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee * you may not use this file except in compliance with the License.
600e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee * You may obtain a copy of the License at
700e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee *
800e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee *      http://www.apache.org/licenses/LICENSE-2.0
900e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee *
1000e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee * Unless required by applicable law or agreed to in writing, software
1100e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS,
1200e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1300e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee * See the License for the specific language governing permissions and
1400e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee * limitations under the License
1500e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee */
161975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
171975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjeepackage com.android.providers.contacts;
181975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
191975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjeeimport android.content.ContentUris;
201975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjeeimport android.content.ContentValues;
2100e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjeeimport android.database.Cursor;
221975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjeeimport android.net.Uri;
23687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yenimport android.os.BatteryStats.Uid.Proc;
24eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjeeimport android.os.ParcelFileDescriptor;
2547fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Leeimport android.os.Process;
26687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yenimport android.provider.CallLog;
2700e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjeeimport android.provider.CallLog.Calls;
28975d52af754e6f05089fcd9f7066df05c290c3b7Debashish Chatterjeeimport android.provider.VoicemailContract;
299cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjeeimport android.provider.VoicemailContract.Status;
301975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjeeimport android.provider.VoicemailContract.Voicemails;
311975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjeeimport android.test.MoreAsserts;
329d84fd3de4464d8d19a8aa419682f75d0089c752Makoto Onukiimport android.test.suitebuilder.annotation.SmallTest;
331975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
3438210445730ee04c351c7cc1b3800cfe23e34325Makoto Onukiimport com.android.common.io.MoreCloseables;
3538210445730ee04c351c7cc1b3800cfe23e34325Makoto Onuki
369cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjeeimport java.io.FileNotFoundException;
37eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjeeimport java.io.IOException;
381975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjeeimport java.io.InputStream;
391975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjeeimport java.io.OutputStream;
4000e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjeeimport java.util.Arrays;
411975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjeeimport java.util.List;
421975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
431975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee/**
441975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee * Unit tests for {@link VoicemailContentProvider}.
451975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee *
461975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee * Run the test like this:
471975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee * <code>
481975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee * runtest -c com.android.providers.contacts.VoicemailProviderTest contactsprov
491975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee * </code>
501975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee */
5100e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee// TODO: Test that calltype and voicemail_uri are auto populated by the provider.
529d84fd3de4464d8d19a8aa419682f75d0089c752Makoto Onuki@SmallTest
53c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjeepublic class VoicemailProviderTest extends BaseVoicemailProviderTest {
5400e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    /** Fields specific to call_log provider that should not be exposed by voicemail provider. */
5500e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    private static final String[] CALLLOG_PROVIDER_SPECIFIC_COLUMNS = {
5600e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            Calls.CACHED_NAME,
5700e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            Calls.CACHED_NUMBER_LABEL,
5800e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            Calls.CACHED_NUMBER_TYPE,
5900e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            Calls.TYPE,
6000e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            Calls.VOICEMAIL_URI,
6100e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            Calls.COUNTRY_ISO
6200e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    };
6300e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    /** Total number of columns exposed by voicemail provider. */
6472ec7ff768c838bf4e69ffdcfb3976217610aba1mike dooley    private static final int NUM_VOICEMAIL_FIELDS = 24;
6500e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee
661975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    @Override
671975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    protected void setUp() throws Exception {
681975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        super.setUp();
691975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        setUpForOwnPermission();
70687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        addProvider(CallLogProviderTestable.class, CallLog.AUTHORITY);
711975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
721975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
739cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    /** Returns the appropriate /voicemail URI. */
749cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    private Uri voicemailUri() {
75e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee        return mUseSourceUri ?
76e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee                Voicemails.buildSourceUri(mActor.packageName) : Voicemails.CONTENT_URI;
771975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
781975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
799cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    /** Returns the appropriate /status URI. */
809cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    private Uri statusUri() {
819cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        return mUseSourceUri ?
829cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                Status.buildSourceUri(mActor.packageName) : Status.CONTENT_URI;
839cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    }
849cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
851975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    public void testInsert() throws Exception {
86687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        setTimeForTest(1000L);
87aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda        Uri uri = mResolver.insert(voicemailUri(), getTestVoicemailValues());
88aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda        // We create on purpose a new set of ContentValues here, because the code above modifies
89aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda        // the copy it gets.
90aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda        assertStoredValues(uri, getTestVoicemailValues());
91aeaba441ddb05dede8bd86291ca78f42d670d54cFlavio Lerda        assertSelection(uri, getTestVoicemailValues(), Voicemails._ID, ContentUris.parseId(uri));
921975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        assertEquals(1, countFilesInTestDirectory());
9352cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen
94687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        assertLastModified(uri, 1000);
951975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
961975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
975c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen    public void testInsertReadMessageIsNotNew() throws Exception {
985c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        ContentValues values = getTestReadVoicemailValues();
995c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        Uri uri = mResolver.insert(voicemailUri(), values);
1005c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        String[] projection = {Voicemails.NUMBER, Voicemails.DATE, Voicemails.DURATION,
1015c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen                Voicemails.TRANSCRIPTION, Voicemails.IS_READ, Voicemails.HAS_CONTENT,
1025c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen                Voicemails.SOURCE_DATA, Voicemails.STATE,
103c4b2bcdf4cb3a7d3eed268cc60340173f3749cb6Ta-wei Yen                Voicemails.BACKED_UP, Voicemails.RESTORED, Voicemails.ARCHIVED,
104c4b2bcdf4cb3a7d3eed268cc60340173f3749cb6Ta-wei Yen                Voicemails.IS_OMTP_VOICEMAIL
1055c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        };
1065c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        Cursor c = mResolver.query(uri, projection, Calls.NEW + "=0", null,
1075c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen                null);
1085c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        try {
1095c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen            assertEquals("Record count", 1, c.getCount());
1105c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen            c.moveToFirst();
1115c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen            assertEquals(1, countFilesInTestDirectory());
1125c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen            assertCursorValues(c, values);
1135c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        } catch (Error e) {
1145c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen            TestUtils.dumpCursor(c);
1155c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen            throw e;
1165c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        } finally {
1175c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen            c.close();
1185c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        }
1195c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen    }
1205c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen
1211975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    // Test to ensure that media content can be written and read back.
1221975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    public void testFileContent() throws Exception {
1231975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        Uri uri = insertVoicemail();
1241975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        OutputStream out = mResolver.openOutputStream(uri);
1251975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        byte[] outBuffer = {0x1, 0x2, 0x3, 0x4};
1261975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        out.write(outBuffer);
1271975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        out.flush();
1281975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        out.close();
1291975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        InputStream in = mResolver.openInputStream(uri);
1301975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        byte[] inBuffer = new byte[4];
1311975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        int numBytesRead = in.read(inBuffer);
1321975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        assertEquals(numBytesRead, outBuffer.length);
1331975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        MoreAsserts.assertEquals(outBuffer, inBuffer);
1341975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        // No more data should be left.
1351975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        assertEquals(-1, in.read(inBuffer));
1361975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        in.close();
1371975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
1381975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
1391975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    public void testUpdate() {
140687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        setTimeForTest(1000L);
1411975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        Uri uri = insertVoicemail();
1421975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        ContentValues values = new ContentValues();
1431975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.NUMBER, "1-800-263-7643");
1441975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.DATE, 2000);
1451975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.DURATION, 40);
146d372af60001602a8c6cccf6258b514360c69b513Yorke Lee        values.put(Voicemails.TRANSCRIPTION, "Testing 123");
1471975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.STATE, 2);
1481975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.HAS_CONTENT, 1);
1491975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.SOURCE_DATA, "foo");
150dca8f302db8e661f13f3585bc67c53a5adf36617Nancy Chen        values.put(Voicemails.PHONE_ACCOUNT_COMPONENT_NAME, "dummy_name");
151dca8f302db8e661f13f3585bc67c53a5adf36617Nancy Chen        values.put(Voicemails.PHONE_ACCOUNT_ID, "dummy_account");
15227bedb2f415f7bf33f351c6b2575a0087577c077Ta-wei Yen        values.put(Voicemails.BACKED_UP, 1);
15327bedb2f415f7bf33f351c6b2575a0087577c077Ta-wei Yen        values.put(Voicemails.RESTORED, 1);
15427bedb2f415f7bf33f351c6b2575a0087577c077Ta-wei Yen        values.put(Voicemails.ARCHIVED, 1);
15527bedb2f415f7bf33f351c6b2575a0087577c077Ta-wei Yen        values.put(Voicemails.IS_OMTP_VOICEMAIL, 1);
1561975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        int count = mResolver.update(uri, values, null, null);
1571975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        assertEquals(1, count);
1581975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        assertStoredValues(uri, values);
159687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        assertLastModified(uri, 1000);
1601975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
1611975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
1620f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen    public void testUpdateOwnPackageVoicemail_NotDirty() {
1630f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        final Uri uri = mResolver.insert(voicemailUri(), getTestVoicemailValues());
1640f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        mResolver.update(uri, new ContentValues(), null, null);
1650f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen
1660f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        // Updating a package's own voicemail should not make the voicemail dirty.
1670f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        ContentValues values = getTestVoicemailValues();
1680f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        values.put(Voicemails.DIRTY, "0");
1690f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        assertStoredValues(uri, values);
1700f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen    }
1710f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen
1720f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen    public void testUpdateOwnPackageVoicemail_RemovesDirtyStatus() {
1730f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        ContentValues values = getTestVoicemailValues();
1740f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        values.put(Voicemails.DIRTY, "1");
1750f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        final Uri uri = mResolver.insert(voicemailUri(), getTestVoicemailValues());
1760f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen
1770f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        mResolver.update(uri, new ContentValues(), null, null);
1780f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        // At this point, the voicemail should be set back to not dirty.
1790f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        ContentValues newValues = getTestVoicemailValues();
1800f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        newValues.put(Voicemails.DIRTY, "0");
1810f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        assertStoredValues(uri, newValues);
1820f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen    }
1830f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen
18447fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee    public void testDeleteOwnPackageVoicemail_DeletesRow() {
18547fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        setUpForFullPermission();
18647fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        final Uri ownVoicemail = insertVoicemail();
18747fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        assertEquals(1, getCount(voicemailUri(), null, null));
18847fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee
18947fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        mResolver.delete(ownVoicemail, null, null);
19047fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee
19147fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        assertEquals(0, getCount(ownVoicemail, null, null));
19247fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee    }
19347fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee
19447fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee    public void testDeleteOtherPackageVoicemail_SetsDirtyStatus() {
19547fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        setUpForFullPermission();
196687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        setTimeForTest(1000L);
19747fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        final Uri anotherVoicemail = insertVoicemailForSourcePackage("another-package");
19847fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        assertEquals(1, getCount(voicemailUri(), null, null));
19947fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee
20047fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        // Clear the mapping for our own UID so that this doesn't look like an internal transaction.
20147fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        mPackageManager.removePackage(Process.myUid());
20247fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        mResolver.delete(anotherVoicemail, null, null);
20347fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee
20447fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        ContentValues values = getTestVoicemailValues();
20547fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        values.put(Voicemails.DIRTY, "1");
20647fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        values.put(Voicemails.DELETED, "1");
20747fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee
20847fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        assertEquals(1, getCount(anotherVoicemail, null, null));
20947fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        assertStoredValues(anotherVoicemail, values);
210687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        assertLastModified(anotherVoicemail, 1000);
21147fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee    }
21247fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee
2131975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    public void testDelete() {
2141975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        Uri uri = insertVoicemail();
2159cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        int count = mResolver.delete(voicemailUri(), Voicemails._ID + "="
2161975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee                + ContentUris.parseId(uri), null);
2171975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        assertEquals(1, count);
2181975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        assertEquals(0, getCount(uri, null, null));
2191975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
2201975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
221687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen    public void testUpdateAfterDelete_lastModifiedNotChanged() {
222687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        setUpForFullPermission();
223687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        setTimeForTest(1000L);
224687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        final Uri anotherVoicemail = insertVoicemailForSourcePackage("another-package");
225687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        assertEquals(1, getCount(voicemailUri(), null, null));
226687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen
227687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        // Clear the mapping for our own UID so that this doesn't look like an internal transaction.
228687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        mPackageManager.removePackage(Process.myUid());
229687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        mResolver.delete(anotherVoicemail, null, null);
230687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        assertLastModified(anotherVoicemail, 1000);
231687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen
232687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        mPackageManager.addPackage(Process.myUid(), mActor.packageName);
233687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        setTimeForTest(2000L);
234687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        mResolver.update(anotherVoicemail, new ContentValues(), null, null);
235687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        assertLastModified(anotherVoicemail, 1000);
236687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen
237687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        setTimeForTest(3000L);
238687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        ContentValues values = new ContentValues();
239687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        values.put(Voicemails.DELETED, "0");
240687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        mResolver.update(anotherVoicemail, values, null, null);
241687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen        assertLastModified(anotherVoicemail, 3000);
242687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen    }
243687bef960a8309410ee1ba0da06a012914bef88eTa-wei Yen
244c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    public void testGetType_ItemUri() throws Exception {
245c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        // Random item uri.
246c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        assertEquals(Voicemails.ITEM_TYPE,
247c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee                mResolver.getType(ContentUris.withAppendedId(Voicemails.CONTENT_URI, 100)));
248c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee        // Item uri of an inserted voicemail.
2499cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        ContentValues values = getTestVoicemailValues();
2504b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        values.put(Voicemails.MIME_TYPE, "foo/bar");
251d558ccc921460ac382850a8e6e2e668f3a2b9b26Debashish Chatterjee        Uri uri = mResolver.insert(voicemailUri(), values);
252d558ccc921460ac382850a8e6e2e668f3a2b9b26Debashish Chatterjee        assertEquals(Voicemails.ITEM_TYPE, mResolver.getType(uri));
253c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    }
2544b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee
255c6eb4fe44502116f834fadcc54214b3fa93ff564Debashish Chatterjee    public void testGetType_DirUri() throws Exception {
2564b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        assertEquals(Voicemails.DIR_TYPE, mResolver.getType(Voicemails.CONTENT_URI));
2574b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        assertEquals(Voicemails.DIR_TYPE, mResolver.getType(Voicemails.buildSourceUri("foo")));
2584b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee    }
2594b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee
2604b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee    // Test to ensure that without full permission it is not possible to use the base uri (i.e. with
2614b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee    // no package URI specified).
2624b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee    public void testMustUsePackageUriWithoutFullPermission() {
2634b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        setUpForOwnPermission();
2644b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
2654b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            @Override
2664b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            public void run() {
2679cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                mResolver.insert(Voicemails.CONTENT_URI, getTestVoicemailValues());
2684b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            }
2694b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        });
2704b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee
2714b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
2724b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            @Override
2734b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            public void run() {
2749cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                mResolver.update(Voicemails.CONTENT_URI, getTestVoicemailValues(), null, null);
2754b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            }
2764b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        });
2774b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee
2784b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
2794b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            @Override
2804b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            public void run() {
2814b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee                mResolver.query(Voicemails.CONTENT_URI, null, null, null, null);
2824b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            }
2834b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        });
2844b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee
2854b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
2864b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            @Override
2874b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            public void run() {
2884b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee                mResolver.delete(Voicemails.CONTENT_URI, null, null);
2894b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee            }
2904b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee        });
2914b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee    }
2924b571ba0de4fac4ff9d2a4277032b8c6548fdbfaDebashish Chatterjee
2931975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    public void testPermissions_InsertAndQuery() {
2941975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        setUpForFullPermission();
2951975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        // Insert two records - one each with own and another package.
2961975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        insertVoicemail();
2971975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        insertVoicemailForSourcePackage("another-package");
2989cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertEquals(2, getCount(voicemailUri(), null, null));
2991975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
3001975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        // Now give away full permission and check that only 1 message is accessible.
3011975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        setUpForOwnPermission();
3029cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertEquals(1, getCount(voicemailUri(), null, null));
3031975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
3041975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        // Once again try to insert message for another package. This time
3051975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        // it should fail.
3061975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
3071975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            @Override
3081975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            public void run() {
3091975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee                insertVoicemailForSourcePackage("another-package");
3101975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            }
3111975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        });
312ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
313ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        setUpForNoPermission();
314ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        mUseSourceUri = false;
315ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        // With the READ_ALL_VOICEMAIL permission, we should now be able to read all voicemails
3162ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee        mActor.addPermissions(READ_VOICEMAIL_PERMISSION);
317ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        assertEquals(2, getCount(voicemailUri(), null, null));
318ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
319ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        // An insert for another package should still fail
320ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
321ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee            @Override
322ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee            public void run() {
323ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee                insertVoicemailForSourcePackage("another-package");
324ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee            }
325ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        });
3261975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
3271975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
3281975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    public void testPermissions_UpdateAndDelete() {
3291975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        setUpForFullPermission();
3301975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        // Insert two records - one each with own and another package.
3311975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        final Uri ownVoicemail = insertVoicemail();
3321975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        final Uri anotherVoicemail = insertVoicemailForSourcePackage("another-package");
3339cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertEquals(2, getCount(voicemailUri(), null, null));
3341975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
3351975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        // Now give away full permission and check that we can update and delete only
3361975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        // the own voicemail.
3371975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        setUpForOwnPermission();
338e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee        mResolver.update(withSourcePackageParam(ownVoicemail),
3399cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                getTestVoicemailValues(), null, null);
340e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee        mResolver.delete(withSourcePackageParam(ownVoicemail), null, null);
3411975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
3421975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        // However, attempting to update or delete another-package's voicemail should fail.
3431975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
3441975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            @Override
3451975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            public void run() {
3461975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee                mResolver.update(anotherVoicemail, null, null, null);
3471975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            }
3481975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        });
3491975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
3501975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            @Override
3511975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            public void run() {
3521975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee                mResolver.delete(anotherVoicemail, null, null);
3531975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            }
3541975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        });
355ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
3560f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen        // If we have the manage voicemail permission, we should be able to both update voicemails
35747fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        // from all packages.
358ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        setUpForNoPermission();
3592ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee        mActor.addPermissions(WRITE_VOICEMAIL_PERMISSION);
360ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        mResolver.update(anotherVoicemail, getTestVoicemailValues(), null, null);
361ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
362ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        // Now add the read voicemail permission temporarily to verify that the update actually
363ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        // worked
3642ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee        mActor.addPermissions(READ_VOICEMAIL_PERMISSION);
365ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        assertStoredValues(anotherVoicemail, getTestVoicemailValues());
3662ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee        mActor.removePermissions(READ_VOICEMAIL_PERMISSION);
367ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
368ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        mResolver.delete(anotherVoicemail, null, null);
369ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
37047fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        // Now add the read voicemail permission temporarily to verify that the voicemail is
37147fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        // deleted.
3722ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee        mActor.addPermissions(READ_VOICEMAIL_PERMISSION);
3730f74e8600ad744f2e4ba9c6a4cdadf5da5a20e83Nancy Chen
37447fc56dd40613fae565d0c4d630f5f0b5fc310ffYorke Lee        assertEquals(0, getCount(anotherVoicemail, null, null));
3751975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
3761975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
377e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee    private Uri withSourcePackageParam(Uri uri) {
378e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee        return uri.buildUpon()
379e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee            .appendQueryParameter(VoicemailContract.PARAM_KEY_SOURCE_PACKAGE, mActor.packageName)
380e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee            .build();
381e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee    }
382e36e13b9e92759bb861a10ff22195853359c267dDebashish Chatterjee
383eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    public void testUriPermissions() {
384eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        setUpForFullPermission();
385eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        final Uri uri1 = insertVoicemail();
386eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        final Uri uri2 = insertVoicemail();
387eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        // Give away all permissions before querying. Access to both uris should be denied.
388eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        setUpForNoPermission();
389eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        checkHasNoAccessToUri(uri1);
390eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        checkHasNoAccessToUri(uri2);
391eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee
392eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        // Just grant permission to uri1. uri1 should pass but uri2 should still fail.
393eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        mActor.addUriPermissions(uri1);
394eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        checkHasReadOnlyAccessToUri(uri1);
395eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        checkHasNoAccessToUri(uri2);
396eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee
397eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        // Cleanup.
398eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        mActor.removeUriPermissions(uri1);
399eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    }
400eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee
401ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee    /*
402ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee     * Checks that the READ_ALL_VOICEMAIL permission provides read access to a uri.
403ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee     */
404ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee    public void testUriPermissions_ReadAccess() {
405ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        setUpForFullPermission();
406ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        final Uri uri1 = insertVoicemail();
407ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        // Give away all permissions before querying. Access should be denied.
408ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        setUpForNoPermission();
409ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        mUseSourceUri = false;
410ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        checkHasNoAccessToUri(uri1);
411ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
4122ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee        mActor.addPermissions(READ_VOICEMAIL_PERMISSION);
413ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        checkHasReadAccessToUri(uri1);
414ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee    }
415ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
416ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee    /*
417ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee     * Checks that the MANAGE_VOICEMAIL permission provides write access to a uri.
418ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee     */
419ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee    public void testUriPermissions_WriteAccess() {
420ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        setUpForFullPermission();
421ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        final Uri uri1 = insertVoicemail();
422ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        // Give away all permissions before querying. Access should be denied.
423ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        setUpForNoPermission();
424ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        checkHasNoAccessToUri(uri1);
425ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
4262ad39edbd856f3ea1177788aff7e653e593781ebYorke Lee        mActor.addPermissions(WRITE_VOICEMAIL_PERMISSION);
427ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        checkHasUpdateAndDeleteAccessToUri(uri1);
428ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee    }
429ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
430eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    private void checkHasNoAccessToUri(final Uri uri) {
431eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        checkHasNoReadAccessToUri(uri);
432eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        checkHasNoWriteAccessToUri(uri);
433eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    }
434eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee
435eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    private void checkHasReadOnlyAccessToUri(final Uri uri) {
436eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        checkHasReadAccessToUri(uri);
437eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        checkHasNoWriteAccessToUri(uri);
438eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    }
439eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee
440eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    private void checkHasReadAccessToUri(final Uri uri) {
441eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        Cursor cursor = null;
442eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        try {
443eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            cursor = mResolver.query(uri, null, null ,null, null);
444eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            assertEquals(1, cursor.getCount());
445eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            try {
446eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                ParcelFileDescriptor fd = mResolver.openFileDescriptor(uri, "r");
447eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                assertNotNull(fd);
448eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                fd.close();
449eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            } catch (FileNotFoundException e) {
450eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                fail(e.getMessage());
451eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            } catch (IOException e) {
452eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                fail(e.getMessage());
453eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            }
454eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        } finally {
455eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            MoreCloseables.closeQuietly(cursor);
456eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        }
457eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    }
458eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee
459eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    private void checkHasNoReadAccessToUri(final Uri uri) {
460eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
461eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            @Override
462eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            public void run() {
46352cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen                mResolver.query(uri, null, null, null, null);
464eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            }
465eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        });
466eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
467eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            @Override
468eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            public void run() {
469eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                try {
470eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                    mResolver.openFileDescriptor(uri, "r");
471eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                } catch (FileNotFoundException e) {
472eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                    fail(e.getMessage());
473eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                }
474eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            }
475eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        });
476eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    }
477eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee
478ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee    private void checkHasUpdateAndDeleteAccessToUri(final Uri uri) {
479ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        mResolver.update(uri, getTestVoicemailValues(), null, null);
480ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee        mResolver.delete(uri, null, null);
481ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee    }
482ab2ec1d4316770e2ce8dc47dd1ae71430cd70e36Yorke Lee
483eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    private void checkHasNoWriteAccessToUri(final Uri uri) {
484eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
485eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            @Override
486eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            public void run() {
487eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                mResolver.update(uri, getTestVoicemailValues(), null, null);
488eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            }
489eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        });
490eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
491eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            @Override
492eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            public void run() {
493eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                mResolver.delete(uri, null, null);
494eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            }
495eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        });
496eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
497eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            @Override
498eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            public void run() {
499eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                try {
500eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                    mResolver.openFileDescriptor(uri, "w");
501eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                } catch (FileNotFoundException e) {
502eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                    fail(e.getMessage());
503eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                }
504eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            }
505eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        });
506eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
507eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            @Override
508eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            public void run() {
509eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                try {
510eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                    mResolver.openFileDescriptor(uri, "rw");
511eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                } catch (FileNotFoundException e) {
512eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                    fail(e.getMessage());
513eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee                }
514eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee            }
515eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee        });
516eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee    }
517eeffa7edb048e785ebc665c830dc84d87f174b07Debashish Chatterjee
5181975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    // Test to ensure that all operations fail when no voicemail permission is granted.
5191975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    public void testNoPermissions() {
5201975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        setUpForNoPermission();
5211975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
5221975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            @Override
5231975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            public void run() {
5249cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                mResolver.insert(voicemailUri(), getTestVoicemailValues());
5251975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            }
5261975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        });
5271975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
5281975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            @Override
5291975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            public void run() {
5309cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                mResolver.update(voicemailUri(), getTestVoicemailValues(), null, null);
5311975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            }
5321975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        });
5331975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
5341975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            @Override
5351975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            public void run() {
5369cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                mResolver.query(voicemailUri(), null, null, null, null);
5371975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            }
5381975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        });
5391975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
5401975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            @Override
5411975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            public void run() {
5429cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                mResolver.delete(voicemailUri(), null, null);
5431975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee            }
5441975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        });
5451975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
5461975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
54700e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    // Test to check that none of the call_log provider specific fields are
54800e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    // insertable through voicemail provider.
54900e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    public void testCannotAccessCallLogSpecificFields_Insert() {
55000e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        for (String callLogColumn : CALLLOG_PROVIDER_SPECIFIC_COLUMNS) {
5519cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            final ContentValues values = getTestVoicemailValues();
55200e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            values.put(callLogColumn, "foo");
55300e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            EvenMoreAsserts.assertThrows("Column: " + callLogColumn,
55400e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                    IllegalArgumentException.class, new Runnable() {
55500e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                    @Override
55600e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                    public void run() {
5579cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                        mResolver.insert(voicemailUri(), values);
55800e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                    }
55900e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                });
56000e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        }
56100e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    }
56200e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee
56300e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    // Test to check that none of the call_log provider specific fields are
56400e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    // exposed through voicemail provider query.
56500e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    public void testCannotAccessCallLogSpecificFields_Query() {
56600e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        // Query.
5679cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        Cursor cursor = mResolver.query(voicemailUri(), null, null, null, null);
56800e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        List<String> columnNames = Arrays.asList(cursor.getColumnNames());
56900e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        assertEquals(NUM_VOICEMAIL_FIELDS, columnNames.size());
57000e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        // None of the call_log provider specific columns should be present.
57100e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        for (String callLogColumn : CALLLOG_PROVIDER_SPECIFIC_COLUMNS) {
57200e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            assertFalse("Unexpected column: '" + callLogColumn + "' returned.",
57300e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                    columnNames.contains(callLogColumn));
57400e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        }
57500e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    }
57600e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee
57700e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    // Test to check that none of the call_log provider specific fields are
57800e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    // updatable through voicemail provider.
57900e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    public void testCannotAccessCallLogSpecificFields_Update() {
58000e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        for (String callLogColumn : CALLLOG_PROVIDER_SPECIFIC_COLUMNS) {
58100e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            final Uri insertedUri = insertVoicemail();
5829cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            final ContentValues values = getTestVoicemailValues();
58300e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            values.put(callLogColumn, "foo");
58400e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee            EvenMoreAsserts.assertThrows("Column: " + callLogColumn,
58500e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                    IllegalArgumentException.class, new Runnable() {
58600e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                    @Override
58700e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                    public void run() {
58800e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                        mResolver.update(insertedUri, values, null, null);
58900e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                    }
59000e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee                });
59100e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee        }
59200e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee    }
59300e7c94b70f4b477653534dbe559d1759d796157Debashish Chatterjee
5949cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    // Tests for voicemail status table.
5959cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
5969cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    public void testStatusInsert() throws Exception {
5979cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        ContentValues values = getTestStatusValues();
5989cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        Uri uri = mResolver.insert(statusUri(), values);
5999cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertStoredValues(uri, values);
6009cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertSelection(uri, values, Status._ID, ContentUris.parseId(uri));
6019cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    }
6029cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
6039cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    public void testStatusUpdate() throws Exception {
6049cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        Uri uri = insertTestStatusEntry();
6059cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        ContentValues values = getTestStatusValues();
6069cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.DATA_CHANNEL_STATE, Status.DATA_CHANNEL_STATE_NO_CONNECTION);
6079cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.NOTIFICATION_CHANNEL_STATE,
6089cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                Status.NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING);
60921c692d49ce7ad6f9414d46ac2410d3f2e4c4d20Ta-wei Yen        values.put(Status.SOURCE_TYPE,
61021c692d49ce7ad6f9414d46ac2410d3f2e4c4d20Ta-wei Yen                "vvm_type_test2");
6119cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        int count = mResolver.update(uri, values, null, null);
6129cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertEquals(1, count);
6139cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertStoredValues(uri, values);
6149cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    }
6159cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
616155ff44c5809da846b841011923b7e81dede303dTa-wei Yen    public void testStatusUpsert() throws Exception {
617155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        ContentValues values = getTestStatusValues();
618155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        mResolver.insert(statusUri(), values);
619155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        ContentValues values2 = new ContentValues();
620155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        values2.put(Status.CONFIGURATION_STATE, Status.CONFIGURATION_STATE_NOT_CONFIGURED);
621155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        values.put(Status.CONFIGURATION_STATE, Status.CONFIGURATION_STATE_NOT_CONFIGURED);
622155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        Uri uri = mResolver.insert(statusUri(), values2);
623155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        assertStoredValues(uri, values);
624155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        assertSelection(uri, values, Status._ID, ContentUris.parseId(uri));
625155ff44c5809da846b841011923b7e81dede303dTa-wei Yen    }
626155ff44c5809da846b841011923b7e81dede303dTa-wei Yen
6279cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    public void testStatusDelete() {
6289cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        Uri uri = insertTestStatusEntry();
6299cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        int count = mResolver.delete(statusUri(), Status._ID + "="
6309cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                + ContentUris.parseId(uri), null);
6319cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertEquals(1, count);
6329cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertEquals(0, getCount(uri, null, null));
6339cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    }
6349cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
63552cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen    public void testStatusQuotaInsert() {
63652cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        ContentValues values = new ContentValues();
63752cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        values.put(Status.SOURCE_PACKAGE, mActor.packageName);
63852cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        values.put(Status.QUOTA_OCCUPIED, 2);
63952cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        values.put(Status.QUOTA_TOTAL, 13);
64052cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        Uri uri = mResolver.insert(statusUri(), values);
64152cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        assertStoredValues(uri, values);
64252cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        assertSelection(uri, values, Status._ID, ContentUris.parseId(uri));
64352cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen    }
64452cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen
64552cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen    public void testStatusQuotaUpdate() {
64652cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        Uri uri = insertTestStatusEntry();
64752cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        ContentValues values = new ContentValues();
64852cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        values.put(Status.SOURCE_PACKAGE, mActor.packageName);
64952cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        values.put(Status.QUOTA_OCCUPIED, 2);
65052cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        values.put(Status.QUOTA_TOTAL, 13);
65152cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        int count = mResolver.update(uri, values, null, null);
65252cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        assertEquals(1, count);
65352cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen
65452cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        ContentValues refValues = getTestStatusValues();
65552cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        refValues.put(Status.QUOTA_OCCUPIED, 2);
65652cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        refValues.put(Status.QUOTA_TOTAL, 13);
65752cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen        assertStoredValues(uri, refValues);
65852cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen    }
65952cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen
660155ff44c5809da846b841011923b7e81dede303dTa-wei Yen    public void testStatusQuotaUpsert() {
661155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        Uri uri = insertTestStatusEntry();
662155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        ContentValues values = new ContentValues();
663155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        values.put(Status.SOURCE_PACKAGE, mActor.packageName);
664155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        values.put(Status.QUOTA_OCCUPIED, 2);
665155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        int count = mResolver.update(uri, values, null, null);
666155ff44c5809da846b841011923b7e81dede303dTa-wei Yen
667155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        ContentValues values2 = new ContentValues();
668155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        values2.put(Status.QUOTA_TOTAL, 13);
669155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        mResolver.insert(uri, values2);
670155ff44c5809da846b841011923b7e81dede303dTa-wei Yen
671155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        ContentValues refValues = getTestStatusValues();
672155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        refValues.put(Status.QUOTA_OCCUPIED, 2);
673155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        refValues.put(Status.QUOTA_TOTAL, 13);
674155ff44c5809da846b841011923b7e81dede303dTa-wei Yen        assertStoredValues(uri, refValues);
675155ff44c5809da846b841011923b7e81dede303dTa-wei Yen    }
676155ff44c5809da846b841011923b7e81dede303dTa-wei Yen
6779cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    public void testStatusGetType() throws Exception {
6789cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        // Item URI.
6799cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        Uri uri = insertTestStatusEntry();
6809cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertEquals(Status.ITEM_TYPE, mResolver.getType(uri));
6819cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
6829cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        // base URIs.
6839cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertEquals(Status.DIR_TYPE, mResolver.getType(Status.CONTENT_URI));
6849cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertEquals(Status.DIR_TYPE, mResolver.getType(Status.buildSourceUri("foo")));
6859cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    }
6869cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
6879cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    // Basic permission checks for the status table.
6889cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    public void testStatusPermissions() throws Exception {
6899cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        final ContentValues values = getTestStatusValues();
6909cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        // Inserting for another package should fail with any of the URIs.
6919cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.SOURCE_PACKAGE, "another.package");
6929cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
6939cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            @Override
6949cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            public void run() {
6959cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                mResolver.insert(Status.CONTENT_URI, values);
6969cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            }
6979cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        });
6989cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
6999cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            @Override
7009cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            public void run() {
7019cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                mResolver.insert(Status.buildSourceUri(mActor.packageName), values);
7029cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            }
7039cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        });
7049cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
7059cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        // But insertion with own package should succeed with the right uri.
7069cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.SOURCE_PACKAGE, mActor.packageName);
7079cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        final Uri uri = mResolver.insert(Status.buildSourceUri(mActor.packageName), values);
7089cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        assertNotNull(uri);
7099cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
7109cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        // Updating source_package should not work as well.
7119cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.SOURCE_PACKAGE, "another.package");
7129cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() {
7139cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            @Override
7149cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            public void run() {
7159cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                mResolver.update(uri, values, null, null);
7169cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            }
7179cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        });
7189cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    }
7199cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
7209cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    // File operation is not supported by /status URI.
7219cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    public void testStatusFileOperation() throws Exception {
7229cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        final Uri uri = insertTestStatusEntry();
7239cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        EvenMoreAsserts.assertThrows(UnsupportedOperationException.class, new Runnable() {
7249cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            @Override
7259cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            public void run() {
7269cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                try {
7279cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                    mResolver.openOutputStream(uri);
7289cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                } catch (FileNotFoundException e) {
7299cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                    fail("Unexpected exception " + e);
7309cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                }
7319cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            }
7329cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        });
7339cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
7349cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        EvenMoreAsserts.assertThrows(UnsupportedOperationException.class, new Runnable() {
7359cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            @Override
7369cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            public void run() {
7379cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                try {
7389cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                    mResolver.openInputStream(uri);
7399cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                } catch (FileNotFoundException e) {
7409cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                    fail("Unexpected exception " + e);
7419cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee                }
7429cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee            }
7439cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        });
7449cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    }
7459cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
7461975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    /**
7471975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee     * Inserts a voicemail record with no source package set. The content provider
7481975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee     * will detect source package.
7491975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee     */
7501975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    private Uri insertVoicemail() {
7519cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        return mResolver.insert(voicemailUri(), getTestVoicemailValues());
7521975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
7531975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
7541975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    /** Inserts a voicemail record for the specified source package. */
7551975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    private Uri insertVoicemailForSourcePackage(String sourcePackage) {
7569cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        ContentValues values = getTestVoicemailValues();
7571975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.SOURCE_PACKAGE, sourcePackage);
7589cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        return mResolver.insert(voicemailUri(), values);
7591975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
7601975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
7619cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    private ContentValues getTestVoicemailValues() {
7621975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        ContentValues values = new ContentValues();
7631975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.NUMBER, "1-800-4664-411");
7641975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.DATE, 1000);
7651975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.DURATION, 30);
766d372af60001602a8c6cccf6258b514360c69b513Yorke Lee        values.put(Voicemails.TRANSCRIPTION, "Testing 123");
767b2197b235e3d96e7f70c24d548b7dac52dab88d8Flavio Lerda        values.put(Voicemails.IS_READ, 0);
7681975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.HAS_CONTENT, 0);
7691975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.SOURCE_DATA, "1234");
7701975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        values.put(Voicemails.STATE, Voicemails.STATE_INBOX);
77127bedb2f415f7bf33f351c6b2575a0087577c077Ta-wei Yen        values.put(Voicemails.BACKED_UP, 0);
77227bedb2f415f7bf33f351c6b2575a0087577c077Ta-wei Yen        values.put(Voicemails.RESTORED, 0);
77327bedb2f415f7bf33f351c6b2575a0087577c077Ta-wei Yen        values.put(Voicemails.ARCHIVED, 0);
77427bedb2f415f7bf33f351c6b2575a0087577c077Ta-wei Yen        values.put(Voicemails.IS_OMTP_VOICEMAIL, 0);
7751975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee        return values;
7761975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee    }
7771975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee
7785c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen    private ContentValues getTestReadVoicemailValues() {
7795c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        ContentValues values = getTestVoicemailValues();
7805c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        values.put(Voicemails.IS_READ, 1);
7815c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen        return values;
7825c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen    }
7835c466282ff1ebecb37c93dcb6d6ccfc845330e65Nancy Chen
7849cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    private Uri insertTestStatusEntry() {
7859cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        return mResolver.insert(statusUri(), getTestStatusValues());
7869cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    }
7879cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee
7889cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    private ContentValues getTestStatusValues() {
7899cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        ContentValues values = new ContentValues();
7909cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.SOURCE_PACKAGE, mActor.packageName);
7919cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.VOICEMAIL_ACCESS_URI, "tel:901");
7929cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.SETTINGS_URI, "com.example.voicemail.source.SettingsActivity");
7939cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.CONFIGURATION_STATE, Status.CONFIGURATION_STATE_OK);
7949cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.DATA_CHANNEL_STATE, Status.DATA_CHANNEL_STATE_OK);
7959cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        values.put(Status.NOTIFICATION_CHANNEL_STATE, Status.NOTIFICATION_CHANNEL_STATE_OK);
79621c692d49ce7ad6f9414d46ac2410d3f2e4c4d20Ta-wei Yen        values.put(Status.SOURCE_TYPE, "vvm_type_test");
7979cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee        return values;
7989cf06e7bcb0be759f1c930412fd2e41eba4f5f03Debashish Chatterjee    }
79952cb1f8391fdf93ad90d675585a9c7e385e4a8d6Ta-wei Yen
8001975b56a3368b4b7684429ffa79e7b9dbc35b475Debashish Chatterjee}
801