瀏覽代碼

Show version (commit count) and build time in the 'about' section

inorichi 9 年之前
父節點
當前提交
9c0abdeb81

+ 26 - 0
app/build.gradle

@@ -1,3 +1,5 @@
+import java.text.SimpleDateFormat
+
 apply plugin: 'android-sdk-manager'
 apply plugin: 'com.android.application'
 apply plugin: 'com.neenbedankt.android-apt'
@@ -7,6 +9,26 @@ retrolambda {
     jvmArgs '-noverify'
 }
 
+ext {
+    // Git is needed in your system PATH for these commands to work.
+    // If it's not installed, you can return a random value as a workaround
+    getCommitCount = {
+        return "git rev-list --count master".execute().text.trim()
+        // return "1"
+    }
+
+    getGitSha = {
+        return 'git rev-parse --short HEAD'.execute().text.trim()
+        // return "1"
+    }
+
+    getBuildTime = {
+        def df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'")
+        df.setTimeZone(TimeZone.getTimeZone("UTC"))
+        return df.format(new Date())
+    }
+}
+
 android {
     compileSdkVersion 23
     buildToolsVersion "23.0.2"
@@ -19,6 +41,10 @@ android {
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
         versionCode 1
         versionName "1.0"
+
+        buildConfigField "String", "COMMIT_COUNT", "\"${getCommitCount()}\""
+        buildConfigField "String", "COMMIT_SHA", "\"${getGitSha()}\""
+        buildConfigField "String", "BUILD_TIME", "\"${getBuildTime()}\""
     }
 
     compileOptions {

+ 57 - 0
app/src/main/java/eu/kanade/mangafeed/ui/setting/SettingsAboutFragment.java

@@ -0,0 +1,57 @@
+package eu.kanade.mangafeed.ui.setting;
+
+import android.os.Bundle;
+import android.preference.Preference;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import eu.kanade.mangafeed.BuildConfig;
+import eu.kanade.mangafeed.R;
+
+public class SettingsAboutFragment extends SettingsNestedFragment {
+
+    public static SettingsNestedFragment newInstance(int resourcePreference, int resourceTitle) {
+        SettingsNestedFragment fragment = new SettingsAboutFragment();
+        fragment.setArgs(resourcePreference, resourceTitle);
+        return fragment;
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
+
+        Preference version = findPreference(getString(R.string.pref_version));
+        Preference buildTime = findPreference(getString(R.string.pref_build_time));
+
+        version.setSummary(BuildConfig.DEBUG ? "r" + BuildConfig.COMMIT_COUNT :
+                BuildConfig.VERSION_NAME);
+
+        buildTime.setSummary(getFormattedBuildTime());
+
+        return super.onCreateView(inflater, container, savedState);
+    }
+
+    private String getFormattedBuildTime() {
+        try {
+            DateFormat inputDf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
+            inputDf.setTimeZone(TimeZone.getTimeZone("UTC"));
+            Date date = inputDf.parse(BuildConfig.BUILD_TIME);
+
+            DateFormat outputDf = DateFormat.getDateTimeInstance(
+                    DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault());
+            outputDf.setTimeZone(TimeZone.getDefault());
+
+            return outputDf.format(date);
+        } catch (ParseException e) {
+            // Do nothing
+        }
+        return "";
+    }
+}

+ 7 - 3
app/src/main/java/eu/kanade/mangafeed/ui/setting/SettingsActivity.java

@@ -50,19 +50,23 @@ public class SettingsActivity extends BaseActivity {
 
             registerSubpreference(R.string.pref_category_reader_key,
                     SettingsNestedFragment.newInstance(
-                        R.xml.pref_reader, R.string.pref_category_reader));
+                            R.xml.pref_reader, R.string.pref_category_reader));
 
             registerSubpreference(R.string.pref_category_downloads_key,
                     SettingsDownloadsFragment.newInstance(
-                        R.xml.pref_downloads, R.string.pref_category_downloads));
+                            R.xml.pref_downloads, R.string.pref_category_downloads));
 
             registerSubpreference(R.string.pref_category_accounts_key,
                     SettingsAccountsFragment.newInstance(
-                        R.xml.pref_accounts, R.string.pref_category_accounts));
+                            R.xml.pref_accounts, R.string.pref_category_accounts));
 
             registerSubpreference(R.string.pref_category_cache_key,
                     SettingsCacheFragment.newInstance(
                             R.xml.pref_cache, R.string.pref_category_cache));
+
+            registerSubpreference(R.string.pref_category_about_key,
+                    SettingsAboutFragment.newInstance(
+                            R.xml.pref_about, R.string.pref_category_about));
         }
 
         @Override

+ 4 - 0
app/src/main/res/values/keys.xml

@@ -4,6 +4,7 @@
     <string name="pref_category_accounts_key">pref_category_accounts_key</string>
     <string name="pref_category_downloads_key">pref_category_downloads_key</string>
     <string name="pref_category_cache_key">pref_category_cache_key</string>
+    <string name="pref_category_about_key">pref_category_about_key</string>
 
     <string name="pref_default_viewer_key">pref_default_viewer_key</string>
     <string name="pref_hide_status_bar_key">pref_hide_status_bar_key</string>
@@ -19,4 +20,7 @@
 
     <string name="pref_chapter_cache_size_key">pref_chapter_cache_size_key</string>
     <string name="pref_clear_chapter_cache_key">pref_clear_chapter_cache_key</string>
+
+    <string name="pref_version">pref_version</string>
+    <string name="pref_build_time">pref_build_time</string>
 </resources>

+ 5 - 0
app/src/main/res/values/strings.xml

@@ -39,6 +39,7 @@
     <string name="pref_category_accounts">Accounts</string>
     <string name="pref_category_downloads">Downloads</string>
     <string name="pref_category_cache">Cache</string>
+    <string name="pref_category_about">About</string>
 
       <!-- Reader section -->
     <string name="pref_hide_status_bar">Hide status bar</string>
@@ -64,6 +65,10 @@
     <string name="cache_deleted">Cache cleared. %1$d files have been deleted</string>
     <string name="cache_delete_error">An error occurred clearing cache</string>
 
+      <!-- About section -->
+    <string name="version">Version</string>
+    <string name="build_time">Build time</string>
+
     <!-- ACRA -->
     <string name="pref_enable_acra">Send crash reports</string>
     <string name="pref_acra_summary">Help fixing bugs. Sensitive data is not sent</string>

+ 20 - 0
app/src/main/res/xml/pref_about.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <CheckBoxPreference
+        android:key="acra.enable"
+        android:title="@string/pref_enable_acra"
+        android:summary="@string/pref_acra_summary"
+        android:defaultValue="false"/>
+
+    <Preference
+        android:key="@string/pref_version"
+        android:title="@string/version"
+        android:persistent="false" />
+
+    <Preference
+        android:key="@string/pref_build_time"
+        android:title="@string/build_time"
+        android:persistent="false" />
+
+</PreferenceScreen>

+ 4 - 5
app/src/main/res/xml/pref_main.xml

@@ -21,10 +21,9 @@
         android:persistent="false"
         android:title="@string/pref_category_cache" />
 
-    <CheckBoxPreference
-        android:key="acra.enable"
-        android:title="@string/pref_enable_acra"
-        android:summary="@string/pref_acra_summary"
-        android:defaultValue="false"/>
+    <Preference
+        android:key="@string/pref_category_about_key"
+        android:persistent="false"
+        android:title="@string/pref_category_about" />
 
 </PreferenceScreen>