Skip to content

Commit c1444c0

Browse files
committed
Android: support Wifi & Battery by using termux-api
1 parent b424c52 commit c1444c0

File tree

7 files changed

+119
-12
lines changed

7 files changed

+119
-12
lines changed

CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ elseif(ANDROID)
351351
list(APPEND LIBFASTFETCH_SRC
352352
src/common/networking_linux.c
353353
src/common/processing_linux.c
354-
src/detection/battery/battery_nosupport.c
354+
src/detection/battery/battery_android.c
355355
src/detection/bios/bios_nosupport.c
356356
src/detection/board/board_nosupport.c
357357
src/detection/brightness/brightness_nosupport.c
@@ -378,7 +378,7 @@ elseif(ANDROID)
378378
src/detection/terminalshell/terminalshell_linux.c
379379
src/detection/uptime/uptime_linux.c
380380
src/detection/users/users_linux.c
381-
src/detection/wifi/wifi_nosupport.c
381+
src/detection/wifi/wifi_android.c
382382
src/detection/wmtheme/wmtheme_nosupport.c
383383
src/util/platform/FFPlatform_unix.c
384384
)
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include "fastfetch.h"
2+
#include "battery.h"
3+
4+
#include "common/processing.h"
5+
#include "common/properties.h"
6+
7+
const char* ffDetectBatteryImpl(FF_MAYBE_UNUSED FFinstance* instance, FFlist* results)
8+
{
9+
FF_STRBUF_AUTO_DESTROY buffer;
10+
ffStrbufInit(&buffer);
11+
12+
if(ffProcessAppendStdOut(&buffer, (char* const[]){
13+
FASTFETCH_TARGET_DIR_ROOT "/libexec/termux-api",
14+
"BatteryStatus"
15+
}))
16+
return "Starting `" FASTFETCH_TARGET_DIR_ROOT "/libexec/termux-api" " BatteryStatus` failed";
17+
18+
BatteryResult* battery = ffListAdd(results);
19+
battery->temperature = FF_BATTERY_TEMP_UNSET;
20+
ffStrbufInit(&battery->manufacturer);
21+
ffStrbufInit(&battery->modelName);
22+
ffStrbufInit(&battery->status);
23+
ffStrbufInit(&battery->technology);
24+
25+
if(ffParsePropLines(buffer.chars, "\"percentage\": ", &battery->status))
26+
{
27+
battery->capacity = ffStrbufToDouble(&battery->status);
28+
ffStrbufClear(&battery->status);
29+
}
30+
31+
if(ffParsePropLines(buffer.chars, "\"status\": ", &battery->status))
32+
{
33+
ffStrbufTrimRight(&battery->status, ',');
34+
ffStrbufTrim(&battery->status, '"');
35+
}
36+
37+
return NULL;
38+
}

src/detection/wifi/wifi_android.c

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#include "wifi.h"
2+
3+
#include "common/processing.h"
4+
#include "common/properties.h"
5+
6+
const char* ffDetectWifi(FF_MAYBE_UNUSED const FFinstance* instance, FFlist* result)
7+
{
8+
FF_STRBUF_AUTO_DESTROY buffer;
9+
ffStrbufInit(&buffer);
10+
11+
if(ffProcessAppendStdOut(&buffer, (char* const[]){
12+
FASTFETCH_TARGET_DIR_ROOT "/libexec/termux-api",
13+
"WifiConnectionInfo"
14+
}))
15+
return "Starting `" FASTFETCH_TARGET_DIR_ROOT "/libexec/termux-api" " WifiConnectionInfo` failed";
16+
17+
FFWifiResult* item = (FFWifiResult*)ffListAdd(result);
18+
ffStrbufInit(&item->inf.description);
19+
ffStrbufInit(&item->inf.status);
20+
ffStrbufInit(&item->conn.status);
21+
ffStrbufInit(&item->conn.ssid);
22+
ffStrbufInit(&item->conn.macAddress);
23+
ffStrbufInit(&item->conn.protocol);
24+
ffStrbufInit(&item->conn.security);
25+
item->conn.signalQuality = 0.0/0.0;
26+
item->conn.rxRate = 0.0/0.0;
27+
item->conn.txRate = 0.0/0.0;
28+
29+
if(!ffParsePropLines(buffer.chars, "\"supplicant_state\": ", &item->inf.status))
30+
ffStrbufAppendS(&item->inf.status, "Unknown");
31+
32+
{
33+
ffStrbufTrimRight(&item->inf.status, ',');
34+
ffStrbufTrim(&item->inf.status, '"');
35+
if(!ffStrbufEqualS(&item->inf.status, "COMPLETED"))
36+
return NULL;
37+
}
38+
39+
if(ffParsePropLines(buffer.chars, "\"rssi\": ", &item->inf.description))
40+
{
41+
double rssi = ffStrbufToDouble(&item->inf.description);
42+
item->conn.signalQuality = rssi >= -50 ? 100 : rssi <= -100 ? 0 : (rssi + 100) * 2;
43+
ffStrbufClear(&item->inf.description);
44+
}
45+
46+
if(ffParsePropLines(buffer.chars, "\"network_id\": ", &item->inf.description))
47+
ffStrbufTrimRight(&item->inf.description, ',');
48+
49+
if(ffParsePropLines(buffer.chars, "\"bssid\": ", &item->conn.macAddress))
50+
{
51+
ffStrbufTrimRight(&item->conn.macAddress, ',');
52+
ffStrbufTrim(&item->conn.macAddress, '"');
53+
}
54+
55+
if(ffParsePropLines(buffer.chars, "\"ssid\": ", &item->conn.ssid))
56+
{
57+
ffStrbufTrimRight(&item->conn.ssid, ',');
58+
ffStrbufTrim(&item->conn.ssid, '"');
59+
}
60+
61+
return NULL;
62+
}

