RepoPilotOpen in app →

kyleduo/SwitchButton

A cute widget of Switch Button for you to create beautiful and friendly UI.

Concerns

Stale and unlicensed — last commit 2y ago

weakest axis
Use as dependencyConcerns

no license — legally unclear; last commit was 2y ago…

Fork & modifyConcerns

no license — can't legally use code; no tests detected…

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isConcerns

no license — can't legally use code; last commit was 2y ago…

  • 5 active contributors
  • Stale — last commit 2y ago
  • Single-maintainer risk — top contributor 83% of recent commits
Show all 6 evidence items →
  • No license — legally unclear to depend on
  • No CI workflows detected
  • No test directory detected
What would change the summary?
  • Use as dependency ConcernsMixed if: publish a permissive license (MIT, Apache-2.0, etc.)
  • Fork & modify ConcernsMixed if: add a LICENSE file
  • Deploy as-is ConcernsMixed if: add a LICENSE file

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Great to learn from" badge

Paste into your README — live-updates from the latest cached analysis.

RepoPilot: Great to learn from
[![RepoPilot: Great to learn from](https://repopilot.app/api/badge/kyleduo/switchbutton?axis=learn)](https://repopilot.app/r/kyleduo/switchbutton)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/kyleduo/switchbutton on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: kyleduo/SwitchButton

Generated by RepoPilot · 2026-05-09 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/kyleduo/SwitchButton shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

AVOID — Stale and unlicensed — last commit 2y ago

  • 5 active contributors
  • ⚠ Stale — last commit 2y ago
  • ⚠ Single-maintainer risk — top contributor 83% of recent commits
  • ⚠ No license — legally unclear to depend on
  • ⚠ No CI workflows detected
  • ⚠ No test directory detected

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live kyleduo/SwitchButton repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/kyleduo/SwitchButton.

What it runs against: a local clone of kyleduo/SwitchButton — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in kyleduo/SwitchButton | Confirms the artifact applies here, not a fork | | 2 | Default branch master exists | Catches branch renames | | 3 | 5 critical file paths still exist | Catches refactors that moved load-bearing code | | 4 | Last commit ≤ 918 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>kyleduo/SwitchButton</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of kyleduo/SwitchButton. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/kyleduo/SwitchButton.git
#   cd SwitchButton
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of kyleduo/SwitchButton and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "kyleduo/SwitchButton(\\.git)?\\b" \\
  && ok "origin remote is kyleduo/SwitchButton" \\
  || miss "origin remote is not kyleduo/SwitchButton (artifact may be from a fork)"

# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
  && ok "default branch master exists" \\
  || miss "default branch master no longer exists"

# 4. Critical files exist
test -f "SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java" \\
  && ok "SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java" \\
  || miss "missing critical file: SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java"
test -f "SwitchButton/library/src/main/res/values/attrs.xml" \\
  && ok "SwitchButton/library/src/main/res/values/attrs.xml" \\
  || miss "missing critical file: SwitchButton/library/src/main/res/values/attrs.xml"
test -f "SwitchButton/library/src/main/java/com/kyleduo/switchbutton/ColorUtils.java" \\
  && ok "SwitchButton/library/src/main/java/com/kyleduo/switchbutton/ColorUtils.java" \\
  || miss "missing critical file: SwitchButton/library/src/main/java/com/kyleduo/switchbutton/ColorUtils.java"
test -f "SwitchButton/settings.gradle" \\
  && ok "SwitchButton/settings.gradle" \\
  || miss "missing critical file: SwitchButton/settings.gradle"
test -f "SwitchButton/library/build.gradle" \\
  && ok "SwitchButton/library/build.gradle" \\
  || miss "missing critical file: SwitchButton/library/build.gradle"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 918 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~888d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/kyleduo/SwitchButton"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

SwitchButton is a customizable Android widget library that provides a toggle switch UI component with support for iOS, MIUI, and Flyme style themes. It solves the problem of building visually appealing, themeable switch controls in Android apps without reinventing the wheel—offering fine-grained control over thumb animation, text rendering, colors, and touch behavior through XML attributes and programmatic APIs. Simple two-module Gradle structure: SwitchButton/ contains the library code (likely in an unreferenced library/ submodule based on Maven coordinates), and SwitchButton/demo/ contains a demo app with multiple Activity classes (MainActivity, RecyclerActivity, StyleActivity, UseActivity, StyleInCodeActivity) showcasing different styling approaches and drawable/color resource examples.

👥Who it's for

Android developers building consumer-facing apps (especially those with Chinese user bases, given MIUI/Flyme support) who need a polished, customizable switch control beyond Android's native Switch widget and want ready-made style presets rather than building from scratch.

🌱Maturity & risk

This is an actively maintained, production-ready library. Version 2.1.0 is published to mavenCentral(), has a demo app on Google Play, and includes detailed CHANGELOG documentation. However, the maintainer appears to be a single contributor (kyleduo); commit recency data is not visible, so update velocity is unclear, but the 2.0.0 major version refactor shows recent substantive work.

Low-to-moderate risk: the library is stable and published, but relies on a single maintainer (kyleduo) with no visible CI/CD configuration in the provided files. The 2.0.0 release introduced breaking attribute changes (kswBackMeasureRatio → kswThumbRangeRatio, text positioning attributes), requiring migration effort for existing consumers. No test files are visible in the top-60 file list, which is concerning for long-term maintenance.

Active areas of work

Version 2.1.0 has been released and is the current stable version, pulling from mavenCentral(). The README indicates active documentation of migration paths (detailed 2.0.0 migration guide in both English and Chinese), suggesting the maintainer is engaged but the provided file list does not show recent commit details or open PRs.

🚀Get running

Clone the repo, open SwitchButton/ in Android Studio (Gradle-based), sync dependencies via build.gradle, then run the demo app on an emulator or device: ./gradlew :demo:installDebug or build the debug APK with ./gradlew :demo:assembleDebug.

Daily commands: cd SwitchButton && ./gradlew :demo:installDebug (requires Android SDK/emulator). Alternatively, build and install the provided APK from GitHub releases or Google Play for quick preview without building.

🗺️Map of the codebase

  • SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java — Core widget implementation—every contributor must understand the drawing logic, measurement, and gesture handling that defines the entire library
  • SwitchButton/library/src/main/res/values/attrs.xml — XML attribute definitions that control all customizable properties; changes here ripple through demo apps and user code
  • SwitchButton/library/src/main/java/com/kyleduo/switchbutton/ColorUtils.java — Utility for color state management and interpolation; essential for style variants and theme support
  • SwitchButton/settings.gradle — Gradle module configuration that defines library vs. demo build structure and packaging
  • SwitchButton/library/build.gradle — Library build configuration including publishing setup; required for releases and version management
  • SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/MainActivity.java — Primary demo entry point showcasing default SwitchButton usage and launching other style examples

🛠️How to make changes

Add a New Style Preset

  1. Create a new drawable XML for the thumb in SwitchButton/demo/src/main/res/drawable/ (e.g., custom_thumb_drawable.xml with shape or state-list) (SwitchButton/demo/src/main/res/drawable)
  2. Create a new color XML for the background in SwitchButton/demo/src/main/res/color/ (e.g., custom_back_color.xml with state-list selector) (SwitchButton/demo/src/main/res/color)
  3. Add a new Activity in demo/src/main/java/com/kyleduo/switchbutton/demo/ that inflates a layout with SwitchButton and applies your custom drawables via XML attributes (SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo)
  4. Update SwitchButton/demo/src/main/res/menu/menu_main.xml to add a menu item linking to your new Activity (SwitchButton/demo/src/main/res/menu/menu_main.xml)

Customize SwitchButton Colors and Sizes Programmatically

  1. Reference the custom attributes from SwitchButton/library/src/main/res/values/attrs.xml (e.g., ksw_thumbColor, ksw_backColor, ksw_textOn, ksw_textOff) (SwitchButton/library/src/main/res/values/attrs.xml)
  2. In your Activity or Fragment, cast findViewById() to SwitchButton and call setThumbColor(), setBackColor(), setTextOn(), setTextOff() or setOnStateChangeListener() (SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java)
  3. Consult StyleInCodeActivity.java for a working example of programmatic customization (SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/StyleInCodeActivity.java)

Integrate SwitchButton into a RecyclerView

  1. Create a layout file (e.g., layout_recycler_item.xml) containing a SwitchButton widget with unique ID (SwitchButton/demo/src/main/res/layout/layout_recycler_item.xml)
  2. In your RecyclerView.ViewHolder, bind the SwitchButton and call setOnStateChangeListener() to capture toggled state and update your data model (SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/RecyclerActivity.java)
  3. In onBindViewHolder(), restore the SwitchButton checked state from your data source to ensure consistency when views are recycled (SwitchButton/demo/src/main/java/com/kyleduo/switchbutton/demo/RecyclerActivity.java)

Add a New Attribute to SwitchButton

  1. Define the attribute in SwitchButton/library/src/main/res/values/attrs.xml within the <declare-styleable name="SwitchButton"> block (e.g., new attr with name and format) (SwitchButton/library/src/main/res/values/attrs.xml)
  2. In SwitchButton.java, read the attribute in the constructor using TypedArray: typedArray.getColor(), getInt(), getDimension(), etc. (SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java)
  3. Store the value in a private field and use it during onDraw() or onMeasure() to affect the widget's appearance or behavior (SwitchButton/library/src/main/java/com/kyleduo/switchbutton/SwitchButton.java)
  4. Test the new attribute in a demo Activity layout (e.g., activity_style.xml) by setting the attribute with the custom namespace: app:ksw_yourNewAttribute="value" (SwitchButton/demo/src/main/res/layout/activity_style.xml)

🔧Why these technologies

  • Android Custom View (Canvas drawing) — Provides full control over rendering, animation timing, and gesture response for a smooth, hardware-optimized toggle UI without relying on framework button behavior
  • Drawable with StateListDrawable — Decouples visual appearance (thumb shape, background) from widget logic, allowing multiple style presets (iOS, MIUI, FlyMe) to coexist without code duplication
  • ObjectAnimator / ValueAnimator via postInvalidate() — Provides frame-by-frame animation control at 60fps with color interpolation, enabling smooth transitions without external animation libraries
  • Gradle Maven Publish Plugin — Simplifies distribution to Maven Central, allowing consumers to add the library via Gradle dependency without manual JAR management

⚖️Trade-offs already made

  • Custom view drawing instead of compound layout (FrameLayout + buttons)

    • Why: Enables precise pixel-level control and single-frame animation, avoiding layout inflation overhead and complex view hierarchy
    • Consequence: Requires implementing onDraw(), onMeasure(), and onTouchEvent() from scratch; testing is more complex than testing simple layout XML
  • Horizontal-only gesture consumption in scrollable containers

    • Why: Prevents SwitchButton thumb drag from blocking vertical scroll, improving UX in RecyclerView and nested scrolling scenarios
    • Consequence: Adds logic to onTouchEvent() to differentiate horizontal vs. vertical motion; vertical swipe may feel less responsive if not carefully tuned
  • Attribute-based customization (XML) as primary API, with programmatic setters as secondary

    • Why: Allows designers to preview styles in Android Studio layout editor; reduces boilerplate for common use cases
    • Consequence: Runtime changes via code require manual invalidate() calls; no data-binding support built-in (though compatible with AndroidX data-binding)
  • Single library module with demo as separate app module

    • Why: Clear separation of concerns; library is agnostic to demo styling and can be used in any Android app without demo code
    • Consequence: undefined

🪤Traps & gotchas

Version 2.0.0 introduced breaking changes to attribute names with no auto-migration: kswBackMeasureRatio was removed and replaced with kswThumbRangeRatio; kswTextMarginH and kswAutoAdjustTextPosition were removed in favor of kswTextThumbInset, kswTextExtra, and kswTextAdjust. Projects upgrading from 1.x must manually update all XML attributes and getter/setter calls. The README references 'a big diagram below' to explain measurement logic, but the actual diagram file is not included in the provided file list—check GitHub wiki or rendered markdown for the visual explanation. No unit or instrumentation tests visible in top-60 files suggests limited test coverage.

🏗️Architecture

💡Concepts to learn

  • Custom View measurement and layout (onMeasure/onLayout) — SwitchButton's 2.0.0 overhaul fundamentally changed measurement logic to clarify thumb range, text positioning, and padding relationships; understanding Android's MeasureSpec is essential to modify sizing behavior
  • Touch event handling and gesture recognition — SwitchButton must consume only horizontal scroll events while allowing vertical scrolls to propagate; this requires careful onTouchEvent() and requestDisallowInterceptTouchEvent() logic
  • Drawable state lists and StateListDrawable — All visual theming (ios_thumb_selector.xml, custom color state lists) relies on Android's state list mechanism to switch appearance based on checked/unchecked/disabled states
  • Property animation and ValueAnimator — Thumb sliding animation between on/off states is likely driven by ValueAnimator; understanding animation timing is key to customizing transition speed and easing
  • Gradle Maven Publishing plugin (com.vanniktech) — The repo uses gradle-maven-publish-plugin (version 0.25.3) to publish to mavenCentral(); understanding this plugin is necessary for release workflows and dependency management
  • Attribute inflation and TypedArray parsing — All XML-based customization (kswThumbRangeRatio, kswTextExtra, etc.) relies on TypedArray to parse custom attributes from attrs.xml; this is the bridge between XML and programmatic behavior
  • material-components/material-components-android — Official Material Design Switch component; SwitchButton competes with this but offers more theming flexibility and stylization options
  • androidswitchcompat/androidswitchcompat — Backport of Android's native Switch to older API levels; SwitchButton solves the same backward-compatibility problem but with custom styling as the primary goal
  • Baseflow/PhotoView — Similar architecture pattern: single-file custom View library published to mavenCentral() with a demo app showcasing usage and style variations
  • square/picasso — Established Android library on mavenCentral() with clear documentation and multi-activity demo; represents the maturity and publishing pattern SwitchButton follows

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add instrumented Android tests for SwitchButton widget state transitions

The repo has a minimal ApplicationTest.java but lacks comprehensive instrumented tests for the core SwitchButton widget functionality. Given the widget's complexity (2.0.0 introduced significant measurement logic changes), testing state transitions, attribute application, and text rendering would catch regressions and validate the measurement refactoring. This is especially important since the CHANGELOG notes clarify that measurement logic was 'totally changed'.

  • [ ] Create SwitchButton/src/androidTest/java/com/kyleduo/switchbutton/SwitchButtonStateTest.java to test ON/OFF state transitions and callbacks
  • [ ] Add tests for attribute application (thumb color, back color, text state colors from demo/src/main/res/color/)
  • [ ] Add tests for measurement calculations with exact width/height constraints mentioned in the incomplete CHANGELOG
  • [ ] Run tests against the demo activities (MainActivity.java, StyleActivity.java, StyleInCodeActivity.java) to ensure UI behavior is stable

Add GitHub Actions CI workflow for automated testing and releases

The repo uses gradle-maven-publish-plugin (0.25.3) for publishing but has no visible CI/CD pipeline. With Gradle 8.0.0 and multiple demo activities that showcase different styling approaches, an automated workflow would validate builds across API levels, run instrumented tests on emulators, and automate Maven Central publishing on release tags.

  • [ ] Create .github/workflows/build-and-test.yml to run './gradlew build' and instrumented tests on API 21, 29, and 31+
  • [ ] Add a separate .github/workflows/publish.yml that triggers on version tags and runs './gradlew publish' using the maven-publish-plugin
  • [ ] Configure the workflow to validate both SwitchButton/build.gradle and SwitchButton/demo/build.gradle
  • [ ] Add badges to README.md for build status and Maven Central version

Document custom styling with code examples and update incomplete CHANGELOG entry for 2.0.0

The CHANGELOG.md has an incomplete entry for version 2.0.0 (cuts off at 'Support config SwitchButton's size by setting a exact width and...'). Combined with the multiple styling demo activities (StyleActivity.java, StyleInCodeActivity.java) and custom resource files (custom_thumb_color.xml, custom_back_color.xml, custom_text_state_color.xml), there's an opportunity to create a comprehensive styling guide with before/after examples in the README or a new STYLING.md document.

  • [ ] Complete the 2.0.0 CHANGELOG entry in CHANGELOG.md by finishing the truncated sentence and clarifying breaking changes
  • [ ] Create docs/STYLING_GUIDE.md with code snippets showing how to use the custom color resources from demo/src/main/res/color/
  • [ ] Add examples for StyleActivity.java approach (XML-based) and StyleInCodeActivity.java approach (programmatic) with before/after screenshots
  • [ ] Document the new measurement attributes added in 2.0.0 with visual diagrams (width, height, exact sizing behavior)

🌿Good first issues

  • Add unit tests for SwitchButton measurement logic: create SwitchButton/src/test/java/com/kyleduo/switchbutton/ with tests for thumb range calculation (kswThumbRangeRatio), text inset logic (kswTextThumbInset), and state transitions, since no test files are visible in the repo.
  • Document the measurement diagram from README in code comments or Javadoc: the README references a critical 'big diagram' explaining 2.0.0 measurement but it's not in the file list; add inline Javadoc to the View's onMeasure() method explaining thumb range, text area, and padding relationships with ASCII or link to diagram.
  • Add instrumentation tests for touch/scroll behavior: create SwitchButton/demo/src/androidTest/ (exists but only has ApplicationTest.java) with tests verifying the 2.0.0 feature 'SwitchButton only consumes horizontal scroll events' to prevent regression and document the scrollable view integration pattern.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • 60a42e4 — update build tools versions (kyleduo)
  • 0e1f9c6 — Update CHANGELOG.md (kyleduo)
  • 8a62c64 — Update README.md (kyleduo)
  • 374f215 — migration to mavenCentral, update version to 2.1.0 (kyleduo)
  • f9e77a1 — migrate to androidx (kyleduo)
  • d750ec7 — Merge pull request #125 from kyleduo/2.0.3 (kyleduo)
  • 271047c — test arr publish (kyleduo)
  • d831f4a — update version_code (kyleduo)
  • 17a9714 — update readme (kyleduo)
  • 2aad65b — update version 2.0.3, update demo (kyleduo)

🔒Security observations

The SwitchButton codebase demonstrates a reasonable security posture for an Android UI library. No critical code injection risks, hardcoded credentials, or major architectural vulnerabilities were identified based on the visible structure and dependencies. However, several areas require attention: dependency versions should be kept current with a monitoring system in place, ProGuard configuration should be verified to ensure proper obfuscation, and a security policy should be established for vulnerability reporting. The project follows standard Android library practices but lacks explicit security hardening measures and documentation. Regular dependency audits and security reviews are recommended.

  • High · Outdated Gradle Build Tools — build.gradle (top-level buildscript dependencies). The codebase uses Gradle 8.0.0 which may contain known vulnerabilities. Additionally, the gradle-maven-publish-plugin version 0.25.3 should be verified for security patches. Regular dependency updates are critical for maintaining security. Fix: Update to the latest stable versions of gradle and gradle-maven-publish-plugin. Implement a dependency scanning tool like Dependabot or OWASP Dependency-Check to identify and alert on vulnerable dependencies.
  • Medium · Missing ProGuard Configuration Details — SwitchButton/demo/proguard-rules.pro and SwitchButton/library/proguard-rules.pro. The proguard-rules.pro files exist but their content is not visible. If ProGuard is not properly configured, sensitive code patterns and API endpoints could be exposed through reverse engineering of the APK. Fix: Ensure ProGuard/R8 configuration includes rules to obfuscate sensitive classes, keep only necessary public APIs, and remove debugging information. Use aggressive minification settings in release builds.
  • Medium · Insecure Repository Configuration — build.gradle (repositories block). The build.gradle uses mavenCentral() and google() repositories without explicit security verification. While these are legitimate repositories, there's no indication of repository authentication or verification of artifact signatures. Fix: Implement repository authentication where possible. Consider using an internal artifact repository proxy to scan dependencies before use. Enable dependency verification in Gradle to ensure artifact integrity.
  • Low · No Visible Security Policy or Vulnerability Reporting — Repository root. The codebase lacks visible security.md or SECURITY.txt file for reporting vulnerabilities responsibly. This makes it difficult for security researchers to report issues privately. Fix: Create a SECURITY.md file in the root directory with instructions for reporting security vulnerabilities responsibly, including contact information and expected response times.
  • Low · Potentially Sensitive APK Distribution — README.md and ./demo/switchbutton_demo_200.apk. The README references a directly downloadable demo APK (./demo/switchbutton_demo_200.apk) in the repository. If not properly managed, this could pose risks if the binary is outdated or contains vulnerabilities. Fix: Consider hosting pre-built APKs on official distribution channels (Google Play Store) rather than in the repository. If including APKs, ensure they are regularly rebuilt and signed with proper keys.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Concerning signals · kyleduo/SwitchButton — RepoPilot