/** * * Copyright 2017 Paul Schaub * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.smackx.omemo.internal; import java.io.Serializable; import java.util.HashSet; import java.util.Set; /** * This class is used to represent device lists of contacts. * There are active devices (a set of device ids, which was published with the last device list update) * and inactive devices (set of devices that once were active, but are not included in recent list updates). * Both kinds are cached by the client. When a device that was active in the last update is not included in * a new update, it becomes an inactive device. Vice versa, inactive devices can also become active again, by * being included in the latest device list update. *

* The client ensures, that his own device id is on the list of active devices, as soon as he gets online. * * @author Paul Schaub */ public class CachedDeviceList implements Serializable { private static final long serialVersionUID = 3153579238321261203L; private final Set activeDevices; private final Set inactiveDevices; public CachedDeviceList() { this.activeDevices = new HashSet<>(); this.inactiveDevices = new HashSet<>(); } public CachedDeviceList(Set activeDevices, Set inactiveDevices) { this(); this.activeDevices.addAll(activeDevices); this.inactiveDevices.addAll(inactiveDevices); } public CachedDeviceList(CachedDeviceList original) { this(original.getActiveDevices(), original.getInactiveDevices()); } /** * Returns all active devices. * Active devices are all devices that were in the latest DeviceList update. * * @return active devices */ public Set getActiveDevices() { return activeDevices; } /** * Return all inactive devices. * Inactive devices are devices which were in a past DeviceList update once, but were not included in * the latest update. * * @return inactive devices */ public Set getInactiveDevices() { return inactiveDevices; } /** * Returns an OmemoDeviceListElement containing all devices (active and inactive). * * @return all devices */ public Set getAllDevices() { Set all = new HashSet<>(); all.addAll(activeDevices); all.addAll(inactiveDevices); return all; } /** * Merge a device list update into the CachedDeviceList. * The source code should be self explanatory. * * @param deviceListUpdate received device list update */ public void merge(Set deviceListUpdate) { inactiveDevices.addAll(activeDevices); activeDevices.clear(); activeDevices.addAll(deviceListUpdate); inactiveDevices.removeAll(activeDevices); } /** * Add a device to the list of active devices. * * @param deviceId deviceId that will be added */ public void addDevice(int deviceId) { activeDevices.add(deviceId); } /** * Returns true if deviceId is either in the list of active or inactive devices. * * @param deviceId id * @return true or false */ public boolean contains(int deviceId) { return activeDevices.contains(deviceId) || inactiveDevices.contains(deviceId); } @Override public String toString() { String out = "active: ["; for (int id : activeDevices) { out += id + " "; } out += "] inacitve: ["; for (int id : inactiveDevices) { out += id + " "; } out += "]"; return out; } }