package net.dev123.yibo.service.listener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.lang.ref.WeakReference;
import net.dev123.commons.Constants;
import net.dev123.yibo.R;
import net.dev123.yibo.YiBoApplication;
import net.dev123.yibo.common.theme.ThemeUtil;
import net.dev123.yibo.db.LocalAccount;
import net.dev123.yibo.service.adapter.AppGridAdapter;
import net.dev123.yibo.widget.Skeleton;
import net.dev123.yibo.widget.ValueSetEvent;
import net.dev123.yibo.widget.ViewChangeEvent;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.TextView;
public class AppChangeListener implements PropertyChangeListener {
private Activity context;
private YiBoApplication yibo;
private AppGridAdapter adapter;
private WeakReference<View> refView;
private AppGridItemClickListener itemClickListener;
public AppChangeListener(Context context) {
this.context = (Activity)context;
this.yibo = (YiBoApplication)context.getApplicationContext();
adapter = new AppGridAdapter(context);
itemClickListener = new AppGridItemClickListener();
}
@Override
public void propertyChange(PropertyChangeEvent event) {
if (event instanceof ViewChangeEvent) {
viewChange(event);
} else if (event instanceof ValueSetEvent) {
valueSet(event);
}
}
private void viewChange(PropertyChangeEvent event) {
if (!(event instanceof ViewChangeEvent)
|| !event.getNewValue().equals(Skeleton.TYPE_APP)) {
return;
}
ViewChangeEvent changeEvent = (ViewChangeEvent)event;
ViewGroup viewGroup = (ViewGroup)changeEvent.getView();
viewGroup.removeAllViews();
LocalAccount account = changeEvent.getAccount();
View contentView = getContentView(account);
viewGroup.addView(contentView);
View llHeaderBase = context.findViewById(R.id.llHeaderBase);
llHeaderBase.setVisibility(View.VISIBLE);
View llHeaderMessage = context.findViewById(R.id.llHeaderMessage);
llHeaderMessage.setVisibility(View.GONE);
TextView tvTitle = (TextView) context.findViewById(R.id.tvTitle);
tvTitle.setText(R.string.title_tab_app);
ImageButton ibProfileImage = (ImageButton) context.findViewById(R.id.ibProfileImage);
ibProfileImage.setVisibility(View.VISIBLE);
ImageButton ibGroup = (ImageButton) context.findViewById(R.id.ibGroup);
ibGroup.setVisibility(View.GONE);
ImageButton ibEdit = (ImageButton) context.findViewById(R.id.ibEdit);
ibEdit.setVisibility(View.VISIBLE);
ibEdit.setOnClickListener(new HomePageEditStatusClickListener(context));
}
private void valueSet(PropertyChangeEvent event) {
ValueSetEvent setEvent = (ValueSetEvent)event;
LocalAccount account = setEvent.getAccount();
switch(setEvent.getAction()) {
case ACTION_INIT_ADAPTER:
initAdapter(account);
break;
case ACTION_RECLAIM_MEMORY:
refView = null;
break;
default:
break;
}
}
private BaseAdapter initAdapter(LocalAccount account) {
if (account == null) {
return adapter;
}
if (adapter == null) {
adapter = new AppGridAdapter(context);
}
return adapter;
}
public View getContentView(LocalAccount account) {
BaseAdapter adapter = initAdapter(account);
GridView gvApp;
View contentView = null;
if (refView != null) {
contentView = refView.get();
if (Constants.DEBUG && contentView == null) {
Log.v("AppChangeListener", "HomePage_App View recycle");
}
}
if (contentView != null) {
gvApp = (GridView)contentView.findViewById(R.id.gvApp);
} else {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
contentView = inflater.inflate(R.layout.home_page_content_app, null);
ThemeUtil.setContentBackground(contentView);
//refView = new WeakReference<View>(contentView);
gvApp = (GridView)contentView.findViewById(R.id.gvApp);
View emptyView = contentView.findViewById(R.id.llLoadingView);
gvApp.setOnItemClickListener(itemClickListener);
gvApp.setEmptyView(emptyView);
if (Constants.DEBUG) {
Log.v("AppChangeListener", "reclaim:" + this.getClass().getCanonicalName());
}
}
gvApp.setAdapter(adapter);
gvApp.setFastScrollEnabled(yibo.isSliderEnabled());
return contentView;
}
}