package tk.djcrazy.MyCC98;
import android.app.AlertDialog;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.astuetz.viewpager.extensions.PagerSlidingTabStrip;
import com.google.inject.Inject;
import com.jfeinstein.jazzyviewpager.JazzyViewPager;
import com.slidingmenu.lib.SlidingMenu;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import roboguice.inject.InjectView;
import roboguice.util.RoboAsyncTask;
import tk.djcrazy.MyCC98.adapter.GlobalBoardListAdapter;
import tk.djcrazy.MyCC98.adapter.HomeFragmentPagerAdapter;
import tk.djcrazy.MyCC98.fragment.HomeBehindMenuFragment;
import tk.djcrazy.MyCC98.listener.LoadingListener;
import tk.djcrazy.MyCC98.service.NewVersionDownloadService;
import tk.djcrazy.MyCC98.util.DisplayUtil;
import tk.djcrazy.MyCC98.util.SysInfo;
import tk.djcrazy.libCC98.CachedCC98Service;
import tk.djcrazy.libCC98.NewCC98Service;
import tk.djcrazy.libCC98.data.InboxInfo;
import tk.djcrazy.libCC98.data.PmInfo;
import tk.djcrazy.libCC98.util.RequestResultListener;
public class HomeActivity extends BaseSlidingFragmentActivity {
private static final String TAG = "HomeActivity";
private static Boolean isExit = false;
private static Boolean hasTask = false;
public String[] boardNames;
public String[] boardIds;
Timer tExit = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
isExit = false;
hasTask = true;
}
};
@InjectView(R.id.main_pages)
private JazzyViewPager viewPager;
@Inject
private NewCC98Service mCC98Service;
@Inject
private NotificationManager mNotificationManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
PreferenceManager.setDefaultValues(this, R.xml.settings, false);
setupSlidingMenu();
setupViewPager();
configureActionBar();
setupSecondBehindView();
if (savedInstanceState == null) {
FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
t.replace(R.id.home_behind_view, new HomeBehindMenuFragment()).commit();
}
requestForUpdateInfo();
requestForInboxInfo();
}
private void requestForInboxInfo() {
final int NODIFICATION_ID = 58484654;
mCC98Service.submitPmInfoRequest(this.getClass(),0,1,new RequestResultListener<InboxInfo>() {
@Override
public void onRequestComplete(InboxInfo result) {
int totalUnread = 0;
for (PmInfo pmInfo : result.getPmInfos()) {
if (pmInfo.isNew()) {
totalUnread++;
}
}
if (totalUnread != 0) {
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(HomeActivity.this).setSmallIcon(
R.drawable.ic_launcher).setContentTitle("您有" + totalUnread + "条未读消息")
.setTicker("您有" + totalUnread + "条未读消息").setContentText("请点击查看");
Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
mBuilder.setSound(alert).setAutoCancel(true);
Intent resultIntent = new Intent(HomeActivity.this, PmActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(HomeActivity.this);
stackBuilder.addParentStack(PmActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent( 0,PendingIntent.FLAG_UPDATE_CURRENT );
mBuilder.setContentIntent(resultPendingIntent);
mNotificationManager.notify(NODIFICATION_ID, mBuilder.build());
}
}
@Override
public void onRequestError(String msg) {
}
});
}
private void requestForUpdateInfo() {
mCC98Service.submitUpdateRequest(this.getClass(), new RequestResultListener<JSONObject>() {
@Override
public void onRequestComplete(JSONObject result) {
try {
int versionCode = result.getInt("versionCode");
if (versionCode > SysInfo.getVersionCode(getApplicationContext())) {
final String downloadLink = result.getString("downloadLink");
String versionName = result.getString("versionName");
String updateHint = result.getString("hint");
AlertDialog.Builder builder = new AlertDialog.Builder(HomeActivity.this);
builder.setTitle("发现新版本").setMessage("版本号:" + versionName + "\n" + "更新内容:" + updateHint)
.setPositiveButton("下载", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startService(NewVersionDownloadService.createIntent(HomeActivity.this, downloadLink));
}
}).setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create().show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onRequestError(String msg) {
Log.d(TAG, msg);
}
});
}
@Override
protected void onStop() {
mCC98Service.cancelRequest(HomeActivity.class);
flushCache();
super.onStop();
}
private void setupViewPager() {
HomeFragmentPagerAdapter adapter = new HomeFragmentPagerAdapter(
getSupportFragmentManager(), viewPager);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(0);
viewPager.setTransitionEffect(JazzyViewPager.TransitionEffect.Tablet);
PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
tabs.setViewPager(viewPager);
tabs.setIndicatorColor(Color.parseColor("#1faeff"));
}
private void setupSecondBehindView() {
boardNames = getResources().getStringArray(R.array.global_board_name);
boardIds = getResources().getStringArray(R.array.global_board_id);
ListView globalBoardListView = (ListView) findViewById(R.id.global_boards);
globalBoardListView.setAdapter(new GlobalBoardListAdapter(this));
globalBoardListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
startActivity(BoardListActivity.createIntent(boardNames[arg2], boardIds[arg2]));
}
});
}
private void setupSlidingMenu() {
getSlidingMenu().setMode(SlidingMenu.LEFT_RIGHT);
getSlidingMenu().setSecondaryMenu(R.layout.home_second_behind_view);
setBehindContentView(R.layout.home_behind_view);
SlidingMenu sm = getSlidingMenu();
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
sm.setShadowWidth(10);
sm.setBehindScrollScale(0f);
sm.setBehindOffset(DisplayUtil.dip2px(getApplicationContext(), 150));
sm.setFadeDegree(0.35f);
}
private void flushCache() {
try {
Object cache = Class.forName("android.net.http.HttpResponseCache")
.getMethod("getInstalled").invoke(null);
if (cache != null) {
Class.forName("android.net.http.HttpResponseCache")
.getMethod("flush").invoke(cache);
}
} catch (Exception e) {
}
}
private void configureActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setIcon(new BitmapDrawable(getResources(), mCC98Service.getCurrentUserAvatar()));
actionBar.setHomeButtonEnabled(true);
actionBar.setTitle(mCC98Service.getCurrentUserData().getUserName());
}
@Override
public boolean onCreateOptionsMenu(Menu optionMenu) {
getSupportMenuInflater().inflate(R.menu.home, optionMenu);
return true;
}
public void refresh() {
viewPager.invalidate();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getSlidingMenu().toggle();
return true;
case R.id.menu_search:
onSearchRequested();
return true;
case R.id.menu_message:
startActivity(new Intent(HomeActivity.this, PmActivity.class));
return true;
default:
break;
}
return false;
}
@Override
public boolean onSearchRequested() {
Bundle appData = new Bundle();
appData.putString(PostSearchActivity.BOARD_ID, "0");
appData.putString(PostSearchActivity.BOARD_NAME, "全站");
startSearch(null, false, appData, false);
return true;
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isExit == false) {
isExit = true;
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
if (!hasTask) {
tExit.schedule(task, 2000);
}
} else {
finish();
}
}
return false;
}
}