/*
* 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.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
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.adapters.UsersAdapter;
import com.javielinux.api.APIDelegate;
import com.javielinux.api.APITweetTopics;
import com.javielinux.api.loaders.GetUserListLoader;
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.preferences.Preferences;
import com.javielinux.utils.ImageUtils;
import com.javielinux.utils.Utils;
import twitter4j.UserList;
import java.io.File;
import java.util.ArrayList;
public class UserListsSelectorActivity extends BaseActivity implements APIDelegate<BaseResponse> {
public static String KEY_ACTIVE_USER_ID = "KEY_ACTIVE_USER_ID";
public static String KEY_LIST_ID = "KEY_LIST_ID";
private RowUserListsAdapter userListsAdapter;
private ArrayList<UserList> userListArrayList;
private Entity userEntity;
private long nextCursor;
private boolean loadingMoreUserList;
private ThemeManager themeManager;
private LinearLayout mLayoutBackgroundApp;
private LinearLayout viewNoLists;
private LinearLayout viewLoading;
private LinearLayout viewNoInternet;
private GridView viewUserLists;
private RelativeLayout viewUserInfo;
private ImageView userIcon;
private TextView userFullname;
private TextView userName;
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);
userEntity = null;
try {
DataFramework.getInstance().open(this, Utils.packageName);
userEntity = DataFramework.getInstance().getTopEntity("users","","");
} catch (Exception e) {
e.printStackTrace();
}
if (userEntity == null) {
Utils.showMessage(this, R.string.error_general);
finish();
}
nextCursor = -1;
loadingMoreUserList = false;
themeManager = new ThemeManager(this);
themeManager.setTheme();
setContentView(R.layout.userlistsselector_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);
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);
viewUserInfo = (RelativeLayout) this.findViewById(R.id.user_info);
userIcon = (ImageView)this.findViewById(R.id.user_icon);
userFullname = (TextView)this.findViewById(R.id.user_fullname);
userName = (TextView)this.findViewById(R.id.user_name);
viewUserInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ArrayList<Entity> userEntityList = DataFramework.getInstance().getEntityList("users", "service is null or service = \"twitter.com\"");
final UsersAdapter adapter = new UsersAdapter(UserListsSelectorActivity.this, userEntityList);
AlertDialog builder = new AlertDialog.Builder(UserListsSelectorActivity.this)
.setCancelable(true)
.setTitle(R.string.users)
.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
userEntity = adapter.getItem(which);
loadUserInfo();
reload();
}
})
.setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.create();
builder.show();
}
});
findViewById(R.id.user_list_bar_icon).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserListsSelectorActivity.this.finish();
}
});
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);
Intent intent = getIntent();
intent.putExtra(KEY_ACTIVE_USER_ID, userEntity.getId());
intent.putExtra(KEY_LIST_ID, userList.getId());
setResult(RESULT_OK, intent);
finish();
}
});
gridUserList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) {
return true;
}
});
loadUserInfo();
reload();
}
private void loadUserInfo() {
if (userEntity != null) {
userIcon.setImageBitmap(ImageUtils.getBitmapAvatar(userEntity.getId(), Utils.AVATAR_LARGE));
userFullname.setText(userEntity.getString("fullname"));
userName.setText(userEntity.getString("name"));
}
}
@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) {
userListArrayList.clear();
GetUserListResponse result = (GetUserListResponse)response;
userListArrayList.addAll(result.getUserListArrayList());
userListsAdapter.notifyDataSetChanged();
if (userListsAdapter.getCount() == 0) {
showNoLists();
} else {
showUserLists();
viewUserLists.setSelection(userListsAdapter.getCount() - 1);
}
}
public void reload() {
showLoading();
GetUserListRequest getUserListRequest = new GetUserListRequest(userEntity.getId(), userEntity.getString("name"), GetUserListLoader.OWN_LISTS, -1);
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);
}
public void showNoInternet() {
viewNoLists.setVisibility(View.GONE);
viewLoading.setVisibility(View.GONE);
viewNoInternet.setVisibility(View.VISIBLE);
viewUserLists.setVisibility(View.GONE);
}
public void showUserLists() {
viewNoLists.setVisibility(View.GONE);
viewLoading.setVisibility(View.GONE);
viewNoInternet.setVisibility(View.GONE);
viewUserLists.setVisibility(View.VISIBLE);
}
}