194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/* 294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Copyright (C) 2011 The Android Open Source Project 394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * you may not use this file except in compliance with the License. 694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * You may obtain a copy of the License at 794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 1094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Unless required by applicable law or agreed to in writing, software 1194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 1294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * See the License for the specific language governing permissions and 1494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * limitations under the License. 1594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 1694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 1794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengpackage com.android.dialer.voicemail; 1894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 1994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.CONFIGURATION_STATE; 2094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.CONFIGURATION_STATE_CAN_BE_CONFIGURED; 2194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.CONFIGURATION_STATE_NOT_CONFIGURED; 2294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.DATA_CHANNEL_STATE; 2394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.DATA_CHANNEL_STATE_NO_CONNECTION; 2494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.DATA_CHANNEL_STATE_OK; 2594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE; 2694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING; 2794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION; 2894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport static android.provider.VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_OK; 2994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 3094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.ContentResolver; 3194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.ContentValues; 3294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.database.Cursor; 3394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.net.Uri; 3494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.provider.VoicemailContract.Status; 3594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.test.AndroidTestCase; 3694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 379554500572ba82fbd7adb0a1637206ef870ef09eChiao Chengimport com.android.dialer.R; 3894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage; 3994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 4094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport java.util.List; 4194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 4294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/** 4394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Unit tests for {@link VoicemailStatusHelperImpl}. 4494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 4594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengpublic class VoicemailStatusHelperImplTest extends AndroidTestCase { 4694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final String[] TEST_PACKAGES = new String[] { 4794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng "com.test.package1", 4894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng "com.test.package2" 4994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng }; 5094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 5194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final Uri TEST_SETTINGS_URI = Uri.parse("http://www.visual.voicemail.setup"); 5294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final Uri TEST_VOICEMAIL_URI = Uri.parse("tel:901"); 5394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 5494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int ACTION_MSG_CALL_VOICEMAIL = 5594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng R.string.voicemail_status_action_call_server; 5694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int ACTION_MSG_CONFIGURE = R.string.voicemail_status_action_configure; 5794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 5894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int STATUS_MSG_NONE = -1; 5994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int STATUS_MSG_VOICEMAIL_NOT_AVAILABLE = 6094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng R.string.voicemail_status_voicemail_not_available; 6194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int STATUS_MSG_AUDIO_NOT_AVAIALABLE = 6294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng R.string.voicemail_status_audio_not_available; 6394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int STATUS_MSG_MESSAGE_WAITING = R.string.voicemail_status_messages_waiting; 6494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int STATUS_MSG_INVITE_FOR_CONFIGURATION = 6594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng R.string.voicemail_status_configure_voicemail; 6694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 6794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Object under test. 6894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private VoicemailStatusHelper mStatusHelper; 6994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 7094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 7194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected void setUp() throws Exception { 7294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng super.setUp(); 7394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mStatusHelper = new VoicemailStatusHelperImpl(); 7494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 7594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 7694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 7794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected void tearDown() throws Exception { 7894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (String sourcePackage : TEST_PACKAGES) { 7994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng deleteEntryForPackage(sourcePackage); 8094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 8194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Set member variables to null so that they are garbage collected across different runs 8294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // of the tests. 8394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mStatusHelper = null; 8494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng super.tearDown(); 8594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 8694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 8794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 8894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void testNoStatusEntries() { 8994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(0, getStatusMessages().size()); 9094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 9194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 9294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void testAllOK() { 9394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertEntryForPackage(TEST_PACKAGES[0], getAllOkStatusValues()); 9494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertEntryForPackage(TEST_PACKAGES[1], getAllOkStatusValues()); 9594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(0, getStatusMessages().size()); 9694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 9794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 9894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void testNotAllOKForOnePackage() { 9994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertEntryForPackage(TEST_PACKAGES[0], getAllOkStatusValues()); 10094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertEntryForPackage(TEST_PACKAGES[1], getAllOkStatusValues()); 10194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 10294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues values = new ContentValues(); 10394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Good data channel + no notification 10494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // action: call voicemail 10594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // msg: voicemail not available in call log page & none in call details page. 10694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_NO_CONNECTION); 10794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_OK); 10894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[1], values); 10994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE, 11094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng STATUS_MSG_NONE, ACTION_MSG_CALL_VOICEMAIL); 11194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 11294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Message waiting + good data channel - no action. 11394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING); 11494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_OK); 11594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[1], values); 11694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng checkNoMessages(TEST_PACKAGES[1], values); 11794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 11894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // No data channel + no notification 11994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // action: call voicemail 12094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // msg: voicemail not available in call log page & audio not available in call details page. 12194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_OK); 12294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION); 12394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[1], values); 12494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE, 12594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng STATUS_MSG_AUDIO_NOT_AVAIALABLE, ACTION_MSG_CALL_VOICEMAIL); 12694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 12794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // No data channel + Notification OK 12894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // action: call voicemail 12994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // msg: voicemail not available in call log page & audio not available in call details page. 13094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_NO_CONNECTION); 13194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION); 13294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[1], values); 13394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE, 13494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng STATUS_MSG_AUDIO_NOT_AVAIALABLE, ACTION_MSG_CALL_VOICEMAIL); 13594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 13694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // No data channel + Notification OK 13794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // action: call voicemail 13894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // msg: message waiting in call log page & audio not available in call details page. 13994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING); 14094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION); 14194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[1], values); 14294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_MESSAGE_WAITING, 14394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng STATUS_MSG_AUDIO_NOT_AVAIALABLE, ACTION_MSG_CALL_VOICEMAIL); 14494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 14594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Not configured. No user action, so no message. 14694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(CONFIGURATION_STATE, CONFIGURATION_STATE_NOT_CONFIGURED); 14794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[1], values); 14894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng checkNoMessages(TEST_PACKAGES[1], values); 14994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 15094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Can be configured - invite user for configure voicemail. 15194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(CONFIGURATION_STATE, CONFIGURATION_STATE_CAN_BE_CONFIGURED); 15294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[1], values); 15394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_INVITE_FOR_CONFIGURATION, 15494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng STATUS_MSG_NONE, ACTION_MSG_CONFIGURE, TEST_SETTINGS_URI); 15594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 15694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 15794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Test that priority of messages are handled well. 15894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void testMessageOrdering() { 15994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertEntryForPackage(TEST_PACKAGES[0], getAllOkStatusValues()); 16094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertEntryForPackage(TEST_PACKAGES[1], getAllOkStatusValues()); 16194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 16294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng final ContentValues valuesNoNotificationGoodDataChannel = new ContentValues(); 16394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng valuesNoNotificationGoodDataChannel.put(NOTIFICATION_CHANNEL_STATE, 16494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng NOTIFICATION_CHANNEL_STATE_NO_CONNECTION); 16594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng valuesNoNotificationGoodDataChannel.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_OK); 16694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 16794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng final ContentValues valuesNoNotificationNoDataChannel = new ContentValues(); 16894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng valuesNoNotificationNoDataChannel.put(NOTIFICATION_CHANNEL_STATE, 16994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng NOTIFICATION_CHANNEL_STATE_NO_CONNECTION); 17094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng valuesNoNotificationNoDataChannel.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION); 17194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 17294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Package1 with valuesNoNotificationGoodDataChannel and 17394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // package2 with valuesNoNotificationNoDataChannel. Package2 should be above. 17494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[0], valuesNoNotificationGoodDataChannel); 17594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[1], valuesNoNotificationNoDataChannel); 17694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng List<StatusMessage> messages = getStatusMessages(); 17794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(2, messages.size()); 17894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(TEST_PACKAGES[0], messages.get(1).sourcePackage); 17994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(TEST_PACKAGES[1], messages.get(0).sourcePackage); 18094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 18194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Now reverse the values - ordering should be reversed as well. 18294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[0], valuesNoNotificationNoDataChannel); 18394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(TEST_PACKAGES[1], valuesNoNotificationGoodDataChannel); 18494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng messages = getStatusMessages(); 18594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(2, messages.size()); 18694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(TEST_PACKAGES[0], messages.get(0).sourcePackage); 18794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(TEST_PACKAGES[1], messages.get(1).sourcePackage); 18894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 18994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 19094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Checks that the expected source status message is returned by VoicemailStatusHelper. */ 19194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void checkExpectedMessage(String sourcePackage, ContentValues values, 19294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng int expectedCallLogMsg, int expectedCallDetailsMsg, int expectedActionMsg, 19394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Uri expectedUri) { 19494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng List<StatusMessage> messages = getStatusMessages(); 19594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(1, messages.size()); 19694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng checkMessageMatches(messages.get(0), sourcePackage, expectedCallLogMsg, 19794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng expectedCallDetailsMsg, expectedActionMsg, expectedUri); 19894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 19994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 20094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void checkExpectedMessage(String sourcePackage, ContentValues values, 20194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng int expectedCallLogMsg, int expectedCallDetailsMessage, int expectedActionMsg) { 20294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng checkExpectedMessage(sourcePackage, values, expectedCallLogMsg, expectedCallDetailsMessage, 20394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng expectedActionMsg, TEST_VOICEMAIL_URI); 20494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 20594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 20694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void checkMessageMatches(StatusMessage message, String expectedSourcePackage, 20794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng int expectedCallLogMsg, int expectedCallDetailsMsg, int expectedActionMsg, 20894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Uri expectedUri) { 20994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(expectedSourcePackage, message.sourcePackage); 21094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(expectedCallLogMsg, message.callLogMessageId); 21194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(expectedCallDetailsMsg, message.callDetailsMessageId); 21294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(expectedActionMsg, message.actionMessageId); 21394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (expectedUri == null) { 21494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertNull(message.actionUri); 21594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } else { 21694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(expectedUri, message.actionUri); 21794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 21894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 21994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 22094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void checkNoMessages(String sourcePackage, ContentValues values) { 22194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(1, updateEntryForPackage(sourcePackage, values)); 22294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng List<StatusMessage> messages = getStatusMessages(); 22394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng assertEquals(0, messages.size()); 22494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 22594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 22694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private ContentValues getAllOkStatusValues() { 22794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues values = new ContentValues(); 22894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Status.SETTINGS_URI, TEST_SETTINGS_URI.toString()); 22994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Status.VOICEMAIL_ACCESS_URI, TEST_VOICEMAIL_URI.toString()); 23094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Status.CONFIGURATION_STATE, Status.CONFIGURATION_STATE_OK); 23194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Status.DATA_CHANNEL_STATE, Status.DATA_CHANNEL_STATE_OK); 23294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Status.NOTIFICATION_CHANNEL_STATE, Status.NOTIFICATION_CHANNEL_STATE_OK); 23394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return values; 23494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 23594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 23694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void insertEntryForPackage(String sourcePackage, ContentValues values) { 23794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // If insertion fails then try update as the record might already exist. 23894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (getContentResolver().insert(Status.buildSourceUri(sourcePackage), values) == null) { 23994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateEntryForPackage(sourcePackage, values); 24094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 24194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 24294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 24394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void deleteEntryForPackage(String sourcePackage) { 24494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng getContentResolver().delete(Status.buildSourceUri(sourcePackage), null, null); 24594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 24694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 24794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private int updateEntryForPackage(String sourcePackage, ContentValues values) { 24894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return getContentResolver().update( 24994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Status.buildSourceUri(sourcePackage), values, null, null); 25094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 25194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 25294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private List<StatusMessage> getStatusMessages() { 25394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Restrict the cursor to only the the test packages to eliminate any side effects if there 25494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // are other status messages already stored on the device. 25594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Cursor cursor = getContentResolver().query(Status.CONTENT_URI, 25694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng VoicemailStatusHelperImpl.PROJECTION, getTestPackageSelection(), null, null); 25794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return mStatusHelper.getStatusMessages(cursor); 25894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 25994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 26094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private String getTestPackageSelection() { 26194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng StringBuilder sb = new StringBuilder(); 26294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (String sourcePackage : TEST_PACKAGES) { 26394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (sb.length() > 0) { 26494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng sb.append(" OR "); 26594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 26694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng sb.append(String.format("(source_package='%s')", sourcePackage)); 26794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 26894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return sb.toString(); 26994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 27094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 27194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private ContentResolver getContentResolver() { 27294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return getContext().getContentResolver(); 27394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 27494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng} 275