Backed out changeset 1d0bc7e990fe (bug 1328937)

This commit is contained in:
Carsten "Tomcat" Book 2017-01-11 12:46:28 +01:00
parent c1a0c67e9e
commit 1851a07b40
6 changed files with 52 additions and 92 deletions

View File

@ -144,7 +144,7 @@ public class ActivityStreamTelemetry {
return this; return this;
} }
public Builder forTopSiteType(@BrowserContract.TopSites.TopSiteType int type) { public Builder forTopSiteType(int type) {
switch (type) { switch (type) {
case BrowserContract.TopSites.TYPE_PINNED: case BrowserContract.TopSites.TYPE_PINNED:
this.set(Contract.SOURCE_SUBTYPE, Contract.SUBTYPE_PINNED); this.set(Contract.SOURCE_SUBTYPE, Contract.SUBTYPE_PINNED);
@ -156,7 +156,6 @@ public class ActivityStreamTelemetry {
this.set(Contract.SOURCE_SUBTYPE, Contract.SUBTYPE_TOP); this.set(Contract.SOURCE_SUBTYPE, Contract.SUBTYPE_TOP);
break; break;
// While we also have a "blank" type, it is not used by Activity Stream. // While we also have a "blank" type, it is not used by Activity Stream.
case BrowserContract.TopSites.TYPE_BLANK:
default: default:
throw new IllegalStateException("Unknown top site type: " + type); throw new IllegalStateException("Unknown top site type: " + type);
} }

View File

@ -8,7 +8,6 @@ package org.mozilla.gecko.db;
import org.mozilla.gecko.AppConstants; import org.mozilla.gecko.AppConstants;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.mozilla.gecko.annotation.RobocopTarget; import org.mozilla.gecko.annotation.RobocopTarget;
@ -596,9 +595,6 @@ public class BrowserContract {
public static final int TYPE_PINNED = 2; public static final int TYPE_PINNED = 2;
public static final int TYPE_SUGGESTED = 3; public static final int TYPE_SUGGESTED = 3;
@IntDef({TYPE_BLANK, TYPE_TOP, TYPE_PINNED, TYPE_SUGGESTED})
public @interface TopSiteType {}
public static final String BOOKMARK_ID = "bookmark_id"; public static final String BOOKMARK_ID = "bookmark_id";
public static final String HISTORY_ID = "history_id"; public static final String HISTORY_ID = "history_id";
public static final String TYPE = "type"; public static final String TYPE = "type";

View File

@ -1,70 +0,0 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.home.activitystream.model;
import android.database.Cursor;
import android.support.annotation.Nullable;
import org.mozilla.gecko.db.BrowserContract;
public class TopSite {
private final long id;
private final String url;
private final String title;
private @Nullable final Boolean isBookmarked;
private @BrowserContract.TopSites.TopSiteType final int type;
public static TopSite fromCursor(Cursor cursor) {
// The Combined View only contains pages that have been visited at least once, i.e. any
// page in the TopSites query will contain a HISTORY_ID. _ID however will be 0 for all rows.
final long id = cursor.getLong(cursor.getColumnIndexOrThrow(BrowserContract.Combined.HISTORY_ID));
final String url = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Combined.URL));
final String title = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Combined.TITLE));
final int type = cursor.getInt(cursor.getColumnIndexOrThrow(BrowserContract.TopSites.TYPE));
// We can't figure out bookmark state of a pin, so we leave it as unknown to be queried later.
Boolean isBookmarked = null;
if (type != BrowserContract.TopSites.TYPE_PINNED) {
isBookmarked = !cursor.isNull(cursor.getColumnIndexOrThrow(BrowserContract.Combined.BOOKMARK_ID));
}
return new TopSite(id, url, title, isBookmarked, type);
}
private TopSite(long id, String url, String title, @Nullable Boolean isBookmarked, int type) {
this.id = id;
this.url = url;
this.title = title;
this.isBookmarked = isBookmarked;
this.type = type;
}
public long getId() {
return id;
}
public String getUrl() {
return url;
}
public String getTitle() {
return title;
}
@Nullable
public Boolean isBookmarked() {
return isBookmarked;
}
@BrowserContract.TopSites.TopSiteType
public int getType() {
return type;
}
public boolean isPinned() {
return type == BrowserContract.TopSites.TYPE_PINNED;
}
}

View File

