diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java index 6bf9a04..1ede65f 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java @@ -7,6 +7,7 @@ import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; +import android.preference.SwitchPreference; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -40,7 +41,7 @@ import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext; public class SharingFragment extends PreferenceFragment { - protected Preference locationSharing; + protected SwitchPreference locationSharing; protected Preference locationMode; protected ListPreference manualLocationList; protected PreferenceCategory preferenceCategory; @@ -113,7 +114,7 @@ public class SharingFragment extends PreferenceFragment { public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.pref_sharing); - locationSharing = findPreference("key_sharing_enabled"); + locationSharing = (SwitchPreference) findPreference("key_sharing_enabled"); locationMode = findPreference("key_location_level"); preferenceCategory = (PreferenceCategory) findPreference("category_sharing"); manualLocationList = (ListPreference) findPreference("key_manual_location_value"); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/TutorTab.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/TutorTab.java index f647bf3..31ac9e6 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/TutorTab.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/TutorTab.java @@ -6,6 +6,7 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; +import android.widget.Adapter; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; @@ -27,6 +28,7 @@ import com.uam.wmi.findmytutor.utils.InfoHelperUtils; import com.uam.wmi.findmytutor.utils.PrefUtils; import com.uam.wmi.findmytutor.utils.RestApiHelper; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -47,10 +49,12 @@ public class TutorTab extends AppCompatActivity { private TextView userRoom; private TextView userEmail; private TextView department; + private Button addDutyButton; private Button saveButon; + private Boolean ifTutorTabExists = true; private List dutyHourList; private RecyclerView dutyHoursRecycller; - private RecyclerView.Adapter dutyHoursAdapter; + private DutyHoursAdapter dutyHoursAdapter; private RecyclerView.LayoutManager dutyHoursLayoutManager; private TutorTabViewModel newTab; @@ -60,19 +64,19 @@ public class TutorTab extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.content_tutor_tab); - TextView userName = findViewById(R.id.userName); + userName = findViewById(R.id.userName); // TextView userDutyHours = findViewById(R.id.userDutyHours); - EditText userNote = findViewById(R.id.userNote); - TextView userRoom = findViewById(R.id.userRoom); - TextView userEmail = findViewById(R.id.userEmail); - TextView department = findViewById(R.id.userDepartment); - Button saveButon = findViewById(R.id.saveButon); + userNote = findViewById(R.id.userNote); + userRoom = findViewById(R.id.userRoom); + userEmail = findViewById(R.id.userEmail); + department = findViewById(R.id.userDepartment); + saveButon = findViewById(R.id.saveButon); + addDutyButton = findViewById(R.id.addDuty); dutyHoursRecycller = (RecyclerView) findViewById(R.id.dutyHourView); dutyHoursLayoutManager = new LinearLayoutManager(this); dutyHoursRecycller.setLayoutManager(dutyHoursLayoutManager); - tutorTabService = ApiClient.getClient(getApplicationContext()) .create(TutorTabApi.class); userService = ApiClient.getClient(getApplicationContext()) @@ -84,31 +88,40 @@ public class TutorTab extends AppCompatActivity { .subscribeWith(new DisposableSingleObserver() { @Override public void onSuccess(TutorTabViewModel tutorTabViewModel) { - Log.d("dupa tab", tutorTabViewModel.toString()); dutyHourList = tutorTabViewModel.getDutyHours(); if(dutyHourList == null){ - Log.d("dupa godziny","null godziny"); }else{ - dutyHoursAdapter = new DutyHoursAdapter(getApplicationContext(),dutyHourList); dutyHoursRecycller.setAdapter(dutyHoursAdapter); - Log.d("dupa godziny",dutyHourList.toString()); + addDutyButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addEmptyDuty(dutyHoursAdapter); + } + }); } -// List dutyHoursList = Stream.of(tutorTabViewModel.getDutyHours()) -// .map(DutyHourViewModel::getSummary).toList(); - userRoom.setText(String.format("%s", tutorTabViewModel.getRoom())); userEmail.setText(String.format("%s", tutorTabViewModel.getEmailTutorTab())); if (!tutorTabViewModel.getNote().equals("")) { userNote.setText(String.format("%s", tutorTabViewModel.getNote())); } -// userDutyHours.setText(String.format("%s: %s", getString(R.string.userDutyHoursHeader), Arrays.toString(dutyHoursList.toArray()))); - } @Override public void onError(Throwable e) { + int code = ((HttpException) e).response().code(); + if( code == 404){ + ifTutorTabExists = false; + dutyHoursAdapter = new DutyHoursAdapter(getApplicationContext(),new ArrayList()); + dutyHoursRecycller.setAdapter(dutyHoursAdapter); + addDutyButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addEmptyDuty(dutyHoursAdapter); + } + }); + } showError(e); } })); @@ -134,18 +147,32 @@ public class TutorTab extends AppCompatActivity { @Override public void onError(Throwable e) { + showError(e); } })); - setUpSaveListener(saveButon, userNote); + setUpSaveListener(saveButon); + } + private void addEmptyDuty(DutyHoursAdapter adapter){ + adapter.addDuty(new DutyHourViewModel()); + adapter.notifyItemInserted(adapter.getItemCount()); + dutyHoursRecycller.scrollToPosition(adapter.getItemCount()-1); } - private void setUpSaveListener(Button button, EditText note) { + private void setUpSaveListener(Button button) { button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - newTab = new TutorTabViewModel(PrefUtils.getUserId(getApplicationContext()),note.getText().toString()); - putUserTab(newTab); + newTab = new TutorTabViewModel(PrefUtils.getUserId(getApplicationContext()), + userRoom.getText().toString(), + userEmail.getText().toString(), + userNote.getText().toString(), + dutyHoursAdapter.getDutyList()); + if(ifTutorTabExists){ + putUserTab(newTab); + }else{ + postUserTab(newTab); + } } }); } @@ -154,12 +181,21 @@ public class TutorTab extends AppCompatActivity { disposable.add(tutorTabService.apiUsersTutorTabByTutorIdPut(PrefUtils.getUserId(getApplicationContext()), tutorTabViewModel) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(this::handleResponse, this::handleError)); + .subscribe(this::handleResponsePut, this::handleError)); + } + private void postUserTab(TutorTabViewModel tutorTabViewModel) { + disposable.add(tutorTabService.apiUsersTutorTabByTutorIdPost(PrefUtils.getUserId(getApplicationContext()), tutorTabViewModel) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(this::handleResponsePost, this::handleError)); } -// private void postUserTab() - private void handleResponse(TutorTabViewModel tutorTabViewModel) { - Toast.makeText(getApplicationContext(), getApplicationContext().getString(R.string.modal_feedback_thankyou), Toast.LENGTH_SHORT).show(); + private void handleResponsePut(Response resp) { + Toast.makeText(getApplicationContext(), getApplicationContext().getString(R.string.updateToast), Toast.LENGTH_SHORT).show(); + + } + private void handleResponsePost(TutorTabViewModel tutorTabViewModel ) { + Toast.makeText(getApplicationContext(), getApplicationContext().getString(R.string.updateToast), Toast.LENGTH_SHORT).show(); } @@ -186,9 +222,6 @@ public class TutorTab extends AppCompatActivity { } else { message = "Network Error!"; } - -// Snackbar.make(coordinatorLayout, message, Snackbar.LENGTH_LONG) -// .show(); Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/uam/wmi/findmytutor/adapters/DutyHoursAdapter.java b/app/src/main/java/com/uam/wmi/findmytutor/adapters/DutyHoursAdapter.java index 43725c2..ba7041c 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/adapters/DutyHoursAdapter.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/adapters/DutyHoursAdapter.java @@ -3,12 +3,18 @@ package com.uam.wmi.findmytutor.adapters; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageButton; import android.widget.TextView; + +import com.annimon.stream.Collectors; +import com.annimon.stream.Stream; import com.uam.wmi.findmytutor.R; -import com.uam.wmi.findmytutor.model.DutyHour; import com.uam.wmi.findmytutor.model.DutyHourViewModel; import java.util.ArrayList; @@ -22,9 +28,24 @@ public class DutyHoursAdapter extends RecyclerView.Adapter hours; public DutyHoursAdapter(Context context, List hours) { - this.context = context; - this.hours = new ArrayList(hours); - } + this.context = context; + this.hours = new ArrayList(hours); +} + + +public List getDutyList(){ + ArrayList notEmpty = Stream.of(hours).filter(DutyHourViewModel::isValid).collect(Collectors.toList()); + return hours; +} +public void addDuty(DutyHourViewModel duty){ + hours.add(duty); +} +private void removeDuty(int pos){ + hours.remove(pos); + this.notifyItemRemoved(pos); + Log.d("DutyIndex af rm size",Integer.toString(getItemCount())); + +} @NonNull @Override @@ -38,9 +59,77 @@ public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { DutyHourViewModel duty = hours.get(position); - holder.dutyDay.setText(duty.getDay()); - holder.dutyStart.setText(duty.getStart()); - holder.dutyStop.setText(duty.getEnd()); + holder.dutyDay.setText(duty.getDay()); + holder.dutyDay.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + duty.setDay(holder.dutyDay.getText().toString()); + } + }); + holder.dutyStart.setText(duty.getStart()); + holder.dutyStart.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + duty.setStart(holder.dutyStart.getText().toString()); + } + }); + holder.dutyStop.setText(duty.getEnd()); + holder.dutyStop.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + duty.setEnd(holder.dutyStop.getText().toString()); + } + }); + holder.deleteRow.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try{ + Log.d("DutyIndex bf rm size",Integer.toString(getItemCount())); + Log.d("DutyIndex bf rm pos",Integer.toString(holder.getLayoutPosition())); + removeDuty(holder.getLayoutPosition()); + Log.d("DutyIndex af rm pos",Integer.toString(holder.getLayoutPosition())); + + + }catch(Error e){ + Log.e("DutyIndex error",e.getMessage()); + Log.e("DutyIndex size",Integer.toString(getItemCount())); + Log.e("DutyIndex pos",Integer.toString(holder.getAdapterPosition())); + + + } + + } + }); } @@ -60,6 +149,9 @@ class MyViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.duty_stop_value) TextView dutyStop; + @BindView(R.id.deleteRow) + ImageButton deleteRow; + MyViewHolder(View view) { super(view); ButterKnife.bind(this, view); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/DutyHourViewModel.java b/app/src/main/java/com/uam/wmi/findmytutor/model/DutyHourViewModel.java index d3bcbe2..241d998 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/model/DutyHourViewModel.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/model/DutyHourViewModel.java @@ -24,6 +24,20 @@ public class DutyHourViewModel { this.day = day; return this; } + public Boolean isValid(){ + if(this.day.isEmpty()){ + return false; + }else if( !this.start.isEmpty() && this.end.isEmpty() ){ + return false; + }else{ + return true; + } + } + public DutyHourViewModel(){ + day=""; + start=""; + end=""; + } /** * Get day diff --git a/app/src/main/java/com/uam/wmi/findmytutor/model/TutorTabViewModel.java b/app/src/main/java/com/uam/wmi/findmytutor/model/TutorTabViewModel.java index e726ce9..73ed9d8 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/model/TutorTabViewModel.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/model/TutorTabViewModel.java @@ -33,11 +33,12 @@ public class TutorTabViewModel { @SerializedName("dutyHours") private List dutyHours = null; - public TutorTabViewModel(String userId, String note){ + public TutorTabViewModel(String userId, String room, String email, String note, List dutyHours){ this.userId=userId; -// this.room=room; -// this.emailTutorTab=emailTutorTab; + this.room=room; + this.emailTutorTab=email; this.note=note; + this.dutyHours = new ArrayList(dutyHours); } public TutorTabViewModel tutorTabId(UUID tutorTabId) { diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/TutorTabApi.java b/app/src/main/java/com/uam/wmi/findmytutor/service/TutorTabApi.java index e5ba6b1..837e356 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/TutorTabApi.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/TutorTabApi.java @@ -5,6 +5,7 @@ import com.uam.wmi.findmytutor.model.TutorTabViewModel; import io.reactivex.Observable; import io.reactivex.Single; +import retrofit2.Response; import retrofit2.http.*; @@ -40,6 +41,10 @@ public interface TutorTabApi { @retrofit2.http.Path("tutorId") String tutorId ); + @POST("api/users/tutorTab/{tutorId}") + Single apiUsersTutorTabByTutorIdPost( + @retrofit2.http.Path("tutorId") String tutorId, @retrofit2.http.Body TutorTabViewModel tutorTab + ); /** * * @@ -51,7 +56,7 @@ public interface TutorTabApi { "Content-Type:application/json" }) @PUT("api/users/tutorTab/{tutorId}") - Observable apiUsersTutorTabByTutorIdPut( + Observable> apiUsersTutorTabByTutorIdPut( @retrofit2.http.Path("tutorId") String tutorId, @retrofit2.http.Body TutorTabViewModel tutorTab ); diff --git a/app/src/main/res/layout/content_tutor_tab.xml b/app/src/main/res/layout/content_tutor_tab.xml index 95ddbe6..178d4ac 100644 --- a/app/src/main/res/layout/content_tutor_tab.xml +++ b/app/src/main/res/layout/content_tutor_tab.xml @@ -1,16 +1,21 @@ - - + android:layout_height="match_parent"> + - - - - - + android:orientation="vertical" + > + + + + + + - - - + + + + + + + - - - - @@ -117,24 +138,24 @@ android:layout_height="wrap_content" android:paddingTop="0dp" android:paddingBottom="0dp" - android:textColor="@color/note_list_text" + android:textColor="@color/mapboxRedDark" android:text="@string/userNoteTitle"/> - + @@ -145,6 +166,7 @@ android:text="@string/saveButton" /> + + - \ No newline at end of file diff --git a/app/src/main/res/layout/duty_hour_row.xml b/app/src/main/res/layout/duty_hour_row.xml index 5bbefee..c50c745 100644 --- a/app/src/main/res/layout/duty_hour_row.xml +++ b/app/src/main/res/layout/duty_hour_row.xml @@ -1,75 +1,61 @@ - + android:layout_height="wrap_content" + android:orientation="horizontal"> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d95dd7b..8885f2e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -308,6 +308,8 @@ Duty hours Personal info Your note + Thank you for updating your profile. +