From 0df829034ca9a07488957c1312a995c0d9facb31 Mon Sep 17 00:00:00 2001 From: Dominik George Date: Mon, 4 Jan 2016 23:53:28 +0100 Subject: [PATCH] Add author/email/license display capabilities to app. (Closes: #532) --- CHANGELOG.md | 2 ++ F-Droid/res/drawable-hdpi/ic_email.png | Bin 0 -> 841 bytes F-Droid/res/drawable-mdpi/ic_email.png | Bin 0 -> 617 bytes F-Droid/res/drawable-xhdpi/ic_email.png | Bin 0 -> 1135 bytes F-Droid/res/drawable-xxhdpi/ic_email.png | Bin 0 -> 1805 bytes F-Droid/res/drawable-xxxhdpi/ic_email.png | Bin 0 -> 2052 bytes F-Droid/res/layout/app_details_header.xml | 13 +++++++++++++ F-Droid/res/layout/app_details_summary.xml | 7 +++++++ F-Droid/res/values/strings.xml | 2 ++ F-Droid/src/org/fdroid/fdroid/AppDetails.java | 17 ++++++++++++++++- .../src/org/fdroid/fdroid/RepoXMLHandler.java | 6 ++++++ F-Droid/src/org/fdroid/fdroid/data/App.java | 11 +++++++++++ .../org/fdroid/fdroid/data/AppProvider.java | 6 ++++-- .../src/org/fdroid/fdroid/data/DBHelper.java | 16 +++++++++++++++- 14 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 F-Droid/res/drawable-hdpi/ic_email.png create mode 100644 F-Droid/res/drawable-mdpi/ic_email.png create mode 100644 F-Droid/res/drawable-xhdpi/ic_email.png create mode 100644 F-Droid/res/drawable-xxhdpi/ic_email.png create mode 100644 F-Droid/res/drawable-xxxhdpi/ic_email.png diff --git a/CHANGELOG.md b/CHANGELOG.md index f88235c3a..bffe3ea6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ * Translation updates +* Display license and author information in app details where appropriate + ### 0.97 (2015-11-07) * Add option to prompt for unstable updates globally diff --git a/F-Droid/res/drawable-hdpi/ic_email.png b/F-Droid/res/drawable-hdpi/ic_email.png new file mode 100644 index 0000000000000000000000000000000000000000..0f27fd0c445e4e15e20547a1c8276ccf9a80b545 GIT binary patch literal 841 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8JTOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>H=O_6LkCVn*U}vlur5 zjF!mFmnlnjJyWgwZt=Ydt8xUSzp{V*vC3L1X5q>f!=|dgX3x%W;*I^JnG+x>9Tnk8DEyp21*d_R2gaq23|Cvs9M;Q^JUTO1wLnl=Pv7F^v#~^G+A)# z!h(Rs#|jLVT6MKOK$emf|$x@Z-w3|y<4W`({8$R?cNJXOuxUR7)-I2^p+~K zYEEpH`)#oBXt$Gb)ml@T<9U0vif`#h?_vmjwY9q-=Jlib+ZepE&Cd0&y{IZ07SzgE zZLluVs@iS#q3}6z(N-~=%3aUwiTjsjWxe&mnR_>1$3~o8_1E-^ZeiWF3!mRlD_d7_ zLF#q6l&;QY~?fC`m~yNwrEYN(E93Mh1pvx(0^21|}g! v##Sa4R>nr!28LD!2BERaS|}QF^HVa@DsgL2VVFG)sDZ)L)z4*}Q$iB}#oStG literal 0 HcmV?d00001 diff --git a/F-Droid/res/drawable-mdpi/ic_email.png b/F-Droid/res/drawable-mdpi/ic_email.png new file mode 100644 index 0000000000000000000000000000000000000000..af6cc2a9b43db403cec374e1fd52ea9630074228 GIT binary patch literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_Kaj^+ z;1LNlk?9!-Gj4OQ7Xu2imw5WRvOi#C5i`;@{90?qz`z*e>Eak-ar*8h`|RLA3APXS zeVH!Zm~`~0V}a(}&7FsjUa~03yrkx=yXc4FyX8B6=z6`KVE;vrPmLpX&fKn!Da)Lv z>m6LhDY4EusaRR@+%KKybDr1E`_BLT>3w$t%SBDr^@0C-+yiFVy?-4Uuk?T2DsIb; zQy-Uh>3cufxm8a zr5gV*S+{%M}YWLVK8{;zwCn3VOm zwD_fcs$@QKxiBH)MS{^Y8?KqZ9j>mFy?#sX;o{@(JVR8wqoi(>W?i4?lKbc8%vnb+ zPLcf+`Ed2F?`1MtyH-zqFC97k@WOPV(z!XU($$CKq6*hoq{`o#ajdH^_w~(UV`Gy? zd5Ovu$*B+h*JmvAf3%Kmb8hX1nxB`tO=|9*KUc6chm+~xiTdXFebuP~@k^WU0)t+) z#5JNMC9x#cD!C{XNHG{07@FxC80s3BgcuoHnOImE8)+LDS{WFG#wu%}Xvob^$xN%n VtwDuh_B5ad22WQ%mvv4FO#nGq`7Zzf literal 0 HcmV?d00001 diff --git a/F-Droid/res/drawable-xhdpi/ic_email.png b/F-Droid/res/drawable-xhdpi/ic_email.png new file mode 100644 index 0000000000000000000000000000000000000000..69febc0bfd3ab190fa60f95a0f91c4ee769f7931 GIT binary patch literal 1135 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 S-22TZ4jlA2OsH}vr~U_HK-|s% literal 0 HcmV?d00001 diff --git a/F-Droid/res/layout/app_details_header.xml b/F-Droid/res/layout/app_details_header.xml index d3b23cd73..622d895c1 100644 --- a/F-Droid/res/layout/app_details_header.xml +++ b/F-Droid/res/layout/app_details_header.xml @@ -73,6 +73,19 @@ android:baselineAligned="false" android:orientation="vertical"> + + android:drawableStart="@drawable/ic_website" android:text="@string/menu_website" /> + + It seems like this package is not compatible with your device. Do you want to try and install it anyway? You are trying to downgrade this application. Doing so might get it to malfunction and even lose your data. Do you want to try and downgrade it anyway? Version + by Delete Enable NFC Send… Cache packages @@ -115,6 +116,7 @@ Ignore All Updates Ignore This Update Website + E-Mail Author Issues Changelog Source Code diff --git a/F-Droid/src/org/fdroid/fdroid/AppDetails.java b/F-Droid/src/org/fdroid/fdroid/AppDetails.java index ab9b4dc65..290d30138 100644 --- a/F-Droid/src/org/fdroid/fdroid/AppDetails.java +++ b/F-Droid/src/org/fdroid/fdroid/AppDetails.java @@ -1135,6 +1135,9 @@ public class AppDetails extends AppCompatActivity implements ProgressListener, A case R.id.website: url = app.webURL; break; + case R.id.email: + url = "mailto:" + app.email; + break; case R.id.source: url = app.sourceURL; break; @@ -1231,6 +1234,13 @@ public class AppDetails extends AppCompatActivity implements ProgressListener, A else tv.setVisibility(View.GONE); + // Email button + tv = view.findViewById(R.id.email); + if (!TextUtils.isEmpty(app.email)) + tv.setOnClickListener(mOnClickListener); + else + tv.setVisibility(View.GONE); + // Source button tv = view.findViewById(R.id.source); if (!TextUtils.isEmpty(app.sourceURL)) @@ -1586,9 +1596,14 @@ public class AppDetails extends AppCompatActivity implements ProgressListener, A btMain.setOnClickListener(mOnClickListener); btMain.setEnabled(true); } + TextView author = (TextView) view.findViewById(R.id.author); + if (!TextUtils.isEmpty(app.author)) { + author.setText(getString(R.string.by_author) + " " + app.author); + author.setVisibility(View.VISIBLE); + } TextView currentVersion = (TextView) view.findViewById(R.id.current_version); if (!getApks().isEmpty()) { - currentVersion.setText(getApks().getItem(0).version); + currentVersion.setText(getApks().getItem(0).version + " (" + app.license + ")"); } else { currentVersion.setVisibility(View.GONE); btMain.setVisibility(View.GONE); diff --git a/F-Droid/src/org/fdroid/fdroid/RepoXMLHandler.java b/F-Droid/src/org/fdroid/fdroid/RepoXMLHandler.java index f6d5f6131..ff24611ba 100644 --- a/F-Droid/src/org/fdroid/fdroid/RepoXMLHandler.java +++ b/F-Droid/src/org/fdroid/fdroid/RepoXMLHandler.java @@ -167,6 +167,12 @@ public class RepoXMLHandler extends DefaultHandler { case "license": curapp.license = str; break; + case "author": + curapp.author = str; + break; + case "email": + curapp.email = str; + break; case "source": curapp.sourceURL = str; break; diff --git a/F-Droid/src/org/fdroid/fdroid/data/App.java b/F-Droid/src/org/fdroid/fdroid/data/App.java index 39b86cda4..db8c0d002 100644 --- a/F-Droid/src/org/fdroid/fdroid/data/App.java +++ b/F-Droid/src/org/fdroid/fdroid/data/App.java @@ -40,6 +40,9 @@ public class App extends ValueObject implements Comparable { public String license = "Unknown"; + public String author; + public String email; + public String webURL; public String trackerURL; @@ -139,6 +142,12 @@ public class App extends ValueObject implements Comparable { case AppProvider.DataColumns.LICENSE: license = cursor.getString(i); break; + case AppProvider.DataColumns.AUTHOR: + author = cursor.getString(i); + break; + case AppProvider.DataColumns.EMAIL: + email = cursor.getString(i); + break; case AppProvider.DataColumns.WEB_URL: webURL = cursor.getString(i); break; @@ -374,6 +383,8 @@ public class App extends ValueObject implements Comparable { values.put(AppProvider.DataColumns.ICON_URL_LARGE, iconUrlLarge); values.put(AppProvider.DataColumns.DESCRIPTION, description); values.put(AppProvider.DataColumns.LICENSE, license); + values.put(AppProvider.DataColumns.AUTHOR, author); + values.put(AppProvider.DataColumns.EMAIL, email); values.put(AppProvider.DataColumns.WEB_URL, webURL); values.put(AppProvider.DataColumns.TRACKER_URL, trackerURL); values.put(AppProvider.DataColumns.SOURCE_URL, sourceURL); diff --git a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java index 16a3d7c15..7f06c7451 100644 --- a/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java +++ b/F-Droid/src/org/fdroid/fdroid/data/AppProvider.java @@ -179,6 +179,8 @@ public class AppProvider extends FDroidProvider { String ICON = "icon"; String DESCRIPTION = "description"; String LICENSE = "license"; + String AUTHOR = "author"; + String EMAIL = "email"; String WEB_URL = "webURL"; String TRACKER_URL = "trackerURL"; String SOURCE_URL = "sourceURL"; @@ -212,8 +214,8 @@ public class AppProvider extends FDroidProvider { String[] ALL = { _ID, IS_COMPATIBLE, PACKAGE_NAME, NAME, SUMMARY, ICON, DESCRIPTION, - LICENSE, WEB_URL, TRACKER_URL, SOURCE_URL, CHANGELOG_URL, DONATE_URL, - BITCOIN_ADDR, LITECOIN_ADDR, FLATTR_ID, + LICENSE, AUTHOR, EMAIL, WEB_URL, TRACKER_URL, SOURCE_URL, + CHANGELOG_URL, DONATE_URL, BITCOIN_ADDR, LITECOIN_ADDR, FLATTR_ID, UPSTREAM_VERSION, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED, CATEGORIES, ANTI_FEATURES, REQUIREMENTS, IGNORE_ALLUPDATES, IGNORE_THISUPDATE, ICON_URL, ICON_URL_LARGE, diff --git a/F-Droid/src/org/fdroid/fdroid/data/DBHelper.java b/F-Droid/src/org/fdroid/fdroid/data/DBHelper.java index 5afead5e0..da0e1dd87 100644 --- a/F-Droid/src/org/fdroid/fdroid/data/DBHelper.java +++ b/F-Droid/src/org/fdroid/fdroid/data/DBHelper.java @@ -70,6 +70,8 @@ public class DBHelper extends SQLiteOpenHelper { + "icon text, " + "description text not null, " + "license text not null, " + + "author text, " + + "email text, " + "webURL text, " + "trackerURL text, " + "sourceURL text, " @@ -104,7 +106,7 @@ public class DBHelper extends SQLiteOpenHelper { + " );"; private static final String DROP_TABLE_INSTALLED_APP = "DROP TABLE " + TABLE_INSTALLED_APP + ";"; - private static final int DB_VERSION = 52; + private static final int DB_VERSION = 53; private final Context context; @@ -288,6 +290,7 @@ public class DBHelper extends SQLiteOpenHelper { updateIconUrlLarge(db, oldVersion); recreateInstalledCache(db, oldVersion); addCredentialsToRepo(db, oldVersion); + addAuthorToApp(db, oldVersion); } /** @@ -458,6 +461,17 @@ public class DBHelper extends SQLiteOpenHelper { } } + private void addAuthorToApp(SQLiteDatabase db, int oldVersion) { + if (oldVersion < 53 && !columnExists(db, TABLE_APP, "author")) { + Utils.debugLog(TAG, "Adding author column to " + TABLE_APP); + db.execSQL("alter table " + TABLE_APP + " add column author text"); + } + if (oldVersion < 53 && !columnExists(db, TABLE_APP, "email")) { + Utils.debugLog(TAG, "Adding email column to " + TABLE_APP); + db.execSQL("alter table " + TABLE_APP + " add column email text"); + } + } + /** * By clearing the etags stored in the repo table, it means that next time the user updates * their repos (either manually or on a scheduled task), they will update regardless of whether