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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. From: uazo <uazo@users.noreply.github.com>
  2. Date: Tue, 15 Jun 2021 12:41:22 +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 | 47 +++++++++++++++++++
  8. 3 files changed, 61 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. @@ -112,6 +112,8 @@ public class MainSettings extends PreferenceFragmentCompat
  13. private void createPreferences() {
  14. SettingsUtils.addPreferencesFromResource(this, R.xml.main_preferences);
  15. + createBromitePreferences();
  16. +
  17. cachePreferences();
  18. updatePasswordsPreference();
  19. @@ -257,4 +259,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. @@ -130,4 +136,45 @@ 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. + int resId = 0;
  71. + try {
  72. + resId = fields[count].getInt(null);
  73. + } catch (IllegalAccessException e) {
  74. + Log.e("settingsutils", "Error getting resource id", e);
  75. + }
  76. +
  77. + if (resId != 0) {
  78. + try {
  79. + return SettingsUtils.inflatePreferencesFromResource(preferenceFragment, resId);
  80. + } catch (Throwable e) {
  81. + Log.e("settingsutils", "Error inflating from resource", e);
  82. + }
  83. + }
  84. + }
  85. + }
  86. + return null;
  87. + }
  88. +
  89. + public static PreferenceScreen inflatePreferencesFromResource(
  90. + PreferenceFragmentCompat preferenceFragment, @XmlRes int preferencesResId) {
  91. + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
  92. + try {
  93. + PreferenceManager preferenceManager = preferenceFragment.getPreferenceManager();
  94. + final PreferenceScreen xmlRoot = preferenceManager.inflateFromResource(
  95. + preferenceFragment.getContext(),
  96. + preferencesResId, preferenceFragment.getPreferenceScreen());
  97. + return xmlRoot;
  98. + } finally {
  99. + StrictMode.setThreadPolicy(oldPolicy);
  100. + }
  101. + }
  102. }
  103. --
  104. 2.17.1