Nadia Berthouze

62 papers A* 7A 7B 4C 1Misc 1Journal 11Unranked 27
YearRankTypeTitle / Venue / Authors
2026 conf
CHI Extended Abstracts
Ana Tajadura-Jiménez, Elena Márquez Segura, Marte Roel Lesur, Laia Turmo Vidal, Frédéric Bevilacqua, Nadia Berthouze, Aneesha Singh, Alice C. Haynes, Pedro Lopes, Jun Nishida, Don Samitha Elvitigala, Paul Strohmeier
2026 A* conf
CHI
Florian 'Floyd' Mueller, Nadia Berthouze, Misha Sra, Mar González-Franco, Henning Pohl, Susanne Boll, Richard Byrne, Arthur Caetano, Masahiko Inami, Jarrod Knibbe, Per Ola Kristensson, Xiang Li, Zhuying Li, Joe Marshall, Louise Petersen Matjeka, Minna Orvokki Nygren, Rakesh Patibanda, Sara Price, Harald Reiterer, Aryan Saini, Oliver Schneider, Ambika Shahu, Phoebe O. Toups Dugas, Don Samitha Elvitigala
2026 A* conf
CHI
Yifu Liu, Tao Bi, Chuang Yu, Lucie F. Hernandez, Bruna Beatriz Petreca, Minna Nygren, Sharon Baurley, Youngjun Cho, Nadia Berthouze
2025 conf
CHI Extended Abstracts
Carey Jewitt, Sara Price, Lucia Seminara, Nihar Sabnis, Jürgen Steimle, Nadia Berthouze, Kouta Minamizawa, Desiree Foerster, Grant Jun Otsuki
2025 A* conf
CHI
Kyrill Potapov, Nicolas Gold, Temitayo A. Olugbade, Amanda C. de C. Williams, Christopher Dieter Overbeck, Danielle Lynch, Minna Orvokki Nygren, Nadia Berthouze
2024 conf
ACII (Workshops and Demos)
Zakia Hammal, Steffen Walter, Nadia Berthouze, Raul Fernandez Rojas, Ben Seymour, Roland Goecke
2024 J jnl
Proc. ACM Hum. Comput. Interact.
Elahi Hossain, Greg Wadley, Nadia Berthouze, Anna L. Cox
2024 J jnl
Artif. Intell. Medicine
Paolo Buono, Nadia Berthouze, Maria Francesca Costabile, Adela Grando, Andreas Holzinger
2024 A conf
Conference on Designing Interactive Systems (Companion Volume)
Caroline Yan Zheng, Georgios Andrikopoulos, Mark Paterson, Nadia Berthouze, Minna Orvokki Nygren, Yoav Luft, Madeline Balaam
2023 B conf
ICMI
Zakia Hammal, Steffen Walter, Nadia Berthouze
2023 conf
CHI Extended Abstracts
Bruna Beatriz Petreca, Ana Tajadura-Jiménez, Laia Turmo Vidal, Ricardo O'Nascimento, Hasti Seifi, Judith Ley-Flores, Aneesha Singh, Nadia Berthouze, Marianna Obrist, Sharon Baurley
2023 A* conf
CHI
Leya George, Aneesha Singh, Nadia Berthouze, Lorna Hobbs, Jo Gibbs
2023 J jnl
Int. J. Hum. Comput. Stud.
Jamie Danemayer, Cathy Holloway, Youngjun Cho, Nadia Berthouze, Aneesha Singh, William Bhot, Ollie Dixon, Marko Grobelnik, John Shawe-Taylor
2023 conf
ACIIW
Chuang Yu, Yifu Liu, Bruna Petreca, Sharon Baurley, Nadia Berthouze
2022 conf
UbiComp/ISWC Adjunct
Tao Bi, Temitayo A. Olugbade, Akhil Mathur, Catherine Holloway, Aneesha Singh, Enrico Costanza, Nadia Berthouze
2022 J jnl
IEEE Trans. Parallel Distributed Syst.
Shaoduo Gan, Akhil Mathur, Anton Isopoussu, Fahim Kawsar, Nadia Berthouze, Nicholas D. Lane
2022 conf
CHI Extended Abstracts
Elahi Hossain, Greg Wadley, Nadia Berthouze, Anna L. Cox
2022 A conf
BMVC
Jitesh Joshi, Nadia Berthouze, Youngjun Cho
2022 conf
AutomotiveUI (Adjunct Proceedings)
Mohamed Abd El Ghani, Nadia Berthouze, Nicolai Marquardt, Ravi Jani, Dom Hargreaves, Stephen James Wright, Hugh Smith
2021 B conf
ICMI
Zakia Hammal, Nadia Berthouze, Steffen Walter
2021 J jnl
CoRR
Shaoduo Gan, Akhil Mathur, Anton Isopoussu, Fahim Kawsar, Nadia Berthouze, Nicholas D. Lane
2021 A conf
ASSETS
Maryam Bandukda, Catherine Holloway, Aneesha Singh, Giulia Barbareschi, Nadia Berthouze
2021 conf
CHI Extended Abstracts
Maryam Bandukda, Aneesha Singh, Catherine Holloway, Nadia Berthouze, Emeline Brulé, Ana Tajadura-Jiménez, Oussama Metatla, Ana Javornik, Anja Thieme
2021 J jnl
Frontiers Comput. Sci.
Catherine Holloway, William Bhot, Keir X. X. Yong, Ian McCarthy, Tatsuto Suzuki, Amelia Carton, Biao Yang, Robin Serougne, Derrick Boampong, Nick Tyler, Sebastian J. Crutch, Nadia Berthouze, Youngjun Cho
2021 A* conf
CHI
Judith Ley-Flores, Laia Turmo Vidal, Nadia Berthouze, Aneesha Singh, Frédéric Bevilacqua, Ana Tajadura-Jiménez
2021 conf
ICMI Companion
Tao Bi, Raffaele Andrea Buono, Temitayo A. Olugbade, Aneesha Singh, Catherine Holloway, Enrico Costanza, Amanda C. de C. Williams, Nicolas E. Gold, Nadia Berthouze
2020 ed.
ICMI Companion
Khiet P. Truong, Dirk Heylen, Mary Czerwinski, Nadia Berthouze, Mohamed Chetouani, Mikio Nakano
2020 J jnl
CoRR
Joy Egede, Temitayo A. Olugbade, Chongyang Wang, Siyang Song, Nadia Berthouze, Michel F. Valstar, Amanda C. de C. Williams, Hongying Meng, Min Hane Aung, Nicholas D. Lane
2020 J jnl
CoRR
Ahmed Alqaraawi, Martin Schuessler, Philipp Weiß, Enrico Costanza, Nadia Berthouze
2020 A conf
IUI
Ahmed Alqaraawi, Martin Schuessler, Philipp Weiß, Enrico Costanza, Nadia Berthouze
2020 B ed.
ICMI
Khiet P. Truong, Dirk Heylen, Mary Czerwinski, Nadia Berthouze, Mohamed Chetouani, Mikio Nakano
2020 J jnl
CoRR
Akhil Mathur, Fahim Kawsar, Nadia Berthouze, Nicholas D. Lane
2020 Misc conf
ICASSP
Akhil Mathur, Fahim Kawsar, Nadia Berthouze, Nicholas D. Lane
2020 J jnl
CoRR
Akhil Mathur, Anton Isopoussu, Fahim Kawsar, Nadia Berthouze, Nicholas D. Lane
2020 conf
CHI Extended Abstracts
Rakesh Patibanda, Nathan Arthur Semertzidis, Michaela Scary, Joseph Nathan La Delfa, Josh Andres, Mehmet Aydin Baytas, Anna Lisa Martin-Niedecken, Paul Strohmeier, Bruno Fruchard, Sang-won Leigh, Elisa D. Mekler, Suranga Nanayakkara, Josef Wiemeyer, Nadia Berthouze, Kai Kunze, Thanassis Rikakis, Aisling Kelliher, Kevin Warwick, Elise van den Hoven, Florian 'Floyd' Mueller, Steve Mann
2020 conf
NIME
Nicolas E. Gold, Chongyang Wang, Temitayo A. Olugbade, Nadia Berthouze, Amanda C. de C. Williams
2020 A conf
ASSETS
Maryam Bandukda, Catherine Holloway, Aneesha Singh, Nadia Berthouze
2020 conf
ECCV Workshops (1)
James Z. Wang, Norman I. Badler, Nadia Berthouze, Rick O. Gilmore, Kerri L. Johnson, Àgata Lapedriza, Xin Lu, Nikolaus F. Troje
2020 A conf
INTERSPEECH
Akhil Mathur, Nadia Berthouze, Nicholas D. Lane
2019 conf
SocialSens@CPSIoTWeek
Akhil Mathur, Fahim Kawsar, Nadia Berthouze, Nicholas D. Lane
2019 B conf
ACII
Erica Volta, Radoslaw Niewiadomski, Temitayo A. Olugbade, Carla Gilio, Elena Cocchi, Nadia Berthouze, Monica Gori, Gualtiero Volpe
2019 conf
IPSN
Akhil Mathur, Anton Isopoussu, Fahim Kawsar, Nadia Berthouze, Nicholas D. Lane
2019 ch.
Human Activity Sensing
Akhil Mathur, Anton Isopoussu, Fahim Kawsar, Robert Smith, Nadia Berthouze, Nicholas D. Lane
2019 conf
CHI Extended Abstracts
Maryam Bandukda, Aneesha Singh, Nadia Berthouze, Catherine Holloway
2019 conf
UbiComp/ISWC Adjunct
Akhil Mathur, Anton Isopoussu, Nadia Berthouze, Nicholas D. Lane, Fahim Kawsar
2018 conf
CHI Extended Abstracts
Nora Ptakauskaite, Anna L. Cox, Nadia Berthouze
2018 conf
UbiComp/ISWC Adjunct
Akhil Mathur, Anton Isopoussu, Fahim Kawsar, Robert Smith, Nicholas D. Lane, Nadia Berthouze
2018 conf
CHI Extended Abstracts
Sara Price, Kerstin Leder Mackley, Carey Jewitt, Gijs Huisman, Bruna Petreca, Nadia Berthouze, Domenico Prattichizzo, Vincent Hayward
2015 ed.
PervasiveHealth
Bert Arnrich, Cem Ersoy, Anind K. Dey, Kai Kunze, Nadia Berthouze
2014 conf
UbiComp Adjunct
Daniel Harrison, Nadia Berthouze, Paul Marshall, Jon Bird
2013 conf
eNTERFACE
Maurizio Mancini, Laurent Ach, Emeline Bantegnie, Tobias Baur, Nadia Berthouze, Debajyoti Datta, Yu Ding, Stéphane Dupont, Harry J. Griffin, Florian Lingenfelser, Radoslaw Niewiadomski, Catherine Pelachaud, Olivier Pietquin, Bilal Piot, Jérôme Urbain, Gualtiero Volpe, Johannes Wagner
2013 conf
BMSB
Charles Ray, Nadia Berthouze, Andrew Davis
2012 conf
CHI Extended Abstracts
Lucy Hughes, Douglas Atkinson, Nadia Berthouze, Sharon Baurley
2012 A conf
AISTATS
Bernardino Romera-Paredes, Andreas Argyriou, Nadia Berthouze, Massimiliano Pontil
2011 ch.
Annual Review of Cybertherapy and Telemedicine
Jason Drummond, Nadia Berthouze, Anthony Steed
2010 A* conf
ICRA
Geraint Jones, Nadia Berthouze, Roman Bielski, Simon J. Julier
2009 conf
AFFINE@ICMI
Andrea Kleinsmith, Issam Rebaï, Nadia Berthouze, Jean-Claude Martin
2008 A* conf
CHI
Siân E. Lindley, James Le Couteur, Nadia Berthouze
2007 conf
INTERACT (2)
Ann Blandford, Rachel Benedyk, Nadia Berthouze, Anna Louise Cox, John Dowell
2006 J jnl
Int. J. Comput. Sci. Eng.
Subhash Bhalla, Masaki Hasegawa, Enrique Lopez de Lara Gutierrez, Nadia Berthouze
2005 conf
DNIS
Subhash Bhalla, Masaki Hasegawa, Enrique Lopez de Lara Gutierrez, Nadia Berthouze, Tomoko Izumita
2002 C conf
IDEAL
Tomofumi Hayashi, Akio Sato, Nadia Berthouze
redb/extractors/decompiler/apk/jadx_wrapper.py
← Index redb/extractors/decompiler/apk/jadx_wrapper.py python
"""JADX decompiler subprocess wrapper.

Manages JADX subprocess execution for Java decompilation,
following the CAPA extractor subprocess pattern.
"""

