# kai-xin-02/micswitch architecture

> Architecture diagram of the GitHub repository kai-xin-02/micswitch, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kai-xin-02/micswitch
- Repository: https://github.com/kai-xin-02/micswitch

## Overview

MicSwitch is a discontinued Android app that selects two voice apps and exposes a floating control intended to toggle their microphone permissions. MainActivity checks privileged access, gathers app choices, and starts FloatingService; tapping its bubble invokes MicController, which delegates permission changes. The README describes root/Shizuku detection and overlay access, while the sampled source shows the implementation. Android’s audio model means these permission changes do not transfer an active microphone session.

Main entry points: [`app/src/main/java/ui/MainActivity.kt`](https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/ui/MainActivity.kt) (App setup), [`app/src/main/java/core/PermissionHandler.kt`](https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/core/PermissionHandler.kt) (Permission handler), [`app/src/main/java/core/MicDetector.kt`](https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/core/MicDetector.kt) (Voice app detection), [`app/src/main/java/service/FloatingService.kt`](https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/service/FloatingService.kt) (Floating service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App workflow"]
  node_main["App setup<br/>[MainActivity.kt]"]
  node_detector["Voice app detection<br/>[MicDetector.kt]"]
end

subgraph group_control["Switch control"]
  node_controller["Mic controller<br/>[MicController.kt]"]
  node_floating["Floating service<br/>[FloatingService.kt]"]
end

subgraph group_access["System access"]
  node_permission["Permission handler"]
end

node_user(("User"))
node_package_manager["Android package manager"]
node_audio_diagnostics["Audio diagnostics"]
node_overlay_system["Android overlay system"]
node_root["Root shell"]
node_shizuku["Shizuku"]

node_user -->|"selects apps"| node_main
node_main -->|"queries apps"| node_package_manager
node_main -->|"checks access"| node_permission
node_main -->|"requests detection"| node_detector
node_detector -->|"reads active audio"| node_audio_diagnostics
node_detector -->|"checks installed apps"| node_package_manager
node_main -->|"sets app pair"| node_controller
node_main -->|"starts service"| node_floating
node_floating -->|"adds bubble"| node_overlay_system
node_floating -->|"requests switch"| node_controller
node_controller -->|"revokes and grants"| node_permission
node_permission -.->|"runs commands"| node_root
node_permission -.->|"checks and runs commands"| node_shizuku

click node_main "https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/ui/MainActivity.kt"
click node_detector "https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/core/MicDetector.kt"
click node_controller "https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/core/MicController.kt"
click node_floating "https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/service/FloatingService.kt"
click node_permission "https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/core/PermissionHandler.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_detector,node_user toneBlue
class node_controller,node_floating toneAmber
class node_permission toneMint
class node_package_manager,node_audio_diagnostics,node_overlay_system,node_root,node_shizuku toneIndigo
```

## Components

### App workflow

- [App setup](https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/ui/MainActivity.kt): `app/src/main/java/ui/MainActivity.kt`
- [Voice app detection](https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/core/MicDetector.kt): `app/src/main/java/core/MicDetector.kt`

### Switch control

- [Mic controller](https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/core/MicController.kt): `app/src/main/java/core/MicController.kt`
- [Floating service](https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/service/FloatingService.kt): `app/src/main/java/service/FloatingService.kt`

### System access

- [Permission handler](https://github.com/kai-xin-02/micswitch/blob/main/app/src/main/java/core/PermissionHandler.kt): `app/src/main/java/core/PermissionHandler.kt`

### Other components

- **User**
- **Android package manager**
- **Audio diagnostics**
- **Android overlay system**
- **Root shell**
- **Shizuku**

## Connections

- User → App setup: selects apps
- App setup → Android package manager: queries apps
- App setup → Permission handler: checks access
- App setup → Voice app detection: requests detection
- Voice app detection → Audio diagnostics: reads active audio
- Voice app detection → Android package manager: checks installed apps
- App setup → Mic controller: sets app pair
- App setup → Floating service: starts service
- Floating service → Android overlay system: adds bubble
- Floating service → Mic controller: requests switch
- Mic controller → Permission handler: revokes and grants
- Permission handler → Root shell: runs commands
- Permission handler → Shizuku: checks and runs commands
