Wikinaut has uploaded a new change for review. https://gerrit.wikimedia.org/r/248075
Change subject: Incognito mode: (search and article) history on/off ...................................................................... Incognito mode: (search and article) history on/off Added a single preference option to enable/disable both the search and article history. Added a new Prefs section "Privacy settings" for this and similar privacy settings. When disabling, both the search and article history are automatically deleted. Info messages are shown on search and article history if the histories are disabled in the settings. Bug: T96546 Bug: T115776 Follow up to I6697eca28e6683101100361cf3dd95d4860d3154 Change-Id: I92ec34150a37e37de18770c52abf8fd266512ab8 --- A app/src/main/java/org/wikipedia/history/DeleteAllHistoryTask.java M app/src/main/java/org/wikipedia/history/HistoryFragment.java M app/src/main/java/org/wikipedia/history/SaveHistoryTask.java M app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java M app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java M app/src/main/java/org/wikipedia/settings/Prefs.java M app/src/main/java/org/wikipedia/settings/SettingsFragment.java M app/src/main/res/layout/fragment_search_recent.xml M app/src/main/res/values/preference_keys.xml M app/src/main/res/values/strings.xml M app/src/main/res/xml/preferences.xml 11 files changed, 119 insertions(+), 19 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/75/248075/1 diff --git a/app/src/main/java/org/wikipedia/history/DeleteAllHistoryTask.java b/app/src/main/java/org/wikipedia/history/DeleteAllHistoryTask.java new file mode 100644 index 0000000..8625b56 --- /dev/null +++ b/app/src/main/java/org/wikipedia/history/DeleteAllHistoryTask.java @@ -0,0 +1,22 @@ +package org.wikipedia.history; + +import android.content.Context; + +import org.wikipedia.WikipediaApp; +import org.wikipedia.concurrency.SaneAsyncTask; + +/** AsyncTask to clear out article history entries. */ +public class DeleteAllHistoryTask extends SaneAsyncTask<Void> { + private final WikipediaApp app; + + public DeleteAllHistoryTask(Context context) { + super(SINGLE_THREAD); + app = (WikipediaApp) context.getApplicationContext(); + } + + @Override + public Void performTask() throws Throwable { + app.getPersister(HistoryEntry.class).deleteAll(); + return null; + } +} diff --git a/app/src/main/java/org/wikipedia/history/HistoryFragment.java b/app/src/main/java/org/wikipedia/history/HistoryFragment.java index 5eecf48..18db815 100644 --- a/app/src/main/java/org/wikipedia/history/HistoryFragment.java +++ b/app/src/main/java/org/wikipedia/history/HistoryFragment.java @@ -32,6 +32,7 @@ import org.wikipedia.WikipediaApp; import org.wikipedia.page.PageActivity; import org.wikipedia.pageimages.PageImage; +import org.wikipedia.settings.Prefs; import java.text.DateFormat; import java.util.Date; @@ -73,6 +74,16 @@ app.adjustDrawableToTheme(((ImageView) rootView.findViewById(R.id.history_empty_image)).getDrawable()); return rootView; + } + + @Override + public void onResume() { + super.onResume(); + if (Prefs.isRememberHistoryEnabled()) { + historyEmptyMessage.setText(R.string.history_empty_message); + } else { + historyEmptyMessage.setText(R.string.remember_history_is_disabled_message); + } } @Override @@ -325,7 +336,7 @@ @Override public void onClick(DialogInterface dialog, int which) { // Clear history! - app.getPersister(HistoryEntry.class).deleteAll(); + new DeleteAllHistoryTask(app).execute(); entryFilter.setVisibility(View.GONE); } }); diff --git a/app/src/main/java/org/wikipedia/history/SaveHistoryTask.java b/app/src/main/java/org/wikipedia/history/SaveHistoryTask.java index 492e94d..f5c277c 100644 --- a/app/src/main/java/org/wikipedia/history/SaveHistoryTask.java +++ b/app/src/main/java/org/wikipedia/history/SaveHistoryTask.java @@ -3,6 +3,7 @@ import org.wikipedia.WikipediaApp; import org.wikipedia.concurrency.SaneAsyncTask; import org.wikipedia.data.ContentPersister; +import org.wikipedia.settings.Prefs; import android.util.Log; @@ -21,14 +22,16 @@ @Override public Void performTask() throws Throwable { - // Instead of "upserting" the history entry, we'll delete and re-persist it. - // This is because upserting will update all previous instances of the history entry, - // and won't collapse them into a single entry at the top. Deleting it will ensure - // that all previous instances will be deleted, and then only the most recent instance - // will be placed at the top. - final ContentPersister persister = app.getPersister(HistoryEntry.class); - persister.delete(entry, HistoryEntry.PERSISTENCE_HELPER.SELECTION_KEYS); - persister.persist(entry); + if (Prefs.isRememberHistoryEnabled()) { + // Instead of "upserting" the history entry, we'll delete and re-persist it. + // This is because upserting will update all previous instances of the history entry, + // and won't collapse them into a single entry at the top. Deleting it will ensure + // that all previous instances will be deleted, and then only the most recent instance + // will be placed at the top. + final ContentPersister persister = app.getPersister(HistoryEntry.class); + persister.delete(entry, HistoryEntry.PERSISTENCE_HELPER.SELECTION_KEYS); + persister.persist(entry); + } return null; } diff --git a/app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java b/app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java index 5b07374..5651dbd 100644 --- a/app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java +++ b/app/src/main/java/org/wikipedia/search/RecentSearchesFragment.java @@ -1,8 +1,11 @@ package org.wikipedia.search; import org.wikipedia.R; +import org.wikipedia.settings.Prefs; + import android.content.Context; import android.database.Cursor; +import android.graphics.Typeface; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; @@ -24,6 +27,7 @@ private SearchArticlesFragment searchFragment; private View container; private ListView recentSearchesList; + private TextView recentSearchesHeader; private RecentSearchesAdapter adapter; public RecentSearchesFragment() { @@ -35,9 +39,22 @@ searchFragment = (SearchArticlesFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.search_fragment); this.container = rootView.findViewById(R.id.recent_searches_container); recentSearchesList = (ListView) rootView.findViewById(R.id.recent_searches_list); + recentSearchesHeader = (TextView) rootView.findViewById(R.id.recent_searches_header); return rootView; } + @Override + public void onResume() { + super.onResume(); + if (Prefs.isRememberHistoryEnabled()) { + recentSearchesHeader.setText(R.string.search_recent_header); + recentSearchesHeader.setTypeface(null, Typeface.BOLD); + } else { + recentSearchesHeader.setText(R.string.remember_search_history_is_disabled_message); + recentSearchesHeader.setTypeface(null, Typeface.NORMAL); + } + } + public void show() { container.setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java b/app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java index d08097a..7bf1d54 100644 --- a/app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java +++ b/app/src/main/java/org/wikipedia/search/SearchArticlesFragment.java @@ -11,6 +11,7 @@ import org.wikipedia.history.HistoryEntry; import org.wikipedia.page.PageActivity; import org.wikipedia.settings.LanguagePreferenceDialog; +import org.wikipedia.settings.Prefs; import com.squareup.otto.Subscribe; @@ -412,7 +413,7 @@ } private void addRecentSearch(String title) { - if (isValidQuery(title)) { + if (isValidQuery(title) && Prefs.isRememberHistoryEnabled()) { new SaveRecentSearchTask(new RecentSearch(title)).execute(); } } diff --git a/app/src/main/java/org/wikipedia/settings/Prefs.java b/app/src/main/java/org/wikipedia/settings/Prefs.java index 0b5dd29..9a4314e 100644 --- a/app/src/main/java/org/wikipedia/settings/Prefs.java +++ b/app/src/main/java/org/wikipedia/settings/Prefs.java @@ -99,6 +99,10 @@ return getBoolean(R.string.preference_key_auto_upload_crash_reports, true); } + public static boolean isRememberHistoryEnabled() { + return getBoolean(R.string.preference_key_remember_history, true); + } + public static boolean isShowDeveloperSettingsEnabled() { return getBoolean(R.string.preference_key_show_developer_settings, WikipediaApp.getInstance().isDevRelease()); diff --git a/app/src/main/java/org/wikipedia/settings/SettingsFragment.java b/app/src/main/java/org/wikipedia/settings/SettingsFragment.java index 449b881..ada5944 100644 --- a/app/src/main/java/org/wikipedia/settings/SettingsFragment.java +++ b/app/src/main/java/org/wikipedia/settings/SettingsFragment.java @@ -1,13 +1,21 @@ package org.wikipedia.settings; import android.os.Bundle; +import android.preference.Preference; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import org.wikipedia.R; +import org.wikipedia.WikipediaApp; +import org.wikipedia.history.DeleteAllHistoryTask; +import org.wikipedia.search.DeleteAllRecentSearchesTask; + public class SettingsFragment extends PreferenceLoaderFragment { + + private WikipediaApp app; + public static SettingsFragment newInstance() { return new SettingsFragment(); } @@ -22,6 +30,7 @@ public void loadPreferences() { SettingsPreferenceLoader preferenceLoader = new SettingsPreferenceLoader(this); preferenceLoader.loadPreferences(); + setupRememberHistoryButton(findPreference(getString(R.string.preference_key_remember_history))); } @Override @@ -64,4 +73,23 @@ private void invalidateOptionsMenu() { getFragmentManager().invalidateOptionsMenu(); } + + private void setupRememberHistoryButton(Preference button) { + button.setOnPreferenceChangeListener(rememberHistoryChangeListener()); + } + + private Preference.OnPreferenceChangeListener rememberHistoryChangeListener() { + return new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (!(Boolean) newValue) { + app = (WikipediaApp) getActivity().getApplicationContext(); + new DeleteAllHistoryTask(app).execute(); + new DeleteAllRecentSearchesTask(app).execute(); + } + return true; + } + }; + } + } diff --git a/app/src/main/res/layout/fragment_search_recent.xml b/app/src/main/res/layout/fragment_search_recent.xml index d697eec..13dfad3 100644 --- a/app/src/main/res/layout/fragment_search_recent.xml +++ b/app/src/main/res/layout/fragment_search_recent.xml @@ -10,6 +10,7 @@ android:layout_height="wrap_content"> <TextView + android:id="@+id/recent_searches_header" android:layout_width="wrap_content" android:layout_height="48dp" android:layout_gravity="start" diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 0c74af6..5c95fe4 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -38,4 +38,5 @@ <string name="preference_key_remote_log">remoteLog</string> <!-- Note: this value _must_ match net.hockeyapp.android.CrashManager.ALWAYS_SEND_KEY. --> <string name="preference_key_auto_upload_crash_reports">always_send_crash_reports</string> + <string name="preference_key_remember_history">remember_article_history</string> </resources> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 42191ca..4b339c0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -110,6 +110,7 @@ <string name="saved_pages_empty_message">Saved pages are pretty awesome. Think of them as bookmarks that you can read even when you are offline.</string> <string name="history_empty_title">No recent pages here!</string> <string name="history_empty_message">You probably deleted all of them. Next time you go to a page you can get back to it from here.</string> + <string name="remember_history_is_disabled_message">The history is disabled in the settings, where it could be enabled.</string> <string name="delete_selected_history">Delete</string> <string name="wp_stylized"><![CDATA[<big>W</big>IKIPEDI<big>A</big>]]></string> <string name="create_account_username_hint">Username</string> @@ -135,6 +136,9 @@ <string name="create_account_button">Create account</string> <string name="preferences_general_heading">General</string> <string name="wikipedia_app_faq">Wikipedia App FAQ</string> + <string name="preferences_privacy_settings_heading">Privacy settings</string> + <string name="preference_title_remember_history">Remember history</string> + <string name="preference_summary_remember_history">Activate or deactivate and delete your article and search history.</string> <string name="zero_charged_verbiage">Wikipedia Zero is off</string> <string name="zero_charged_verbiage_extended">Loading other articles may incur data charges.</string> <string name="zero_search_hint">Search Wikipedia Zero</string> @@ -213,6 +217,7 @@ <string name="page_similar_titles">Similar pages</string> <string name="search_did_you_mean">Did you mean \"%s\"?</string> <string name="search_recent_header">Recent searches:</string> + <string name="remember_search_history_is_disabled_message">The search history is disabled in the settings, where it could be enabled.</string> <string name="button_clear_all_recent_searches">Clear recent searches</string> <string name="clear_recent_searches_confirm">Are you sure you want to clear your search history?</string> <string name="error_browser_not_found">Could not open web page (no browser app found).</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 1ca51bb..bafdbfa 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -18,6 +18,8 @@ android:title="@string/preference_title_show_link_previews" android:summary="@string/preference_summary_show_link_previews" /> + </PreferenceCategory> + <PreferenceCategory android:title="@string/preferences_privacy_settings_heading"> <org.wikipedia.settings.CheckBoxPreferenceMultiLine android:key="@string/preference_key_eventlogging_opt_in" android:defaultValue="true" @@ -30,22 +32,27 @@ android:title="@string/preference_title_auto_upload_crash_reports" android:summary="@string/preference_summary_auto_upload_crash_reports" /> + <org.wikipedia.settings.CheckBoxPreferenceMultiLine + android:key="@string/preference_key_remember_history" + android:defaultValue="true" + android:title="@string/preference_title_remember_history" + android:summary="@string/preference_summary_remember_history" + /> </PreferenceCategory> <PreferenceCategory android:title="@string/zero_wikipedia_zero_heading"> <org.wikipedia.settings.CheckBoxPreferenceMultiLine - android:key="zero_warn_when_leaving" - android:title="@string/zero_warn_when_leaving" - android:defaultValue="true" - android:summary="@string/zero_warn_when_leaving_summary" - /> + android:key="zero_warn_when_leaving" + android:title="@string/zero_warn_when_leaving" + android:defaultValue="true" + android:summary="@string/zero_warn_when_leaving_summary" + /> <org.wikipedia.settings.PreferenceMultiLine - android:title="@string/zero_webpage_title" - android:summary="@string/zero_webpage_url"> + android:title="@string/zero_webpage_title" + android:summary="@string/zero_webpage_url"> <intent android:action="android.intent.action.VIEW" android:data="@string/zero_webpage_url" - /> + /> </org.wikipedia.settings.PreferenceMultiLine> - </PreferenceCategory> <PreferenceCategory android:title="@string/about_activity_title"> <org.wikipedia.settings.PreferenceMultiLine -- To view, visit https://gerrit.wikimedia.org/r/248075 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I92ec34150a37e37de18770c52abf8fd266512ab8 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Wikinaut <m...@wikinaut.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits