diff --git a/res/values/strings.xml b/res/values/strings.xml
index 06f925012..984353406 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -120,6 +120,8 @@
Source Code
Market
Update
+ Bitcoin
+ Flattr
Donate
Version %s installed
diff --git a/src/org/fdroid/fdroid/AppDetails.java b/src/org/fdroid/fdroid/AppDetails.java
index 719f48980..8cf7d8171 100644
--- a/src/org/fdroid/fdroid/AppDetails.java
+++ b/src/org/fdroid/fdroid/AppDetails.java
@@ -162,9 +162,11 @@ public class AppDetails extends ListActivity {
private static final int ISSUES = Menu.FIRST + 3;
private static final int SOURCE = Menu.FIRST + 4;
private static final int MARKET = Menu.FIRST + 5;
- private static final int DONATE = Menu.FIRST + 6;
- private static final int LAUNCH = Menu.FIRST + 7;
- private static final int SHARE = Menu.FIRST + 8;
+ private static final int BITCOIN = Menu.FIRST + 6;
+ private static final int FLATTR = Menu.FIRST + 7;
+ private static final int DONATE = Menu.FIRST + 8;
+ private static final int LAUNCH = Menu.FIRST + 9;
+ private static final int SHARE = Menu.FIRST + 10;
private DB.App app;
private int app_currentvercode;
@@ -613,8 +615,16 @@ public class AppDetails extends ListActivity {
}
menu.add(Menu.NONE, MARKET, 5, R.string.menu_market).setIcon(
android.R.drawable.ic_menu_view);
+ if (app.detail_bitcoinAddr != null) {
+ menu.add(Menu.NONE, BITCOIN, 6, R.string.menu_bitcoin).setIcon(
+ android.R.drawable.ic_menu_view);
+ }
+ if (app.detail_flattrID != null) {
+ menu.add(Menu.NONE, FLATTR, 7, R.string.menu_flattr).setIcon(
+ android.R.drawable.ic_menu_view);
+ }
if (app.detail_donateURL != null) {
- menu.add(Menu.NONE, DONATE, 6, R.string.menu_donate).setIcon(
+ menu.add(Menu.NONE, DONATE, 8, R.string.menu_donate).setIcon(
android.R.drawable.ic_menu_view);
}
@@ -671,9 +681,14 @@ public class AppDetails extends ListActivity {
tryOpenUri("https://play.google.com/store/apps/details?id=" + app.id);
return true;
- // TODO: Separate donate links if there are many (e.g. paypal and
- // bitcoin) and use their link schemas if possible.
- // http://f-droid.org/repository/issues/?do=view_issue&issue=212
+ case BITCOIN:
+ tryOpenUri("bitcoin:" + app.detail_bitcoinAddr);
+ return true;
+
+ case FLATTR:
+ tryOpenUri("https://flattr.com/thing/" + app.detail_flattrID);
+ return true;
+
case DONATE:
tryOpenUri(app.detail_donateURL);
return true;
diff --git a/src/org/fdroid/fdroid/DB.java b/src/org/fdroid/fdroid/DB.java
index dee305343..14ed8af9e 100644
--- a/src/org/fdroid/fdroid/DB.java
+++ b/src/org/fdroid/fdroid/DB.java
@@ -95,6 +95,7 @@ public class DB {
+ "webURL text, " + "trackerURL text, " + "sourceURL text, "
+ "curVersion text," + "curVercode integer,"
+ "antiFeatures string," + "donateURL string,"
+ + "bitcoinAddr string," + "flattrID string,"
+ "requirements string," + "category string," + "added string,"
+ "lastUpdated string," + "compatible int not null,"
+ "primary key(id));";
@@ -111,6 +112,7 @@ public class DB {
detail_trackerURL = null;
detail_sourceURL = null;
detail_donateURL = null;
+ detail_bitcoinAddr = null;
detail_webURL = null;
antiFeatures = null;
requirements = null;
@@ -153,6 +155,14 @@ public class DB {
// Null when !detail_Populated
public String detail_donateURL;
+ // Bitcoin donate address, or null
+ // Null when !detail_Populated
+ public String detail_bitcoinAddr;
+
+ // Flattr donate ID, or null
+ // Null when !detail_Populated
+ public String detail_flattrID;
+
public String curVersion;
public int curVercode;
public Date added;
@@ -605,7 +615,7 @@ public class DB {
}
private static final String[] POPULATE_APP_COLS = new String[] {"description", "webURL",
- "trackerURL", "sourceURL", "donateURL" };
+ "trackerURL", "sourceURL", "donateURL", "bitcoinAddr", "flattrID" };
private void populateAppDetails(App app) {
Cursor cursor = null;
@@ -618,6 +628,8 @@ public class DB {
app.detail_trackerURL = cursor.getString(2);
app.detail_sourceURL = cursor.getString(3);
app.detail_donateURL = cursor.getString(4);
+ app.detail_bitcoinAddr = cursor.getString(5);
+ app.detail_flattrID = cursor.getString(6);
app.detail_Populated = true;
} catch (Exception e) {
Log.d("FDroid", "Error populating app details " + app.id );
@@ -1193,6 +1205,8 @@ public class DB {
values.put("trackerURL", upapp.detail_trackerURL);
values.put("sourceURL", upapp.detail_sourceURL);
values.put("donateURL", upapp.detail_donateURL);
+ values.put("bitcoinAddr", upapp.detail_bitcoinAddr);
+ values.put("flattrID", upapp.detail_flattrID);
values.put("added",
upapp.added == null ? "" : mDateFormat.format(upapp.added));
values.put(
diff --git a/src/org/fdroid/fdroid/RepoXMLHandler.java b/src/org/fdroid/fdroid/RepoXMLHandler.java
index 173d88c0c..943e78427 100644
--- a/src/org/fdroid/fdroid/RepoXMLHandler.java
+++ b/src/org/fdroid/fdroid/RepoXMLHandler.java
@@ -204,6 +204,10 @@ public class RepoXMLHandler extends DefaultHandler {
curapp.detail_sourceURL = str;
} else if (curel.equals("donate")) {
curapp.detail_donateURL = str;
+ } else if (curel.equals("bitcoin")) {
+ curapp.detail_bitcoinAddr = str;
+ } else if (curel.equals("flattr")) {
+ curapp.detail_flattrID = str;
} else if (curel.equals("web")) {
curapp.detail_webURL = str;
} else if (curel.equals("tracker")) {