src/detection/wifi/wifi_apple.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@
119119
ffStrbufAppendF(&item->conn.security, "Unknown (%ld)", inf.security);
120120
break;
121121
}
122+
else
123+
ffStrbufAppendS(&item->conn.security, "Insecure");
122124
}
123125
return NULL;
124126
}

src/detection/wifi/wifi_linux.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,6 @@ static const char* detectWifiWithLibnm(const FFinstance* instance, FFlist* resul
161161
ffStrbufSetS(&item->conn.protocol, "802.11a/b/g");
162162
}
163163
}
164-
if(!item->conn.protocol.length)
165-
ffStrbufAppendS(&item->conn.protocol, "802.11");
166164

167165
NM80211ApFlags flags = ffnm_access_point_get_flags(ap);
168166
NM80211ApSecurityFlags wpaFlags = ffnm_access_point_get_wpa_flags(ap);
@@ -188,7 +186,10 @@ static const char* detectWifiWithLibnm(const FFinstance* instance, FFlist* resul
188186
|| (rsnFlags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) {
189187
ffStrbufAppendS(&item->conn.security, "802.1X ");
190188
}
191-
ffStrbufTrimRight(&item->conn.security, ' ');
189+
if (!item->conn.security.length)
190+
ffStrbufAppendS(&item->conn.security, "Insecure");
191+
else
192+
ffStrbufTrimRight(&item->conn.security, ' ');
192193
}
193194

194195
ffg_object_unref(client);
@@ -294,9 +295,10 @@ static const char* detectWifiWithIoctls(FF_MAYBE_UNUSED const FFinstance* instan
294295
case IW_ENCODE_ALG_AES_CMAC:
295296
ffStrbufAppendS(&item->conn.security, "CMAC");
296297
break;
298+
default:
299+
ffStrbufAppendF(&item->conn.security, "Unknown (%d)", (int) iwe->alg);
300+
break;
297301
}
298-
} else {
299-
ffStrbufAppendS(&item->conn.security, "unknown");
300302
}
301303

302304
close(sock);

src/detection/wifi/wifi_windows.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ const char* ffDetectWifi(FF_MAYBE_UNUSED const FFinstance* instance, FFlist* res
198198
if(connInfo->wlanSecurityAttributes.bOneXEnabled)
199199
ffStrbufAppendS(&item->conn.security, " 802.11X");
200200
}
201+
else
202+
ffStrbufAppendS(&item->conn.security, "Insecure");
201203

202204
ffWlanFreeMemory(connInfo);
203205
}

src/modules/wifi.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@ void ffPrintWifi(FFinstance* instance)
3232
ffPrintLogoAndKey(instance, FF_WIFI_MODULE_NAME, moduleIndex, &instance->config.wifi.key);
3333
if(item->conn.ssid.length)
3434
{
35-
printf("%s - %s - %s\n",
36-
item->conn.ssid.chars,
37-
item->conn.protocol.chars,
38-
item->conn.security.length > 0 ? item->conn.security.chars : "insecure"
39-
);
35+
ffStrbufWriteTo(&item->conn.ssid, stdout);
36+
if(item->conn.protocol.length)
37+
printf("- %s", item->conn.protocol.chars);
38+
if(item->conn.security.length)
39+
printf("- %s", item->conn.security.chars);
40+
putchar('\n');
4041
}
4142
else
4243
{

0 commit comments

Comments
 (0)