Bug 965070 - Support GridViews in dynamic panels. r=lucasr

This commit is contained in:
Sola Ogunsakin 2014-01-29 16:37:58 -08:00
parent e53404d029
commit 484ffd9005
13 changed files with 145 additions and 5 deletions

View File

@ -388,7 +388,8 @@ public final class HomeConfig {
}
public static enum ViewType implements Parcelable {
LIST("list");
LIST("list"),
GRID("grid");
private final String mId;

View File

@ -0,0 +1,52 @@
/* -*- 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;
import java.net.MalformedURLException;
import java.net.URL;
import org.mozilla.gecko.db.BrowserContract.URLColumns;
import org.mozilla.gecko.favicons.Favicons;
import org.mozilla.gecko.R;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.FrameLayout;
import android.widget.TextView;
public class PanelGridItemView extends FrameLayout {
private static final String LOGTAG = "GeckoPanelGridItemView";
private final ImageView mThumbnailView;
public PanelGridItemView(Context context) {
this(context, null);
}
public PanelGridItemView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PanelGridItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
LayoutInflater.from(context).inflate(R.layout.panel_grid_item_view, this);
mThumbnailView = (ImageView) findViewById(R.id.image);
mThumbnailView.setBackgroundColor(Color.rgb(255, 148, 0));
}
public void updateFromCursor(Cursor cursor) { }
}

View File

@ -0,0 +1,54 @@
/* -*- 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;
import org.mozilla.gecko.R;
import org.mozilla.gecko.home.HomeConfig.ViewConfig;
import org.mozilla.gecko.home.PanelLayout.DatasetBacked;
import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.CursorAdapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
public class PanelGridView extends GridView implements DatasetBacked {
private static final String LOGTAG = "GeckoPanelGridView";
private final PanelGridViewAdapter mAdapter;
public PanelGridView(Context context, ViewConfig viewConfig) {
super(context, null, R.attr.homeGridViewStyle);
mAdapter = new PanelGridViewAdapter(context);
setAdapter(mAdapter);
setNumColumns(AUTO_FIT);
}
@Override
public void setDataset(Cursor cursor) {
mAdapter.swapCursor(cursor);
}
private class PanelGridViewAdapter extends CursorAdapter {
public PanelGridViewAdapter(Context context) {
super(context, null, 0);
}
@Override
public void bindView(View bindView, Context context, Cursor cursor) {
final PanelGridItemView item = (PanelGridItemView) bindView;
item.updateFromCursor(cursor);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return new PanelGridItemView(context);
}
}
}

View File

@ -144,6 +144,10 @@ abstract class PanelLayout extends FrameLayout {
view = new PanelListView(getContext(), viewConfig);
break;
case GRID:
view = new PanelGridView(getContext(), viewConfig);
break;
default:
throw new IllegalStateException("Unrecognized view type in " + getClass().getSimpleName());
}

View File

@ -229,6 +229,8 @@ gbjar.sources += [
'home/LastTabsPanel.java',
'home/MostRecentPanel.java',
'home/MultiTypeCursorAdapter.java',
'home/PanelGridItemView.java',
'home/PanelGridView.java',
'home/PanelLayout.java',
'home/PanelListRow.java',
'home/PanelListView.java',

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 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/. -->
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gecko="http://schemas.android.com/apk/res-auto">
<ImageView android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:layout_marginRight="5dp" />
</merge>

View File

@ -28,7 +28,7 @@
<item name="topDivider">true</item>
</style>
<style name="Widget.TopSitesGridView" parent="Widget.GridView">
<style name="Widget.HomeGridView" parent="Widget.GridView">
<item name="android:paddingLeft">55dp</item>
<item name="android:paddingRight">55dp</item>
<item name="android:paddingBottom">30dp</item>
@ -36,6 +36,8 @@
<item name="android:verticalSpacing">20dp</item>
</style>
<style name="Widget.TopSitesGridView" parent="Widget.HomeGridView" />
<style name="Widget.Home.HistoryListView">
<item name="android:paddingLeft">50dp</item>
<item name="android:paddingRight">100dp</item>

View File

@ -77,7 +77,7 @@
<item name="topDivider">true</item>
</style>
<style name="Widget.TopSitesGridView" parent="Widget.GridView">
<style name="Widget.HomeGridView" parent="Widget.GridView">
<item name="android:paddingLeft">5dp</item>
<item name="android:paddingRight">5dp</item>
<item name="android:paddingBottom">30dp</item>
@ -85,6 +85,8 @@
<item name="android:verticalSpacing">10dp</item>
</style>
<style name="Widget.TopSitesGridView" parent="Widget.HomeGridView" />
<style name="Widget.TopSitesListView" parent="Widget.BookmarksListView">
<item name="topDivider">false</item>
</style>

View File

@ -47,6 +47,7 @@
<item name="bookmarksListViewStyle">@style/Widget.BookmarksListView</item>
<item name="topSitesGridItemViewStyle">@style/Widget.TopSitesGridItemView</item>
<item name="topSitesGridViewStyle">@style/Widget.TopSitesGridView</item>
<item name="homeGridViewStyle">@style/Widget.HomeGridView</item>
<item name="topSitesThumbnailViewStyle">@style/Widget.TopSitesThumbnailView</item>
<item name="homeListViewStyle">@style/Widget.HomeListView</item>
<item name="geckoMenuListViewStyle">@style/Widget.GeckoMenuListView</item>

View File

@ -5,7 +5,7 @@
<resources>
<style name="Widget.TopSitesGridView" parent="Widget.GridView">
<style name="Widget.HomeGridView" parent="Widget.GridView">
<item name="android:paddingLeft">55dp</item>
<item name="android:paddingRight">55dp</item>
<item name="android:paddingBottom">30dp</item>
@ -13,6 +13,8 @@
<item name="android:verticalSpacing">20dp</item>
</style>
<style name="Widget.TopSitesGridView" parent="Widget.HomeGridView" />
<style name="Widget.Home.HistoryListView">
<item name="android:paddingLeft">50dp</item>
<item name="android:paddingRight">100dp</item>

View File

@ -35,6 +35,9 @@
<!-- Default style for the TopSitesGridItemView -->
<attr name="topSitesGridItemViewStyle" format="reference" />
<!-- Default style for the HomeGridView -->
<attr name="homeGridViewStyle" format="reference" />
<!-- Default style for the TopSitesGridView -->
<attr name="topSitesGridViewStyle" format="reference" />

View File

@ -130,12 +130,14 @@
<item name="android:drawableLeft">@drawable/bookmark_folder</item>
</style>
<style name="Widget.TopSitesGridView" parent="Widget.GridView">
<style name="Widget.HomeGridView" parent="Widget.GridView">
<item name="android:padding">7dp</item>
<item name="android:horizontalSpacing">0dp</item>
<item name="android:verticalSpacing">7dp</item>
</style>
<style name="Widget.TopSitesGridView" parent="Widget.HomeGridView" />
<style name="Widget.TopSitesGridItemView">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">fill_parent</item>

View File

@ -80,6 +80,7 @@
<item name="bookmarksListViewStyle">@style/Widget.BookmarksListView</item>
<item name="topSitesGridItemViewStyle">@style/Widget.TopSitesGridItemView</item>
<item name="topSitesGridViewStyle">@style/Widget.TopSitesGridView</item>
<item name="homeGridViewStyle">@style/Widget.HomeGridView</item>
<item name="topSitesThumbnailViewStyle">@style/Widget.TopSitesThumbnailView</item>
<item name="homeListViewStyle">@style/Widget.HomeListView</item>
<item name="geckoMenuListViewStyle">@style/Widget.GeckoMenuListView</item>