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.diagmon; 183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.content.Context; 203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.telephony.PhoneStateListener; 213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.telephony.ServiceState; 223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.telephony.TelephonyManager; 233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport android.util.Log; 243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.DmtBasePlugin; 263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.DmtData; 273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.DmtPathUtils; 283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.DmtPluginNode; 293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport com.android.omadm.plugin.ErrorCodes; 303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.lang.reflect.Method; 323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.HashMap; 333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.Map; 343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypublic class DiagmonPlugin extends DmtBasePlugin { 363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private static final String TAG = "DiagmonPlugin"; 379de065bbc4c088bf1930abb85ccf07a2a0b0be7dAmit Mahajan private static final boolean DBG = true; 383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String mRootPath; 403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private Context mContext; 423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private Map<String, DmtData> nodeValues; 443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private boolean mHomeRoam = false; 463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private RFPhoneStateListener mRFPhoneStateListener; 483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public TelephonyManager mTelephonyManager; 503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final String DIAGMON_ROOT = DmtPathUtils.ROOTNODE; 523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static final String DIAGMON_PATH = "./ManagedObjects/DiagMon"; 543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DiagmonPlugin(Context ctx) { 573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mContext = ctx; 583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mTelephonyManager = (TelephonyManager) mContext 603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby .getSystemService(Context.TELEPHONY_SERVICE); 613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mRFPhoneStateListener = new RFPhoneStateListener(); 623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mTelephonyManager.listen(mRFPhoneStateListener, 633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mTelephonyManager.listen(mRFPhoneStateListener, 653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby PhoneStateListener.LISTEN_SERVICE_STATE); 663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @SuppressWarnings("unchecked") 693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public boolean init(String rootPath, Map parameters) { 703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.i(TAG, "Enter DiagmonPlugin.init"); 723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mRootPath = rootPath; 743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeValues = new HashMap<String, DmtData>(); 753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String tmpPath = DIAGMON_ROOT; 763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtData tmpNodeData = new DmtData("RF", DmtData.NODE); 773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeValues.put(tmpPath, tmpNodeData); 783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpPath = "RF"; 793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpNodeData = new DmtData("CurrentSystem|HomeRoam", DmtData.NODE); 803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeValues.put(tmpPath, tmpNodeData); 813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpPath = "RF/CurrentSystem"; 823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpNodeData = new DmtData("Data|Voice", DmtData.NODE); 833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeValues.put(tmpPath, tmpNodeData); 843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpPath = "RF/CurrentSystem/Data"; 853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpNodeData = new DmtData(null, DmtData.STRING); 863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeValues.put(tmpPath, tmpNodeData); 873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpPath = "RF/CurrentSystem/Voice"; 883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpNodeData = new DmtData(null, DmtData.STRING); 893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeValues.put(tmpPath, tmpNodeData); 903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpPath = "RF/HomeRoam"; 913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby tmpNodeData = new DmtData(null, DmtData.STRING); 923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeValues.put(tmpPath, tmpNodeData); 933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return true; 953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby //@Override 983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtPluginNode getNode(String path) { 993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtPluginNode node = new DmtPluginNode("", new DmtData("abc")); 1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby setOperationResult(ErrorCodes.SYNCML_DM_SUCCESS); 1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return node; 1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby //@Override 1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public DmtData getNodeValue(String path) { 1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.i(TAG, "rootPath=" + mRootPath); 1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.i(TAG, "path=" + path); 1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby //mContext.enforceCallingPermission("com.android.permission.READ_OMADM_SETTINGS", "Insufficient Permissions"); 1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtData data = null; 1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (path.equals("./ManagedObjects/DiagMon/RF/CurrentSystem/Data")) { 1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Get on CurrentSystem Value"); 1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String mCurrentSystem; 1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mCurrentSystem = getCurrentSystem(); 1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Current System Value: " + mCurrentSystem); 1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (Exception e) { 1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mCurrentSystem = "Unknown"; 1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Get on Current System Value failed"); 1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby e.printStackTrace(); 1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(mCurrentSystem); 1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby setOperationResult(ErrorCodes.SYNCML_DM_SUCCESS); 1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./ManagedObjects/DiagMon/RF/CurrentSystem/Voice")) { 1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Get on CurrentSystem Voice Value"); 1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String mCurrentSystemVoice; 1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (isVoiceCapable(mContext)) { 1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mCurrentSystemVoice = "1xRTT"; //As per VZW (36953) requirement value is 1xRTT 1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mCurrentSystemVoice = "Voice not available"; 1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Current System Voice Value: " + mCurrentSystemVoice); 1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(mCurrentSystemVoice); 1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby setOperationResult(ErrorCodes.SYNCML_DM_SUCCESS); 1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (path.equals("./ManagedObjects/DiagMon/RF/HomeRoam")) { 1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Get on HomeRoam Value"); 1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String sHomeRoam; 1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby sHomeRoam = getHomeRoam(); 1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "HomeRoam Value: " + sHomeRoam); 1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (Exception e) { 1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby sHomeRoam = "Unknown"; 1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Get on HomeRoam Value failed"); 1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby e.printStackTrace(); 1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data = new DmtData(sHomeRoam); 1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby setOperationResult(ErrorCodes.SYNCML_DM_SUCCESS); 1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby setOperationResult(ErrorCodes.SYNCML_DM_FAIL); 1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return data; 1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @SuppressWarnings("unchecked") 1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby //@Override 1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public Map getNodes(String rootPath) { 1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Enter DiagmonPlugin::getNodes()"); 1813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Map<String, DmtPluginNode> hMap = new HashMap<String, DmtPluginNode>(); 1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtPluginNode node; 1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Map<String, DmtData> nodes = getNodeMap(DmtPathUtils.toRelativePath(DIAGMON_PATH, 1863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mRootPath)); 1873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby for (String diagPath : nodes.keySet()) { 189a8e2fa040a362ece19771d8bb15fe6dc4fa67329Dawn Liu DmtData data = nodes.get(diagPath); 1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (diagPath.equals(DIAGMON_ROOT)) { 1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby diagPath = ""; 1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.i(TAG, "put node = '" + diagPath + "'"); 1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 196a8e2fa040a362ece19771d8bb15fe6dc4fa67329Dawn Liu node = new DmtPluginNode(diagPath, data); 1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby hMap.put(diagPath, node); 1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.i(TAG, "created the nodes."); 2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Leave DiagmonPlugin::getNodes()"); 2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return hMap; 2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public Map<String, DmtData> getNodeMap(String rootPath) { 2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Map<String, DmtData> nodeMap = new HashMap<String, DmtData>(); 2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (rootPath.equals(DIAGMON_ROOT)) { 2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeMap.putAll(nodeValues); 2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby for (String key : nodeValues.keySet()) { 2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (key.startsWith(rootPath)) { 2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if ((key.substring(rootPath.length(), (rootPath.length() + 1))).equals("/")) { 2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeMap.put(key, nodeValues.get(key)); 2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return nodeMap; 2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public boolean release() { 2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mTelephonyManager.listen(mRFPhoneStateListener, PhoneStateListener.LISTEN_NONE); 2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return true; 2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private final class RFPhoneStateListener extends PhoneStateListener { 2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby @Override 2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public void onServiceStateChanged(ServiceState serviceState) { 2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mHomeRoam = serviceState.getRoaming(); 2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.v(TAG, "Service State intent received: " + mHomeRoam); 2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String getCurrentSystem() { 2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby int mNetworkType = mTelephonyManager.getNetworkType(); 2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (DiagmonPlugin.DBG) { 2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Log.d(TAG, "Network Type value : " + mNetworkType); 2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (mNetworkType == TelephonyManager.NETWORK_TYPE_UNKNOWN) { 2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ("Unknown"); 2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (mNetworkType == TelephonyManager.NETWORK_TYPE_1xRTT) { 2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ("1xRTT"); 2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (mNetworkType == TelephonyManager.NETWORK_TYPE_EVDO_0 2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby || mNetworkType == TelephonyManager.NETWORK_TYPE_EVDO_A) { 2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ("EVDO"); 2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (mNetworkType == TelephonyManager.NETWORK_TYPE_LTE) { 2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ("LTE"); 2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else if (mNetworkType == TelephonyManager.NETWORK_TYPE_EHRPD) { 2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ("eHRPD"); 2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ("Unknown"); 2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String getHomeRoam() { 2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (mHomeRoam) { 2653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ("Roam"); 2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } else { 2673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return ("Home"); 2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private static boolean isVoiceCapable(Context context) { 2723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby TelephonyManager telephonyManager = 2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (telephonyManager == null) { 2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Class partypes[] = new Class[0]; 2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Method sIsVoiceCapable = TelephonyManager.class.getMethod("isVoiceCapable", partypes); 2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Object arglist[] = new Object[0]; 2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Object retobj = sIsVoiceCapable.invoke(telephonyManager, arglist); 2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return (Boolean) retobj; 2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (java.lang.reflect.InvocationTargetException e) { 2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // Failure, must be another device. 2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // Assume that it is voice capable. 2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby e.printStackTrace(); 2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (IllegalAccessException e) { 2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // Failure, must be an other device. 2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // Assume that it is voice capable. 2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby e.printStackTrace(); 2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } catch (NoSuchMethodException e) { 2923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby e.printStackTrace(); 2933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return true; 2953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 297