package net.basilwang;
import static net.basilwang.dao.Preferences.CURRICULUM_DOWNLOAD_TIP;
import static net.basilwang.dao.Preferences.CURRICULUM_TIP_SHOW;
import static net.basilwang.dao.Preferences.SCHOOLMAP_TIP_SHOW;
import static net.basilwang.dao.Preferences.SCORE_TIP_SHOW;
import static net.basilwang.dao.Preferences.SOCRE_DOWNLOAD_TIP;
import static net.basilwang.dao.Preferences.WEEK_VIEW_TIP_SHOW;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import net.basilwang.dao.AccountService;
import net.basilwang.dao.CurriculumService;
import net.basilwang.dao.IDAOService;
import net.basilwang.dao.Preferences;
import net.basilwang.dao.ScoreService;
import net.basilwang.dao.SemesterService;
import net.basilwang.fresh.NewbornRaiders;
import net.basilwang.utils.PreferenceUtils;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import cn.sharesdk.framework.AbstractWeibo;
import cn.sharesdk.framework.WeiboActionListener;
import cn.sharesdk.onekeyshare.ShareAllGird;
public class SliderMenuFragment extends ListFragment implements Callback,
OnClickListener, WeiboActionListener {
public static final int EXIT_APPLICATION = 0x0001;
private Handler handler;
private ImageView img_icon_top;
private View menuView;
int messageNum = 0;
int isUnusual = 0;
private int[] messages = { 0, R.drawable.message1, R.drawable.message2,
R.drawable.message3, R.drawable.message4, R.drawable.message5,
R.drawable.message6 };
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
menuView = inflater.inflate(R.layout.menu_list, null);
prepare();
return menuView;
}
public void prepare() {
img_icon_top = (ImageView) menuView.findViewById(R.id.img_icon_top);
img_icon_top.setOnClickListener(this);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
adapter();
}
public void adapter() {
String[] menuNames = { "课程表", "查成绩", "下课表", "校园攻略", "消息中心", "分 享",
"设 置", "注 销" };
SampleAdapter adapter = new SampleAdapter(this.getActivity());
for (int i = 0; i < menuNames.length; i++) {
adapter.add(new SampleItem(menuNames[i], getIconResc(i),
getMessage_IconResc(i)));
setListAdapter(adapter);
}
}
// 异步获取信息结束后,刷新新消息的数量
public void refresh(int i) {
messageNum = i;
adapter();
}
public void isUnusual(int i) {
PreferenceUtils.modifyIntValueInPreferences(this.getActivity(),
net.basilwang.dao.Preferences.Unusual, i);
isUnusual = PreferenceUtils.getPreferenceUnusual(this.getActivity());
}
private int getIconResc(int position) {
// int[] iconResc = { R.drawable.menu_curriculm,
// R.drawable.menu_mygrade,
// R.drawable.menu_downloadc, R.drawable.menu_strategy,
// R.drawable.menu_message, R.drawable.menu_shared,
// R.drawable.menu_set};
int[] iconResc = { R.drawable.menu_curriculmn, R.drawable.menu_grade,
R.drawable.menu_download, R.drawable.menu_newstudent,
R.drawable.menu_messages, R.drawable.menu_share,
R.drawable.menu_setting, R.drawable.menu_logoff };
return iconResc[position];
}
private int getMessage_IconResc(int position) {
int[] iconResc = { 0, 0, 0, 0, messages[messageNum], 0, 0, 0 };
return iconResc[position];
}
private class SampleItem {
public String tag;
public int iconRes;
public int messageRes;
public SampleItem(String tag, int iconRes, int messageRes) {
this.tag = tag;
this.iconRes = iconRes;
this.messageRes = messageRes;
}
}
public class SampleAdapter extends ArrayAdapter<SampleItem> {
public SampleAdapter(Context context) {
super(context, 0);
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.row, null);
}
ImageView icon = (ImageView) convertView
.findViewById(R.id.row_icon);
icon.setImageResource(getItem(position).iconRes);
TextView title = (TextView) convertView
.findViewById(R.id.row_title);
title.setText(getItem(position).tag);
ImageView message_icon = (ImageView) convertView
.findViewById(R.id.new_message_icon);
message_icon.setImageResource(getItem(position).messageRes);
return convertView;
}
}
@Override
public void onListItemClick(ListView lv, View v, int position, long id) {
Log.v("result", "messageFragment" + this.messageNum);
Fragment newContent = null;
switch (position) {
case 0:
newContent = new CurriculumViewPagerFragment();
break;
case 1:
if (isUnusual == 0) {
newContent = new ScoreFragment();
} else {
Toast.makeText(this.getActivity(), "教务系统异常,暂不支持查成绩",
Toast.LENGTH_SHORT).show();
}
break;
case 2:
if (isUnusual == 0) {
newContent = new DownloadCurriculumFragment();
} else {
Toast.makeText(this.getActivity(), "教务系统异常,暂不支持下课表",
Toast.LENGTH_SHORT).show();
}
break;
case 3:
newContent = new NewbornRaiders();
break;
case 4:
newContent = new MessageFragment();
messageNum = 0;
adapter();
break;
case 5:
showGrid(false);
break;
case 6:
newContent = new PreferenceFragmentPlugin();
break;
case 7:
// exit();
showAlertDialogForLogOff();
break;
}
if (newContent != null)
switchFragment(newContent);
}
private void showGrid(boolean silent) {
Intent i = new Intent(getActivity(), ShareAllGird.class);
// 分享时Notification的图�
i.putExtra("notif_icon", R.drawable.ic_launcher);
// 分享时Notification的标�
i.putExtra("notif_title", getActivity().getString(R.string.app_name));
// address是接收人地址,仅在信息和邮件使用,否则可以不提供
i.putExtra("address", "12345678901");
// title标题,在印象笔记、邮箱、信息、微信(包括好友和朋友圈)、人人网和QQ空间使用,否则可以不提供
i.putExtra("title", getActivity().getString(R.string.share));
// titleUrl是标题的网络链接,仅在人人网和QQ空间使用,否则可以不提供
i.putExtra("titleUrl", "http://sharesdk.cn");
// text是分享文本,所有平台都需要这个字�
i.putExtra("text", getActivity().getString(R.string.share_content));
// imagePath是本地的图片路径,除Linked-In外的所有平台都支持这个字段
// i.putExtra("imagePath", MainActivity.TEST_IMAGE);
// imageUrl是图片的网络路径,新浪微博、人人网、QQ空间和Linked-In支持此字�
// i.putExtra("imageUrl",
// "http://img.appgo.cn/imgs/sharesdk/content/2013/06/13/1371120300254.jpg");
// url仅在微信(包括好友和朋友圈)中使用,否则可以不提�
i.putExtra("url", "http://sharesdk.cn");
// thumbPath是缩略图的本地路径,仅在微信(包括好友和朋友圈)中使用,否则可以不提�
// i.putExtra("thumbPath", MainActivity.TEST_IMAGE);
// appPath是待分享应用程序的本地路劲,仅在微信(包括好友和朋友圈)中使用,否则可以不提�
// i.putExtra("appPath", MainActivity.TEST_IMAGE);
// comment是我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供
i.putExtra("comment", getActivity().getString(R.string.share));
// site是分享此内容的网站名称,仅在QQ空间使用,否则可以不提供
i.putExtra("site", getActivity().getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用,否则可以不提供
i.putExtra("siteUrl", "http://sharesdk.cn");
// foursquare分享时的地方�
i.putExtra("venueName", "Southeast in China");
// foursquare分享时的地方描述
i.putExtra("venueDescription", "This is a beautiful place!");
// foursquare分享时的地方纬度
i.putExtra("latitude", 36.644009419436394f);
// foursquare分享时的地方经度
i.putExtra("longitude", 117.0709615945816f);
// 是否直接分享
i.putExtra("silent", silent);
// 设置自定义的外部回调
i.putExtra("callback", OneKeyShareCallback.class.getName());
getActivity().startActivity(i);
}
// the meat of switching the above fragment
private void switchFragment(Fragment fragment) {
if (getActivity() == null)
return;
if (getActivity() instanceof StaticAttachmentActivity) {
StaticAttachmentActivity fca = (StaticAttachmentActivity) getActivity();
fca.switchContent(fragment, 0);
}
}
public void exit() {
Intent mIntent = new Intent();
mIntent.setClass(this.getActivity(), StaticAttachmentActivity.class);
// 这里设置flag还是比较重要�
mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// 发出退出程序指�
mIntent.putExtra("flag", EXIT_APPLICATION);
startActivity(mIntent);
}
private void showAlertDialogForLogOff() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
getActivity());
alertDialogBuilder.setTitle(R.string.logoff_title);
alertDialogBuilder.setMessage(R.string.logoff_tips);
alertDialogBuilder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
new LogOff().deleteAccount();
StaticAttachmentActivity.instance.finish();
startActivity(new Intent(getActivity(),LoginActivity.class));
}
});
alertDialogBuilder.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialogBuilder.create();
alertDialogBuilder.show();
}
public void onComplete(AbstractWeibo weibo, int action,
HashMap<String, Object> res) {
Message msg = new Message();
msg.arg1 = 1;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);
}
public void onCancel(AbstractWeibo weibo, int action) {
Message msg = new Message();
msg.arg1 = 3;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);
}
public void onError(AbstractWeibo weibo, int action, Throwable t) {
t.printStackTrace();
Message msg = new Message();
msg.arg1 = 2;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);
}
/** 处理操作结果 */
public boolean handleMessage(Message msg) {
AbstractWeibo weibo = (AbstractWeibo) msg.obj;
String text = StaticAttachmentActivity.actionToString(msg.arg2);
switch (msg.arg1) {
case 1: { // 成功
text = weibo.getName() + " completed at " + text;
}
break;
case 2: { // 失败
text = weibo.getName() + " caught error at " + text;
}
break;
case 3: { // 取消
text = weibo.getName() + " canceled at " + text;
}
break;
}
Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
return false;
}
@Override
public void onClick(View v) {
Log.v("click", "click");
}
private class LogOff {
public void deleteAccount() {
Class<?>[] daoServices = { AccountService.class,
CurriculumService.class, SemesterService.class,
ScoreService.class };
for (int i = 0; i < daoServices.length; i++) {
IDAOService daoService = getInstance(daoServices[i]);
daoService.deleteAccount();
}
clearPreferAndSaveTipPrefer();
}
private void clearPreference() {
SharedPreferences.Editor ed = Preferences.getEditor(getActivity());
ed.clear();
ed.commit();
}
public void clearPreferAndSaveTipPrefer() {
String[] tips = { SCORE_TIP_SHOW, CURRICULUM_TIP_SHOW,
WEEK_VIEW_TIP_SHOW, SOCRE_DOWNLOAD_TIP,
CURRICULUM_DOWNLOAD_TIP, SCHOOLMAP_TIP_SHOW };
int[] tipValues = new int[tips.length];
for (int i = 0; i < tips.length; i++) {
tipValues[i] = PreferenceManager.getDefaultSharedPreferences(
getActivity()).getInt(tips[i], 0);
}
clearPreference();
// save tips value in prefer
for (int i = 0; i < tips.length; i++) {
PreferenceUtils.modifyIntValueInPreferences(getActivity(),
tips[i], tipValues[i]);
}
}
}
public IDAOService getInstance(Class<?> object) {
Constructor<?> constructor = null;
IDAOService instance = null;
try {
constructor = object.getConstructor(Context.class);
instance = (IDAOService) constructor.newInstance(getActivity());
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
}