Compare commits

..

8 Commits

Author SHA1 Message Date
Geoffroy Bonneville
c2c146a28e Fix fastlane gradle path 2025-11-10 12:46:04 -05:00
Geoffroy Bonneville
0b479e10c8 Fix pipeline 2025-11-10 12:38:45 -05:00
Geoffroy Bonneville
0fbdec570a Fix fastlane gradle file read 2025-11-10 12:34:45 -05:00
Geoffroy Bonneville
e44bb99479 Fix fastlane local version retrieval 2025-11-10 12:23:46 -05:00
Geoffroy Bonneville
dcaecbf185 Fix scrolling in menu
Improve pipeline
2025-11-10 12:14:38 -05:00
Geoffroy Bonneville
e6f81fa177 Shrink changelog 2025-11-09 19:18:17 -05:00
Geoffroy Bonneville
b3af094eed Fix key store path 2025-11-09 18:54:08 -05:00
Geoffroy Bonneville
49a58a8977 Sign AAB 2025-11-09 18:42:33 -05:00
8 changed files with 61 additions and 29 deletions

View File

@@ -6,6 +6,9 @@ on:
- master - master
pull_request: pull_request:
env:
MODULE: donextv2
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -20,10 +23,6 @@ jobs:
distribution: 'temurin' distribution: 'temurin'
java-version: '17' java-version: '17'
- name: Replace tokens in build.gradle
run: |
sed -i 's/#{\([^}]*\)}/${\1}/g' donext/build.gradle
- name: Cache Gradle - name: Cache Gradle
uses: actions/cache@v3 uses: actions/cache@v3
with: with:
@@ -34,6 +33,9 @@ jobs:
restore-keys: | restore-keys: |
${{ runner.os }}-gradle- ${{ runner.os }}-gradle-
- name: Decode signing key
run: echo "${{ secrets.SIGNING_KEY_BASE64 }}" | base64 --decode > ${{ env.MODULE }}/upload.jks
- name: Set up Ruby - name: Set up Ruby
uses: ruby/setup-ruby@v1 uses: ruby/setup-ruby@v1
with: with:
@@ -47,5 +49,10 @@ jobs:
- name: Run Fastlane - name: Run Fastlane
env: env:
MODULE: ${{ env.MODULE }}
SUPPLY_JSON_KEY: service-account.json SUPPLY_JSON_KEY: service-account.json
KEYSTORE_FILE: upload.jks
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
ALIAS_NAME: ${{ secrets.ALIAS_NAME }}
ALIAS_PASSWORD: ${{ secrets.ALIAS_PASSWORD }}
run: bundle exec fastlane internal run: bundle exec fastlane internal

2
.gitignore vendored
View File

@@ -1,5 +1,6 @@
*.iml *.iml
*.apk *.apk
*.jks
.gradle .gradle
/local.properties /local.properties
/.idea/workspace.xml /.idea/workspace.xml
@@ -8,3 +9,4 @@
/build /build
/captures /captures
/fastlane/keys/ /fastlane/keys/
/donext*/release/

View File

