diff --git a/app/build.gradle b/app/build.gradle index 24d4124ab..cacf5f861 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,6 +14,7 @@ tasks.withType(Test) { systemProperty "logback.configurationFile", System.getProperty("user.dir", null) + "/app/src/main/assets/logback.xml" systemProperty "GB_LOGFILES_DIR", Files.createTempDirectory("gblog").toString() } + def getVersionCode = { -> try { def stdout = new ByteArrayOutputStream() @@ -27,6 +28,27 @@ def getVersionCode = { -> } } +def buildGitChangelog = { + def stdout = new ByteArrayOutputStream() + exec { + commandLine 'git', 'log', '--pretty=format:%h %s' + standardOutput = stdout + } + + def commitVersionCode = getVersionCode() + def changelogNode = new Node(null, 'changelog') + + stdout.toString().trim().eachLine { line -> + def (commitHash, commitMessage) = line.split(" ", 2) + def releaseNode = new Node(changelogNode, 'release', [version: commitHash, versioncode: commitVersionCode--]) + def _ = new Node(releaseNode, 'change', [:], commitMessage) + } + + def changelogFile = new File("${project.rootDir}/app/build/generated/res/changelog/xml/changelog_git.xml") + changelogFile.getParentFile().mkdirs() + changelogFile.write(groovy.xml.XmlUtil.serialize(changelogNode)) +} + def getGitHashShort = { -> try { def stdout = new ByteArrayOutputStream() @@ -106,6 +128,12 @@ android { } } + sourceSets { + main { + res.srcDirs += "build/generated/res/changelog" + } + } + buildTypes { release { minifyEnabled true @@ -170,6 +198,7 @@ android { applicationVariants.all { variant -> variant.resValue "string", "applicationId", variant.applicationId + buildGitChangelog() if (variant.buildType.name == 'nightly' || variant.buildType.name == 'nopebble') { variant.outputs.all { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java index 8c0e2d2d7..2494f447c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java @@ -1380,6 +1380,10 @@ public class GBApplication extends Application { return language; } + public static boolean isNightly() { + return BuildConfig.APPLICATION_ID.contains("nightly"); + } + public String getVersion() { try { return getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_META_DATA).versionName; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBChangeLog.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBChangeLog.java index 79e37ebdc..a6e38c4e9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBChangeLog.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBChangeLog.java @@ -18,20 +18,41 @@ package nodomain.freeyourgadget.gadgetbridge.util; import android.content.Context; import android.content.DialogInterface; +import android.util.SparseArray; import android.webkit.WebView; import androidx.appcompat.app.AlertDialog; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import de.cketti.library.changelog.ChangeLog; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; public class GBChangeLog extends ChangeLog { + private static final Logger LOG = LoggerFactory.getLogger(GBChangeLog.class); + public GBChangeLog(Context context, String css) { super(context, css); } + @Override + protected SparseArray getMasterChangeLog(boolean full) { + if (GBApplication.isNightly()) { + try { + return readChangeLogFromResource(R.xml.changelog_git, full); + } catch (final Exception e) { + // Just in case the git changelog is broken somehow.. + LOG.error("Failed to read git changelog for nightly", e); + } + } + + return super.getMasterChangeLog(full); + } + public AlertDialog getMaterialLogDialog() { return getMaterialDialog(isFirstRunEver()); }