App Details: show the app's Translation links
fdroid/fdroidserver!450 icon is: https://material.io/tools/icons/?search=trans&icon=translate&style=baseline
This commit is contained in:
parent
3862f941e6
commit
4f1855c8a1
@ -146,6 +146,8 @@ public class App extends ValueObject implements Comparable<App>, Parcelable {
|
|||||||
|
|
||||||
public String sourceCode;
|
public String sourceCode;
|
||||||
|
|
||||||
|
public String translation;
|
||||||
|
|
||||||
public String video;
|
public String video;
|
||||||
|
|
||||||
public String changelog;
|
public String changelog;
|
||||||
@ -273,6 +275,9 @@ public class App extends ValueObject implements Comparable<App>, Parcelable {
|
|||||||
case Cols.SOURCE_CODE:
|
case Cols.SOURCE_CODE:
|
||||||
sourceCode = cursor.getString(i);
|
sourceCode = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
|
case Cols.TRANSLATION:
|
||||||
|
translation = cursor.getString(i);
|
||||||
|
break;
|
||||||
case Cols.VIDEO:
|
case Cols.VIDEO:
|
||||||
video = cursor.getString(i);
|
video = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
@ -936,6 +941,7 @@ public class App extends ValueObject implements Comparable<App>, Parcelable {
|
|||||||
values.put(Cols.WEBSITE, webSite);
|
values.put(Cols.WEBSITE, webSite);
|
||||||
values.put(Cols.ISSUE_TRACKER, issueTracker);
|
values.put(Cols.ISSUE_TRACKER, issueTracker);
|
||||||
values.put(Cols.SOURCE_CODE, sourceCode);
|
values.put(Cols.SOURCE_CODE, sourceCode);
|
||||||
|
values.put(Cols.TRANSLATION, translation);
|
||||||
values.put(Cols.VIDEO, video);
|
values.put(Cols.VIDEO, video);
|
||||||
values.put(Cols.CHANGELOG, changelog);
|
values.put(Cols.CHANGELOG, changelog);
|
||||||
values.put(Cols.DONATE, donate);
|
values.put(Cols.DONATE, donate);
|
||||||
@ -1161,6 +1167,7 @@ public class App extends ValueObject implements Comparable<App>, Parcelable {
|
|||||||
dest.writeString(this.webSite);
|
dest.writeString(this.webSite);
|
||||||
dest.writeString(this.issueTracker);
|
dest.writeString(this.issueTracker);
|
||||||
dest.writeString(this.sourceCode);
|
dest.writeString(this.sourceCode);
|
||||||
|
dest.writeString(this.translation);
|
||||||
dest.writeString(this.video);
|
dest.writeString(this.video);
|
||||||
dest.writeString(this.changelog);
|
dest.writeString(this.changelog);
|
||||||
dest.writeString(this.donate);
|
dest.writeString(this.donate);
|
||||||
@ -1211,6 +1218,7 @@ public class App extends ValueObject implements Comparable<App>, Parcelable {
|
|||||||
this.webSite = in.readString();
|
this.webSite = in.readString();
|
||||||
this.issueTracker = in.readString();
|
this.issueTracker = in.readString();
|
||||||
this.sourceCode = in.readString();
|
this.sourceCode = in.readString();
|
||||||
|
this.translation = in.readString();
|
||||||
this.video = in.readString();
|
this.video = in.readString();
|
||||||
this.changelog = in.readString();
|
this.changelog = in.readString();
|
||||||
this.donate = in.readString();
|
this.donate = in.readString();
|
||||||
|
@ -143,6 +143,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||||||
+ AppMetadataTable.Cols.WEBSITE + " text, "
|
+ AppMetadataTable.Cols.WEBSITE + " text, "
|
||||||
+ AppMetadataTable.Cols.ISSUE_TRACKER + " text, "
|
+ AppMetadataTable.Cols.ISSUE_TRACKER + " text, "
|
||||||
+ AppMetadataTable.Cols.SOURCE_CODE + " text, "
|
+ AppMetadataTable.Cols.SOURCE_CODE + " text, "
|
||||||
|
+ AppMetadataTable.Cols.TRANSLATION + " text, "
|
||||||
+ AppMetadataTable.Cols.VIDEO + " string, "
|
+ AppMetadataTable.Cols.VIDEO + " string, "
|
||||||
+ AppMetadataTable.Cols.CHANGELOG + " text, "
|
+ AppMetadataTable.Cols.CHANGELOG + " text, "
|
||||||
+ AppMetadataTable.Cols.PREFERRED_SIGNER + " text,"
|
+ AppMetadataTable.Cols.PREFERRED_SIGNER + " text,"
|
||||||
@ -225,7 +226,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||||||
+ "primary key(" + ApkAntiFeatureJoinTable.Cols.APK_ID + ", " + ApkAntiFeatureJoinTable.Cols.ANTI_FEATURE_ID + ") "
|
+ "primary key(" + ApkAntiFeatureJoinTable.Cols.APK_ID + ", " + ApkAntiFeatureJoinTable.Cols.ANTI_FEATURE_ID + ") "
|
||||||
+ " );";
|
+ " );";
|
||||||
|
|
||||||
protected static final int DB_VERSION = 81;
|
protected static final int DB_VERSION = 82;
|
||||||
|
|
||||||
private final Context context;
|
private final Context context;
|
||||||
|
|
||||||
@ -452,6 +453,19 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||||||
removeNotNullFromVersionName(db, oldVersion);
|
removeNotNullFromVersionName(db, oldVersion);
|
||||||
addDisabledMirrorsFields(db, oldVersion);
|
addDisabledMirrorsFields(db, oldVersion);
|
||||||
addIsLocalized(db, oldVersion);
|
addIsLocalized(db, oldVersion);
|
||||||
|
addTranslation(db, oldVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addTranslation(SQLiteDatabase db, int oldVersion) {
|
||||||
|
if (oldVersion >= 82) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!columnExists(db, AppMetadataTable.NAME, AppMetadataTable.Cols.TRANSLATION)) {
|
||||||
|
Utils.debugLog(TAG, "Adding " + AppMetadataTable.Cols.TRANSLATION + " field to "
|
||||||
|
+ AppMetadataTable.NAME + " table in db.");
|
||||||
|
db.execSQL("alter table " + AppMetadataTable.NAME + " add column "
|
||||||
|
+ AppMetadataTable.Cols.TRANSLATION + " string;");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addIsLocalized(SQLiteDatabase db, int oldVersion) {
|
private void addIsLocalized(SQLiteDatabase db, int oldVersion) {
|
||||||
|
@ -182,6 +182,7 @@ public interface Schema {
|
|||||||
String WEBSITE = "webURL";
|
String WEBSITE = "webURL";
|
||||||
String ISSUE_TRACKER = "trackerURL";
|
String ISSUE_TRACKER = "trackerURL";
|
||||||
String SOURCE_CODE = "sourceURL";
|
String SOURCE_CODE = "sourceURL";
|
||||||
|
String TRANSLATION = "translation";
|
||||||
String VIDEO = "video";
|
String VIDEO = "video";
|
||||||
String CHANGELOG = "changelogURL";
|
String CHANGELOG = "changelogURL";
|
||||||
String DONATE = "donateURL";
|
String DONATE = "donateURL";
|
||||||
@ -242,7 +243,7 @@ public interface Schema {
|
|||||||
String[] ALL_COLS = {
|
String[] ALL_COLS = {
|
||||||
ROW_ID, PACKAGE_ID, REPO_ID, IS_COMPATIBLE, NAME, SUMMARY, ICON, DESCRIPTION,
|
ROW_ID, PACKAGE_ID, REPO_ID, IS_COMPATIBLE, NAME, SUMMARY, ICON, DESCRIPTION,
|
||||||
WHATSNEW, LICENSE, AUTHOR_NAME, AUTHOR_EMAIL, WEBSITE, ISSUE_TRACKER, SOURCE_CODE,
|
WHATSNEW, LICENSE, AUTHOR_NAME, AUTHOR_EMAIL, WEBSITE, ISSUE_TRACKER, SOURCE_CODE,
|
||||||
VIDEO, CHANGELOG, DONATE, BITCOIN, LITECOIN, FLATTR_ID, LIBERAPAY_ID,
|
TRANSLATION, VIDEO, CHANGELOG, DONATE, BITCOIN, LITECOIN, FLATTR_ID, LIBERAPAY_ID,
|
||||||
UPSTREAM_VERSION_NAME, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
|
UPSTREAM_VERSION_NAME, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
|
||||||
ANTI_FEATURES, REQUIREMENTS, ICON_URL,
|
ANTI_FEATURES, REQUIREMENTS, ICON_URL,
|
||||||
FEATURE_GRAPHIC, PROMO_GRAPHIC, TV_BANNER, PHONE_SCREENSHOTS,
|
FEATURE_GRAPHIC, PROMO_GRAPHIC, TV_BANNER, PHONE_SCREENSHOTS,
|
||||||
@ -259,7 +260,7 @@ public interface Schema {
|
|||||||
String[] ALL = {
|
String[] ALL = {
|
||||||
_ID, ROW_ID, REPO_ID, IS_COMPATIBLE, NAME, SUMMARY, ICON, DESCRIPTION,
|
_ID, ROW_ID, REPO_ID, IS_COMPATIBLE, NAME, SUMMARY, ICON, DESCRIPTION,
|
||||||
WHATSNEW, LICENSE, AUTHOR_NAME, AUTHOR_EMAIL, WEBSITE, ISSUE_TRACKER, SOURCE_CODE,
|
WHATSNEW, LICENSE, AUTHOR_NAME, AUTHOR_EMAIL, WEBSITE, ISSUE_TRACKER, SOURCE_CODE,
|
||||||
VIDEO, CHANGELOG, DONATE, BITCOIN, LITECOIN, FLATTR_ID, LIBERAPAY_ID,
|
TRANSLATION, VIDEO, CHANGELOG, DONATE, BITCOIN, LITECOIN, FLATTR_ID, LIBERAPAY_ID,
|
||||||
UPSTREAM_VERSION_NAME, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
|
UPSTREAM_VERSION_NAME, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
|
||||||
ANTI_FEATURES, REQUIREMENTS, ICON_URL,
|
ANTI_FEATURES, REQUIREMENTS, ICON_URL,
|
||||||
FEATURE_GRAPHIC, PROMO_GRAPHIC, TV_BANNER, PHONE_SCREENSHOTS,
|
FEATURE_GRAPHIC, PROMO_GRAPHIC, TV_BANNER, PHONE_SCREENSHOTS,
|
||||||
|
@ -981,6 +981,11 @@ public class AppDetailsRecyclerViewAdapter
|
|||||||
addLinkItemView(contentView, R.string.menu_issues, R.drawable.ic_issues, app.issueTracker);
|
addLinkItemView(contentView, R.string.menu_issues, R.drawable.ic_issues, app.issueTracker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Translation button
|
||||||
|
if (uriIsSetAndCanBeOpened(app.translation)) {
|
||||||
|
addLinkItemView(contentView, R.string.menu_translation, R.drawable.ic_translation, app.translation);
|
||||||
|
}
|
||||||
|
|
||||||
// Changelog button
|
// Changelog button
|
||||||
if (uriIsSetAndCanBeOpened(app.changelog)) {
|
if (uriIsSetAndCanBeOpened(app.changelog)) {
|
||||||
addLinkItemView(contentView, R.string.menu_changelog, R.drawable.ic_changelog, app.changelog);
|
addLinkItemView(contentView, R.string.menu_changelog, R.drawable.ic_changelog, app.changelog);
|
||||||
|
9
app/src/main/res/drawable/ic_translation.xml
Normal file
9
app/src/main/res/drawable/ic_translation.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:fillColor="#666666"
|
||||||
|
android:pathData="M12.87,15.07l-2.54,-2.51 0.03,-0.03c1.74,-1.94 2.98,-4.17 3.71,-6.53L17,6L17,4h-7L10,2L8,2v2L1,4v1.99h11.17C11.5,7.92 10.44,9.75 9,11.35 8.07,10.32 7.3,9.19 6.69,8h-2c0.73,1.63 1.73,3.17 2.98,4.56l-5.09,5.02L4,19l5,-5 3.11,3.11 0.76,-2.04zM18.5,10h-2L12,22h2l1.12,-3h4.75L21,22h2l-4.5,-12zM15.88,17l1.62,-4.33L19.12,17h-3.24z"/>
|
||||||
|
</vector>
|
@ -210,11 +210,18 @@ This often occurs with apps installed via Google Play or other sources, if they
|
|||||||
<string name="menu_ignore_this">Ignore This Update</string>
|
<string name="menu_ignore_this">Ignore This Update</string>
|
||||||
<string name="menu_website">Website</string>
|
<string name="menu_website">Website</string>
|
||||||
<string name="menu_email">E-Mail Author</string>
|
<string name="menu_email">E-Mail Author</string>
|
||||||
|
<!-- The title for the link that points to the issue tracker for this app -->
|
||||||
<string name="menu_issues">Issues</string>
|
<string name="menu_issues">Issues</string>
|
||||||
|
<!-- The title for the link that points to the Changelog document for this app -->
|
||||||
<string name="menu_changelog">Changelog</string>
|
<string name="menu_changelog">Changelog</string>
|
||||||
|
<!-- The title for the link that points to a demo video for this app -->
|
||||||
<string name="menu_video">Video</string>
|
<string name="menu_video">Video</string>
|
||||||
|
<!-- The title for the link that points to the license for this app -->
|
||||||
<string name="menu_license">License: %s</string>
|
<string name="menu_license">License: %s</string>
|
||||||
|
<!-- The title for the link that points to the source code for this app -->
|
||||||
<string name="menu_source">Source Code</string>
|
<string name="menu_source">Source Code</string>
|
||||||
|
<!-- The title for the link that points to the translation service for this app -->
|
||||||
|
<string name="menu_translation">Translation</string>
|
||||||
<string name="menu_upgrade">Update</string>
|
<string name="menu_upgrade">Update</string>
|
||||||
<string name="menu_downgrade">Downgrade</string>
|
<string name="menu_downgrade">Downgrade</string>
|
||||||
<string name="menu_donate">Donate</string>
|
<string name="menu_donate">Donate</string>
|
||||||
|
@ -329,6 +329,7 @@ public class IndexV1UpdaterTest extends FDroidProviderTest {
|
|||||||
"suggestedVersionName",
|
"suggestedVersionName",
|
||||||
"summary",
|
"summary",
|
||||||
"tenInchScreenshots",
|
"tenInchScreenshots",
|
||||||
|
"translation",
|
||||||
"tvBanner",
|
"tvBanner",
|
||||||
"tvScreenshots",
|
"tvScreenshots",
|
||||||
"upstreamVersionCode",
|
"upstreamVersionCode",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user