From 18f881738895b3651e030c00bd18ae5d81cfa93f Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Tue, 2 May 2017 16:22:36 +1000 Subject: [PATCH] Force repo update after changing language. This zeros out the etag in the fdroid_repo table and then asks the update service to perform an update. The end result is that changing the language will result in the metadata being shown in that language. Note: This doesn't immediately work due to pending changes around Locale.setDefault() and the change in case from Summary to summary in the server metadata. --- .../java/org/fdroid/fdroid/data/RepoProvider.java | 12 ++++++++++++ .../fdroid/views/fragments/PreferencesFragment.java | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java b/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java index ac0dd0198..ba00a103c 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java +++ b/app/src/main/java/org/fdroid/fdroid/data/RepoProvider.java @@ -286,6 +286,18 @@ public class RepoProvider extends FDroidProvider { return count; } + + /** + * Helper method to ensure that next time the user asks for a repository update, we will + * fetch the metadata and update regardless of whether the metadata has changed or not. + * This is useful for when we change languages, because we need to ask the user to fetch + * the metadata again, so that we can extract the correctly-localized metadata. + */ + public static void clearEtags(Context context) { + ContentValues values = new ContentValues(1); + values.put(Cols.LAST_ETAG, (String) null); + context.getContentResolver().update(getContentUri(), values, null, null); + } } private static final String PROVIDER_NAME = "RepoProvider"; diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java index f15843f50..c2514683a 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java @@ -22,6 +22,7 @@ import org.fdroid.fdroid.Languages; import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.R; import org.fdroid.fdroid.UpdateService; +import org.fdroid.fdroid.data.RepoProvider; import org.fdroid.fdroid.installer.InstallHistoryService; import org.fdroid.fdroid.installer.PrivilegedInstaller; @@ -158,6 +159,10 @@ public class PreferencesFragment extends PreferenceFragment if (changing) { Activity activity = getActivity(); Languages.setLanguage(activity, Preferences.get().getLanguage(), false); + + RepoProvider.Helper.clearEtags(getContext()); + UpdateService.updateNow(getContext()); + Languages.forceChangeLanguage(activity); } break;