From 80f64af67dd729792f16999baf1faf386b32e68a Mon Sep 17 00:00:00 2001 From: sandy99405 Date: Wed, 8 Nov 2023 09:28:59 +0530 Subject: [PATCH] [android] Add an option to disable search history Signed-off-by: Bukkapatnam Sandilya Signed-off-by: Roman Tsisyk --- .../organicmaps/search/SearchFragment.java | 15 +++++-- .../app/organicmaps/search/TabAdapter.java | 15 ++++--- .../settings/SettingsPrefsFragment.java | 41 ++++++++++++------- .../java/app/organicmaps/util/Config.java | 12 +++++- .../src/main/res/values/donottranslate.xml | 1 + android/app/src/main/res/xml/prefs_main.xml | 6 +++ 6 files changed, 67 insertions(+), 23 deletions(-) diff --git a/android/app/src/main/java/app/organicmaps/search/SearchFragment.java b/android/app/src/main/java/app/organicmaps/search/SearchFragment.java index 29ad8b14dd..901973530a 100644 --- a/android/app/src/main/java/app/organicmaps/search/SearchFragment.java +++ b/android/app/src/main/java/app/organicmaps/search/SearchFragment.java @@ -39,6 +39,7 @@ import app.organicmaps.widget.SearchToolbarController; import app.organicmaps.util.SharedPropertiesUtils; import app.organicmaps.util.UiUtils; import app.organicmaps.util.Utils; +import app.organicmaps.util.Config; import java.util.ArrayList; import java.util.Arrays; @@ -259,6 +260,12 @@ public class SearchFragment extends BaseMwmFragment mToolbarController = new ToolbarController(view); TabLayout tabLayout = root.findViewById(R.id.tabs); + + if (Config.isSearchHistoryEnabled()) + tabLayout.setVisibility(View.VISIBLE); + else + tabLayout.setVisibility(View.GONE); + final TabAdapter tabAdapter = new TabAdapter(getChildFragmentManager(), pager, tabLayout); mResultsFrame = root.findViewById(R.id.results_frame); @@ -288,7 +295,7 @@ public class SearchFragment extends BaseMwmFragment SearchEngine.INSTANCE.addListener(this); - if (SearchRecents.getSize() == 0) + if (SearchRecents.getSize() == 0 && Config.isSearchHistoryEnabled()) pager.setCurrentItem(TabAdapter.Tab.CATEGORIES.ordinal()); tabAdapter.setTabSelectedListener(tab -> mToolbarController.deactivate()); @@ -383,7 +390,8 @@ public class SearchFragment extends BaseMwmFragment void showSingleResultOnMap(@NonNull SearchResult result, int resultIndex) { final String query = getQuery(); - SearchRecents.add(query, requireContext()); + if (Config.isSearchHistoryEnabled()) + SearchRecents.add(query, requireContext()); SearchEngine.INSTANCE.cancel(); SearchEngine.INSTANCE.setQuery(query); @@ -417,7 +425,8 @@ public class SearchFragment extends BaseMwmFragment SearchEngine.INSTANCE.cancel(); final String query = getQuery(); - SearchRecents.add(query, requireContext()); + if (Config.isSearchHistoryEnabled()) + SearchRecents.add(query, requireContext()); mLastQueryTimestamp = System.nanoTime(); SearchEngine.INSTANCE.searchInteractive( diff --git a/android/app/src/main/java/app/organicmaps/search/TabAdapter.java b/android/app/src/main/java/app/organicmaps/search/TabAdapter.java index 44d7d230a4..0c17a6e78b 100644 --- a/android/app/src/main/java/app/organicmaps/search/TabAdapter.java +++ b/android/app/src/main/java/app/organicmaps/search/TabAdapter.java @@ -2,6 +2,7 @@ package app.organicmaps.search; import android.content.Context; import android.util.SparseArray; +import android.view.View; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; @@ -12,6 +13,7 @@ import androidx.viewpager.widget.ViewPager; import com.google.android.material.tabs.TabLayout; import app.organicmaps.R; import app.organicmaps.util.Graphics; +import app.organicmaps.util.Config; import java.util.ArrayList; import java.util.List; @@ -105,14 +107,17 @@ class TabAdapter extends FragmentPagerAdapter private final List> mClasses = new ArrayList<>(); private final SparseArray mFragments = new SparseArray<>(); private OnTabSelectedListener mTabSelectedListener; - + private TabLayout mTabs; TabAdapter(FragmentManager fragmentManager, ViewPager pager, TabLayout tabs) { super(fragmentManager); - + this.mTabs = tabs; for (Tab tab : Tab.values()) + { + if (tab==tab.HISTORY && !Config.isSearchHistoryEnabled()) + continue; mClasses.add(tab.getFragmentClass()); - + } final List fragments = fragmentManager.getFragments(); if (fragments != null) { @@ -130,8 +135,8 @@ class TabAdapter extends FragmentPagerAdapter mPager = pager; mPager.setAdapter(this); - - attachTo(tabs); + if (mTabs.getVisibility() != View.GONE) + attachTo(tabs); } private void attachTo(TabLayout tabs) diff --git a/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java b/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java index 4e6b155e95..5e9aabacab 100644 --- a/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java +++ b/android/app/src/main/java/app/organicmaps/settings/SettingsPrefsFragment.java @@ -39,6 +39,7 @@ import app.organicmaps.util.ThemeSwitcher; import app.organicmaps.util.UiUtils; import app.organicmaps.util.Utils; import app.organicmaps.util.log.LogsManager; +import app.organicmaps.search.SearchRecents; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.util.Arrays; @@ -272,14 +273,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment initEmulationBadStorage(); initUseMobileDataPrefsCallbacks(); initPowerManagementPrefsCallbacks(); - final boolean playServices = initPlayServicesPrefsCallbacks(); - if (!playServices) - { - // Remove "Tracking" section completely. - final PreferenceCategory tracking = findPreference(getString(R.string.pref_privacy)); - if (tracking != null) - mPreferenceScreen.removePreference(tracking); - } + initPlayServicesPrefsCallbacks(); + initSearchPrivacyPrefsCallbacks(); initScreenSleepEnabledPrefsCallbacks(); initShowOnLockScreenPrefsCallbacks(); } @@ -526,17 +521,14 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment }); } - private boolean initPlayServicesPrefsCallbacks() + private void initPlayServicesPrefsCallbacks() { final Preference pref = findPreference(getString(R.string.pref_play_services)); if (pref == null) - return false; + return; if (!LocationProviderFactory.isGoogleLocationAvailable(requireActivity().getApplicationContext())) - { removePreference(getString(R.string.pref_privacy), pref); - return false; - } else { ((TwoStatePreference) pref).setChecked(Config.useGoogleServices()); @@ -561,10 +553,31 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment return true; } }); - return true; } } + private void initSearchPrivacyPrefsCallbacks() + { + final Preference pref = findPreference(getString(R.string.pref_search_history)); + if (pref == null) + return; + + final boolean isHistoryEnabled = Config.isSearchHistoryEnabled(); + ((TwoStatePreference) pref).setChecked(isHistoryEnabled); + pref.setOnPreferenceChangeListener((preference, newValue) -> { + boolean newVal = (Boolean) newValue; + if (newVal != isHistoryEnabled) + { + Config.setSearchHistoryEnabled(newVal); + if (newVal) + SearchRecents.refresh(); + else + SearchRecents.clear(); + } + return true; + }); + } + private void init3dModePrefsCallbacks() { final TwoStatePreference pref = getPreference(getString(R.string.pref_3d_buildings)); diff --git a/android/app/src/main/java/app/organicmaps/util/Config.java b/android/app/src/main/java/app/organicmaps/util/Config.java index daea71c909..cebfb50df9 100644 --- a/android/app/src/main/java/app/organicmaps/util/Config.java +++ b/android/app/src/main/java/app/organicmaps/util/Config.java @@ -3,7 +3,6 @@ package app.organicmaps.util; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; -import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; @@ -37,6 +36,7 @@ public final class Config private static final String KEY_MISC_SHOW_ON_LOCK_SCREEN = "ShowOnLockScreen"; private static final String KEY_MISC_AGPS_TIMESTAMP = "AGPSTimestamp"; private static final String KEY_DONATE_URL = "DonateUrl"; + private static final String KEY_PREF_SEARCH_HISTORY = "SearchHistoryEnabled"; /** * The total number of app launches. @@ -403,6 +403,16 @@ public final class Config .apply(); } + public static boolean isSearchHistoryEnabled() + { + return getBool(KEY_PREF_SEARCH_HISTORY, true); + } + + public static void setSearchHistoryEnabled(boolean enabled) + { + setBool(KEY_PREF_SEARCH_HISTORY, enabled); + } + private static native boolean nativeHasConfigValue(String name); private static native boolean nativeDeleteConfigValue(String name); private static native boolean nativeGetBoolean(String name, boolean defaultValue); diff --git a/android/app/src/main/res/values/donottranslate.xml b/android/app/src/main/res/values/donottranslate.xml index 45155aff48..f8e9bd009f 100644 --- a/android/app/src/main/res/values/donottranslate.xml +++ b/android/app/src/main/res/values/donottranslate.xml @@ -56,6 +56,7 @@ height limited pref_privacy + pref_search_history NEVER ALWAYS AUTO diff --git a/android/app/src/main/res/xml/prefs_main.xml b/android/app/src/main/res/xml/prefs_main.xml index 44508b1b4e..7e9fa51531 100644 --- a/android/app/src/main/res/xml/prefs_main.xml +++ b/android/app/src/main/res/xml/prefs_main.xml @@ -184,6 +184,12 @@ android:summary="@string/pref_use_google_play" android:defaultValue="true" android:order="1"/> +