mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-23 13:59:29 +00:00
Display survey info && can cancel the response to a survey
This commit is contained in:
parent
c66365b002
commit
79f2fa3c2d
@ -71,6 +71,23 @@ public class PostsList extends ArrayList<Post> {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Search a post by ID in the list
|
||||
*
|
||||
* Warning ! The post MUST be in the list else an exception will be thrown
|
||||
*
|
||||
* @param id The ID of the post to find
|
||||
* @return Information about the post
|
||||
*/
|
||||
public Post find(int id) {
|
||||
for (Post post : this){
|
||||
if(post.getId() == id)
|
||||
return post;
|
||||
}
|
||||
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get IDs of the related groups
|
||||
*
|
||||
|
@ -0,0 +1,28 @@
|
||||
package org.communiquons.android.comunic.client.data.arrays;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.models.SurveyChoice;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Handles a list of SurveyChoicesList
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class SurveyChoicesList extends ArrayList<SurveyChoice> {
|
||||
|
||||
/**
|
||||
* Find a choice specified by its ID in the list
|
||||
*
|
||||
* @param id The ID of the choice to find
|
||||
* @return Matching choice
|
||||
*/
|
||||
public SurveyChoice find(int id) {
|
||||
|
||||
for(SurveyChoice choice : this)
|
||||
if(choice.getChoiceID() == id)
|
||||
return choice;
|
||||
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
@ -39,6 +39,11 @@ public enum PostTypes {
|
||||
*/
|
||||
COUNTDOWN,
|
||||
|
||||
/**
|
||||
* Survey
|
||||
*/
|
||||
SURVEY,
|
||||
|
||||
/**
|
||||
* Unknown type
|
||||
*/
|
||||
|
@ -4,17 +4,17 @@ import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.arrays.PostsList;
|
||||
import org.communiquons.android.comunic.client.data.enums.PageType;
|
||||
import org.communiquons.android.comunic.client.data.enums.PostTypes;
|
||||
import org.communiquons.android.comunic.client.data.enums.PostUserAccess;
|
||||
import org.communiquons.android.comunic.client.data.enums.PostVisibilityLevels;
|
||||
import org.communiquons.android.comunic.client.data.models.APIFileRequest;
|
||||
import org.communiquons.android.comunic.client.data.models.APIPostFile;
|
||||
import org.communiquons.android.comunic.client.data.models.APIRequest;
|
||||
import org.communiquons.android.comunic.client.data.models.APIResponse;
|
||||
import org.communiquons.android.comunic.client.data.models.CreatePost;
|
||||
import org.communiquons.android.comunic.client.data.enums.PageType;
|
||||
import org.communiquons.android.comunic.client.data.models.Post;
|
||||
import org.communiquons.android.comunic.client.data.enums.PostTypes;
|
||||
import org.communiquons.android.comunic.client.data.enums.PostUserAccess;
|
||||
import org.communiquons.android.comunic.client.data.enums.PostVisibilityLevels;
|
||||
import org.communiquons.android.comunic.client.data.arrays.PostsList;
|
||||
import org.communiquons.android.comunic.client.data.models.WebLink;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
@ -412,6 +412,10 @@ public class PostsHelper {
|
||||
if(!json.isNull("time_end"))
|
||||
post.setTime_end(json.getInt("time_end"));
|
||||
|
||||
//Get information about survey if required
|
||||
if(post.getType() == PostTypes.SURVEY)
|
||||
post.setSurvey(SurveyHelper.APIToSurvey(json.getJSONObject("data_survey")));
|
||||
|
||||
return post;
|
||||
}
|
||||
|
||||
@ -469,6 +473,9 @@ public class PostsHelper {
|
||||
case "countdown":
|
||||
return PostTypes.COUNTDOWN;
|
||||
|
||||
case "survey":
|
||||
return PostTypes.SURVEY;
|
||||
|
||||
default:
|
||||
return PostTypes.UNKNOWN;
|
||||
|
||||
|
@ -0,0 +1,83 @@
|
||||
package org.communiquons.android.comunic.client.data.helpers;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.models.APIRequest;
|
||||
import org.communiquons.android.comunic.client.data.models.APIResponse;
|
||||
import org.communiquons.android.comunic.client.data.models.Survey;
|
||||
import org.communiquons.android.comunic.client.data.models.SurveyChoice;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Survey helper
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class SurveyHelper extends BaseHelper {
|
||||
|
||||
public SurveyHelper(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel the response to a survey
|
||||
*
|
||||
* @param postID The ID of the target post
|
||||
* @return TRUE in case of success / FALSE else
|
||||
*/
|
||||
public boolean cancelResponse(int postID){
|
||||
APIRequest request = new APIRequest(getContext(), "surveys/cancel_response");
|
||||
request.addInt("postID", postID);
|
||||
|
||||
try {
|
||||
return new APIRequestHelper().exec(request).getResponse_code() == 200;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn an API JSON object into a Survey
|
||||
*
|
||||
* @param object The object to parse
|
||||
* @return Generated Survey
|
||||
* @throws JSONException In case of failure
|
||||
*/
|
||||
public static Survey APIToSurvey(JSONObject object) throws JSONException {
|
||||
Survey survey = new Survey();
|
||||
survey.setId(object.getInt("ID"));
|
||||
survey.setUserID(object.getInt("userID"));
|
||||
survey.setPostID(object.getInt("postID"));
|
||||
survey.setCreate_time(object.getInt("creation_time"));
|
||||
survey.setQuestion(object.getString("question"));
|
||||
survey.setUser_choice(object.getInt("user_choice"));
|
||||
|
||||
JSONObject choicesObject = object.getJSONObject("choices");
|
||||
for (Iterator<String> it = choicesObject.keys(); it.hasNext(); ) {
|
||||
String key = it.next();
|
||||
survey.addChoice(APIToSurveyChoice(choicesObject.getJSONObject(key)));
|
||||
}
|
||||
|
||||
return survey;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Turn an API JSON object into a SurveyChoice object
|
||||
*
|
||||
* @param object The object to convert
|
||||
* @return Generated SurveyChoice object
|
||||
* @throws JSONException in case of failure
|
||||
*/
|
||||
private static SurveyChoice APIToSurveyChoice(JSONObject object) throws JSONException {
|
||||
SurveyChoice surveyChoice = new SurveyChoice();
|
||||
surveyChoice.setChoiceID(object.getInt("choiceID"));
|
||||
surveyChoice.setName(object.getString("name"));
|
||||
surveyChoice.setResponses(object.getInt("responses"));
|
||||
return surveyChoice;
|
||||
}
|
||||
}
|
@ -52,6 +52,9 @@ public class Post {
|
||||
//Countdown timer
|
||||
private int time_end;
|
||||
|
||||
//Survey
|
||||
private Survey survey;
|
||||
|
||||
|
||||
//Set and get the ID of the post
|
||||
public void setId(int id) {
|
||||
@ -240,5 +243,17 @@ public class Post {
|
||||
public void setTime_end(int time_end) {
|
||||
this.time_end = time_end;
|
||||
}
|
||||
|
||||
public Survey getSurvey() {
|
||||
return survey;
|
||||
}
|
||||
|
||||
public boolean hasSurvey(){
|
||||
return this.survey != null;
|
||||
}
|
||||
|
||||
public void setSurvey(Survey survey) {
|
||||
this.survey = survey;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,88 @@
|
||||
package org.communiquons.android.comunic.client.data.models;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.arrays.SurveyChoicesList;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Base survey object
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class Survey {
|
||||
|
||||
//Private fields
|
||||
private int id;
|
||||
private int userID;
|
||||
private int postID;
|
||||
private int create_time;
|
||||
private String question;
|
||||
private int user_choice;
|
||||
private SurveyChoicesList choices = new SurveyChoicesList();
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getUserID() {
|
||||
return userID;
|
||||
}
|
||||
|
||||
public void setUserID(int userID) {
|
||||
this.userID = userID;
|
||||
}
|
||||
|
||||
public int getPostID() {
|
||||
return postID;
|
||||
}
|
||||
|
||||
public void setPostID(int postID) {
|
||||
this.postID = postID;
|
||||
}
|
||||
|
||||
public int getCreate_time() {
|
||||
return create_time;
|
||||
}
|
||||
|
||||
public void setCreate_time(int create_time) {
|
||||
this.create_time = create_time;
|
||||
}
|
||||
|
||||
public String getQuestion() {
|
||||
return question;
|
||||
}
|
||||
|
||||
public void setQuestion(String question) {
|
||||
this.question = question;
|
||||
}
|
||||
|
||||
public int getUser_choice() {
|
||||
return user_choice;
|
||||
}
|
||||
|
||||
public boolean hasUserResponded(){
|
||||
return user_choice > 0;
|
||||
}
|
||||
|
||||
public void setUser_choice(int user_choice) {
|
||||
this.user_choice = user_choice;
|
||||
}
|
||||
|
||||
public SurveyChoicesList getChoices() {
|
||||
return choices;
|
||||
}
|
||||
|
||||
public void addChoice(SurveyChoice choice){
|
||||
if(this.choices == null)
|
||||
this.choices = new SurveyChoicesList();
|
||||
choices.add(choice);
|
||||
}
|
||||
|
||||
public void setChoices(SurveyChoicesList choices) {
|
||||
this.choices = choices;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package org.communiquons.android.comunic.client.data.models;
|
||||
|
||||
/**
|
||||
* Survey choice base model
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class SurveyChoice {
|
||||
|
||||
//Private field
|
||||
private int choiceID;
|
||||
private String name;
|
||||
private int responses;
|
||||
|
||||
|
||||
public int getChoiceID() {
|
||||
return choiceID;
|
||||
}
|
||||
|
||||
public void setChoiceID(int choiceID) {
|
||||
this.choiceID = choiceID;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getResponses() {
|
||||
return responses;
|
||||
}
|
||||
|
||||
public void addOneResponse(){
|
||||
responses++;
|
||||
}
|
||||
|
||||
public void removeOneResponse(){
|
||||
responses--;
|
||||
}
|
||||
|
||||
public void setResponses(int responses) {
|
||||
this.responses = responses;
|
||||
}
|
||||
}
|
@ -30,6 +30,7 @@ import org.communiquons.android.comunic.client.ui.views.EnlargeableWebImageView;
|
||||
import org.communiquons.android.comunic.client.ui.views.LikeButtonView;
|
||||
import org.communiquons.android.comunic.client.ui.views.MovieView;
|
||||
import org.communiquons.android.comunic.client.ui.views.PDFLinkButtonView;
|
||||
import org.communiquons.android.comunic.client.ui.views.SurveyView;
|
||||
import org.communiquons.android.comunic.client.ui.views.WebLinkView;
|
||||
import org.communiquons.android.comunic.client.ui.views.WebUserAccountImage;
|
||||
|
||||
@ -58,6 +59,7 @@ public class PostsAdapter extends BaseRecyclerViewAdapter {
|
||||
private static final int VIEW_TYPE_POST_PDF = 3;
|
||||
private static final int VIEW_TYPE_POST_WEBLINK = 4;
|
||||
private static final int VIEW_TYPE_POST_COUNTDOWN = 5;
|
||||
private static final int VIEW_TYPE_POST_SURVEY = 6;
|
||||
|
||||
/**
|
||||
* Posts list
|
||||
@ -123,6 +125,9 @@ public class PostsAdapter extends BaseRecyclerViewAdapter {
|
||||
case COUNTDOWN:
|
||||
return VIEW_TYPE_POST_COUNTDOWN;
|
||||
|
||||
case SURVEY:
|
||||
return VIEW_TYPE_POST_SURVEY;
|
||||
|
||||
case TEXT:
|
||||
default:
|
||||
return VIEW_TYPE_POST_TEXT;
|
||||
@ -152,6 +157,9 @@ public class PostsAdapter extends BaseRecyclerViewAdapter {
|
||||
case VIEW_TYPE_POST_COUNTDOWN:
|
||||
return new CountdownPostHolder(view);
|
||||
|
||||
case VIEW_TYPE_POST_SURVEY:
|
||||
return new SurveyPostHolder(view);
|
||||
|
||||
default:
|
||||
return new TextPostHolder(view);
|
||||
}
|
||||
@ -510,4 +518,29 @@ public class PostsAdapter extends BaseRecyclerViewAdapter {
|
||||
mCountDownView.setTime_end(getPost(position).getTime_end());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Survey post holder
|
||||
*/
|
||||
private class SurveyPostHolder extends TextPostHolder {
|
||||
|
||||
private SurveyView mSurveyView;
|
||||
|
||||
SurveyPostHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
|
||||
mSurveyView = new SurveyView(getContext());
|
||||
mSurveyView.setOnSurveyUpdateListener(mListener);
|
||||
getAdditionalViewsLayout().addView(mSurveyView, new FrameLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||
}
|
||||
|
||||
@Override
|
||||
void bind(int position) {
|
||||
super.bind(position);
|
||||
|
||||
mSurveyView.setSurvey(getPost(position).getSurvey());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,21 @@
|
||||
package org.communiquons.android.comunic.client.ui.asynctasks;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.helpers.SurveyHelper;
|
||||
|
||||
/**
|
||||
* Cancel the response to a survey
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public class CancelSurveyResponseTask extends SafeAsyncTask<Integer, Void, Boolean> {
|
||||
public CancelSurveyResponseTask(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Boolean doInBackground(Integer... integers) {
|
||||
return new SurveyHelper(getContext()).cancelResponse(integers[0]);
|
||||
}
|
||||
}
|
@ -34,10 +34,14 @@ import org.communiquons.android.comunic.client.data.helpers.LikesHelper;
|
||||
import org.communiquons.android.comunic.client.data.helpers.PostsHelper;
|
||||
import org.communiquons.android.comunic.client.data.models.Comment;
|
||||
import org.communiquons.android.comunic.client.data.models.Post;
|
||||
import org.communiquons.android.comunic.client.data.models.Survey;
|
||||
import org.communiquons.android.comunic.client.data.models.SurveyChoice;
|
||||
import org.communiquons.android.comunic.client.data.models.UserInfo;
|
||||
import org.communiquons.android.comunic.client.data.utils.AccountUtils;
|
||||
import org.communiquons.android.comunic.client.data.utils.StringsUtils;
|
||||
import org.communiquons.android.comunic.client.ui.adapters.PostsAdapter;
|
||||
import org.communiquons.android.comunic.client.ui.asynctasks.CancelSurveyResponseTask;
|
||||
import org.communiquons.android.comunic.client.ui.asynctasks.SafeAsyncTask;
|
||||
import org.communiquons.android.comunic.client.ui.listeners.OnScrollChangeDetectListener;
|
||||
import org.communiquons.android.comunic.client.ui.listeners.onPostUpdateListener;
|
||||
import org.communiquons.android.comunic.client.ui.views.EditCommentContentView;
|
||||
@ -913,4 +917,48 @@ public abstract class AbstractPostsListFragment extends AbstractFragment
|
||||
|
||||
return super.onContextItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancelSurveyResponse(Survey survey) {
|
||||
|
||||
final int postID = survey.getPostID();
|
||||
|
||||
getTasksManager().unsetSpecificTasks(CancelSurveyResponseTask.class);
|
||||
CancelSurveyResponseTask cancelSurveyResponseTask =
|
||||
new CancelSurveyResponseTask(getActivity());
|
||||
cancelSurveyResponseTask.setOnPostExecuteListener(new SafeAsyncTask.OnPostExecuteListener<Boolean>() {
|
||||
@Override
|
||||
public void OnPostExecute(Boolean success) {
|
||||
delete_callback(postID, success);
|
||||
}
|
||||
});
|
||||
cancelSurveyResponseTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, survey.getPostID());
|
||||
getTasksManager().addTask(cancelSurveyResponseTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete survey callback
|
||||
*
|
||||
* @param postID The ID of the related post
|
||||
* @param success TRUE in case of success / FALSE else
|
||||
*/
|
||||
private void delete_callback(int postID, boolean success){
|
||||
|
||||
//Check for failure
|
||||
if(!success){
|
||||
Toast.makeText(getActivity(), R.string.err_cancel_response, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
Survey survey = getPostsList().find(postID).getSurvey();
|
||||
survey.getChoices().find(survey.getUser_choice()).removeOneResponse();
|
||||
survey.setUser_choice(0);
|
||||
|
||||
mPostsAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRespondToSurvey(Survey survey, int choiceID) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,26 @@
|
||||
package org.communiquons.android.comunic.client.ui.listeners;
|
||||
|
||||
import org.communiquons.android.comunic.client.data.models.Survey;
|
||||
|
||||
/**
|
||||
* Actions done when there is the need to perform an update on a survey
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public interface OnSurveyUpdateListener {
|
||||
|
||||
/**
|
||||
* This method is called when the user requests to cancel the response to a survey
|
||||
*
|
||||
* @param survey The target survey
|
||||
*/
|
||||
void onCancelSurveyResponse(Survey survey);
|
||||
|
||||
/**
|
||||
* This method is called when the user want to respond to survey
|
||||
*
|
||||
* @param survey The target survey
|
||||
* @param choiceID Selected choice by the user
|
||||
*/
|
||||
void onRespondToSurvey(Survey survey, int choiceID);
|
||||
}
|
@ -12,7 +12,7 @@ import org.communiquons.android.comunic.client.ui.views.EditCommentContentView;
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
public interface onPostUpdateListener {
|
||||
public interface onPostUpdateListener extends OnSurveyUpdateListener {
|
||||
|
||||
/**
|
||||
* This method is called when a comment creation request is made
|
||||
|
@ -0,0 +1,158 @@
|
||||
package org.communiquons.android.comunic.client.ui.views;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.constraint.ConstraintLayout;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.communiquons.android.comunic.client.R;
|
||||
import org.communiquons.android.comunic.client.data.models.Survey;
|
||||
import org.communiquons.android.comunic.client.data.models.SurveyChoice;
|
||||
import org.communiquons.android.comunic.client.ui.listeners.OnSurveyUpdateListener;
|
||||
import org.communiquons.android.comunic.client.ui.utils.UiUtils;
|
||||
|
||||
public class SurveyView extends BaseFrameLayoutView implements View.OnClickListener {
|
||||
|
||||
/**
|
||||
* Current survey
|
||||
*/
|
||||
private Survey mSurvey;
|
||||
|
||||
/**
|
||||
* Update listener
|
||||
*/
|
||||
private OnSurveyUpdateListener mOnSurveyUpdateListener;
|
||||
|
||||
/**
|
||||
* Views
|
||||
*/
|
||||
private TextView mQuestion;
|
||||
private LinearLayout mChoicesList;
|
||||
private ConstraintLayout mCancelSurveyResponseForm;
|
||||
private TextView mSelectedChoiceView;
|
||||
private Button mCancelButton;
|
||||
private ConstraintLayout mSendResponseForm;
|
||||
private Spinner mResponsesSpinner;
|
||||
private Button mResponseButton;
|
||||
|
||||
|
||||
public SurveyView(@NonNull Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public SurveyView(@NonNull Context context, @Nullable AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
}
|
||||
|
||||
public SurveyView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
|
||||
View view = inflate(getContext(), R.layout.view_survey, this);
|
||||
mQuestion = view.findViewById(R.id.question);
|
||||
mCancelSurveyResponseForm = view.findViewById(R.id.cancelSurveyResponseForm);
|
||||
|
||||
mChoicesList = view.findViewById(R.id.choicesTarget);
|
||||
mSelectedChoiceView = view.findViewById(R.id.selectedChoiceView);
|
||||
mCancelButton = view.findViewById(R.id.cancelButton);
|
||||
|
||||
mSendResponseForm = view.findViewById(R.id.sendResponseForm);
|
||||
mResponsesSpinner = view.findViewById(R.id.responsesSpinner);
|
||||
mResponseButton = view.findViewById(R.id.respondButton);
|
||||
|
||||
mCancelButton.setOnClickListener(this);
|
||||
mResponseButton.setOnClickListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the survey updates listener
|
||||
*
|
||||
* @param onSurveyUpdateListener The new listener
|
||||
*/
|
||||
public void setOnSurveyUpdateListener(@Nullable OnSurveyUpdateListener onSurveyUpdateListener) {
|
||||
this.mOnSurveyUpdateListener = onSurveyUpdateListener;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the current survey
|
||||
*
|
||||
* @param survey The new survey to display
|
||||
*/
|
||||
public void setSurvey(Survey survey){
|
||||
this.mSurvey = survey;
|
||||
|
||||
mChoicesList.removeAllViews();
|
||||
|
||||
mQuestion.setText(survey.getQuestion());
|
||||
|
||||
//Process the list of choices
|
||||
for(SurveyChoice choice : survey.getChoices()){
|
||||
|
||||
TextView textView = new TextView(getContext());
|
||||
textView.setText(UiUtils.getString(getContext(), R.string.survey_choice,
|
||||
choice.getResponses(), choice.getName()));
|
||||
mChoicesList.addView(textView, new LinearLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||
|
||||
}
|
||||
|
||||
mCancelSurveyResponseForm.setVisibility(survey.hasUserResponded() ?
|
||||
View.VISIBLE : View.GONE);
|
||||
mSendResponseForm.setVisibility(survey.hasUserResponded() ?
|
||||
View.GONE : View.VISIBLE);
|
||||
|
||||
//Render the right part of the view
|
||||
if (survey.hasUserResponded()) {
|
||||
renderCancelResponseForm();
|
||||
} else {
|
||||
renderRespondForm();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Render cancel response form
|
||||
*/
|
||||
private void renderCancelResponseForm(){
|
||||
|
||||
//Display the choice of the user
|
||||
mSelectedChoiceView.setText(UiUtils.getString(getContext(),
|
||||
R.string.survey_your_choice,
|
||||
mSurvey.getChoices().find(mSurvey.getUser_choice()).getName()));
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Render respond form
|
||||
*/
|
||||
private void renderRespondForm(){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
//Cancel response to survey
|
||||
if(v.equals(mCancelButton)){
|
||||
if(mOnSurveyUpdateListener != null)
|
||||
mOnSurveyUpdateListener.onCancelSurveyResponse(mSurvey);
|
||||
}
|
||||
|
||||
//Respond to a survey
|
||||
if(v.equals(mResponseButton)){
|
||||
if(mOnSurveyUpdateListener != null)
|
||||
mOnSurveyUpdateListener.onRespondToSurvey(mSurvey, -1);
|
||||
//TODO : implement
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
112
app/src/main/res/layout/view_survey.xml
Normal file
112
app/src/main/res/layout/view_survey.xml
Normal file
@ -0,0 +1,112 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/choicesTarget"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.0"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/question" />
|
||||
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:id="@+id/cancelSurveyResponseForm"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/choicesTarget">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/selectedChoiceView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/cancelButton"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="Your choice: A response" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/cancelButton"
|
||||
style="@style/Base.Widget.AppCompat.Button.Small"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:backgroundTint="@color/holo_red_dark"
|
||||
android:text="@string/action_cancel_response_survey"
|
||||
android:textColor="@android:color/white"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
||||
<android.support.constraint.ConstraintLayout
|
||||
android:id="@+id/sendResponseForm"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/cancelSurveyResponseForm">
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/responsesSpinner"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/respondButton"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/respondButton"
|
||||
style="@style/Base.Widget.AppCompat.Button.Small"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/action_send_survey_response"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/question"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="A survey question" />
|
||||
</android.support.constraint.ConstraintLayout>
|
@ -291,4 +291,6 @@
|
||||
<string name="err_update_account_image_visibility">Une erreur a survenu lors de la mise à jour du niveau de visibilité de l\'image de compte !</string>
|
||||
<string name="err_find_tag">Le tag spécifié n\'a pas été trouvé !</string>
|
||||
<string name="err_groups_not_supported">Les groupes ne sont pas encore supportés sur l\'application Android…</string>
|
||||
<string name="survey_choice">(%1$d) %2$s</string>
|
||||
<string name="survey_your_choice">Votre choix : %1$s</string>
|
||||
</resources>
|
@ -290,4 +290,9 @@
|
||||
<string name="err_update_account_image_visibility">Could not update account image visibility level!</string>
|
||||
<string name="err_find_tag">Could not find requested tag!</string>
|
||||
<string name="err_groups_not_supported">Groups are not supported yet by the Android application!</string>
|
||||
<string name="survey_choice">(%1$d) %2$s</string>
|
||||
<string name="survey_your_choice">Your choice : %1$s</string>
|
||||
<string name="action_cancel_response_survey">Cancel</string>
|
||||
<string name="action_send_survey_response">Respond</string>
|
||||
<string name="err_cancel_response">Could not cancel your response to the survey!</string>
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user