@ -21,7 +21,6 @@ import org.mozilla.gecko.activitystream.ActivityStreamTelemetry;
import org.mozilla.gecko.db.BrowserContract; import org.mozilla.gecko.db.BrowserContract;
import org.mozilla.gecko.home.HomePager; import org.mozilla.gecko.home.HomePager;
import org.mozilla.gecko.home.activitystream.menu.ActivityStreamContextMenu; import org.mozilla.gecko.home.activitystream.menu.ActivityStreamContextMenu;
import org.mozilla.gecko.home.activitystream.model.TopSite;
import org.mozilla.gecko.icons.IconCallback; import org.mozilla.gecko.icons.IconCallback;
import org.mozilla.gecko.icons.IconResponse; import org.mozilla.gecko.icons.IconResponse;
import org.mozilla.gecko.icons.Icons; import org.mozilla.gecko.icons.Icons;
@ -41,7 +40,9 @@ class TopSitesCard extends RecyclerView.ViewHolder
private final ImageView menuButton; private final ImageView menuButton;
private Future<IconResponse> ongoingIconLoad; private Future<IconResponse> ongoingIconLoad;
private TopSite topSite; private String url;
private int type;
@Nullable private Boolean isBookmarked;
private final HomePager.OnUrlOpenListener onUrlOpenListener; private final HomePager.OnUrlOpenListener onUrlOpenListener;
private final HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener; private final HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener;
@ -65,27 +66,29 @@ class TopSitesCard extends RecyclerView.ViewHolder
ViewUtil.enableTouchRipple(menuButton); ViewUtil.enableTouchRipple(menuButton);
} }
void bind(final TopSite topSite) { void bind(final TopSitesPageAdapter.TopSite topSite) {
this.topSite = topSite; ActivityStream.extractLabel(itemView.getContext(), topSite.url, true, new ActivityStream.LabelCallback() {
ActivityStream.extractLabel(itemView.getContext(), topSite.getUrl(), true, new ActivityStream.LabelCallback() {
@Override @Override
public void onLabelExtracted(String label) { public void onLabelExtracted(String label) {
title.setText(label); title.setText(label);
} }
}); });
this.url = topSite.url;
this.type = topSite.type;
this.isBookmarked = topSite.isBookmarked;
if (ongoingIconLoad != null) { if (ongoingIconLoad != null) {
ongoingIconLoad.cancel(true); ongoingIconLoad.cancel(true);
} }
ongoingIconLoad = Icons.with(itemView.getContext()) ongoingIconLoad = Icons.with(itemView.getContext())
.pageUrl(topSite.getUrl()) .pageUrl(topSite.url)
.skipNetwork() .skipNetwork()
.build() .build()
.execute(this); .execute(this);
final int pinResourceId = (topSite.isPinned() ? R.drawable.pin : 0); final int pinResourceId = (isPinned(this.type) ? R.drawable.pin : 0);
TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(title, pinResourceId, 0, 0, 0); TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(title, pinResourceId, 0, 0, 0);
} }
@ -103,10 +106,10 @@ class TopSitesCard extends RecyclerView.ViewHolder
public void onClick(View clickedView) { public void onClick(View clickedView) {
ActivityStreamTelemetry.Extras.Builder extras = ActivityStreamTelemetry.Extras.builder() ActivityStreamTelemetry.Extras.Builder extras = ActivityStreamTelemetry.Extras.builder()
.set(ActivityStreamTelemetry.Contract.SOURCE_TYPE, ActivityStreamTelemetry.Contract.TYPE_TOPSITES) .set(ActivityStreamTelemetry.Contract.SOURCE_TYPE, ActivityStreamTelemetry.Contract.TYPE_TOPSITES)
.forTopSiteType(topSite.getType()); .forTopSiteType(type);
if (clickedView == itemView) { if (clickedView == itemView) {
onUrlOpenListener.onUrlOpen(topSite.getUrl(), EnumSet.noneOf(HomePager.OnUrlOpenListener.Flags.class)); onUrlOpenListener.onUrlOpen(url, EnumSet.noneOf(HomePager.OnUrlOpenListener.Flags.class));
Telemetry.sendUIEvent( Telemetry.sendUIEvent(
TelemetryContract.Event.LOAD_URL, TelemetryContract.Event.LOAD_URL,
@ -118,9 +121,9 @@ class TopSitesCard extends RecyclerView.ViewHolder
menuButton, menuButton,
extras, extras,
ActivityStreamContextMenu.MenuMode.TOPSITE, ActivityStreamContextMenu.MenuMode.TOPSITE,
title.getText().toString(), topSite.getUrl(), title.getText().toString(), url,
topSite.isBookmarked(), topSite.isPinned(), isBookmarked, isPinned(type),
onUrlOpenListener, onUrlOpenInBackgroundListener, onUrlOpenListener, onUrlOpenInBackgroundListener,
faviconView.getWidth(), faviconView.getHeight()); faviconView.getWidth(), faviconView.getHeight());
@ -132,4 +135,8 @@ class TopSitesCard extends RecyclerView.ViewHolder
); );
} }
} }
private boolean isPinned(int type) {
return type == BrowserContract.TopSites.TYPE_PINNED;
}
} }

