std::vector<std::string> CNetworkInterfaceAndroid::GetNameServers() { std::vector<std::string> ret; CJNIList<CJNIInetAddress> lia = m_lp.getDnsServers(); for (int i=0; i < lia.size(); ++i) { ret.push_back(lia.get(i).getHostAddress()); } return ret; }
std::string CNetworkInterfaceAndroid::GetCurrentDefaultGateway() { CJNIList<CJNIRouteInfo> ris = m_lp.getRoutes(); for (int i = 0; i < ris.size(); ++i) { CJNIRouteInfo ri = ris.get(i); if (!ri.isDefaultRoute()) continue; CJNIInetAddress ia = ri.getGateway(); std::vector<char> adr = ia.getAddress(); return StringUtils::Format("%u.%u.%u.%u", adr[0], adr[1], adr[2], adr[3]); } return ""; }
bool CXBMCApp::ListApplications(vector<androidPackage> *applications) { CJNIList<CJNIApplicationInfo> packageList = GetPackageManager().getInstalledApplications(CJNIPackageManager::GET_ACTIVITIES); int numPackages = packageList.size(); for (int i = 0; i < numPackages; i++) { androidPackage newPackage; newPackage.packageName = packageList.get(i).packageName; newPackage.packageLabel = GetPackageManager().getApplicationLabel(packageList.get(i)).toString(); CJNIIntent intent = GetPackageManager().getLaunchIntentForPackage(newPackage.packageName); if (!intent || !intent.hasCategory("android.intent.category.LAUNCHER")) continue; applications->push_back(newPackage); } return true; }
std::vector<androidPackage> CXBMCApp::GetApplications() { CSingleLock lock(m_applicationsMutex); if (m_applications.empty()) { CJNIList<CJNIApplicationInfo> packageList = GetPackageManager().getInstalledApplications(CJNIPackageManager::GET_ACTIVITIES); int numPackages = packageList.size(); for (int i = 0; i < numPackages; i++) { CJNIIntent intent = GetPackageManager().getLaunchIntentForPackage(packageList.get(i).packageName); if (!intent && CJNIBuild::SDK_INT >= 21) intent = GetPackageManager().getLeanbackLaunchIntentForPackage(packageList.get(i).packageName); if (!intent) continue; androidPackage newPackage; newPackage.packageName = packageList.get(i).packageName; newPackage.packageLabel = GetPackageManager().getApplicationLabel(packageList.get(i)).toString(); newPackage.icon = packageList.get(i).icon; m_applications.push_back(newPackage); } } return m_applications; }
int CAndroidNetworkManager::FindNetworkId(const std::string& ssid) { CJNIWifiManager wifiManager(CJNIContext::getSystemService("wifi")); if (!wifiManager) return -1; CJNIList<CJNIWifiConfiguration> configs = wifiManager.getConfiguredNetworks(); int numConfigs = configs.size(); for (int i = 0; i < numConfigs; i++) { CJNIWifiConfiguration config = configs.get(i); if(config && config.getSSID() == "\"" + ssid + "\"") { return config.getnetworkId(); } } return -1; }
void CAndroidNetworkManager::GetWifiAccessPoints() { CAndroidConnectionList connections; CJNIWifiManager wifiManager(CJNIContext::getSystemService("wifi")); if(!wifiManager || !wifiManager.isWifiEnabled()) { m_wifiAccessPoints = connections; return; } CJNIList<CJNIScanResult> survey = wifiManager.getScanResults(); if (!survey) { m_wifiAccessPoints = connections; return; } int numAccessPoints = survey.size(); for (int i = 0; i < numAccessPoints; i++) { CJNIScanResult accessPoint = survey.get(i); { CAndroidConnectionList::iterator i; for(i = m_wifiAccessPoints.begin(); i < m_wifiAccessPoints.end(); i++) { CAndroidConnectionPtr connection(*i); if (!connection.get()) continue; if(accessPoint.SSID == connection->GetName()) { connection->Update(accessPoint); connections.push_back(connection); break; } } if (i == m_wifiAccessPoints.end()) { connections.push_back(CAndroidConnectionPtr(new CAndroidConnection(accessPoint, &m_wifiConnectionEvent))); } } } m_wifiAccessPoints = connections; }
std::string CNetworkInterfaceAndroid::GetHostName() { CJNIList<CJNILinkAddress> lla = m_lp.getLinkAddresses(); if (lla.size() == 0) return ""; int i = 0; for (;i < lla.size(); ++i) { if (lla.get(i).getAddress().getAddress().size() > 4) // IPV4 only continue; break; } if (i == lla.size()) return ""; CJNILinkAddress la = lla.get(i); return la.getAddress().getHostName(); }
std::string CNetworkInterfaceAndroid::GetCurrentNetmask() { CJNIList<CJNILinkAddress> lla = m_lp.getLinkAddresses(); if (lla.size() == 0) return ""; int i = 0; for (;i < lla.size(); ++i) { if (lla.get(i).getAddress().getAddress().size() > 4) // IPV4 only continue; break; } if (i == lla.size()) return ""; CJNILinkAddress la = lla.get(i); int prefix = la.getPrefixLength(); unsigned long mask = (0xFFFFFFFF << (32 - prefix)) & 0xFFFFFFFF; return StringUtils::Format("%lu.%lu.%lu.%lu", mask >> 24, (mask >> 16) & 0xFF, (mask >> 8) & 0xFF, mask & 0xFF); }
bool CAndroidJoystickState::Initialize(const CJNIViewInputDevice& inputDevice) { if (!inputDevice) return false; const std::string deviceName = inputDevice.getName(); // get the device ID m_deviceId = inputDevice.getId(); // get all motion ranges to be able to count the number of available buttons, hats and axis' const CJNIList<CJNIViewInputDeviceMotionRange> motionRanges = inputDevice.getMotionRanges(); for (int index = 0; index < motionRanges.size(); ++index) { const CJNIViewInputDeviceMotionRange motionRange = motionRanges.get(index); if (!motionRange.isFromSource(CJNIViewInputDevice::SOURCE_JOYSTICK) && !motionRange.isFromSource(CJNIViewInputDevice::SOURCE_GAMEPAD)) { CLog::Log(LOGDEBUG, "CAndroidJoystickState: ignoring axis %d from source %d for input device \"%s\" with ID %d", motionRange.getAxis(), motionRange.getSource(), deviceName.c_str(), m_deviceId); continue; } int axisId = motionRange.getAxis(); JoystickAxis axis { { axisId }, motionRange.getFlat(), motionRange.getFuzz(), motionRange.getMin(), motionRange.getMax(), motionRange.getRange(), motionRange.getResolution() }; // check if the axis ID belongs to a D-pad, analogue stick or trigger if (axisId == AMOTION_EVENT_AXIS_HAT_X || axisId == AMOTION_EVENT_AXIS_HAT_Y || axisId == AMOTION_EVENT_AXIS_X || axisId == AMOTION_EVENT_AXIS_Y || axisId == AMOTION_EVENT_AXIS_Z || axisId == AMOTION_EVENT_AXIS_RX || axisId == AMOTION_EVENT_AXIS_RY || axisId == AMOTION_EVENT_AXIS_RZ || axisId == AMOTION_EVENT_AXIS_LTRIGGER || axisId == AMOTION_EVENT_AXIS_RTRIGGER || axisId == AMOTION_EVENT_AXIS_GAS || axisId == AMOTION_EVENT_AXIS_BRAKE || axisId == AMOTION_EVENT_AXIS_THROTTLE || axisId == AMOTION_EVENT_AXIS_RUDDER || axisId == AMOTION_EVENT_AXIS_WHEEL) { // check if this axis is already known if (ContainsAxis(axisId, m_axes)) { CLog::Log(LOGWARNING, "CAndroidJoystickState: duplicate axis %s on input device \"%s\" with ID %d", PrintAxisIds(axis.ids).c_str(), deviceName.c_str(), m_deviceId); continue; } // map AMOTION_EVENT_AXIS_GAS to AMOTION_EVENT_AXIS_RTRIGGER and // AMOTION_EVENT_AXIS_BRAKE to AMOTION_EVENT_AXIS_LTRIGGER // to avoid duplicate events on controllers sending both events MapAxisIds(axisId, AMOTION_EVENT_AXIS_LTRIGGER, AMOTION_EVENT_AXIS_BRAKE, axis.ids); MapAxisIds(axisId, AMOTION_EVENT_AXIS_RTRIGGER, AMOTION_EVENT_AXIS_GAS, axis.ids); m_axes.push_back(axis); CLog::Log(LOGDEBUG, "CAndroidJoystickState: axis %s on input device \"%s\" with ID %d detected", PrintAxisIds(axis.ids).c_str(), deviceName.c_str(), m_deviceId); } else CLog::Log(LOGWARNING, "CAndroidJoystickState: ignoring unknown axis %d on input device \"%s\" with ID %d", axisId, deviceName.c_str(), m_deviceId); } // add the usual suspects m_buttons.push_back({ { AKEYCODE_BUTTON_A } }); m_buttons.push_back({ { AKEYCODE_BUTTON_B } }); m_buttons.push_back({ { AKEYCODE_BUTTON_C } }); m_buttons.push_back({ { AKEYCODE_BUTTON_X } }); m_buttons.push_back({ { AKEYCODE_BUTTON_Y } }); m_buttons.push_back({ { AKEYCODE_BUTTON_Z } }); m_buttons.push_back({ { AKEYCODE_BACK } }); m_buttons.push_back({ { AKEYCODE_MENU } }); m_buttons.push_back({ { AKEYCODE_HOME } }); m_buttons.push_back({ { AKEYCODE_BUTTON_SELECT } }); m_buttons.push_back({ { AKEYCODE_BUTTON_MODE } }); m_buttons.push_back({ { AKEYCODE_BUTTON_START } }); m_buttons.push_back({ { AKEYCODE_BUTTON_L1 } }); m_buttons.push_back({ { AKEYCODE_BUTTON_R1 } }); m_buttons.push_back({ { AKEYCODE_BUTTON_L2 } }); m_buttons.push_back({ { AKEYCODE_BUTTON_R2 } }); m_buttons.push_back({ { AKEYCODE_BUTTON_THUMBL } }); m_buttons.push_back({ { AKEYCODE_BUTTON_THUMBR } }); // check if there are no buttons or axes at all if (GetButtonCount() == 0 && GetAxisCount() == 0) { CLog::Log(LOGWARNING, "CAndroidJoystickState: no buttons, hats or axes detected for input device \"%s\" with ID %d", deviceName.c_str(), m_deviceId); return false; } m_analogState.assign(GetAxisCount(), 0.0f); return true; }