package jp.co.cyberagent.stf.query;
import android.content.Context;
import android.telephony.TelephonyManager;
import com.google.protobuf.GeneratedMessageLite;
import com.google.protobuf.InvalidProtocolBufferException;
import java.util.ArrayList;
import jp.co.cyberagent.stf.proto.Wire;
import jp.co.cyberagent.stf.util.NetworkUtil;
public class GetPropertiesResponder extends AbstractResponder {
public GetPropertiesResponder(Context context) {
super(context);
}
@Override
public GeneratedMessageLite respond(Wire.Envelope envelope) throws InvalidProtocolBufferException {
Wire.GetPropertiesRequest request =
Wire.GetPropertiesRequest.parseFrom(envelope.getMessage());
ArrayList<Wire.Property> properties = new ArrayList<Wire.Property>();
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
for (String name : request.getPropertiesList()) {
if (name.equals("imei")) {
String deviceId = tm.getDeviceId();
if (deviceId != null && !deviceId.isEmpty()) {
properties.add(Wire.Property.newBuilder()
.setName(name)
.setValue(deviceId)
.build());
}
}
else if (name.equals("imsi")) {
String subscriberId = tm.getSubscriberId();
if (subscriberId != null && !subscriberId.isEmpty()) {
properties.add(Wire.Property.newBuilder()
.setName(name)
.setValue(subscriberId)
.build());
}
}
else if (name.equals("phoneNumber")) {
String phoneNumber = tm.getLine1Number();
if (phoneNumber != null && !phoneNumber.isEmpty()) {
properties.add(Wire.Property.newBuilder()
.setName(name)
.setValue(phoneNumber)
.build());
}
}
else if (name.equals("iccid")) {
String iccid = tm.getSimSerialNumber();
if (iccid != null && !iccid.isEmpty()) {
properties.add(Wire.Property.newBuilder()
.setName(name)
.setValue(iccid)
.build());
}
}
else if (name.equals("operator")) {
String operator;
switch (tm.getPhoneType()) {
case TelephonyManager.PHONE_TYPE_CDMA:
operator = tm.getSimOperatorName();
break;
default:
operator = tm.getNetworkOperatorName();
if (operator == null || operator.isEmpty()) {
operator = tm.getSimOperatorName();
}
}
if (operator != null && !operator.isEmpty()) {
properties.add(Wire.Property.newBuilder()
.setName(name)
.setValue(operator)
.build());
}
}
else if (name.equals("network")) {
properties.add(Wire.Property.newBuilder()
.setName(name)
.setValue(NetworkUtil.getNetworkType(tm.getNetworkType()))
.build());
}
}
return Wire.Envelope.newBuilder()
.setId(envelope.getId())
.setType(Wire.MessageType.GET_PROPERTIES)
.setMessage(Wire.GetPropertiesResponse.newBuilder()
.setSuccess(true)
.addAllProperties(properties)
.build()
.toByteString())
.build();
}
@Override
public void cleanup() {
// No-op
}
}