protected function _sniffMultiplex()
{
$clientType = Horde_String::lower($this->clientType);
if ($this->_isIos()) {
// iOS seems to support multiple collections for everything except Notes.
$this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_NOTES;
} else {
if ($clientType == self::TYPE_ANDROID) {
// Special cases: These clients don't support non-multiplexed
// collections. Samsung's native client and HTCOnemini2.
if (stripos($this->deviceType, 'samsung') === 0 || stripos($this->model, 'HTCOnemini2') === 0 || $this->deviceType == 'HTCOnemini2') {
$this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_CALENDAR | Horde_ActiveSync_Device::MULTIPLEX_NOTES | Horde_ActiveSync_Device::MULTIPLEX_TASKS;
return;
}
// All android before 4.4 KitKat requires multiplex. KitKat and
// Android 5 native supports non-multiplexed calendars only.
if (!empty($this->properties[self::OS]) && preg_match('/(\\d+\\.\\d+(\\.\\d+)*)/', $this->properties[self::OS], $matches) && version_compare($matches[0], '4.4.0') >= 0) {
$this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_NOTES | Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_TASKS;
} else {
$this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_CALENDAR | Horde_ActiveSync_Device::MULTIPLEX_NOTES | Horde_ActiveSync_Device::MULTIPLEX_TASKS;
}
} else {
if (strpos($this->userAgent, 'MSFT-WP/8.10') !== false) {
// Windows Phone 8.10 supports multiple calendars and tasks, but
// no contacts.
$this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS;
} else {
if (strpos($this->userAgent, 'MSFT-WP/8.0') !== false || $this->deviceType == 'WP8') {
// Windows Phone 8.0 seems that only multiple tasklists are
// supported. The rest must be multiplexed.
$this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_CALENDAR;
} else {
if (strpos($this->userAgent, 'MSFT-PPC') !== false || $this->deviceType == 'PocketPC') {
// PocketPC versions seem to not support any user defined
// collections at all, though I've only tested on a single HTC device.
$this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS | Horde_ActiveSync_Device::MULTIPLEX_CALENDAR | Horde_ActiveSync_Device::MULTIPLEX_NOTES | Horde_ActiveSync_Device::MULTIPLEX_TASKS;
} else {
if (strpos($this->userAgent, 'Outlook/15.0') !== false || strpos($this->userAgent, 'Outlook/16.0') !== false) {
// OL2013 and OL2016 do not support multiple contact lists.
$this->_properties['properties'][self::MULTIPLEX] = Horde_ActiveSync_Device::MULTIPLEX_CONTACTS;
} else {
$this->_properties['properties']['multiplex'] = 0;
}
}
}
}
}
}
}