/*
* DeliciousDroid - http://code.google.com/p/DeliciousDroid/
*
* Copyright (C) 2010 Matt Schmidt
*
* DeliciousDroid is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* DeliciousDroid 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.
*
* You should have received a copy of the GNU General Public License
* along with DeliciousDroid; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*/
package com.deliciousdroid.activity;
import android.app.SearchManager;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import com.deliciousdroid.fragment.AddBookmarkFragment;
import com.deliciousdroid.fragment.BrowseBookmarkFeedFragment;
import com.deliciousdroid.fragment.BrowseBookmarksFragment;
import com.deliciousdroid.fragment.BrowseTagsFragment;
import com.deliciousdroid.fragment.ViewBookmarkFragment;
import com.deliciousdroid.fragment.AddBookmarkFragment.OnBookmarkSaveListener;
import com.deliciousdroid.fragment.BrowseBookmarksFragment.OnBookmarkSelectedListener;
import com.deliciousdroid.fragment.BrowseTagsFragment.OnTagSelectedListener;
import com.deliciousdroid.fragment.ViewBookmarkFragment.OnBookmarkActionListener;
import com.deliciousdroid.Constants;
import com.deliciousdroid.Constants.BookmarkViewType;
import com.deliciousdroid.R;
import com.deliciousdroid.action.IntentHelper;
import com.deliciousdroid.platform.BookmarkManager;
import com.deliciousdroid.providers.BookmarkContent.Bookmark;
public class BrowseBookmarks extends FragmentBaseActivity implements OnBookmarkSelectedListener,
OnBookmarkActionListener, OnBookmarkSaveListener, OnTagSelectedListener {
private String query = "";
private String tagname = "";
private Boolean unread = false;
private String path = "";
private Bookmark lastSelected = null;
private BookmarkViewType lastViewType = null;
static final String STATE_LASTBOOKMARK = "lastBookmark";
static final String STATE_LASTVIEWTYPE = "lastViewType";
static final String STATE_USERNAME = "username";
static final String STATE_TAGNAME = "tagname";
static final String STATE_UNREAD = "unread";
static final String STATE_QUERY = "query";
static final String STATE_PATH = "path";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.browse_bookmarks);
Intent intent = getIntent();
Uri data = intent.getData();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction t = fm.beginTransaction();
Fragment bookmarkFrag;
if(fm.findFragmentById(R.id.listcontent) == null){
if(Intent.ACTION_SEARCH.equals(intent.getAction())) {
Bundle searchData = intent.getBundleExtra(SearchManager.APP_DATA);
if(searchData != null) {
tagname = searchData.getString("tagname");
username = searchData.getString("username");
unread = searchData.getBoolean("unread");
}
query = intent.getStringExtra(SearchManager.QUERY);
if(intent.hasExtra("username")) {
username = intent.getStringExtra("username");
}
if(data != null && data.getUserInfo() != null){
username = data.getUserInfo();
}
} else {
if(data != null) {
if(data.getUserInfo() != "") {
username = data.getUserInfo();
} else username = mAccount.name;
tagname = data.getQueryParameter("tagname");
unread = data.getQueryParameter("unread") != null;
path = data.getPath();
}
}
if(isMyself()) {
bookmarkFrag = new BrowseBookmarksFragment();
} else {
bookmarkFrag = new BrowseBookmarkFeedFragment();
}
t.add(R.id.listcontent, bookmarkFrag);
} else {
if(savedInstanceState != null){
username = savedInstanceState.getString(STATE_USERNAME);
tagname = savedInstanceState.getString(STATE_TAGNAME);
unread = savedInstanceState.getBoolean(STATE_UNREAD);
query = savedInstanceState.getString(STATE_QUERY);
path = savedInstanceState.getString(STATE_PATH);
}
bookmarkFrag = fm.findFragmentById(R.id.listcontent);
}
if(isMyself()){
if(query != null && !query.equals("")){
((BrowseBookmarksFragment) bookmarkFrag).setSearchQuery(query, username, tagname, unread);
} else {
((BrowseBookmarksFragment) bookmarkFrag).setQuery(username, tagname, unread);
}
} else {
if(query != null && !query.equals("")){
((BrowseBookmarkFeedFragment) bookmarkFrag).setQuery(username, tagname);
} else {
((BrowseBookmarkFeedFragment) bookmarkFrag).setQuery(username, query);
}
}
BrowseTagsFragment tagFrag = (BrowseTagsFragment) fm.findFragmentById(R.id.tagcontent);
if(tagFrag != null){
tagFrag.setAccount(username);
}
if(path != null && path.contains("tags")){
t.hide(fm.findFragmentById(R.id.maincontent));
findViewById(R.id.panel_collapse_button).setVisibility(View.GONE);
} else{
if(tagFrag != null){
t.hide(tagFrag);
}
}
Fragment addFrag = fm.findFragmentById(R.id.addcontent);
if(addFrag != null){
t.hide(addFrag);
}
t.commit();
}
@Override
public boolean onSearchRequested() {
if(isMyself()) {
Bundle contextData = new Bundle();
contextData.putString("tagname", tagname);
contextData.putString("username", username);
contextData.putBoolean("unread", unread);
startSearch(null, false, contextData, false);
} else {
startSearch(null, false, Bundle.EMPTY, false);
}
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
setupSearch(menu);
return true;
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
if(lastSelected != null && lastViewType != null){
savedInstanceState.putSerializable(STATE_LASTBOOKMARK, lastSelected);
savedInstanceState.putSerializable(STATE_LASTVIEWTYPE, lastViewType);
}
savedInstanceState.putString(STATE_USERNAME, username);
savedInstanceState.putString(STATE_TAGNAME, tagname);
savedInstanceState.putBoolean(STATE_UNREAD, unread);
savedInstanceState.putString(STATE_QUERY, query);
super.onSaveInstanceState(savedInstanceState);
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if(findViewById(R.id.maincontent) != null) {
lastSelected = (Bookmark)savedInstanceState.getSerializable(STATE_LASTBOOKMARK);
lastViewType = (BookmarkViewType)savedInstanceState.getSerializable(STATE_LASTVIEWTYPE);
setBookmarkView(lastSelected, lastViewType);
}
}
@Override
public void onBackPressed(){
super.onBackPressed();
Fragment tagFrag = getSupportFragmentManager().findFragmentById(R.id.tagcontent);
View panelBtn = findViewById(R.id.panel_collapse_button);
if(tagFrag != null && panelBtn != null){
if(tagFrag.isVisible())
findViewById(R.id.panel_collapse_button).setVisibility(View.GONE);
else findViewById(R.id.panel_collapse_button).setVisibility(View.VISIBLE);
}
}
public void onBookmarkView(Bookmark b) {
if(b != null){
if(findViewById(R.id.maincontent) != null || findViewById(R.id.tagcontent) != null) {
lastSelected = b;
lastViewType = BookmarkViewType.VIEW;
setBookmarkView(b, BookmarkViewType.VIEW);
} else {
startActivity(IntentHelper.ViewBookmark(b, BookmarkViewType.VIEW, username, this));
}
}
}
public void onBookmarkRead(Bookmark b) {
if(b != null){
if(findViewById(R.id.maincontent) != null) {
lastSelected = b;
lastViewType = BookmarkViewType.READ;
setBookmarkView(b, BookmarkViewType.READ);
} else {
startActivity(IntentHelper.ViewBookmark(b, BookmarkViewType.READ, username, this));
}
}
}
public void onBookmarkOpen(Bookmark b) {
if(b != null){
if(findViewById(R.id.maincontent) != null) {
lastSelected = b;
lastViewType = BookmarkViewType.WEB;
setBookmarkView(b, BookmarkViewType.WEB);
} else {
startActivity(IntentHelper.OpenInBrowser(b.getUrl()));
}
}
}
public void onBookmarkAdd(Bookmark b) {
if(b != null){
startActivity(IntentHelper.AddBookmark(b.getUrl(), mAccount.name, this));
}
}
public void onBookmarkShare(Bookmark b) {
if(b != null){
Intent sendIntent = IntentHelper.SendBookmark(b.getUrl(), b.getDescription());
startActivity(Intent.createChooser(sendIntent, getString(R.string.share_chooser_title)));
}
}
public void onBookmarkEdit(Bookmark b) {
if(b != null){
if(findViewById(R.id.maincontent) != null) {
AddBookmarkFragment addFrag = (AddBookmarkFragment) getSupportFragmentManager().findFragmentById(R.id.addcontent);
addFrag.loadBookmark(b, null);
addFrag.refreshView();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if(getSupportFragmentManager().findFragmentById(R.id.tagcontent).isVisible()){
transaction.hide(getSupportFragmentManager().findFragmentById(R.id.tagcontent));
transaction.show(getSupportFragmentManager().findFragmentById(R.id.maincontent));
transaction.addToBackStack(null);
}
transaction.show(getSupportFragmentManager().findFragmentById(R.id.addcontent));
transaction.commit();
transaction = getSupportFragmentManager().beginTransaction();
transaction.hide(getSupportFragmentManager().findFragmentById(R.id.maincontent));
transaction.commit();
} else {
startActivity(IntentHelper.EditBookmark(b, mAccount.name, this));
}
}
}
public void onBookmarkDelete(Bookmark b) {
BookmarkManager.LazyDelete(b, mAccount.name, this);
}
public void onViewTagSelected(String tag) {
if(findViewById(R.id.maincontent) != null) {
BrowseBookmarksFragment frag = new BrowseBookmarksFragment();
frag.setQuery(username, tag, false);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.listcontent, frag);
transaction.addToBackStack(null);
transaction.commit();
} else {
startActivity(IntentHelper.ViewBookmarks(tag, username, this));
}
}
public void onUserTagSelected(String tag, String user) {
if(findViewById(R.id.maincontent) != null) {
BrowseBookmarkFeedFragment frag = new BrowseBookmarkFeedFragment();
frag.setQuery(user, tag);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.listcontent, frag);
transaction.addToBackStack(null);
transaction.commit();
} else {
startActivity(IntentHelper.ViewBookmarks(tag, user, this));
}
}
public void onAccountSelected(String account) {
if(findViewById(R.id.maincontent) != null) {
BrowseBookmarkFeedFragment frag = new BrowseBookmarkFeedFragment();
frag.setQuery(account, null);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.listcontent, frag);
transaction.addToBackStack(null);
transaction.commit();
} else {
startActivity(IntentHelper.ViewBookmarks(null, account, this));
}
}
public void onBookmarkSave(Bookmark b) {
if(getSupportFragmentManager().findFragmentById(R.id.maincontent).isHidden()){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.hide(getSupportFragmentManager().findFragmentById(R.id.addcontent));
transaction.show(getSupportFragmentManager().findFragmentById(R.id.maincontent));
transaction.commit();
}
onBookmarkView(b);
}
public void onBookmarkCancel(Bookmark b) {
if(getSupportFragmentManager().findFragmentById(R.id.maincontent).isHidden()){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.hide(getSupportFragmentManager().findFragmentById(R.id.addcontent));
transaction.show(getSupportFragmentManager().findFragmentById(R.id.maincontent));
transaction.commit();
}
onBookmarkView(b);
}
public void onTagSelected(String tag) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
BrowseBookmarksFragment frag = new BrowseBookmarksFragment();
frag.setQuery(username, tag, false);
transaction.replace(R.id.listcontent, frag);
transaction.commit();
}
private void setBookmarkView(Bookmark b, BookmarkViewType viewType){
if(getSupportFragmentManager().findFragmentById(R.id.maincontent).isHidden() && getSupportFragmentManager().findFragmentById(R.id.addcontent).isHidden()){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if(getSupportFragmentManager().findFragmentById(R.id.tagcontent).isVisible()){
transaction.hide(getSupportFragmentManager().findFragmentById(R.id.tagcontent));
findViewById(R.id.panel_collapse_button).setVisibility(View.VISIBLE);
}
transaction.show(getSupportFragmentManager().findFragmentById(R.id.maincontent));
transaction.addToBackStack(null);
transaction.commit();
} else if(getSupportFragmentManager().findFragmentById(R.id.maincontent).isHidden() && getSupportFragmentManager().findFragmentById(R.id.addcontent).isVisible()){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.hide(getSupportFragmentManager().findFragmentById(R.id.addcontent));
transaction.show(getSupportFragmentManager().findFragmentById(R.id.maincontent));
transaction.commit();
}
ViewBookmarkFragment viewFrag = (ViewBookmarkFragment) getSupportFragmentManager().findFragmentById(R.id.maincontent);
viewFrag.setBookmark(b, viewType);
viewFrag.loadBookmark();
}
public void collapsePanel(View v) {
if(findViewById(R.id.listcontent) != null){
View bookmarkList = findViewById(R.id.listcontent);
if(bookmarkList.getVisibility() == View.VISIBLE)
bookmarkList.setVisibility(View.GONE);
else bookmarkList.setVisibility(View.VISIBLE);
}
}
public void saveHandler(View v) {
FragmentManager fm = getSupportFragmentManager();
AddBookmarkFragment addFrag = (AddBookmarkFragment)fm.findFragmentById(R.id.addcontent);
if(addFrag != null){
addFrag.saveHandler(v);
}
}
public void cancelHandler(View v) {
FragmentManager fm = getSupportFragmentManager();
AddBookmarkFragment addFrag = (AddBookmarkFragment)fm.findFragmentById(R.id.addcontent);
if(addFrag != null) {
addFrag.cancelHandler(v);
}
}
}