diff --git a/app/src/main/java/org/fdroid/fdroid/data/App.java b/app/src/main/java/org/fdroid/fdroid/data/App.java index 77bf4560b..e8a7bc5ea 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/App.java +++ b/app/src/main/java/org/fdroid/fdroid/data/App.java @@ -165,6 +165,8 @@ public class App extends ValueObject implements Comparable, Parcelable { public String liberapayID; + public String openCollective; + /** * This matches {@code CurrentVersion} in build metadata files. * @@ -312,6 +314,9 @@ public class App extends ValueObject implements Comparable, Parcelable { case Cols.LIBERAPAY_ID: liberapayID = cursor.getString(i); break; + case Cols.OPEN_COLLECTIVE: + openCollective = cursor.getString(i); + break; case Cols.AutoInstallApk.VERSION_NAME: autoInstallVersionName = cursor.getString(i); break; @@ -991,6 +996,7 @@ public class App extends ValueObject implements Comparable, Parcelable { values.put(Cols.LITECOIN, litecoin); values.put(Cols.FLATTR_ID, flattrID); values.put(Cols.LIBERAPAY_ID, liberapayID); + values.put(Cols.OPEN_COLLECTIVE, openCollective); values.put(Cols.ADDED, Utils.formatDate(added, "")); values.put(Cols.LAST_UPDATED, Utils.formatDate(lastUpdated, "")); values.put(Cols.PREFERRED_SIGNER, preferredSigner); @@ -1104,6 +1110,12 @@ public class App extends ValueObject implements Comparable, Parcelable { return TextUtils.isEmpty(bitcoin) ? null : "litecoin:" + bitcoin; } + @Nullable + public String getOpenCollectiveUri() { + return TextUtils.isEmpty(openCollective) ? null : "https://opencollective.com/" + + openCollective + "/donate/"; + } + @Nullable public String getFlattrUri() { return TextUtils.isEmpty(flattrID) ? null : "https://flattr.com/thing/" + flattrID; @@ -1220,6 +1232,7 @@ public class App extends ValueObject implements Comparable, Parcelable { dest.writeString(this.litecoin); dest.writeString(this.flattrID); dest.writeString(this.liberapayID); + dest.writeString(this.openCollective); dest.writeString(this.preferredSigner); dest.writeString(this.suggestedVersionName); dest.writeInt(this.suggestedVersionCode); @@ -1271,6 +1284,7 @@ public class App extends ValueObject implements Comparable, Parcelable { this.litecoin = in.readString(); this.flattrID = in.readString(); this.liberapayID = in.readString(); + this.openCollective = in.readString(); this.preferredSigner = in.readString(); this.suggestedVersionName = in.readString(); this.suggestedVersionCode = in.readInt(); diff --git a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java index ec3cf3563..6c27dfd73 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/data/DBHelper.java @@ -157,6 +157,7 @@ public class DBHelper extends SQLiteOpenHelper { + AppMetadataTable.Cols.LITECOIN + " string," + AppMetadataTable.Cols.FLATTR_ID + " string," + AppMetadataTable.Cols.LIBERAPAY_ID + " string," + + AppMetadataTable.Cols.OPEN_COLLECTIVE + " string," + AppMetadataTable.Cols.REQUIREMENTS + " string," + AppMetadataTable.Cols.ADDED + " string," + AppMetadataTable.Cols.LAST_UPDATED + " string," @@ -227,7 +228,7 @@ public class DBHelper extends SQLiteOpenHelper { + "primary key(" + ApkAntiFeatureJoinTable.Cols.APK_ID + ", " + ApkAntiFeatureJoinTable.Cols.ANTI_FEATURE_ID + ") " + " );"; - protected static final int DB_VERSION = 84; + protected static final int DB_VERSION = 85; private final Context context; @@ -457,6 +458,20 @@ public class DBHelper extends SQLiteOpenHelper { addTranslation(db, oldVersion); switchRepoArchivePriorities(db, oldVersion); deleteOldIconUrls(db, oldVersion); + addOpenCollective(db, oldVersion); + } + + private void addOpenCollective(SQLiteDatabase db, int oldVersion) { + if (oldVersion >= 85) { + return; + } + + if (!columnExists(db, AppMetadataTable.NAME, AppMetadataTable.Cols.OPEN_COLLECTIVE)) { + Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.OPEN_COLLECTIVE + " field to " + + AppMetadataTable.NAME + " table in db."); + db.execSQL("alter table " + AppMetadataTable.NAME + " add column " + + AppMetadataTable.Cols.OPEN_COLLECTIVE + " string;"); + } } private void deleteOldIconUrls(SQLiteDatabase db, int oldVersion) { diff --git a/app/src/main/java/org/fdroid/fdroid/data/Schema.java b/app/src/main/java/org/fdroid/fdroid/data/Schema.java index b11a4ff13..297cffed4 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/Schema.java +++ b/app/src/main/java/org/fdroid/fdroid/data/Schema.java @@ -190,6 +190,7 @@ public interface Schema { String LITECOIN = "litecoinAddr"; String FLATTR_ID = "flattrID"; String LIBERAPAY_ID = "liberapayID"; + String OPEN_COLLECTIVE = "openCollective"; String PREFERRED_SIGNER = "preferredSigner"; String AUTO_INSTALL_VERSION_CODE = "suggestedVercode"; // name mismatch from issue #1063 String SUGGESTED_VERSION_NAME = "upstreamVersion"; // name mismatch from issue #1063 @@ -244,7 +245,7 @@ public interface Schema { ROW_ID, PACKAGE_ID, REPO_ID, IS_COMPATIBLE, NAME, SUMMARY, ICON, DESCRIPTION, WHATSNEW, LICENSE, AUTHOR_NAME, AUTHOR_EMAIL, WEBSITE, ISSUE_TRACKER, SOURCE_CODE, TRANSLATION, VIDEO, CHANGELOG, DONATE, BITCOIN, LITECOIN, FLATTR_ID, LIBERAPAY_ID, - SUGGESTED_VERSION_NAME, SUGGESTED_VERSION_CODE, ADDED, LAST_UPDATED, + OPEN_COLLECTIVE, SUGGESTED_VERSION_NAME, SUGGESTED_VERSION_CODE, ADDED, LAST_UPDATED, ANTI_FEATURES, REQUIREMENTS, ICON_URL, FEATURE_GRAPHIC, PROMO_GRAPHIC, TV_BANNER, PHONE_SCREENSHOTS, SEVEN_INCH_SCREENSHOTS, TEN_INCH_SCREENSHOTS, TV_SCREENSHOTS, WEAR_SCREENSHOTS, @@ -261,7 +262,7 @@ public interface Schema { _ID, ROW_ID, REPO_ID, IS_COMPATIBLE, NAME, SUMMARY, ICON, DESCRIPTION, WHATSNEW, LICENSE, AUTHOR_NAME, AUTHOR_EMAIL, WEBSITE, ISSUE_TRACKER, SOURCE_CODE, TRANSLATION, VIDEO, CHANGELOG, DONATE, BITCOIN, LITECOIN, FLATTR_ID, LIBERAPAY_ID, - SUGGESTED_VERSION_NAME, SUGGESTED_VERSION_CODE, ADDED, LAST_UPDATED, + OPEN_COLLECTIVE, SUGGESTED_VERSION_NAME, SUGGESTED_VERSION_CODE, ADDED, LAST_UPDATED, ANTI_FEATURES, REQUIREMENTS, ICON_URL, FEATURE_GRAPHIC, PROMO_GRAPHIC, TV_BANNER, PHONE_SCREENSHOTS, SEVEN_INCH_SCREENSHOTS, TEN_INCH_SCREENSHOTS, TV_SCREENSHOTS, WEAR_SCREENSHOTS, diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java index 144035764..4cbf162b0 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java @@ -796,6 +796,11 @@ public class AppDetailsRecyclerViewAdapter addDonateOption(R.layout.donate_liberapay, app.getLiberapayUri()); } + // OpenCollective + if (uriIsSetAndCanBeOpened(app.getOpenCollectiveUri())) { + addDonateOption(R.layout.donate_opencollective, app.getOpenCollectiveUri()); + } + // Bitcoin if (uriIsSetAndCanBeOpened(app.getBitcoinUri())) { addDonateOption(R.layout.donate_bitcoin, app.getBitcoinUri()); diff --git a/app/src/main/res/drawable/donation_option_opencollective.xml b/app/src/main/res/drawable/donation_option_opencollective.xml new file mode 100644 index 000000000..78253aef3 --- /dev/null +++ b/app/src/main/res/drawable/donation_option_opencollective.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/donate_opencollective.xml b/app/src/main/res/layout/donate_opencollective.xml new file mode 100644 index 000000000..65f519f8f --- /dev/null +++ b/app/src/main/res/layout/donate_opencollective.xml @@ -0,0 +1,10 @@ + + \ 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 37ea6d9dd..183ac612c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -234,6 +234,8 @@ This often occurs with apps installed via Google Play or other sources, if they Flattr Liberapay + + OpenCollective Latest diff --git a/app/src/test/java/org/fdroid/fdroid/updater/IndexV1UpdaterTest.java b/app/src/test/java/org/fdroid/fdroid/updater/IndexV1UpdaterTest.java index b8b95133e..1c9a469c0 100644 --- a/app/src/test/java/org/fdroid/fdroid/updater/IndexV1UpdaterTest.java +++ b/app/src/test/java/org/fdroid/fdroid/updater/IndexV1UpdaterTest.java @@ -329,6 +329,7 @@ public class IndexV1UpdaterTest extends FDroidProviderTest { "license", "litecoin", "name", + "openCollective", "packageName", "phoneScreenshots", "promoGraphic", diff --git a/app/src/test/resources/guardianproject_index-v1.json b/app/src/test/resources/guardianproject_index-v1.json index ee3884dfa..42a42d5f3 100644 --- a/app/src/test/resources/guardianproject_index-v1.json +++ b/app/src/test/resources/guardianproject_index-v1.json @@ -49,6 +49,7 @@ "issueTracker": "https://dev.guardianproject.info/projects/informacam/issues", "license": "GPLv3", "name": "CameraV", + "openCollective": "GuardianProject", "sourceCode": "https://github.com/guardianproject/CameraV", "summary": "An InformaCam app to generate verifiable media", "webSite": "https://guardianproject.info/apps/camerav/",