/*
* Tint Browser for Android
*
* Copyright (C) 2012 - to infinity and beyond J. Devauchelle and contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 3 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
package com.mogoweb.ui.fragments;
import com.mogoweb.R;
import com.mogoweb.model.BookmarkHistoryItem;
import com.mogoweb.model.BookmarksAdapter;
import com.mogoweb.providers.BookmarksProvider;
import com.mogoweb.providers.BookmarksWrapper;
import com.mogoweb.ui.activities.TintBrowserActivity;
import com.mogoweb.ui.managers.UIManager;
import com.mogoweb.utils.Constants;
import android.app.Activity;
import android.app.Fragment;
import android.app.LoaderManager;
import android.content.Loader;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.database.Cursor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.AdapterView.OnItemClickListener;
public abstract class StartPageFragment_1 extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
public interface OnStartPageItemClickedListener {
public void onStartPageItemClicked(String url);
}
private View mParentView = null;
private GridView mGrid;
private BookmarksAdapter mAdapter;
private OnStartPageItemClickedListener mListener = null;
private OnSharedPreferenceChangeListener mPreferenceChangeListener;
protected UIManager mUIManager;
private boolean mInitialized;
private boolean mListShown = true;
public StartPageFragment_1() {
mInitialized = false;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!mInitialized) {
try {
mUIManager = ((TintBrowserActivity) activity).getUIManager();
} catch (ClassCastException e) {
Log.e("StartPageFragment.onAttach()", e.getMessage());
}
mInitialized = true;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mParentView == null) {
mParentView = inflater.inflate(getStartPageFragmentLayout(), container, false);
mGrid = (GridView) mParentView.findViewById(R.id.StartPageFragmentGrid);
String[] from = new String[] { BookmarksProvider.Columns.TITLE, BookmarksProvider.Columns.URL };
int[] to = new int[] { R.id.StartPageRowTitle, R.id.StartPageRowUrl };
mAdapter = new BookmarksAdapter(
getActivity(),
R.layout.start_page_row,
null,
from,
to,
0,
R.drawable.browser_thumbnail);
mGrid.setAdapter(mAdapter);
mGrid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
if (mListener != null) {
BookmarkHistoryItem item = BookmarksWrapper.getBookmarkById(getActivity().getContentResolver(), id);
if (item != null) {
mListener.onStartPageItemClicked(item.getUrl());
}
}
}
});
mGrid.setOnTouchListener(mUIManager);
mPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (Constants.PREFERENCE_START_PAGE_LIMIT.equals(key)) {
getLoaderManager().restartLoader(0, null, StartPageFragment_1.this);
}
}
};
PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(mPreferenceChangeListener);
}
return mParentView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setListShown(false);
mParentView.postDelayed(new Runnable() {
@Override
public void run() {
if (isAdded()) {
getLoaderManager().initLoader(0, null, StartPageFragment_1.this);
}
}
}, 100);
}
@Override
public void onDestroy() {
PreferenceManager.getDefaultSharedPreferences(getActivity()).unregisterOnSharedPreferenceChangeListener(mPreferenceChangeListener);
super.onDestroy();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
int limit;
try {
limit = Integer.parseInt(
PreferenceManager.getDefaultSharedPreferences(getActivity()).getString(
Constants.PREFERENCE_START_PAGE_LIMIT,
Integer.toString(getResources().getInteger(R.integer.default_start_page_items_number))));
} catch (Exception e) {
limit = getResources().getInteger(R.integer.default_start_page_items_number);
}
return BookmarksWrapper.getCursorLoaderForStartPage(getActivity(), limit);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
setListShown(true);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
public void setOnStartPageItemClickedListener(OnStartPageItemClickedListener listener) {
mListener = listener;
}
protected abstract int getStartPageFragmentLayout();
private void setListShown(boolean shown) {
if (mListShown == shown) {
return;
}
mListShown = shown;
if (shown) {
mGrid.setVisibility(View.VISIBLE);
} else {
mGrid.setVisibility(View.GONE);
}
}
}