Skip to content

Instantly share code, notes, and snippets.

@vishalhalani
Created May 16, 2018 06:04
Show Gist options
  • Save vishalhalani/6e145d3db556b3fe66a3888de031f30c to your computer and use it in GitHub Desktop.
Save vishalhalani/6e145d3db556b3fe66a3888de031f30c to your computer and use it in GitHub Desktop.
Fragment to show loadmore item like timeline view
/**
* Created by vishal.halani on 10-May-18.
*/
public class TaskFragment extends Fragment implements OnWebAPIResponseListener {
private static final int RC_EMP = 111;
private static final int RC_GET_TASK = 222;
private static final int RC_LOAD_MORE_TASK = 333;
private Activity mActivity;
private SegmentedGroup segmentedGroup;
private LinearLayout empSelectionLayout;
private CoordinatorLayout layout;
private SharedPreferences userPref;
private String empID;
private boolean isAdmin, isPendingTask;
private TextView tvEmpSelection;
private RecyclerView recyclerView;
private ProgressBar progressView;
private AssignedTaskController controller;
private ArrayList<TaskModel> mlist;
private TaskAdapter mAdapter;
private String empRole;
private int pageNumberCounter = 0;
private String nextUrl = "";
@Override
public void onAttach(Context context) {
super.onAttach(context);
mActivity = (Activity) context;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_assigned_task, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setComponants(view); // Bind all views
userPref = mActivity.getSharedPreferences(Const.MyPREFERENCES,
MODE_PRIVATE);
controller = new AssignedTaskController(this, mActivity);
empRole = userPref.getString(Const.ROLE, "");
setRecyclerView();
// Check logged user role as per give functionality to see other employee task
if (empRole.equals(Const.ROLE_LEVEL3)) {
empSelectionLayout.setVisibility(View.GONE);
empID = userPref.getString(Const.LOGGEDUSERID, "");
isAdmin = false;
} else {
isAdmin = true;
empSelectionLayout.setVisibility(View.VISIBLE);
empID = userPref.getString(Const.LOGGEDUSERID, "");
// if (empRole.equals(Const.ROLE_LEVEL1)) {
// tvEmpSelection.setText("All");
// empID = "0";
// } else if(empRole.equals(Const.ROLE_LEVEL2)){
empID = userPref.getString(Const.LOGGEDUSERID, "0");
tvEmpSelection.setText(userPref.getString(Const.USERFULLNAME, "All"));
// }
tvEmpSelection.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mActivity, ItemSelectionActivity.class);
if(empRole.equals(Const.ROLE_LEVEL2))
{
Set<String> useraccessList = userPref.getStringSet(Const.USERACCESS, null);
if(useraccessList != null && useraccessList.size()>0)
{
intent.putExtra("isShowAllOption", true);
}else {
intent.putExtra("isShowAllOption", false);
}
}else {
intent.putExtra("isShowAllOption", true);
}
startActivityForResult(intent, RC_EMP);
mActivity.overridePendingTransition(R.anim.right_in, R.anim.left_out);
}
});
}
if (!empID.equals("")) {
isPendingTask = true;
getTask(RC_GET_TASK, isPendingTask);
//controller.getAllTask(RC_GET_TASK, empID, selectedStartDate, selectedEndDate);
}
}
private void setRecyclerView() {
// set true if your RecyclerView is finite and has fixed size
recyclerView.setHasFixedSize(false);
mlist = new ArrayList<>();
// Set the required LayoutManager
final LinearLayoutManager mLayoutManager = new LinearLayoutManager(mActivity);
recyclerView.setLayoutManager(mLayoutManager);
// recyclerView.addItemDecoration(new ItemOffsetDecoration(20));
// Initialize and set the RecyclerView Adapter
mAdapter = new TaskAdapter(mlist, mActivity, recyclerView);
// set the adapter object to the Recyclerview
recyclerView.setAdapter(mAdapter);
mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
//add null , so the adapter will check view_type and show progress bar at bottom
mlist.add(null);
recyclerView.post(new Runnable() {
public void run() {
mAdapter.notifyItemInserted(mlist.size() - 1);
}
});
if (nextUrl != null && !nextUrl.equals("")) {
loadMoreTask(RC_LOAD_MORE_TASK, nextUrl);
} else {
// remove progress item
mlist.remove(mlist.size() - 1);
recyclerView.post(new Runnable() {
public void run() {
mAdapter.notifyItemRemoved(mlist.size());
}
});
mAdapter.setLoaded();
if (mlist.size() > 20) {
Const.showSnackbar(mActivity.getResources().getString(R.string.no_more_Task), layout, false);
}
}
}
});
}
private void getTask(final int requestCode, final boolean isPendingTask) {
if (Const.isInternetOn(mActivity)) {
showProgressDialog();
//add null , so the adapter will check view_type and show progress bar at bottom
controller.getPendingCompletedTask(requestCode, empID, empRole, isPendingTask);
// controller.editEmployee(requestCode, model);
} else {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(mActivity);
builder.setTitle(mActivity.getResources().getString(R.string.internet_connetion_title));
builder.setMessage(getResources().getString(R.string.connetion_message));
builder.setCancelable(false);
builder.setPositiveButton(mActivity.getResources().getString(R.string.try_again), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
getTask(requestCode, isPendingTask);
}
});
builder.show();
}
}
private void loadMoreTask(final int requestCode, final String nextUrl) {
if (Const.isInternetOn(mActivity)) {
// showProgressDialog();
controller.getPendingCompletedLoadMoreTask(requestCode, nextUrl);
// controller.editEmployee(requestCode, model);
} else {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(mActivity);
builder.setTitle(mActivity.getResources().getString(R.string.internet_connetion_title));
builder.setMessage(getResources().getString(R.string.connetion_message));
builder.setCancelable(false);
builder.setPositiveButton(mActivity.getResources().getString(R.string.try_again), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
loadMoreTask(requestCode, nextUrl);
}
});
builder.show();
}
}
/**
* Bind all layout widgets
*
* @param view layout
*/
private void setComponants(View view) {
tvEmpSelection = (TextView) view.findViewById(R.id.frag_assigned_task_selection_tv);
empSelectionLayout = (LinearLayout) view.findViewById(R.id.frag_assigned_task_selection_layout);
recyclerView = (RecyclerView) view.findViewById(R.id.frag_assigned_task_recycler_view);
// segmentedGroup = (SegmentedGroup) view.findViewById(R.id.frag_assigned_task_segment);
progressView = (ProgressBar) view.findViewById(R.id.fragment_assigned_task_progressview);
layout = (CoordinatorLayout) view.findViewById(R.id.frag_assigned_task_parent_layout);
}
/**
* show progress view
*/
private void showProgressDialog() {
if (progressView != null && mActivity != null) {
progressView.setVisibility(View.VISIBLE);
mActivity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
}
/**
* cancel progress view
*/
private void cancelProgressDialog() {
if (progressView != null && mActivity != null) {
progressView.setVisibility(View.GONE);
mActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
}
public void isPendingSelected(boolean pendingSelected) {
isPendingTask = pendingSelected;
getTask(RC_GET_TASK, isPendingTask);
}
@Override
public void onCallComplete(Object object, int requestCode) {
switch (requestCode) {
case RC_GET_TASK:
if (object != null) {
if (object instanceof TaskList) {
TaskList tlist = ((TaskList) object);
if (tlist.getNextUrl() != null) {
nextUrl = tlist.getNextUrl();
} else {
nextUrl = null;
}
cancelProgressDialog();
mlist.clear();
ArrayList<TaskModel> list = (ArrayList<TaskModel>) tlist.getTaskModelList();
mlist.addAll(list);
if (mlist.size() > 0) {
// cancelProgressDialog();
//TODO Set list to adapter
// mAdapter = new AssignedTaskAdapter(mlist, mActivity, recyclerView);
if (mAdapter != null) {
if (empID.equals("0")) {
mAdapter.setAllSelected(true);
} else {
mAdapter.setAllSelected(false);
}
mAdapter.setLoaded();
mAdapter.notifyDataSetChanged();
}
// recyclerView.setAdapter(mAdapter);
} else {
// cancelProgressDialog();
// mlist.remove(mlist.size() - 1);
// mAdapter.notifyItemRemoved(mlist.size());
cancelProgressDialog();
mlist.clear();
//TODO Set list to adapter
if (mAdapter != null) {
if (empID.equals("0")) {
mAdapter.setAllSelected(true);
} else {
mAdapter.setAllSelected(false);
}
mAdapter.setLoaded();
mAdapter.notifyDataSetChanged();
}
if (isPendingTask) {
Const.showSnackbar(mActivity.getResources().getString(R.string.no_Pending_Task), layout, false);
} else {
Const.showSnackbar(mActivity.getResources().getString(R.string.no_completed_Task), layout, false);
}
}
}
}
break;
case RC_LOAD_MORE_TASK:
if (object != null) {
if (object instanceof TaskList) {
TaskList tlist = ((TaskList) object);
if (tlist.getNextUrl() != null) {
nextUrl = tlist.getNextUrl();
} else {
nextUrl = null;
}
ArrayList<TaskModel> morelist = (ArrayList<TaskModel>) tlist.getTaskModelList();
if (morelist.size() > 0) {
// remove progress item
mlist.remove(mlist.size() - 1);
recyclerView.post(new Runnable() {
public void run() {
mAdapter.notifyItemRemoved(mlist.size());
}
});
mlist.addAll(morelist);
mAdapter.setLoaded();
mAdapter.notifyDataSetChanged();
} else {
mlist.remove(mlist.size() - 1);
if (mAdapter != null) {
recyclerView.post(new Runnable() {
public void run() {
mAdapter.notifyItemRemoved(mlist.size());
}
});
mAdapter.setLoaded();
mAdapter.notifyDataSetChanged();
if (empID.equals("0")) {
mAdapter.setAllSelected(true);
} else {
mAdapter.setAllSelected(false);
}
}
if (isPendingTask) {
Const.showSnackbar(mActivity.getResources().getString(R.string.no_more_pending_Task), layout, false);
} else {
Const.showSnackbar(mActivity.getResources().getString(R.string.no_more_completed_Task), layout, false);
}
}
}
}
break;
}
}
@Override
public void onCallError(APIError errorModel, int requestCode) {
switch (requestCode) {
case RC_GET_TASK:
if (errorModel != null) {
if (errorModel.getErrorCode() == 401) {
getRefreshToken(RC_GET_TASK);
//controller.getRefreshAccessToken(RC_GET_TASK);
} else {
cancelProgressDialog();
Const.showSnackbar(errorModel.getMessage(), layout, true);
}
}
break;
case RC_LOAD_MORE_TASK:
if (errorModel != null) {
if (errorModel.getErrorCode() == 401) {
getRefreshToken(RC_LOAD_MORE_TASK);
//controller.getRefreshAccessToken(RC_GET_TASK);
} else {
mlist.remove(mlist.size() - 1);
recyclerView.post(new Runnable() {
public void run() {
mAdapter.notifyItemRemoved(mlist.size());
}
});
mAdapter.setLoaded();
Const.showSnackbar(errorModel.getMessage(), layout, true);
}
}
break;
}
}
@Override
public void onCallFailure(String errorMessage, int requestCode) {
cancelProgressDialog();
Const.showSnackbar(errorMessage, layout, true);
}
@Override
public void OnTokenRefresh(boolean isRefresh, int requestCode) {
if (isRefresh) {
switch (requestCode) {
case RC_GET_TASK:
getTask(RC_GET_TASK, isPendingTask);
//controller.getAllTask(RC_GET_TASK, empID, selectedStartDate, selectedEndDate);
break;
case RC_LOAD_MORE_TASK:
loadMoreTask(RC_LOAD_MORE_TASK, nextUrl);
//controller.getAllTask(RC_GET_TASK, empID, selectedStartDate, selectedEndDate);
break;
}
}
}
@Override
public void onCallComplete(List obj, int requestCode) {
}
/**
* Make web call to get new access token
*
* @param requestCode Request code for web call
*/
private void getRefreshToken(final int requestCode) {
if (Const.isInternetOn(mActivity)) {
controller.getRefreshAccessToken(requestCode);
} else {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(mActivity);
builder.setTitle(getResources().getString(R.string.internet_connetion_title));
builder.setMessage(getResources().getString(R.string.connetion_message));
builder.setCancelable(false);
builder.setPositiveButton(getResources().getString(R.string.try_again), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
getRefreshToken(requestCode);
}
});
builder.show();
}
}
/**
* handle employee selection
*
* @param requestCode request code to identify emoployee selection
* @param resultCode result code to identify employee selected or not
* @param data data is contain selected employee details
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (requestCode == RC_EMP) {
if (resultCode == RESULT_OK) {
if (data != null) {
empID = data.getStringExtra("empID");
tvEmpSelection.setText(data.getStringExtra("empName"));
if (empID != null) {
if (empID.equals("0")) {
//TODO Make web call to get all Pending task
getTask(RC_GET_TASK, isPendingTask);
} else {
//TODO Make web call to get all Pending task for particular user
getTask(RC_GET_TASK, isPendingTask);
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment