Skip to content

Commit c545e0a

Browse files
committed
• Few fixes to the Lyrics View (Again)
• Initial Readme, more details will be added in the future
1 parent 3969ffe commit c545e0a

7 files changed

Lines changed: 162 additions & 9 deletions

File tree

README.md

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
2+
# 🎵 XMusic
3+
4+
##### A Material 3 Expressive Music player for Android built with pure Java
5+
6+
![License](https://img.shields.io/badge/License-GNU%20v3.0-blue.svg) ![Status](https://img.shields.io/badge/Status-Maintained-success.svg) ![Platform](https://img.shields.io/badge/Platform-Android-3DDC84?logo=android&logoColor=white) ![Java](https://img.shields.io/badge/Language-Java-ED8B00?logo=openjdk&logoColor=white)
7+
8+
9+
![Banner](https://i.postimg.cc/qMWJMDKc/304ab7d2-92e8-4df3-83bd-c07e7464cd61.png)
10+
11+
---
12+
13+
## ✨ Features (Detailed)
14+
---
15+
### Core Playback
16+
17+
- Media3 ExoPlayer based playback
18+
- Background playback with notification controls
19+
- MediaSession integration (lockscreen, headset, system controls)
20+
21+
### Now Playing UI
22+
23+
- Dynamic Now Playing UI tinted by album artwork colors
24+
- Smooth track transitions and animated player states
25+
- Fullscreen Now Playing with expandable bottom sheet
26+
- Predictive back support with custom framework animations
27+
28+
### UI & Animations
29+
30+
- MotionLayout-driven bottom sheet player
31+
- Gesture-based interactions
32+
- UI state restoration across configuration changes
33+
- Predictive back animations everywhere
34+
35+
### Library & Browsing
36+
37+
- Local audio scanning with fast indexing
38+
- Song, album, and artist browsing
39+
- Instant queue building and reordering
40+
- Fully offline, on-device playback
41+
42+
### Lyrics & Visuals
43+
44+
- Built-in lyrics support with animated transitions
45+
- Romaji/translation lyrics support
46+
47+
### Performance & Architecture
48+
- Lightweight playback service
49+
- Works fine with low-end devices
50+
51+
### Privacy
52+
53+
- No ads
54+
- No tracking
55+
- No “sign in to listen to your own files” clown behavior
56+
- No cloud dependency
57+
58+
### Customization
59+
60+
- Dynamic theming support
61+
- Album art–driven UI colors
62+
63+
---
64+
65+
## To-Do List
66+
- [ ] Finish settings screen
67+
- [ ] Add more features to the now Playing UI
68+
- [ ] Add a contextual menu for songs
69+
- [ ] Make a functional search fragment
70+
- [ ] Idk
71+
---
72+
73+
## Showcase
74+
---
75+
![Screenshot 1](images/ss1.jpg)
76+
![Screenshot 2](images/ss2.jpg)
77+
![Screenshot 3](images/ss3.jpg)
78+
79+
---
80+
81+
## ⬇️ Download the app
82+
- You can get Latest XMusic build via [GitHub Actions](https://github.com/Yamenher/XMusic/actions) or via the [dedicated topic](https://t.me/XMusicCommunity/4) in our telegram community.
83+
84+
---
85+
86+
## 📱 Minimum Requirements
87+
88+
- Android 8.0 (API 26) or higher
89+
- Local audio files stored on device
90+
- A brain (for reporting bugs)
91+
---
92+
93+
## ⚠️ Important Notice
94+
- The app is still WIP (Work In Progress) and is far away from a stable release, that's why you might notice a lot of bugs, missing features, and some instability problems, but **Don't worry,** everything will worked on in the near future.
95+
---
96+
97+
## 🐛 Report bugs
98+
If you run into bugs, crashes, or weird behavior that clearly wasn’t supposed to happen (looking at you, OEMs) :
99+
100+
- **GitHub Issues**
101+
Report bugs, crashes, and feature requests [here](https://github.com/Yamenher/XMusic/issues)
102+
103+
- **Community & Discussion**
104+
Join our telegram community for updates, feedback, and general discussion:
105+
https://t.me/xmusiccommunity
106+
107+
Before opening an issue, make sure you’re on the latest nightly version, specify **The exact version you're using** via its commit hash from the APK file name and include logs, device info, and reproduction steps.
108+
DO NOT JUST SAY "I'm using latest version"
109+
Note : “App broken” is not a bug report.
110+
111+
---
112+
113+
## Q&A
114+
115+
**Q: Is XMusic free?**
116+
A: Yes. Completely free. No ads, no subscriptions, no hidden nonsense.
117+
118+
**Q: Does XMusic require an account or internet connection?**
119+
A: No. Everything works fully offline and stays on your device.
120+
121+
**Q: Where does XMusic get my music from?**
122+
A: It scans local audio files stored on your device. Nothing is uploaded anywhere.
123+
124+
**Q: Why doesn’t XMusic show my songs?**
125+
A: Make sure storage permissions are granted and your audio files are in supported formats.
126+
127+
**Q: Does XMusic collect any personal data?**
128+
A: No. There is no tracking, analytics abuse, or data harvesting.
129+
130+
**Q: Why did playback stop in the background?**
131+
A: Your system’s battery optimization or OEM “power saving” probably killed it. Disable optimizations for XMusic.
132+
133+
**Q: Can I request features or report bugs?**
134+
A: Yes. Use GitHub Issues for bugs and feature requests, or join the Telegram community for discussion.
135+
136+
**Q: Why is feature X not available?**
137+
A: If you think this feature will be useful for a lot of people, feel free to suggest it via reaching to our [Telegram Community](https://t.me/xmusiccommunity)
138+
139+
**Q: Is XMusic open source?**
140+
A: You can tell.
141+
142+
---
143+
## 🤝 Credits & Special Thanks
144+
* [Nick](https://github.com/nift4) For the precious advices and help he provided for me when I needed help.
145+
* **Oto music, PixelPlayer and Gramophone Devs** - For the UI inspiration and feedback.
146+
* **All Testers, Especially [MACİT ELCİBİN](https://t.me/Macitelc)** for testing new builds, trying out buggy features, and reporting every single bug and helping me *break* the app to improve it :P
147+
* **All Contributors** - For helping make XMusic better for everyone.
148+
149+
---
150+
151+
## 📜 License
152+
Distributed under the **GNU General Public License v3.0**. See [LICENSE](https://github.com/Yamenher/XMusic/blob/main/LICENSE) for more information.
153+
154+
---
155+
156+
## ✉️ Contact
157+
158+
For inquiries or support, reach out at:
159+
hermassiyamen@gmail.com

app/src/main/java/com/xapps/media/xmusic/activity/MainActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1021,7 +1021,6 @@ public void updateColors() {
10211021
tmpColor = XUtils.interpolateColor(bottomSheetColor, playerSurface, currentSlideOffset);
10221022
background.setColor(tmpColor);
10231023
binding.lyricsContainer.setBackgroundColor(playerSurface);
1024-
binding.lyricTopScrim.setScrimColor(playerSurface);
10251024

10261025
gd.setColor(isc);
10271026

app/src/main/java/com/xapps/media/xmusic/widget/AppleMeshGradientView.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,17 @@ protected void onDraw(Canvas canvas) {
5151
drawBlob(canvas,
5252
w * 0.5f + (float) Math.sin(time * 0.3f) * (w * 0.1f),
5353
h * 0.5f + (float) Math.cos(time * 0.3f) * (h * 0.1f),
54-
w * 1.8f, dominantColor, 140);
54+
w * 2.5f, dominantColor, 180);
5555

5656
drawBlob(canvas,
5757
w * 0.2f + (float) Math.cos(time * 0.8f) * (w * 0.4f),
5858
h * 0.8f + (float) Math.sin(time * 0.6f) * (h * 0.3f),
59-
w * 1.2f, accentColor1, 160);
59+
w * 1.1f, accentColor1, 100);
6060

6161
drawBlob(canvas,
6262
w * 0.8f + (float) Math.sin(time * 0.5f) * (w * 0.3f),
6363
h * 0.2f + (float) Math.cos(time * 0.9f) * (h * 0.4f),
64-
w * 1.1f, accentColor2, 160);
64+
w * 1.0f, accentColor2, 80);
6565

6666
postInvalidateOnAnimation();
6767
}

app/src/main/res/layout/activity_main.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -307,11 +307,6 @@
307307
app:layout_constraintEnd_toEndOf="parent"
308308
android:clipChildren="false"
309309
android:clipToPadding="false" />
310-
<com.xapps.media.xmusic.widget.StatusBarScrimView
311-
android:id="@+id/lyric_top_scrim"
312-
android:layout_width="match_parent"
313-
android:layout_height="56dp"
314-
app:layout_constraintTop_toTopOf="parent" />
315310
</androidx.constraintlayout.widget.ConstraintLayout>
316311
<androidx.coordinatorlayout.widget.CoordinatorLayout
317312
android:id="@+id/second_coordinator"

images/ss1.jpg

457 KB
Loading

images/ss2.jpg

645 KB
Loading

images/ss3.jpg

1.18 MB
Loading

0 commit comments

Comments
 (0)