Skip to content

Commit 9d4e5aa

Browse files
Branden ArcherBranden Archer
Branden Archer
authored and
Branden Archer
committed
Add an About page
This about page layout is borrowed from K-9 Mail: https://github.com/k9mail
1 parent e2ab8f5 commit 9d4e5aa

File tree

5 files changed

+107
-2
lines changed

5 files changed

+107
-2
lines changed

app/src/main/java/protect/card_locker/MainActivity.java

+84
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
11
package protect.card_locker;
22

3+
import android.content.DialogInterface;
34
import android.content.Intent;
5+
import android.content.pm.PackageInfo;
6+
import android.content.pm.PackageManager;
47
import android.database.Cursor;
58
import android.os.Bundle;
9+
import android.support.v7.app.AlertDialog;
610
import android.support.v7.app.AppCompatActivity;
711
import android.support.v7.widget.Toolbar;
12+
import android.util.Log;
813
import android.view.Menu;
914
import android.view.MenuItem;
1015
import android.view.View;
16+
import android.webkit.WebView;
1117
import android.widget.AdapterView;
1218
import android.widget.ListView;
1319
import android.widget.TextView;
1420

21+
import java.util.Calendar;
22+
1523
public class MainActivity extends AppCompatActivity
1624
{
25+
private static final String TAG = "LoyaltyCardLocker";
26+
1727
@Override
1828
protected void onCreate(Bundle savedInstanceState)
1929
{
@@ -99,6 +109,80 @@ public boolean onOptionsItemSelected(MenuItem item)
99109
return true;
100110
}
101111

112+
if(id == R.id.action_about)
113+
{
114+
displayAboutDialog();
115+
}
116+
102117
return super.onOptionsItemSelected(item);
103118
}
119+
120+
private void displayAboutDialog()
121+
{
122+
final String[][] USED_LIBRARIES = new String[][]
123+
{
124+
new String[] {"Commons CSV", "https://commons.apache.org/proper/commons-csv/"},
125+
new String[] {"ZXing", "https://github.com/zxing/zxing"},
126+
new String[] {"ZXing Android Embedded", "https://github.com/journeyapps/zxing-android-embedded"},
127+
};
128+
129+
StringBuilder libs = new StringBuilder().append("<ul>");
130+
for (String[] library : USED_LIBRARIES)
131+
{
132+
libs.append("<li><a href=\"").append(library[1]).append("\">").append(library[0]).append("</a></li>");
133+
}
134+
libs.append("</ul>");
135+
136+
String appName = getString(R.string.app_name);
137+
int year = Calendar.getInstance().get(Calendar.YEAR);
138+
139+
String version = "?";
140+
try
141+
{
142+
PackageInfo pi = getPackageManager().getPackageInfo(getPackageName(), 0);
143+
version = pi.versionName;
144+
}
145+
catch (PackageManager.NameNotFoundException e)
146+
{
147+
Log.w(TAG, "Package name not found", e);
148+
}
149+
150+
WebView wv = new WebView(this);
151+
String html =
152+
"<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />" +
153+
"<img src=\"file:///android_res/mipmap/ic_launcher.png\" alt=\"" + appName + "\"/>" +
154+
"<h1>" +
155+
String.format(getString(R.string.about_title_fmt),
156+
"<a href=\"" + getString(R.string.app_webpage_url)) + "\">" +
157+
appName +
158+
"</a>" +
159+
"</h1><p>" +
160+
appName +
161+
" " +
162+
String.format(getString(R.string.debug_version_fmt), version) +
163+
"</p><p>" +
164+
String.format(getString(R.string.app_revision_fmt),
165+
"<a href=\"" + getString(R.string.app_revision_url) + "\">" +
166+
getString(R.string.app_revision_url) +
167+
"</a>") +
168+
"</p><hr/><p>" +
169+
String.format(getString(R.string.app_copyright_fmt), year) +
170+
"</p><hr/><p>" +
171+
getString(R.string.app_license) +
172+
"</p><hr/><p>" +
173+
String.format(getString(R.string.app_libraries), appName, libs.toString());
174+
175+
wv.loadDataWithBaseURL("file:///android_res/drawable/", html, "text/html", "utf-8", null);
176+
new AlertDialog.Builder(this)
177+
.setView(wv)
178+
.setCancelable(true)
179+
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener()
180+
{
181+
public void onClick(DialogInterface dialog, int which)
182+
{
183+
dialog.dismiss();
184+
}
185+
})
186+
.show();
187+
}
104188
}

app/src/main/res/menu/main_menu.xml

+4
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,8 @@
1212
android:icon="@drawable/ic_import_export_white_24dp"
1313
android:title="@string/importExport"
1414
app:showAsAction="ifRoom"/>
15+
<item
16+
android:id="@+id/action_about"
17+
android:title="@string/about"
18+
app:showAsAction="never"/>
1519
</menu>

app/src/main/res/values/constants.xml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<string name="app_revision_url">https://github.com/brarcher/loyalty-card-locker/releases</string>
4+
<string name="app_webpage_url">https://github.com/brarcher/loyalty-card-locker</string>
5+
</resources>

app/src/main/res/values/strings.xml

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
<resources>
1+
<resources
2+
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
3+
24
<string name="app_name">Loyalty Card Locker</string>
35
<string name="action_add">Add</string>
46

@@ -14,6 +16,7 @@
1416
<string name="capture">Capture Card</string>
1517
<string name="edit">Edit</string>
1618
<string name="delete">Delete</string>
19+
<string name="ok">OK</string>
1720

1821
<string name="editCardTitle">Edit Loyalty Card</string>
1922
<string name="addCardTitle">Add Loyalty Card</string>
@@ -40,4 +43,12 @@
4043
<string name="importing">Importing&#8230;</string>
4144
<string name="exporting">Exporting&#8230;</string>
4245
<string name="noExternalStoragePermissionError">Unable to import or export cards without the external storage permission</string>
46+
47+
<string name="about">About</string>
48+
<string name="app_copyright_fmt">Copyright 2016-<xliff:g>%s</xliff:g> Branden Archer</string>
49+
<string name="app_license">Licensed under the GPLv3.</string>
50+
<string name="about_title_fmt">About <xliff:g id="app_name">%s</xliff:g></string>
51+
<string name="debug_version_fmt">Version: <xliff:g id="version">%s</xliff:g></string>
52+
<string name="app_revision_fmt">Revision Information: <xliff:g id="app_revision_url">%s</xliff:g></string>
53+
<string name="app_libraries"><xliff:g id="app_name">%s</xliff:g> uses the following third-party libraries: <xliff:g id="app_libraries_list">%s</xliff:g></string>
4354
</resources>

app/src/test/java/protect/card_locker/MainActivityTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,11 @@ public void onCreateShouldInflateLayout() throws Exception
5050
assertTrue(menu != null);
5151

5252
// The settings and add button should be present
53-
assertEquals(menu.size(), 2);
53+
assertEquals(menu.size(), 3);
5454

5555
assertEquals("Add", menu.findItem(R.id.action_add).getTitle().toString());
5656
assertEquals("Import/Export", menu.findItem(R.id.action_import_export).getTitle().toString());
57+
assertEquals("About", menu.findItem(R.id.action_about).getTitle().toString());
5758
}
5859

5960
@Test

0 commit comments

Comments
 (0)