@@ -42,7 +42,7 @@ dependencies {
implementation "com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}" implementation "com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}"
// Lifecycle components // Lifecycle components
def lifecycleVersion = '2.9.3' def lifecycleVersion = '2.9.4'
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycleVersion" implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycleVersion" implementation "androidx.lifecycle:lifecycle-livedata:$lifecycleVersion"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion" implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"

View File

@@ -1,3 +1,5 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins { plugins {
id("com.android.application") id("com.android.application")
id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.android")
@@ -18,12 +20,21 @@ android {
applicationId = "com.wismna.geoffroy.donext" applicationId = "com.wismna.geoffroy.donext"
minSdk = 26 minSdk = 26
targetSdk = 36 targetSdk = 36
versionCode = 34 versionCode = 35
versionName = "2.0" versionName = "2.0.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }
signingConfigs {
create("release") {
storeFile = file(System.getenv("KEYSTORE_FILE") ?: "./upload.jks")
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = System.getenv("ALIAS_NAME")
keyPassword = System.getenv("ALIAS_PASSWORD")
}
}
sourceSets { sourceSets {
getByName("debug").assets.srcDirs(files("$projectDir/schemas")) getByName("debug").assets.srcDirs(files("$projectDir/schemas"))
} }
@@ -38,14 +49,17 @@ android {
getDefaultProguardFile("proguard-android-optimize.txt"), getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro" "proguard-rules.pro"
) )
signingConfig = signingConfigs["release"]
} }
} }
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_11 sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11
} }
kotlinOptions { kotlin {
jvmTarget = "11" compilerOptions {
jvmTarget = JvmTarget.JVM_11
}
} }
buildFeatures { buildFeatures {
compose = true compose = true

View File

@@ -6,6 +6,8 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Checklist import androidx.compose.material.icons.filled.Checklist
import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Delete
@@ -43,7 +45,8 @@ fun MenuScreen(
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxHeight() .fillMaxHeight()
.padding(vertical = 8.dp), .padding(vertical = 8.dp)
.verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.SpaceBetween verticalArrangement = Arrangement.SpaceBetween
) { ) {
Column { Column {

View File

@@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.CalendarMonth import androidx.compose.material.icons.filled.CalendarMonth
import androidx.compose.material.icons.filled.Clear import androidx.compose.material.icons.filled.Clear
@@ -61,7 +63,7 @@ fun TaskScreen(
titleFocusRequester.requestFocus() titleFocusRequester.requestFocus()
} }
Column(Modifier.padding(16.dp)) { Column(Modifier.padding(16.dp).verticalScroll(rememberScrollState())) {
Text( Text(
stringResource( stringResource(
if (viewModel.isDeleted) R.string.task_title_deleted if (viewModel.isDeleted) R.string.task_title_deleted

View File

@@ -1,23 +1,30 @@
default_platform(:android) default_platform(:android)
platform :android do platform :android do
desc "Build, test, and deploy the production version to Google Play"
lane :deploy do
gradle(task: "testDebugUnitTest")
gradle(task: "clean :donextv2:bundleRelease")
upload_to_play_store(
track: "production",
aab: "donextv2/build/outputs/bundle/release/donextv2-release.aab"
)
end
desc "Build, test, and deploy to Google Play" desc "Build, test, and deploy to Google Play"
lane :internal do lane :internal do
module_name = ENV["MODULE"]
# Read local versionCode
project_root = File.expand_path("..", __dir__)
gradle_path = File.join(project_root, module_name, "build.gradle.kts")
UI.message("Gradle file resolved at: #{gradle_path}")
gradle_file = File.read(gradle_path)
gradle_version = gradle_file[/versionCode\s*=\s*(\d+)/, 1].to_i
# Read Play Store versionCode (track internal)
play_version = google_play_track_version_codes(
track: "internal"
).max.to_i
if gradle_version <= play_version
UI.user_error!("VersionCode #{gradle_version} should be higher than Play Store version (#{play_version}). Aborting upload.")
end
gradle(task: "testDebugUnitTest") gradle(task: "testDebugUnitTest")
gradle(task: "clean :donextv2:bundleRelease") gradle(task: "clean :#{module_name}:bundleRelease")
upload_to_play_store( upload_to_play_store(
track: "internal", track: "internal",
aab: "donextv2/build/outputs/bundle/release/donextv2-release.aab" aab: "#{module_name}/build/outputs/bundle/release/#{module_name}-release.aab"
) )
end end
end end

View File

@@ -2,10 +2,7 @@ Complete UI overhaul that gives DoNext a nice, modern look.
Complete code rewrite to Kotlin and Android Jetpack, with a better architecture. Complete code rewrite to Kotlin and Android Jetpack, with a better architecture.
Task lists are now displayed in a navigation menu Task lists are now displayed in a navigation menu
Tasks are now ordered by priority and not cycles Tasks are now ordered by priority and not cycles which were removed
All tasks can be Done or Removed instead of only the first one All tasks can be Done or Removed instead of only the first one
A Recycle Bin was added Removed History page and split its features between the regular task lists and the new Recycle Bin
The whole Next and cycles mechanism was removed Today view is not a separate concept anymore and based on the tasks due date
The History page was removed and its features split between the regular task lists and the Recycle Bin
The Today view is not a separate concept now, it's based on the tasks due date
No more Settings page as it's not needed anymore (but it may come back later if required)