From 0a0240050525d6e92b4012f219777489c1ebe062 Mon Sep 17 00:00:00 2001 From: Luxferre Date: Wed, 21 Oct 2026 11:11:45 +0300 Subject: [PATCH] feat(dwm): add dynamic plugin system with xdrawer, dialer, and calllog plugins --- overlay/rootfs/usr/bin/XDrawer | 2 +- overlay/rootfs/usr/bin/dwm | Bin 48032 -> 52168 bytes overlay/rootfs/usr/bin/dwm-plugin | Bin 0 -> 5348 bytes overlay/rootfs/usr/bin/sxmo_appmenu.sh | 1 + overlay/rootfs/usr/bin/sxmo_modemdial.sh | 133 ++++ overlay/rootfs/usr/bin/xcalllog | 1 + overlay/rootfs/usr/bin/xdialer | 1 + overlay/rootfs/usr/bin/xdrawer | Bin 25988 -> 10 bytes overlay/rootfs/usr/lib/dwm/plugins/calllog.so | Bin 0 -> 62868 bytes overlay/rootfs/usr/lib/dwm/plugins/dialer.so | Bin 0 -> 62852 bytes overlay/rootfs/usr/lib/dwm/plugins/xdrawer.so | Bin 0 -> 25988 bytes prebuilt/sxmo-x11/usr/bin/XDrawer | 2 +- prebuilt/sxmo-x11/usr/bin/dwm | Bin 48032 -> 52168 bytes prebuilt/sxmo-x11/usr/bin/dwm-plugin | Bin 0 -> 5348 bytes prebuilt/sxmo-x11/usr/bin/xcalllog | 1 + prebuilt/sxmo-x11/usr/bin/xdialer | 1 + prebuilt/sxmo-x11/usr/bin/xdrawer | Bin 25988 -> 10 bytes .../sxmo-x11/usr/lib/dwm/plugins/calllog.so | Bin 0 -> 62868 bytes .../sxmo-x11/usr/lib/dwm/plugins/dialer.so | Bin 0 -> 62852 bytes .../sxmo-x11/usr/lib/dwm/plugins/xdrawer.so | Bin 0 -> 25988 bytes scripts/build-sxmo-x11.sh | 64 +- src/dwm-plugins/calllog_plugin.cpp | 627 +++++++++++++++ src/dwm-plugins/dialer_plugin.cpp | 744 ++++++++++++++++++ src/dwm-plugins/dwm_plugin_runner.c | 116 +++ src/dwm-plugins/phone_data.h | 625 +++++++++++++++ src/sxmo-dwm/dwm.c | 215 ++++- src/sxmo-dwm/dwm_plugin.h | 45 ++ src/xdrawer/xdrawer.cpp | 33 +- 28 files changed, 2589 insertions(+), 22 deletions(-) create mode 100755 overlay/rootfs/usr/bin/dwm-plugin create mode 100755 overlay/rootfs/usr/bin/sxmo_modemdial.sh create mode 120000 overlay/rootfs/usr/bin/xcalllog create mode 120000 overlay/rootfs/usr/bin/xdialer mode change 100755 => 120000 overlay/rootfs/usr/bin/xdrawer create mode 100755 overlay/rootfs/usr/lib/dwm/plugins/calllog.so create mode 100755 overlay/rootfs/usr/lib/dwm/plugins/dialer.so create mode 100755 overlay/rootfs/usr/lib/dwm/plugins/xdrawer.so create mode 100755 prebuilt/sxmo-x11/usr/bin/dwm-plugin create mode 120000 prebuilt/sxmo-x11/usr/bin/xcalllog create mode 120000 prebuilt/sxmo-x11/usr/bin/xdialer mode change 100755 => 120000 prebuilt/sxmo-x11/usr/bin/xdrawer create mode 100755 prebuilt/sxmo-x11/usr/lib/dwm/plugins/calllog.so create mode 100755 prebuilt/sxmo-x11/usr/lib/dwm/plugins/dialer.so create mode 100755 prebuilt/sxmo-x11/usr/lib/dwm/plugins/xdrawer.so create mode 100644 src/dwm-plugins/calllog_plugin.cpp create mode 100644 src/dwm-plugins/dialer_plugin.cpp create mode 100644 src/dwm-plugins/dwm_plugin_runner.c create mode 100644 src/dwm-plugins/phone_data.h create mode 100644 src/sxmo-dwm/dwm_plugin.h diff --git a/overlay/rootfs/usr/bin/XDrawer b/overlay/rootfs/usr/bin/XDrawer index 8199a5b..e492465 120000 --- a/overlay/rootfs/usr/bin/XDrawer +++ b/overlay/rootfs/usr/bin/XDrawer @@ -1 +1 @@ -xdrawer \ No newline at end of file +dwm-plugin \ No newline at end of file diff --git a/overlay/rootfs/usr/bin/dwm b/overlay/rootfs/usr/bin/dwm index 8d4ac631286499b9a798106e4f8bcdf166dc8170..87e21c57cff262da904579d5218947bb142e28fc 100755 GIT binary patch delta 21740 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/dev/null || true)" + if [ -n "$CLEANEDNUMBER" ] && [ "$NUMBER" != "$CLEANEDNUMBER" ]; then + NUMBER="$(cat </dev/null || true + sxmo_log "Starting call with CALLID: $CALLID" + + sxmo_log "Invoking dial hook" + sxmo_hook_dial.sh + + if ! sxmo_modemaudio.sh setup_audio; then + sxmo_notify_user.sh --urgency=critical "We failed to setup call audio" + mmcli -m any --voice-delete-call="$CALLID" + return 1 + fi + + if ! sxmo_modemcall.sh pickup "$CALLID"; then + sxmo_modemaudio.sh reset_audio + mmcli -m any --voice-delete-call="$CALLID" + return 1 + fi + + sxmo_jobs.sh start proximity_lock sxmo_proximitylock.sh + sxmo_hook_statusbar.sh state & + + sxmo_jobs.sh start incall_menu sxmo_modemcall.sh incall_menu +} + +dial_ussd() { + + USSD="$1" + DBUS_MODEM=$(mmcli -J -L | jq -r '."modem-list"[]') + MM_BUS="org.freedesktop.ModemManager1" + USSD_IFACE="org.freedesktop.ModemManager1.Modem.Modem3gpp.Ussd" + + sxmo_log "Dialling USSD: $USSD" + OUTPUT=$(busctl --json=short call "$MM_BUS" "$DBUS_MODEM" "$USSD_IFACE" Initiate "s" "$USSD" | jq -r '.data[]') + + sxmo_terminal.sh sxmo_ussd.sh "$DBUS_MODEM" "Unknown" "$OUTPUT" & +} + +dial_menu() { + if [ -n "${DISPLAY:-}" ] && command -v xdialer >/dev/null 2>&1; then + exec xdialer + fi + + # Initial menu with recently contacted people + NUMBER="$( + grep . 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 X3VDbg;LV-zSPt&p+%zFdr|16wN3^d- diff --git a/overlay/rootfs/usr/bin/xdrawer b/overlay/rootfs/usr/bin/xdrawer new file mode 120000 index 0000000..e492465 --- /dev/null +++ b/overlay/rootfs/usr/bin/xdrawer @@ -0,0 +1 @@ +dwm-plugin \ No newline at end of file diff --git a/overlay/rootfs/usr/lib/dwm/plugins/calllog.so b/overlay/rootfs/usr/lib/dwm/plugins/calllog.so new file mode 100755 index 0000000000000000000000000000000000000000..4f02506af1f552bb2a7656c576adc641f41efbcb GIT binary patch literal 62868 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%0AM$^>yzG1`Z}Yc=t=Zn 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 literal 0 HcmV?d00001 diff --git a/overlay/rootfs/usr/lib/dwm/plugins/xdrawer.so b/overlay/rootfs/usr/lib/dwm/plugins/xdrawer.so new file mode 100755 index 0000000000000000000000000000000000000000..bc6b025897d4893d47cd67f95be9bef1c8d914eb GIT binary patch literal 25988 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 X3VDbg;LV-zSPt&p+%zFdr|16wN3^d- diff --git a/prebuilt/sxmo-x11/usr/bin/xdrawer b/prebuilt/sxmo-x11/usr/bin/xdrawer new file mode 120000 index 0000000..e492465 --- /dev/null +++ b/prebuilt/sxmo-x11/usr/bin/xdrawer @@ -0,0 +1 @@ +dwm-plugin \ No newline at end of file diff --git a/prebuilt/sxmo-x11/usr/lib/dwm/plugins/calllog.so b/prebuilt/sxmo-x11/usr/lib/dwm/plugins/calllog.so new file mode 100755 index 0000000000000000000000000000000000000000..4f02506af1f552bb2a7656c576adc641f41efbcb GIT binary patch literal 62868 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%0AM$^>yzG1`Z}Yc=t=Zn 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 literal 0 HcmV?d00001 diff --git a/prebuilt/sxmo-x11/usr/lib/dwm/plugins/xdrawer.so b/prebuilt/sxmo-x11/usr/lib/dwm/plugins/xdrawer.so new file mode 100755 index 0000000000000000000000000000000000000000..bc6b025897d4893d47cd67f95be9bef1c8d914eb GIT binary patch literal 25988 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 +#include +#include +#include +#include +#include +#ifndef _EVDEVK +#define _EVDEVK(_v) (0x10081000 + (_v)) +#endif +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../sxmo-dwm/dwm_plugin.h" +#include "phone_data.h" + +namespace { + +using namespace bananarchy; + +volatile sig_atomic_t gRunning = 1; + +void handleSignal(int) { + gRunning = 0; +} + +bool isCallRinging() { + std::string ringPidFile = getRuntimeFile("sxmo.ring.pid"); + int pid = readIntFile(ringPidFile, -1); + if (pid > 0 && ::kill(pid, 0) == 0) { + return true; + } + return ::system("pidof -s sxmo_RepeatRing.sh >/dev/null 2>&1") == 0; +} + +int calllog_run_main(int, char**) { + gRunning = 1; + int64_t startMs = nowMs(); + + std::string pidPath = getRuntimeFile("xcalllog.pid"); + int existingPid = readIntFile(pidPath, -1); + if (existingPid > 0 && existingPid != static_cast(::getpid())) { + if (::kill(existingPid, 0) == 0) { + return 0; + } + } + writeIntFile(pidPath, static_cast(::getpid())); + + struct sigaction sa {}; + sa.sa_handler = handleSignal; + sigemptyset(&sa.sa_mask); + sigaction(SIGTERM, &sa, nullptr); + sigaction(SIGINT, &sa, nullptr); + + Display* dpy = XOpenDisplay(nullptr); + if (!dpy) { + ::unlink(pidPath.c_str()); + return 1; + } + + int screen = DefaultScreen(dpy); + Window root = RootWindow(dpy, screen); + Visual* visual = DefaultVisual(dpy, screen); + Colormap cmap = DefaultColormap(dpy, screen); + + XSetWindowAttributes swa{}; + swa.override_redirect = True; + swa.background_pixel = 0x222222; + swa.border_pixel = 0x005577; + swa.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | + StructureNotifyMask | VisibilityChangeMask; + + Window win = XCreateWindow( + dpy, root, kWinX, kWinY, kWinWidth, kWinHeight, 0, + DefaultDepth(dpy, screen), CopyFromParent, visual, + CWOverrideRedirect | CWBackPixel | CWBorderPixel | CWEventMask, &swa); + + XClassHint ch{}; + char resName[] = "xcalllog"; + char resClass[] = "XCallLog"; + ch.res_name = resName; + ch.res_class = resClass; + XSetClassHint(dpy, win, &ch); + XStoreName(dpy, win, "Call Log"); + + XMapRaised(dpy, win); + XSync(dpy, False); + + for (int i = 0; i < 60; ++i) { + if (XGrabKeyboard(dpy, win, True, GrabModeAsync, GrabModeAsync, CurrentTime) == + GrabSuccess) { + break; + } + usleep(5000); + } + + Pixmap pix = XCreatePixmap(dpy, win, kWinWidth, kWinHeight, DefaultDepth(dpy, screen)); + GC gc = XCreateGC(dpy, pix, 0, nullptr); + XftDraw* xftDraw = XftDrawCreate(dpy, pix, visual, cmap); + + PangoFontMap* fontMap = pango_xft_get_font_map(dpy, screen); + PangoContext* pangoCtx = pango_font_map_create_context(fontMap); + + PangoLayout* layoutMain = pango_layout_new(pangoCtx); + PangoFontDescription* descMain = + pango_font_description_from_string("Fira Code, DejaVuSansM Nerd Font 14px"); + pango_layout_set_font_description(layoutMain, descMain); + + PangoLayout* layoutSmall = pango_layout_new(pangoCtx); + PangoFontDescription* descSmall = + pango_font_description_from_string("Fira Code, DejaVuSansM Nerd Font 11px"); + pango_layout_set_font_description(layoutSmall, descSmall); + + PangoLayout* layoutIcon = pango_layout_new(pangoCtx); + PangoFontDescription* descIcon = + pango_font_description_from_string("DejaVuSansM Nerd Font, Fira Code 15px"); + pango_layout_set_font_description(layoutIcon, descIcon); + + auto allocColor = [&](const char* hex) { + XftColor col{}; + XftColorAllocName(dpy, visual, cmap, hex, &col); + return col; + }; + + XftColor colWhite = allocColor("#ffffff"); + XftColor colLight = allocColor("#dddddd"); + XftColor colMuted = allocColor("#999999"); + XftColor colYellow = allocColor("#f4d03f"); + XftColor colGreen = allocColor("#2ecc71"); + XftColor colBlue = allocColor("#5dade2"); + XftColor colRed = allocColor("#e74c3c"); + + ContactBook book; + book.load(); + std::vector allLogs = loadCallLog(book); + std::vector filtered; + + int filterTab = 0; // 0 = All, 1 = Missed, 2 = In, 3 = Out + int selected = 0; + + auto applyFilter = [&]() { + filtered.clear(); + for (const auto& item : allLogs) { + if (filterTab == 1 && item.direction != CallDirection::Missed) continue; + if (filterTab == 2 && item.direction != CallDirection::Incoming) continue; + if (filterTab == 3 && item.direction != CallDirection::Outgoing) continue; + filtered.push_back(item); + } + if (selected >= static_cast(filtered.size())) { + selected = std::max(0, static_cast(filtered.size()) - 1); + } + }; + + applyFilter(); + + auto drawPango = [&](PangoLayout* layout, XftColor* color, int x, int y, int h, + const std::string& text, int maxW = -1) { + pango_layout_set_text(layout, text.c_str(), static_cast(text.size())); + if (maxW > 0) { + pango_layout_set_width(layout, maxW * PANGO_SCALE); + pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END); + } else { + pango_layout_set_width(layout, -1); + pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_NONE); + } + PangoRectangle ink{}, logical{}; + pango_layout_get_pixel_extents(layout, &ink, &logical); + int ty = y + (h - logical.height) / 2; + pango_xft_render_layout(xftDraw, color, layout, x * PANGO_SCALE, + ty * PANGO_SCALE); + }; + + auto pangoWidth = [&](PangoLayout* layout, const std::string& text) -> int { + pango_layout_set_width(layout, -1); + pango_layout_set_text(layout, text.c_str(), static_cast(text.size())); + PangoRectangle ink{}, logical{}; + pango_layout_get_pixel_extents(layout, &ink, &logical); + return logical.width; + }; + + constexpr int kHeaderH = 34; + constexpr int kSoftbarH = 26; + constexpr int kListY = kHeaderH; + constexpr int kListH = kWinHeight - kHeaderH - kSoftbarH; // 236px + constexpr int kVisibleRows = 5; + + const char* kTabLabels[4] = {"All", "Missed", "In", "Out"}; + + auto render = [&]() { + XSetForeground(dpy, gc, 0x222222); + XFillRectangle(dpy, pix, gc, 0, 0, kWinWidth, kWinHeight); + + // 1. Top Filter Tabs Bar (y = 0..34) + XSetForeground(dpy, gc, 0x1c1c1c); + XFillRectangle(dpy, pix, gc, 0, 0, kWinWidth, kHeaderH); + + for (int t = 0; t < 4; ++t) { + int tx = (t * kWinWidth) / 4; + int tw = ((t + 1) * kWinWidth) / 4 - tx; + bool active = (t == filterTab); + if (active) { + XSetForeground(dpy, gc, 0x005577); + XFillRectangle(dpy, pix, gc, tx, 0, tw, kHeaderH - 2); + XSetForeground(dpy, gc, 0xf4d03f); + XFillRectangle(dpy, pix, gc, tx, kHeaderH - 3, tw, 3); + } + std::string lbl(kTabLabels[t]); + int lw = pangoWidth(layoutSmall, lbl); + drawPango(layoutSmall, active ? &colWhite : &colMuted, + tx + (tw - lw) / 2, 0, kHeaderH - 2, lbl); + } + + XSetForeground(dpy, gc, 0x444444); + XFillRectangle(dpy, pix, gc, 0, kHeaderH - 1, kWinWidth, 1); + + // 2. Call Log List (y = 34..270, 5 visible rows) + if (filtered.empty()) { + drawPango(layoutIcon, &colMuted, 112, kListY + 60, 24, kIconPhoneLog); + drawPango(layoutMain, &colMuted, 52, kListY + 90, 28, "No call history", 160); + drawPango(layoutSmall, &colMuted, 24, kListY + 120, 20, + "Press 0-9 or Left Softkey to dial", 200); + } else { + int total = static_cast(filtered.size()); + int scrollOffset = 0; + if (selected >= kVisibleRows) { + scrollOffset = selected - kVisibleRows + 1; + } + if (scrollOffset > std::max(0, total - kVisibleRows)) { + scrollOffset = std::max(0, total - kVisibleRows); + } + + for (int i = 0; i < kVisibleRows; ++i) { + int idx = scrollOffset + i; + if (idx >= total) { + break; + } + int ry = kListY + (i * kListH) / kVisibleRows; + int nextRy = kListY + ((i + 1) * kListH) / kVisibleRows; + int rowH = nextRy - ry; + bool isSel = (idx == selected); + + XSetForeground(dpy, gc, + isSel ? 0x005577 : ((i % 2 == 0) ? 0x282828 : 0x2e2e2e)); + XFillRectangle(dpy, pix, gc, 0, ry, kWinWidth, rowH); + + if (isSel) { + XSetForeground(dpy, gc, 0xf4d03f); + XFillRectangle(dpy, pix, gc, 0, ry, 4, rowH); + } + + const CallLogItem& item = filtered[idx]; + const char* dirIcon = kIconInCall; + XftColor* dirCol = &colGreen; + const char* dirName = "In"; + if (item.direction == CallDirection::Outgoing) { + dirIcon = kIconOutCall; + dirCol = &colBlue; + dirName = "Out"; + } else if (item.direction == CallDirection::Missed) { + dirIcon = kIconMissedCall; + dirCol = &colRed; + dirName = "Missed"; + } + + drawPango(layoutIcon, dirCol, 8, ry, rowH, dirIcon); + + std::string dur = formatDuration(item.durationSec); + int durW = 0; + if (!dur.empty()) { + durW = pangoWidth(layoutSmall, dur); + drawPango(layoutSmall, isSel ? &colYellow : &colGreen, + kWinWidth - durW - 6, ry + 3, 22, dur); + } + + std::string primary = item.contactName.empty() ? item.number : item.contactName; + XftColor* priCol = (item.direction == CallDirection::Missed && !isSel) + ? &colRed + : (isSel ? &colWhite : &colLight); + int priMaxW = (durW > 0) ? (kWinWidth - 36 - durW - 6) : 200; + drawPango(layoutMain, priCol, 30, ry + 3, 22, primary, priMaxW); + + int timeW = pangoWidth(layoutSmall, item.displayTime); + drawPango(layoutSmall, isSel ? &colWhite : &colMuted, + kWinWidth - timeW - 6, ry + 24, 19, item.displayTime); + + std::string secondary = + !item.contactName.empty() ? item.number : std::string(dirName); + int secMaxW = std::max(60, kWinWidth - 36 - timeW - 8); + drawPango(layoutSmall, isSel ? &colYellow : &colMuted, 30, ry + 24, 19, + secondary, secMaxW); + } + + if (total > kVisibleRows) { + int sbH = std::max(16, (kListH * kVisibleRows) / total); + int sbY = kListY + + ((kListH - sbH) * scrollOffset) / (total - kVisibleRows); + XSetForeground(dpy, gc, 0x666666); + XFillRectangle(dpy, pix, gc, kWinWidth - 3, sbY, 3, sbH); + } + } + + // 3. Bottom Softkey Bar (y = 270..296) + int sbY = kWinHeight - kSoftbarH; + XSetForeground(dpy, gc, 0x181818); + XFillRectangle(dpy, pix, gc, 0, sbY, kWinWidth, kSoftbarH); + XSetForeground(dpy, gc, 0x444444); + XFillRectangle(dpy, pix, gc, 0, sbY, kWinWidth, 1); + + drawPango(layoutSmall, &colLight, 6, sbY + 1, kSoftbarH - 1, "Dialer"); + std::string centerLabel = "CALL"; + int cw = pangoWidth(layoutMain, centerLabel); + drawPango(layoutMain, filtered.empty() ? &colMuted : &colGreen, + (kWinWidth - cw) / 2, sbY + 1, kSoftbarH - 1, centerLabel); + std::string rightLabel = "Close"; + int rw = pangoWidth(layoutSmall, rightLabel); + drawPango(layoutSmall, &colLight, kWinWidth - rw - 6, sbY + 1, + kSoftbarH - 1, rightLabel); + + XCopyArea(dpy, pix, win, gc, 0, 0, kWinWidth, kWinHeight, 0, 0); + XFlush(dpy); + }; + + render(); + + int64_t startupIgnoreUntilMs = startMs + 140; + bool initialSoftkeysReleased = (querySoftkeysDown(dpy) == 0); + int softkeyPending = 0; + int64_t softkeyDeadlineMs = 0; + bool closedByKey = false; + std::string numberToCall; + std::string dialerInitArg; + bool openDialerAfter = false; + bool launchXDrawer = false; + int xfd = ConnectionNumber(dpy); + + while (gRunning) { + if (!initialSoftkeysReleased && querySoftkeysDown(dpy) == 0) { + initialSoftkeysReleased = true; + } + + while (XPending(dpy)) { + XEvent ev; + XNextEvent(dpy, &ev); + if (!initialSoftkeysReleased && querySoftkeysDown(dpy) == 0) { + initialSoftkeysReleased = true; + } + + if (ev.type == Expose) { + if (ev.xexpose.count == 0) { + render(); + } + } else if (ev.type == VisibilityNotify) { + if (ev.xvisibility.state != VisibilityUnobscured) { + XRaiseWindow(dpy, win); + XFlush(dpy); + } + } else if (ev.type == KeyRelease) { + KeySym sym = XLookupKeysym(&ev.xkey, 0); + if (sym == XK_Menu || sym == XF86XK_KbdLcdMenu1 || + sym == XF86XK_Back || sym == XF86XK_KbdLcdMenu2 || + ev.xkey.keycode == 135 || ev.xkey.keycode == 166) { + if (querySoftkeysDown(dpy) == 0) { + initialSoftkeysReleased = true; + } + } + } else if (ev.type == KeyPress) { + KeySym sym = XLookupKeysym(&ev.xkey, 0); + bool isLeftSoft = (sym == XK_Menu || sym == XF86XK_KbdLcdMenu1 || + ev.xkey.keycode == 135); + bool isRightSoft = (sym == XF86XK_Back || sym == XF86XK_KbdLcdMenu2 || + ev.xkey.keycode == 166); + + if (isLeftSoft || isRightSoft) { + if (!initialSoftkeysReleased || nowMs() < startupIgnoreUntilMs) { + continue; + } + int which = (isLeftSoft ? 1 : 0) | (isRightSoft ? 2 : 0); + softkeyPending |= which | querySoftkeysDown(dpy); + if (softkeyPending == 3) { + writeSoftkeySuppress(nowMs() + 500); + launchXDrawer = true; + closedByKey = true; + gRunning = 0; + break; + } + if (softkeyDeadlineMs == 0) { + softkeyDeadlineMs = nowMs() + 45; + } + continue; + } + + // Pressing 0-9, *, or # in Call Log switches directly to Dialer with that char + char dialCh = mapDialKey(sym, ev.xkey.keycode, ev.xkey.state); + if (dialCh != '\0') { + dialerInitArg = std::string(1, dialCh); + openDialerAfter = true; + closedByKey = true; + gRunning = 0; + break; + } + + switch (sym) { + case XK_Escape: + case XK_BackSpace: + case XK_q: + writeSoftkeySuppress(nowMs() + 350); + closedByKey = true; + gRunning = 0; + break; + case XK_Left: + case XK_KP_Left: + case XK_h: + filterTab = (filterTab + 3) % 4; + selected = 0; + applyFilter(); + render(); + break; + case XK_Right: + case XK_KP_Right: + case XK_l: + filterTab = (filterTab + 1) % 4; + selected = 0; + applyFilter(); + render(); + break; + case XK_Up: + case XK_KP_Up: + case XK_k: + if (!filtered.empty()) { + selected = (selected + static_cast(filtered.size()) - 1) % + static_cast(filtered.size()); + render(); + } + break; + case XK_Down: + case XK_KP_Down: + case XK_j: + if (!filtered.empty()) { + selected = (selected + 1) % static_cast(filtered.size()); + render(); + } + break; + case XK_Return: + case XK_KP_Enter: + case XF86XK_Phone: + case XF86XK_PickupPhone: + if (nowMs() < startupIgnoreUntilMs) { + break; + } + if (!filtered.empty() && selected >= 0 && + selected < static_cast(filtered.size())) { + numberToCall = filtered[selected].number; + writeSoftkeySuppress(nowMs() + 400); + closedByKey = true; + gRunning = 0; + } else if (filtered.empty()) { + openDialerAfter = true; + closedByKey = true; + gRunning = 0; + } + break; + default: + break; + } + } + } + + if (!gRunning) { + break; + } + + if (softkeyPending != 0 && nowMs() >= softkeyDeadlineMs) { + int comb = softkeyPending | querySoftkeysDown(dpy); + softkeyPending = 0; + softkeyDeadlineMs = 0; + if (comb == 3) { + writeSoftkeySuppress(nowMs() + 500); + launchXDrawer = true; + closedByKey = true; + gRunning = 0; + break; + } else if (comb == 1) { + // Left Softkey: open Dialer pre-populated with selected number + if (!filtered.empty() && selected >= 0 && + selected < static_cast(filtered.size())) { + dialerInitArg = filtered[selected].number; + } + openDialerAfter = true; + closedByKey = true; + gRunning = 0; + break; + } else if (comb == 2) { + // Right Softkey: close Call Log + writeSoftkeySuppress(nowMs() + 400); + closedByKey = true; + gRunning = 0; + break; + } + } + + int timeoutMs = 200; + if (softkeyDeadlineMs > 0) { + timeoutMs = static_cast(std::max(5, softkeyDeadlineMs - nowMs())); + } + + struct pollfd pfd {}; + pfd.fd = xfd; + pfd.events = POLLIN; + ::poll(&pfd, 1, timeoutMs); + } + + if (closedByKey && !launchXDrawer && !openDialerAfter) { + int64_t drainDeadline = nowMs() + 200; + while (nowMs() < drainDeadline && querySoftkeysDown(dpy) != 0) { + while (XPending(dpy)) { + XEvent ev; + XNextEvent(dpy, &ev); + } + struct pollfd pfd {}; + pfd.fd = xfd; + pfd.events = POLLIN; + ::poll(&pfd, 1, 15); + } + writeSoftkeySuppress(nowMs() + 350); + } + + XUngrabKeyboard(dpy, CurrentTime); + pango_font_description_free(descIcon); + pango_font_description_free(descSmall); + pango_font_description_free(descMain); + g_object_unref(layoutIcon); + g_object_unref(layoutSmall); + g_object_unref(layoutMain); + g_object_unref(pangoCtx); + XftDrawDestroy(xftDraw); + XFreeGC(dpy, gc); + XFreePixmap(dpy, pix); + XDestroyWindow(dpy, win); + XCloseDisplay(dpy); + ::unlink(pidPath.c_str()); + + if (launchXDrawer) { + runAsyncArgv("xdrawer"); + } else if (openDialerAfter) { + if (!dialerInitArg.empty()) { + runAsyncArgv("xdialer", dialerInitArg.c_str()); + } else { + runAsyncArgv("xdialer"); + } + } else if (!numberToCall.empty()) { + placePhoneCall(numberToCall); + } + + return 0; +} + +int calllog_plugin_init(const DwmHostApi*) { + return 0; +} + +int calllog_on_global_key(const DwmHostApi* host, KeySym keysym, + unsigned int keycode, unsigned int state, + int is_press) { + if (!is_press || state != 0) { + return 0; + } + if (keysym == XF86XK_Phone || keysym == XF86XK_PickupPhone || keycode == 177) { + if (isCallRinging()) { + const char* const argv[] = {"sxmo_hook_pickup.sh", nullptr}; + if (host && host->spawn_command) { + host->spawn_command(argv); + } else { + runAsyncArgv("sxmo_hook_pickup.sh"); + } + return 1; + } + } + return 0; +} + +int calllog_on_idle_key(const DwmHostApi* host, KeySym keysym, + unsigned int keycode, unsigned int state) { + if (!host || !host->is_idle_desktop || !host->is_idle_desktop() || state != 0) { + return 0; + } + if (keysym == XF86XK_Phone || keysym == XF86XK_PickupPhone || keycode == 177) { + if (isCallRinging()) { + const char* const argv[] = {"sxmo_hook_pickup.sh", nullptr}; + if (host->spawn_command) { + host->spawn_command(argv); + } + return 1; + } + if (host->spawn_plugin) { + host->spawn_plugin("calllog", nullptr); + } + return 1; + } + return 0; +} + +} // namespace + +extern "C" __attribute__((visibility("default"))) const DwmPlugin dwm_plugin_entry = { + DWM_PLUGIN_API_VERSION, + "calllog", + "Keypad-driven call log viewer & dialer launcher (opens on idle Call key)", + calllog_plugin_init, + nullptr, + nullptr, + calllog_on_idle_key, + calllog_on_global_key, + calllog_run_main +}; diff --git a/src/dwm-plugins/dialer_plugin.cpp b/src/dwm-plugins/dialer_plugin.cpp new file mode 100644 index 0000000..c358d40 --- /dev/null +++ b/src/dwm-plugins/dialer_plugin.cpp @@ -0,0 +1,744 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Dialer DWM Plugin - Keypad-driven X11 dialer with contact & T9 integration (240x320) + +#include +#include +#include +#include +#include +#include +#ifndef _EVDEVK +#define _EVDEVK(_v) (0x10081000 + (_v)) +#endif +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../sxmo-dwm/dwm_plugin.h" +#include "phone_data.h" + +namespace { + +using namespace bananarchy; + +volatile sig_atomic_t gRunning = 1; + +void handleSignal(int) { + gRunning = 0; +} + +constexpr const char* kQueuePath = "/tmp/sxmo_dialer_queue"; + +void enqueueDialChars(const char* chars) { + if (!chars || !chars[0]) { + return; + } + int fd = ::open(kQueuePath, O_WRONLY | O_CREAT | O_APPEND | O_CLOEXEC, 0644); + if (fd >= 0) { + (void)::write(fd, chars, std::strlen(chars)); + ::close(fd); + } +} + +std::string drainDialQueue() { + int fd = ::open(kQueuePath, O_RDONLY | O_CLOEXEC); + if (fd < 0) { + return ""; + } + char buf[128]; + ssize_t n = ::read(fd, buf, sizeof(buf) - 1); + ::close(fd); + ::unlink(kQueuePath); + if (n <= 0) { + return ""; + } + buf[n] = '\0'; + return normalizePhone(buf); +} + +int dialer_run_main(int argc, char** argv) { + gRunning = 1; + int64_t startMs = nowMs(); + + if (argc > 1 && argv[1] && argv[1][0]) { + enqueueDialChars(argv[1]); + } + + std::string pidPath = getRuntimeFile("xdialer.pid"); + int existingPid = readIntFile(pidPath, -1); + if (existingPid > 0 && existingPid != static_cast(::getpid())) { + if (::kill(existingPid, 0) == 0) { + return 0; + } + } + writeIntFile(pidPath, static_cast(::getpid())); + + struct sigaction sa {}; + sa.sa_handler = handleSignal; + sigemptyset(&sa.sa_mask); + sigaction(SIGTERM, &sa, nullptr); + sigaction(SIGINT, &sa, nullptr); + + Display* dpy = XOpenDisplay(nullptr); + if (!dpy) { + ::unlink(pidPath.c_str()); + return 1; + } + + int screen = DefaultScreen(dpy); + Window root = RootWindow(dpy, screen); + Visual* visual = DefaultVisual(dpy, screen); + Colormap cmap = DefaultColormap(dpy, screen); + + XSetWindowAttributes swa{}; + swa.override_redirect = True; + swa.background_pixel = 0x222222; + swa.border_pixel = 0x005577; + swa.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | + StructureNotifyMask | VisibilityChangeMask; + + Window win = XCreateWindow( + dpy, root, kWinX, kWinY, kWinWidth, kWinHeight, 0, + DefaultDepth(dpy, screen), CopyFromParent, visual, + CWOverrideRedirect | CWBackPixel | CWBorderPixel | CWEventMask, &swa); + + XClassHint ch{}; + char resName[] = "xdialer"; + char resClass[] = "XDialer"; + ch.res_name = resName; + ch.res_class = resClass; + XSetClassHint(dpy, win, &ch); + XStoreName(dpy, win, "Dialer"); + + XMapRaised(dpy, win); + XSync(dpy, False); + + for (int i = 0; i < 60; ++i) { + if (XGrabKeyboard(dpy, win, True, GrabModeAsync, GrabModeAsync, CurrentTime) == + GrabSuccess) { + break; + } + usleep(5000); + } + + Pixmap pix = XCreatePixmap(dpy, win, kWinWidth, kWinHeight, DefaultDepth(dpy, screen)); + GC gc = XCreateGC(dpy, pix, 0, nullptr); + XftDraw* xftDraw = XftDrawCreate(dpy, pix, visual, cmap); + + PangoFontMap* fontMap = pango_xft_get_font_map(dpy, screen); + PangoContext* pangoCtx = pango_font_map_create_context(fontMap); + + PangoLayout* layoutNum = pango_layout_new(pangoCtx); + PangoFontDescription* descNum = + pango_font_description_from_string("Fira Code, DejaVuSansM Nerd Font Bold 18px"); + pango_layout_set_font_description(layoutNum, descNum); + + PangoLayout* layoutMain = pango_layout_new(pangoCtx); + PangoFontDescription* descMain = + pango_font_description_from_string("Fira Code, DejaVuSansM Nerd Font 14px"); + pango_layout_set_font_description(layoutMain, descMain); + + PangoLayout* layoutSmall = pango_layout_new(pangoCtx); + PangoFontDescription* descSmall = + pango_font_description_from_string("Fira Code, DejaVuSansM Nerd Font 11px"); + pango_layout_set_font_description(layoutSmall, descSmall); + + PangoLayout* layoutIcon = pango_layout_new(pangoCtx); + PangoFontDescription* descIcon = + pango_font_description_from_string("DejaVuSansM Nerd Font, Fira Code 15px"); + pango_layout_set_font_description(layoutIcon, descIcon); + + auto allocColor = [&](const char* hex) { + XftColor col{}; + XftColorAllocName(dpy, visual, cmap, hex, &col); + return col; + }; + + XftColor colWhite = allocColor("#ffffff"); + XftColor colLight = allocColor("#dddddd"); + XftColor colMuted = allocColor("#999999"); + XftColor colYellow = allocColor("#f4d03f"); + XftColor colGreen = allocColor("#2ecc71"); + XftColor colBlue = allocColor("#5dade2"); + + ContactBook book; + book.load(); + std::vector allContacts = book.buildDialerList(); + std::vector filtered; + + std::string number = drainDialQueue(); + int selected = -1; // -1 = top number box focused; 0..N-1 = contact row + + // If launched with '0' from idle desktop and '0' (keycode 19) is still held, + // allow long-pressing that initial '0' to turn into '+'. + bool zeroHeld = (number == "0" && isKeycodeDown(dpy, 19)); + int64_t zeroPressMs = zeroHeld ? startMs : 0; + + auto updateFilter = [&]() { + filtered.clear(); + if (number.empty()) { + filtered = allContacts; + if (selected >= static_cast(filtered.size())) { + selected = filtered.empty() ? -1 : 0; + } + if (selected < 0 && !filtered.empty()) { + selected = 0; + } + return; + } + + std::string qNorm = normalizePhone(number); + std::string qLower = toLowerStr(number); + std::vector prefixMatches; + std::vector subMatches; + + for (const auto& c : allContacts) { + bool pfx = (c.normNumber.rfind(qNorm, 0) == 0) || + (!qNorm.empty() && c.t9Name.rfind(qNorm, 0) == 0); + bool sub = pfx || + (c.normNumber.find(qNorm) != std::string::npos) || + (!qNorm.empty() && c.t9Name.find(qNorm) != std::string::npos) || + (c.lowerName.find(qLower) != std::string::npos); + if (pfx) { + prefixMatches.push_back(c); + } else if (sub) { + subMatches.push_back(c); + } + } + filtered.insert(filtered.end(), prefixMatches.begin(), prefixMatches.end()); + filtered.insert(filtered.end(), subMatches.begin(), subMatches.end()); + + if (selected >= static_cast(filtered.size())) { + selected = -1; + } + }; + + updateFilter(); + if (!number.empty()) { + selected = -1; + } + + auto drawPango = [&](PangoLayout* layout, XftColor* color, int x, int y, int h, + const std::string& text, int maxW = -1) { + pango_layout_set_text(layout, text.c_str(), static_cast(text.size())); + if (maxW > 0) { + pango_layout_set_width(layout, maxW * PANGO_SCALE); + pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END); + } else { + pango_layout_set_width(layout, -1); + pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_NONE); + } + PangoRectangle ink{}, logical{}; + pango_layout_get_pixel_extents(layout, &ink, &logical); + int ty = y + (h - logical.height) / 2; + pango_xft_render_layout(xftDraw, color, layout, x * PANGO_SCALE, + ty * PANGO_SCALE); + }; + + auto pangoWidth = [&](PangoLayout* layout, const std::string& text) -> int { + pango_layout_set_width(layout, -1); + pango_layout_set_text(layout, text.c_str(), static_cast(text.size())); + PangoRectangle ink{}, logical{}; + pango_layout_get_pixel_extents(layout, &ink, &logical); + return logical.width; + }; + + constexpr int kHeaderH = 56; + constexpr int kSoftbarH = 26; + constexpr int kListY = kHeaderH; + constexpr int kListH = kWinHeight - kHeaderH - kSoftbarH; // 214px + constexpr int kVisibleRows = 5; + + auto render = [&]() { + XSetForeground(dpy, gc, 0x222222); + XFillRectangle(dpy, pix, gc, 0, 0, kWinWidth, kWinHeight); + + // 1. Top Number Display Box (y = 0..56) + bool topSel = (selected < 0); + XSetForeground(dpy, gc, topSel ? 0x1b3b4b : 0x1c1c1c); + XFillRectangle(dpy, pix, gc, 0, 0, kWinWidth, kHeaderH); + if (topSel) { + XSetForeground(dpy, gc, 0xf4d03f); + XFillRectangle(dpy, pix, gc, 0, 0, 4, kHeaderH); + } + XSetForeground(dpy, gc, topSel ? 0x005577 : 0x444444); + XFillRectangle(dpy, pix, gc, 0, kHeaderH - 2, kWinWidth, 2); + + drawPango(layoutIcon, &colGreen, 10, 4, 30, kIconPhone); + + if (number.empty()) { + drawPango(layoutMain, &colMuted, 32, 4, 30, "Enter number...", 196); + } else { + std::string dispNum = number; + if (dispNum.size() > 13) { + dispNum = ".." + dispNum.substr(dispNum.size() - 12); + } + drawPango(layoutNum, &colWhite, 32, 2, 32, dispNum, 182); + drawPango(layoutIcon, &colMuted, 218, 4, 30, kIconBackspace); + } + + // Subtitle inside header box (y = 33..54) + std::string subText; + XftColor* subCol = &colMuted; + if (selected >= 0 && selected < static_cast(filtered.size())) { + const auto& c = filtered[selected]; + subText = "Dial: " + c.number; + subCol = &colYellow; + } else if (!number.empty()) { + std::string exactName = book.resolveName(number); + if (!exactName.empty()) { + subText = exactName; + subCol = &colGreen; + } else if (!filtered.empty()) { + subText = filtered[0].name + " (" + filtered[0].number + ")"; + subCol = &colBlue; + } else { + subText = "Press Call to dial (Hold 0: +)"; + } + } else { + subText = "0-9/*/# Dial | Hold 0: +"; + } + drawPango(layoutSmall, subCol, 32, 33, 20, subText, 202); + + // 2. Contact / Recent Suggestions List (y = 56..270, 5 visible rows) + if (filtered.empty()) { + drawPango(layoutMain, &colMuted, 16, kListY + 40, 30, + number.empty() ? "No saved contacts" : "New number (press Call)", + 208); + } else { + int total = static_cast(filtered.size()); + int focusIdx = (selected >= 0) ? selected : 0; + int scrollOffset = 0; + if (focusIdx >= kVisibleRows) { + scrollOffset = focusIdx - kVisibleRows + 1; + } + if (scrollOffset > std::max(0, total - kVisibleRows)) { + scrollOffset = std::max(0, total - kVisibleRows); + } + + for (int i = 0; i < kVisibleRows; ++i) { + int idx = scrollOffset + i; + if (idx >= total) { + break; + } + int ry = kListY + (i * kListH) / kVisibleRows; + int nextRy = kListY + ((i + 1) * kListH) / kVisibleRows; + int rowH = nextRy - ry; + bool isSel = (idx == selected); + + XSetForeground(dpy, gc, + isSel ? 0x005577 : ((i % 2 == 0) ? 0x282828 : 0x2e2e2e)); + XFillRectangle(dpy, pix, gc, 0, ry, kWinWidth, rowH); + + if (isSel) { + XSetForeground(dpy, gc, 0xf4d03f); + XFillRectangle(dpy, pix, gc, 0, ry, 4, rowH); + } + + const ContactEntry& c = filtered[idx]; + const char* icon = c.isRecent ? kIconClock : kIconUser; + XftColor* icCol = isSel ? &colYellow : (c.isRecent ? &colGreen : &colBlue); + drawPango(layoutIcon, icCol, 8, ry, rowH, icon); + + if (c.name != c.number) { + drawPango(layoutMain, isSel ? &colWhite : &colLight, 30, ry + 2, + 22, c.name, 200); + drawPango(layoutSmall, isSel ? &colYellow : &colMuted, 30, ry + 22, + 18, c.number, 200); + } else { + drawPango(layoutMain, isSel ? &colWhite : &colLight, 30, ry + 2, + 22, c.number, 200); + drawPango(layoutSmall, isSel ? &colYellow : &colMuted, 30, ry + 22, + 18, "Recent number", 200); + } + } + + if (total > kVisibleRows) { + int sbH = std::max(16, (kListH * kVisibleRows) / total); + int sbY = kListY + + ((kListH - sbH) * scrollOffset) / (total - kVisibleRows); + XSetForeground(dpy, gc, 0x666666); + XFillRectangle(dpy, pix, gc, kWinWidth - 3, sbY, 3, sbH); + } + } + + // 3. Bottom Softkey Bar (y = 270..296) + int sbY = kWinHeight - kSoftbarH; + XSetForeground(dpy, gc, 0x181818); + XFillRectangle(dpy, pix, gc, 0, sbY, kWinWidth, kSoftbarH); + XSetForeground(dpy, gc, 0x444444); + XFillRectangle(dpy, pix, gc, 0, sbY, kWinWidth, 1); + + std::string leftLabel = number.empty() ? "Call Log" : "+Sign"; + std::string centerLabel = "CALL"; + std::string rightLabel = number.empty() ? "Close" : "Clear"; + + drawPango(layoutSmall, &colLight, 6, sbY + 1, kSoftbarH - 1, leftLabel); + int cw = pangoWidth(layoutMain, centerLabel); + drawPango(layoutMain, &colGreen, (kWinWidth - cw) / 2, sbY + 1, + kSoftbarH - 1, centerLabel); + int rw = pangoWidth(layoutSmall, rightLabel); + drawPango(layoutSmall, &colLight, kWinWidth - rw - 6, sbY + 1, + kSoftbarH - 1, rightLabel); + + XCopyArea(dpy, pix, win, gc, 0, 0, kWinWidth, kWinHeight, 0, 0); + XFlush(dpy); + }; + + render(); + + int64_t startupIgnoreUntilMs = startMs + 90; + bool initialSoftkeysReleased = (querySoftkeysDown(dpy) == 0); + int softkeyPending = 0; + int64_t softkeyDeadlineMs = 0; + bool closedByKey = false; + std::string targetToDial; + bool switchToCallLog = false; + bool launchXDrawer = false; + int xfd = ConnectionNumber(dpy); + + auto selectActiveNumber = [&]() -> std::string { + if (selected >= 0 && selected < static_cast(filtered.size())) { + return filtered[selected].number; + } + if (!number.empty()) { + return number; + } + if (!filtered.empty()) { + return filtered[0].number; + } + return ""; + }; + + while (gRunning) { + std::string extra = drainDialQueue(); + if (!extra.empty()) { + number += extra; + selected = -1; + updateFilter(); + render(); + } + + if (zeroHeld) { + if (!isKeycodeDown(dpy, 19)) { + zeroHeld = false; + } else if (nowMs() - zeroPressMs >= 420) { + zeroHeld = false; + if (!number.empty() && number.back() == '0') { + number.back() = '+'; + updateFilter(); + render(); + } + } + } + + if (!initialSoftkeysReleased && querySoftkeysDown(dpy) == 0) { + initialSoftkeysReleased = true; + } + + while (XPending(dpy)) { + XEvent ev; + XNextEvent(dpy, &ev); + if (!initialSoftkeysReleased && querySoftkeysDown(dpy) == 0) { + initialSoftkeysReleased = true; + } + + if (ev.type == Expose) { + if (ev.xexpose.count == 0) { + render(); + } + } else if (ev.type == VisibilityNotify) { + if (ev.xvisibility.state != VisibilityUnobscured) { + XRaiseWindow(dpy, win); + XFlush(dpy); + } + } else if (ev.type == KeyRelease) { + KeySym sym = XLookupKeysym(&ev.xkey, 0); + if (ev.xkey.keycode == 19 || sym == XK_0) { + zeroHeld = false; + } + if (sym == XK_Menu || sym == XF86XK_KbdLcdMenu1 || + sym == XF86XK_Back || sym == XF86XK_KbdLcdMenu2 || + ev.xkey.keycode == 135 || ev.xkey.keycode == 166) { + if (querySoftkeysDown(dpy) == 0) { + initialSoftkeysReleased = true; + } + } + } else if (ev.type == KeyPress) { + KeySym sym = XLookupKeysym(&ev.xkey, 0); + bool isLeftSoft = (sym == XK_Menu || sym == XF86XK_KbdLcdMenu1 || + ev.xkey.keycode == 135); + bool isRightSoft = (sym == XF86XK_Back || sym == XF86XK_KbdLcdMenu2 || + ev.xkey.keycode == 166); + + if (isLeftSoft || isRightSoft) { + if (!initialSoftkeysReleased || nowMs() < startupIgnoreUntilMs) { + continue; + } + int which = (isLeftSoft ? 1 : 0) | (isRightSoft ? 2 : 0); + softkeyPending |= which | querySoftkeysDown(dpy); + if (softkeyPending == 3) { + writeSoftkeySuppress(nowMs() + 500); + launchXDrawer = true; + closedByKey = true; + gRunning = 0; + break; + } + if (softkeyDeadlineMs == 0) { + softkeyDeadlineMs = nowMs() + 45; + } + continue; + } + + char dialCh = mapDialKey(sym, ev.xkey.keycode, ev.xkey.state); + if (dialCh != '\0') { + if (nowMs() - startMs < 45 && number.size() == 1 && + number[0] == dialCh) { + // Ignore duplicate event from the initial key press that opened dialer + continue; + } + number.push_back(dialCh); + selected = -1; + if (dialCh == '0') { + zeroHeld = true; + zeroPressMs = nowMs(); + } else { + zeroHeld = false; + } + updateFilter(); + render(); + continue; + } + + switch (sym) { + case XK_Escape: + writeSoftkeySuppress(nowMs() + 350); + closedByKey = true; + gRunning = 0; + break; + case XK_BackSpace: + case XK_Left: + case XK_KP_Left: + if (!number.empty()) { + number.pop_back(); + selected = -1; + updateFilter(); + render(); + } else if (sym == XK_BackSpace) { + closedByKey = true; + gRunning = 0; + } + break; + case XK_Right: + case XK_KP_Right: + if (number.empty() || number[0] != '+') { + number = "+" + number; + selected = -1; + updateFilter(); + render(); + } + break; + case XK_Up: + case XK_KP_Up: + if (!filtered.empty()) { + if (selected <= -1) { + selected = static_cast(filtered.size()) - 1; + } else if (selected == 0 && !number.empty()) { + selected = -1; + } else if (selected == 0) { + selected = static_cast(filtered.size()) - 1; + } else { + --selected; + } + render(); + } + break; + case XK_Down: + case XK_KP_Down: + if (!filtered.empty()) { + if (selected < 0) { + selected = 0; + } else if (selected + 1 < static_cast(filtered.size())) { + ++selected; + } else { + selected = number.empty() ? 0 : -1; + } + render(); + } + break; + case XK_Return: + case XK_KP_Enter: + case XF86XK_Phone: + case XF86XK_PickupPhone: { + std::string target = selectActiveNumber(); + if (!target.empty()) { + targetToDial = target; + writeSoftkeySuppress(nowMs() + 400); + closedByKey = true; + gRunning = 0; + } + break; + } + default: + break; + } + } + } + + if (!gRunning) { + break; + } + + if (softkeyPending != 0 && nowMs() >= softkeyDeadlineMs) { + int comb = softkeyPending | querySoftkeysDown(dpy); + softkeyPending = 0; + softkeyDeadlineMs = 0; + if (comb == 3) { + writeSoftkeySuppress(nowMs() + 500); + launchXDrawer = true; + closedByKey = true; + gRunning = 0; + break; + } else if (comb == 1) { + // Left Softkey: if empty, switch to Call Log; if non-empty, toggle leading '+' + if (number.empty()) { + writeSoftkeySuppress(nowMs() + 350); + switchToCallLog = true; + closedByKey = true; + gRunning = 0; + break; + } else { + if (number[0] == '+') { + number.erase(0, 1); + } else { + number = "+" + number; + } + selected = -1; + updateFilter(); + render(); + } + } else if (comb == 2) { + // Right Softkey: delete last character if non-empty, else close Dialer + if (!number.empty()) { + number.pop_back(); + selected = -1; + updateFilter(); + render(); + } else { + writeSoftkeySuppress(nowMs() + 400); + closedByKey = true; + gRunning = 0; + break; + } + } + } + + int timeoutMs = 200; + if (softkeyDeadlineMs > 0) { + timeoutMs = static_cast(std::max(5, softkeyDeadlineMs - nowMs())); + } else if (zeroHeld) { + timeoutMs = 25; + } + + struct pollfd pfd {}; + pfd.fd = xfd; + pfd.events = POLLIN; + ::poll(&pfd, 1, timeoutMs); + } + + if (closedByKey && !launchXDrawer) { + int64_t drainDeadline = nowMs() + 200; + while (nowMs() < drainDeadline && querySoftkeysDown(dpy) != 0) { + while (XPending(dpy)) { + XEvent ev; + XNextEvent(dpy, &ev); + } + struct pollfd pfd {}; + pfd.fd = xfd; + pfd.events = POLLIN; + ::poll(&pfd, 1, 15); + } + writeSoftkeySuppress(nowMs() + 350); + } + + XUngrabKeyboard(dpy, CurrentTime); + pango_font_description_free(descIcon); + pango_font_description_free(descSmall); + pango_font_description_free(descMain); + pango_font_description_free(descNum); + g_object_unref(layoutIcon); + g_object_unref(layoutSmall); + g_object_unref(layoutMain); + g_object_unref(layoutNum); + g_object_unref(pangoCtx); + XftDrawDestroy(xftDraw); + XFreeGC(dpy, gc); + XFreePixmap(dpy, pix); + XDestroyWindow(dpy, win); + XCloseDisplay(dpy); + ::unlink(pidPath.c_str()); + + if (launchXDrawer) { + runAsyncArgv("xdrawer"); + } else if (switchToCallLog) { + runAsyncArgv("xcalllog"); + } else if (!targetToDial.empty()) { + placePhoneCall(targetToDial); + } + + return 0; +} + +int64_t gLastSpawnMs = 0; + +int dialer_plugin_init(const DwmHostApi*) { + return 0; +} + +int dialer_on_idle_key(const DwmHostApi* host, KeySym keysym, + unsigned int keycode, unsigned int state) { + if (!host || !host->is_idle_desktop || !host->is_idle_desktop()) { + return 0; + } + char ch = mapDialKey(keysym, keycode, state); + if (ch == '\0') { + return 0; + } + char buf[2] = {ch, '\0'}; + enqueueDialChars(buf); + + int64_t now = nowMs(); + std::string pidPath = getRuntimeFile("xdialer.pid"); + int existingPid = readIntFile(pidPath, -1); + bool alreadyRunning = (existingPid > 0 && ::kill(existingPid, 0) == 0); + + if (!alreadyRunning && (now - gLastSpawnMs) > 250 && host->spawn_plugin) { + gLastSpawnMs = now; + host->spawn_plugin("dialer", nullptr); + } + return 1; +} + +} // namespace + +extern "C" __attribute__((visibility("default"))) const DwmPlugin dwm_plugin_entry = { + DWM_PLUGIN_API_VERSION, + "dialer", + "Keypad-driven dialer with contact & T9 integration (opens on idle 0-9/*/#)", + dialer_plugin_init, + nullptr, + nullptr, + dialer_on_idle_key, + nullptr, + dialer_run_main +}; diff --git a/src/dwm-plugins/dwm_plugin_runner.c b/src/dwm-plugins/dwm_plugin_runner.c new file mode 100644 index 0000000..6f32eb0 --- /dev/null +++ b/src/dwm-plugins/dwm_plugin_runner.c @@ -0,0 +1,116 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "../sxmo-dwm/dwm_plugin.h" + +static const char *const kPluginDirs[] = { + "/home/user/.local/lib/dwm/plugins", + "/usr/lib/dwm/plugins", + NULL +}; + +static const char *resolve_plugin_name_from_argv0(const char *argv0) { + const char *base = strrchr(argv0, '/'); + base = base ? (base + 1) : argv0; + if (strcasecmp(base, "xdrawer") == 0) { + return "xdrawer"; + } + if (strcasecmp(base, "xdialer") == 0 || strcasecmp(base, "dialer") == 0) { + return "dialer"; + } + if (strcasecmp(base, "xcalllog") == 0 || strcasecmp(base, "calllog") == 0) { + return "calllog"; + } + return NULL; +} + +static int list_plugins(void) { + for (int i = 0; kPluginDirs[i]; ++i) { + DIR *dir = opendir(kPluginDirs[i]); + if (!dir) { + continue; + } + struct dirent *ent; + while ((ent = readdir(dir)) != NULL) { + size_t len = strlen(ent->d_name); + if (len <= 3 || strcmp(ent->d_name + len - 3, ".so") != 0) { + continue; + } + char path[512]; + snprintf(path, sizeof(path), "%s/%s", kPluginDirs[i], ent->d_name); + void *h = dlopen(path, RTLD_NOW | RTLD_LOCAL); + if (!h) { + continue; + } + const DwmPlugin *plug = (const DwmPlugin *)dlsym(h, DWM_PLUGIN_ENTRY_SYMBOL); + if (plug && plug->api_version == DWM_PLUGIN_API_VERSION && plug->name) { + printf("%-12s %s (%s)\n", + plug->name, + plug->description ? plug->description : "", + path); + } + dlclose(h); + } + closedir(dir); + } + return 0; +} + +int main(int argc, char **argv) { + const char *plugin_name = resolve_plugin_name_from_argv0(argv[0]); + int sub_argc = argc; + char **sub_argv = argv; + + if (!plugin_name) { + if (argc < 2 || strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0) { + fprintf(stderr, "Usage: %s [args...]\n", argv[0]); + return 1; + } + if (strcmp(argv[1], "--list") == 0 || strcmp(argv[1], "-l") == 0) { + return list_plugins(); + } + plugin_name = argv[1]; + sub_argc = argc - 1; + sub_argv = argv + 1; + } + + const char *env_dir = getenv("DWM_PLUGIN_PATH"); + char path[512]; + void *handle = NULL; + + if (env_dir && env_dir[0]) { + snprintf(path, sizeof(path), "%s/%s.so", env_dir, plugin_name); + if (access(path, R_OK) == 0) { + handle = dlopen(path, RTLD_NOW | RTLD_LOCAL); + } + } + + for (int i = 0; !handle && kPluginDirs[i]; ++i) { + snprintf(path, sizeof(path), "%s/%s.so", kPluginDirs[i], plugin_name); + if (access(path, R_OK) == 0) { + handle = dlopen(path, RTLD_NOW | RTLD_LOCAL); + } + } + + if (!handle) { + fprintf(stderr, "dwm-plugin: failed to load plugin '%s': %s\n", + plugin_name, dlerror()); + return 1; + } + + const DwmPlugin *plug = (const DwmPlugin *)dlsym(handle, DWM_PLUGIN_ENTRY_SYMBOL); + if (!plug || plug->api_version != DWM_PLUGIN_API_VERSION || !plug->run_main) { + fprintf(stderr, "dwm-plugin: invalid plugin '%s'\n", plugin_name); + dlclose(handle); + return 1; + } + + int rc = plug->run_main(sub_argc, sub_argv); + dlclose(handle); + return rc; +} diff --git a/src/dwm-plugins/phone_data.h b/src/dwm-plugins/phone_data.h new file mode 100644 index 0000000..8606545 --- /dev/null +++ b/src/dwm-plugins/phone_data.h @@ -0,0 +1,625 @@ +#ifndef DWM_PLUGINS_PHONE_DATA_H +#define DWM_PLUGINS_PHONE_DATA_H + +#include +#include +#include +#ifndef _EVDEVK +#define _EVDEVK(_v) (0x10081000 + (_v)) +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bananarchy { + +constexpr int kScreenWidth = 240; +constexpr int kScreenHeight = 320; +constexpr int kTopBarHeight = 24; +constexpr int kWinX = 0; +constexpr int kWinY = kTopBarHeight; +constexpr int kWinWidth = kScreenWidth; +constexpr int kWinHeight = kScreenHeight - kTopBarHeight; // 296px flush below 24px dwm bar + +// Nerd Font PUA icons matching sxmo_hook_icons.sh & dwm ("Fira Code, DejaVuSansM Nerd Font") +constexpr const char* kIconPhone = "\xef\x82\x95"; // U+F095 phone handset +constexpr const char* kIconPhoneLog = "\xef\x82\x98"; // U+F098 phone square +constexpr const char* kIconUser = "\xef\x80\x87"; // U+F007 user contact +constexpr const char* kIconClock = "\xef\x80\x97"; // U+F017 recent clock +constexpr const char* kIconOutCall = "\xef\x85\xb8"; // U+F178 outgoing arrow +constexpr const char* kIconInCall = "\xef\x85\xb5"; // U+F175 incoming arrow +constexpr const char* kIconMissedCall = "\xef\x81\xb1"; // U+F071 missed/alert +constexpr const char* kIconBackspace = "\xef\x86\x90"; // U+F190 left circle arrow + +inline int64_t nowMs() { + struct timespec ts {}; + clock_gettime(CLOCK_MONOTONIC, &ts); + return static_cast(ts.tv_sec) * 1000 + ts.tv_nsec / 1000000; +} + +inline std::string getRuntimeFile(const char* name) { + const char* rdir = std::getenv("XDG_RUNTIME_DIR"); + std::string base = (rdir && rdir[0]) ? rdir : "/run/user/10000"; + if (::access(base.c_str(), W_OK) != 0) { + base = "/tmp"; + } + return base + "/" + name; +} + +inline int readIntFile(const std::string& path, int fallback = -1) { + int fd = ::open(path.c_str(), O_RDONLY | O_CLOEXEC); + if (fd < 0) { + return fallback; + } + char buf[64]; + ssize_t n = ::read(fd, buf, sizeof(buf) - 1); + ::close(fd); + if (n <= 0) { + return fallback; + } + buf[n] = '\0'; + return std::atoi(buf); +} + +inline bool writeIntFile(const std::string& path, int value) { + int fd = ::open(path.c_str(), O_WRONLY | O_TRUNC | O_CREAT | O_CLOEXEC, 0644); + if (fd < 0) { + return false; + } + char buf[32]; + int len = std::snprintf(buf, sizeof(buf), "%d\n", value); + ssize_t w = ::write(fd, buf, len); + ::close(fd); + return w == len; +} + +inline void writeSoftkeySuppress(int64_t untilMs) { + int fd = ::open("/tmp/sxmo_softkey_suppress", + O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0644); + if (fd >= 0) { + char buf[32]; + int len = std::snprintf(buf, sizeof(buf), "%lld\n", + static_cast(untilMs)); + (void)::write(fd, buf, len); + ::close(fd); + } +} + +inline int querySoftkeysDown(Display* d) { + char km[32]; + if (!XQueryKeymap(d, km)) { + return 0; + } + int mask = 0; + if (km[135 / 8] & (1 << (135 % 8))) { + mask |= 1; + } + if (km[166 / 8] & (1 << (166 % 8))) { + mask |= 2; + } + return mask; +} + +inline bool isKeycodeDown(Display* d, int keycode) { + if (keycode <= 0 || keycode >= 256) { + return false; + } + char km[32]; + if (!XQueryKeymap(d, km)) { + return false; + } + return (km[keycode / 8] & (1 << (keycode % 8))) != 0; +} + +inline void runAsyncCmd(const std::string& cmd) { + pid_t pid = ::fork(); + if (pid == 0) { + ::setsid(); + int nullfd = ::open("/dev/null", O_RDWR); + if (nullfd >= 0) { + ::dup2(nullfd, STDIN_FILENO); + ::dup2(nullfd, STDOUT_FILENO); + ::dup2(nullfd, STDERR_FILENO); + if (nullfd > 2) { + ::close(nullfd); + } + } + execl("/bin/sh", "sh", "-c", cmd.c_str(), static_cast(nullptr)); + _exit(0); + } +} + +inline void runAsyncArgv(const char* prog, const char* arg1 = nullptr) { + pid_t pid = ::fork(); + if (pid == 0) { + ::setsid(); + int nullfd = ::open("/dev/null", O_RDWR); + if (nullfd >= 0) { + ::dup2(nullfd, STDIN_FILENO); + ::dup2(nullfd, STDOUT_FILENO); + ::dup2(nullfd, STDERR_FILENO); + if (nullfd > 2) { + ::close(nullfd); + } + } + if (arg1) { + execlp(prog, prog, arg1, static_cast(nullptr)); + std::string localBin = std::string("/home/user/.local/bin/") + prog; + execl(localBin.c_str(), prog, arg1, static_cast(nullptr)); + std::string usrBin = std::string("/usr/bin/") + prog; + execl(usrBin.c_str(), prog, arg1, static_cast(nullptr)); + } else { + execlp(prog, prog, static_cast(nullptr)); + std::string localBin = std::string("/home/user/.local/bin/") + prog; + execl(localBin.c_str(), prog, static_cast(nullptr)); + std::string usrBin = std::string("/usr/bin/") + prog; + execl(usrBin.c_str(), prog, static_cast(nullptr)); + } + _exit(0); + } +} + +inline char mapDialKey(KeySym sym, unsigned int keycode, unsigned int state) { + if (state & (ControlMask | Mod1Mask | Mod4Mask)) { + return '\0'; + } + // Keypad star (*) + if (keycode == 63 || keycode == 530 || sym == XK_asterisk || + sym == XK_KP_Multiply || static_cast(sym) == 0x1008ffaa) { + return '*'; + } + // Keypad pound (#) + if (keycode == 106 || keycode == 531 || sym == XK_numbersign || + sym == XK_KP_Divide || static_cast(sym) == 0x1008ffab) { + return '#'; + } + if (sym == XK_plus || sym == XK_KP_Add) { + return '+'; + } + if (sym >= XK_0 && sym <= XK_9) { + return static_cast('0' + (sym - XK_0)); + } + if (sym >= XK_KP_0 && sym <= XK_KP_9) { + return static_cast('0' + (sym - XK_KP_0)); + } + if (keycode >= 10 && keycode <= 18) { + return static_cast('1' + (keycode - 10)); + } + if (keycode == 19) { + return '0'; + } + return '\0'; +} + +inline std::string trimStr(const std::string& s) { + size_t b = 0; + while (b < s.size() && std::isspace(static_cast(s[b]))) { + ++b; + } + size_t e = s.size(); + while (e > b && std::isspace(static_cast(s[e - 1]))) { + --e; + } + return s.substr(b, e - b); +} + +inline std::string normalizePhone(const std::string& raw) { + std::string out; + out.reserve(raw.size()); + for (char c : raw) { + if (std::isdigit(static_cast(c)) || c == '+' || c == '*' || + c == '#') { + out.push_back(c); + } + } + return out; +} + +inline std::string phoneSuffixKey(const std::string& norm) { + std::string digits; + for (char c : norm) { + if (std::isdigit(static_cast(c))) { + digits.push_back(c); + } + } + if (digits.size() >= 9) { + return digits.substr(digits.size() - 9); + } + return norm; +} + +inline std::string toLowerStr(const std::string& s) { + std::string out = s; + for (char& c : out) { + c = static_cast(std::tolower(static_cast(c))); + } + return out; +} + +inline std::string toT9Digits(const std::string& name) { + std::string out; + out.reserve(name.size()); + for (unsigned char uc : name) { + char c = static_cast(std::tolower(uc)); + if (c >= 'a' && c <= 'c') out.push_back('2'); + else if (c >= 'd' && c <= 'f') out.push_back('3'); + else if (c >= 'g' && c <= 'i') out.push_back('4'); + else if (c >= 'j' && c <= 'l') out.push_back('5'); + else if (c >= 'm' && c <= 'o') out.push_back('6'); + else if (c >= 'p' && c <= 's') out.push_back('7'); + else if (c >= 't' && c <= 'v') out.push_back('8'); + else if (c >= 'w' && c <= 'z') out.push_back('9'); + else if (c == ' ') out.push_back('0'); + else if (std::isdigit(uc)) out.push_back(c); + } + return out; +} + +inline std::string getContactsFilePath() { + const char* env = std::getenv("SXMO_CONTACTFILE"); + if (env && env[0]) { + return env; + } + const char* xdg = std::getenv("XDG_CONFIG_HOME"); + if (xdg && xdg[0]) { + return std::string(xdg) + "/sxmo/contacts.tsv"; + } + const char* home = std::getenv("HOME"); + return std::string(home && home[0] ? home : "/home/user") + + "/.config/sxmo/contacts.tsv"; +} + +inline std::string getModemLogFilePath() { + const char* env = std::getenv("SXMO_LOGDIR"); + if (env && env[0]) { + return std::string(env) + "/modemlog.tsv"; + } + const char* xdg = std::getenv("XDG_DATA_HOME"); + if (xdg && xdg[0]) { + return std::string(xdg) + "/sxmo/modem/modemlog.tsv"; + } + const char* home = std::getenv("HOME"); + return std::string(home && home[0] ? home : "/home/user") + + "/.local/share/sxmo/modem/modemlog.tsv"; +} + +struct ContactEntry { + std::string name; + std::string number; + std::string normNumber; + std::string t9Name; + std::string lowerName; + bool isRecent = false; +}; + +class ContactBook { + public: + void load() { + saved_.clear(); + exactMap_.clear(); + suffixMap_.clear(); + + std::ifstream cf(getContactsFilePath()); + std::string line; + while (std::getline(cf, line)) { + if (line.empty()) { + continue; + } + size_t tab = line.find('\t'); + if (tab == std::string::npos) { + continue; + } + std::string num = trimStr(line.substr(0, tab)); + std::string name = trimStr(line.substr(tab + 1)); + std::string norm = normalizePhone(num); + if (norm.empty() || name.empty()) { + continue; + } + ContactEntry e; + e.name = name; + e.number = num; + e.normNumber = norm; + e.t9Name = toT9Digits(name); + e.lowerName = toLowerStr(name); + e.isRecent = false; + saved_.push_back(e); + exactMap_[norm] = name; + std::string sfx = phoneSuffixKey(norm); + if (!sfx.empty()) { + suffixMap_[sfx] = name; + } + } + + std::sort(saved_.begin(), saved_.end(), + [](const ContactEntry& a, const ContactEntry& b) { + return a.lowerName < b.lowerName; + }); + } + + std::string resolveName(const std::string& rawNumber) const { + std::string norm = normalizePhone(rawNumber); + if (norm.empty()) { + return ""; + } + auto it = exactMap_.find(norm); + if (it != exactMap_.end()) { + return it->second; + } + std::string sfx = phoneSuffixKey(norm); + if (!sfx.empty()) { + auto sit = suffixMap_.find(sfx); + if (sit != suffixMap_.end()) { + return sit->second; + } + } + return ""; + } + + std::vector buildDialerList() const { + std::vector out; + std::unordered_set seenKey; + + // 1. Recent unique numbers from modemlog.tsv in reverse chronological order + std::ifstream lf(getModemLogFilePath()); + std::vector logLines; + std::string line; + while (std::getline(lf, line)) { + if (!line.empty()) { + logLines.push_back(line); + } + } + for (auto it = logLines.rbegin(); it != logLines.rend(); ++it) { + size_t t1 = it->find('\t'); + if (t1 == std::string::npos) continue; + size_t t2 = it->find('\t', t1 + 1); + if (t2 == std::string::npos) continue; + size_t t3 = it->find('\t', t2 + 1); + std::string num = trimStr( + t3 == std::string::npos ? it->substr(t2 + 1) : it->substr(t2 + 1, t3 - t2 - 1)); + if (num.empty() || num == "NULL" || num.find('+', 1) != std::string::npos) { + continue; + } + std::string norm = normalizePhone(num); + if (norm.empty()) continue; + std::string key = phoneSuffixKey(norm); + if (seenKey.count(key) || seenKey.count(norm)) { + continue; + } + seenKey.insert(key); + seenKey.insert(norm); + + ContactEntry e; + std::string cname = resolveName(num); + e.name = cname.empty() ? num : cname; + e.number = num; + e.normNumber = norm; + e.t9Name = toT9Digits(e.name); + e.lowerName = toLowerStr(e.name); + e.isRecent = true; + out.push_back(e); + } + + // 2. All saved contacts (skipping duplicates already added from recents) + for (const auto& c : saved_) { + std::string key = phoneSuffixKey(c.normNumber); + if (seenKey.count(key) || seenKey.count(c.normNumber)) { + continue; + } + seenKey.insert(key); + seenKey.insert(c.normNumber); + out.push_back(c); + } + + return out; + } + + private: + std::vector saved_; + std::unordered_map exactMap_; + std::unordered_map suffixMap_; +}; + +enum class CallDirection { + Incoming = 0, + Outgoing = 1, + Missed = 2, +}; + +struct CallLogItem { + CallDirection direction; + std::string number; + std::string contactName; + std::string displayTime; + int durationSec = 0; +}; + +inline time_t parseIsoTime(const std::string& iso) { + if (iso.size() < 19) { + return 0; + } + struct tm tmVal {}; + tmVal.tm_year = std::atoi(iso.substr(0, 4).c_str()) - 1900; + tmVal.tm_mon = std::atoi(iso.substr(5, 2).c_str()) - 1; + tmVal.tm_mday = std::atoi(iso.substr(8, 2).c_str()); + tmVal.tm_hour = std::atoi(iso.substr(11, 2).c_str()); + tmVal.tm_min = std::atoi(iso.substr(14, 2).c_str()); + tmVal.tm_sec = std::atoi(iso.substr(17, 2).c_str()); + tmVal.tm_isdst = -1; + return mktime(&tmVal); +} + +inline std::string formatShortTime(const std::string& iso) { + if (iso.size() < 16) { + return iso; + } + // Convert "YYYY-MM-DDTHH:MM:SS+0300" -> "MM-DD HH:MM" + return iso.substr(5, 5) + " " + iso.substr(11, 5); +} + +inline std::string formatDuration(int sec) { + if (sec <= 0) { + return ""; + } + char buf[32]; + if (sec >= 3600) { + std::snprintf(buf, sizeof(buf), "%dh%02dm", sec / 3600, (sec % 3600) / 60); + } else if (sec >= 60) { + std::snprintf(buf, sizeof(buf), "%dm%02ds", sec / 60, sec % 60); + } else { + std::snprintf(buf, sizeof(buf), "%ds", sec); + } + return buf; +} + +inline std::vector loadCallLog(const ContactBook& book) { + std::ifstream lf(getModemLogFilePath()); + std::string line; + + struct ActiveSession { + bool active = false; + CallDirection dir = CallDirection::Incoming; + std::string number; + std::string startTimeStr; + time_t startEpoch = 0; + time_t answerEpoch = 0; + bool answered = false; + }; + + std::vector history; + ActiveSession cur; + + auto flushSession = [&]() { + if (!cur.active || cur.number.empty()) { + cur = ActiveSession{}; + return; + } + CallLogItem item; + item.direction = cur.dir; + item.number = cur.number; + item.contactName = book.resolveName(cur.number); + item.displayTime = formatShortTime(cur.startTimeStr); + item.durationSec = 0; + history.push_back(item); + cur = ActiveSession{}; + }; + + while (std::getline(lf, line)) { + if (line.empty()) continue; + size_t t1 = line.find('\t'); + if (t1 == std::string::npos) continue; + size_t t2 = line.find('\t', t1 + 1); + if (t2 == std::string::npos) continue; + size_t t3 = line.find('\t', t2 + 1); + + std::string ts = trimStr(line.substr(0, t1)); + std::string evt = trimStr(line.substr(t1 + 1, t2 - t1 - 1)); + std::string num = trimStr( + t3 == std::string::npos ? line.substr(t2 + 1) : line.substr(t2 + 1, t3 - t2 - 1)); + + if (evt.rfind("call_", 0) != 0 && evt != "ring_muted") { + continue; + } + if (num.empty() || num == "NULL") { + continue; + } + + time_t epoch = parseIsoTime(ts); + + if (evt == "call_ring") { + flushSession(); + cur.active = true; + cur.dir = CallDirection::Missed; + cur.number = num; + cur.startTimeStr = ts; + cur.startEpoch = epoch; + cur.answerEpoch = 0; + cur.answered = false; + } else if (evt == "call_start") { + flushSession(); + cur.active = true; + cur.dir = CallDirection::Outgoing; + cur.number = num; + cur.startTimeStr = ts; + cur.startEpoch = epoch; + cur.answerEpoch = epoch; + cur.answered = true; + } else if (evt == "call_pickup") { + if (cur.active && normalizePhone(cur.number) == normalizePhone(num)) { + cur.dir = CallDirection::Incoming; + cur.answered = true; + cur.answerEpoch = epoch; + } else { + flushSession(); + cur.active = true; + cur.dir = CallDirection::Incoming; + cur.number = num; + cur.startTimeStr = ts; + cur.startEpoch = epoch; + cur.answerEpoch = epoch; + cur.answered = true; + } + } else if (evt == "call_missed") { + if (cur.active && normalizePhone(cur.number) == normalizePhone(num)) { + cur.dir = CallDirection::Missed; + flushSession(); + } else { + flushSession(); + CallLogItem item; + item.direction = CallDirection::Missed; + item.number = num; + item.contactName = book.resolveName(num); + item.displayTime = formatShortTime(ts); + item.durationSec = 0; + history.push_back(item); + } + } else if (evt == "call_hangup" || evt == "call_finished" || + evt == "call_discard") { + if (cur.active && normalizePhone(cur.number) == normalizePhone(num)) { + if (evt == "call_discard" && !cur.answered && + cur.dir != CallDirection::Outgoing) { + cur.dir = CallDirection::Missed; + } + CallLogItem item; + item.direction = cur.dir; + item.number = cur.number; + item.contactName = book.resolveName(cur.number); + item.displayTime = formatShortTime(cur.startTimeStr); + if (cur.answered && cur.answerEpoch > 0 && epoch >= cur.answerEpoch) { + item.durationSec = static_cast(epoch - cur.answerEpoch); + } + history.push_back(item); + cur = ActiveSession{}; + } + } + } + flushSession(); + + std::reverse(history.begin(), history.end()); + return history; +} + +inline void placePhoneCall(const std::string& rawNumber) { + std::string num = normalizePhone(rawNumber); + if (num.empty()) { + return; + } + runAsyncArgv("sxmo_modemdial.sh", num.c_str()); +} + +} // namespace bananarchy + +#endif // DWM_PLUGINS_PHONE_DATA_H diff --git a/src/sxmo-dwm/dwm.c b/src/sxmo-dwm/dwm.c index 9f73e7e..76393fd 100644 --- a/src/sxmo-dwm/dwm.c +++ b/src/sxmo-dwm/dwm.c @@ -271,6 +271,8 @@ static void shiftview(const Arg *arg); static void pushup(const Arg *arg); static void pushdown(const Arg *arg); static void readxresources(); +static void load_plugins(void); +static void unload_plugins(void); static pid_t getparentprocess(pid_t p); static int isdescprocess(pid_t p, pid_t c); @@ -698,6 +700,7 @@ cleanup(void) drw_cur_free(drw, cursor[i]); for (i = 0; i < LENGTH(colors); i++) free(scheme[i]); + unload_plugins(); XDestroyWindow(dpy, wmcheckwin); drw_free(drw); XSync(dpy, False); @@ -1532,6 +1535,191 @@ is_right_softkey(KeySym ks, unsigned int keycode) return ks == XF86XK_Back || ks == XF86XK_KbdLcdMenu2 || keycode == 166; } +#include +#include +#include "dwm_plugin.h" + +#define MAX_DWM_PLUGINS 16 + +typedef struct { + void *handle; + const DwmPlugin *plugin; +} LoadedDwmPlugin; + +static LoadedDwmPlugin loaded_plugins[MAX_DWM_PLUGINS]; +static int num_loaded_plugins = 0; + +static int +host_is_idle_desktop(void) +{ + return (selmon && selmon->sel == NULL && !is_phone_locked()) ? 1 : 0; +} + +static int +host_is_phone_locked(void) +{ + return is_phone_locked(); +} + +static void +host_spawn_command(const char *const *argv) +{ + if (!argv || !argv[0]) + return; + Arg a = { .v = (const void *)argv }; + XUngrabKeyboard(dpy, CurrentTime); + XFlush(dpy); + spawn(&a); +} + +static void +host_spawn_plugin(const char *plugin_name, const char *arg) +{ + if (!plugin_name || !plugin_name[0]) + return; + const char *cmd[4]; + cmd[0] = "dwm-plugin"; + cmd[1] = plugin_name; + cmd[2] = (arg && arg[0]) ? arg : NULL; + cmd[3] = NULL; + Arg a = { .v = cmd }; + XUngrabKeyboard(dpy, CurrentTime); + XFlush(dpy); + spawn(&a); +} + +static DwmHostApi dwm_host_api = { + .api_version = DWM_PLUGIN_API_VERSION, + .dpy = NULL, + .root = 0, + .screen = 0, + .sw = 0, + .sh = 0, + .bh = 0, + .is_idle_desktop = host_is_idle_desktop, + .is_phone_locked = host_is_phone_locked, + .spawn_command = host_spawn_command, + .spawn_plugin = host_spawn_plugin, +}; + +static int +is_plugin_loaded(const char *name) +{ + int i; + for (i = 0; i < num_loaded_plugins; i++) { + if (loaded_plugins[i].plugin && loaded_plugins[i].plugin->name && + strcmp(loaded_plugins[i].plugin->name, name) == 0) + return 1; + } + return 0; +} + +static void +load_plugins_from_dir(const char *dirpath) +{ + DIR *dir; + struct dirent *ent; + char path[512]; + + if (!dirpath || !dirpath[0]) + return; + dir = opendir(dirpath); + if (!dir) + return; + while ((ent = readdir(dir)) != NULL && num_loaded_plugins < MAX_DWM_PLUGINS) { + size_t len = strlen(ent->d_name); + if (len <= 3 || strcmp(ent->d_name + len - 3, ".so") != 0) + continue; + snprintf(path, sizeof(path), "%s/%s", dirpath, ent->d_name); + void *h = dlopen(path, RTLD_NOW | RTLD_LOCAL); + if (!h) + continue; + const DwmPlugin *plug = (const DwmPlugin *)dlsym(h, DWM_PLUGIN_ENTRY_SYMBOL); + if (!plug || plug->api_version != DWM_PLUGIN_API_VERSION || + !plug->name || is_plugin_loaded(plug->name)) { + dlclose(h); + continue; + } + if (plug->init && plug->init(&dwm_host_api) != 0) { + dlclose(h); + continue; + } + loaded_plugins[num_loaded_plugins].handle = h; + loaded_plugins[num_loaded_plugins].plugin = plug; + num_loaded_plugins++; + } + closedir(dir); +} + +static void +load_plugins(void) +{ + dwm_host_api.dpy = dpy; + dwm_host_api.root = root; + dwm_host_api.screen = screen; + dwm_host_api.sw = sw; + dwm_host_api.sh = sh; + dwm_host_api.bh = bh; + + const char *env_dir = getenv("DWM_PLUGIN_PATH"); + if (env_dir && env_dir[0]) + load_plugins_from_dir(env_dir); + load_plugins_from_dir("/home/user/.local/lib/dwm/plugins"); + load_plugins_from_dir("/usr/lib/dwm/plugins"); +} + +static void +unload_plugins(void) +{ + int i; + for (i = 0; i < num_loaded_plugins; i++) { + if (loaded_plugins[i].plugin && loaded_plugins[i].plugin->cleanup) + loaded_plugins[i].plugin->cleanup(); + if (loaded_plugins[i].handle) + dlclose(loaded_plugins[i].handle); + } + num_loaded_plugins = 0; +} + +static int +dispatch_plugin_softkey_chord(void) +{ + int i; + for (i = 0; i < num_loaded_plugins; i++) { + if (loaded_plugins[i].plugin && loaded_plugins[i].plugin->on_softkey_chord) { + if (loaded_plugins[i].plugin->on_softkey_chord(&dwm_host_api)) + return 1; + } + } + return 0; +} + +static int +dispatch_plugin_idle_key(KeySym keysym, unsigned int keycode, unsigned int state) +{ + int i; + for (i = 0; i < num_loaded_plugins; i++) { + if (loaded_plugins[i].plugin && loaded_plugins[i].plugin->on_idle_key) { + if (loaded_plugins[i].plugin->on_idle_key(&dwm_host_api, keysym, keycode, state)) + return 1; + } + } + return 0; +} + +static int +dispatch_plugin_global_key(KeySym keysym, unsigned int keycode, unsigned int state, int is_press) +{ + int i; + for (i = 0; i < num_loaded_plugins; i++) { + if (loaded_plugins[i].plugin && loaded_plugins[i].plugin->on_global_key) { + if (loaded_plugins[i].plugin->on_global_key(&dwm_host_api, keysym, keycode, state, is_press)) + return 1; + } + } + return 0; +} + static pid_t spawn_pgid(const Arg *arg) { @@ -1547,9 +1735,8 @@ spawn_pgid(const Arg *arg) } static void -trigger_xdrawer_chord(long long now) +trigger_softkey_chord(long long now) { - const Arg xdrawercmd = { .v = (const char*[]){ "xdrawer", NULL } }; if (last_menu_pgid > 0) { kill(-last_menu_pgid, SIGKILL); last_menu_pgid = 0; @@ -1563,7 +1750,10 @@ trigger_xdrawer_chord(long long now) write_softkey_suppress(now + SOFTKEY_SUPPRESS_MS); XUngrabKeyboard(dpy, CurrentTime); XFlush(dpy); - spawn(&xdrawercmd); + if (!dispatch_plugin_softkey_chord()) { + const Arg xdrawercmd = { .v = (const char*[]){ "xdrawer", NULL } }; + spawn(&xdrawercmd); + } } static void @@ -1631,7 +1821,7 @@ keypress(XEvent *e) if (last_softkey_mask != 0 && (now - last_softkey_ms) <= SOFTKEY_CANCEL_WINDOW_MS) combined |= last_softkey_mask; if (combined == (SOFTKEY_LEFT | SOFTKEY_RIGHT)) { - trigger_xdrawer_chord(now); + trigger_softkey_chord(now); } else { softkey_pending = which; last_softkey_mask = which; @@ -1645,6 +1835,16 @@ keypress(XEvent *e) return; } + if (!is_phone_locked() && + dispatch_plugin_global_key(keysym, ev->keycode, CLEANMASK(ev->state), 1)) { + return; + } + + if (!selmon->sel && !is_phone_locked()) { + if (dispatch_plugin_idle_key(keysym, ev->keycode, CLEANMASK(ev->state))) + return; + } + if (!selmon->sel && CLEANMASK(ev->state) == 0) { if (keysym == XK_Return) { const Arg entercmd = { .v = (const char*[]){ "sxmo_appmenu.sh", NULL } }; @@ -2138,7 +2338,7 @@ run(void) int hw_down = query_softkeys_down(); softkey_pending |= hw_down; if (softkey_pending == (SOFTKEY_LEFT | SOFTKEY_RIGHT)) { - trigger_xdrawer_chord(now); + trigger_softkey_chord(now); continue; } long long rem = softkey_deadline_ms - now; @@ -2398,6 +2598,7 @@ setup(void) lidfd = open("/dev/input/by-path/platform-gpio-keys-event", O_RDONLY | O_NONBLOCK | O_CLOEXEC); if (lidfd < 0) lidfd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK | O_CLOEXEC); + load_plugins(); grabkeys(); focus(NULL); } @@ -2648,6 +2849,8 @@ unmapnotify(XEvent *e) setclientstate(c, WithdrawnState); else unmanage(c, 0); + } else if (selmon && !selmon->sel) { + focus(NULL); } } @@ -2658,7 +2861,7 @@ updatebars(void) XSetWindowAttributes wa = { .override_redirect = True, .background_pixmap = ParentRelative, - .event_mask = ButtonPressMask|ExposureMask + .event_mask = ButtonPressMask|ExposureMask|KeyPressMask|KeyReleaseMask }; XClassHint ch = {"dwm", "dwm"}; for (m = mons; m; m = m->next) { diff --git a/src/sxmo-dwm/dwm_plugin.h b/src/sxmo-dwm/dwm_plugin.h new file mode 100644 index 0000000..df37bc0 --- /dev/null +++ b/src/sxmo-dwm/dwm_plugin.h @@ -0,0 +1,45 @@ +#ifndef DWM_PLUGIN_H +#define DWM_PLUGIN_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define DWM_PLUGIN_API_VERSION 1 + +typedef struct DwmHostApi { + int api_version; + Display *dpy; + Window root; + int screen; + int sw; + int sh; + int bh; + int (*is_idle_desktop)(void); + int (*is_phone_locked)(void); + void (*spawn_command)(const char *const *argv); + void (*spawn_plugin)(const char *plugin_name, const char *arg); +} DwmHostApi; + +typedef struct DwmPlugin { + int api_version; + const char *name; + const char *description; + int (*init)(const DwmHostApi *host); + void (*cleanup)(void); + int (*on_softkey_chord)(const DwmHostApi *host); + int (*on_idle_key)(const DwmHostApi *host, KeySym keysym, unsigned int keycode, unsigned int state); + int (*on_global_key)(const DwmHostApi *host, KeySym keysym, unsigned int keycode, unsigned int state, int is_press); + int (*run_main)(int argc, char **argv); +} DwmPlugin; + +#define DWM_PLUGIN_ENTRY_SYMBOL "dwm_plugin_entry" + +#ifdef __cplusplus +} +#endif + +#endif /* DWM_PLUGIN_H */ diff --git a/src/xdrawer/xdrawer.cpp b/src/xdrawer/xdrawer.cpp index 9bb244c..7706c2c 100644 --- a/src/xdrawer/xdrawer.cpp +++ b/src/xdrawer/xdrawer.cpp @@ -14,6 +14,8 @@ #include #include +#include "../sxmo-dwm/dwm_plugin.h" + #include #include #include @@ -433,7 +435,8 @@ class PhoneController { } // namespace -int main() { +static int xdrawer_run_main(int, char**) { + gRunning = 1; int64_t startMs = nowMs(); std::string pidPath = getRuntimeFile("xdrawer.pid"); std::string startPath = getRuntimeFile("xdrawer.start"); @@ -870,3 +873,31 @@ int main() { ::unlink(pidPath.c_str()); return 0; } + +static int xdrawer_plugin_init(const DwmHostApi*) { + return 0; +} + +static int xdrawer_on_softkey_chord(const DwmHostApi* host) { + if (host && host->spawn_plugin) { + host->spawn_plugin("xdrawer", nullptr); + return 1; + } + return 0; +} + +extern "C" __attribute__((visibility("default"))) const DwmPlugin dwm_plugin_entry = { + DWM_PLUGIN_API_VERSION, + "xdrawer", + "Global phone hardware controls drawer (softkey chord)", + xdrawer_plugin_init, + nullptr, + xdrawer_on_softkey_chord, + nullptr, + nullptr, + xdrawer_run_main +}; + +int main(int argc, char** argv) { + return xdrawer_run_main(argc, argv); +}