package net.dev123.yibo.widget;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import net.dev123.yibo.R;
import net.dev123.yibo.common.GlobalVars;
import net.dev123.yibo.common.theme.Theme;
import net.dev123.yibo.common.theme.ThemeUtil;
import net.dev123.yibo.db.LocalAccount;
import net.dev123.yibo.service.listener.AppChangeListener;
import net.dev123.yibo.service.listener.HomePageAccountClickListener;
import net.dev123.yibo.service.listener.HomePageAccountLongClickListener;
import net.dev123.yibo.service.listener.HomePageGroupClickListener;
import net.dev123.yibo.service.listener.HomePageHeaderDoubleClickListener;
import net.dev123.yibo.service.listener.MessagesChangeListener;
import net.dev123.yibo.service.listener.MoreChangeListener;
import net.dev123.yibo.service.listener.MyHomeChangeListener;
import net.dev123.yibo.service.listener.ProfileChangeListener;
import net.dev123.yibo.service.listener.ProfileRefreshClickListener;
import net.dev123.yibo.service.task.ImageLoad4HeadTask;
import net.dev123.yibo.widget.ValueSetEvent.Action;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class Skeleton extends LinearLayout {
public static final int TYPE_MY_HOME = 1;
public static final int TYPE_MESSAGE = 2;
public static final int TYPE_PROFILE = 3;
public static final int TYPE_APP = 4;
public static final int TYPE_MORE = 5;
public static final int TYPE_MENTION = 21;
public static final int TYPE_COMMENT = 22;
public static final int TYPE_DIRECT_MESSAGE = 23;
private int contentType;
private LocalAccount currentAccount = null;
protected PropertyChangeSupport propertySupport;
private Drawable myHomeDrawable;
private Drawable myHomeRefreshDrawable;
private Drawable messageDrawable;
private Drawable messageRefreshDrawable;
private Drawable profileDrawable;
private Drawable profileRefreshDrawable;
private Button btnMyHome;
private Button btnMessage;
private Button btnProfile;
private Button btnApp;
private Button btnMore;
private LinearLayout llFooter;
private ImageButton ibProfileImage;
private HomePageAccountClickListener accountClickListener;
private HomePageGroupClickListener groupClickListener;
private ProfileRefreshClickListener profileRefreshListener;
public Skeleton(Context context) {
super(context);
initLayout();
initEvent();
initPropertyChangeListener(context);
}
public Skeleton(Context context, AttributeSet attrs) {
super(context, attrs);
initLayout();
initEvent();
initPropertyChangeListener(context);
}
private void initLayout() {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.home_page, this, true);
ThemeUtil.setRootBackground(this);
propertySupport = new PropertyChangeSupport(this);
ibProfileImage = (ImageButton) this.findViewById(R.id.ibProfileImage);
TextView tvTitle = (TextView) this.findViewById(R.id.tvTitle);
ImageButton ibGroup = (ImageButton) this.findViewById(R.id.ibGroup);
ImageButton ibEdit = (ImageButton) this.findViewById(R.id.ibEdit);
Button btnMention = (Button) this.findViewById(R.id.btnMention);
Button btnComment = (Button) this.findViewById(R.id.btnComment);
Button btnDirectMessage = (Button) this.findViewById(R.id.btnDirectMessage);
llFooter = (LinearLayout) this.findViewById(R.id.llFooter);
btnMyHome = (Button) this.findViewById(R.id.btnMyHome);
btnMessage = (Button) this.findViewById(R.id.btnMessage);
btnProfile = (Button) this.findViewById(R.id.btnProfile);
btnApp = (Button) this.findViewById(R.id.btnApp);
btnMore = (Button) this.findViewById(R.id.btnMore);
//主题
Theme theme = ThemeUtil.createTheme(getContext());
LinearLayout llHeader = (LinearLayout)this.findViewById(R.id.llHeader);
llHeader.setBackgroundDrawable(theme.getDrawable("bg_header"));
llHeader.setGravity(Gravity.CENTER_VERTICAL);
ibProfileImage.setBackgroundDrawable(theme.getDrawable("bg_account_display"));
ibGroup.setImageDrawable(theme.getDrawable("selector_btn_group"));
Drawable bgHeaderDivider = theme.getDrawable("bg_header_divider");
ibGroup.setBackgroundDrawable(bgHeaderDivider);
ibEdit.setBackgroundDrawable(theme.getDrawable("selector_btn_status"));
ibEdit.setImageDrawable(bgHeaderDivider);
tvTitle.setTextColor(theme.getColorStateList("selector_header_title"));
btnMention.setBackgroundDrawable(theme.getDrawable("selector_tab_mention"));
btnMention.setTextColor(theme.getColorStateList("selector_header_title"));
btnComment.setBackgroundDrawable(theme.getDrawable("selector_tab_comment"));
btnComment.setTextColor(theme.getColorStateList("selector_header_title"));
btnDirectMessage.setBackgroundDrawable(theme.getDrawable("selector_tab_direct_message"));
btnDirectMessage.setTextColor(theme.getColorStateList("selector_header_title"));
myHomeDrawable = theme.getDrawable("selector_tab_home");
myHomeRefreshDrawable = theme.getDrawable("selector_tab_home_refresh");
messageDrawable = theme.getDrawable("selector_tab_message");
messageRefreshDrawable = theme.getDrawable("selector_tab_message_refresh");
profileDrawable = theme.getDrawable("selector_tab_profile");
profileRefreshDrawable = theme.getDrawable("selector_tab_profile_refresh");
llFooter.setBackgroundDrawable(theme.getDrawable("bg_footer"));
llFooter.setPadding(0, 0, 0, 0);
btnMyHome.setBackgroundDrawable(myHomeDrawable);
btnMessage.setBackgroundDrawable(messageDrawable);
btnProfile.setBackgroundDrawable(profileDrawable);
btnApp.setBackgroundDrawable(theme.getDrawable("selector_tab_app"));
btnMore.setBackgroundDrawable(theme.getDrawable("selector_tab_more"));
}
private void initEvent() {
btnMyHome.setEnabled(false);
btnMyHome.setOnClickListener(buttonListener);
btnMessage.setOnClickListener(buttonListener);
btnProfile.setOnClickListener(buttonListener);
btnApp.setOnClickListener(buttonListener);
btnMore.setOnClickListener(buttonListener);
ImageButton ibGroup = (ImageButton)this.findViewById(R.id.ibGroup);
groupClickListener = new HomePageGroupClickListener(this);
ibGroup.setOnClickListener(groupClickListener);
//双击头部快速回到第一行;
ViewGroup llHeader = (ViewGroup)this.findViewById(R.id.llHeader);
llHeader.setOnTouchListener(new HomePageHeaderDoubleClickListener());
}
public void initPropertyChangeListener(Context context) {
MyHomeChangeListener myHomeChangeListner = new MyHomeChangeListener(context);
MessagesChangeListener messagesChangeListener = new MessagesChangeListener(context);
ProfileChangeListener profileChangeListener = new ProfileChangeListener(context);
AppChangeListener appChangeListener = new AppChangeListener(context);
MoreChangeListener moreChangeListener = new MoreChangeListener(context);
addPropertyChangeListener(myHomeChangeListner);
addPropertyChangeListener(messagesChangeListener);
addPropertyChangeListener(profileChangeListener);
addPropertyChangeListener(appChangeListener);
addPropertyChangeListener(moreChangeListener);
profileRefreshListener = new ProfileRefreshClickListener(profileChangeListener);
}
private void initAccountSelectorWindow() {
View headerView = this.findViewById(R.id.llHeader);
accountClickListener = new HomePageAccountClickListener(this.getContext(), headerView);
ibProfileImage.setOnClickListener(accountClickListener);
ibProfileImage.setOnLongClickListener(new HomePageAccountLongClickListener());
}
public void addContent(View contentView) {
((ViewGroup)this.findViewById(R.id.llContainer)).addView(contentView);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertySupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertySupport.removePropertyChangeListener(listener);
}
public void setContentType(int newContentType) {
int oldContentType = contentType;
if (newContentType == oldContentType) {
oldContentType = 0;
}
btnMyHome.setEnabled(true);
btnMessage.setEnabled(true);
btnProfile.setEnabled(true);
btnApp.setEnabled(true);
btnMore.setEnabled(true);
btnMyHome.setOnClickListener(buttonListener);
btnMessage.setOnClickListener(buttonListener);
btnProfile.setOnClickListener(buttonListener);
switch (newContentType) {
case Skeleton.TYPE_MY_HOME:
//btnMyHome.setEnabled(false);
btnMyHome.setBackgroundDrawable(myHomeRefreshDrawable);
btnMessage.setBackgroundDrawable(messageDrawable);
btnProfile.setBackgroundDrawable(profileDrawable);
btnMyHome.setOnClickListener(goToTopAndRefreshListener);
break;
case Skeleton.TYPE_MESSAGE:
case Skeleton.TYPE_MENTION:
case Skeleton.TYPE_COMMENT:
case Skeleton.TYPE_DIRECT_MESSAGE:
//btnMessage.setEnabled(false);
btnMyHome.setBackgroundDrawable(myHomeDrawable);
btnMessage.setBackgroundDrawable(messageRefreshDrawable);
btnProfile.setBackgroundDrawable(profileDrawable);
btnMessage.setOnClickListener(goToTopAndRefreshListener);
break;
case Skeleton.TYPE_PROFILE:
//btnProfile.setEnabled(false);
btnMyHome.setBackgroundDrawable(myHomeDrawable);
btnMessage.setBackgroundDrawable(messageDrawable);
btnProfile.setBackgroundDrawable(profileRefreshDrawable);
btnProfile.setOnClickListener(profileRefreshListener);
break;
case Skeleton.TYPE_APP:
btnMyHome.setBackgroundDrawable(myHomeDrawable);
btnMessage.setBackgroundDrawable(messageDrawable);
btnProfile.setBackgroundDrawable(profileDrawable);
btnApp.setEnabled(false);
break;
case Skeleton.TYPE_MORE:
btnMyHome.setBackgroundDrawable(myHomeDrawable);
btnMessage.setBackgroundDrawable(messageDrawable);
btnProfile.setBackgroundDrawable(profileDrawable);
btnMore.setEnabled(false);
break;
}
contentType = newContentType;
View container = this.findViewById(R.id.llContainer);
PropertyChangeEvent event = new ViewChangeEvent(
this, "contentType", oldContentType,
newContentType, container, currentAccount
);
propertySupport.firePropertyChange(event);
}
public LocalAccount getCurrentAccount() {
return currentAccount;
}
public void setCurrentAccount(LocalAccount currentAccount) {
this.currentAccount = currentAccount;
if (accountClickListener == null) {
initAccountSelectorWindow();
}
accountClickListener.setSelectedAccount(currentAccount);
}
public void setCurrentAccount(LocalAccount currentAccount, boolean isSwitchAccount) {
if (currentAccount == null) {
return;
}
setCurrentAccount(currentAccount);
if (isSwitchAccount) {
String profileImageUrl = currentAccount.getUser().getProfileImageUrl();
ImageLoad4HeadTask task = new ImageLoad4HeadTask(ibProfileImage, profileImageUrl, true);
task.execute();
//setContentType(Skeleton.TYPE_MY_HOME);
ValueSetEvent event = new ValueSetEvent(
this, "contentType", 0,
Skeleton.TYPE_MY_HOME, currentAccount
);
event.setAction(Action.ACTION_INIT_ADAPTER);
propertySupport.firePropertyChange(event);
}
}
public void reclaim() {
ValueSetEvent event = new ValueSetEvent(
this, "contentType", 0,
Skeleton.TYPE_MY_HOME, currentAccount);
event.setAction(Action.ACTION_RECLAIM_MEMORY);
propertySupport.firePropertyChange(event);
}
public void removeAccount(LocalAccount account) {
GlobalVars.removeAccount(account);
}
public int getContentType() {
return contentType;
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (accountClickListener == null) {
initAccountSelectorWindow();
}
}
View.OnClickListener buttonListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnMyHome:
setContentType(Skeleton.TYPE_MY_HOME);
break;
case R.id.btnMessage:
setContentType(Skeleton.TYPE_MESSAGE);
break;
case R.id.btnProfile:
setContentType(Skeleton.TYPE_PROFILE);
break;
case R.id.btnApp:
setContentType(Skeleton.TYPE_APP);
break;
case R.id.btnMore:
setContentType(Skeleton.TYPE_MORE);
break;
}
}
};
View.OnClickListener goToTopAndRefreshListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Activity activity = (Activity)v.getContext();
ListView lvMicroBlog = (ListView)activity.findViewById(R.id.lvMicroBlog);
if (lvMicroBlog != null && lvMicroBlog instanceof PullToRefreshListView) {
PullToRefreshListView prListView = (PullToRefreshListView)lvMicroBlog;
prListView.setSelection(0);
prListView.prepareForRefresh();
prListView.onRefresh();
}
}
};
}