View File

@ -17,12 +17,27 @@ import android.widget.FrameLayout;
import org.mozilla.gecko.R; import org.mozilla.gecko.R;
import org.mozilla.gecko.db.BrowserContract; import org.mozilla.gecko.db.BrowserContract;
import org.mozilla.gecko.home.HomePager; import org.mozilla.gecko.home.HomePager;
import org.mozilla.gecko.home.activitystream.model.TopSite;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class TopSitesPageAdapter extends RecyclerView.Adapter<TopSitesCard> { public class TopSitesPageAdapter extends RecyclerView.Adapter<TopSitesCard> {
static final class TopSite {
public final long id;
public final String url;
public final String title;
@Nullable public final Boolean isBookmarked;
public final int type;
TopSite(long id, String url, String title, @Nullable Boolean isBookmarked, int type) {
this.id = id;
this.url = url;
this.title = title;
this.isBookmarked = isBookmarked;
this.type = type;
}
}
private List<TopSite> topSites; private List<TopSite> topSites;
private int tiles; private int tiles;
private int tilesWidth; private int tilesWidth;
@ -47,6 +62,8 @@ public class TopSitesPageAdapter extends RecyclerView.Adapter<TopSitesCard> {
} }
/** /**
*
* @param cursor
* @param startIndex The first item that this topsites group should show. This item, and the following * @param startIndex The first item that this topsites group should show. This item, and the following
* 3 items will be displayed by this adapter. * 3 items will be displayed by this adapter.
*/ */
@ -60,7 +77,19 @@ public class TopSitesPageAdapter extends RecyclerView.Adapter<TopSitesCard> {
for (int i = 0; i < tiles && startIndex + i < cursor.getCount(); i++) { for (int i = 0; i < tiles && startIndex + i < cursor.getCount(); i++) {
cursor.moveToPosition(startIndex + i); cursor.moveToPosition(startIndex + i);
topSites.add(TopSite.fromCursor(cursor)); // The Combined View only contains pages that have been visited at least once, i.e. any
// page in the TopSites query will contain a HISTORY_ID. _ID however will be 0 for all rows.
final long id = cursor.getLong(cursor.getColumnIndexOrThrow(BrowserContract.Combined.HISTORY_ID));
final String url = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Combined.URL));
final String title = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Combined.TITLE));
final int type = cursor.getInt(cursor.getColumnIndexOrThrow(BrowserContract.TopSites.TYPE));
// We can't figure out bookmark state of a pin, so we leave it as unknown to be queried later.
Boolean isBookmarked = null;
if (type != BrowserContract.TopSites.TYPE_PINNED) {
isBookmarked = !cursor.isNull(cursor.getColumnIndexOrThrow(BrowserContract.Combined.BOOKMARK_ID));
}
topSites.add(new TopSite(id, url, title, isBookmarked, type));
} }
notifyDataSetChanged(); notifyDataSetChanged();
@ -94,6 +123,6 @@ public class TopSitesPageAdapter extends RecyclerView.Adapter<TopSitesCard> {
@Override @Override
@UiThread @UiThread
public long getItemId(int position) { public long getItemId(int position) {
return topSites.get(position).getId(); return topSites.get(position).id;
} }
} }

View File

@ -472,7 +472,6 @@ gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
'home/activitystream/menu/PopupContextMenu.java', 'home/activitystream/menu/PopupContextMenu.java',
'home/activitystream/model/Highlight.java', 'home/activitystream/model/Highlight.java',
'home/activitystream/model/Metadata.java', 'home/activitystream/model/Metadata.java',
'home/activitystream/model/TopSite.java',
'home/activitystream/stream/HighlightItem.java', 'home/activitystream/stream/HighlightItem.java',
'home/activitystream/stream/HighlightsTitle.java', 'home/activitystream/stream/HighlightsTitle.java',
'home/activitystream/stream/StreamItem.java', 'home/activitystream/stream/StreamItem.java',