blob: b202102217c57258a3bb5671cae05fef97993437 [file] [log] [blame]
/*
* 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()
+ "}";
}
}