/*
* 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.tweettopics2;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.NotificationManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.StateListDrawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v4.view.ViewPager;
import android.view.*;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.widget.*;
import com.android.dataframework.DataFramework;
import com.android.dataframework.Entity;
import com.javielinux.dialogs.AlertDialogFragment;
import com.javielinux.dialogs.EditColumnDialogFragment;
import com.javielinux.fragmentadapter.TweetTopicsFragmentAdapter;
import com.javielinux.fragments.BaseListFragment;
import com.javielinux.infos.InfoTweet;
import com.javielinux.notifications.OnAlarmReceiver;
import com.javielinux.task.IntentIntegrator;
import com.javielinux.task.IntentResult;
import com.javielinux.twitter.ConnectionManager;
import com.javielinux.utils.*;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;
import com.viewpagerindicator.TitlePageIndicator;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
public class TweetTopicsActivity extends BaseLayersActivity implements PopupLinks.PopupLinksListener, SplitActionBarMenu.SplitActionBarMenuListener {
private static String KEY_SAVE_STATE_COLUMN_POS = "KEY_SAVE_STATE_COLUMN_POS";
public static final String KEY_EXTRAS_GOTO_COLUMN_USER = "KEY_EXTRAS_GOTO_COLUMN_USER";
public static final String KEY_EXTRAS_GOTO_COLUMN_SEARCH = "KEY_EXTRAS_GOTO_COLUMN_SEARCH";
public static final String KEY_EXTRAS_GOTO_COLUMN_TYPE = "KEY_EXTRAS_GOTO_COLUMN_TYPE";
public static final String KEY_EXTRAS_GOTO_COLUMN_POSITION = "KEY_EXTRAS_GOTO_COLUMN_POSITION";
public static final String KEY_EXTRAS_GOTO_TWEET_ID = "KEY_EXTRAS_GOTO_TWEET_ID";
public static final int ACTIVITY_NEWEDITSEARCH = 0;
public static final int ACTIVITY_NEWSTATUS = 1;
public static final int ACTIVITY_TRENDS_LOCATION = 2;
public static final int ACTIVITY_EDIT_SEARCH = 3;
public static final int ACTIVITY_SHOW_USER_LISTS = 4;
private ViewPager pager;
private TweetTopicsFragmentAdapter fragmentAdapter;
private TitlePageIndicator indicator;
private ThemeManager themeManager;
private RelativeLayout layoutBackgroundApp;
private RelativeLayout layoutBackgroundBar;
private HorizontalScrollView horizontalScrollViewColumns;
private LinearLayout layoutBackgroundColumnsBarContainer;
private LinearLayout layoutBackgroundColumnsBar;
private boolean isShowColumnsItems = false;
private ImageView imgBarAvatar;
private ImageView imgBarAvatarBg;
private TextView imgBarCounter;
private ImageView imgNewStatus;
private LinearLayout layoutOptionsColumns;
private LinearLayout layoutMainOptionsColumns;
private Button btnOptionsColumnsMain;
private Button btnOptionsColumnsEdit;
private int widthScreen;
private int heightScreen;
private PopupLinks popupLinks;
private SplitActionBarMenu splitActionBarMenu;
private GestureDetector imgBarAvatarGestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
try {
DataFramework.getInstance().open(this, Utils.packageName);
} catch (Exception e) {
e.printStackTrace();
}
super.onCreate(savedInstanceState);
CacheData.getInstance().fillHide();
ConnectionManager.getInstance().open(this);
ConnectionManager.getInstance().loadUsers();
OnAlarmReceiver.callAlarm(this);
if (PreferenceUtils.getFinishForceClose(this)) {
PreferenceUtils.setFinishForceClose(this, false);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.title_crash);
builder.setMessage(R.string.msg_crash);
builder.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Utils.sendLastCrash(TweetTopicsActivity.this);
}
});
builder.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
builder.create();
builder.show();
}
Thread.UncaughtExceptionHandler currentHandler = Thread.getDefaultUncaughtExceptionHandler();
if (currentHandler != null) {
Thread.setDefaultUncaughtExceptionHandler(new ErrorReporter(currentHandler, getApplication()));
}
if (PreferenceManager.getDefaultSharedPreferences(this).getString("prf_orientation", "2").equals("2")) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
// borrar notificaciones
if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("prf_notif_delete_notifications_inside", true)) {
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancelAll();
}
long goToColumnPosition = -1;
int goToColumnType = -1;
long goToColumnUser = -1;
long goToColumnSearch = -1;
long selectedTweetId = -1;
Bundle extras = getIntent().getExtras();
if (extras != null) {
if (extras.containsKey(KEY_EXTRAS_GOTO_COLUMN_POSITION)) {
goToColumnPosition = extras.getLong(KEY_EXTRAS_GOTO_COLUMN_POSITION);
}
if (extras.containsKey(KEY_EXTRAS_GOTO_COLUMN_TYPE)) {
goToColumnType = extras.getInt(KEY_EXTRAS_GOTO_COLUMN_TYPE);
}
if (extras.containsKey(KEY_EXTRAS_GOTO_COLUMN_USER)) {
goToColumnUser = extras.getLong(KEY_EXTRAS_GOTO_COLUMN_USER);
}
if (extras.containsKey(KEY_EXTRAS_GOTO_COLUMN_SEARCH)) {
goToColumnSearch = extras.getLong(KEY_EXTRAS_GOTO_COLUMN_SEARCH);
}
if (extras.containsKey(KEY_EXTRAS_GOTO_TWEET_ID)) {
selectedTweetId = extras.getLong(KEY_EXTRAS_GOTO_TWEET_ID);
}
}
int positionFromSensor = -1;
if (savedInstanceState != null && savedInstanceState.containsKey(KEY_SAVE_STATE_COLUMN_POS)) {
positionFromSensor = savedInstanceState.getInt(KEY_SAVE_STATE_COLUMN_POS);
}
Utils.createDirectoriesIfIsNecessary();
Display display = getWindowManager().getDefaultDisplay();
widthScreen = display.getWidth();
heightScreen = display.getHeight();
themeManager = new ThemeManager(this);
themeManager.setTheme();
setContentView(R.layout.tweettopics_activity);
fragmentAdapter = new TweetTopicsFragmentAdapter(this, getSupportFragmentManager());
pager = (ViewPager) findViewById(R.id.tweet_pager);
pager.setAdapter(fragmentAdapter);
indicator = (TitlePageIndicator) findViewById(R.id.tweettopics_bar_indicator);
indicator.setFooterIndicatorStyle(TitlePageIndicator.IndicatorStyle.Triangle);
indicator.setFooterLineHeight(0);
indicator.setFooterColor(Color.WHITE);
indicator.setClipPadding(-getWindowManager().getDefaultDisplay().getWidth());
indicator.setViewPager(pager);
indicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
reloadBarAvatar();
if (i == 0) {
refreshMyActivity();
}
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
indicator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showActionBarColumns();
}
});
findViewById(R.id.tweettopics_bar_my_activity).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showActionBarIndicatorAndMovePager(0);
}
});
findViewById(R.id.tweettopics_bar_options).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showMenuColumnsOptions(view);
}
});
layoutOptionsColumns = (LinearLayout) findViewById(R.id.tweettopics_ll_options_columns);
layoutMainOptionsColumns = (LinearLayout) findViewById(R.id.tweettopics_ll_main_options_columns);
layoutMainOptionsColumns.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
hideOptionsColumns();
}
});
btnOptionsColumnsMain = (Button) findViewById(R.id.tweettopics_ll_options_columns_btn_main);
btnOptionsColumnsMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = Integer.valueOf(view.getTag().toString());
Toast.makeText(TweetTopicsActivity.this, getString(R.string.column_main_message, fragmentAdapter.setColumnActive(pos)), Toast.LENGTH_LONG).show();
hideOptionsColumns();
}
});
btnOptionsColumnsEdit = (Button) findViewById(R.id.tweettopics_ll_options_columns_btn_edit);
btnOptionsColumnsEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = Integer.valueOf(view.getTag().toString());
EditColumnDialogFragment frag = new EditColumnDialogFragment(fragmentAdapter.getFragmentList().get(pos), new Callable() {
@Override
public Object call() throws Exception {
refreshActionBarColumns();
return null;
}
});
frag.show(getSupportFragmentManager(), "dialog");
hideOptionsColumns();
}
});
// cargar el popup de enlaces
FrameLayout root = ((FrameLayout) findViewById(R.id.tweettopics_root));
popupLinks = new PopupLinks(this);
popupLinks.loadPopup(root);
splitActionBarMenu = new SplitActionBarMenu(this);
splitActionBarMenu.loadSplitActionBarMenu(root);
layoutBackgroundApp = (RelativeLayout) findViewById(R.id.tweettopics_layout_background_app);
layoutBackgroundBar = (RelativeLayout) findViewById(R.id.tweettopics_bar_background);
horizontalScrollViewColumns = (HorizontalScrollView) findViewById(R.id.tweettopics_bar_horizontal_scroll);
layoutBackgroundColumnsBarContainer = (LinearLayout) findViewById(R.id.tweettopics_bar_columns_container);
layoutBackgroundColumnsBar = (LinearLayout) findViewById(R.id.tweettopics_bar_columns);
// layoutBackgroundColumnsBar.setCols(4);
//
// layoutBackgroundColumnsBar.setOnRearrangeListener(new OnRearrangeListener() {
// public void onRearrange(int oldIndex, int newIndex) {
// reorganizeColumns(oldIndex, newIndex);
// }
//
// @Override
// public void onStartDrag(int x, int index) {
// showOptionsColumns(x, index, true);
// }
//
// @Override
// public void onMoveDragged(int index) {
// hideOptionsColumns();
// }
//
// });
// layoutBackgroundColumnsBar.setOnItemClickListener(new AdapterView.OnItemClickListener() {
// @Override
// public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// showActionBarIndicatorAndMovePager(position);
// }
// });
imgBarAvatar = (ImageView) findViewById(R.id.tweettopics_bar_avatar);
imgBarAvatarBg = (ImageView) findViewById(R.id.tweettopics_bar_avatar_bg);
imgBarCounter = (TextView) findViewById(R.id.tweettopics_bar_counter);
imgNewStatus = (ImageView) findViewById(R.id.tweettopics_bar_new_status);
imgNewStatus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
newStatus();
}
});
imgBarAvatarGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
@Override
public void onLongPress(MotionEvent e) {
if (fragmentAdapter.instantiateItem(pager, pager.getCurrentItem()) instanceof BaseListFragment) {
((BaseListFragment) fragmentAdapter.instantiateItem(pager, pager.getCurrentItem())).goToTop();
}
}
@Override
public boolean onDoubleTap(MotionEvent e) {
if (fragmentAdapter.instantiateItem(pager, pager.getCurrentItem()) instanceof BaseListFragment) {
((BaseListFragment) fragmentAdapter.instantiateItem(pager, pager.getCurrentItem())).goToTop();
}
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
animateDragged();
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
});
imgBarAvatarBg.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return imgBarAvatarGestureDetector.onTouchEvent(motionEvent);
}
});
refreshTheme();
reloadBarAvatar();
refreshActionBarColumns();
if (goToColumnType >= 0) {
if ((goToColumnType == TweetTopicsUtils.COLUMN_TIMELINE
|| goToColumnType == TweetTopicsUtils.COLUMN_MENTIONS
|| goToColumnType == TweetTopicsUtils.COLUMN_DIRECT_MESSAGES) && goToColumnUser >= 0) {
openUserColumn(goToColumnUser, goToColumnType);
}
if (goToColumnType == TweetTopicsUtils.COLUMN_SEARCH && goToColumnSearch > 0) {
openSearchColumn(new Entity("search", goToColumnSearch));
}
} else if (goToColumnType == TweetTopicsUtils.COLUMN_MY_ACTIVITY) {
} else if (goToColumnPosition > 0) {
goToColumn((int) goToColumnPosition, false, selectedTweetId);
} else if (positionFromSensor >= 0) {
goToColumn(positionFromSensor, false, selectedTweetId);
} else {
int col = fragmentAdapter.getPositionColumnActive();
if (col > 0) goToColumn(col, false, selectedTweetId);
}
// comprobar si hay que proponer ir al market
int access_count = PreferenceUtils.getApplicationAccessCount(this);
if (access_count <= 20) {
if (access_count == 20) {
try {
AlertDialog dialog = DialogUtils.RateAppDialogBuilder.create(this);
dialog.show();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
PreferenceUtils.setApplicationAccessCount(this, access_count + 1);
}
PreferenceUtils.showChangeLog(this, true);
}
private void showMenuColumnsOptions(View view) {
final List<String> list = new ArrayList<String>();
final List<Long> types = new ArrayList<Long>();
ArrayList<Entity> userEntityList = DataFramework.getInstance().getEntityList("users", "service is null or service = \"twitter.com\"");
for (Entity user : userEntityList) {
list.add(getString(R.string.addColumnUser, user.getString("name")));
types.add(user.getId());
}
list.add(getString(R.string.addTrendingTopic));
types.add(1001L);
list.add(getString(R.string.addSavedTweet));
types.add(1002L);
list.add(getString(R.string.sortColumns));
types.add(1003L);
list.add(getString(R.string.removeColumns));
types.add(1004L);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
PopupMenu popupMenu = new PopupMenu(this, view);
int count = 0;
for (String item : list) {
popupMenu.getMenu().add(Menu.NONE, count, Menu.NONE, item);
count++;
}
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
long id = types.get(item.getItemId());
String title = list.get(item.getItemId());
switch ((int) id) {
case 1001:
newTrending();
break;
case 1002:
openSavedTweetColumn();
break;
case 1003:
goToSortColumns();
break;
case 1004:
goToRemoveColumns();
break;
default:
showActionBarIndicatorAndMovePager(-1);
showDialogAddColumnUser(title, id);
break;
}
return true;
}
});
popupMenu.show();
} else {
AlertDialogFragment frag = new AlertDialogFragment();
Bundle args = new Bundle();
args.putInt(AlertDialogFragment.KEY_ALERT_TITLE, R.string.actions);
args.putBoolean(AlertDialogFragment.KEY_ALERT_HAS_POSITIVE_BUTTON, false);
args.putBoolean(AlertDialogFragment.KEY_ALERT_CANCELABLE, false);
args.putStringArrayList(AlertDialogFragment.KEY_ALERT_ARRAY_STRING_ITEMS, (ArrayList<String>) list);
frag.setArguments(args);
frag.setAlertButtonListener(new AlertDialogFragment.AlertButtonListener() {
@Override
public void OnAlertButtonOk() {
}
@Override
public void OnAlertButtonCancel() {
}
@Override
public void OnAlertButtonNeutral() {
}
@Override
public void OnAlertItems(int which) {
long id = types.get(which);
String title = list.get(which);
switch ((int) id) {
case 1001:
newTrending();
break;
case 1002:
openSavedTweetColumn();
break;
case 1003:
goToSortColumns();
break;
case 1004:
goToRemoveColumns();
break;
default:
showActionBarIndicatorAndMovePager(-1);
showDialogAddColumnUser(title, id);
break;
}
}
});
frag.show(getSupportFragmentManager(), "dialog");
}
}
private void showDialogAddColumnUser(String title, final long userId) {
AlertDialogFragment frag = new AlertDialogFragment();
Bundle args = new Bundle();
args.putString(AlertDialogFragment.KEY_ALERT_TITLE_TEXT, title);
args.putBoolean(AlertDialogFragment.KEY_ALERT_HAS_POSITIVE_BUTTON, false);
args.putBoolean(AlertDialogFragment.KEY_ALERT_CANCELABLE, false);
args.putInt(AlertDialogFragment.KEY_ALERT_ARRAY_ITEMS, R.array.popupmenu_user_columns);
frag.setArguments(args);
frag.setAlertButtonListener(new AlertDialogFragment.AlertButtonListener() {
@Override
public void OnAlertButtonOk() {
}
@Override
public void OnAlertButtonCancel() {
}
@Override
public void OnAlertButtonNeutral() {
}
@Override
public void OnAlertItems(int which) {
if (which == 0) {
openUserColumn(userId, TweetTopicsUtils.COLUMN_TIMELINE);
} else if (which == 1) {
openUserColumn(userId, TweetTopicsUtils.COLUMN_MENTIONS);
} else if (which == 2) {
openUserColumn(userId, TweetTopicsUtils.COLUMN_DIRECT_MESSAGES);
} else if (which == 3) {
createUserList(userId);
}
}
});
frag.show(getSupportFragmentManager(), "dialog");
}
protected void animateDragged() {
View view = imgBarAvatar;
float x = 0;
try {
x = imgBarAvatar.getX();
} catch (NoSuchMethodError e) {
}
if (pager.getCurrentItem() == 0) {
btnOptionsColumnsEdit.setVisibility(View.GONE);
} else {
btnOptionsColumnsEdit.setVisibility(View.VISIBLE);
}
view.layout(imgBarAvatar.getLeft(), imgBarAvatar.getTop(), imgBarAvatar.getRight(), imgBarAvatar.getBottom());
AnimationSet animSet = new AnimationSet(true);
ScaleAnimation scale = new ScaleAnimation(.667f, 1, .667f, 1, imgBarAvatar.getHeight() * 3 / 4, imgBarAvatar.getWidth() * 3 / 4);
scale.setDuration(150);
animSet.addAnimation(scale);
animSet.setFillEnabled(true);
animSet.setFillAfter(true);
view.clearAnimation();
view.startAnimation(animSet);
showOptionsColumns((int) x, pager.getCurrentItem(), false);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (scanResult != null) {
String result = scanResult.getContents();
if (result != null) {
if (result.startsWith("tweettopics%%qr")) {
importSearch(result);
}
if (result.startsWith("tweettopics%%theme")) {
importTheme(result);
}
} else {
Utils.showMessage(this, getString(R.string.error_general));
}
}
switch (requestCode) {
case ACTIVITY_NEWEDITSEARCH:
if (data != null && data.getExtras() != null && data.getExtras().containsKey("view")) {
boolean create_column = data.getExtras().getBoolean("view", false);
if (create_column) {
final int count = ColumnsUtils.nextPositionColumn();
Entity type = new Entity("type_columns", (long) TweetTopicsUtils.COLUMN_SEARCH);
Entity search = new Entity("columns");
search.setValue("description", type.getString("description"));
search.setValue("type_id", type);
search.setValue("position", count);
search.setValue("search_id", data.getLongExtra(DataFramework.KEY_ID, -1));
search.save();
goToColumn(count, true, -1);
} else {
getFragmentPagerAdapter().getMyActivityFragment().fillData();
}
}
break;
case ACTIVITY_TRENDS_LOCATION:
if (resultCode == Activity.RESULT_OK) {
goToColumn(data.getIntExtra("position", 0), true, -1);
}
break;
case ACTIVITY_EDIT_SEARCH:
if (data != null && data.getExtras() != null && data.getExtras().containsKey("view")) {
boolean view_column = data.getExtras().getBoolean("view", false);
if (view_column) {
Entity search_entity = new Entity("search", data.getLongExtra(DataFramework.KEY_ID, -1));
openSearchColumn(search_entity);
}
}
break;
case ACTIVITY_SHOW_USER_LISTS:
if (resultCode == Activity.RESULT_OK && data != null) {
final int position = data.getIntExtra("position", 0);
Handler myHandler = new Handler();
myHandler.postDelayed(new Runnable() {
@Override
public void run() {
getFragmentPagerAdapter().refreshColumnList();
refreshActionBarColumns();
getViewPager().setCurrentItem(position, false);
}
}, 100);
}
break;
}
}
@Override
public void onDestroy() {
super.onDestroy();
DataFramework.getInstance().close();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isShowOptionsColumns()) {
hideOptionsColumns();
return false;
}
if (popupLinks.isShowLinks()) {
popupLinks.hideLinks();
return false;
}
if (splitActionBarMenu.isShowing()) {
splitActionBarMenu.hideSplitActionBarMenu();
return false;
}
if (isShowColumnsItems) {
showActionBarIndicatorAndMovePager(-1);
return false;
}
}
if (keyCode == KeyEvent.KEYCODE_MENU) {
goToColumn(0, false, -1);
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onShowLinks(View view, InfoTweet infoTweet) {
popupLinks.showLinks(view, infoTweet);
}
@Override
public void onShowSplitActionBarMenu(BaseListFragment fragment, InfoTweet infoTweet) {
splitActionBarMenu.showSplitActionBarMenu(fragment, infoTweet, getUserOwnerCurrentColumn());
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt(KEY_SAVE_STATE_COLUMN_POS, pager.getCurrentItem());
super.onSaveInstanceState(outState);
}
public ViewPager getViewPager() {
return pager;
}
public TweetTopicsFragmentAdapter getFragmentPagerAdapter() {
return fragmentAdapter;
}
/*
ACTIONS
*/
public void goToColumn(final int position, final boolean refreshBarColumn, final long selectedTweetId) {
Handler myHandler = new Handler();
myHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (refreshBarColumn) {
refreshColumns();
}
pager.setCurrentItem(position, false);
if (fragmentAdapter.instantiateItem(pager, pager.getCurrentItem()) instanceof BaseListFragment) {
((BaseListFragment) fragmentAdapter.instantiateItem(pager, pager.getCurrentItem())).selected_tweet_id = selectedTweetId;
}
}
}, 100);
}
public void refreshColumns() {
fragmentAdapter.refreshColumnList();
refreshActionBarColumns();
}
public void openSearchColumn(Entity clickSearch) {
final ArrayList<Entity> created_column_list = DataFramework.getInstance().getEntityList("columns", "search_id=" + clickSearch.getId());
if (created_column_list.size() == 0) {
final int position = ColumnsUtils.nextPositionColumn();
Entity type = new Entity("type_columns", (long) TweetTopicsUtils.COLUMN_SEARCH);
Entity search = new Entity("columns");
search.setValue("description", type.getString("description"));
search.setValue("type_id", type);
search.setValue("position", position);
search.setValue("search_id", clickSearch.getId());
search.save();
Toast.makeText(this, getString(R.string.column_created, clickSearch.getString("name")), Toast.LENGTH_LONG).show();
Handler myHandler = new Handler();
myHandler.postDelayed(new Runnable() {
@Override
public void run() {
getFragmentPagerAdapter().refreshColumnList();
getViewPager().setCurrentItem(position, false);
}
}, 100);
} else {
Handler myHandler = new Handler();
myHandler.postDelayed(new Runnable() {
@Override
public void run() {
getViewPager().setCurrentItem(created_column_list.get(0).getInt("position"), false);
}
}, 100);
}
}
public void createUserList(long idUser) {
Intent userLists = new Intent(this, UserListsActivity.class);
userLists.putExtra(DataFramework.KEY_ID, idUser);
startActivityForResult(userLists, ACTIVITY_SHOW_USER_LISTS);
}
public void openUserColumn(long userId, int typeId) {
ArrayList<Entity> created_column_list = DataFramework.getInstance().getEntityList("columns", "user_id=" + userId + " AND type_id = " + typeId);
int position = 0;
if (created_column_list.size() == 0) {
position = ColumnsUtils.nextPositionColumn();
Entity user_list = new Entity("columns");
user_list.setValue("type_id", typeId);
user_list.setValue("position", position);
user_list.setValue("user_id", userId);
user_list.save();
goToColumn(position, true, -1);
} else {
position = created_column_list.get(0).getInt("position");
goToColumn(position, false, -1);
}
}
public void openSavedTweetColumn() {
ArrayList<Entity> created_column_list = DataFramework.getInstance().getEntityList("columns", "type_id = " + TweetTopicsUtils.COLUMN_SAVED_TWEETS);
int position = 0;
if (created_column_list.size() == 0) {
position = ColumnsUtils.nextPositionColumn();
Entity user_list = new Entity("columns");
user_list.setValue("type_id", TweetTopicsUtils.COLUMN_SAVED_TWEETS);
user_list.setValue("position", position);
user_list.setValue("user_id", -1);
user_list.save();
goToColumn(position, true, -1);
} else {
position = created_column_list.get(0).getInt("position");
goToColumn(position, false, -1);
}
}
public void deleteSearchInColumn(long id) {
for (Entity entity : fragmentAdapter.getFragmentList()) {
if (entity.getInt("search_id") == id) {
entity.delete();
}
}
fragmentAdapter.fillColumnList();
}
private boolean deleteColumn(final int position) {
Entity deleted_column = null;
try {
deleted_column = DataFramework.getInstance().getEntityList("columns", "", "position asc").get(position - 1);
} catch (IndexOutOfBoundsException e) {
} catch (Exception e) {
}
boolean result = false;
if (deleted_column != null) {
result = deleted_column.delete();
if (result) {
DataFramework.getInstance().getDB().execSQL("UPDATE columns SET position=position-1 WHERE position>" + position);
Handler myHandler = new Handler();
myHandler.postDelayed(new Runnable() {
@Override
public void run() {
fragmentAdapter.refreshColumnList();
showActionBarIndicatorAndMovePager(pager.getCurrentItem());
refreshActionBarColumns();
/*if (pager.getCurrentItem() == position) {
if (position == fragmentAdapter.getCount())
pager.setCurrentItem(position - 1, false);
else
pager.setCurrentItem(position, false);
} */
}
}, 100);
}
}
return result;
}
public void editSearch(Entity search) {
Intent edit_search = new Intent(this, SearchActivity.class);
edit_search.putExtra(DataFramework.KEY_ID, search.getId());
startActivityForResult(edit_search, ACTIVITY_EDIT_SEARCH);
}
public void newSearch() {
Intent newsearch = new Intent(this, SearchActivity.class);
startActivityForResult(newsearch, ACTIVITY_NEWEDITSEARCH);
}
public void goToSortColumns() {
Intent sortIntent = new Intent(TweetTopicsActivity.this, SortColumnsActivity.class);
startActivity(sortIntent);
}
public void goToRemoveColumns() {
Intent removeIntent = new Intent(TweetTopicsActivity.this, RemoveColumnsActivity.class);
startActivity(removeIntent);
}
public void newTrending() {
Intent trendslocation_intent = new Intent(this, TrendsLocationActivity.class);
startActivityForResult(trendslocation_intent, TweetTopicsActivity.ACTIVITY_TRENDS_LOCATION);
}
public void newStatus() {
Intent newstatus = new Intent(this, NewStatusActivity.class);
newstatus.putExtra("start_user_id", getUserOwnerCurrentColumn());
startActivityForResult(newstatus, ACTIVITY_NEWSTATUS);
}
public long getUserOwnerCurrentColumn() {
return fragmentAdapter.getUserOwnerColumn(pager.getCurrentItem());
}
public void importSearch(String text) {
if (Utils.importSearch(this, text)) {
Utils.showMessage(this, getString(R.string.import_correct));
refreshMyActivity();
} else {
Utils.showMessage(this, getString(R.string.import_no_correct));
}
}
public void importTheme(String text) {
if (Utils.importTheme(this, text)) {
Utils.showMessage(this, getString(R.string.import_correct));
refreshTheme();
} else {
Utils.showMessage(this, getString(R.string.import_no_correct));
}
}
// private Bitmap getThumb(String s) {
// Bitmap bmp = Bitmap.createBitmap(150, 150, Bitmap.Config.RGB_565);
// Canvas canvas = new Canvas(bmp);
// Paint paint = new Paint();
// Random random = new Random();
// paint.setColor(Color.rgb(random.nextInt(128), random.nextInt(128), random.nextInt(128)));
// paint.setTextSize(24);
// paint.setFlags(Paint.ANTI_ALIAS_FLAG);
// canvas.drawRect(new Rect(0, 0, 150, 150), paint);
// paint.setColor(Color.WHITE);
// paint.setTextAlign(Paint.Align.CENTER);
// canvas.drawText(s, 75, 75, paint);
//
// return bmp;
// }
public void refreshActionBarColumns() {
int currentPosition = pager.getCurrentItem();
layoutBackgroundColumnsBar.removeAllViews();
int padding = (int) getResources().getDimension(R.dimen.default_padding);
//int sizeButton = (int) getResources().getDimension(R.dimen.actionbar_columns_height);
for (int i = 1; i < fragmentAdapter.getFragmentList().size(); i++) {
ImageView view = new ImageView(this);
view.setPadding(padding, padding, padding, padding);
view.setImageBitmap(ColumnsUtils.getButtonWithTitle(this, fragmentAdapter.getFragmentList().get(i), true, currentPosition == i ? Color.GREEN : Color.BLACK));
view.setTag(i);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (layoutMainOptionsColumns.getVisibility() != View.VISIBLE) {
showActionBarIndicatorAndMovePager((Integer) view.getTag());
}
}
});
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
int pos = (Integer)view.getTag();
int[] loc = new int[2];
view.getLocationOnScreen(loc);
showOptionsColumns(loc[0], pos, true);
return false;
}
});
layoutBackgroundColumnsBar.addView(view);
}
}
public void refreshMyActivity() {
try {
fragmentAdapter.getMyActivityFragment().fillData();
} catch (NullPointerException e) {
}
}
public void refreshTheme() {
layoutBackgroundApp.setBackgroundColor(Color.parseColor("#" + themeManager.getStringColor("color_background_new_status")));
themeManager.setColors();
layoutBackgroundBar.setBackgroundDrawable(ImageUtils.createBackgroundDrawable(this, themeManager.getColor("color_top_bar"), false, 0));
layoutBackgroundColumnsBarContainer.setBackgroundDrawable(ImageUtils.createBackgroundDrawable(this, themeManager.getColor("color_top_bar"), false, 0));
StateListDrawable statesButtonBg = new StateListDrawable();
statesButtonBg.addState(new int[]{android.R.attr.state_pressed}, ImageUtils.createBackgroundDrawable(this, themeManager.getColor("color_button_press_default"), false, 0));
statesButtonBg.addState(new int[]{-android.R.attr.state_pressed}, ImageUtils.createBackgroundDrawable(this, themeManager.getColor("color_top_bar"), false, 0));
imgBarAvatarBg.setBackgroundDrawable(statesButtonBg);
StateListDrawable statesButton = new StateListDrawable();
statesButton.addState(new int[]{android.R.attr.state_pressed}, ImageUtils.createBackgroundDrawable(this, themeManager.getColor("color_button_press_default"), false, 0));
statesButton.addState(new int[]{-android.R.attr.state_pressed}, ImageUtils.createBackgroundDrawable(this, themeManager.getColor("color_top_bar"), false, 0));
imgNewStatus.setBackgroundDrawable(statesButton);
float size = getResources().getDimension(R.dimen.actionbar_height) - Utils.dip2px(this, 12);
imgBarCounter.setBackgroundDrawable(new BitmapDrawable(getResources(), ImageUtils.getBackgroundBitmapInBubble(this, Color.RED, Utils.TYPE_RECTANGLE, size, size)));
//(findViewById(R.id.tweettopics_bar_divider1)).setBackgroundDrawable(ImageUtils.createBackgroundDrawable(this, themeManager.getColor("color_top_bar"), false, 0));
//(findViewById(R.id.tweettopics_bar_divider2)).setBackgroundDrawable(ImageUtils.createBackgroundDrawable(this, themeManager.getColor("color_top_bar"), false, 0));
Drawable d = new ColorDrawable(android.R.color.transparent);
StateListDrawable states = new StateListDrawable();
states.addState(new int[]{android.R.attr.state_pressed}, d);
states.addState(new int[]{android.R.attr.state_window_focused}, d);
states.addState(new int[]{android.R.attr.state_pressed}, d);
states.addState(new int[]{android.R.attr.state_selected}, d);
states.addState(new int[]{android.R.attr.color}, new ColorDrawable(themeManager.getColor("color_indicator_text")));
indicator.setBackgroundDrawable(states);
indicator.setTextSize(getResources().getDimension(R.dimen.text_size_title_page_indicator));
}
public void reloadBarAvatar() {
int position = pager.getCurrentItem();
int column_type = fragmentAdapter.getFragmentList().get(position).getInt("type_id");
int tweets_count = 0;
if (column_type == TweetTopicsUtils.COLUMN_TIMELINE ||
column_type == TweetTopicsUtils.COLUMN_MENTIONS ||
column_type == TweetTopicsUtils.COLUMN_DIRECT_MESSAGES) {
tweets_count = DBUtils.getUnreadTweetsUser(column_type,
fragmentAdapter.getFragmentList().get(position).getEntity("user_id").getId());
}
if (column_type == TweetTopicsUtils.COLUMN_SEARCH) {
tweets_count = DBUtils.getUnreadTweetsSearch(
fragmentAdapter.getFragmentList().get(position).getEntity("search_id").getId());
}
if (tweets_count > 0) {
imgBarAvatar.setVisibility(View.GONE);
imgBarCounter.setVisibility(View.VISIBLE);
imgBarCounter.setText(tweets_count + "");
} else {
imgBarAvatar.setVisibility(View.VISIBLE);
imgBarCounter.setVisibility(View.GONE);
Bitmap bmp = fragmentAdapter.getIconItem(pager.getCurrentItem());
if (bmp == null) {
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon_dolphin);
}
imgBarAvatar.setImageBitmap(bmp);
}
}
public void showActionBarColumns() {
refreshActionBarColumns();
isShowColumnsItems = true;
// TODO mover a la posición donde está la columna
// layoutBackgroundColumnsBar.scrollToView(pager.getCurrentItem());
// horizontalScrollViewColumns.scrollTo(150, 0);
// horizontalScrollViewColumns.computeScroll();
layoutBackgroundColumnsBarContainer.setVisibility(View.VISIBLE);
int movePager = (int) getResources().getDimension(R.dimen.actionbar_columns_height) - (int) getResources().getDimension(R.dimen.actionbar_height);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
RelativeLayout.LayoutParams lpPager = (RelativeLayout.LayoutParams) pager.getLayoutParams();
lpPager.setMargins(0, lpPager.topMargin + movePager, 0, 0);
pager.requestLayout();
layoutBackgroundBar.setVisibility(View.GONE);
} else {
ObjectAnimator translationPager = ObjectAnimator.ofFloat(pager, "translationY", 0f, movePager);
translationPager.setDuration(250);
ObjectAnimator translationOut = ObjectAnimator.ofFloat(layoutBackgroundBar, "translationY", 0f, -getResources().getDimension(R.dimen.actionbar_height));
translationOut.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(translationOut, translationPager);
animatorSet.start();
}
}
public void showActionBarIndicatorAndMovePager(final int pos) {
isShowColumnsItems = false;
int movePager = (int) getResources().getDimension(R.dimen.actionbar_columns_height) - (int) getResources().getDimension(R.dimen.actionbar_height);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
RelativeLayout.LayoutParams lpPager = (RelativeLayout.LayoutParams) pager.getLayoutParams();
lpPager.setMargins(0, lpPager.topMargin - movePager, 0, 0);
pager.requestLayout();
layoutBackgroundBar.setVisibility(View.VISIBLE);
layoutBackgroundColumnsBarContainer.setVisibility(View.GONE);
if (pos >= 0) {
goToColumn(pos, false, -1);
}
} else {
ObjectAnimator translationIn = ObjectAnimator.ofFloat(layoutBackgroundBar, "translationY", -getResources().getDimension(R.dimen.actionbar_height), 0f);
translationIn.setDuration(250);
ObjectAnimator translationPager = ObjectAnimator.ofFloat(pager, "translationY", movePager, 0f);
translationPager.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(translationPager, translationIn);
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
layoutBackgroundColumnsBarContainer.setVisibility(View.GONE);
if (pos >= 0) {
goToColumn(pos, false, -1);
}
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
animatorSet.start();
}
}
/*
SHOW OPTIONS COMLUMNS
*/
public void showOptionsColumns(int positionX, int index, boolean action_bar_opened) {
int x = positionX - (layoutOptionsColumns.getWidth() / 2);
if (x < 0) x = 0;
if (x > widthScreen - layoutOptionsColumns.getWidth()) x = widthScreen - layoutOptionsColumns.getWidth();
int y = -1;
if (action_bar_opened)
y = (int) getResources().getDimension(R.dimen.actionbar_columns_height) - Utils.dip2px(this, 20);
else
y = (int) getResources().getDimension(R.dimen.actionbar_height) - Utils.dip2px(this, 20);
int xCenterView = x;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(x, y, 0, 0);
layoutOptionsColumns.setLayoutParams(params);
layoutMainOptionsColumns.setVisibility(View.VISIBLE);
btnOptionsColumnsMain.setTag(index);
btnOptionsColumnsEdit.setTag(index);
ObjectAnimator translationX = ObjectAnimator.ofFloat(layoutOptionsColumns, "translationX", xCenterView - x, 0f);
translationX.setDuration(150);
ObjectAnimator scaleX = ObjectAnimator.ofFloat(layoutOptionsColumns, "scaleX", 0f, 1f);
scaleX.setDuration(150);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(layoutOptionsColumns, "scaleY", 0f, 1f);
scaleY.setDuration(150);
ObjectAnimator fadeAnim = ObjectAnimator.ofFloat(layoutOptionsColumns, "alpha", 0f, 1f);
fadeAnim.setDuration(150);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(translationX, scaleX, scaleY, fadeAnim);
animatorSet.start();
}
public void hideOptionsColumns() {
ObjectAnimator scaleX = ObjectAnimator.ofFloat(layoutOptionsColumns, "scaleX", 1f, 0f);
scaleX.setDuration(150);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(layoutOptionsColumns, "scaleY", 1f, 0f);
scaleY.setDuration(150);
ObjectAnimator fadeAnim = ObjectAnimator.ofFloat(layoutOptionsColumns, "alpha", 1f, 0f);
fadeAnim.setDuration(150);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(scaleX, scaleY, fadeAnim);
animatorSet.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
layoutMainOptionsColumns.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
animatorSet.start();
}
public boolean isShowOptionsColumns() {
return layoutMainOptionsColumns.getVisibility() == View.VISIBLE;
}
}