Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -172,9 +172,8 @@ jobs:

- name: Rename APK for Release
run: |
echo "🏷️ Renaming app-debug.apk to Rock QR.apk and Chamo QR.apk..."
echo "🏷️ Renaming app-debug.apk to Rock QR.apk..."
cp app/build/outputs/apk/debug/app-debug.apk "app/build/outputs/apk/debug/Rock QR.apk"
cp app/build/outputs/apk/debug/app-debug.apk "app/build/outputs/apk/debug/Chamo QR.apk"

- name: Upload Build Artifacts
id: upload-apk
Expand All @@ -183,7 +182,6 @@ jobs:
name: Rock-QR-Artifacts
path: |
app/build/outputs/apk/debug/Rock QR.apk
app/build/outputs/apk/debug/Chamo QR.apk
app/build/outputs/apk/debug/app-debug.apk

- name: Add APK to Job Summary
Expand Down Expand Up @@ -290,7 +288,6 @@ jobs:

#### 📦 Attached Quality Artifacts:
- **`Rock QR.apk`**: Dual-branded high-performance release build under Rock branding.
- **`Chamo QR.apk`**: Dual-branded stable release build under Chamo branding.
EOF

echo "✅ Category-based structural release note compiled successfully."
Expand All @@ -302,7 +299,6 @@ jobs:
with:
files: |
app/build/outputs/apk/debug/Rock QR.apk
app/build/outputs/apk/debug/Chamo QR.apk
tag_name: ${{ github.ref_name }}
name: Rock QR ${{ github.ref_name }}
body_path: release_notes.md
Expand Down
5 changes: 1 addition & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,10 @@ jobs:
mkdir -p app/build/outputs/apk/release
if [ -f app/build/outputs/apk/release/app-release.apk ]; then
cp app/build/outputs/apk/release/app-release.apk app/build/outputs/apk/release/Rock_QR.apk
cp app/build/outputs/apk/release/app-release.apk app/build/outputs/apk/release/Chamo_QR.apk
echo "✅ Created Rock_QR.apk and Chamo_QR.apk"
echo "✅ Created Rock_QR.apk"
else
echo "⚠️ Could not locate app-release.apk. Looking for any generated release APK..."
find app/build/outputs/apk/release/ -name "*.apk" -exec cp {} app/build/outputs/apk/release/Rock_QR.apk \;
find app/build/outputs/apk/release/ -name "*.apk" -exec cp {} app/build/outputs/apk/release/Chamo_QR.apk \;
fi

# 🧠 Generate automatic changelog from commits
Expand All @@ -108,6 +106,5 @@ jobs:
body: ${{ env.CHANGELOG }}
files: |
app/build/outputs/apk/release/Rock_QR.apk
app/build/outputs/apk/release/Chamo_QR.apk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# 📱 Chamo QR Code Ecosystem
# 📱 Rock QR Code Ecosystem

A high-fidelity, dual-platform QR Code suite delivering a premium user experience across both an **offline-first Android client** (Jetpack Compose) and a **luxury companion web app** (GitHub Pages / PWA).

