package com.kaorisan.activity;
import static com.kaorisan.CommonUtilities.DISPLAY_MESSAGE_ACTION;
import static com.kaorisan.CommonUtilities.EXTRA_MESSAGE;
import static com.kaorisan.CommonUtilities.SENDER_ID;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.github.jeremiemartinez.refreshlistview.RefreshListView;
import com.github.jeremiemartinez.refreshlistview.RefreshListView.OnRefreshListener;
import com.google.android.gcm.GCMRegistrar;
import com.kaorisan.ConnectionDetector;
import com.kaorisan.R;
import com.kaorisan.ServerUtilities;
import com.kaorisan.WakeLocker;
import com.kaorisan.adapter.RecommendTaskAdapter;
import com.kaorisan.adapter.TaskAdapter;
import com.kaorisan.beans.DashBoard;
import com.kaorisan.beans.RecommendTask;
import com.kaorisan.beans.Task;
import com.kaorisan.common.DebugLog;
import com.kaorisan.common.Utils;
import com.kaorisan.dataLayer.CacheData;
import com.kaorisan.dialog.TextRequestDialog;
import com.kaorisan.lazyload.ImageLoader;
import com.kaorisan.manager.DashBoardManager;
import com.kaorisan.manager.TaskManager;
public class TaskActivity extends Activity implements OnScrollListener {
public static boolean isRecommendTask = false;
public static Activity taskActivity = null;
private final String PLATFORM = "android";
private static final int START_INDEX_SUB_LIST = 0;
private static final int JUMP_ITEM_NUMBER = 2;
private boolean isFullListTask = false;
private static int PAGE = 1;
private static int RESULT_PER_PAGE = 25;
ProgressDialog progressDialog = null;
ImageView imgAvatar;
Button btnLogOutFacebook;
ImageLoader imgLoader;
TextView btnSeeMoreRequest;
AsyncTask<Void, Void, Void> mRegisterTask;
AlertDialogManager alert = new AlertDialogManager();
TaskManager taskManager = null;
ConnectionDetector cd;
private TaskAdapter taskAdapter;
RecommendTaskAdapter recommendTaskAdapter;
ListView listRecommendTaskView;
RefreshListView listTaskView;
private final String EMPTY_STRING = "";
private final String NUMBER_PREFIX = "0";
ProgressDialog showProcess = null;
int scrollStateOfListView = 0;
private int progress_count = 2;
private boolean scrollEnd = false;
int accountDashBoardRequestCode = 10;
TextView txtOpenTask;
TextView txtClosedTask;
TextView txtAvailableTask;
ListView listRecommendTask;
private RelativeLayout footerListViewLayout = null;
// private LinearLayout taskLayout;
// @Override
// protected void onRestart() {
// super.onRestart();
// DebugLog.loge("onRestart");
// if (NewRequestActivity.isSubmit || AudioReviewActivity.isSubmit) {
// bindDataListViewTask(null);
// }
//
// if (listTaskView.findViewWithTag(footerListViewLayout) != null) {
// btnSeeMoreRequest.setClickable(false);
// } else {
// btnSeeMoreRequest.setClickable(true);
// }
//
// // int count = 0;
// // int index = 0;
// // Random random = new Random();
// //
// // ArrayList<RecommendTask> recommendTaskTmp = new
// // ArrayList<RecommendTask>();
// // ArrayList<RecommendTask> recommendTaskCache = CacheData
// // .getInstant().getRecommendTasks();
// //
// // while (true) {
// // count++;
// // if (count != 0) {
// // int indexTemp = random.nextInt(4) - 0;
// //
// // if (indexTemp != index) {
// // index = indexTemp;
// // } else {
// // continue;
// // }
// // recommendTaskTmp.add(recommendTaskCache.get(index));
// // if (recommendTaskTmp.size() == 2) {
// // break;
// // }
// // }
// // }
//
// // recommendTaskAdapter = new RecommendTaskAdapter(
// // TaskActivity.this, R.layout.recommend_task_item,
// // recommendTaskTmp);
// // recommendTaskAdapter = new RecommendTaskAdapter(
// // TaskActivity.this, R.layout.recommend_task_item,
// // CacheData.getInstant().getRecommendTasks());
// // listRecommendTaskView.setAdapter(recommendTaskAdapter);
// // progress_count--;
// // Log.i("Countprogress", "" + progress_count);
//
// };
private void bindListRecommendTask(final RefreshListView listView) {
// if (CacheData.getInstant().getRecommendTasks() == null) {
taskManager.getTaskRecommend(CacheData.getInstant().getTokenKaorisan(),
"5", new TaskManager.OnGetTaskRecommend() {
@Override
public void onGetTaskRecommend(boolean isSuccess,
ArrayList<RecommendTask> listRecommendTask,
String message) {
if (isSuccess) {
CacheData.getInstant().setRecommendTasks(
listRecommendTask);
recommendTaskAdapter = new RecommendTaskAdapter(
TaskActivity.this,
R.layout.recommend_task_item,
listRecommendTask);
listRecommendTaskView
.setAdapter(recommendTaskAdapter);
progress_count--;
Log.i("Countprogress", "" + progress_count);
if (progress_count == 0 || progress_count < 0) {
showProcess.dismiss();
if (listView != null) {
DebugLog.logd("Finish refreshing");
listView.finishRefreshing();
showProcess = null;
}
}
} else {
DebugLog.logd("Can't get list task recommend!");
}
}
});
// }
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
taskActivity = this;
// taskLayout=(LinearLayout)findViewById(R.id.task_layout);
setContentView(R.layout.activity_task);
taskManager = new TaskManager();
DebugLog.logd("Task activity oncreate");
cd = new ConnectionDetector(getApplicationContext());
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
registerReceiver(mHandleMessageReceiver, new IntentFilter(
DISPLAY_MESSAGE_ACTION));
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
DebugLog.logd(SENDER_ID + " sender id");
} else {
if (CacheData.getInstant().getCurrentUser() != null) {
CacheData.getInstant().getCurrentUser().setPushToken(regId);
}
if (GCMRegistrar.isRegisteredOnServer(this)) {
DebugLog.logd("Already registered with GCM");
} else {
Log.i("", "Try register------------------------");
ServerUtilities.register(this, CacheData.getInstant()
.getTokenKaorisan(), PLATFORM, regId);
}
}
listRecommendTaskView = (ListView) findViewById(R.id.listRecommendTask);
listRecommendTaskView.setScrollContainer(false);
listRecommendTaskView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
return true;
}
return false;
}
});
listRecommendTaskView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
isRecommendTask = true;
RecommendTask recommendTask = (RecommendTask) parent
.getItemAtPosition(position);
Intent intentCreateTaskActivity = new Intent(TaskActivity.this,
NewRequestActivity.class);
Bundle bundle = new Bundle();
bundle.putString("title", recommendTask.getTitle());
bundle.putString("requestContent",
recommendTask.getRequestContent());
intentCreateTaskActivity.putExtras(bundle);
startActivity(intentCreateTaskActivity);
}
});
progressDialog = new ProgressDialog(this);
btnSeeMoreRequest = (TextView) findViewById(R.id.btnSeeMoreRequest);
listTaskView = (RefreshListView) findViewById(R.id.listTask);
listTaskView.setScrollbarFadingEnabled(true);
listTaskView.setEnabledDate(true);
// listTaskView.setChoiceMode(ListView.CHOICE_MODE_NONE);
listTaskView.setRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshListView listView) {
DebugLog.logd("onRefresh");
bindDataListViewTask(listView);
}
});
txtOpenTask = (TextView) findViewById(R.id.txtNumberOpen);
txtClosedTask = (TextView) findViewById(R.id.txtNumberClose);
txtAvailableTask = (TextView) findViewById(R.id.txtAvailableTask);
imgLoader = new ImageLoader(this);
imgAvatar = (ImageView) findViewById(R.id.imgAvatar);
imgAvatar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
imgAvatarClicked();
}
});
try {
if (CacheData.getInstant().getCurrentUser() != null
&& CacheData.getInstant().getCurrentUser().getAvatar() != null) {
imgLoader.DisplayImage(CacheData.getInstant().getCurrentUser()
.getAvatar(), imgAvatar);
}
if (CacheData.getInstant().getListTask() != null
|| !CacheData.getInstant().getRecommendTasks().isEmpty()) {
if (CacheData.getInstant().getListTask().size() >= 5) {
taskAdapter = new TaskAdapter(TaskActivity.this,
R.layout.task_item, CacheData.getInstant()
.getListTask().subList(0, 5));
} else {
taskAdapter = new TaskAdapter(TaskActivity.this,
R.layout.task_item, CacheData.getInstant()
.getListTask());
}
listTaskView.setAdapter(taskAdapter);
displayDashBoard(CacheData.getInstant().getDashBoard());
recommendTaskAdapter = new RecommendTaskAdapter(
TaskActivity.this, R.layout.recommend_task_item,
CacheData.getInstant().getRecommendTasks());
listRecommendTaskView.setAdapter(recommendTaskAdapter);
} else {
bindDataListViewTask(null);
}
} catch (Exception exception) {
exception.printStackTrace();
DebugLog.loge("Get data exception: " + exception.getMessage());
redirectLoginPage();
}
}
private void redirectLoginPage() {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
Utils.resetCacheData();
finish();
}
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);
// Waking up mobile if it is sleeping
WakeLocker.acquire(getApplicationContext());
/**
* Take appropriate action on this message depending upon your app
* requirement For now i am just displaying it on the screen
* */
// Showing received message
// lblMessage.append(newMessage + "\n");
DebugLog.logd("New Message: " + newMessage);
// Releasing wake lock
WakeLocker.release();
}
};
private void bindDataListViewTask(final RefreshListView listView) {
DashBoardManager dashBoardManager = new DashBoardManager();
PAGE = 1;
isFullListTask = false;
if (listView == null) {
showProcess = new ProgressDialog(this);
showProcess.setCancelable(false);
showProcess.setTitle("Loading...");
CacheData.getInstant().setCurrentProgressDialog(showProcess);
showProcess.show();
}
bindListRecommendTask(listView);
taskManager.getListTask(CacheData.getInstant().getTokenKaorisan(), PAGE
+ EMPTY_STRING, RESULT_PER_PAGE + EMPTY_STRING,
new TaskManager.OnGetListTaskResult() {
@Override
public void onGetListTaskResultMethod(boolean isSuccess,
List<Task> listTask, String message) {
if (isSuccess) {
if (listTask.size() >= 5) {
taskAdapter = new TaskAdapter(
TaskActivity.this, R.layout.task_item,
listTask.subList(0, 5));
} else {
taskAdapter = new TaskAdapter(
TaskActivity.this, R.layout.task_item,
listTask);
}
taskAdapter.notifyDataSetChanged();
listTaskView.setAdapter(taskAdapter);
CacheData.getInstant().setListTask(listTask);
DebugLog.logd("Update listview thanh cong");
DebugLog.logd("adapter size"
+ (listTaskView.getCount() - 1));
DebugLog.logd("visibleChildCount" + listTask.size());
}
progress_count--;
Log.i("Countprogress", "" + progress_count);
if (progress_count == 0 || progress_count < 0) {
Utils.dismissCurrentProgressDialog();
showProcess = null;
if (listView != null) {
DebugLog.logd("Finish refreshing");
listView.finishRefreshing();
showProcess = null;
}
}
}
});
progress_count = 3;
dashBoardManager.getDashBoard(
CacheData.getInstant().getTokenKaorisan(),
new DashBoardManager.OnGetDashBoardResult() {
@Override
public void onGetDashBoardResultMethod(boolean isSuccess,
DashBoard dashBoard, String message) {
if (isSuccess) {
CacheData.getInstant().setDashBoard(dashBoard);
displayDashBoard(dashBoard);
progress_count--;
Log.i("Countprogress", "" + progress_count);
if (progress_count == 0 || progress_count < 0) {
Utils.dismissCurrentProgressDialog();
if (listView != null) {
DebugLog.logd("Finish refreshing");
listView.finishRefreshing();
showProcess = null;
}
}
} else {
if (CacheData.getInstant()
.getCurrentProgressDialog() != null) {
CacheData.getInstant()
.getCurrentProgressDialog().dismiss();
}
CacheData.getInstant().setDashBoard(null);
}
DebugLog.logd((dashBoard == null) + "");
CheckDashBoardData();
}
});
listTaskView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
DebugLog.logd("click");
Task task = CacheData.getInstant().getListTask().get(arg2);
Intent intent = new Intent(TaskActivity.this,
TaskDetailActivity.class);
CacheData.getInstant().setCurrentTask(task);
startActivity(intent);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == accountDashBoardRequestCode
&& LoginActivity.isLogout == 1) {
Intent loginIntent = new Intent(this, LoginActivity.class);
startActivity(loginIntent);
finish();
}
}
private void displayDashBoard(DashBoard dashBoard) {
txtOpenTask.setText(dashBoard.getOpenTask() < 10 ? NUMBER_PREFIX
+ dashBoard.getOpenTask() : dashBoard.getOpenTask()
+ EMPTY_STRING);
txtClosedTask.setText(dashBoard.getClosedTask() < 10 ? NUMBER_PREFIX
+ dashBoard.getClosedTask() : dashBoard.getClosedTask()
+ EMPTY_STRING);
txtAvailableTask
.setText(dashBoard.getAvailableTask() < 10 ? NUMBER_PREFIX
+ dashBoard.getAvailableTask() : dashBoard
.getAvailableTask() + EMPTY_STRING);
}
// private void refreshDashBoard() {
// txtOpenTask
// .setText(CacheData.getInstant().getDashBoard().getOpenTask() < 10 ?
// NUMBER_PREFIX
// + CacheData.getInstant().getDashBoard().getOpenTask()
// : CacheData.getInstant().getDashBoard().getOpenTask()
// + EMPTY_STRING);
// txtClosedTask.setText(CacheData.getInstant().getDashBoard()
// .getClosedTask() < 10 ? NUMBER_PREFIX
// + CacheData.getInstant().getDashBoard().getClosedTask()
// : CacheData.getInstant().getDashBoard().getClosedTask()
// + EMPTY_STRING);
// txtAvailableTask.setText(CacheData.getInstant().getDashBoard()
// .getAvailableTask() < 10 ? NUMBER_PREFIX
// + CacheData.getInstant().getDashBoard().getAvailableTask()
// : CacheData.getInstant().getDashBoard().getAvailableTask()
// + EMPTY_STRING);
// }
public void imgAvatarClicked() {
DebugLog.logd("imageAvatar clicked");
DebugLog.logd("SrollEnd " + scrollEnd);
Intent accountIntent = new Intent(this, AccountDashboardActivity.class);
startActivityForResult(accountIntent, accountDashBoardRequestCode);
}
public void onButtonClick(View view) {
switch (view.getId()) {
case R.id.btnCreatAVoice:
progressDialog.setTitle("Processing...");
progressDialog.setCancelable(false);
progressDialog.show();
new Thread() {
public void run() {
try {
sleep(2000);
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
Intent intent = new Intent(TaskActivity.this,
AudioRecordingActivity.class);
startActivity(intent);
progressDialog.dismiss();
}
}.start();
break;
case R.id.btnCreatAText:
isRecommendTask = false;
TextRequestDialog textRequestActivity = new TextRequestDialog(this);
textRequestActivity.show();
break;
case R.id.btnSeeMoreRequest:
DebugLog.logd("Button See more request click");
List<Task> listTask = CacheData.getInstant().getListTask();
if (listTask != null && !listTask.isEmpty()) {
int visibleChildCount = listTaskView.getAdapter().getCount() - 1;
DebugLog.logd("adapter size"
+ (listTaskView.getAdapter().getCount() - 1));
DebugLog.logd("visibleChildCount" + listTask.size());
if (visibleChildCount < listTask.size()) {
if (listTaskView.getAdapter().getCount() + JUMP_ITEM_NUMBER < listTask
.size()) {
taskAdapter = new TaskAdapter(TaskActivity.this,
R.layout.task_item, CacheData
.getInstant()
.getListTask()
.subList(
START_INDEX_SUB_LIST,
(listTaskView.getAdapter()
.getCount() - 1)
+ JUMP_ITEM_NUMBER));
} else if (listTaskView.getAdapter().getCount()
+ JUMP_ITEM_NUMBER > listTask.size()) {
taskAdapter = new TaskAdapter(TaskActivity.this,
R.layout.task_item, CacheData
.getInstant()
.getListTask()
.subList(
START_INDEX_SUB_LIST,
(listTaskView.getAdapter()
.getCount() - 1)
+ JUMP_ITEM_NUMBER - 1));
// btnSeeMoreRequest.setClickable(false);
} else if (listTaskView.getAdapter().getCount()
+ JUMP_ITEM_NUMBER == listTask.size()) {
taskAdapter = new TaskAdapter(TaskActivity.this,
R.layout.task_item, CacheData.getInstant()
.getListTask());
}
taskAdapter.notifyDataSetChanged();
listTaskView.setAdapter(taskAdapter);
listTaskView.setSelection(listTaskView.getAdapter()
.getCount() - 1);
} else {
if (isFullListTask == false) {
PAGE += 1;
// RESULT_PER_PAGE = 2;
// ProgressDialog progressDialog = new
// ProgressDialog(this);
// progressDialog.setTitle("Loading...");
// progressDialog.setCancelable(false);
// progressDialog.show();
// CacheData.getInstant().setCurrentProgressDialog(progressDialog);
DebugLog.logd("page: " + PAGE);
LayoutInflater layoutInflater = LayoutInflater
.from(this);
footerListViewLayout = (RelativeLayout) layoutInflater
.inflate(R.layout.progress_layout, null, false);
footerListViewLayout.setClickable(false);
footerListViewLayout.setTag(footerListViewLayout);
listTaskView.addFooterView(footerListViewLayout);
footerListViewLayout.setPadding(0, 30, 10, 30);
listTaskView.setSelection(listTaskView.getAdapter()
.getCount() - 1);
btnSeeMoreRequest.setClickable(false);
taskManager.getListTask(CacheData.getInstant()
.getTokenKaorisan(), PAGE + EMPTY_STRING,
RESULT_PER_PAGE + EMPTY_STRING,
new TaskManager.OnGetListTaskResult() {
@Override
public void onGetListTaskResultMethod(
boolean isSuccess,
List<Task> listTask, String message) {
if (isSuccess && listTask != null) {
if (CacheData.getInstant()
.getListTask() != null) {
if (listTask.isEmpty()) {
Log.i("Vao day khong",
"Vao day di");
isFullListTask = true;
btnSeeMoreRequest
.setClickable(false);
} else {
CacheData.getInstant()
.getListTask()
.addAll(listTask);
taskAdapter = new TaskAdapter(
TaskActivity.this,
R.layout.task_item,
CacheData
.getInstant()
.getListTask()
.subList(
0,
(listTaskView
.getCount() - 1)
+ JUMP_ITEM_NUMBER));
}
} else {
taskAdapter = new TaskAdapter(
TaskActivity.this,
R.layout.task_item,
listTask);
CacheData.getInstant()
.setListTask(listTask);
}
taskAdapter.notifyDataSetChanged();
listTaskView
.setAdapter(taskAdapter);
listTaskView
.setSelection(listTaskView
.getAdapter()
.getCount() - 1);
// CacheData.getInstant().setListTask(listTask);
DebugLog.logd("Update listview thanh cong");
listTaskView
.removeFooterView(footerListViewLayout);
btnSeeMoreRequest
.setClickable(true);
} else {
PAGE -= 1;
listTaskView
.removeFooterView(footerListViewLayout);
btnSeeMoreRequest
.setClickable(true);
}
Log.i("Countprogress", EMPTY_STRING
+ progress_count);
}
});
}
}
}
break;
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
DebugLog.logd("Back To Home Android");
if (LoginActivity.loginActivity != null) {
LoginActivity.loginActivity.finish();
}
finish();
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
scrollEnd = false;
DebugLog.logd("OnScroll");
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
DebugLog.logd("OnScrollStateChanged " + scrollState);
scrollStateOfListView = scrollState;
if (scrollState != 0) {
scrollEnd = false;
} else {
scrollEnd = true;
}
DebugLog.logd("State " + scrollEnd);
}
@Override
protected void onResume() {
super.onResume();
DebugLog.logd("onResume");
// listTaskView.clearFocus();
// taskLayout.requestLayout();
new Thread() {
public void run() {
try {
if (CacheData.getInstant().getCurrentProgressDialog() != null) {
while (CacheData.getInstant()
.getCurrentProgressDialog().isShowing()) {
try {
sleep(2000);
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
if (CacheData.getInstant()
.getCurrentProgressDialog() == null) {
break;
}
}
CheckDashBoardData();
}
} catch (Exception e) {
DebugLog.loge("Exception: " + e.getMessage());
}
}
}.start();
if (NewRequestActivity.isSubmit || AudioReviewActivity.isSubmit
|| ReplyActivity.isReply) {
Log.i("refresh list", "listtask");
bindDataListViewTask(null);
NewRequestActivity.isSubmit = false;
AudioReviewActivity.isSubmit = false;
ReplyActivity.isReply = false;
}
}
private void CheckDashBoardData() {
DebugLog.logd((CacheData.getInstant().getDashBoard() == null) + "");
if (CacheData.getInstant().getDashBoard() == null
&& CacheData.getInstant().getCurrentProgressDialog() != null) {
if (!CacheData.getInstant().getCurrentProgressDialog().isShowing()) {
DebugLog.logd("Finish activity because get data failed!");
Utils.resetCacheData();
Utils.showToast(TaskActivity.this,
getResources().getString(R.string.get_data_failed_msg));
finish();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
try {
unregisterReceiver(mHandleMessageReceiver);
GCMRegistrar.onDestroy(this);
} catch (Exception e) {
Log.e("UnRegister Receiver Error", "> " + e.getMessage());
}
}
}