/* * Copyright (C) 2021 The Android Open Source Project * * 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 com.android.imsserviceentitlement.ts43; import com.android.imsserviceentitlement.ts43.Ts43Constants.ResponseXmlAttributes; import com.android.imsserviceentitlement.ts43.Ts43Constants.ResponseXmlNode; import com.android.imsserviceentitlement.utils.XmlDoc; import com.android.libraries.entitlement.ServiceEntitlement; import com.google.auto.value.AutoValue; /** * Implementation of Vowifi entitlement status and server data availability for TS.43 entitlement * solution. This class is only used to report the entitlement status of Vowifi. */ @AutoValue public abstract class Ts43VowifiStatus { /** The entitlement status of Vowifi service. */ public static class EntitlementStatus { public EntitlementStatus() {} public static final int DISABLED = 0; public static final int ENABLED = 1; public static final int INCOMPATIBLE = 2; public static final int PROVISIONING = 3; } /** The emergency address status of vowifi service. */ public static class AddrStatus { public AddrStatus() {} public static final int NOT_AVAILABLE = 0; public static final int AVAILABLE = 1; public static final int NOT_REQUIRED = 2; public static final int IN_PROGRESS = 3; } /** The terms and condition status of vowifi service. */ public static class TcStatus { public TcStatus() {} public static final int NOT_AVAILABLE = 0; public static final int AVAILABLE = 1; public static final int NOT_REQUIRED = 2; public static final int IN_PROGRESS = 3; } /** The provision status of vowifi service. */ public static class ProvStatus { public ProvStatus() {} public static final int NOT_PROVISIONED = 0; public static final int PROVISIONED = 1; public static final int NOT_REQUIRED = 2; public static final int IN_PROGRESS = 3; } /** The entitlement status of vowifi service. */ public abstract int entitlementStatus(); /** The terms and condition status of vowifi service. */ public abstract int tcStatus(); /** The emergency address status of vowifi service. */ public abstract int addrStatus(); /** The provision status of vowifi service. */ public abstract int provStatus(); public static Ts43VowifiStatus.Builder builder() { return new AutoValue_Ts43VowifiStatus.Builder() .setEntitlementStatus(EntitlementStatus.DISABLED) .setTcStatus(TcStatus.NOT_AVAILABLE) .setAddrStatus(AddrStatus.NOT_AVAILABLE) .setProvStatus(ProvStatus.NOT_PROVISIONED); } public static Ts43VowifiStatus.Builder builder(XmlDoc doc) { return builder() .setEntitlementStatus( doc.get(ResponseXmlNode.APPLICATION, ResponseXmlAttributes.ENTITLEMENT_STATUS, ServiceEntitlement.APP_VOWIFI) .map(status -> Integer.parseInt(status)) .orElse(EntitlementStatus.INCOMPATIBLE)) .setTcStatus( doc.get(ResponseXmlNode.APPLICATION, ResponseXmlAttributes.TC_STATUS, ServiceEntitlement.APP_VOWIFI) .map(status -> Integer.parseInt(status)) .orElse(TcStatus.NOT_REQUIRED)) .setAddrStatus( doc.get(ResponseXmlNode.APPLICATION, ResponseXmlAttributes.ADDR_STATUS, ServiceEntitlement.APP_VOWIFI) .map(status -> Integer.parseInt(status)) .orElse(AddrStatus.NOT_REQUIRED)) .setProvStatus( doc.get(ResponseXmlNode.APPLICATION, ResponseXmlAttributes.PROVISION_STATUS, ServiceEntitlement.APP_VOWIFI) .map(status -> Integer.parseInt(status)) .orElse(ProvStatus.NOT_REQUIRED)); } /** Builder of {@link Ts43VowifiStatus}. */ @AutoValue.Builder public abstract static class Builder { public abstract Ts43VowifiStatus build(); public abstract Builder setEntitlementStatus(int entitlementStatus); public abstract Builder setTcStatus(int tcStatus); public abstract Builder setAddrStatus(int addrStatus); public abstract Builder setProvStatus(int provStatus); } public boolean vowifiEntitled() { return entitlementStatus() == EntitlementStatus.ENABLED && (provStatus() == ProvStatus.PROVISIONED || provStatus() == ProvStatus.NOT_REQUIRED) && (tcStatus() == TcStatus.AVAILABLE || tcStatus() == TcStatus.NOT_REQUIRED) && (addrStatus() == AddrStatus.AVAILABLE || addrStatus() == AddrStatus.NOT_REQUIRED); } public boolean serverDataMissing() { return entitlementStatus() == EntitlementStatus.DISABLED && (tcStatus() == TcStatus.NOT_AVAILABLE || addrStatus() == AddrStatus.NOT_AVAILABLE); } public boolean inProgress() { return entitlementStatus() == EntitlementStatus.PROVISIONING || (entitlementStatus() == EntitlementStatus.DISABLED && (tcStatus() == TcStatus.IN_PROGRESS || addrStatus() == AddrStatus.IN_PROGRESS)) || (entitlementStatus() == EntitlementStatus.DISABLED && (provStatus() == ProvStatus.NOT_PROVISIONED || provStatus() == ProvStatus.IN_PROGRESS) && (tcStatus() == TcStatus.AVAILABLE || tcStatus() == TcStatus.NOT_REQUIRED) && (addrStatus() == AddrStatus.AVAILABLE || addrStatus() == AddrStatus.NOT_REQUIRED)); } public boolean incompatible() { return entitlementStatus() == EntitlementStatus.INCOMPATIBLE; } @Override public final String toString() { return "Ts43VowifiStatus {" + "entitlementStatus=" + entitlementStatus() + ",tcStatus=" + tcStatus() + ",addrStatus=" + addrStatus() + ",provStatus=" + provStatus() + "}"; } }