mirror of
https://github.com/kavishdevar/librepods.git
synced 2026-05-15 13:09:10 +00:00
Compare commits
6 Commits
nightly-d1
...
nightly-5b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bc5079e13 | ||
|
|
64d233d427 | ||
|
|
ea2c2b811b | ||
|
|
6f28df734e | ||
|
|
c15e15a6b7 | ||
|
|
75a52cdfd7 |
110
.github/ISSUE_TEMPLATE/01-bug-report-android.yml
vendored
Normal file
110
.github/ISSUE_TEMPLATE/01-bug-report-android.yml
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
name: Bug report (Android)
|
||||||
|
description: Report a bug in the Android app
|
||||||
|
labels: ["bug", "android"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to report a bug. Please fill in as much as you can.
|
||||||
|
- type: input
|
||||||
|
id: app-version
|
||||||
|
attributes:
|
||||||
|
label: App version
|
||||||
|
description: "Find this in `Settings → About → Version` in the app, or in your phone's app info."
|
||||||
|
placeholder: "v0.2.5 (build 46)"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: app-source
|
||||||
|
attributes:
|
||||||
|
label: App source
|
||||||
|
options:
|
||||||
|
- GitHub
|
||||||
|
- Play
|
||||||
|
- Built from source
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: device
|
||||||
|
attributes:
|
||||||
|
label: Device
|
||||||
|
description: Manufacturer and model.
|
||||||
|
placeholder: "Google Pixel 8 Pro"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: android-version
|
||||||
|
attributes:
|
||||||
|
label: Android / OS version
|
||||||
|
description: Include the OEM skin if relevant.
|
||||||
|
placeholder: "Android 16, OxygenOS 16, ColorOS 16, ..."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: root-method
|
||||||
|
attributes:
|
||||||
|
label: Root / hook method
|
||||||
|
options:
|
||||||
|
- No root (native L2CAP support)
|
||||||
|
- Magisk + Xposed
|
||||||
|
- KernelSU + Xposed
|
||||||
|
- Other (describe in additional context)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: airpods-model
|
||||||
|
attributes:
|
||||||
|
label: AirPods model
|
||||||
|
options:
|
||||||
|
- AirPods (1st gen)
|
||||||
|
- AirPods (2nd gen)
|
||||||
|
- AirPods (3rd gen)
|
||||||
|
- AirPods (4th gen)
|
||||||
|
- AirPods (4th gen) with ANC
|
||||||
|
- AirPods Pro (1st gen)
|
||||||
|
- AirPods Pro 2 (Lightning)
|
||||||
|
- AirPods Pro 2 (USB-C)
|
||||||
|
- AirPods Pro 3
|
||||||
|
- Other / not sure
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: firmware
|
||||||
|
attributes:
|
||||||
|
label: AirPods firmware
|
||||||
|
description: Find this under `About` in the app once connected.
|
||||||
|
placeholder: "8454768"
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: What happened
|
||||||
|
description: Describe what you observed and what you expected. Include steps to reproduce if applicable.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: Logs
|
||||||
|
description: |
|
||||||
|
If you are rooted, give the app root access, open the app, go to `Settings → Troubleshooting → Collect Logs`, and attach the resulting file here.
|
||||||
|
|
||||||
|
Without logs most bugs are very hard to diagnose. If you are not, follow these instructions:
|
||||||
|
(Needs access to a computer, and USB/Wireless Debugging under developer options enabled)
|
||||||
|
|
||||||
|
Commands:
|
||||||
|
- Get the uid: Linux/Mac: `adb shell dumpsys package me.kavishdevar.librepods | grep uid`
|
||||||
|
- Start logs: `adb logcat --uid=<uid>,1002 >> librepods-logs.txt` (1002 is for bluetooth)
|
||||||
|
|
||||||
|
Steps for proper logs
|
||||||
|
- force close the app
|
||||||
|
- turn off bluetooth
|
||||||
|
- start logs
|
||||||
|
- open the app
|
||||||
|
- turn on bluetooth and connect
|
||||||
|
|
||||||
|
placeholder: Paste log content or attach the file
|
||||||
|
- type: textarea
|
||||||
|
id: extra
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: Anything else that might help (screenshots, video, related issues, what you've already tried).
|
||||||
83
.github/ISSUE_TEMPLATE/02-bug-report-linux.yml
vendored
Normal file
83
.github/ISSUE_TEMPLATE/02-bug-report-linux.yml
vendored
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
name: Bug report (Linux)
|
||||||
|
description: Report a bug in the Linux program
|
||||||
|
labels: ["bug", "linux"]
|
||||||
|
title: "[Linux] "
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for the report. Please fill in as much as you can.
|
||||||
|
- type: input
|
||||||
|
id: app-version
|
||||||
|
attributes:
|
||||||
|
label: App version
|
||||||
|
placeholder: "linux-v0.1.0, or linux-rust commit abc1234"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: variant
|
||||||
|
attributes:
|
||||||
|
label: Variant
|
||||||
|
options:
|
||||||
|
- Rust rewrite (`linux-rust` branch)
|
||||||
|
- QT version (NOT MAINTAINED! issues will be closed)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: distro
|
||||||
|
attributes:
|
||||||
|
label: Distro and version
|
||||||
|
placeholder: "Arch Linux, Fedora 41, Ubuntu 24.04, NixOS 25.05"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: desktop
|
||||||
|
attributes:
|
||||||
|
label: Desktop environment / compositor
|
||||||
|
placeholder: "GNOME 47 (Wayland), KDE 6 (X11), Hyprland, ..."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: install-method
|
||||||
|
attributes:
|
||||||
|
label: Install method (only official sources)
|
||||||
|
options:
|
||||||
|
- Built from source (`nix` or otherwise)
|
||||||
|
- Pre-built binary
|
||||||
|
- AppImage
|
||||||
|
- Other
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: airpods-model
|
||||||
|
attributes:
|
||||||
|
label: AirPods model
|
||||||
|
options:
|
||||||
|
- AirPods (1st gen)
|
||||||
|
- AirPods (2nd gen)
|
||||||
|
- AirPods (3rd gen)
|
||||||
|
- AirPods (4th gen)
|
||||||
|
- AirPods (4th gen) with ANC
|
||||||
|
- AirPods Pro (1st gen)
|
||||||
|
- AirPods Pro 2 (Lightning)
|
||||||
|
- AirPods Pro 2 (USB-C)
|
||||||
|
- AirPods Pro 3
|
||||||
|
- Other / not sure
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: What happened
|
||||||
|
description: Describe what you observed and what you expected. Include steps to reproduce if applicable.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: logs
|
||||||
|
attributes:
|
||||||
|
label: Logs and stderr
|
||||||
|
description: Run the app from a terminal with `--debug` and paste the output.
|
||||||
|
- type: textarea
|
||||||
|
id: extra
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
31
.github/ISSUE_TEMPLATE/03-feature-request.yml
vendored
Normal file
31
.github/ISSUE_TEMPLATE/03-feature-request.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
name: Feature request
|
||||||
|
description: Suggest a new feature or improvement
|
||||||
|
labels: ["enhancement"]
|
||||||
|
body:
|
||||||
|
- type: dropdown
|
||||||
|
id: scope
|
||||||
|
attributes:
|
||||||
|
label: Scope
|
||||||
|
options:
|
||||||
|
- Android
|
||||||
|
- Linux
|
||||||
|
- Both
|
||||||
|
- Other
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: problem
|
||||||
|
attributes:
|
||||||
|
label: Problem or use case
|
||||||
|
description: What are you trying to do? What is missing or hard today?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: proposal
|
||||||
|
attributes:
|
||||||
|
label: Proposed solution
|
||||||
|
description: How might it work? UI sketches, behavior, edge cases.
|
||||||
|
- type: textarea
|
||||||
|
id: alternatives
|
||||||
|
attributes:
|
||||||
|
label: Alternatives considered
|
||||||
20
.github/workflows/ci-android.yml
vendored
20
.github/workflows/ci-android.yml
vendored
@@ -35,6 +35,7 @@ jobs:
|
|||||||
java-version: 21
|
java-version: 21
|
||||||
- uses: gradle/actions/setup-gradle@v4
|
- uses: gradle/actions/setup-gradle@v4
|
||||||
- name: Decode keystore
|
- name: Decode keystore
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
run: echo "${{ secrets.RELEASE_KEYSTORE_FILE }}" | base64 --decode > android/release.keystore
|
run: echo "${{ secrets.RELEASE_KEYSTORE_FILE }}" | base64 --decode > android/release.keystore
|
||||||
- name: Setup Android SDK
|
- name: Setup Android SDK
|
||||||
uses: android-actions/setup-android@v3
|
uses: android-actions/setup-android@v3
|
||||||
@@ -43,6 +44,7 @@ jobs:
|
|||||||
- name: Install NDK
|
- name: Install NDK
|
||||||
run: sdkmanager "ndk;30.0.14904198"
|
run: sdkmanager "ndk;30.0.14904198"
|
||||||
- name: Create local.properties
|
- name: Create local.properties
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
run: |
|
run: |
|
||||||
cat <<EOF > android/local.properties
|
cat <<EOF > android/local.properties
|
||||||
RELEASE_STORE_FILE=../release.keystore
|
RELEASE_STORE_FILE=../release.keystore
|
||||||
@@ -50,7 +52,12 @@ jobs:
|
|||||||
RELEASE_KEY_ALIAS=${{ secrets.RELEASE_KEY_ALIAS }}
|
RELEASE_KEY_ALIAS=${{ secrets.RELEASE_KEY_ALIAS }}
|
||||||
RELEASE_KEY_PASSWORD=${{ secrets.RELEASE_KEY_PASSWORD }}
|
RELEASE_KEY_PASSWORD=${{ secrets.RELEASE_KEY_PASSWORD }}
|
||||||
EOF
|
EOF
|
||||||
- name: Build
|
- name: Build debug APK for PRs
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
run: ./gradlew assembleFossDebug
|
||||||
|
working-directory: android
|
||||||
|
- name: Build release artifacts
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
run: ./gradlew packageReleaseArtifacts
|
run: ./gradlew packageReleaseArtifacts
|
||||||
working-directory: android
|
working-directory: android
|
||||||
- name: Get app version
|
- name: Get app version
|
||||||
@@ -59,26 +66,37 @@ jobs:
|
|||||||
- id: vars
|
- id: vars
|
||||||
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
with:
|
with:
|
||||||
name: apk-release
|
name: apk-release
|
||||||
path: release/*release.apk
|
path: release/*release.apk
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
with:
|
||||||
|
name: apk-debug
|
||||||
|
path: android/app/build/outputs/apk/foss/debug/app-foss-debug.apk
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
with:
|
with:
|
||||||
name: apk-debug
|
name: apk-debug
|
||||||
path: release/*debug.apk
|
path: release/*debug.apk
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
with:
|
with:
|
||||||
name: root-module-release
|
name: root-module-release
|
||||||
path: release/*release.zip
|
path: release/*release.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
with:
|
with:
|
||||||
name: root-module-debug
|
name: root-module-debug
|
||||||
path: release/*debug.zip
|
path: release/*debug.zip
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
with:
|
with:
|
||||||
name: release-bundle
|
name: release-bundle
|
||||||
path: release/*.aab
|
path: release/*.aab
|
||||||
|
|||||||
@@ -10,17 +10,29 @@ plugins {
|
|||||||
id("kotlin-parcelize")
|
id("kotlin-parcelize")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val localPropsFile = rootProject.file("local.properties")
|
||||||
val props = Properties().apply {
|
val props = Properties().apply {
|
||||||
load(rootProject.file("local.properties").inputStream())
|
if (localPropsFile.exists()) {
|
||||||
|
load(localPropsFile.inputStream())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val releaseSigningAvailable = listOf(
|
||||||
|
"RELEASE_STORE_FILE",
|
||||||
|
"RELEASE_STORE_PASSWORD",
|
||||||
|
"RELEASE_KEY_ALIAS",
|
||||||
|
"RELEASE_KEY_PASSWORD"
|
||||||
|
).all { props[it]?.toString()?.isNotBlank() == true }
|
||||||
|
|
||||||
android {
|
android {
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
create("release") {
|
if (releaseSigningAvailable) {
|
||||||
storeFile = file(props["RELEASE_STORE_FILE"] as String)
|
create("release") {
|
||||||
storePassword = props["RELEASE_STORE_PASSWORD"] as String
|
storeFile = file(props["RELEASE_STORE_FILE"] as String)
|
||||||
keyAlias = props["RELEASE_KEY_ALIAS"] as String
|
storePassword = props["RELEASE_STORE_PASSWORD"] as String
|
||||||
keyPassword = props["RELEASE_KEY_PASSWORD"] as String
|
keyAlias = props["RELEASE_KEY_ALIAS"] as String
|
||||||
|
keyPassword = props["RELEASE_KEY_PASSWORD"] as String
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
namespace = "me.kavishdevar.librepods"
|
namespace = "me.kavishdevar.librepods"
|
||||||
@@ -45,14 +57,18 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
buildConfigField("Boolean", "PLAY_BUILD", "false")
|
buildConfigField("Boolean", "PLAY_BUILD", "false")
|
||||||
signingConfig = signingConfigs.getByName("release")
|
if (releaseSigningAvailable) {
|
||||||
|
signingConfig = signingConfigs.getByName("release")
|
||||||
|
}
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdk = 33
|
minSdk = 33
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
debug {
|
debug {
|
||||||
buildConfigField("Boolean", "PLAY_BUILD", "false")
|
buildConfigField("Boolean", "PLAY_BUILD", "false")
|
||||||
signingConfig = signingConfigs.getByName("release")
|
if (releaseSigningAvailable) {
|
||||||
|
signingConfig = signingConfigs.getByName("release")
|
||||||
|
}
|
||||||
versionNameSuffix = "-debug"
|
versionNameSuffix = "-debug"
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdk = 33
|
minSdk = 33
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ package me.kavishdevar.librepods.presentation.screens
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
@@ -542,10 +543,23 @@ fun AppSettingsScreen(
|
|||||||
name = stringResource(R.string.github_issues),
|
name = stringResource(R.string.github_issues),
|
||||||
navController = navController,
|
navController = navController,
|
||||||
onClick = {
|
onClick = {
|
||||||
val intent = Intent(
|
val appVersion = Uri.encode("v${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})")
|
||||||
Intent.ACTION_VIEW,
|
val device = Uri.encode("${Build.MANUFACTURER} ${Build.MODEL}")
|
||||||
"https://github.com/kavishdevar/librepods/issues".toUri()
|
val androidVersion = Uri.encode("${Build.ID} (${Build.DISPLAY})")
|
||||||
|
val appSource = Uri.encode(
|
||||||
|
when {
|
||||||
|
BuildConfig.PLAY_BUILD -> "Play"
|
||||||
|
else -> "GitHub"
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
val url = "https://github.com/kavishdevar/librepods/issues/new" +
|
||||||
|
"?template=01-bug-report-android.yml" +
|
||||||
|
"&app-source=$appSource" +
|
||||||
|
"&app-version=$appVersion" +
|
||||||
|
"&device=$device" +
|
||||||
|
"&android-version=$androidVersion"
|
||||||
|
|
||||||
|
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
|
||||||
context.startActivity(intent)
|
context.startActivity(intent)
|
||||||
},
|
},
|
||||||
independent = false
|
independent = false
|
||||||
|
|||||||
Reference in New Issue
Block a user