[Wi-Fi] Support expiration time and passpoint configuration version in AccessPoint
To support expiration profile handling.
Bug:141474717
Test: manual:
Download passpoint profile and connect to a passpoint AP.
Change-Id: Ic632058a14c81515c641deb3c6e6529cf0b665ab
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index a855741..66e8923 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -171,6 +171,9 @@
<!-- Speed label for very fast network speed -->
<string name="speed_label_very_fast">Very Fast</string>
+ <!-- Passpoint summary for an expired passpoint [CHAR LIMIT=40] -->
+ <string name="wifi_passpoint_expired">Expired</string>
+
<!-- Summary text separator for preferences including a short description (eg. "Fast / Connected"). -->
<string name="preference_summary_default_combination"><xliff:g id="state" example="ON">%1$s</xliff:g> / <xliff:g id="description" example="High accuracy mode">%2$s</xliff:g></string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 16fd51f..ab274b5 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -143,6 +143,16 @@
int VERY_FAST = 30;
}
+ @IntDef({PasspointConfigurationVersion.INVALID,
+ PasspointConfigurationVersion.NO_OSU_PROVISIONED,
+ PasspointConfigurationVersion.OSU_PROVISIONED})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface PasspointConfigurationVersion {
+ int INVALID = 0;
+ int NO_OSU_PROVISIONED = 1; // R1.
+ int OSU_PROVISIONED = 2; // R2 or R3.
+ }
+
/** The underlying set of scan results comprising this AccessPoint. */
@GuardedBy("mLock")
private final ArraySet<ScanResult> mScanResults = new ArraySet<>();
@@ -177,6 +187,9 @@
static final String KEY_CARRIER_AP_EAP_TYPE = "key_carrier_ap_eap_type";
static final String KEY_CARRIER_NAME = "key_carrier_name";
static final String KEY_EAPTYPE = "eap_psktype";
+ static final String KEY_SUBSCRIPTION_EXPIRATION_TIME_IN_MILLIS =
+ "key_subscription_expiration_time_in_millis";
+ static final String KEY_PASSPOINT_CONFIGURATION_VERSION = "key_passpoint_configuration_version";
static final AtomicInteger sLastId = new AtomicInteger(0);
/*
@@ -251,6 +264,9 @@
private String mFqdn;
private String mProviderFriendlyName;
private boolean mIsRoaming = false;
+ private long mSubscriptionExpirationTimeInMillis;
+ @PasspointConfigurationVersion private int mPasspointConfigurationVersion =
+ PasspointConfigurationVersion.INVALID;
private boolean mIsCarrierAp = false;
@@ -323,6 +339,13 @@
if (savedState.containsKey(KEY_CARRIER_NAME)) {
mCarrierName = savedState.getString(KEY_CARRIER_NAME);
}
+ if (savedState.containsKey(KEY_SUBSCRIPTION_EXPIRATION_TIME_IN_MILLIS)) {
+ mSubscriptionExpirationTimeInMillis =
+ savedState.getLong(KEY_SUBSCRIPTION_EXPIRATION_TIME_IN_MILLIS);
+ }
+ if (savedState.containsKey(KEY_PASSPOINT_CONFIGURATION_VERSION)) {
+ mPasspointConfigurationVersion = savedState.getInt(KEY_PASSPOINT_CONFIGURATION_VERSION);
+ }
update(mConfig, mInfo, mNetworkInfo);
// Calculate required fields
@@ -348,6 +371,12 @@
mContext = context;
mFqdn = config.getHomeSp().getFqdn();
mProviderFriendlyName = config.getHomeSp().getFriendlyName();
+ mSubscriptionExpirationTimeInMillis = config.getSubscriptionExpirationTimeInMillis();
+ if (config.isOsuProvisioned()) {
+ mPasspointConfigurationVersion = PasspointConfigurationVersion.OSU_PROVISIONED;
+ } else {
+ mPasspointConfigurationVersion = PasspointConfigurationVersion.NO_OSU_PROVISIONED;
+ }
updateKey();
}
@@ -991,6 +1020,10 @@
return mContext.getString(R.string.saved_network, appInfo.loadLabel(pm));
}
}
+
+ if (isPasspointConfigurationR1() && isExpired()) {
+ return mContext.getString(R.string.wifi_passpoint_expired);
+ }
return "";
}
@@ -1021,6 +1054,10 @@
* Returns the summary for the AccessPoint.
*/
public String getSettingsSummary(boolean convertSavedAsDisconnected) {
+ if (isPasspointConfigurationR1() && isExpired()) {
+ return mContext.getString(R.string.wifi_passpoint_expired);
+ }
+
// Update to new summary
StringBuilder summary = new StringBuilder();
@@ -1167,6 +1204,30 @@
}
/**
+ * Return true if this AccessPoint is expired.
+ */
+ public boolean isExpired() {
+ if (mSubscriptionExpirationTimeInMillis <= 0) {
+ // Expiration time not specified.
+ return false;
+ } else {
+ return System.currentTimeMillis() >= mSubscriptionExpirationTimeInMillis;
+ }
+ }
+
+ public boolean isPasspointConfigurationR1() {
+ return mPasspointConfigurationVersion == PasspointConfigurationVersion.NO_OSU_PROVISIONED;
+ }
+
+ /**
+ * Return true if {@link PasspointConfiguration#isOsuProvisioned} is true, this may refer to R2
+ * or R3.
+ */
+ public boolean isPasspointConfigurationOsuProvisioned() {
+ return mPasspointConfigurationVersion == PasspointConfigurationVersion.OSU_PROVISIONED;
+ }
+
+ /**
* Starts the OSU Provisioning flow.
*/
public void startOsuProvisioning(@Nullable WifiManager.ActionListener connectListener) {
@@ -1264,6 +1325,9 @@
savedState.putBoolean(KEY_IS_CARRIER_AP, mIsCarrierAp);
savedState.putInt(KEY_CARRIER_AP_EAP_TYPE, mCarrierApEapType);
savedState.putString(KEY_CARRIER_NAME, mCarrierName);
+ savedState.putLong(KEY_SUBSCRIPTION_EXPIRATION_TIME_IN_MILLIS,
+ mSubscriptionExpirationTimeInMillis);
+ savedState.putInt(KEY_PASSPOINT_CONFIGURATION_VERSION, mPasspointConfigurationVersion);
}
public void setListener(AccessPointListener listener) {