/* * Copyright 2012 Javier Pérez Pacheco and Francisco Díaz Rodriguez * TweetTopics 2.0 * javielinux@gmail.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.javielinux.fragmentadapter; import android.content.Context; import android.database.CursorIndexOutOfBoundsException; import android.graphics.Bitmap; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.util.Log; import com.android.dataframework.DataFramework; import com.android.dataframework.Entity; import com.javielinux.fragments.*; import com.javielinux.tweettopics2.R; import com.javielinux.utils.ColumnsUtils; import com.javielinux.utils.TweetTopicsUtils; import com.javielinux.utils.Utils; import java.util.ArrayList; public class TweetTopicsFragmentAdapter extends FragmentPagerAdapter { private Context context; private MyActivityFragment myActivityFragment; private ArrayList<Entity> fragmentList = new ArrayList<Entity>(); private int nColumns = 1; public TweetTopicsFragmentAdapter(Context context, FragmentManager fragmentManager) { super(fragmentManager); this.context = context; fillColumnList(); nColumns = context.getResources().getInteger(R.integer.columns_tweets); } public void fillColumnList() { try { fragmentList.clear(); // creo MyActivity y la añado primero a la lista Entity myActivity = new Entity("columns"); myActivity.setValue("type_id", TweetTopicsUtils.COLUMN_MY_ACTIVITY); fragmentList.add(myActivity); // incluyo las columnas de la base de datos, sólo si son válidas for (Entity entity : DataFramework.getInstance().getEntityList("columns", "", "position asc")) { boolean addColumn = true; if (entity.getInt("type_id") == TweetTopicsUtils.COLUMN_SEARCH) { try { Entity ent = new Entity("search", entity.getLong("search_id")); } catch (CursorIndexOutOfBoundsException e) { addColumn = false; } } if (addColumn) { fragmentList.add(entity); } else { entity.delete(); } } notifyDataSetChanged(); } catch (Exception exception) { exception.printStackTrace(); } } @Override public int getCount() { return fragmentList.size(); } public ArrayList<Entity> getFragmentList() { return fragmentList; } public int getFragmentColumnType(int position) { return fragmentList.get(position).getInt("type_id"); } public Entity getFragmentColumnSearch(int position) { return fragmentList.get(position).getEntity("search_id"); } public Entity getFragmentColumnUser(int position) { return fragmentList.get(position).getEntity("user_id"); } public Bitmap getButtonBigActionBar(int position) { return ColumnsUtils.getButtonBigActionBar(context, fragmentList.get(position), true); } public Bitmap getIconItem(int position) { return ColumnsUtils.getIconItem(context, fragmentList.get(position)); } public int getPositionColumnActive() { int count = 0; for (Entity column : fragmentList) { if (column.getInt("active") == 1) { return count; } count++; } return 0; } public String setColumnActive(int position) { String text = ""; int count = 0; for (Entity column : fragmentList) { if (position == count) { column.setValue("active", 1); text = (String) getPageTitle(count); } else { column.setValue("active", 0); } if (column.getInt("type_id") != TweetTopicsUtils.COLUMN_MY_ACTIVITY) column.save(); count++; } return text; } @Override public Fragment getItem(int index) { Log.d(Utils.TAG, "Creando columna " + index + " : " + fragmentList.get(index).getString("description").toUpperCase()); int type_column = fragmentList.get(index).getInt("type_id"); switch (type_column) { case TweetTopicsUtils.COLUMN_TIMELINE: case TweetTopicsUtils.COLUMN_MENTIONS: case TweetTopicsUtils.COLUMN_DIRECT_MESSAGES: return new TweetTopicsFragment(fragmentList.get(index).getId()); case TweetTopicsUtils.COLUMN_MY_ACTIVITY: myActivityFragment = new MyActivityFragment(); return myActivityFragment; case TweetTopicsUtils.COLUMN_SEARCH: return new SearchFragment(fragmentList.get(index).getId()); case TweetTopicsUtils.COLUMN_LIST_USER: return new ListUserFragment(fragmentList.get(index).getId()); case TweetTopicsUtils.COLUMN_TRENDING_TOPIC: return new TrendingTopicsFragment(fragmentList.get(index).getId()); case TweetTopicsUtils.COLUMN_FAVORITES: return new FavoritesFragment(fragmentList.get(index).getId()); case TweetTopicsUtils.COLUMN_RETWEETS_BY_OTHERS: case TweetTopicsUtils.COLUMN_RETWEETS_BY_YOU: return new RetweetFragment(fragmentList.get(index).getId()); case TweetTopicsUtils.COLUMN_FOLLOWERS: case TweetTopicsUtils.COLUMN_FOLLOWINGS: return new UsersFragment(fragmentList.get(index).getId()); case TweetTopicsUtils.COLUMN_SAVED_TWEETS: return new SavedTweetFragment(fragmentList.get(index).getId()); default: return new NoFoundFragment(fragmentList.get(index).getString("description")); } } public long getUserOwnerColumn(int position) { return fragmentList.get(position).getLong("user_id"); } @Override public int getItemPosition(Object item) { if (item instanceof BaseListFragment) { BaseListFragment fragment = (BaseListFragment) item; Entity column_entity = fragment.getColumnEntity(); int position = fragmentList.indexOf(column_entity); if (position < 0) { Log.d("TweetTopics2.0", "Fragment doesn't exist"); return POSITION_NONE; } else { Log.d("TweetTopics2.0", "Fragment exists: " + column_entity.getString("title") + " - " + position); return position; } } else { return 0; } } public MyActivityFragment getMyActivityFragment() { return myActivityFragment; } @Override public CharSequence getPageTitle(int position) { return ColumnsUtils.getTitleColumn(context, fragmentList.get(position)); } public void clearColumnList() { try { fragmentList.clear(); Entity myActivity = new Entity("columns"); myActivity.setValue("type_id", TweetTopicsUtils.COLUMN_MY_ACTIVITY); fragmentList.add(myActivity); notifyDataSetChanged(); } catch (Exception exception) { exception.printStackTrace(); } } public void refreshColumnList() { try { fragmentList.clear(); Entity myActivity = new Entity("columns"); myActivity.setValue("type_id", TweetTopicsUtils.COLUMN_MY_ACTIVITY); fragmentList.add(myActivity); fragmentList.addAll(DataFramework.getInstance().getEntityList("columns", "", "position asc")); notifyDataSetChanged(); } catch (Exception exception) { exception.printStackTrace(); } } }