13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* 23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright (C) 2014 The Android Open Source Project 33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * you may not use this file except in compliance with the License. 63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * You may obtain a copy of the License at 73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * http://www.apache.org/licenses/LICENSE-2.0 93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Unless required by applicable law or agreed to in writing, software 113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * See the License for the specific language governing permissions and 143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * limitations under the License. 153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypackage com.android.omadm.plugin.dev; 183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.content.Context; 203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.content.SharedPreferences; 213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.database.Cursor; 223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.database.sqlite.SQLiteDatabase; 233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.net.wifi.WifiInfo; 243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.net.wifi.WifiManager; 253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.os.RemoteException; 263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.os.SystemProperties; 273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.provider.Settings; 283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.provider.Settings.SettingNotFoundException; 293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.telephony.TelephonyManager; 303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.text.TextUtils; 313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.util.Log; 323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.DmtBasePlugin; 343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.DmtData; 353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.DmtException; 363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.DmtPluginNode; 373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.ErrorCodes; 383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.service.DMSettingsHelper; 393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.HashMap; 413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.Locale; 423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.Map; 433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypublic class DevPlugin extends DmtBasePlugin { 453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby static final String TAG = "DM_DevPlugin"; 473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String mRootPath; 493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private Context mContext; 513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final String DEV_DETAIL = "devdetail"; 533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final String WIFI_MAC_ADDR = "wifimacaddr"; 553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final String PRE_FW_VER = "prefwversion"; 573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final String LAST_UPD_TIME = "lastupdatetime"; 593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby// public static final Uri DMFLEXS_CONTENT_URI = Uri 613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby// .parse("content://com.android.omadm.service/flexs"); 623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DevPlugin(Context ctx) { 643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mContext = ctx; 653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @SuppressWarnings({"unchecked", "rawtypes"}) 693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public boolean init(String rootPath, Map parameters) { 703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Enter DevPlugin.init(\"" + rootPath + "\", " + parameters + "\")"); 713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mRootPath = rootPath; 723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return true; 733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtPluginNode getNode(String path) { 773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("getNode(\"" + path + "\")"); 783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtPluginNode node = new DmtPluginNode("", new DmtData("abc")); 793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby setOperationResult(node == null ? 803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ErrorCodes.SYNCML_DM_FAIL : 813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ErrorCodes.SYNCML_DM_SUCCESS); 823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return node; 833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData getNodeValue(String path) { 873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("getNodeValue: rootPath=" + mRootPath + " path=" + path); 883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby //mContext.enforceCallingPermission("com.android.permission.READ_OMADM_SETTINGS", "Insufficient Permissions"); 903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtData data = null; 913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (path.equals("./DevDetail/SwV") || path.equals("./DevDetail/FwV")) { 933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String SwV; 943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 95edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu if (!isSprint() && path.equals("./DevDetail/SwV")) { 96edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu SwV = "Android " + SystemProperties.get("ro.build.version.release"); 97edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu } else { 98edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu SwV = SystemProperties.get("ro.build.version.full"); 99edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu if (null == SwV || SwV.equals("")) { 100edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu SwV = SystemProperties.get("ro.build.id", null) + "~" 101edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu + SystemProperties.get("ro.build.config.version", null) + "~" 102edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu + SystemProperties.get("gsm.version.baseband", null) + "~" 103edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu + SystemProperties.get("ro.gsm.flexversion", null); 104edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu } 1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (RuntimeException e) { 1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SwV = "Unknown"; 1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(SwV); 1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if ("./DevDetail/HwV".equals(path)) { 1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String HwV; 1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby HwV = SystemProperties.get("ro.hardware", "Unknown") 1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby + "." + SystemProperties.get("ro.revision", "Unknown"); 1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (RuntimeException e) { 1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby HwV = "Unknown"; 1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("get ./DevDetail/HwV = " + HwV); 1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(HwV); 1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if ("./DevDetail/DevTyp".equals(path)) { 1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String DevTyp = getDeviceType(); 1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("get ./DevDetail/DevTyp = " + DevTyp); 1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(DevTyp); 1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if ("./DevInfo/DevId".equals(path)) { 1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby TelephonyManager tm = (TelephonyManager) mContext 1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby .getSystemService(Context.TELEPHONY_SERVICE); 127122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan String simOperator = tm.getSimOperator(); 128122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan String imsi = tm.getSubscriberId(); 129122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan logd("simOperator: " + simOperator + " IMSI: " + imsi); 130122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan /* Use MEID for sprint */ 131122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan if ("310120".equals(simOperator) || (imsi != null && imsi.startsWith("310120"))) { 132122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan /* MEID is 14 digits. If IMEI is returned as DevId, MEID can be extracted by taking 133122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan * first 14 characters. This is not always true but should be the case for sprint */ 134122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan String strDevId = tm.getDeviceId(); 135122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan strDevId = strDevId.toUpperCase(Locale.US); 136122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan logd("DeviceId from telemgr: " + strDevId); 137122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan if (strDevId != null && strDevId.length() >= 14) { 138122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan strDevId = strDevId.substring(0, 14); 139122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan logd("MEID (from DeviceId): " + strDevId); 140122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan data = new DmtData("MEID:" + strDevId); 141122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan } else { 142122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan loge("MEID cannot be extracted from DeviceId " + strDevId); 143122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan } 144122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan } else { 145672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang String strDevId; 146672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang if (isPhoneTypeLTE()) { 147672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang strDevId = tm.getImei(); 148672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang } else { 149672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang strDevId = tm.getDeviceId(); 150672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang } 151672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang strDevId = strDevId.toUpperCase(Locale.US); 152672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang logd("DevId from telemgr: " + strDevId); 153672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang 154672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang if (isPhoneTypeLTE()) { 155122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan data = new DmtData("IMEI:" + strDevId); 156672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang } else { 157672d7f951c23810a234bc7f0b6340f381682cbffYong Jiang data = new DmtData("MEID:" + strDevId.substring(0, 14)); 158122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan } 159122369cbe72f5256327b2a9aa137900206fcd2d1Amit Mahajan } 1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevInfo/DmV")) { 1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("1.2"); 1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevInfo/Lang")) { 1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String strLang = readValueFromFile("Lang"); 1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Language from shared file:" + strLang); 1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (strLang == null) { 1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby strLang = Locale.getDefault().toString(); 1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Language from system is:" + strLang); 1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(strLang); 1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevInfo/Man")) { 1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String strMan = readValueFromFile("Man"); 1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Manufacturer got from shared file:" + strMan); 1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (strMan == null) { 1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby strMan = SystemProperties.get("ro.product.manufacturer", "unknown"); 1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Manufacturer from system properties:" + strMan); 1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(strMan.toLowerCase(Locale.US)); 1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevInfo/Mod")) { 1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String strMod = readValueFromFile("Mod"); 1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Mod got from shared file:" + strMod); 1813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (strMod == null) { 1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby strMod = SystemProperties.get("ro.product.model", "generic"); 1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Mod got from system properties:" + strMod); 1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(strMod); 1863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevDetail/Bearer/GSM")) { 1873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("GSM_1900"); 1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevDetail/Bearer/CDMA")) { 1893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("CDMA_2000"); 1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevDetail/Ext/SystemSettings/AllowUnknownSources")) { 1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!isThisForATT()) { 1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Not Supported for non ATT carriers"); 1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("Not Supported"); 1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby boolean mUnknownSources = false; 1963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (Settings.Global.getInt(mContext.getContentResolver(), 1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Settings.Global.INSTALL_NON_MARKET_APPS) > 0) { 2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("install from non-market -- allowed"); 2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mUnknownSources = true; 2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(mUnknownSources); 2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("install from non-market -- not allowed"); 2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mUnknownSources = false; 2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(mUnknownSources); 2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (SettingNotFoundException e) { 2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby loge("Exception while reading Settings.Global.INSTALL_NON_MARKET_APPS", e); 2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevDetail/Ext/WLANMacAddr")) { 2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!isThisForATT()) { 2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Not Supported for non ATT carriers"); 2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("Not Supported"); 2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String wMac = ""; 2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SharedPreferences p = mContext.getSharedPreferences(DEV_DETAIL, 0); 2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (p.contains(WIFI_MAC_ADDR)) { 2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby wMac = p.getString(DevPlugin.WIFI_MAC_ADDR, null); 2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Read WiFi Mac address from shared file: " + wMac); 2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(wMac); 2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby WifiManager wm = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); 2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby WifiInfo wi = wm.getConnectionInfo(); 2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby wMac = wi == null ? null : wi.getMacAddress(); 2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("WiFi Mac address" + wMac); 2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!TextUtils.isEmpty(wMac)) { 2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SharedPreferences.Editor ed = p.edit(); 2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ed.putString(DevPlugin.WIFI_MAC_ADDR, wMac); 2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ed.apply(); 2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(wMac); 2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("Unavailable"); 2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevDetail/Ext/PreFwV")) { 2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!isThisForATT()) { 2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Not Supported for non ATT carriers"); 2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("Not Supported"); 2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String preFwV = ""; 2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SharedPreferences p = mContext.getSharedPreferences(DEV_DETAIL, 0); 2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (p.contains(PRE_FW_VER)) { 2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby preFwV = p.getString(DevPlugin.PRE_FW_VER, null); 2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Read Previous Firmware Version from shared file" + preFwV); 2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(preFwV); 2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String SwV; 2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SwV = SystemProperties.get("ro.build.version.full"); 2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (Exception e) { 2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SwV = "Unknown"; 2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(SwV); 2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevDetail/Ext/LastUpdateTime")) { 2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!isThisForATT()) { 2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Not Supported for non ATT carriers"); 2653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("Not Supported"); 2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String lastUpd = ""; 2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SharedPreferences p = mContext.getSharedPreferences(DevPlugin.DEV_DETAIL, 0); 2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (p.contains(LAST_UPD_TIME)) { 2713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby lastUpd = p.getString(DevPlugin.LAST_UPD_TIME, null); 2723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Read date stamp for the last update from shared file: " + lastUpd); 2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(lastUpd); 2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("No Known Update"); 2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevDetail/Ext/DateTime/Date")) { 2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!isPhoneTypeLTE()) { 2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Not Supported for non VZW carriers"); 2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("Not Supported"); 2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String updateDateTime = ""; 2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SharedPreferences p = mContext.getSharedPreferences(DevPlugin.DEV_DETAIL, 0); 2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (p.contains(LAST_UPD_TIME)) { 2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby updateDateTime = p.getString(DevPlugin.LAST_UPD_TIME, null); 2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Read date and time stamp for the last update from shared file: " 2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby + updateDateTime); 2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String[] updateDate = updateDateTime.split("\\:"); 2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 2923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData( 2933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby updateDate[0] + ":" + updateDate[1] + ":" + updateDate[2]); 2943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (Exception e) { 2953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("No Known Update"); 2963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby e.printStackTrace(); 2973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("No Known Update"); 3003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevDetail/Ext/DateTime/TimeUTC")) { 3033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!isPhoneTypeLTE()) { 3043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Not Supported for non VZW carriers"); 3053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("Not Supported"); 3063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 3073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String updateDateTime = ""; 3083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SharedPreferences p = mContext.getSharedPreferences(DevPlugin.DEV_DETAIL, 0); 3093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (p.contains(LAST_UPD_TIME)) { 3113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby updateDateTime = p.getString(DevPlugin.LAST_UPD_TIME, null); 3123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Read date and time stamp for the last update from shared file: " 3133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby + updateDateTime); 3143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String[] updateTime = updateDateTime.split("\\:"); 3153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 3163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(updateTime[3] + ":" + updateTime[4]); 3173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (Exception e) { 3183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("No Known Update"); 3193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby e.printStackTrace(); 3203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 3223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData("No Known Update"); 3233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./DevDetail/Ext/DateTime/DLS")) { 3263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby setOperationResult(ErrorCodes.SYNCML_DM_UNSUPPORTED_OPERATION); 3273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby setOperationResult(data == null ? 3303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ErrorCodes.SYNCML_DM_UNSUPPORTED_OPERATION : 3313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ErrorCodes.SYNCML_DM_SUCCESS); 3323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return data; 3343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 3373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public int updateLeafNode(String path, DmtData newValue) throws RemoteException { 3383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("updateLeafNode: rootPath=" + mRootPath + " path=" + path + " newValue=" + newValue); 3393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby //mContext.enforceCallingPermission("com.android.permission.WRITE_OMADM_SETTINGS", "Insufficient Permissions"); 3403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (path.equals("./DevDetail/Ext/SystemSettings/AllowUnknownSources")) { 3423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!isThisForATT()) { 3433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Not Supported for non ATT carriers"); 3443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return setOperationResult(ErrorCodes.SYNCML_DM_UNSUPPORTED_OPERATION); 3453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 3463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // enable/disable install from non market 3473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 3483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Settings.Global.putInt(mContext.getContentResolver(), 3493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Settings.Global.INSTALL_NON_MARKET_APPS, 3503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ((newValue.getBoolean()) ? 1 : 0)); 3513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if ((Settings.Global.getInt(mContext.getContentResolver(), 3523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Settings.Global.INSTALL_NON_MARKET_APPS)) 3533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby == (newValue.getBoolean() ? 1 : 0)) { 3543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Update to settings.db for install_non_market_apps -- success"); 3553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return setOperationResult(ErrorCodes.SYNCML_DM_SUCCESS); 3563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 3573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Update to settings.db for install_non_market_apps -- failed"); 3583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return setOperationResult(ErrorCodes.SYNCML_DM_FAIL); 3593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (DmtException e) { 3613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby loge("Exception during parsing the newValue.getBoolean()", e); 3623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return setOperationResult(ErrorCodes.SYNCML_DM_FAIL); 3633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (SettingNotFoundException e) { 3643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby loge("Exception retrieving Settings.Global.INSTALL_NON_MARKET_APPS", e); 3653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return setOperationResult(ErrorCodes.SYNCML_DM_FAIL); 3663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 3693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return setOperationResult(ErrorCodes.SYNCML_DM_FAIL); 3703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @SuppressWarnings("unchecked") 3743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 3753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public Map getNodes(String rootPath) { 3763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Enter DevPlugin.getNodes(\"" + rootPath + "\")"); 3773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Map<String, DmtPluginNode> hMap = new HashMap<String, DmtPluginNode>(); 3783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtPluginNode node1; 3793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby node1 = new DmtPluginNode("", new DmtData("abc")); 3803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby hMap.put("", node1); 3813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Leave DevPlugin::getNodes()"); 3823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return hMap; 3833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public boolean release() { 3863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return true; 3873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String readValueFromFile(String propName) { 3903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String ret = null; 3913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // use preference instead of the system property 3923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SharedPreferences prefs = mContext.getSharedPreferences("dmconfig", 0); 3933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (prefs.contains(propName)) { 3943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ret = prefs.getString(propName, ""); 3953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (ret.length() == 0) { 3963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ret = null; 3973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ret; 4003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private boolean isThisForATT() { 4033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby boolean carrierATT = false; 4043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Cursor cr = null; 4053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 4063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String DATABASE_NAME = "DmConfigure.db"; 4073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SQLiteDatabase mdb = mContext.openOrCreateDatabase(DATABASE_NAME, 0, null); 4083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby cr = mdb.query("dmFlexs", null, "name='CarrierName'", null, null, null, null); 4093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String value = null; 4103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (cr != null) { 4123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (cr.moveToFirst() == true) { 4133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby int index = cr.getColumnIndex("value"); 4143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby value = cr.getString(index); 4153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("CarrierName = " + value); 4163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if ("ATT".equals(value) || "Att".equals(value) || "att".equals(value)) { 4183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby carrierATT = true; 4193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (Exception e) { 4233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby loge("Not able to get CarrierName from database, return false", e); 4243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } finally { 4253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (cr != null) { 4263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby cr.close(); 4273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return carrierATT; 4303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private boolean isPhoneTypeLTE() { 4333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return DMSettingsHelper.isPhoneTypeLTE(); 4343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String getDeviceType() { 4373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String devicetype = SystemProperties.get("ro.build.characteristics"); 4383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (((!TextUtils.isEmpty(devicetype)) && (devicetype.equals("tablet")))) { 4393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Device Type is Tablet"); 4403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 4413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby devicetype = "phone"; 4423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby logd("Device Type is Phone"); 4433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return devicetype; 4453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private static void logd(String s) { 4483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, s); 4493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private static void loge(String s) { 4523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.e(TAG, s); 4533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private static void loge(String s, Throwable tr) { 4563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.e(TAG, s, tr); 4573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 458edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu 459edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu private boolean isSprint() { 460edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu TelephonyManager tm = (TelephonyManager) mContext 461edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu .getSystemService(Context.TELEPHONY_SERVICE); 462edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu String simOperator = tm.getSimOperator(); 463edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu String imsi = tm.getSubscriberId(); 464edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu logd("simOperator: " + simOperator + " IMSI: " + imsi); 465edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu /* Use MEID for sprint */ 466edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu if ("310120".equals(simOperator) || (imsi != null && imsi.startsWith("310120"))) { 467edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu return true; 468edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu } else { 469edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu return false; 470edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu } 471edce33c18ace16dd69d3e570869cf7672243f041Dawn Liu } 4723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 473