[![Chamo QR Code CI](https://github.com/SayanthRock/Chamo-QR/actions/workflows/build.yml/badge.svg)](https://github.com/SayanthRock/Chamo-QR/actions/workflows/build.yml)
[![Rock QR Code CI](https://github.com/SayanthRock/Rock-QR-Code/actions/workflows/build.yml/badge.svg)](https://github.com/SayanthRock/Rock-QR-Code/actions/workflows/build.yml)

---

## 🌐 Live Companion Web App

Experience the premium web suite instantly:
👉 **[Try the Chamo QR Web Console](https://sayanthrock.github.io/Chamo-QR/)**
👉 **[Try the Rock QR Web Console](https://sayanthrock.github.io/Rock-QR-Code/)**

*Fully installable Progressive Web App (PWA) with complete offline support, real-time dynamic web links, custom metadata tags, and integrated camera scanner lens.*

Expand Down
10 changes: 4 additions & 6 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ android {
compileSdk { version = release(36) { minorApiLevel = 1 } }

defaultConfig {
applicationId = "com.aistudio.chamoqr.qzlypm"
applicationId = "com.aistudio.rockqr.qzlypm"
Comment thread
SayanthRock marked this conversation as resolved.
minSdk = 24
targetSdk = 36
versionCode = 1
Expand Down Expand Up @@ -146,11 +146,9 @@ abstract class CopyApkTask : DefaultTask() {
val src = sourceApk.get().asFile
val destDir = targetDir.get().asFile
if (src.exists()) {
src.copyTo(File(destDir, "Chamo QR.apk"), overwrite = true)
src.copyTo(File(destDir, "Chamo_QR.apk"), overwrite = true)
src.copyTo(File(destDir, "Chamo QR.apk"), overwrite = true)
src.copyTo(File(destDir, "Chamo_QR.apk"), overwrite = true)
println("✅ Copied APK to root directory as both 'Chamo QR.apk' and 'Chamo QR.apk'")
src.copyTo(File(destDir, "Rock QR.apk"), overwrite = true)
src.copyTo(File(destDir, "Rock_QR.apk"), overwrite = true)
println("✅ Copied APK to root directory as both 'Rock QR.apk' ")
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="sayanthrock.github.io" />
<data android:pathPrefix="/Chamo-QR/" />
<data android:pathPrefix="/Rock-QR-Code/" />
Comment thread
SayanthRock marked this conversation as resolved.
</intent-filter>
</activity>

Expand Down
14 changes: 7 additions & 7 deletions app/src/main/java/com/example/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ class MainActivity : ComponentActivity() {

private fun handleIntent(intent: android.content.Intent?, viewModel: QRViewModel) {
intent?.dataString?.let { dataStr ->
if (dataStr.contains("sayanthrock.github.io/Chamo-QR")) {
if (dataStr.contains("sayanthrock.github.io/Rock-QR-Code")) {
viewModel.importFromDeepLink(dataStr)
intent.data = null
}
Expand Down Expand Up @@ -231,7 +231,7 @@ fun LocalSettingsScreen(
Spacer(modifier = Modifier.height(12.dp))

Text(
text = "Chamo QR",
text = "ROCK QR CODE",
fontSize = 20.sp,
fontWeight = FontWeight.ExtraBold,
color = Color.White
Expand Down Expand Up @@ -381,7 +381,7 @@ fun LocalSettingsScreen(
title = "Check for updates",
onClick = {
HapticUtils.vibrate(context, 20)
viewModel.showToast("Chamo QR is up to date (v1.0.8)", CustomToastType.SUCCESS)
viewModel.showToast("Rock QR is up to date (v1.0.8)", CustomToastType.SUCCESS)
Comment thread
SayanthRock marked this conversation as resolved.
Comment thread
SayanthRock marked this conversation as resolved.
}
)
}
Expand All @@ -398,10 +398,10 @@ fun LocalSettingsScreen(
HapticUtils.vibrate(context, 20)
val shareIntent = android.content.Intent(android.content.Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(android.content.Intent.EXTRA_SUBJECT, "Chamo QR")
putExtra(android.content.Intent.EXTRA_TEXT, "Check out Chamo QR app: https://sayanthrock.github.io/Chamo-QR")
putExtra(android.content.Intent.EXTRA_SUBJECT, "ROCK QR CODE")
putExtra(android.content.Intent.EXTRA_TEXT, "Check out ROCK QR CODE app: https://sayanthrock.github.io/Rock-QR-Code")
}
context.startActivity(android.content.Intent.createChooser(shareIntent, "Share Chamo QR"))
context.startActivity(android.content.Intent.createChooser(shareIntent, "Share ROCK QR CODE"))
}
)
HorizontalDivider(color = Color(0xFF27272A))
Expand All @@ -410,7 +410,7 @@ fun LocalSettingsScreen(
title = "Star the project",
onClick = {
HapticUtils.vibrate(context, 20)
val browserIntent = android.content.Intent(android.content.Intent.ACTION_VIEW, android.net.Uri.parse("https://github.com/sayanthrock/Chamo-QR"))
val browserIntent = android.content.Intent(android.content.Intent.ACTION_VIEW, android.net.Uri.parse("https://github.com/sayanthrock/Rock-QR-Code"))
context.startActivity(browserIntent)
}
)
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/example/data/api/QrBackendService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ data class CreateCodeRequest(

data class CreateCodeResponse(
val code: String, // Hashed or shortened path code (e.g. "x7p3a")
val shortUrl: String, // Fully qualified dynamic redirection URL (e.g. "https://sayanthrock.github.io/Chamo-QR/redirect?code=x7p3a")
val shortUrl: String, // Fully qualified dynamic redirection URL (e.g. "https://sayanthrock.github.io/Rock-QR-Code/redirect?code=x7p3a")
val success: Boolean
)

Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/example/ui/screens/GenerateScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ fun GenerateScreen(
) {
Column {
Text(
text = "Chamo QR",
text = "ROCK QR CODE",
fontSize = 24.sp,
fontWeight = FontWeight.ExtraBold,
color = Color.White,
Expand Down Expand Up @@ -262,7 +262,7 @@ fun GenerateScreen(
val rawContent = viewModel.inputText.value.ifEmpty { viewModel.wifiSsid.value }
val title = viewModel.inputTitle.value.ifEmpty { "Shared Code" }
val type = viewModel.inputType.value
val webLink = "https://sayanthrock.github.io/Chamo-QR/share?content=${android.net.Uri.encode(rawContent)}&type=$type&title=${android.net.Uri.encode(title)}"
val webLink = "https://sayanthrock.github.io/Rock-QR-Code/share?content=${android.net.Uri.encode(rawContent)}&type=$type&title=${android.net.Uri.encode(title)}"
Comment thread
SayanthRock marked this conversation as resolved.
Comment thread
SayanthRock marked this conversation as resolved.

val intent = android.content.Intent(android.content.Intent.ACTION_SEND).apply {
this.type = "text/plain"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/example/ui/screens/ScanScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ fun ScanScreen(
) {
Column {
Text(
text = "Chamo QR",
text = "ROCK QR CODE",
fontSize = 24.sp,
fontWeight = FontWeight.ExtraBold,
color = Color.White,
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/example/ui/theme/Color.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.example.ui.theme

import androidx.compose.ui.graphics.Color

// 🪨 THE Chamo QR COLOR SECTOR: Mineral and Gemstone Inspired Palette
// 🪨 THE ROCK QR CODE COLOR SECTOR: Mineral and Gemstone Inspired Palette
// Malachite Crystalline Gem (Primary scanning/secure color)
val MalachitePrimary = Color(0xFF00BD9D) // Luminescent mineral gemstone green-teal
val MalachitePrimaryVariant = Color(0xFF00D1B2)
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/example/viewmodel/QRViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ class QRViewModel(application: Application) : AndroidViewModel(application) {
} catch (e: Exception) {
// Offline local fallback so the user always has a functional result!
generatedShortCode = "local_" + System.currentTimeMillis().toString().takeLast(6)
finalPayload = "https://sayanthrock.github.io/Chamo-QR/redirect?code=$generatedShortCode"
finalPayload = "https://sayanthrock.github.io/Rock-QR-Code/redirect?code=$generatedShortCode"
Comment thread
SayanthRock marked this conversation as resolved.
Comment thread
SayanthRock marked this conversation as resolved.
showToast("Redirection core forged as local offline fallback", CustomToastType.INFO)
}
}
Expand Down Expand Up @@ -403,7 +403,7 @@ class QRViewModel(application: Application) : AndroidViewModel(application) {
} else {
// If there's no content parameter, check if we can interpret the whole path or general string
val decodedQuery = uri.lastPathSegment
if (!decodedQuery.isNullOrBlank() && decodedQuery != "Chamo-QR") {
if (!decodedQuery.isNullOrBlank() && decodedQuery != "Rock-QR-Code") {
Comment thread
SayanthRock marked this conversation as resolved.
inputText.value = decodedQuery
inputType.value = detectQrType(decodedQuery)
inputTitle.value = "Web Import"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<resources>
<string name="app_name">Chamo QR</string>
<string name="app_name">ROCK QR CODE</string>
<string name="tab_scan">Scan</string>
<string name="tab_generate">Generate</string>
<string name="tab_history">History</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/test/java/com/example/ExampleRobolectricTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ class ExampleRobolectricTest {
fun `read string from context`() {
val context = ApplicationProvider.getApplicationContext<Context>()
val appName = context.getString(R.string.app_name)
assertEquals("Chamo QR", appName)
assertEquals("ROCK QR CODE", appName)
}
}
18 changes: 9 additions & 9 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chamo QR Code - Luxury Web Suite</title>
<title>Rock QR Code - Luxury Web Suite</title>
<meta name="description" content="A premium, glassmorphic client-side PWA web app to generate, design, customize, and scan QR codes with dynamic customization and Android companion sync.">

<!-- Manifest & Favicons -->
Expand Down Expand Up @@ -110,7 +110,7 @@
<i data-lucide="qr-code" class="w-5.5 h-5.5 text-white"></i>
</div>
<div>
<span class="font-display font-bold text-lg tracking-wide bg-gradient-to-r from-white via-gray-200 to-purple-400 bg-clip-text text-transparent">Chamo QR</span>
<span class="font-display font-bold text-lg tracking-wide bg-gradient-to-r from-white via-gray-200 to-purple-400 bg-clip-text text-transparent">ROCK QR CODE</span>
<span class="block text-[10px] uppercase font-bold tracking-widest text-purple-400">Companion Web Suite</span>
</div>
</div>
Expand Down Expand Up @@ -148,7 +148,7 @@ <h1 class="font-display text-2xl md:text-3xl font-extrabold text-white mb-2 trac
Luxurious Companion QR Hub
</h1>
<p class="text-sm text-gray-400 leading-relaxed max-w-xl">
Instantly build custom high-fidelity QR codes with our dynamic liquid glass engine. Cross-share content between this web console and your <span class="text-purple-400 font-semibold">Chamo QR Code Android application</span>.
Instantly build custom high-fidelity QR codes with our dynamic liquid glass engine. Cross-share content between this web console and your <span class="text-purple-400 font-semibold">Rock QR Code Android application</span>.
</p>
</div>
<div class="flex-shrink-0 z-10">
Expand Down Expand Up @@ -390,7 +390,7 @@ <h3 class="font-display font-bold text-sm text-white flex items-center gap-2">
When copying the <strong class="text-purple-300">Share Link</strong>, you receive an automated redirection URL. Any person who opens that URL will automatically import your forged QR code structure. Sharing links can also trigger the native scanner in your partner Android App!
</p>
<div class="p-2.5 rounded-xl bg-luxury-black/30 border border-white/5 flex items-center justify-between text-xs text-gray-500 gap-4">
<span class="truncate text-mono text-[10px]" id="current-web-link-preview">https://sayanthrock.github.io/Chamo-QR/share?content=...</span>
<span class="truncate text-mono text-[10px]" id="current-web-link-preview">https://sayanthrock.github.io/Rock-QR-Code/share?content=...</span>
<button id="btn-copy-raw-link" class="p-1.5 rounded bg-white/5 hover:bg-white/10 text-white transition-all">
<i data-lucide="copy" class="w-3.5 h-3.5"></i>
</button>
Expand Down Expand Up @@ -553,7 +553,7 @@ <h2 class="font-display font-extrabold text-xl md:text-2xl text-white tracking-w

<!-- Live Release Download Trigger -->
<div class="flex flex-col sm:flex-row items-center gap-4 z-10">
<a id="btn-download-apk-release" href="https://github.com/sayanthrock/Chamo-QR/releases" target="_blank" class="px-6 py-3.5 rounded-xl bg-gradient-to-r from-purple-600 to-indigo-600 hover:from-purple-500 hover:to-indigo-500 text-white font-bold text-sm transition-all duration-300 shadow-xl shadow-purple-900/30 border border-white/10 flex items-center gap-2">
<a id="btn-download-apk-release" href="https://github.com/sayanthrock/Rock-QR-Code/releases" target="_blank" class="px-6 py-3.5 rounded-xl bg-gradient-to-r from-purple-600 to-indigo-600 hover:from-purple-500 hover:to-indigo-500 text-white font-bold text-sm transition-all duration-300 shadow-xl shadow-purple-900/30 border border-white/10 flex items-center gap-2">
<i data-lucide="github" class="w-4 h-4"></i>
<span>View GitHub Releases</span>
</a>
Expand All @@ -570,11 +570,11 @@ <h2 class="font-display font-extrabold text-xl md:text-2xl text-white tracking-w
<footer class="border-t border-white/5 bg-luxury-black/50 py-8 relative">
<div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 flex flex-col md:flex-row items-center justify-between gap-4 text-center md:text-left text-xs text-gray-500">
<div class="space-y-1">
<p class="font-bold text-gray-400">Chamo QR Code Ecosystem</p>
<p class="font-bold text-gray-400">Rock QR Code Ecosystem</p>
<p>© 2026 Companion Web Console. Realized on-demand.</p>
</div>
<div class="flex items-center justify-center gap-6">
<a href="https://github.com/sayanthrock/Chamo-QR" target="_blank" class="hover:text-white transition-colors duration-200 flex items-center gap-1.5">
<a href="https://github.com/sayanthrock/Rock-QR-Code" target="_blank" class="hover:text-white transition-colors duration-200 flex items-center gap-1.5">
<i data-lucide="github" class="w-3.5 h-3.5"></i>
<span>Ecosystem Repository</span>
</a>
Expand Down Expand Up @@ -668,8 +668,8 @@ <h2 class="font-display font-extrabold text-xl md:text-2xl text-white tracking-w
const content = computePayload();

// Match the exact Android companion shared link format:
// https://sayanthrock.github.io/Chamo-QR/share?content=CONTENT&type=TYPE&title=TITLE
const baseShareUrl = "https://sayanthrock.github.io/Chamo-QR/share";
// https://sayanthrock.github.io/Rock-QR-Code/share?content=CONTENT&type=TYPE&title=TITLE
const baseShareUrl = "https://sayanthrock.github.io/Rock-QR-Code/share";
const finalUrl = `${baseShareUrl}?content=${encodeURIComponent(content)}&type=${selectedType}&title=${encodeURIComponent(title)}`;
Comment thread
SayanthRock marked this conversation as resolved.
return finalUrl;
}
Expand Down
Loading
Loading