import os
import re
import signal
import subprocess
from typing import Dict, Optional


class JADXDecompiler:
    """Subprocess wrapper for JADX Java decompilation."""

    def __init__(self, jadx_path: str = None, timeout: int = None, log=None):
        self.jadx_path = jadx_path or os.getenv("JADX_PATH", "jadx")
        self.timeout = timeout or int(os.getenv("JADX_TIMEOUT", "300"))
        self.log = log

    def decompile(self, apk_path: str, output_dir: str) -> bool:
        """Run JADX decompilation on an APK file.

        Returns True on success, False on failure.
        """
        cmd = [
            self.jadx_path,
            "--no-res",
            "--no-imports",
            "--threads-count", "2",
            "--output-dir", output_dir,
            apk_path,
        ]

        try:
            process = subprocess.Popen(
                cmd,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
                preexec_fn=os.setsid,
            )

            try:
                stdout, stderr = process.communicate(timeout=self.timeout)
                if process.returncode != 0:
                    if self.log:
                        self.log.warning(
                            f"JADX returned non-zero exit code {process.returncode}: "
                            f"{stderr[:500] if stderr else 'no stderr'}"
                        )
                    # JADX may still produce partial output on non-zero exit
                    return os.path.isdir(os.path.join(output_dir, "sources"))
                return True

            except subprocess.TimeoutExpired:
                if self.log:
                    self.log.error(
                        f"JADX timed out after {self.timeout}s"
                    )
                # Kill the process group
                try:
                    os.killpg(os.getpgid(process.pid), signal.SIGTERM)
                    process.wait(timeout=3)
                except (ProcessLookupError, subprocess.TimeoutExpired):
                    try:
                        os.killpg(os.getpgid(process.pid), signal.SIGKILL)
                    except ProcessLookupError:
                        pass
                return False

        except FileNotFoundError:
            if self.log:
                self.log.error(
                    f"JADX not found at '{self.jadx_path}'. "
                    "Install JADX or set JADX_PATH env var."
                )
            return False
        except Exception as e:
            if self.log:
                self.log.error(f"JADX execution error: {e}")
            return False

    def parse_java_methods(self, output_dir: str) -> Dict[str, str]:
        """Parse JADX output into per-method Java source.

        Returns dict keyed by 'package.ClassName.methodName(ParamType1, ParamType2)'.
        """
        sources_dir = os.path.join(output_dir, "sources")
        if not os.path.isdir(sources_dir):
            return {}

        methods = {}
        for root, _dirs, files in os.walk(sources_dir):
            for fname in files:
                if not fname.endswith(".java"):
                    continue
                fpath = os.path.join(root, fname)
                try:
                    with open(fpath, "r", encoding="utf-8", errors="replace") as f:
                        content = f.read()

                    # Derive the fully qualified class name from file path
                    rel_path = os.path.relpath(fpath, sources_dir)
                    class_fqn = rel_path.replace(os.sep, ".").replace("/", ".")
                    if class_fqn.endswith(".java"):
                        class_fqn = class_fqn[:-5]

                    file_methods = self._extract_methods_from_java(
                        content, class_fqn
                    )
                    methods.update(file_methods)

                except Exception:
                    continue

        return methods

    def _extract_methods_from_java(
        self, source: str, class_fqn: str
    ) -> Dict[str, str]:
        """Extract individual methods from a Java source file.

        Uses brace-depth tracking to find method boundaries.
        """
        methods = {}
        lines = source.split("\n")
        i = 0

        while i < len(lines):
            line = lines[i]
            match = self._is_method_declaration(line)
            if match:
                method_name, param_types = match
                # Track brace depth to find method end
                start_line = i
                brace_depth = 0
                found_open = False

                for j in range(i, len(lines)):
                    for ch in lines[j]:
                        if ch == "{":
                            brace_depth += 1
                            found_open = True
                        elif ch == "}":
                            brace_depth -= 1

                    if found_open and brace_depth == 0:
                        method_body = "\n".join(lines[start_line : j + 1])
                        key = f"{class_fqn}.{method_name}({param_types})"
                        methods[key] = method_body
                        i = j + 1
                        break
                else:
                    i += 1
            else:
                i += 1

        return methods

    # Regex for method declarations (not constructors, not class/interface decl)
    _METHOD_DECL_RE = re.compile(
        r"^\s*(?:(?:public|private|protected|static|final|synchronized|"
        r"native|abstract|strictfp)\s+)*"
        r"(?:[\w<>\[\]?.]+\s+)"  # return type
        r"(\w+)"  # method name
        r"\s*\(([^)]*)\)"  # parameters
        r"(?:\s*throws\s+[\w.,\s]+)?"
        r"\s*\{"
    )

    def _is_method_declaration(self, line: str) -> Optional[tuple]:
        """Check if a line is a method declaration.

        Returns (method_name, param_types_str) or None.
        """
        m = self._METHOD_DECL_RE.match(line)
        if not m:
            return None

        method_name = m.group(1)
        params_raw = m.group(2).strip()

        # Skip class-level blocks
        if method_name in ("if", "for", "while", "switch", "try", "catch"):
            return None

        # Extract just the type names from parameters
        if not params_raw:
            return (method_name, "")

        param_types = []
        for param in params_raw.split(","):
            param = param.strip()
            if not param:
                continue
            parts = param.split()
            # Last non-annotation token before the variable name is the type
            # Simple heuristic: type is second-to-last, name is last
            if len(parts) >= 2:
                param_types.append(parts[-2])
            elif len(parts) == 1:
                param_types.append(parts[0])

        return (method_name, ", ".join(param_types))