DefaultOmtpEventHandler.java revision d7f0202199d08e1bc104debbb4db30010683c80f
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17package com.android.phone.vvm.omtp; 18 19import android.content.Context; 20import android.provider.VoicemailContract; 21import android.provider.VoicemailContract.Status; 22import com.android.phone.VoicemailStatus; 23import com.android.phone.vvm.omtp.OmtpEvents.Type; 24 25public class DefaultOmtpEventHandler { 26 27 private static final String TAG = "DefErrorCodeHandler"; 28 29 public static void handleEvent(Context context, OmtpVvmCarrierConfigHelper config, 30 OmtpEvents event) { 31 switch (event.getType()) { 32 case Type.CONFIGURATION: 33 handleConfigurationEvent(context, config, event); 34 break; 35 case Type.DATA_CHANNEL: 36 handleDataChannelEvent(context, config, event); 37 break; 38 case Type.NOTIFICATION_CHANNEL: 39 handleNotificationChannelEvent(context, config, event); 40 break; 41 case Type.OTHER: 42 handleOtherEvent(context, config, event); 43 break; 44 default: 45 VvmLog.wtf(TAG, "invalid event type " + event.getType() + " for " + event); 46 } 47 } 48 49 private static void handleConfigurationEvent(Context context, OmtpVvmCarrierConfigHelper config, 50 OmtpEvents event) { 51 switch (event) { 52 case CONFIG_REQUEST_STATUS_SUCCESS: 53 case CONFIG_PIN_SET: 54 VoicemailStatus.edit(context, config.getSubId()) 55 .setConfigurationState(VoicemailContract.Status.CONFIGURATION_STATE_OK) 56 .setNotificationChannelState(Status.NOTIFICATION_CHANNEL_STATE_OK) 57 .apply(); 58 break; 59 case CONFIG_ACTIVATING: 60 // Wipe all errors from the last activation. All errors shown should be new errors 61 // for this activation. 62 VoicemailStatus.edit(context, config.getSubId()) 63 .setConfigurationState(Status.CONFIGURATION_STATE_CONFIGURING) 64 .setDataChannelState(Status.DATA_CHANNEL_STATE_OK) 65 .setNotificationChannelState(Status.NOTIFICATION_CHANNEL_STATE_OK).apply(); 66 break; 67 case CONFIG_STATUS_SMS_TIME_OUT: 68 VoicemailStatus.edit(context, config.getSubId()) 69 .setConfigurationState(Status.CONFIGURATION_STATE_FAILED) 70 .apply(); 71 break; 72 default: 73 VvmLog.wtf(TAG, "invalid configuration event " + event); 74 } 75 } 76 77 private static void handleDataChannelEvent(Context context, OmtpVvmCarrierConfigHelper config, 78 OmtpEvents event) { 79 switch (event) { 80 case DATA_IMAP_OPERATION_COMPLETED: 81 VoicemailStatus.edit(context, config.getSubId()) 82 .setDataChannelState(Status.DATA_CHANNEL_STATE_OK) 83 .apply(); 84 break; 85 86 case DATA_NO_CONNECTION: 87 VoicemailStatus.edit(context, config.getSubId()) 88 .setDataChannelState(Status.DATA_CHANNEL_STATE_NO_CONNECTION) 89 .apply(); 90 break; 91 92 case DATA_NO_CONNECTION_CELLULAR_REQUIRED: 93 VoicemailStatus.edit(context, config.getSubId()) 94 .setDataChannelState( 95 Status.DATA_CHANNEL_STATE_NO_CONNECTION_CELLULAR_REQUIRED) 96 .apply(); 97 break; 98 case DATA_INVALID_PORT: 99 VoicemailStatus.edit(context, config.getSubId()) 100 .setDataChannelState( 101 VoicemailContract.Status.DATA_CHANNEL_STATE_BAD_CONFIGURATION) 102 .apply(); 103 break; 104 case DATA_CANNOT_RESOLVE_HOST_ON_NETWORK: 105 VoicemailStatus.edit(context, config.getSubId()) 106 .setDataChannelState( 107 VoicemailContract.Status.DATA_CHANNEL_STATE_SERVER_CONNECTION_ERROR) 108 .apply(); 109 break; 110 case DATA_SSL_INVALID_HOST_NAME: 111 case DATA_CANNOT_ESTABLISH_SSL_SESSION: 112 case DATA_IOE_ON_OPEN: 113 VoicemailStatus.edit(context, config.getSubId()) 114 .setDataChannelState( 115 VoicemailContract.Status.DATA_CHANNEL_STATE_COMMUNICATION_ERROR) 116 .apply(); 117 break; 118 case DATA_BAD_IMAP_CREDENTIAL: 119 case DATA_AUTH_UNKNOWN_USER: 120 case DATA_AUTH_UNKNOWN_DEVICE: 121 case DATA_AUTH_INVALID_PASSWORD: 122 case DATA_AUTH_MAILBOX_NOT_INITIALIZED: 123 case DATA_AUTH_SERVICE_NOT_PROVISIONED: 124 case DATA_AUTH_SERVICE_NOT_ACTIVATED: 125 case DATA_AUTH_USER_IS_BLOCKED: 126 VoicemailStatus.edit(context, config.getSubId()) 127 .setDataChannelState( 128 VoicemailContract.Status.DATA_CHANNEL_STATE_BAD_CONFIGURATION) 129 .apply(); 130 break; 131 132 case DATA_REJECTED_SERVER_RESPONSE: 133 case DATA_INVALID_INITIAL_SERVER_RESPONSE: 134 case DATA_SSL_EXCEPTION: 135 case DATA_ALL_SOCKET_CONNECTION_FAILED: 136 VoicemailStatus.edit(context, config.getSubId()) 137 .setDataChannelState( 138 VoicemailContract.Status.DATA_CHANNEL_STATE_SERVER_ERROR) 139 .apply(); 140 break; 141 142 default: 143 VvmLog.wtf(TAG, "invalid data channel event " + event); 144 } 145 } 146 147 private static void handleNotificationChannelEvent(Context context, 148 OmtpVvmCarrierConfigHelper config, OmtpEvents event) { 149 switch (event) { 150 case NOTIFICATION_IN_SERVICE: 151 VoicemailStatus.edit(context, config.getSubId()) 152 .setNotificationChannelState(Status.NOTIFICATION_CHANNEL_STATE_OK) 153 // Clear the error state. A sync should follow signal return so any error 154 // will be reposted. 155 .setDataChannelState(Status.DATA_CHANNEL_STATE_OK) 156 .apply(); 157 break; 158 case NOTIFICATION_SERVICE_LOST: 159 VoicemailStatus.Editor editor = VoicemailStatus.edit(context, config.getSubId()); 160 editor.setNotificationChannelState(Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION); 161 if (config.isCellularDataRequired()) { 162 editor.setDataChannelState( 163 Status.DATA_CHANNEL_STATE_NO_CONNECTION_CELLULAR_REQUIRED); 164 } 165 editor.apply(); 166 break; 167 default: 168 VvmLog.wtf(TAG, "invalid notification channel event " + event); 169 } 170 } 171 172 private static void handleOtherEvent(Context context, OmtpVvmCarrierConfigHelper config, 173 OmtpEvents event) { 174 switch (event) { 175 case OTHER_SOURCE_REMOVED: 176 VoicemailStatus.edit(context, config.getSubId()) 177 .setConfigurationState(Status.CONFIGURATION_STATE_NOT_CONFIGURED) 178 .setNotificationChannelState( 179 Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION) 180 .setDataChannelState(Status.DATA_CHANNEL_STATE_NO_CONNECTION) 181 .apply(); 182 break; 183 default: 184 VvmLog.wtf(TAG, "invalid other event " + event); 185 } 186 } 187} 188