Skip to content

Commit 7d36ba7

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 7d36ba7

File tree

5 files changed

+108
-2
lines changed

5 files changed

+108
-2
lines changed

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

+85
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,81 @@ public boolean onOptionsItemSelected(MenuItem item)
99109
return true;
100110
}
101111

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

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)