/*
* 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.ProgressDialog;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.*;
import com.android.dataframework.DataFramework;
import com.android.dataframework.Entity;
import com.javielinux.adapters.RowUserListsAdapter;
import com.javielinux.api.APIDelegate;
import com.javielinux.api.APITweetTopics;
import com.javielinux.api.loaders.GetUserListLoader;
import com.javielinux.api.request.CreateUserListsRequest;
import com.javielinux.api.request.GetUserListRequest;
import com.javielinux.api.response.BaseResponse;
import com.javielinux.api.response.ErrorResponse;
import com.javielinux.api.response.GetUserListResponse;
import com.javielinux.dialogs.AlertDialogFragment;
import com.javielinux.dialogs.CreateListTwitterDialogFragment;
import com.javielinux.preferences.Preferences;
import com.javielinux.utils.ColumnsUtils;
import com.javielinux.utils.ImageUtils;
import com.javielinux.utils.TweetTopicsUtils;
import com.javielinux.utils.Utils;
import twitter4j.UserList;
import java.io.File;
import java.util.ArrayList;
public class UserListsActivity extends BaseActivity implements APIDelegate<BaseResponse> {
private Entity user_entity;
private RowUserListsAdapter userListsAdapter;
private ArrayList<UserList> userListArrayList;
private int type_id;
private long user_id;
private String screenName;
private long nextCursor;
private boolean loadingMoreUserList;
private ThemeManager themeManager;
private LinearLayout mLayoutBackgroundApp;
private LinearLayout viewNoLists;
private LinearLayout viewLoading;
private LinearLayout viewNoInternet;
private LinearLayout viewLoadMore;
private LinearLayout viewLoadMoreLoading;
private GridView viewUserLists;
private Button buttonLoadMore;
private RelativeLayout layoutActionBar;
private TextView titlePage;
public void refreshTheme() {
boolean hasWallpaper = false;
File f = new File(Preferences.IMAGE_WALLPAPER);
if (f.exists()) {
try {
BitmapDrawable bmp = (BitmapDrawable) BitmapDrawable.createFromPath(Preferences.IMAGE_WALLPAPER);
bmp.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
mLayoutBackgroundApp.setBackgroundDrawable(bmp);
hasWallpaper = true;
} catch (OutOfMemoryError e) {
e.printStackTrace();
}
}
if (!hasWallpaper) {
mLayoutBackgroundApp.setBackgroundColor(Color.parseColor("#" + themeManager.getStringColor("color_background_new_status")));
}
themeManager.setColors();
layoutActionBar.setBackgroundDrawable(ImageUtils.createBackgroundDrawable(this, themeManager.getColor("color_top_bar"), false, 0));
titlePage.setTextColor(themeManager.getColor("color_indicator_text"));
titlePage.setTextSize(getResources().getDimension(R.dimen.text_size_title_page));
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
DataFramework.getInstance().open(this, Utils.packageName);
} catch (Exception e) {
e.printStackTrace();
}
user_id = -1;
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(DataFramework.KEY_ID))
user_id = savedInstanceState.getLong(DataFramework.KEY_ID);
if (savedInstanceState.containsKey("screenName"))
screenName = savedInstanceState.getString("screenName");
} else {
Bundle extras = getIntent().getExtras();
if (extras != null) {
if (extras.containsKey(DataFramework.KEY_ID)) user_id = extras.getLong(DataFramework.KEY_ID);
if (extras.containsKey("screenName")) screenName = extras.getString("screenName");
}
}
if (user_id < 0 && screenName == "") {
Utils.showMessage(this, R.string.error_general);
finish();
}
if (user_id >= 0) {
user_entity = new Entity("users", user_id);
screenName = user_entity.getString("name");
}
nextCursor = -1;
loadingMoreUserList = false;
themeManager = new ThemeManager(this);
themeManager.setTheme();
setContentView(R.layout.userlists_activity);
mLayoutBackgroundApp = (LinearLayout) this.findViewById(R.id.user_lists_parent);
layoutActionBar = (RelativeLayout) findViewById(R.id.user_list_bar_action);
titlePage = (TextView) this.findViewById(R.id.user_list_bar_title);
titlePage.setText(getString(R.string.user_list) + ": @" + screenName);
refreshTheme();
viewNoLists = (LinearLayout) this.findViewById(R.id.user_lists_view_no_lists);
viewLoading = (LinearLayout) this.findViewById(R.id.user_lists_view_loading);
viewNoInternet = (LinearLayout) this.findViewById(R.id.user_lists_view_no_internet);
viewUserLists = (GridView) this.findViewById(R.id.grid_userlist);
viewLoadMore = (LinearLayout) this.findViewById(R.id.user_lists_load_more);
viewLoadMoreLoading = (LinearLayout) this.findViewById(R.id.user_lists_load_more_view_loading);
buttonLoadMore = (Button) this.findViewById(R.id.but_user_lists_load_more);
findViewById(R.id.user_list_selection).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
type_id = GetUserListLoader.OWN_LISTS;
loadingMoreUserList = false;
reload();
}
});
findViewById(R.id.user_following_list_selection).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
type_id = GetUserListLoader.MEMBERSHIP_LIST;
loadingMoreUserList = false;
reload();
}
});
ImageView bOptions = (ImageView) findViewById(R.id.user_list_more_options);
if (user_id >= 0) {
bOptions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showMenuOptions(v);
}
});
} else {
bOptions.setVisibility(View.GONE);
}
findViewById(R.id.user_list_bar_icon).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserListsActivity.this.finish();
}
});
findViewById(R.id.but_user_lists_load_more).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadingMoreUserList = true;
reload();
}
});
userListArrayList = new ArrayList<UserList>();
userListsAdapter = new RowUserListsAdapter(this, userListArrayList);
GridView gridUserList = (GridView)this.findViewById(R.id.grid_userlist);
gridUserList.setAdapter(userListsAdapter);
gridUserList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
UserList userList = userListsAdapter.getItem(pos);
createUserListsColumn(userList);
}
});
gridUserList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) {
return true;
}
});
type_id = GetUserListLoader.OWN_LISTS;
reload();
}
private void showDialogNewList() {
CreateListTwitterDialogFragment frag = new CreateListTwitterDialogFragment(new CreateListTwitterDialogFragment.CreateListListener() {
@Override
public void onCreateList(String title, String description, boolean isPublic) {
createNewList(title, description, isPublic);
}
});
frag.show(getSupportFragmentManager(), "dialog");
}
private void createNewList(String title, String description, boolean isPublic) {
final ProgressDialog progressDialog = ProgressDialog.show(
this,
this.getResources().getString(R.string.loading),
this.getResources().getString(R.string.loading)
);
APITweetTopics.execute(UserListsActivity.this, getSupportLoaderManager(), new APIDelegate() {
@Override
public void onResults(BaseResponse result) {
progressDialog.dismiss();
type_id = GetUserListLoader.OWN_LISTS;
loadingMoreUserList = false;
reload();
Utils.showMessage(UserListsActivity.this, R.string.created_list_message);
}
@Override
public void onError(ErrorResponse error) {
progressDialog.dismiss();
Utils.showMessage(UserListsActivity.this, R.string.error_general);
}
}, new CreateUserListsRequest(user_id, title, description, isPublic));
}
private void showMenuOptions(View view) {
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
PopupMenu popupMenu = new PopupMenu(this, view);
popupMenu.getMenuInflater().inflate(R.menu.list_users_more_actions, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.popupmenu_list_user_update) {
showDialogNewList();
}
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.putInt(AlertDialogFragment.KEY_ALERT_ARRAY_ITEMS, R.array.popupmenu_list_users_more_options);
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) {
showDialogNewList();
}
}
});
frag.show(getSupportFragmentManager(), "dialog");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
DataFramework.getInstance().close();
}
@Override
public void onError(ErrorResponse error) {
error.getError().printStackTrace();
showNoInternet();
Utils.showMessage(this,error.getMsgError());
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void onResults(BaseResponse response) {
if (!loadingMoreUserList) {
userListArrayList.clear();
}
GetUserListResponse result = (GetUserListResponse)response;
nextCursor = result.getNextCursor();
userListArrayList.addAll(result.getUserListArrayList());
viewLoadMoreLoading.setVisibility(View.GONE);
if (nextCursor > 0) {
showButtonLoadMore();
userListsAdapter.setExistsMoreElements(true);
} else {
hideButtonLoadMore();
userListsAdapter.setExistsMoreElements(false);
}
userListsAdapter.notifyDataSetChanged();
if (userListsAdapter.getCount() == 0) {
showNoLists();
} else {
showUserLists();
viewUserLists.setSelection(userListsAdapter.getCount() - 1);
}
}
private void createUserListsColumn(UserList userList) {
ArrayList<Entity> created_column_list = DataFramework.getInstance().getEntityList("columns", "userlist_id=" + userList.getId());
int position = 0;
if (created_column_list.size() == 0) {
position = ColumnsUtils.nextPositionColumn();
Entity type = new Entity("type_columns", (long) TweetTopicsUtils.COLUMN_LIST_USER);
Entity user_list = new Entity("columns");
user_list.setValue("description", userList.getName());
user_list.setValue("type_id", type);
user_list.setValue("user_id", user_id);
user_list.setValue("position", position);
user_list.setValue("userlist_id", userList.getId());
user_list.save();
Toast.makeText(this, getString(R.string.column_created, userList.getName()), Toast.LENGTH_LONG).show();
} else {
position = created_column_list.get(0).getInt("position");
}
Intent intent = getIntent();
intent.putExtra("position", position);
setResult(RESULT_OK, intent);
finish();
/*ArrayList<Entity> created_column_list = DataFramework.getInstance().getEntityList("columns", "userlist_id=" + userList.getId());
int position = 0;
if (created_column_list.size() == 0) {
position = DBUtils.nextPositionColumn();
Entity type = new Entity("type_columns", (long) TweetTopicsUtils.COLUMN_LIST_USER);
Entity user_list = new Entity("columns");
user_list.setValue("description", type.getString("description"));
user_list.setValue("type_id", type);
user_list.setValue("position", position);
user_list.setValue("userlist_id", userList.getId());
user_list.save();
Toast.makeText(this, getString(R.string.column_created, userList.getString("name")), Toast.LENGTH_LONG).show();
} else {
position = created_column_list.get(0).getInt("position");
}
Intent intent = getIntent();
intent.putExtra("position", position);
setResult(RESULT_OK, intent);
finish();*/
}
public void reload() {
if (loadingMoreUserList) {
showLoadingMore();
} else {
showLoading();
}
GetUserListRequest getUserListRequest = new GetUserListRequest(user_id, screenName, type_id, nextCursor);
APITweetTopics.execute(this, getSupportLoaderManager(), this, getUserListRequest);
}
public void showNoLists() {
viewNoLists.setVisibility(View.VISIBLE);
viewLoading.setVisibility(View.GONE);
viewNoInternet.setVisibility(View.GONE);
viewUserLists.setVisibility(View.GONE);
}
public void showLoading() {
viewNoLists.setVisibility(View.GONE);
viewLoading.setVisibility(View.VISIBLE);
viewNoInternet.setVisibility(View.GONE);
viewUserLists.setVisibility(View.GONE);
viewLoadMore.setVisibility(View.GONE);
}
public void showLoadingMore() {
buttonLoadMore.setVisibility(View.GONE);
viewLoadMoreLoading.setVisibility(View.VISIBLE);
}
public void showButtonLoadMore() {
viewLoadMore.setVisibility(View.VISIBLE);
buttonLoadMore.setVisibility(View.VISIBLE);
viewLoadMoreLoading.setVisibility(View.GONE);
}
public void hideButtonLoadMore() {
viewLoadMore.setVisibility(View.GONE);
buttonLoadMore.setVisibility(View.GONE);
viewLoadMoreLoading.setVisibility(View.GONE);
}
public void showNoInternet() {
viewNoLists.setVisibility(View.GONE);
viewLoading.setVisibility(View.GONE);
viewNoInternet.setVisibility(View.VISIBLE);
viewUserLists.setVisibility(View.GONE);
viewLoadMore.setVisibility(View.GONE);
}
public void showUserLists() {
viewNoLists.setVisibility(View.GONE);
viewLoading.setVisibility(View.GONE);
viewNoInternet.setVisibility(View.GONE);
viewUserLists.setVisibility(View.VISIBLE);
}
}