package com.az.Location;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.telephony.CellLocation;
import android.telephony.NeighboringCellInfo;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.util.Log;
public class CellInfoManager {
private int asu;
private int bid;
private int cid;
private boolean isCdma;
private boolean isGsm;
private int lac;
private int lat;
private final PhoneStateListener listener;
private int lng;
private int mcc;
private int mnc;
private int nid;
private int sid;
private TelephonyManager tel;
private boolean valid;
private Context context;
public CellInfoManager(Context paramContext) {
this.listener = new CellInfoListener(this);
tel = (TelephonyManager) paramContext.getSystemService(Context.TELEPHONY_SERVICE);
this.tel.listen(this.listener, PhoneStateListener.LISTEN_CELL_LOCATION | PhoneStateListener.LISTEN_SIGNAL_STRENGTH);
context = paramContext;
}
public static int dBm(int i) {
int j;
if (i >= 0 && i <= 31)
j = i * 2 + -113;
else
j = 0;
return j;
}
public int asu() {
return this.asu;
}
public int bid() {
if (!this.valid)
update();
return this.bid;
}
public JSONObject cdmaInfo() {
if (!isCdma()) {
return null;
}
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("bid", bid());
jsonObject.put("sid", sid());
jsonObject.put("nid", nid());
jsonObject.put("lat", lat());
jsonObject.put("lng", lng());
} catch (JSONException ex) {
jsonObject = null;
Log.e("CellInfoManager", ex.getMessage());
}
return jsonObject;
}
public JSONArray cellTowers() {
JSONArray jsonarray = new JSONArray();
int lat;
int mcc;
int mnc;
int aryCell[] = dumpCells();
lat = lac();
mcc = mcc();
mnc = mnc();
if (aryCell == null || aryCell.length < 2) {
aryCell = new int[2];
aryCell[0] = cid;
aryCell[1] = -60;
}
for (int i = 0; i < aryCell.length; i += 2) {
try {
int j2 = dBm(i + 1);
JSONObject jsonobject = new JSONObject();
jsonobject.put("cell_id", aryCell[i]);
jsonobject.put("location_area_code", lat);
jsonobject.put("mobile_country_code", mcc);
jsonobject.put("mobile_network_code", mnc);
jsonobject.put("signal_strength", j2);
jsonobject.put("age", 0);
jsonarray.put(jsonobject);
} catch (Exception ex) {
ex.printStackTrace();
Log.e("CellInfoManager", ex.getMessage());
}
}
if (isCdma())
jsonarray = new JSONArray();
return jsonarray;
}
public int cid() {
if (!this.valid)
update();
return this.cid;
}
public int[] dumpCells() {
int[] aryCells;
if (cid() == 0) {
aryCells = new int[0];
return aryCells;
}
List<NeighboringCellInfo> lsCellInfo = this.tel.getNeighboringCellInfo();
if (lsCellInfo == null || lsCellInfo.size() == 0) {
aryCells = new int[1];
int i = cid();
aryCells[0] = i;
return aryCells;
}
int[] arrayOfInt1 = new int[lsCellInfo.size() * 2 + 2];
int j = 0 + 1;
int k = cid();
arrayOfInt1[0] = k;
int m = j + 1;
int n = asu();
arrayOfInt1[j] = n;
Iterator<NeighboringCellInfo> iter = lsCellInfo.iterator();
while (true) {
if (!iter.hasNext()) {
break;
}
NeighboringCellInfo localNeighboringCellInfo = (NeighboringCellInfo) iter.next();
int i2 = localNeighboringCellInfo.getCid();
if ((i2 <= 0) || (i2 == 65535))
continue;
int i3 = m + 1;
arrayOfInt1[m] = i2;
m = i3 + 1;
int i4 = localNeighboringCellInfo.getRssi();
arrayOfInt1[i3] = i4;
}
int[] arrayOfInt2 = new int[m];
System.arraycopy(arrayOfInt1, 0, arrayOfInt2, 0, m);
aryCells = arrayOfInt2;
return aryCells;
}
public JSONObject gsmInfo() {
if (!isGsm()) {
return null;
}
JSONObject localObject = null;
while (true) {
try {
JSONObject localJSONObject1 = new JSONObject();
String str1 = this.tel.getNetworkOperatorName();
localJSONObject1.put("operator", str1);
String str2 = this.tel.getNetworkOperator();
if ((str2.length() == 5) || (str2.length() == 6)) {
String str3 = str2.substring(0, 3);
String str4 = str2.substring(3, str2.length());
localJSONObject1.put("mcc", str3);
localJSONObject1.put("mnc", str4);
}
localJSONObject1.put("lac", lac());
int[] arrayOfInt = dumpCells();
JSONArray localJSONArray1 = new JSONArray();
int k = 0;
int m = arrayOfInt.length / 2;
while (true) {
if (k >= m) {
localJSONObject1.put("cells", localJSONArray1);
localObject = localJSONObject1;
break;
}
int n = k * 2;
int i1 = arrayOfInt[n];
int i2 = k * 2 + 1;
int i3 = arrayOfInt[i2];
JSONObject localJSONObject7 = new JSONObject();
localJSONObject7.put("cid", i1);
localJSONObject7.put("asu", i3);
localJSONArray1.put(localJSONObject7);
k += 1;
}
} catch (JSONException localJSONException) {
localObject = null;
}
}
}
public boolean isCdma() {
if (!this.valid)
update();
return this.isCdma;
}
public boolean isGsm() {
if (!this.valid)
update();
return this.isGsm;
}
public int lac() {
if (!this.valid)
update();
return this.lac;
}
public int lat() {
if (!this.valid)
update();
return this.lat;
}
public int lng() {
if (!this.valid)
update();
return this.lng;
}
public int mcc() {
if (!this.valid)
update();
return this.mcc;
}
public int mnc() {
if (!this.valid)
update();
return this.mnc;
}
public int nid() {
if (!this.valid)
update();
return this.nid;
}
public float score() {
float f1 = 0f;
int[] aryCells = null;
int i = 0;
float f2 = 0f;
if (isCdma()) {
f2 = 1065353216;
return f2;
}
if (isGsm()) {
f1 = 0.0F;
aryCells = dumpCells();
int j = aryCells.length;
if (i >= j)
f2 = f1;
}
if(i <=0 ) {
return 1065353216;
}
int m = aryCells[i];
for (i = 0; i < m; i++) {
if ((m < 0) || (m > 31))
f1 += 0.5F;
else
f1 += 1.0F;
}
f2 = f1;
return f2;
}
public int sid() {
if (!this.valid)
update();
return this.sid;
}
public void update() {
this.isGsm = false;
this.isCdma = false;
this.cid = 0;
this.lac = 0;
this.mcc = 0;
this.mnc = 0;
CellLocation cellLocation = this.tel.getCellLocation();
int nPhoneType = this.tel.getPhoneType();
if (nPhoneType == 1 && cellLocation instanceof GsmCellLocation) {
this.isGsm = true;
GsmCellLocation gsmCellLocation = (GsmCellLocation) cellLocation;
int nGSMCID = gsmCellLocation.getCid();
if (nGSMCID > 0) {
if (nGSMCID != 65535) {
this.cid = nGSMCID;
this.lac = gsmCellLocation.getLac();
}
}
}
try {
String strNetworkOperator = this.tel.getNetworkOperator();
int nNetworkOperatorLength = strNetworkOperator.length();
if (nNetworkOperatorLength != 5) {
if (nNetworkOperatorLength != 6)
;
} else {
this.mcc = Integer.parseInt(strNetworkOperator.substring(0, 3));
this.mnc = Integer.parseInt(strNetworkOperator.substring(3, nNetworkOperatorLength));
}
if (this.tel.getPhoneType() == 2) {
this.valid = true;
Class<?> clsCellLocation = cellLocation.getClass();
Class<?>[] aryClass = new Class[0];
Method localMethod1 = clsCellLocation.getMethod("getBaseStationId", aryClass);
Method localMethod2 = clsCellLocation.getMethod("getSystemId", aryClass);
Method localMethod3 = clsCellLocation.getMethod("getNetworkId", aryClass);
Object[] aryDummy = new Object[0];
this.bid = ((Integer) localMethod1.invoke(cellLocation, aryDummy)).intValue();
this.sid = ((Integer) localMethod2.invoke(cellLocation, aryDummy)).intValue();
this.nid = ((Integer) localMethod3.invoke(cellLocation, aryDummy)).intValue();
Method localMethod7 = clsCellLocation.getMethod("getBaseStationLatitude", aryClass);
Method localMethod8 = clsCellLocation.getMethod("getBaseStationLongitude", aryClass);
this.lat = ((Integer) localMethod7.invoke(cellLocation, aryDummy)).intValue();
this.lng = ((Integer) localMethod8.invoke(cellLocation, aryDummy)).intValue();
this.isCdma = true;
}
} catch (Exception ex) {
Log.e("CellInfoManager", ex.getMessage());
}
}
class CellInfoListener extends PhoneStateListener {
CellInfoListener(CellInfoManager manager) {
}
public void onCellLocationChanged(CellLocation paramCellLocation) {
CellInfoManager.this.valid = false;
}
public void onSignalStrengthChanged(int paramInt) {
CellInfoManager.this.asu = paramInt;
}
}
}