From 9e7721ca62736eb4c2f3f528c5e7980e563afbc3 Mon Sep 17 00:00:00 2001 From: cketti Date: Sat, 20 Dec 2014 00:33:00 +0100 Subject: [PATCH] Make ckChangeLog an external dependency --- k9mail/build.gradle | 2 +- plugins/ckChangeLog/LICENSE | 202 ------- plugins/ckChangeLog/README.md | 85 --- .../ckChangeLog/library/AndroidManifest.xml | 12 - plugins/ckChangeLog/library/build.gradle | 21 - .../library/res/values-ru/strings.xml | 9 - .../library/res/values-sk/strings.xml | 9 - .../library/res/values/strings.xml | 9 - .../ckChangeLog/library/res/xml/changelog.xml | 2 - .../library/res/xml/changelog_master.xml | 6 - .../cketti/library/changelog/ChangeLog.java | 525 ------------------ plugins/ckChangeLog/screenshot_1.png | Bin 11588 -> 0 bytes plugins/ckChangeLog/screenshot_2.png | Bin 14376 -> 0 bytes settings.gradle | 1 - 14 files changed, 1 insertion(+), 882 deletions(-) delete mode 100644 plugins/ckChangeLog/LICENSE delete mode 100644 plugins/ckChangeLog/README.md delete mode 100644 plugins/ckChangeLog/library/AndroidManifest.xml delete mode 100644 plugins/ckChangeLog/library/build.gradle delete mode 100644 plugins/ckChangeLog/library/res/values-ru/strings.xml delete mode 100644 plugins/ckChangeLog/library/res/values-sk/strings.xml delete mode 100644 plugins/ckChangeLog/library/res/values/strings.xml delete mode 100644 plugins/ckChangeLog/library/res/xml/changelog.xml delete mode 100644 plugins/ckChangeLog/library/res/xml/changelog_master.xml delete mode 100644 plugins/ckChangeLog/library/src/de/cketti/library/changelog/ChangeLog.java delete mode 100644 plugins/ckChangeLog/screenshot_1.png delete mode 100644 plugins/ckChangeLog/screenshot_2.png diff --git a/k9mail/build.gradle b/k9mail/build.gradle index ff30c9251..119e1d738 100644 --- a/k9mail/build.gradle +++ b/k9mail/build.gradle @@ -9,7 +9,6 @@ repositories { dependencies { compile project(':plugins:Android-PullToRefresh:library') - compile project(':plugins:ckChangeLog:library') compile project(':plugins:HoloColorPicker') compile project(':plugins:openpgp-api-library') compile 'org.apache.james:apache-mime4j-core:0.7.2' @@ -20,6 +19,7 @@ dependencies { compile 'com.android.support:support-v4:21.0.2' compile 'com.android.support:support-v13:21.0.2' compile 'net.sourceforge.htmlcleaner:htmlcleaner:2.2' + compile 'de.cketti.library.changelog:ckchangelog:1.2.1' } android { diff --git a/plugins/ckChangeLog/LICENSE b/plugins/ckChangeLog/LICENSE deleted file mode 100644 index 7a4a3ea24..000000000 --- a/plugins/ckChangeLog/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/plugins/ckChangeLog/README.md b/plugins/ckChangeLog/README.md deleted file mode 100644 index 608d270d8..000000000 --- a/plugins/ckChangeLog/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# ckChangeLog - An Android Library to display a Change Log - -![Screenshot](screenshot_1.png) -![Screenshot](screenshot_2.png) - -This library provides an easy way to display a change log in your app. - -## Features - - * Uses a simple XML file as source - * Supports partial translations - -Repository at . - - -## Usage - -1. Create the master change log in `res/xml/changelog_master.xml`. Formatted like this: - - ```xml - - - - Totally new and shiny version - - - Fixed: A bug fix - Some other changes I can't quite remember - - - First release - - - ``` - -2. Create translations of this `changelog_master.xml` file in files named `changelog.xml` under -language-specific versions of `res/xml/`, e.g. `res/xml-de/changelog.xml`. - -3. Display the change log dialog by putting the following code in your activity's `onCreate()` method: - - ```java - ChangeLog cl = new ChangeLog(this); - if (cl.isFirstRun()) { - cl.getLogDialog().show(); - } - ``` - -## Changelog - -### Version 1.0.0 -* **Breaking change!** Moved master translation from `res/raw/changelog.xml` to `res/xml/changelog_master.xml` -* Added German translation of the sample app - -### Version 0.1 -* Initial release - - -## Acknowledgments - -This library is based on: -* [android-change-log](http://code.google.com/p/android-change-log/) by Karsten Priegnitz -* [Inscription](https://github.com/MartinvanZ/Inscription/) by [Martin van Zuilekom](https://github.com/MartinvanZ/) - -Other contributors: -* [Andrew Chen](https://github.com/andrewachen) -* [Artur Dryomov](https://github.com/ming13) -* [zjw](https://github.com/zjw) -* You? Pull requests welcome! - - -## License - - Copyright (C) 2012 Christian Ketterer (cketti) - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/plugins/ckChangeLog/library/AndroidManifest.xml b/plugins/ckChangeLog/library/AndroidManifest.xml deleted file mode 100644 index 03eece148..000000000 --- a/plugins/ckChangeLog/library/AndroidManifest.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/plugins/ckChangeLog/library/build.gradle b/plugins/ckChangeLog/library/build.gradle deleted file mode 100644 index 293082bcd..000000000 --- a/plugins/ckChangeLog/library/build.gradle +++ /dev/null @@ -1,21 +0,0 @@ -apply plugin: 'com.android.library' - -android { - compileSdkVersion 21 - buildToolsVersion '21.1.2' - - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - res.srcDirs = ['res'] - } - } - - // Do not abort build if lint finds errors - lintOptions { - abortOnError false - } -} - -archivesBaseName = 'ckChangeLog' diff --git a/plugins/ckChangeLog/library/res/values-ru/strings.xml b/plugins/ckChangeLog/library/res/values-ru/strings.xml deleted file mode 100644 index 5f7d1dd2f..000000000 --- a/plugins/ckChangeLog/library/res/values-ru/strings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - Изменения - Что нового - OK - Подробнее… - - Версия %s - diff --git a/plugins/ckChangeLog/library/res/values-sk/strings.xml b/plugins/ckChangeLog/library/res/values-sk/strings.xml deleted file mode 100644 index c408b63ac..000000000 --- a/plugins/ckChangeLog/library/res/values-sk/strings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - Zoznam zmien - Čo je nové - OK - Viac… - - Verzia %s - diff --git a/plugins/ckChangeLog/library/res/values/strings.xml b/plugins/ckChangeLog/library/res/values/strings.xml deleted file mode 100644 index 3c07d7cd9..000000000 --- a/plugins/ckChangeLog/library/res/values/strings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - Change Log - What\'s New - OK - More… - - Version %s - \ No newline at end of file diff --git a/plugins/ckChangeLog/library/res/xml/changelog.xml b/plugins/ckChangeLog/library/res/xml/changelog.xml deleted file mode 100644 index 59d3cf430..000000000 --- a/plugins/ckChangeLog/library/res/xml/changelog.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/plugins/ckChangeLog/library/res/xml/changelog_master.xml b/plugins/ckChangeLog/library/res/xml/changelog_master.xml deleted file mode 100644 index d83a85b14..000000000 --- a/plugins/ckChangeLog/library/res/xml/changelog_master.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - \ No newline at end of file diff --git a/plugins/ckChangeLog/library/src/de/cketti/library/changelog/ChangeLog.java b/plugins/ckChangeLog/library/src/de/cketti/library/changelog/ChangeLog.java deleted file mode 100644 index 03b962f25..000000000 --- a/plugins/ckChangeLog/library/src/de/cketti/library/changelog/ChangeLog.java +++ /dev/null @@ -1,525 +0,0 @@ -/* - * Copyright (C) 2012 Christian Ketterer (cketti) - * - * Portions Copyright (C) 2012 Martin van Zuilekom (http://martin.cubeactive.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - * Based on android-change-log: - * - * Copyright (C) 2011, Karsten Priegnitz - * - * Permission to use, copy, modify, and distribute this piece of software - * for any purpose with or without fee is hereby granted, provided that - * the above copyright notice and this permission notice appear in the - * source code of all copies. - * - * It would be appreciated if you mention the author in your change log, - * contributors list or the like. - * - * http://code.google.com/p/android-change-log/ - */ -package de.cketti.library.changelog; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.content.SharedPreferences; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.content.res.XmlResourceParser; -import android.preference.PreferenceManager; -import android.util.Log; -import android.util.SparseArray; -import android.webkit.WebView; - - -/** - * Display a dialog showing a full or partial (What's New) change log. - */ -public class ChangeLog { - /** - * Tag that is used when sending error/debug messages to the log. - */ - protected static final String LOG_TAG = "ckChangeLog"; - - /** - * This is the key used when storing the version code in SharedPreferences. - */ - protected static final String VERSION_KEY = "ckChangeLog_last_version_code"; - - /** - * Constant that used when no version code is available. - */ - protected static final int NO_VERSION = -1; - - /** - * Default CSS styles used to format the change log. - */ - private static final String DEFAULT_CSS = - "h1 { margin-left: 0px; font-size: 1.2em;}" + - "li { margin-left: 0px;}" + - "ul { padding-left: 2em;}"; - - - /** - * Context that is used to access the resources and to create the ChangeLog dialogs. - */ - protected final Context mContext; - - /** - * Contains the CSS rules used to format the change log. - */ - protected final String mCss; - - /** - * Last version code read from {@code SharedPreferences} or {@link #NO_VERSION}. - */ - private int mLastVersionCode; - - /** - * Version code of the current installation. - */ - private int mCurrentVersionCode; - - /** - * Version name of the current installation. - */ - private String mCurrentVersionName; - - - /** - * Contains constants for the root element of {@code changelog.xml}. - */ - protected interface ChangeLogTag { - static final String NAME = "changelog"; - } - - /** - * Contains constants for the release element of {@code changelog.xml}. - */ - protected interface ReleaseTag { - static final String NAME = "release"; - static final String ATTRIBUTE_VERSION = "version"; - static final String ATTRIBUTE_VERSION_CODE = "versioncode"; - } - - /** - * Contains constants for the change element of {@code changelog.xml}. - */ - protected interface ChangeTag { - static final String NAME = "change"; - } - - /** - * Create a {@code ChangeLog} instance using the default {@link SharedPreferences} file. - * - * @param context - * Context that is used to access the resources and to create the ChangeLog dialogs. - */ - public ChangeLog(Context context) { - this(context, PreferenceManager.getDefaultSharedPreferences(context), DEFAULT_CSS); - } - - /** - * Create a {@code ChangeLog} instance using the default {@link SharedPreferences} file. - * - * @param context - * Context that is used to access the resources and to create the ChangeLog dialogs. - * @param css - * CSS styles that will be used to format the change log. - */ - public ChangeLog(Context context, String css) { - this(context, PreferenceManager.getDefaultSharedPreferences(context), css); - } - - /** - * Create a {@code ChangeLog} instance using the supplied {@code SharedPreferences} instance. - * - * @param context - * Context that is used to access the resources and to create the ChangeLog dialogs. - * @param preferences - * {@code SharedPreferences} instance that is used to persist the last version code. - * @param css - * CSS styles used to format the change log (excluding {@code }). - * - */ - public ChangeLog(Context context, SharedPreferences preferences, String css) { - mContext = context; - mCss = css; - - // Get last version code - mLastVersionCode = preferences.getInt(VERSION_KEY, NO_VERSION); - - // Get current version code and version name - try { - PackageInfo packageInfo = context.getPackageManager().getPackageInfo( - context.getPackageName(), 0); - - mCurrentVersionCode = packageInfo.versionCode; - mCurrentVersionName = packageInfo.versionName; - } catch (NameNotFoundException e) { - mCurrentVersionCode = NO_VERSION; - Log.e(LOG_TAG, "Could not get version information from manifest!", e); - } - } - - /** - * Get version code of last installation. - * - * @return The version code of the last installation of this app (as described in the former - * manifest). This will be the same as returned by {@link #getCurrentVersionCode()} the - * second time this version of the app is launched (more precisely: the second time - * {@code ChangeLog} is instantiated). - * - * @see AndroidManifest.xml#android:versionCode - */ - public int getLastVersionCode() { - return mLastVersionCode; - } - - /** - * Get version code of current installation. - * - * @return The version code of this app as described in the manifest. - * - * @see AndroidManifest.xml#android:versionCode - */ - public int getCurrentVersionCode() { - return mCurrentVersionCode; - } - - /** - * Get version name of current installation. - * - * @return The version name of this app as described in the manifest. - * - * @see AndroidManifest.xml#android:versionName - */ - public String getCurrentVersionName() { - return mCurrentVersionName; - } - - /** - * Check if this is the first execution of this app version. - * - * @return {@code true} if this version of your app is started the first time. - */ - public boolean isFirstRun() { - return mLastVersionCode < mCurrentVersionCode; - } - - /** - * Check if this is a new installation. - * - * @return {@code true} if your app including {@code ChangeLog} is started the first time ever. - * Also {@code true} if your app was uninstalled and installed again. - */ - public boolean isFirstRunEver() { - return mLastVersionCode == NO_VERSION; - } - - /** - * Get the "What's New" dialog. - * - * @return An AlertDialog displaying the changes since the previous installed version of your - * app (What's New). But when this is the first run of your app including - * {@code ChangeLog} then the full log dialog is show. - */ - public AlertDialog getLogDialog() { - return getDialog(isFirstRunEver()); - } - - /** - * Get a dialog with the full change log. - * - * @return An AlertDialog with a full change log displayed. - */ - public AlertDialog getFullLogDialog() { - return getDialog(true); - } - - /** - * Create a dialog containing (parts of the) change log. - * - * @param full - * If this is {@code true} the full change log is displayed. Otherwise only changes for - * versions newer than the last version are displayed. - * - * @return A dialog containing the (partial) change log. - */ - protected AlertDialog getDialog(boolean full) { - WebView wv = new WebView(mContext); - //wv.setBackgroundColor(0); // transparent - wv.loadDataWithBaseURL(null, getLog(full), "text/html", "UTF-8", null); - - AlertDialog.Builder builder = new AlertDialog.Builder(mContext); - builder.setTitle( - mContext.getResources().getString( - full ? R.string.changelog_full_title : R.string.changelog_title)) - .setView(wv) - .setCancelable(false) - // OK button - .setPositiveButton( - mContext.getResources().getString(R.string.changelog_ok_button), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // The user clicked "OK" so save the current version code as - // "last version code". - updateVersionInPreferences(); - } - }); - - if (!full) { - // Show "More…" button if we're only displaying a partial change log. - builder.setNegativeButton(R.string.changelog_show_full, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - getFullLogDialog().show(); - } - }); - } - - return builder.create(); - } - - /** - * Write current version code to the preferences. - */ - protected void updateVersionInPreferences() { - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext); - SharedPreferences.Editor editor = sp.edit(); - editor.putInt(VERSION_KEY, mCurrentVersionCode); - - // TODO: Update preferences from a background thread - editor.commit(); - } - - /** - * Get changes since last version as HTML string. - * - * @return HTML string containing the changes since the previous installed version of your app - * (What's New). - */ - public String getLog() { - return getLog(false); - } - - /** - * Get full change log as HTML string. - * - * @return HTML string containing the full change log. - */ - public String getFullLog() { - return getLog(true); - } - - /** - * Get (partial) change log as HTML string. - * - * @param full - * If this is {@code true} the full change log is returned. Otherwise only changes for - * versions newer than the last version are returned. - * - * @return The (partial) change log. - */ - private String getLog(boolean full) { - StringBuilder sb = new StringBuilder(); - - sb.append(""); - - Resources resources = mContext.getResources(); - - // Read master change log from xml/changelog_master.xml - XmlResourceParser xml = mContext.getResources().getXml(R.xml.changelog_master); - SparseArray defaultChangelog; - try { - defaultChangelog = readChangeLog(xml, full); - } finally { - xml.close(); - } - - // Read localized change log from xml[-lang]/changelog.xml - XmlResourceParser resXml = mContext.getResources().getXml(R.xml.changelog); - SparseArray changelog; - try { - changelog = readChangeLog(resXml, full); - } finally { - resXml.close(); - } - - String versionFormat = resources.getString(R.string.changelog_version_format); - - // Get all version codes from the master change log... - List versions = new ArrayList(defaultChangelog.size()); - for (int i = 0, len = defaultChangelog.size(); i < len; i++) { - int key = defaultChangelog.keyAt(i); - versions.add(key); - } - - // ... and sort them (newest version first). - Collections.sort(versions, Collections.reverseOrder()); - - for (Integer version : versions) { - int key = version.intValue(); - - // Use release information from localized change log and fall back to the master file - // if necessary. - ReleaseItem release = changelog.get(key, defaultChangelog.get(key)); - - sb.append("

"); - sb.append(String.format(versionFormat, release.versionName)); - sb.append("

    "); - for (String change : release.changes) { - sb.append("
  • "); - sb.append(change); - sb.append("
  • "); - } - sb.append("
"); - } - - sb.append(""); - - return sb.toString(); - } - - /** - * Read the change log from an XML file. - * - * @param xml - * The {@code XmlPullParser} instance used to read the change log. - * @param full - * If {@code true} the full change log is read. Otherwise only the changes since the - * last (saved) version are read. - * - * @return A {@code SparseArray} mapping the version codes to release information. - */ - protected SparseArray readChangeLog(XmlPullParser xml, boolean full) { - SparseArray result = new SparseArray(); - - try { - int eventType = xml.getEventType(); - while (eventType != XmlPullParser.END_DOCUMENT) { - if (eventType == XmlPullParser.START_TAG && xml.getName().equals(ReleaseTag.NAME)) { - if (parseReleaseTag(xml, full, result)) { - // Stop reading more elements if this entry is not newer than the last - // version. - break; - } - } - eventType = xml.next(); - } - } catch (XmlPullParserException e) { - Log.e(LOG_TAG, e.getMessage(), e); - } catch (IOException e) { - Log.e(LOG_TAG, e.getMessage(), e); - } - - return result; - } - - /** - * Parse the {@code release} tag of a change log XML file. - * - * @param xml - * The {@code XmlPullParser} instance used to read the change log. - * @param full - * If {@code true} the contents of the {@code release} tag are always added to - * {@code changelog}. Otherwise only if the item's {@code versioncode} attribute is - * higher than the last version code. - * @param changelog - * The {@code SparseArray} to add a new {@link ReleaseItem} instance to. - * - * @return {@code true} if the {@code release} element is describing changes of a version older - * or equal to the last version. In that case {@code changelog} won't be modified and - * {@link #readChangeLog(XmlPullParser, boolean)} will stop reading more elements from - * the change log file. - * - * @throws XmlPullParserException - * @throws IOException - */ - private boolean parseReleaseTag(XmlPullParser xml, boolean full, - SparseArray changelog) throws XmlPullParserException, IOException { - - String version = xml.getAttributeValue(null, ReleaseTag.ATTRIBUTE_VERSION); - - int versionCode; - try { - String versionCodeStr = xml.getAttributeValue(null, ReleaseTag.ATTRIBUTE_VERSION_CODE); - versionCode = Integer.parseInt(versionCodeStr); - } catch (NumberFormatException e) { - versionCode = NO_VERSION; - } - - if (!full && versionCode <= mLastVersionCode) { - return true; - } - - int eventType = xml.getEventType(); - List changes = new ArrayList(); - while (eventType != XmlPullParser.END_TAG || xml.getName().equals(ChangeTag.NAME)) { - if (eventType == XmlPullParser.START_TAG && xml.getName().equals(ChangeTag.NAME)) { - eventType = xml.next(); - - changes.add(xml.getText()); - } - eventType = xml.next(); - } - - ReleaseItem release = new ReleaseItem(versionCode, version, changes); - changelog.put(versionCode, release); - - return false; - } - - /** - * Container used to store information about a release/version. - */ - protected static class ReleaseItem { - /** - * Version code of the release. - */ - public final int versionCode; - - /** - * Version name of the release. - */ - public final String versionName; - - /** - * List of changes introduced with that release. - */ - public final List changes; - - ReleaseItem(int versionCode, String versionName, List changes) { - this.versionCode = versionCode; - this.versionName = versionName; - this.changes = changes; - } - } -} diff --git a/plugins/ckChangeLog/screenshot_1.png b/plugins/ckChangeLog/screenshot_1.png deleted file mode 100644 index 7b0462aa6b4c41474a31833edb8a6117dece741d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11588 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 diff --git a/plugins/ckChangeLog/screenshot_2.png b/plugins/ckChangeLog/screenshot_2.png deleted file mode 100644 index efaf3e5af94fe06c280b2f41b1ceeaf16e40510d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14376 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 diff --git a/settings.gradle b/settings.gradle index b2d35b11d..b0523ca27 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,5 @@ include ':k9mail' include ':plugins:Android-PullToRefresh:library' -include ':plugins:ckChangeLog:library' include ':plugins:HoloColorPicker' include ':plugins:openpgp-api-library' include ':tests-on-jvm'