navasmdc/MaterialDesignLibrary
This is a library with components of Android L to you use in android 2.2
Stale — last commit 3y ago
weakest axislast commit was 3y ago; no tests detected…
no tests detected; no CI workflows detected…
Documented and popular — useful reference codebase to read through.
last commit was 3y ago; no CI workflows detected
- ✓13 active contributors
- ✓Distributed ownership (top contributor 38% of recent commits)
- ✓Apache-2.0 licensed
Show all 6 evidence items →Show less
- ⚠Stale — last commit 3y ago
- ⚠No CI workflows detected
- ⚠No test directory detected
What would change the summary?
- →Use as dependency Mixed → Healthy if: 1 commit in the last 365 days; add a test suite
- →Fork & modify Mixed → Healthy if: add a test suite
- →Deploy as-is Mixed → Healthy if: 1 commit in the last 180 days
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.
[](https://repopilot.app/r/navasmdc/materialdesignlibrary)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/navasmdc/materialdesignlibrary on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: navasmdc/MaterialDesignLibrary
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:
- 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. - 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.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/navasmdc/MaterialDesignLibrary 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
WAIT — Stale — last commit 3y ago
- 13 active contributors
- Distributed ownership (top contributor 38% of recent commits)
- Apache-2.0 licensed
- ⚠ Stale — last commit 3y ago
- ⚠ 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 navasmdc/MaterialDesignLibrary
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/navasmdc/MaterialDesignLibrary.
What it runs against: a local clone of navasmdc/MaterialDesignLibrary — 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 navasmdc/MaterialDesignLibrary | Confirms the artifact applies here, not a fork |
| 2 | License is still Apache-2.0 | Catches relicense before you depend on it |
| 3 | Default branch master exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 1106 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of navasmdc/MaterialDesignLibrary. If you don't
# have one yet, run these first:
#
# git clone https://github.com/navasmdc/MaterialDesignLibrary.git
# cd MaterialDesignLibrary
#
# 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 navasmdc/MaterialDesignLibrary and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "navasmdc/MaterialDesignLibrary(\\.git)?\\b" \\
&& ok "origin remote is navasmdc/MaterialDesignLibrary" \\
|| miss "origin remote is not navasmdc/MaterialDesignLibrary (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
&& ok "license is Apache-2.0" \\
|| miss "license drift — was Apache-2.0 at generation time"
# 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 "MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/CustomView.java" \\
&& ok "MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/CustomView.java" \\
|| miss "missing critical file: MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/CustomView.java"
test -f "MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/utils/Utils.java" \\
&& ok "MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/utils/Utils.java" \\
|| miss "missing critical file: MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/utils/Utils.java"
test -f "MaterialDesignLibrary/MaterialDesign/build.gradle" \\
&& ok "MaterialDesignLibrary/MaterialDesign/build.gradle" \\
|| miss "missing critical file: MaterialDesignLibrary/MaterialDesign/build.gradle"
test -f "MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/Button.java" \\
&& ok "MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/Button.java" \\
|| miss "missing critical file: MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/Button.java"
test -f "MaterialDesignLibrary/MaterialDesign/src/main/res/values/attributes.xml" \\
&& ok "MaterialDesignLibrary/MaterialDesign/src/main/res/values/attributes.xml" \\
|| miss "missing critical file: MaterialDesignLibrary/MaterialDesign/src/main/res/values/attributes.xml"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 1106 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~1076d)"
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/navasmdc/MaterialDesignLibrary"
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).
⚡TL;DR
MaterialDesignLibrary is an Android library that backports Material Design L (Lollipop) components to Android API 16+, enabling developers to use modern UI patterns like floating action buttons, ripple effects, cards, and material-style progress indicators in older Android versions. It provides 20+ custom View and Widget classes that implement Material Design specifications without requiring users to target Android L natively. Single-module AAR library under MaterialDesignLibrary/MaterialDesign/. Core components live in src/main/java/com/gc/materialdesign/ split into three packages: views/ (buttons, progress bars, switches, cards), widgets/ (SnackBar, Dialog, ColorSelector), and utils/ (utility helpers). Animations and drawable assets in src/main/res/anim/ and src/main/res/drawable-*.
👥Who it's for
Android app developers targeting Android 4.1+ (API 16+) who want to adopt Material Design visual language and interaction patterns but cannot require their users to be on Lollipop (API 21+). This is especially useful for apps with large user bases on older Android versions.
🌱Maturity & risk
Moderately mature but aging. The library targets Android SDK 22 (released 2015) and depends on NineOldAndroids (deprecated animation library) and support-v4:22.x (outdated). No visible CI/CD setup, no test files beyond stub ApplicationTest.java, and no recent commit data provided. Production-viable for legacy apps but not recommended for new projects targeting modern Android.
Significant technical debt: relies on NineOldAndroids (unmaintained since 2014) for pre-Honeycomb animation compatibility that is no longer needed; uses Android support-v4:22.x instead of AndroidX; no test coverage visible; single maintainer (navasmdc) with unclear activity level. The library may fail on Android 13+ due to missing targetSdkVersion bump and potential deprecated API usage.
Active areas of work
No active development signals visible. The Gradle configuration has commented-out Bintray publishing code, suggesting the library was published to jcenter (defunct since 2021) but may no longer be maintained. No data on open issues, recent commits, or pending PRs.
🚀Get running
Clone the repository, import MaterialDesignLibrary/MaterialDesign as an Android library module into Android Studio, then add compile 'com.github.navasmdc:MaterialDesign:1.5@aar' to your app's build.gradle, or depend on the local module directly.
Daily commands: This is a library, not an app. To test: import into Android Studio, run androidTest suite (currently minimal: ApplicationTest.java only), or add the library as a dependency to a demo app and build/run that app.
🗺️Map of the codebase
MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/CustomView.java— Base class for all custom Material Design views; every contributor must understand this abstraction to extend components correctlyMaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/utils/Utils.java— Utility functions for color conversion, animation, and dimension calculations used across all viewsMaterialDesignLibrary/MaterialDesign/build.gradle— Defines minSdkVersion 16 and NineOldAndroids dependency—critical for backwards compatibility to Android 2.2MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/Button.java— Primary Material Design button implementation; reference implementation for understanding the custom view patternMaterialDesignLibrary/MaterialDesign/src/main/res/values/attributes.xml— XML attribute definitions for all custom views; required for XML layout inflation and IDE supportMaterialDesignLibrary/MaterialDesignDemo/src/main/java/com/gc/materialdesigndemo/ui/MainActivity.java— Demo entry point showing how to integrate and use all library components in a real activity
🛠️How to make changes
Add a new Material Design view component
- Create a new Java class in MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/ that extends CustomView (
MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/CustomView.java) - Define custom XML attributes in the attributes.xml file for configurable properties (
MaterialDesignLibrary/MaterialDesign/src/main/res/values/attributes.xml) - Create drawable resources (9-patch PNGs or XML drawables) in res/drawable directories (
MaterialDesignLibrary/MaterialDesign/src/main/res/drawable/background_button.9.png) - Add animation XMLs in res/anim if your component uses indeterminate animations (
MaterialDesignLibrary/MaterialDesign/src/main/res/anim/progress_indeterminate_animation.xml) - Create a demo activity in MaterialDesignDemo showing usage of your new component (
MaterialDesignLibrary/MaterialDesignDemo/src/main/java/com/gc/materialdesigndemo/ui/MainActivity.java)
Add utility functions for animation or color conversion
- Add static methods to the Utils class for common operations across views (
MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/utils/Utils.java) - Call your utility methods from CustomView or specific view implementations to ensure consistency (
MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/CustomView.java)
Extend a button type with new styling
- Create a new button class extending Button.java or ButtonFlat.java in the views folder (
MaterialDesignLibrary/MaterialDesign/src/main/java/com/gc/materialdesign/views/Button.java) - Override onDraw() or use custom drawable resources defined in res/drawable (
MaterialDesignLibrary/MaterialDesign/src/main/res/drawable/background_button_float.xml) - Add XML attributes if needed for customization (e.g., size, color) (
MaterialDesignLibrary/MaterialDesign/src/main/res/values/attributes.xml) - Create a demo screen in MaterialDesignDemo to showcase the new button variant (
MaterialDesignLibrary/MaterialDesignDemo/src/main/java/com/gc/materialdesigndemo/ui/ButtonsActivity.java)
🔧Why these technologies
- NineOldAndroids Library (com.nineoldandroids) — Provides Property Animation API (ValueAnimator, ObjectAnimator) backport to pre-ICS devices; essential for smooth Material Design animations on Android 2.2–3.x
- Android Support Library v4 (com.android.support:support-v4:22.+) — Provides compatibility utilities, resource inflation helpers, and view support for older API levels
- Custom View painting (Canvas/Paint) — Enables pixel-perfect Material Design rendering (ripples, shadows, rounded corners) that native API 16 buttons cannot provide
- XML Drawables and 9-patch PNGs — Efficient, scalable backgrounds for buttons and components without requiring heavy bitmap resources
⚖️Trade-offs already made
-
Custom view implementations instead of extending framework components
- Why: Material Design requires visual features (ripple effects, elevation shadows) unavailable in API 16–21
- Consequence: Increased codebase complexity and potential for UI inconsistencies if not carefully maintained; requires manual state management and lifecycle handling
-
minSdkVersion 16 despite targeting Android L features
- Why: undefined
- Consequence: undefined
🪤Traps & gotchas
No AndroidX migration: library uses deprecated Android support-v4:22.x; will cause conflicts if your app uses AndroidX. NineOldAndroids is unmaintained and unnecessary on modern NDK. minSdkVersion is 16 but compileSdkVersion is 22 (from 2015); targeting higher APIs may expose deprecated method calls. ProGuard rules in proguard-rules.pro may need review if you add ProGuard to your app. Custom XML attributes require xmlns:materialdesign="http://schemas.android.com/apk/res-auto" namespace declaration in every layout file using components.
🏗️Architecture
💡Concepts to learn
- Ripple Effect (Pre-Lollipop Emulation) — LayoutRipple.java implements Material Design's signature ripple touch feedback for API <21; understanding how it animates a circular wave from touch point is key to grasping how this library bridges design across Android versions
- Canvas-based Custom Drawing — All visual components (buttons, progress bars, cards) override onDraw() and use Paint and Canvas APIs to render shapes and colors; this is the foundation of how the library achieves Material Design without bitmap assets
- Android XML Custom Attributes (attrs.xml) — Components use custom XML attributes (xmlns:materialdesign) to configure colors, sizes, and behavior declaratively; understanding the attr resource system is essential for extending or configuring library components
- NineOldAndroids Animation Library — This library depends on NineOldAndroids to backport android.animation.* APIs to pre-Honeycomb devices; understanding this pattern shows how pre-Android 3.0 apps achieved smooth animations, though the library is now obsolete
- Material Design Elevation & Shadow — Card.java and ButtonFloat.java implement Material Design's Z-axis elevation concept (shadows, layering) using Canvas drawing and paint shadows; this visual hierarchy is core to Material Design but requires custom implementation on API <21
- View State & Touch Event Handling — Buttons and interactive components track pressed/focused/enabled states and override onTouchEvent() to trigger ripple animations and callbacks; understanding state machines and event propagation is critical for modifying interaction behavior
🔗Related repos
material-components/material-components-android— Official Material Design component library by Google; modern successor offering robust Material Design 3 support and regular maintenanceandroid/architecture-samples— Google's reference architecture for Android apps; includes modern Gradle setup, testing patterns, and AndroidX migration best practices applicable to updating this librarychrisbanes/cheesesquare— Classic Material Design demo app (2015 era, same vintage as MaterialDesignLibrary); shows how to use early Material Design libraries and patterns before official components existedsquare/mortar— Companion library for dependency injection and screen navigation in older Android apps; often paired with Material Design backport libraries for full-featured legacy app development
🪄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 unit tests for custom views in MaterialDesign/src/androidTest
The repo has only a stub ApplicationTest.java in the androidTest directory. Given the library contains 15+ custom views (Button, ButtonFlat, CheckBox, Slider, Switch, ProgressBar variants, Card, etc.), there should be instrumented tests validating their initialization, attribute parsing, and basic behavior. This is critical for a library used across Android versions 2.2+.
- [ ] Create test classes in MaterialDesign/src/androidTest/java/com/gc/materialdesign/views/ for ButtonFloat.java, ButtonFlat.java, CheckBox.java, Switch.java, and Slider.java
- [ ] Test XML attribute inflation from layout resources (e.g., custom color attributes, dimensions)
- [ ] Test programmatic view initialization and state changes (checked/unchecked for CheckBox, progress values for ProgressBar variants)
- [ ] Verify ripple effect behavior and animation states for LayoutRipple.java
Add Espresso UI tests for SnackBar and Dialog widgets interaction
The widgets SnackBar.java and Dialog.java include animations (dialog_main_show_amination.xml, snackbar_show_animation.xml) but lack UI tests verifying user interactions. Tests should validate visibility transitions, button click handling, and lifecycle behavior which are critical for user-facing components.
- [ ] Create MaterialDesign/src/androidTest/java/com/gc/materialdesign/widgets/SnackBarTest.java with tests for show/hide animations and action button callbacks
- [ ] Create MaterialDesign/src/androidTest/java/com/gc/materialdesign/widgets/DialogTest.java validating positive/negative button interactions using Espresso
- [ ] Verify animation XML resources (dialog_root_show_amin.xml, snackbar_show_animation.xml) are properly applied
- [ ] Test ProgressDialog.java show/dismiss lifecycle
Add GitHub Actions CI workflow for automated testing and lint checks on API 16+ emulator
The repo targets minSdkVersion 16 but lacks any CI pipeline. Given that Material Design Library is backward-compatible to Android 2.2 (per README) yet uses API 22 build tools, automated testing on real API levels (16, 19, 22) would catch regressions early. No CI workflow file exists in the repo.
- [ ] Create .github/workflows/android-tests.yml with Android Emulator Test action for API levels 16, 19, and 22
- [ ] Add lint checks (Android Lint) to validate resource files (drawable XMLs, animations in src/main/res/anim/)
- [ ] Run unit tests with Gradle task ./gradlew test
- [ ] Add build badge to README.md showing CI status
🌿Good first issues
- Add JUnit and Espresso test coverage: src/androidTest/ contains only a stub ApplicationTest.java. Implement unit tests for Button.java, CheckBox.java, and Slider.java touch input and state change logic.
- Migrate from NineOldAndroids to native View animation APIs: Replace all com.nineoldandroids.* imports with android.animation.* (available since API 11, library's minSdkVersion is 16). This removes dead dependency.
- Document XML custom attributes: Create a file documenting all xmlns:materialdesign attributes for each component (ButtonFlat, Switch, Slider, etc.) with examples; currently only README snippets exist and are incomplete.
⭐Top contributors
Click to expand
Top contributors
- @navasmdc — 28 commits
- @ivan.navas — 24 commits
- @Kaler — 10 commits
- [@Ivan Navas](https://github.com/Ivan Navas) — 2 commits
- [@Filip Chmarzyński](https://github.com/Filip Chmarzyński) — 2 commits
📝Recent commits
Click to expand
Recent commits
7271050— Create master branch via GitHub (navasmdc)b11cdc7— Reupload Project (navasmdc)b267e44— Remove Project (navasmdc)9998c2d— Merge pull request #242 from 2hamed/master (navasmdc)282dc9a— Merge branch 'master' into develop (Ivan Navas)525b7a9— Fix Bugs and add new attributes Button Rectangle (Ivan Navas)6aa88f8— AutoHideButtonFloat for ListView (2hamed)9324f50— Merge pull request #205 from kenyee/master (navasmdc)5a7ba7e— Merge pull request #138 from filipc/issue111 (navasmdc)9e94e99— Merge pull request #139 from filipc/switchMemoryLeakFix (navasmdc)
🔒Security observations
This Android Material Design library has significant security and maintenance concerns. The codebase uses outdated dependencies and build tools from 2015 (Android 5.1 era) that are no longer supported by Google and lack modern security patches. The primary risks are: (1) NineOldAndroids library is unmaintained since 2014, (2) Android Support Library is deprecated, (3) compileSdkVersion 22 misses years of security improvements, and (4) targetSdkVersion 22 violates current Google Play requirements. The project appears to be unmaintained and should not be used in production applications. Immediate migration to AndroidX with modern build tools and SDK versions is critical.
- High · Outdated Dependency: NineOldAndroids Library —
MaterialDesignLibrary/MaterialDesign/build.gradle. The project uses 'com.nineoldandroids:library:2.4.+' which is an obsolete backport library. NineOldAndroids was designed for Android 2.3-3.2 and hasn't been maintained since 2014. It may contain unpatched security vulnerabilities and compatibility issues. Fix: Replace with AndroidX and modern animation frameworks. Use androidx.appcompat:appcompat or native Android animation APIs instead. Remove the NineOldAndroids dependency entirely as the project targets minSdkVersion 16. - High · Outdated Android Support Library —
MaterialDesignLibrary/MaterialDesign/build.gradle. The project uses 'com.android.support:support-v4:22.+' which is deprecated and no longer maintained. The Android Support Library reached end-of-life in 2018. Modern versions may have unfixed security vulnerabilities. Fix: Migrate to AndroidX libraries (androidx.appcompat:appcompat, androidx.core:core) and update compileSdkVersion to at least 31 or higher. Update build tools accordingly. - Medium · Outdated Build Tools —
MaterialDesignLibrary/MaterialDesign/build.gradle. The project uses buildToolsVersion '22.0.1' and compileSdkVersion 22, which are from 2015 (Android 5.1). These versions are significantly outdated and lack modern security improvements, performance enhancements, and API hardening. Fix: Update compileSdkVersion to 33 or higher and buildToolsVersion to a corresponding recent version (e.g., '33.0.0'). This enables modern security features and vulnerability patches. - Medium · Low Target SDK Version —
MaterialDesignLibrary/MaterialDesign/build.gradle. The targetSdkVersion is set to 22 (Android 5.1, released 2015). Google Play now requires targetSdkVersion of at least 33 for new apps and 34+ for updates. This indicates the app may not comply with current security standards and could be rejected from distribution. Fix: Update targetSdkVersion to 34 or latest available. Test thoroughly for behavior changes in runtime permissions, background execution, and privacy features. - Low · ProGuard/R8 Minification Disabled in Release —
MaterialDesignLibrary/MaterialDesign/build.gradle. The release build configuration has 'minifyEnabled false', meaning the code is not obfuscated. While this library appears to be open-source, disabling minification reduces the difficulty for reverse engineering and security analysis of compiled code. Fix: Enable minification with ProGuard/R8 in release builds by setting 'minifyEnabled true' to provide additional code obfuscation. Maintain a proper ProGuard configuration file. - Low · Loose Dependency Version Constraints —
MaterialDesignLibrary/MaterialDesign/build.gradle. Dependencies use '+' version wildcards (e.g., '2.4.+', '22.+'), which allows automatic updates to any version in that range. This can introduce unexpected breaking changes or vulnerabilities without explicit version control. Fix: Pin specific dependency versions (e.g., 'com.android.support:support-v4:22.2.1') and use version ranges conservatively (e.g., '22.2.0..22.2.99'). Regularly review and update dependencies explicitly.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.