add-support-for-prefs-addon.patch 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. From: uazo <uazo@users.noreply.github.com>
  2. Date: Wed, 21 Apr 2021 15:24:04 +0000
  3. Subject: Add support for prefs addon
  4. ---
  5. .../chrome/browser/settings/MainSettings.java | 7 ++++
  6. chrome/android/proguard/main.flags | 7 ++++
  7. .../browser_ui/settings/SettingsUtils.java | 37 +++++++++++++++++++
  8. 3 files changed, 51 insertions(+)
  9. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
  10. --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
  11. +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
  12. @@ -120,6 +120,8 @@ public class MainSettings extends PreferenceFragmentCompat
  13. findPreference(PREF_PRIVACY).setTitle(R.string.prefs_privacy_security);
  14. }
  15. + createBromitePreferences();
  16. +
  17. cachePreferences();
  18. updatePasswordsPreference();
  19. @@ -274,4 +276,9 @@ public class MainSettings extends PreferenceFragmentCompat
  20. }
  21. };
  22. }
  23. +
  24. + private void createBromitePreferences() {
  25. + SettingsUtils.inflatePrefsAddon(this, "main_preferences_addon_",
  26. + R.xml.class.getFields());
  27. + }
  28. }
  29. diff --git a/chrome/android/proguard/main.flags b/chrome/android/proguard/main.flags
  30. --- a/chrome/android/proguard/main.flags
  31. +++ b/chrome/android/proguard/main.flags
  32. @@ -63,3 +63,10 @@
  33. -keep,allowobfuscation public class ** extends org.chromium.chrome.browser.base.SplitCompat*$Impl {
  34. public <init>();
  35. }
  36. +
  37. +# Keep fields name for all R.xml
  38. +# used in SettingsUtils.java
  39. +# components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings
  40. +-keepclassmembers class **.R$xml* {
  41. + public static <fields>;
  42. +}
  43. diff --git a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java
  44. --- a/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java
  45. +++ b/components/browser_ui/settings/android/java/src/org/chromium/components/browser_ui/settings/SettingsUtils.java
  46. @@ -24,6 +24,12 @@ import androidx.preference.PreferenceFragmentCompat;
  47. import org.chromium.base.ApiCompatibilityUtils;
  48. +import org.chromium.base.Log;
  49. +import androidx.preference.PreferenceScreen;
  50. +import androidx.preference.PreferenceManager;
  51. +import android.content.res.Resources;
  52. +import java.lang.reflect.Field;
  53. +
  54. /**
  55. * A helper class for Settings.
  56. */
  57. @@ -126,4 +132,35 @@ public class SettingsUtils {
  58. ImageView imageButton = (ImageView) button;
  59. return imageButton.getDrawable() == parentMenu.getOverflowIcon();
  60. }
  61. +
  62. + public static PreferenceScreen inflatePrefsAddon(PreferenceFragmentCompat preferenceFragment,
  63. + String name,
  64. + Field[] fields) {
  65. + Resources resources = preferenceFragment.getResources();
  66. +
  67. + for(int count=0; count < fields.length; count++) {
  68. + String assetName = fields[count].getName();
  69. + if (assetName.startsWith(name)) {
  70. + try {
  71. + int resId = fields[count].getInt(null);
  72. + return SettingsUtils.inflatePreferencesFromResource(preferenceFragment, resId);
  73. + } catch (IllegalAccessException e) {}
  74. + }
  75. + }
  76. + return null;
  77. + }
  78. +
  79. + public static PreferenceScreen inflatePreferencesFromResource(
  80. + PreferenceFragmentCompat preferenceFragment, @XmlRes int preferencesResId) {
  81. + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
  82. + try {
  83. + PreferenceManager preferenceManager = preferenceFragment.getPreferenceManager();
  84. + final PreferenceScreen xmlRoot = preferenceManager.inflateFromResource(
  85. + preferenceFragment.getContext(),
  86. + preferencesResId, preferenceFragment.getPreferenceScreen());
  87. + return xmlRoot;
  88. + } finally {
  89. + StrictMode.setThreadPolicy(oldPolicy);
  90. + }
  91. + }
  92. }
  93. --
  94. 2.17.1