Public ServiceState#duplexMode in telephony provider
ServiceState#getDuplexMode is a public API. Expose the same
info into telephony provider to let applications retreive
it without location permission.
Bug: 182601774
Test: atest com.android.phone.ServiceStateProviderTest
Change-Id: I3439ab8af770c5e03e173a238be94711a5a4a332
diff --git a/src/com/android/phone/ServiceStateProvider.java b/src/com/android/phone/ServiceStateProvider.java
index 63bc600..13d1c3a 100644
--- a/src/com/android/phone/ServiceStateProvider.java
+++ b/src/com/android/phone/ServiceStateProvider.java
@@ -19,6 +19,7 @@
import static android.provider.Telephony.ServiceStateTable;
import static android.provider.Telephony.ServiceStateTable.CONTENT_URI;
import static android.provider.Telephony.ServiceStateTable.DATA_NETWORK_TYPE;
+import static android.provider.Telephony.ServiceStateTable.DUPLEX_MODE;
import static android.provider.Telephony.ServiceStateTable.IS_MANUAL_NETWORK_SELECTION;
import static android.provider.Telephony.ServiceStateTable.VOICE_REG_STATE;
import static android.provider.Telephony.ServiceStateTable.getUriForSubscriptionId;
@@ -259,6 +260,7 @@
OPERATOR_ALPHA_LONG_RAW,
OPERATOR_ALPHA_SHORT_RAW,
DATA_NETWORK_TYPE,
+ DUPLEX_MODE,
};
@Override
@@ -395,6 +397,7 @@
final String operator_alpha_long_raw = ss.getOperatorAlphaLongRaw();
final String operator_alpha_short_raw = ss.getOperatorAlphaShortRaw();
final int data_network_type = ss.getDataNetworkType();
+ final int duplex_mode = ss.getDuplexMode();
return buildSingleRowResult(projection, sColumns, new Object[] {
voice_reg_state,
@@ -422,6 +425,7 @@
operator_alpha_long_raw,
operator_alpha_short_raw,
data_network_type,
+ duplex_mode,
});
}
}
diff --git a/tests/src/com/android/phone/ServiceStateProviderTest.java b/tests/src/com/android/phone/ServiceStateProviderTest.java
index 55fdada..de47153 100644
--- a/tests/src/com/android/phone/ServiceStateProviderTest.java
+++ b/tests/src/com/android/phone/ServiceStateProviderTest.java
@@ -86,6 +86,7 @@
ServiceStateProvider.OPERATOR_ALPHA_LONG_RAW,
ServiceStateProvider.OPERATOR_ALPHA_SHORT_RAW,
ServiceStateTable.DATA_NETWORK_TYPE,
+ ServiceStateTable.DUPLEX_MODE,
};
// Exception used internally to verify if the Resolver#notifyChange has been called.
@@ -111,6 +112,15 @@
mTestServiceStateForSubId1 = new ServiceState();
mTestServiceStateForSubId1.setStateOff();
+ // Add NRI to trigger SS with non-default values (e.g. duplex mode)
+ NetworkRegistrationInfo nriWwan = new NetworkRegistrationInfo.Builder()
+ .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
+ .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE)
+ .setDomain(NetworkRegistrationInfo.DOMAIN_PS)
+ .build();
+ mTestServiceStateForSubId1.addNetworkRegistrationInfo(nriWwan);
+ mTestServiceStateForSubId1.setChannelNumber(65536); // EutranBand.BAND_65, DUPLEX_MODE_FDD
+
// Mock out the actual phone state
ServiceStateProvider provider = new ServiceStateProvider() {
@Override
@@ -196,6 +206,7 @@
final String operatorAlphaLongRaw = ss.getOperatorAlphaLongRaw();
final String operatorAlphaShortRaw = ss.getOperatorAlphaShortRaw();
final int dataNetworkType = ss.getDataNetworkType();
+ final int duplexMode = ss.getDuplexMode();
assertEquals(voiceRegState, cursor.getInt(0));
assertEquals(dataRegState, cursor.getInt(1));
@@ -220,6 +231,7 @@
assertEquals(operatorAlphaLongRaw, cursor.getString(20));
assertEquals(operatorAlphaShortRaw, cursor.getString(21));
assertEquals(dataNetworkType, cursor.getInt(22));
+ assertEquals(duplexMode, cursor.getInt(23));
}
/**