Created
May 16, 2018 06:04
-
-
Save vishalhalani/6e145d3db556b3fe66a3888de031f30c to your computer and use it in GitHub Desktop.
Fragment to show loadmore item like timeline view
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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