GetCellularSignalTool
Returns current cellular signal strength. Requires ACCESS_NETWORK_STATE (checked up front). On API 29+ reads the first cellular entry from SignalStrength.cellSignalStrengths (added in Q — calling it on API 28 throws NoSuchMethodError). On API 28 it uses the public TelephonyManager.getSignalStrength() + SignalStrength.getLevel() for the level; signal_asu and signal_dbm there come from the GSM reading and are null when it is unknown. Output: signal_asu, signal_dbm, level (excellent/good/moderate/poor/none), level_numeric (0-4). Returns ToolResult.error when permission is missing, no SignalStrength/cellular entry is available, or on failure.