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