jenkins-bot has submitted this change and it was merged.
Change subject: Remove Saved Pages.
......................................................................
Remove Saved Pages.
To be merged when the UI is fully integrated with the DAO(s).
This patch leaves the Saved Pages database table intact, so it's
independent of the patch that will implement the migration path from saved
pages to reading lists.
Change-Id: I2921d3dd935fa7babb9262c5da154d8e7cb38d36
---
M app/src/main/java/org/wikipedia/analytics/FunnelManager.java
D app/src/main/java/org/wikipedia/analytics/SavedPagesFunnel.java
M app/src/main/java/org/wikipedia/editing/EditHandler.java
M app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
M app/src/main/java/org/wikipedia/page/NavDrawerHelper.java
M app/src/main/java/org/wikipedia/page/PageActivity.java
M app/src/main/java/org/wikipedia/page/PageActivityLongPressHandler.java
M app/src/main/java/org/wikipedia/page/PageFragment.java
M app/src/main/java/org/wikipedia/page/PageInfoDialog.java
M app/src/main/java/org/wikipedia/page/PageLongPressHandler.java
M app/src/main/java/org/wikipedia/page/leadimages/ArticleMenuBarView.java
M app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
M app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
D app/src/main/java/org/wikipedia/savedpages/DeleteAllSavedPagesTask.java
D app/src/main/java/org/wikipedia/savedpages/DeleteSavedPageTask.java
D app/src/main/java/org/wikipedia/savedpages/DownloadImageTask.java
D app/src/main/java/org/wikipedia/savedpages/RefreshPagesHandler.java
D app/src/main/java/org/wikipedia/savedpages/SaveOtherPageCallback.java
D app/src/main/java/org/wikipedia/savedpages/SavePageTask.java
D app/src/main/java/org/wikipedia/savedpages/SavedPageCheckTask.java
D app/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
M app/src/main/res/menu/menu_link_preview.xml
M app/src/main/res/menu/menu_nav_drawer.xml
M app/src/main/res/menu/menu_page_long_press.xml
D app/src/main/res/menu/menu_saved_pages.xml
D app/src/main/res/menu/menu_saved_pages_context.xml
M app/src/main/res/values/strings_no_translate.xml
27 files changed, 56 insertions(+), 1,230 deletions(-)
Approvals:
Mholloway: Looks good to me, but someone else must approve
Niedzielski: Looks good to me, approved
jenkins-bot: Verified
diff --git a/app/src/main/java/org/wikipedia/analytics/FunnelManager.java
b/app/src/main/java/org/wikipedia/analytics/FunnelManager.java
index 012ed88..3917b41 100644
--- a/app/src/main/java/org/wikipedia/analytics/FunnelManager.java
+++ b/app/src/main/java/org/wikipedia/analytics/FunnelManager.java
@@ -1,6 +1,5 @@
package org.wikipedia.analytics;
-import org.wikipedia.Site;
import org.wikipedia.page.PageTitle;
import org.wikipedia.WikipediaApp;
@@ -12,7 +11,6 @@
public class FunnelManager {
private final WikipediaApp app;
private final Hashtable<PageTitle, EditFunnel> editFunnels = new
Hashtable<>();
- private final Hashtable<Site, SavedPagesFunnel> savedPageFunnels = new
Hashtable<>();
public FunnelManager(WikipediaApp app) {
this.app = app;
@@ -24,13 +22,5 @@
}
return editFunnels.get(title);
- }
-
- public SavedPagesFunnel getSavedPagesFunnel(Site site) {
- if (!savedPageFunnels.contains(site)) {
- savedPageFunnels.put(site, new SavedPagesFunnel(app, site));
- }
-
- return savedPageFunnels.get(site);
}
}
diff --git a/app/src/main/java/org/wikipedia/analytics/SavedPagesFunnel.java
b/app/src/main/java/org/wikipedia/analytics/SavedPagesFunnel.java
deleted file mode 100644
index 1bf3def..0000000
--- a/app/src/main/java/org/wikipedia/analytics/SavedPagesFunnel.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.wikipedia.analytics;
-
-import android.support.annotation.NonNull;
-
-import org.json.JSONObject;
-import org.wikipedia.Site;
-import org.wikipedia.WikipediaApp;
-
-public class SavedPagesFunnel extends Funnel {
- private static final String SCHEMA_NAME = "MobileWikiAppSavedPages";
- private static final int REV_ID = 10375480;
-
- public SavedPagesFunnel(WikipediaApp app, Site site) {
- super(app, SCHEMA_NAME, REV_ID, site);
- }
-
- public void logSaveNew() {
- log(
- "action", "savenew"
- );
- }
-
- public void logUpdate() {
- log(
- "action", "update"
- );
- }
-
- public void logDelete() {
- log(
- "action", "delete"
- );
- }
-
- public void logEditAttempt() {
- log(
- "action", "editattempt"
- );
- }
-
- public void logEditRefresh() {
- log(
- "action", "editrefresh"
- );
- }
-
- public void logEditAfterRefresh() {
- log(
- "action", "editafterrefresh"
- );
- }
-
- @Override protected void preprocessSessionToken(@NonNull JSONObject
eventData) { }
-}
diff --git a/app/src/main/java/org/wikipedia/editing/EditHandler.java
b/app/src/main/java/org/wikipedia/editing/EditHandler.java
index 9282265..4cdd539 100644
--- a/app/src/main/java/org/wikipedia/editing/EditHandler.java
+++ b/app/src/main/java/org/wikipedia/editing/EditHandler.java
@@ -8,7 +8,6 @@
import org.wikipedia.R;
import org.wikipedia.WikipediaApp;
import org.wikipedia.analytics.ProtectedEditAttemptFunnel;
-import org.wikipedia.analytics.SavedPagesFunnel;
import org.wikipedia.bridge.CommunicationBridge;
import org.wikipedia.history.HistoryEntry;
import org.wikipedia.page.Page;
@@ -60,29 +59,20 @@
funnel.log(currentPage.getPageProperties().getEditProtectionStatus());
}
- /**
- * Variable indicating whether the current page was refreshed (by clicking
on edit
- * when it was a saved page and choosing to refresh. Used for accurate
event logging
- */
- private boolean wasRefreshed = false;
@Override
public void onMessage(String messageType, JSONObject messagePayload) {
if (!fragment.isAdded()) {
return;
}
if (messageType.equals("editSectionClicked")) {
- final SavedPagesFunnel savedPagesFunnel =
WikipediaApp.getInstance().getFunnelManager().getSavedPagesFunnel(currentPage.getTitle().getSite());
if (fragment.getHistoryEntry().getSource() ==
HistoryEntry.SOURCE_SAVED_PAGE) {
- savedPagesFunnel.logEditAttempt();
new AlertDialog.Builder(fragment.getActivity())
.setCancelable(false)
.setMessage(R.string.edit_saved_page_refresh)
.setPositiveButton(android.R.string.yes, new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface
dialogInterface, int i) {
- fragment.refreshPage(true);
- savedPagesFunnel.logEditRefresh();
- wasRefreshed = true;
+ fragment.refreshPage();
}
})
.setNegativeButton(android.R.string.no, new
DialogInterface.OnClickListener() {
@@ -99,9 +89,6 @@
return;
}
startEditingSection(messagePayload.optInt("sectionID"), null);
- if (wasRefreshed) {
- savedPagesFunnel.logEditAfterRefresh();
- }
}
}
}
diff --git a/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
b/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
index 8b6f585..33dc1e1 100644
--- a/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
+++ b/app/src/main/java/org/wikipedia/page/JsonPageLoadStrategy.java
@@ -164,7 +164,6 @@
loadOnWebViewReady(cachePreference);
} else {
fragment.updatePageInfo(null);
- fragment.setPageSaved(false);
leadImagesHandler.updateNavigate(null);
// kick off an event to the WebView that will cause it to clear
its contents,
@@ -318,8 +317,6 @@
@Override
public void run() {
displayNonLeadSectionForSavedPage(1);
- fragment.setPageSaved(true);
-
setState(STATE_COMPLETE_FETCH);
}
});
@@ -443,70 +440,53 @@
L10nUtil.setupDirectionality(model.getTitle().getSite().languageCode(),
Locale.getDefault().getLanguage(),
bridge);
- // TODO: Fix possible race condition when navigating from history
fragment
- if (model.getCurEntry().getSource() == HistoryEntry.SOURCE_SAVED_PAGE)
{
- state = STATE_NO_FETCH;
- loadSavedPage(new ErrorCallback() {
- @Override
- public void call(Throwable error) {
- /*
- If anything bad happens during loading of a saved page,
then simply bounce it
- back to the online version of the page, and re-save the
page contents locally when it's done.
- */
- L.d("Error loading saved page: ", error);
- error.printStackTrace();
- fragment.refreshPage(true);
- }
- });
- } else {
- switch (cachePreference) {
- case PREFERRED:
- loadFromCache(new ErrorCallback() {
- @Override
- public void call(Throwable cacheError) {
- loadFromNetwork(new ErrorCallback() {
- @Override
- public void call(final Throwable networkError)
{
- loadSavedPage(new ErrorCallback() {
- @Override
- public void call(Throwable savedError)
{
-
fragment.onPageLoadError(networkError);
- }
- });
- }
- });
- }
- });
- break;
- case FALLBACK:
- loadFromNetwork(new ErrorCallback() {
- @Override
- public void call(final Throwable networkError) {
- loadFromCache(new ErrorCallback() {
- @Override
- public void call(Throwable cacheError) {
- loadSavedPage(new ErrorCallback() {
- @Override
- public void call(Throwable savedError)
{
-
fragment.onPageLoadError(networkError);
- }
- });
- }
- });
- }
- });
- break;
- case NONE:
- default:
- // This is a refresh, don't clear contents in this case
- loadFromNetwork(new ErrorCallback() {
- @Override
- public void call(Throwable networkError) {
- fragment.onPageLoadError(networkError);
- }
- });
- break;
- }
+ switch (cachePreference) {
+ case PREFERRED:
+ loadFromCache(new ErrorCallback() {
+ @Override
+ public void call(Throwable cacheError) {
+ loadFromNetwork(new ErrorCallback() {
+ @Override
+ public void call(final Throwable networkError) {
+ loadSavedPage(new ErrorCallback() {
+ @Override
+ public void call(Throwable savedError) {
+ fragment.onPageLoadError(networkError);
+ }
+ });
+ }
+ });
+ }
+ });
+ break;
+ case FALLBACK:
+ loadFromNetwork(new ErrorCallback() {
+ @Override
+ public void call(final Throwable networkError) {
+ loadFromCache(new ErrorCallback() {
+ @Override
+ public void call(Throwable cacheError) {
+ loadSavedPage(new ErrorCallback() {
+ @Override
+ public void call(Throwable savedError) {
+ fragment.onPageLoadError(networkError);
+ }
+ });
+ }
+ });
+ }
+ });
+ break;
+ case NONE:
+ default:
+ // This is a refresh, don't clear contents in this case
+ loadFromNetwork(new ErrorCallback() {
+ @Override
+ public void call(Throwable networkError) {
+ fragment.onPageLoadError(networkError);
+ }
+ });
+ break;
}
}
diff --git a/app/src/main/java/org/wikipedia/page/NavDrawerHelper.java
b/app/src/main/java/org/wikipedia/page/NavDrawerHelper.java
index 65da9fc..c2fd99d 100644
--- a/app/src/main/java/org/wikipedia/page/NavDrawerHelper.java
+++ b/app/src/main/java/org/wikipedia/page/NavDrawerHelper.java
@@ -24,10 +24,8 @@
import org.wikipedia.nearby.NearbyFragment;
import org.wikipedia.random.RandomHandler;
import org.wikipedia.readinglist.ReadingListsFragment;
-import org.wikipedia.savedpages.SavedPagesFragment;
import org.wikipedia.settings.SettingsActivity;
import org.wikipedia.util.FeedbackUtil;
-import org.wikipedia.util.ReleaseUtil;
import org.wikipedia.util.UriUtil;
public class NavDrawerHelper {
@@ -65,11 +63,6 @@
updateWikipediaZeroStatus();
accountToggle = false;
updateMenuGroupToggle();
-
- // TODO: resolve when Saved Pages is removed
- if (ReleaseUtil.isProdRelease()) {
-
activity.getNavMenu().findItem(R.id.nav_item_reading_lists).setVisible(false);
- }
}
public NavigationView.OnNavigationItemSelectedListener getNewListener() {
@@ -84,10 +77,6 @@
case R.id.nav_item_history:
activity.pushFragment(new HistoryFragment());
funnel.logHistory();
- break;
- case R.id.nav_item_saved_pages:
- activity.pushFragment(new SavedPagesFragment());
- funnel.logSavedPages();
break;
case R.id.nav_item_reading_lists:
activity.pushFragment(new ReadingListsFragment());
@@ -204,8 +193,6 @@
return R.id.nav_item_today;
} else if (fragment == HistoryFragment.class) {
return R.id.nav_item_history;
- } else if (fragment == SavedPagesFragment.class) {
- return R.id.nav_item_saved_pages;
} else if (fragment == ReadingListsFragment.class) {
return R.id.nav_item_reading_lists;
} else if (fragment == NearbyFragment.class) {
diff --git a/app/src/main/java/org/wikipedia/page/PageActivity.java
b/app/src/main/java/org/wikipedia/page/PageActivity.java
index 2f8e2f7..b6aa08f 100644
--- a/app/src/main/java/org/wikipedia/page/PageActivity.java
+++ b/app/src/main/java/org/wikipedia/page/PageActivity.java
@@ -763,12 +763,6 @@
finish();
}
- /*package*/ void showPageSavedMessage(@NonNull String title, boolean
success) {
- FeedbackUtil.showMessage(this, getString(success
- ? R.string.snackbar_saved_page_format
- : R.string.snackbar_saved_page_missing_images, title));
- }
-
private void loadMainPageIfNoTabs() {
loadMainPage(false, TabPosition.CURRENT_TAB, true);
}
diff --git
a/app/src/main/java/org/wikipedia/page/PageActivityLongPressHandler.java
b/app/src/main/java/org/wikipedia/page/PageActivityLongPressHandler.java
index 805f4ba..cee804d 100644
--- a/app/src/main/java/org/wikipedia/page/PageActivityLongPressHandler.java
+++ b/app/src/main/java/org/wikipedia/page/PageActivityLongPressHandler.java
@@ -3,11 +3,7 @@
import android.support.annotation.NonNull;
import org.wikipedia.R;
-import org.wikipedia.WikipediaApp;
import org.wikipedia.history.HistoryEntry;
-import org.wikipedia.savedpages.SaveOtherPageCallback;
-import org.wikipedia.server.PageService;
-import org.wikipedia.server.PageServiceFactory;
import org.wikipedia.readinglist.AddToReadingListDialog;
import org.wikipedia.util.ClipboardUtil;
import org.wikipedia.util.FeedbackUtil;
@@ -43,11 +39,6 @@
}
@Override
- public void onSavePage(PageTitle title) {
- saveOtherPage(title);
- }
-
- @Override
public void onAddToList(PageTitle title,
AddToReadingListDialog.InvokeSource source) {
activity.showAddToListDialog(title, source);
}
@@ -58,27 +49,5 @@
private void showCopySuccessMessage() {
FeedbackUtil.showMessage(activity, R.string.address_copied);
- }
-
- private void saveOtherPage(@NonNull final PageTitle title) {
- getApiService(title).pageCombo(title.getPrefixedText(),
- !WikipediaApp.getInstance().isImageDownloadEnabled(),
- new SaveOtherPageCallback(title) {
- @Override
- protected void onComplete() {
- if (!activity.isDestroyed()) {
-
activity.showPageSavedMessage(title.getDisplayText(), true);
- }
- }
-
- @Override
- protected void onError() {
- FeedbackUtil.showMessage(activity,
R.string.error_network_error_try_again);
- }
- });
- }
-
- private PageService getApiService(PageTitle title) {
- return PageServiceFactory.create(title.getSite());
}
}
diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.java
b/app/src/main/java/org/wikipedia/page/PageFragment.java
index c98a78c..9da7e9f 100755
--- a/app/src/main/java/org/wikipedia/page/PageFragment.java
+++ b/app/src/main/java/org/wikipedia/page/PageFragment.java
@@ -42,7 +42,6 @@
import org.wikipedia.analytics.GalleryFunnel;
import org.wikipedia.analytics.LinkPreviewFunnel;
import org.wikipedia.analytics.PageScrollFunnel;
-import org.wikipedia.analytics.SavedPagesFunnel;
import org.wikipedia.analytics.TabFunnel;
import org.wikipedia.bridge.CommunicationBridge;
import org.wikipedia.bridge.StyleBundle;
@@ -59,14 +58,11 @@
import org.wikipedia.readinglist.AddToReadingListDialog;
import org.wikipedia.savedpages.ImageUrlMap;
import org.wikipedia.savedpages.LoadSavedPageUrlMapTask;
-import org.wikipedia.savedpages.SavePageTask;
-import org.wikipedia.savedpages.SavedPageCheckTask;
import org.wikipedia.search.SearchBarHideHandler;
import org.wikipedia.settings.Prefs;
import org.wikipedia.tooltip.ToolTipUtil;
import org.wikipedia.util.DimenUtil;
import org.wikipedia.util.FeedbackUtil;
-import org.wikipedia.util.ReleaseUtil;
import org.wikipedia.util.ShareUtil;
import org.wikipedia.util.ThrowableUtil;
import org.wikipedia.util.log.L;
@@ -92,9 +88,7 @@
public static final int TOC_ACTION_HIDE = 1;
public static final int TOC_ACTION_TOGGLE = 2;
- private boolean pageSaved;
private boolean pageRefreshed;
- private boolean savedPageCheckComplete;
private boolean errorState = false;
private static final int TOC_BUTTON_HIDE_DELAY = 2000;
@@ -118,18 +112,6 @@
@Nullable
private PageScrollFunnel pageScrollFunnel;
- /**
- * Whether to save the full page content as soon as it's loaded.
- * Used in the following cases:
- * - Stored page content is corrupted
- * - Page bookmarks are imported from the old app.
- * In the above cases, loading of the saved page will "fail", and will
- * automatically bounce to the online version of the page. Once the online
page
- * loads successfully, the content will be saved, thereby reconstructing
the
- * stored version of the page.
- */
- private boolean saveOnComplete = false;
-
private ArticleHeaderView articleHeaderView;
private LeadImagesHandler leadImagesHandler;
private SearchBarHideHandler searchBarHideHandler;
@@ -148,8 +130,6 @@
private TabsProvider tabsProvider;
private WikipediaApp app;
-
- private SavedPagesFunnel savedPagesFunnel;
@NonNull
private final SwipeRefreshLayout.OnRefreshListener pageRefreshListener =
new SwipeRefreshLayout.OnRefreshListener() {
@@ -201,10 +181,6 @@
public HistoryEntry getHistoryEntry() {
return model.getCurEntry();
- }
-
- public void setSavedPageCheckComplete(boolean complete) {
- savedPageCheckComplete = complete;
}
public EditHandler getEditHandler() {
@@ -562,15 +538,10 @@
model.setTitle(title);
model.setTitleOriginal(title);
model.setCurEntry(entry);
- savedPagesFunnel =
app.getFunnelManager().getSavedPagesFunnel(title.getSite());
getPageActivity().updateProgressBar(true, true, 0);
this.pageRefreshed = pageRefreshed;
- if (!pageRefreshed) {
- savedPageCheckComplete = false;
- checkIfPageIsSaved();
- }
closePageScrollFunnel();
pageLoadStrategy.load(pushBackStack, cachePreference, stagedScrollY);
@@ -595,11 +566,6 @@
*/
public void updateFontSize() {
webView.getSettings().setDefaultFontSize((int)
app.getFontSize(getActivity().getWindow()));
- }
-
- public void setPageSaved(boolean saved) {
- pageSaved = saved;
- leadImagesHandler.updateBookmark(pageSaved);
}
public void updateBookmark() {
@@ -647,9 +613,6 @@
MenuItem contentIssues = menu.findItem(R.id.menu_page_content_issues);
MenuItem similarTitles = menu.findItem(R.id.menu_page_similar_titles);
MenuItem themeChooserItem =
menu.findItem(R.id.menu_page_font_and_theme);
-
- // TODO: resolve when Reading Lists are promoted to production
- addToListItem.setVisible(ReleaseUtil.isPreProdRelease());
if (otherLangItem == null) {
// On API <= 19, it looks like onPrepareOptionsMenu can be called
before the menu
@@ -800,11 +763,7 @@
editHandler.setPage(model.getPage());
initPageScrollFunnel();
- if (saveOnComplete) {
- saveOnComplete = false;
- savedPagesFunnel.logUpdate();
- savePage();
- }
+ // TODO: update this title in the db to be queued for saving by the
service.
checkAndShowSelectTextOnboarding();
@@ -842,27 +801,6 @@
}
}
- public void savePage() {
- if (model.getPage() == null) {
- return;
- }
-
- FeedbackUtil.showMessage(getActivity(), R.string.snackbar_saving_page);
- new SavePageTask(app, model.getTitle(), model.getPage()) {
- @Override
- public void onFinish(Boolean success) {
- if (!isAdded()) {
- Log.d("PageFragment", "Detached from activity, no
snackbar.");
- return;
- }
- setPageSaved(true);
-
getPageActivity().showPageSavedMessage(model.getTitle().getDisplayText(),
success);
- }
- }.execute();
- // Not technically a refresh but this will prevent needless immediate
refreshing
- pageRefreshed = true;
- }
-
/**
* Read URL mappings from the saved page specific file
*/
@@ -889,17 +827,13 @@
back to the online version of the page, and re-save the page
contents locally when it's done.
*/
L.d(e);
- refreshPage(true);
+ refreshPage();
}
}.execute();
}
public void refreshPage() {
- refreshPage(pageSaved);
- }
-
- public void refreshPage(boolean saveOnComplete) {
- if (pageLoadStrategy.isLoading() || !savedPageCheckComplete) {
+ if (pageLoadStrategy.isLoading()) {
refreshView.setRefreshing(false);
return;
}
@@ -907,10 +841,6 @@
errorView.setVisibility(View.GONE);
errorState = false;
- this.saveOnComplete = saveOnComplete;
- if (saveOnComplete) {
- FeedbackUtil.showMessage(getActivity(),
R.string.snackbar_refresh_saved_page);
- }
model.setCurEntry(new HistoryEntry(model.getTitle(),
HistoryEntry.SOURCE_HISTORY));
loadPage(model.getTitle(), model.getCurEntry(),
PageLoadStrategy.Cache.NONE, false, true);
}
@@ -1122,18 +1052,6 @@
this.pageInfo = pageInfo;
if (getActivity() != null) {
getActivity().supportInvalidateOptionsMenu();
- }
- }
-
- private void checkIfPageIsSaved() {
- if (getActivity() != null && getTitle() != null) {
- new SavedPageCheckTask(getTitle(), app) {
- @Override
- public void onFinish(Boolean exists) {
- setPageSaved(exists);
- setSavedPageCheckComplete(true);
- }
- }.execute();
}
}
diff --git a/app/src/main/java/org/wikipedia/page/PageInfoDialog.java
b/app/src/main/java/org/wikipedia/page/PageInfoDialog.java
index f87b52c..520850f 100644
--- a/app/src/main/java/org/wikipedia/page/PageInfoDialog.java
+++ b/app/src/main/java/org/wikipedia/page/PageInfoDialog.java
@@ -155,12 +155,6 @@
}
@Override
- public void onSavePage(PageTitle title) {
- super.onSavePage(title);
- dismiss();
- }
-
- @Override
public void onAddToList(PageTitle title,
AddToReadingListDialog.InvokeSource source) {
super.onAddToList(title, source);
}
diff --git a/app/src/main/java/org/wikipedia/page/PageLongPressHandler.java
b/app/src/main/java/org/wikipedia/page/PageLongPressHandler.java
index 791d4f7..98b2918 100644
--- a/app/src/main/java/org/wikipedia/page/PageLongPressHandler.java
+++ b/app/src/main/java/org/wikipedia/page/PageLongPressHandler.java
@@ -3,7 +3,6 @@
import org.wikipedia.R;
import org.wikipedia.Site;
import org.wikipedia.history.HistoryEntry;
-import org.wikipedia.util.ReleaseUtil;
import org.wikipedia.readinglist.AddToReadingListDialog;
import android.content.Context;
@@ -66,11 +65,6 @@
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setOnMenuItemClickListener(this);
}
-
- // TODO: resolve when Saved Pages is removed.
- if (ReleaseUtil.isProdRelease()) {
-
menu.findItem(R.id.menu_long_press_add_to_list).setVisible(false);
- }
}
}
@@ -89,9 +83,6 @@
case R.id.menu_long_press_share_page:
contextMenuListener.onShareLink(title);
return true;
- case R.id.menu_long_press_save_page:
- contextMenuListener.onSavePage(title);
- return true;
case R.id.menu_long_press_add_to_list:
contextMenuListener.onAddToList(title,
AddToReadingListDialog.InvokeSource.CONTEXT_MENU);
@@ -106,7 +97,6 @@
void onOpenInNewTab(PageTitle title, HistoryEntry entry);
void onCopyLink(PageTitle title);
void onShareLink(PageTitle title);
- void onSavePage(PageTitle title);
void onAddToList(PageTitle title, AddToReadingListDialog.InvokeSource
source);
}
diff --git
a/app/src/main/java/org/wikipedia/page/leadimages/ArticleMenuBarView.java
b/app/src/main/java/org/wikipedia/page/leadimages/ArticleMenuBarView.java
index fd1dc72..9224d8f 100644
--- a/app/src/main/java/org/wikipedia/page/leadimages/ArticleMenuBarView.java
+++ b/app/src/main/java/org/wikipedia/page/leadimages/ArticleMenuBarView.java
@@ -15,7 +15,6 @@
import org.wikipedia.R;
import org.wikipedia.util.FeedbackUtil;
-import org.wikipedia.util.ReleaseUtil;
import org.wikipedia.util.StringUtil;
import org.wikipedia.util.log.L;
@@ -25,13 +24,13 @@
public class ArticleMenuBarView extends LinearLayout {
public interface Callback {
- void onBookmarkClick(boolean bookmarkSaved);
+ void onBookmarkClick();
void onShareClick();
void onNavigateClick();
}
public static class DefaultCallback implements Callback {
- @Override public void onBookmarkClick(boolean bookmarkSaved) { }
+ @Override public void onBookmarkClick() { }
@Override public void onShareClick() { }
@Override public void onNavigateClick() { }
}
@@ -94,11 +93,7 @@
public void onClick(View view) {
switch(view.getId()) {
case R.id.view_article_menu_bar_bookmark:
- // TODO: resolve when Saved Pages is removed
- if (ReleaseUtil.isProdRelease()) {
- view.setActivated(!view.isActivated());
- }
- callback.onBookmarkClick(view.isActivated());
+ callback.onBookmarkClick();
break;
case R.id.view_article_menu_bar_share:
callback.onShareClick();
diff --git
a/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
b/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
index f520c93..ad6ed42 100755
--- a/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
+++ b/app/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
@@ -29,12 +29,7 @@
import org.wikipedia.readinglist.AddToReadingListDialog;
import org.wikipedia.readinglist.ReadingList;
import org.wikipedia.readinglist.page.database.ReadingListDaoProxy;
-import org.wikipedia.savedpages.DeleteSavedPageTask;
-import org.wikipedia.savedpages.SavePageTask;
-import org.wikipedia.savedpages.SavedPage;
import org.wikipedia.util.DimenUtil;
-import org.wikipedia.util.FeedbackUtil;
-import org.wikipedia.util.ReleaseUtil;
import org.wikipedia.util.UriUtil;
import org.wikipedia.views.ObservableWebView;
@@ -100,10 +95,6 @@
return WikipediaApp.getInstance().isImageDownloadEnabled()
&& displayHeightDp >= MIN_SCREEN_HEIGHT_DP
&& !TextUtils.isEmpty(getLeadImageUrl());
- }
-
- public void updateBookmark(boolean bookmarkSaved) {
- articleHeaderView.updateBookmark(bookmarkSaved);
}
public void updateBookmark() {
@@ -356,20 +347,11 @@
private class MenuBarCallback extends ArticleMenuBarView.DefaultCallback {
@Override
- public void onBookmarkClick(boolean bookmarkSaved) {
+ public void onBookmarkClick() {
if (getPage() == null) {
return;
}
- // TODO: resolve when Saved Pages is removed
- if (ReleaseUtil.isProdRelease()) {
- if (bookmarkSaved) {
- saveBookmark();
- } else {
- deleteBookmark();
- }
- } else {
-
parentFragment.addToReadingList(AddToReadingListDialog.InvokeSource.BOOKMARK_BUTTON);
- }
+
parentFragment.addToReadingList(AddToReadingListDialog.InvokeSource.BOOKMARK_BUTTON);
}
@Override
@@ -380,38 +362,6 @@
@Override
public void onNavigateClick() {
openGeoIntent();
- }
-
- private void saveBookmark() {
-
WikipediaApp.getInstance().getFunnelManager().getSavedPagesFunnel(getTitle().getSite()).logSaveNew();
- FeedbackUtil.showMessage(getActivity(),
R.string.snackbar_saving_page);
- new SavePageTask(WikipediaApp.getInstance(), getTitle(),
getPage()) {
- @Override
- public void onFinish(Boolean success) {
- if (parentFragment.isAdded() && getTitle() != null) {
- parentFragment.setPageSaved(success);
- FeedbackUtil.showMessage(getActivity(),
getActivity().getString(success
- ? R.string.snackbar_saved_page_format
- : R.string.snackbar_saved_page_missing_images,
getTitle().getDisplayText()));
- }
- }
- }.execute();
- }
-
- private void deleteBookmark() {
- new DeleteSavedPageTask(getActivity(), new SavedPage(getTitle())) {
- @Override
- public void onFinish(Boolean success) {
-
WikipediaApp.getInstance().getFunnelManager().getSavedPagesFunnel(getTitle().getSite()).logDelete();
- if (parentFragment.isAdded()) {
- parentFragment.setPageSaved(!success);
- if (success) {
- FeedbackUtil.showMessage(getActivity(),
- R.string.snackbar_saved_page_deleted);
- }
- }
- }
- }.execute();
}
private void openGeoIntent() {
diff --git
a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
index f707910..14b81d5 100755
--- a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
+++ b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java
@@ -20,7 +20,6 @@
import org.wikipedia.server.PageSummary;
import org.wikipedia.util.ApiUtil;
import org.wikipedia.util.FeedbackUtil;
-import org.wikipedia.util.ReleaseUtil;
import org.wikipedia.util.UriUtil;
import org.wikipedia.views.ViewUtil;
@@ -163,10 +162,6 @@
public void onClick(View v) {
PopupMenu popupMenu = new PopupMenu(getActivity(),
overflowButton);
popupMenu.inflate(R.menu.menu_link_preview);
-
- // TODO: resolve when Reading Lists are promoted to production
-
popupMenu.getMenu().findItem(R.id.menu_link_preview_add_to_list).setVisible(ReleaseUtil.isPreProdRelease());
-
popupMenu.setOnMenuItemClickListener(menuListener);
popupMenu.show();
}
@@ -324,10 +319,6 @@
case R.id.menu_link_preview_open_in_new_tab:
overflowMenuHandler.onOpenInNewTab(pageTitle,
new HistoryEntry(pageTitle, entrySource));
- dismiss();
- return true;
- case R.id.menu_link_preview_save_page:
- overflowMenuHandler.onSavePage(pageTitle);
dismiss();
return true;
case R.id.menu_link_preview_add_to_list:
diff --git
a/app/src/main/java/org/wikipedia/savedpages/DeleteAllSavedPagesTask.java
b/app/src/main/java/org/wikipedia/savedpages/DeleteAllSavedPagesTask.java
deleted file mode 100644
index 47804db..0000000
--- a/app/src/main/java/org/wikipedia/savedpages/DeleteAllSavedPagesTask.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.wikipedia.savedpages;
-
-import android.content.Context;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.concurrency.SaneAsyncTask;
-import org.wikipedia.util.FileUtil;
-
-import java.io.File;
-
-import static org.wikipedia.util.FileUtil.delete;
-
-public class DeleteAllSavedPagesTask extends SaneAsyncTask<Void> {
- private final WikipediaApp app;
-
- public DeleteAllSavedPagesTask(Context context) {
- app = (WikipediaApp) context.getApplicationContext();
- }
-
- @Override
- public Void performTask() throws Throwable {
- // Clear Saved Pages!
- app.getDatabaseClient(SavedPage.class).deleteAll();
- // Purge all the contents in storage.
- delete(new File(FileUtil.savedPageBaseDir()), true);
- // TODO: don't we need to funnel around, too? ;)
- return null;
- }
-}
diff --git
a/app/src/main/java/org/wikipedia/savedpages/DeleteSavedPageTask.java
b/app/src/main/java/org/wikipedia/savedpages/DeleteSavedPageTask.java
deleted file mode 100644
index 5ccd623..0000000
--- a/app/src/main/java/org/wikipedia/savedpages/DeleteSavedPageTask.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.wikipedia.savedpages;
-
-import android.content.Context;
-
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.concurrency.SaneAsyncTask;
-import org.wikipedia.database.DatabaseClient;
-import org.wikipedia.database.contract.SavedPageContract;
-
-public class DeleteSavedPageTask extends SaneAsyncTask<Boolean> {
- private final WikipediaApp app;
- private final SavedPage savedPage;
-
- public DeleteSavedPageTask(Context context, SavedPage savedPage) {
- app = (WikipediaApp) context.getApplicationContext();
- this.savedPage = savedPage;
- }
-
- @Override
- public Boolean performTask() throws Throwable {
- savedPage.deleteFromFileSystem();
- DatabaseClient<SavedPage> client =
app.getDatabaseClient(SavedPage.class);
- client.delete(savedPage, SavedPageContract.Page.SELECTION);
-
WikipediaApp.getInstance().getFunnelManager().getSavedPagesFunnel(savedPage.getTitle().getSite()).logDelete();
- return true;
- }
-}
diff --git a/app/src/main/java/org/wikipedia/savedpages/DownloadImageTask.java
b/app/src/main/java/org/wikipedia/savedpages/DownloadImageTask.java
deleted file mode 100644
index 7c4c3a7..0000000
--- a/app/src/main/java/org/wikipedia/savedpages/DownloadImageTask.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.wikipedia.savedpages;
-
-import android.util.Log;
-import com.github.kevinsawicki.http.HttpRequest;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.concurrency.SaneAsyncTask;
-import org.wikipedia.util.UriUtil;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import static org.wikipedia.util.FileUtil.copyStreams;
-
-/** */
-public class DownloadImageTask extends SaneAsyncTask<Boolean> {
- private static final String TAG = "DownloadImageTask";
-
- private final WikipediaApp app;
- private final String imageUrl;
- private final File file;
-
- public DownloadImageTask(WikipediaApp app, String imageUrl, File file) {
- this.app = app;
- this.imageUrl = UriUtil.resolveProtocolRelativeUrl(imageUrl);
- this.file = file;
- }
-
- @Override
- public Boolean performTask() throws Throwable {
- try {
- return downloadOne(imageUrl, file);
- } catch (IOException e) {
- Log.e(TAG, "could not write image to " + file.getAbsolutePath());
- return false;
- }
- }
-
- private boolean downloadOne(String url, File file) throws IOException {
- if (!url.startsWith("http")) {
- Log.e(TAG, "ignoring non-HTTP URL " + url);
- return true;
- }
- HttpRequest request =
HttpRequest.get(url).userAgent(app.getUserAgent());
- if (request.ok()) {
- writeFile(request.stream(), file);
- Log.d(TAG, "downloaded image " + url + " to " +
file.getAbsolutePath());
- request.stream().close();
- return true;
- } else {
- Log.e(TAG, "could not download image " + url + " to " +
file.getAbsolutePath());
- request.stream().close();
- return false;
- }
- }
-
- private void writeFile(InputStream inputStream, File file) throws
IOException {
- FileOutputStream outputStream = new FileOutputStream(file);
- try {
- copyStreams(inputStream, outputStream);
- } finally {
- outputStream.close();
- }
- }
-}
diff --git
a/app/src/main/java/org/wikipedia/savedpages/RefreshPagesHandler.java
b/app/src/main/java/org/wikipedia/savedpages/RefreshPagesHandler.java
deleted file mode 100644
index 7f1bac6..0000000
--- a/app/src/main/java/org/wikipedia/savedpages/RefreshPagesHandler.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package org.wikipedia.savedpages;
-
-import org.wikipedia.R;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.page.PageTitle;
-import org.wikipedia.server.PageService;
-import org.wikipedia.server.PageServiceFactory;
-import org.wikipedia.util.log.L;
-
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.support.annotation.NonNull;
-import android.support.v7.app.AlertDialog;
-
-import java.util.List;
-
-/**
- * Handler for refreshing a list of Saved Pages
- */
-public class RefreshPagesHandler {
- /**
- * Variable set to true if the refresh in progress has been cancelled
- */
- private boolean isRefreshCancelled = false;
- /**
- * Variable used to track number of saved pages that have been completed
so far
- */
- private int savedPagesCompleted = 0;
- private final List<SavedPage> savedPages;
- private final Context context;
- private ProgressDialog progressDialog;
-
- public RefreshPagesHandler(Context context, List<SavedPage> savedPages) {
- this.savedPages = savedPages;
- this.context = context;
-
- progressDialog = new ProgressDialog(context);
- progressDialog.setIndeterminate(false);
- progressDialog.setMax(savedPages.size());
- progressDialog.setProgress(0);
-
progressDialog.setMessage(context.getResources().getString(R.string.saved_pages_progress_title));
- progressDialog.setCanceledOnTouchOutside(false);
- progressDialog.setOnCancelListener(new
DialogInterface.OnCancelListener() {
- @Override
- public void onCancel(DialogInterface dialogInterface) {
- isRefreshCancelled = true;
- }
- });
- }
-
- public void onStop() {
- if (progressDialog.isShowing()) {
- isRefreshCancelled = true;
- progressDialog.dismiss();
- }
- }
-
- /**
- * Start refreshing the saved pages.
- *
- * This function returns after starting the refresh and does not block
- */
- public void refresh() {
- // Reset flags
- isRefreshCancelled = false;
- savedPagesCompleted = 0;
- progressDialog.show();
- for (int i = 0; i < savedPages.size() && !isRefreshCancelled; i++) {
- final SavedPage savedPage = savedPages.get(i);
- L.d("refreshing start: " + savedPage.getTitle().getDisplayText());
- refreshOneSavedPage(savedPage.getTitle());
- }
- }
-
- private void refreshOneSavedPage(@NonNull final PageTitle title) {
- getApiService(title).pageCombo(title.getPrefixedText(),
- !WikipediaApp.getInstance().isImageDownloadEnabled(),
- new SaveOtherPageCallback(title) {
- @Override
- protected void onComplete() {
- if (!progressDialog.isShowing()) {
- isRefreshCancelled = true;
- // no longer attached to activity!
- return;
- }
- savedPagesCompleted++;
- progressDialog.setProgress(savedPagesCompleted);
- L.d("Count is " + savedPagesCompleted + " of " +
savedPages.size());
- if (savedPagesCompleted == savedPages.size()) {
- progressDialog.dismiss();
- }
- }
-
- @Override
- protected void onError() {
- isRefreshCancelled = true;
- if (!progressDialog.isShowing()) {
- // no longer attached to activity!
- return;
- }
- progressDialog.dismiss();
- getErrorDialog().show();
- }
- });
- }
-
- private PageService getApiService(PageTitle title) {
- return PageServiceFactory.create(title.getSite());
- }
-
- private AlertDialog errorDialog;
-
- /**
- * Returns a persistent dialog we can use to show errors.
- * @return A properly setup AlertDialog with handlers for retry and cancel.
- */
- private AlertDialog getErrorDialog() {
- if (errorDialog == null) {
- errorDialog = new AlertDialog.Builder(context)
-
.setPositiveButton(R.string.saved_pages_update_all_error_retry, new
DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface,
int i) {
- dialogInterface.dismiss();
- refresh();
- }
- })
- .setNegativeButton(android.R.string.cancel, new
DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface,
int i) {
- dialogInterface.dismiss();
- }
- })
- .setMessage(R.string.saved_pages_update_all_error_message)
- .show();
- }
- return errorDialog;
- }
-}
diff --git
a/app/src/main/java/org/wikipedia/savedpages/SaveOtherPageCallback.java
b/app/src/main/java/org/wikipedia/savedpages/SaveOtherPageCallback.java
deleted file mode 100644
index 41b68dc..0000000
--- a/app/src/main/java/org/wikipedia/savedpages/SaveOtherPageCallback.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.wikipedia.savedpages;
-
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.page.Page;
-import org.wikipedia.page.PageTitle;
-import org.wikipedia.server.PageCombo;
-import org.wikipedia.util.log.L;
-
-/**
- * Common code for saving a page which is not the current page.
- * Useful for refreshing a saved page, or for saving a page from a link,
search result, disambig
- * entry or similar.
- */
-public abstract class SaveOtherPageCallback implements PageCombo.Callback {
- private final PageTitle title;
-
- public SaveOtherPageCallback(PageTitle title) {
- this.title = title;
- }
-
- @Override
- public void success(PageCombo pageCombo) {
- if (pageCombo.hasError()) {
- onError();
- return;
- }
-
- final Page page = pageCombo.toPage(title);
- new SavePageTask(WikipediaApp.getInstance(), page.getTitle(), page) {
- @Override
- public void onFinish(Boolean result) {
- L.d("Downloaded page " + title.getDisplayText());
- onComplete();
- }
- }.execute();
- }
-
- @Override
- public void failure(Throwable throwable) {
- L.e("Download page error: " + throwable);
- onError();
- }
-
- protected abstract void onComplete();
-
- protected abstract void onError();
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/wikipedia/savedpages/SavePageTask.java
b/app/src/main/java/org/wikipedia/savedpages/SavePageTask.java
deleted file mode 100644
index b86bfff..0000000
--- a/app/src/main/java/org/wikipedia/savedpages/SavePageTask.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.wikipedia.savedpages;
-
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.concurrency.SaneAsyncTask;
-import org.wikipedia.database.DatabaseClient;
-import org.wikipedia.database.contract.SavedPageContract;
-import org.wikipedia.page.Page;
-import org.wikipedia.page.PageTitle;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-
-import static org.wikipedia.util.FileUtil.getSavedPageDirFor;
-
-/** Actual work to save a page for offline reading. */
-public class SavePageTask extends SaneAsyncTask<Boolean> {
- private final WikipediaApp app;
- private final PageTitle title;
- private final Page page;
-
- private CountDownLatch imagesDownloadedLatch;
-
- public SavePageTask(WikipediaApp app, PageTitle title, Page page) {
- this.app = app;
- this.title = title;
- this.page = page;
- }
-
- @Override
- public Boolean performTask() throws Throwable {
- SavedPage savedPage = new SavedPage(title);
- savedPage.writeToFileSystem(page);
- DatabaseClient<SavedPage> client =
app.getDatabaseClient(SavedPage.class);
- client.upsert(savedPage, SavedPageContract.Page.SELECTION);
-
- final ImageUrlMap imageUrlMap = new
ImageUrlMap.Builder(getSavedPageDirFor(title)).extractUrls(page).build();
- final int numImagesAttempts = imageUrlMap.size();
-
- parallelDownload(imageUrlMap);
-
- savedPage.writeUrlMap(imageUrlMap.toJSON());
- return numImagesAttempts == imageUrlMap.size();
- }
-
- /**
- * Fans out image download to multiple threads so this is faster.
- * Borrows from SHA ab2676f4732f186696ce37d02fefa3e6aee13042.
- *
- * @param imageUrlMap a Map with entries {source URL, file path} of images
to be downloaded
- * @throws InterruptedException
- */
- private void parallelDownload(final ImageUrlMap imageUrlMap) throws
InterruptedException {
- imagesDownloadedLatch = new CountDownLatch(imageUrlMap.size());
- List<DownloadImageTask> tasks = new ArrayList<>();
- // instantiate the tasks first, then execute them all at once.
- // (so that removing URLs in onCatch doesn't mess with the iterator)
- for (Map.Entry<String, String> entry : imageUrlMap.entrySet()) {
- final String url = entry.getKey();
- final File file = new File(entry.getValue());
- tasks.add(new DownloadImageTask(app, url, file) {
- @Override
- public void onFinish(Boolean result) {
- imagesDownloadedLatch.countDown();
- }
-
- @Override
- public void onCatch(Throwable caught) {
- // TODO: Add retries
- // An image failed to download, so exclude it from our URL
Map
- imageUrlMap.remove(url);
- imagesDownloadedLatch.countDown();
- }
- });
- }
- for (DownloadImageTask task : tasks) {
- task.execute();
- }
- imagesDownloadedLatch.await();
- }
-}
diff --git a/app/src/main/java/org/wikipedia/savedpages/SavedPageCheckTask.java
b/app/src/main/java/org/wikipedia/savedpages/SavedPageCheckTask.java
deleted file mode 100644
index a632372..0000000
--- a/app/src/main/java/org/wikipedia/savedpages/SavedPageCheckTask.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.wikipedia.savedpages;
-
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.concurrency.SaneAsyncTask;
-import org.wikipedia.page.PageTitle;
-
-import android.util.Log;
-
-public class SavedPageCheckTask extends SaneAsyncTask<Boolean> {
- private final PageTitle title;
- private final WikipediaApp app;
-
- public SavedPageCheckTask(PageTitle title, WikipediaApp app) {
- this.title = title;
- this.app = app;
- }
-
- @Override
- public Boolean performTask() throws Throwable {
- return SavedPage.DATABASE_TABLE.savedPageExists(app, title);
- }
-
- @Override
- public void onCatch(Throwable caught) {
- Log.w("SavedPageCheckTask", "Caught " + caught.getMessage(), caught);
- }
-}
diff --git a/app/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
b/app/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
deleted file mode 100644
index f11651f..0000000
--- a/app/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
+++ /dev/null
@@ -1,404 +0,0 @@
-package org.wikipedia.savedpages;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.LoaderManager;
-import android.support.v4.content.CursorLoader;
-import android.support.v4.content.Loader;
-import android.support.v4.widget.CursorAdapter;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.view.ActionMode;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.util.SparseBooleanArray;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.AdapterView;
-import android.widget.EditText;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import com.facebook.drawee.view.SimpleDraweeView;
-
-import org.wikipedia.BackPressedHandler;
-import org.wikipedia.R;
-import org.wikipedia.WikipediaApp;
-import org.wikipedia.database.contract.PageImageHistoryContract;
-import org.wikipedia.database.contract.SavedPageContract;
-import org.wikipedia.history.HistoryEntry;
-import org.wikipedia.page.PageActivity;
-import org.wikipedia.util.FeedbackUtil;
-import org.wikipedia.views.ViewUtil;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.wikipedia.Constants.SAVED_PAGES_FRAGMENT_LOADER_ID;
-import static org.wikipedia.util.DimenUtil.getContentTopOffsetPx;
-
-public class SavedPagesFragment extends Fragment
- implements LoaderManager.LoaderCallbacks<Cursor>, BackPressedHandler {
- private ListView savedPagesList;
- private View savedPagesEmptyContainer;
- private TextView savedPagesEmptyTitle;
- private TextView savedPagesEmptyMessage;
- private SavedPagesAdapter adapter;
- private RefreshPagesHandler refreshHandler;
- private EditText entryFilter;
- private ImageView savedPagesEmptyImage;
-
- private WikipediaApp app;
-
- private ActionMode actionMode;
- private SavedPageSearchTextWatcher textWatcher = new
SavedPageSearchTextWatcher();
- private SavedPageItemClickListener itemClickListener = new
SavedPageItemClickListener();
- private SavedPageItemLongClickListener itemLongClickListener = new
SavedPageItemLongClickListener();
-
- private boolean firstRun = true;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setRetainInstance(true);
- app = WikipediaApp.getInstance();
- adapter = new SavedPagesAdapter(getActivity(), null, true);
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.fragment_saved_pages,
container, false);
- rootView.setPadding(0, getContentTopOffsetPx(getActivity()), 0, 0);
-
- savedPagesList = (ListView)
rootView.findViewById(R.id.saved_pages_list);
- savedPagesEmptyContainer =
rootView.findViewById(R.id.saved_pages_empty_container);
- savedPagesEmptyTitle = (TextView)
rootView.findViewById(R.id.saved_pages_empty_title);
- savedPagesEmptyMessage = (TextView)
rootView.findViewById(R.id.saved_pages_empty_message);
- entryFilter = (EditText)
rootView.findViewById(R.id.saved_pages_search_list);
- savedPagesEmptyImage = (ImageView)
rootView.findViewById(R.id.saved_pages_empty_image);
-
- entryFilter.addTextChangedListener(textWatcher);
- savedPagesList.setAdapter(adapter);
- savedPagesList.setOnItemClickListener(itemClickListener);
- savedPagesList.setOnItemLongClickListener(itemLongClickListener);
- return rootView;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- setHasOptionsMenu(true);
- savedPagesList.setEmptyView(savedPagesEmptyContainer);
-
getActivity().getSupportLoaderManager().initLoader(SAVED_PAGES_FRAGMENT_LOADER_ID,
null, this);
-
getActivity().getSupportLoaderManager().restartLoader(SAVED_PAGES_FRAGMENT_LOADER_ID,
null, this);
- }
-
- @Override
- public void onDestroyView() {
-
getActivity().getSupportLoaderManager().destroyLoader(SAVED_PAGES_FRAGMENT_LOADER_ID);
- entryFilter.removeTextChangedListener(textWatcher);
- savedPagesList.setAdapter(null);
- savedPagesList.setOnItemClickListener(null);
- savedPagesList.setOnItemLongClickListener(null);
- super.onDestroyView();
- }
-
- @Override
- public boolean onBackPressed() {
- if (actionMode != null) {
- actionMode.finish();
- return true;
- }
- return false;
- }
-
- @Override
- public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
- String titleCol =
SavedPageContract.PageWithImage.TITLE.qualifiedName();
- String selection = null;
- String[] selectionArgs = null;
- savedPagesEmptyContainer.setVisibility(View.GONE);
- String searchStr = entryFilter.getText().toString();
- if (searchStr.length() != 0) {
- searchStr = searchStr.replace("\\", "\\\\").replace("%",
"\\%").replace("_", "\\_");
- selection = "UPPER(" + titleCol + ") LIKE UPPER(?) ESCAPE '\\'";
- selectionArgs = new String[]{"%" + searchStr + "%"};
- }
-
- Uri uri = SavedPageContract.PageWithImage.URI;
- final String[] projection = null;
- String order = SavedPageContract.PageWithImage.ORDER_ALPHABETICAL;
- return new CursorLoader(getContext(), uri, projection, selection,
selectionArgs, order);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
- if (!isAdded() || cursor == null) {
- return;
- }
-
- // Hide search bar if no saved pages exist, but not when a search
turns up no results
- if (firstRun && cursor.getCount() == 0) {
- entryFilter.setVisibility(View.GONE);
- }
- firstRun = false;
-
- adapter.swapCursor(cursor);
- getActivity().supportInvalidateOptionsMenu();
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> cursorLoader) {
- adapter.changeCursor(null);
- }
-
- private class SavedPagesAdapter extends CursorAdapter {
- SavedPagesAdapter(Context context, Cursor c, boolean autoRequery) {
- super(context, c, autoRequery);
- }
-
- @Override
- public View newView(Context context, Cursor cursor, ViewGroup
viewGroup) {
- View view =
getActivity().getLayoutInflater().inflate(R.layout.item_page_list_entry,
viewGroup, false);
- view.setBackgroundResource(R.drawable.selectable_item_background);
- return view;
- }
-
- @Override
- public void bindView(View view, Context context, Cursor cursor) {
- TextView title = (TextView)
view.findViewById(R.id.page_list_item_title);
- SavedPage entry = SavedPage.DATABASE_TABLE.fromCursor(cursor);
- title.setText(entry.getTitle().getDisplayText());
- view.setTag(entry);
- ViewUtil.loadImageUrlInto((SimpleDraweeView)
view.findViewById(R.id.page_list_item_image),
- PageImageHistoryContract.Image.IMAGE_NAME.val(cursor));
- }
- }
-
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- if (!isAdded() || ((PageActivity)getActivity()).isSearching()) {
- return;
- }
- inflater.inflate(R.menu.menu_saved_pages, menu);
- }
-
- @Override
- public void onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
- if (!isAdded() || ((PageActivity)getActivity()).isSearching()) {
- return;
- }
-
- // Only enable and show the buttons in the options menu if there are
saved pages in the list
- boolean enabled = savedPagesList.getCount() > 0;
- for (int id : Arrays.asList(R.id.menu_clear_all_saved_pages,
R.id.menu_refresh_all_saved_pages)) {
- menu.findItem(id).setEnabled(enabled).setVisible(enabled);
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_refresh_all_saved_pages:
- promptToRefreshAll();
- return true;
- case R.id.menu_clear_all_saved_pages:
- promptToDeleteAll();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
- private void promptToRefreshAll() {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setMessage(R.string.dialog_prompt_refresh_all_saved_pages);
- builder.setPositiveButton(R.string.yes, new
DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- refreshAll();
- }
- });
- builder.setNegativeButton(R.string.no, null);
- builder.create().show();
- }
-
- private void promptToDeleteAll() {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setMessage(R.string.dialog_title_clear_saved_pages);
- builder.setPositiveButton(R.string.yes, new
DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- new DeleteAllSavedPagesTask(getActivity()) {
- @Override
- public void onFinish(Void v) {
- if (!isAdded()) {
- return;
- }
- entryFilter.setVisibility(View.GONE);
- FeedbackUtil.showMessage(getActivity(),
- R.string.snackbar_saved_page_deleted);
- }
- }.execute();
- }
- });
- builder.setNegativeButton(R.string.no, null);
- builder.create().show();
- }
-
- private void refreshSelected() {
- SparseBooleanArray checkedItems =
savedPagesList.getCheckedItemPositions();
- List<SavedPage> savedPages = new ArrayList<>();
- for (int i = 0; i < checkedItems.size(); i++) {
- if (checkedItems.valueAt(i)) {
- SavedPage page = SavedPage.DATABASE_TABLE.fromCursor((Cursor)
adapter.getItem(checkedItems.keyAt(i)));
- savedPages.add(page);
- }
- }
- refreshHandler = new RefreshPagesHandler(getActivity(), savedPages);
- refreshHandler.refresh();
- }
-
- private void refreshAll() {
- List<SavedPage> savedPages = new ArrayList<>();
- for (int i = 0; i < adapter.getCount(); i++) {
- SavedPage page = SavedPage.DATABASE_TABLE.fromCursor((Cursor)
adapter.getItem(i));
- savedPages.add(page);
- }
- refreshHandler = new RefreshPagesHandler(getActivity(), savedPages);
- refreshHandler.refresh();
- }
-
- @Override
- public void onStop() {
- if (refreshHandler != null) {
- refreshHandler.onStop();
- }
- super.onStop();
- }
-
- private class SavedPageItemClickListener implements
AdapterView.OnItemClickListener {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
- // We shouldn't do anything if the user is multi-selecting things
- if (actionMode == null) {
- SavedPage savedPage = (SavedPage) view.getTag();
- HistoryEntry newEntry = new HistoryEntry(savedPage.getTitle(),
HistoryEntry.SOURCE_SAVED_PAGE);
- ((PageActivity)getActivity()).loadPage(savedPage.getTitle(),
newEntry);
- }
- }
- }
-
- private class SavedPageItemLongClickListener implements
AdapterView.OnItemLongClickListener {
- @Override
- public boolean onItemLongClick(AdapterView<?> parent, View view, int
position, long id) {
- if (actionMode != null) {
- return false;
- }
- savedPagesList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- actionMode = ((AppCompatActivity)
getActivity()).startSupportActionMode(new ActionMode.Callback() {
- private final String actionModeTag = "actionModeSavedPages";
-
- @Override
- public boolean onCreateActionMode(ActionMode mode, Menu menu) {
-
mode.getMenuInflater().inflate(R.menu.menu_saved_pages_context, menu);
- return true;
- }
-
- @Override
- public boolean onPrepareActionMode(ActionMode mode, Menu menu)
{
- mode.setTag(actionModeTag);
- return false;
- }
-
- @Override
- public boolean onActionItemClicked(ActionMode mode, MenuItem
item) {
- switch (item.getItemId()) {
- case R.id.menu_refresh_selected_saved_pages:
- refreshSelected();
- actionMode.finish();
- return true;
- case R.id.menu_delete_selected_saved_pages:
- deleteSelected();
- actionMode.finish();
- return true;
- default:
- throw new RuntimeException("Unknown context menu
item clicked");
- }
- }
-
- private void deleteSelected() {
- SparseBooleanArray checkedItems =
savedPagesList.getCheckedItemPositions();
- for (int i = 0; i < checkedItems.size(); i++) {
- if (checkedItems.valueAt(i)) {
- final SavedPage page =
SavedPage.DATABASE_TABLE.fromCursor((Cursor)
adapter.getItem(checkedItems.keyAt(i)));
- new DeleteSavedPageTask(getActivity(), page) {
- @Override
- public void onFinish(Boolean result) {
- if (!isAdded()) {
- return;
- }
- FeedbackUtil.showMessage(getActivity(),
-
R.string.snackbar_saved_page_deleted);
- }
- }.execute();
- }
- }
- if (checkedItems.size() ==
savedPagesList.getAdapter().getCount()) {
- entryFilter.setVisibility(View.GONE);
- }
- }
-
- @Override
- public void onDestroyActionMode(ActionMode mode) {
-
savedPagesList.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
- actionMode = null;
- // Clear all selections
- savedPagesList.clearChoices();
- savedPagesList.requestLayout(); // Required to immediately
redraw unchecked states
-
- }
- });
- savedPagesList.setItemChecked(position, true);
- return true;
- }
- }
-
- private class SavedPageSearchTextWatcher implements TextWatcher {
- @Override
- public void beforeTextChanged(CharSequence charSequence, int i, int
i2, int i3) {
- // Do nothing
- }
-
- @Override
- public void onTextChanged(CharSequence charSequence, int i, int i2,
int i3) {
- // Do nothing
- }
-
- @Override
- public void afterTextChanged(Editable editable) {
-
getActivity().getSupportLoaderManager().restartLoader(SAVED_PAGES_FRAGMENT_LOADER_ID,
null, SavedPagesFragment.this);
- if (editable.length() == 0) {
- savedPagesEmptyTitle.setText(R.string.saved_pages_empty_title);
- savedPagesEmptyImage.setVisibility(View.VISIBLE);
- savedPagesEmptyMessage.setVisibility(View.VISIBLE);
- } else {
-
savedPagesEmptyTitle.setText(getString(R.string.saved_pages_search_empty_message,
editable.toString()));
- savedPagesEmptyImage.setVisibility(View.GONE);
- savedPagesEmptyMessage.setVisibility(View.GONE);
- }
- }
- }
-}
diff --git a/app/src/main/res/menu/menu_link_preview.xml
b/app/src/main/res/menu/menu_link_preview.xml
index 4750c60..9ca5315 100644
--- a/app/src/main/res/menu/menu_link_preview.xml
+++ b/app/src/main/res/menu/menu_link_preview.xml
@@ -4,9 +4,6 @@
<item android:id="@+id/menu_link_preview_open_in_new_tab"
android:title="@string/menu_long_press_open_in_new_tab"
/>
- <item android:id="@+id/menu_link_preview_save_page"
- android:title="@string/menu_link_preview_save_page"
- />
<item android:id="@+id/menu_link_preview_add_to_list"
android:title="@string/menu_link_preview_add_to_list"
/>
diff --git a/app/src/main/res/menu/menu_nav_drawer.xml
b/app/src/main/res/menu/menu_nav_drawer.xml
index ae2d7d4..2f692dd 100644
--- a/app/src/main/res/menu/menu_nav_drawer.xml
+++ b/app/src/main/res/menu/menu_nav_drawer.xml
@@ -13,11 +13,6 @@
android:icon="@drawable/ic_restore_black_24dp"
android:checkable="true"
/>
- <item android:id="@+id/nav_item_saved_pages"
- android:title="@string/nav_item_saved_pages"
- android:icon="@drawable/ic_bookmark_black_24dp"
- android:checkable="true"
- />
<item android:id="@+id/nav_item_reading_lists"
android:title="@string/nav_item_reading_lists"
android:icon="@drawable/ic_bookmark_black_24dp"
diff --git a/app/src/main/res/menu/menu_page_long_press.xml
b/app/src/main/res/menu/menu_page_long_press.xml
index c6a2189..fd6ff01 100644
--- a/app/src/main/res/menu/menu_page_long_press.xml
+++ b/app/src/main/res/menu/menu_page_long_press.xml
@@ -11,10 +11,6 @@
android:title="@string/menu_long_press_open_in_new_tab"
app:showAsAction="ifRoom" />
- <item android:id="@+id/menu_long_press_save_page"
- android:title="@string/menu_long_press_save_page"
- app:showAsAction="ifRoom" />
-
<item android:id="@+id/menu_long_press_add_to_list"
android:title="@string/menu_long_press_add_to_list"
app:showAsAction="ifRoom" />
diff --git a/app/src/main/res/menu/menu_saved_pages.xml
b/app/src/main/res/menu/menu_saved_pages.xml
deleted file mode 100644
index c871341..0000000
--- a/app/src/main/res/menu/menu_saved_pages.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- >
- <item android:id="@+id/menu_refresh_all_saved_pages"
- android:icon="@drawable/ic_refresh_white_24dp"
- android:title="@string/menu_update_all_saved_pages"
- app:showAsAction="ifRoom" />
-
- <item android:id="@+id/menu_clear_all_saved_pages"
- android:icon="@drawable/ic_delete_white_24dp"
- android:title="@string/menu_clear_all_saved_pages"
- app:showAsAction="ifRoom" />
-
-</menu>
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_saved_pages_context.xml
b/app/src/main/res/menu/menu_saved_pages_context.xml
deleted file mode 100644
index 37adc52..0000000
--- a/app/src/main/res/menu/menu_saved_pages_context.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- >
- <item android:id="@+id/menu_refresh_selected_saved_pages"
- android:icon="@drawable/ic_refresh_white_24dp"
- android:title="@string/menu_update_selected_saved_pages"
- app:showAsAction="ifRoom" />
- <item android:id="@+id/menu_delete_selected_saved_pages"
- android:icon="@drawable/ic_delete_white_24dp"
- android:title="@string/delete_selected_saved_pages"
- app:showAsAction="ifRoom" />
-</menu>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings_no_translate.xml
b/app/src/main/res/values/strings_no_translate.xml
index 0faa72b..02a6123 100644
--- a/app/src/main/res/values/strings_no_translate.xml
+++ b/app/src/main/res/values/strings_no_translate.xml
@@ -23,13 +23,11 @@
<!-- Long press menu -->
<string name="menu_long_press_share_page">@string/menu_page_share</string>
- <string name="menu_long_press_save_page">@string/menu_page_save</string>
<string
name="menu_long_press_add_to_list">@string/menu_page_add_to_list</string>
<!-- Link preview menu -->
<string
name="menu_link_preview_copy_link">@string/menu_long_press_copy_page</string>
<string
name="menu_link_preview_share_page">@string/menu_page_share</string>
- <string name="menu_link_preview_save_page">@string/menu_page_save</string>
<string
name="menu_link_preview_add_to_list">@string/menu_page_add_to_list</string>
<!-- Crash reporter -->
--
To view, visit https://gerrit.wikimedia.org/r/283671
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I2921d3dd935fa7babb9262c5da154d8e7cb38d36
Gerrit-PatchSet: 12
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits