package cn.koolcloud.ipos.appstore.ui;
import java.util.LinkedList;
import java.util.List;
import org.json.JSONObject;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.Toast;
import cn.koolcloud.ipos.appstore.AppStoreApplication;
import cn.koolcloud.ipos.appstore.AppStorePreference;
import cn.koolcloud.ipos.appstore.R;
import cn.koolcloud.ipos.appstore.api.ApiService;
import cn.koolcloud.ipos.appstore.constant.Constants;
import cn.koolcloud.ipos.appstore.dialogs.AboutDialog;
import cn.koolcloud.ipos.appstore.dialogs.UpdateClientDialog;
import cn.koolcloud.ipos.appstore.entity.Client;
import cn.koolcloud.ipos.appstore.entity.ResultSet;
import cn.koolcloud.ipos.appstore.interfaces.CallBack;
import cn.koolcloud.ipos.appstore.utils.Env;
import cn.koolcloud.ipos.appstore.utils.JsonUtils;
import cn.koolcloud.ipos.appstore.utils.Logger;
import cn.koolcloud.ipos.appstore.utils.ToastUtil;
import cn.koolcloud.ipos.appstore.utils.Utils;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener;
import com.actionbarsherlock.widget.SearchView;
/**
* <p>Title: BaseActivity.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2013</p>
* <p>Company: All In Pay</p>
* @author Teddy
* @date 2013-11-26
* @version
*/
public class BaseActivity extends SherlockFragmentActivity implements SearchView.OnQueryTextListener, SearchView.OnSuggestionListener {
protected AppStoreApplication application;// application
Dialog myDialog = null;
private LayoutInflater mInflater;
private ImageView imageView = null;
private SearchView searchView;
public static final int SHOW_LOADING = 1 << 1;
public static final int DISMISS_LOADING = 1 << 2;
public static List<Activity> activityList = new LinkedList<Activity>();
private boolean isMenuUpdateClicking = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Logger.d(getClass().getSimpleName() + ".onCreate, Memory allocated size=" + getMemoryAllocatedSize() + "M");
application = (AppStoreApplication) getApplication();
activityList.add(this);
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SHOW_LOADING:
showProgressDialog();
break;
case DISMISS_LOADING:
dissmissProgressDialog();
break;
}
}
};
public Handler getHandler() {
return myHandler;
}
@Override
protected Dialog onCreateDialog(int id) {
return super.onCreateDialog(id);
}
public void showLoading() {
/*Message msg = new Message();
msg.what = SHOW_LOADING;
myHandler.sendMessage(msg);*/
showProgressDialog();
}
public void dismissLoading() {
/*Message msg = new Message();
msg.what = DISMISS_LOADING;
myHandler.sendMessage(msg);*/
dissmissProgressDialog();
}
private void showProgressDialog() {
dissmissProgressDialog();
myDialog = new Dialog(BaseActivity.this, R.style.dialog);
myDialog.show();
View view = mInflater.inflate(R.layout.loading_image, null);
imageView = (ImageView) view.findViewById(R.id.animationImage);
myDialog.setContentView(view);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.start();
}
private void dissmissProgressDialog() {
if(myDialog != null) {
if(myDialog.isShowing()) {
if(imageView != null) {
unbindDrawables(imageView);
}
myDialog.dismiss();
}
myDialog = null;
}
}
/**
* @Title: unbindDrawables
* @Description: TODO release bitmap resources
* @param @param view
* @return void
* @throws
*/
private void unbindDrawables(View view) {
Drawable back = view.getBackground();
if (back != null) {
back.setCallback(null);
}
if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
@Override
protected void onDestroy() {
activityList.remove(this);
dissmissProgressDialog();
super.onDestroy();
}
private double getMemoryAllocatedSize() {
Runtime runtime = Runtime.getRuntime();
return (runtime.totalMemory()-runtime.freeMemory())/1024.0/1024.0;
}
public void getClientVersion() {
ApiService.getUpdateVersion(this, AppStorePreference.getTerminalID(getApplicationContext()),
Env.getVersionName(getApplicationContext()), getVersionCallBack);
}
private CallBack getVersionCallBack = new CallBack() {
@Override
public void onCancelled() {
dismissLoading();
}
@Override
public void onStart() {
showLoading();
}
@Override
public void onSuccess(JSONObject jsonObj) {
try {
String retCode = "";
String data = "";
Client client = null;
Logger.d("-------getVersionInfo=" + jsonObj.toString());
retCode = JsonUtils.getStringValue(jsonObj, Constants.REQUEST_STATUS);
data = JsonUtils.getStringValue(jsonObj, Constants.REQUEST_DATA);
/*if (!Constants.REQUEST_STATUS_OK.equals(retCode)) {
onFailure(data);
} else {
if (TextUtils.isEmpty(data)) {
onFailure(Utils.getResourceString(getApplicationContext(), R.string.nonetwork_prompt_server_error));
} else {
client = JsonUtils.parseJSONClient(jsonObj);
}
}*/
client = JsonUtils.parseJSONClient(jsonObj);
boolean isFirstStart = application.isFirstStart();
if (client != null) {
Intent mIntent = new Intent(getApplicationContext(), UpdateClientDialog.class);
Bundle mBundle = new Bundle();
mBundle.putSerializable(Constants.SER_KEY, client);
mIntent.putExtras(mBundle);
if (client.getStrategy().equals(Constants.STRATEGY_UPDATE_FORCE)) { //force update
startActivity(mIntent);
} else { //update option
if (!isFirstStart) {
startActivity(mIntent);
application.setFirstStart(true);
} else if (isMenuUpdateClicking) {
startActivity(mIntent);
isMenuUpdateClicking = false;
}
}
} else { //don't show up version dialog except clicking the menu "check update"
if (isMenuUpdateClicking) {
Intent mIntent = new Intent(getApplicationContext(), UpdateClientDialog.class);
Bundle mBundle = new Bundle();
mBundle.putSerializable(Constants.SER_KEY, client);
mIntent.putExtras(mBundle);
startActivity(mIntent);
isMenuUpdateClicking = false;
}
}
dismissLoading();
} catch (Exception e) {
onFailure("app version response error!");
}
}
@Override
public void onFailure(String msg) {
dismissLoading();
Logger.d("describe=" + msg);
if (msg.contains(ResultSet.NET_ERROR.describe)) {
ToastUtil.showToast(getApplicationContext(), R.string.nonetwork_prompt_server_error);
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.main_menu, menu);
// set up a listener for the refresh item
final MenuItem aboutItem = (MenuItem) menu.findItem(R.id.menu_setting_abount);
aboutItem.setOnMenuItemClickListener(new MenuItemClickListener());
MenuItem checkUpdateClient = (MenuItem) menu.findItem(R.id.menu_setting_check_update);
checkUpdateClient.setOnMenuItemClickListener(new MenuItemClickListener());
MenuItem settingClient = (MenuItem) menu.findItem(R.id.menu_setting_settings);
settingClient.setOnMenuItemClickListener(new MenuItemClickListener());
MenuItem menuExit = (MenuItem) menu.findItem(R.id.menu_setting_exit);
menuExit.setOnMenuItemClickListener(new MenuItemClickListener());
searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setQueryHint(Utils.getResourceString(application, R.string.search_message_hint));
searchView.setOnQueryTextListener(this);
searchView.setSubmitButtonEnabled(true);
searchView.setIconifiedByDefault(true);
return true;
}
//menu item click listener on action bar
class MenuItemClickListener implements OnMenuItemClickListener {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_setting_abount:
startActivity(new Intent(BaseActivity.this, AboutDialog.class));
break;
case R.id.menu_setting_check_update:
isMenuUpdateClicking = true;
getClientVersion();
break;
case R.id.menu_setting_settings:
startActivity(new Intent(BaseActivity.this, SettingActivity.class));
break;
case R.id.menu_setting_exit:
exit();
break;
default:
break;
}
return false;
}
}
@Override
public boolean onSuggestionSelect(int position) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onSuggestionClick(int position) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
// TODO Auto-generated method stub
Intent intent = new Intent(application, SearchActivity.class);
Bundle bundle = new Bundle();
bundle.putString(Constants.SEARCH_WORD_KEY, query);
intent.putExtras(bundle);
startActivity(intent);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case android.R.id.home:
finish();
// Toast.makeText(this, "home pressed", Toast.LENGTH_LONG).show();
break;
}
return true;
}
protected void exit() {
if (activityList != null && activityList.size() > 0) {
for (int i = 0; i < activityList.size(); i++) {
Activity activity = activityList.get(i);
if (activity != null) {
activity.finish();
}
}
application.setFirstStart(false);
}
}
}