From b99704a3d8a28a091f7feaf5d8b68e54e37ec229 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Mon, 16 May 2016 19:02:48 -0400 Subject: [PATCH] Add an About page This about page layout is borrowed from K-9 Mail: https://github.com/k9mail Italian translations provided by Airon90. Dutch translations provided by PanderMusubi. --- .../protect/card_locker/MainActivity.java | 85 +++++++++++++++++++ app/src/main/res/menu/main_menu.xml | 4 + app/src/main/res/values-it/strings.xml | 8 ++ app/src/main/res/values-nl/strings.xml | 8 ++ app/src/main/res/values/constants.xml | 5 ++ app/src/main/res/values/strings.xml | 13 ++- .../protect/card_locker/MainActivityTest.java | 3 +- 7 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/values/constants.xml diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index 3661b7303..72ad9e9c4 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -1,19 +1,29 @@ package protect.card_locker; +import android.content.DialogInterface; import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.database.Cursor; import android.os.Bundle; +import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.webkit.WebView; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; +import java.util.Calendar; + public class MainActivity extends AppCompatActivity { + private static final String TAG = "LoyaltyCardLocker"; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -99,6 +109,81 @@ public class MainActivity extends AppCompatActivity return true; } + if(id == R.id.action_about) + { + displayAboutDialog(); + return true; + } + return super.onOptionsItemSelected(item); } + + private void displayAboutDialog() + { + final String[][] USED_LIBRARIES = new String[][] + { + new String[] {"Commons CSV", "https://commons.apache.org/proper/commons-csv/"}, + new String[] {"ZXing", "https://github.com/zxing/zxing"}, + new String[] {"ZXing Android Embedded", "https://github.com/journeyapps/zxing-android-embedded"}, + }; + + StringBuilder libs = new StringBuilder().append(""); + + String appName = getString(R.string.app_name); + int year = Calendar.getInstance().get(Calendar.YEAR); + + String version = "?"; + try + { + PackageInfo pi = getPackageManager().getPackageInfo(getPackageName(), 0); + version = pi.versionName; + } + catch (PackageManager.NameNotFoundException e) + { + Log.w(TAG, "Package name not found", e); + } + + WebView wv = new WebView(this); + String html = + "" + + "\""" + + "

" + + String.format(getString(R.string.about_title_fmt), + "" + + appName + + "" + + "

" + + appName + + " " + + String.format(getString(R.string.debug_version_fmt), version) + + "

" + + String.format(getString(R.string.app_revision_fmt), + "" + + getString(R.string.app_revision_url) + + "") + + "


" + + String.format(getString(R.string.app_copyright_fmt), year) + + "


" + + getString(R.string.app_license) + + "


" + + String.format(getString(R.string.app_libraries), appName, libs.toString()); + + wv.loadDataWithBaseURL("file:///android_res/drawable/", html, "text/html", "utf-8", null); + new AlertDialog.Builder(this) + .setView(wv) + .setCancelable(true) + .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int which) + { + dialog.dismiss(); + } + }) + .show(); + } } \ No newline at end of file diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml index b21c0ace0..6124664f2 100644 --- a/app/src/main/res/menu/main_menu.xml +++ b/app/src/main/res/menu/main_menu.xml @@ -12,4 +12,8 @@ android:icon="@drawable/ic_import_export_white_24dp" android:title="@string/importExport" app:showAsAction="ifRoom"/> + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 85a71355a..31a8b92b2 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -41,4 +41,12 @@ Importazione in corso… Esportazione in corso… Impossibile importare o esportare i dati senza il permesso per l\'uso della memoria esterna. + Informazioni + Copyright 2016-%s Branden Archer + Pubblicato sotto licenza GPLv3. + Informazioni su %s + Versione: %s + Informazione sulla revisione: %s + %s usa le seguenti librerie di terze parti: %s + Ok diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 653057819..63870cd1f 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -41,4 +41,12 @@ Importerende… Exporterende… Niet mogelijk te importeren of exporteren zonder rechten op externe opslag + Over + Auteursrecht 2016-%s Branden Archer + Gelicenseerd met GPLv3. + Over %s + Versie: %s + Revisieïnformatie: %s + %s gebruikt de volgende bibliotheken van derden: %s + Oké diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml new file mode 100644 index 000000000..7ab3b26e4 --- /dev/null +++ b/app/src/main/res/values/constants.xml @@ -0,0 +1,5 @@ + + + https://github.com/brarcher/loyalty-card-locker/releases + https://github.com/brarcher/loyalty-card-locker + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 02398045b..6d3e93a25 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,6 @@ - + + Loyalty Card Locker Add @@ -14,6 +16,7 @@ Capture Card Edit Delete + OK Edit Loyalty Card Add Loyalty Card @@ -40,4 +43,12 @@ Importing… Exporting… Unable to import or export cards without the external storage permission + + About + Copyright 2016-%s Branden Archer + Licensed under the GPLv3. + About %s + Version: %s + Revision Information: %s + %s uses the following third-party libraries: %s \ No newline at end of file diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index 8783970a5..7d7821f65 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -50,10 +50,11 @@ public class MainActivityTest assertTrue(menu != null); // The settings and add button should be present - assertEquals(menu.size(), 2); + assertEquals(menu.size(), 3); assertEquals("Add", menu.findItem(R.id.action_add).getTitle().toString()); assertEquals("Import/Export", menu.findItem(R.id.action_import_export).getTitle().toString()); + assertEquals("About", menu.findItem(R.id.action_about).getTitle().toString()); } @Test