Search code examples
javaandroidif-statementlogicparse-server

android - java - parse DB : Logics for a meeting request


I'm creating an android app using parse database .

In this app I have created a meeting invite function for the users . one user can invite another user. and a push notification system also there for the invite function if someone invites other person a push notification goes to that person ..


meeting invite and push notification are working fine,


The problem is

when logged in user is A he won't be able to request himself to a meeting . it means if user A is logged in user, he should be excluded from meeting invites .


But I'm unable to add that logic here ,

if anyone can please help me in this ??


java class

public class SingleIndividualInvite extends AppCompatActivity {

    String objectId;
    protected Button btYes, btNo;
    protected TextView txtv;
    protected TextView txtv1;
    protected ImageView txtv2;
    protected ImageView txtv3;
    protected TextView individualOrganization;
    Button emailPerson;
    Button callPerson;
    Button callPersonTelephone;
    String personEmail, personNumber, personNumberTelephone;

    LinearLayout messageLayout, buttonLayout;
    ParseObject thisPerson, thisEvent;

    TextView inviteMessage;
    String currentUserName;
    String receiverUserName;
    String currentMeeting;
    ParseUser parseUser = ParseUser.getCurrentUser();

    boolean myInvite;
    String eventName, eventID, senderName, senderID, receiverName, receiverID, meetingStatus;

    String[] month = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
            "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
    Calendar itemCalendar = Calendar.getInstance();
    Calendar currentCalendar = Calendar.getInstance();


    boolean noRequest = true, canRequest = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        // finally change the color
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            window.setStatusBarColor(Color.parseColor("#083266"));
        }

        setContentView(R.layout.activity_single_individual_event);
        txtv =(TextView)findViewById(R.id.txt123);
        txtv1 =(TextView)findViewById(R.id.coporateSector);
        txtv2 =(ImageView)findViewById(R.id.txt12345);
        txtv3 =(ImageView)findViewById(R.id.txt123456);
        individualOrganization =(TextView) findViewById(R.id.individualOrganization);
        btYes = (Button) findViewById(R.id.button6);
        btNo = (Button) findViewById(R.id.button7);

        messageLayout = (LinearLayout) findViewById(R.id.statusLayout);
        buttonLayout = (LinearLayout) findViewById(R.id.buttonLayout);

        inviteMessage = (TextView) findViewById(R.id.inviteMessage);

        Intent i =getIntent();
        objectId = i.getStringExtra("objectId");
        eventID = i.getStringExtra("eventId");
        eventName = i.getStringExtra("eventName");
        ParseQuery<ParseObject> query = ParseQuery.getQuery("_User");
        query.setLimit(2000);
        query.getInBackground(objectId, new GetCallback<ParseObject>() {
            public void done(final ParseObject object, ParseException e) {
                if (e == null) {
                    thisPerson = object;
                    String username = object.getString("firstname");
                    txtv.setText(username + " " + object.getString("lastname"));
                    String position = object.getString("position");
                    txtv1.setText(position);
                    String organizationName = object.getString("organizationName");
                    individualOrganization.setText(organizationName);
                    URL url = null;
                    try {
                        url = new URL("" + object.getString("image"));
                    } catch (MalformedURLException e1) {
                        e1.printStackTrace();
                    }

                    Glide.with(getApplicationContext())
                            .load(String.valueOf(url))
                            .into(txtv2);
                    try {
                        url = new URL("" + object.getString("image"));
                    } catch (MalformedURLException e1) {
                        e1.printStackTrace();
                    }
                    Glide.with(getApplicationContext())
                            .load(String.valueOf(url))
                            .centerCrop()
                            .into(txtv3);
                    try {
                        ParseRelation<ParseUser> relation = object.getRelation("attenders");
                        ParseQuery<ParseUser> query = relation.getQuery();
                        query.whereEqualTo("objectId", ParseUser.getCurrentUser().getObjectId());
                        ParseUser user = query.getFirst();
                     //   setButton(true);
                      //  updateList();
                    } catch (ParseException pe) {
                   //     setButton(false);
                    }
                    try{
                        JSONObject jsonObject = parseObjectToJson(object);
                        Log.d("Object", jsonObject.toString());
                        Log.d("Email", "+" + object.get("email"));
                        personNumber = jsonObject.getString("telephone");
                        personEmail = jsonObject.getString("email");
                    }catch (Exception je){

                    }

                    currentUserName = parseUser.getString("firstname") + " " + parseUser.getString("lastname");
                    receiverUserName = thisPerson.getString("firstname") + " " + thisPerson.getString("lastname");

                    ParseQuery<ParseObject> eventQuery = ParseQuery.getQuery("Event");
                    eventQuery.getInBackground(eventID, new GetCallback<ParseObject>() {
                        @Override
                        public void done(ParseObject object, ParseException e) {
                            if(e == null){
                                thisEvent = object;
                                currentCalendar.set(Calendar.HOUR, 0);
                                currentCalendar.set(Calendar.MINUTE, 0);
                                currentCalendar.getTime();
                                String[] itemCalendarDetails = thisEvent.getString("date").split(" ");
                                int itemMonth = 0;
                                for(int j=0; j<month.length; j++){
                                    if(itemCalendarDetails[1].equals(month[j])){
                                        itemMonth = j;
                                        break;
                                    }
                                }
                                itemCalendar.set(Integer.parseInt(itemCalendarDetails[3]), itemMonth,
                                        Integer.parseInt(itemCalendarDetails[2].substring(0, itemCalendarDetails[2].length()-2)));
                                if(itemCalendar.after(currentCalendar)) {
                                    canRequest = true;
                                    fetchMeeting();
                                }else{
                                    canRequest = false;
                                    setLayout();
                                }
                            }else{

                            }
                        }
                    });

                } else {
                }



                individualOrganization.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String organizationID = thisPerson.getString("organizationID");
                        if(organizationID == null || organizationID.equals("")){
                            Toast.makeText(SingleIndividualInvite.this, "Sorry No Organization Available!", Toast.LENGTH_SHORT).show();
                        }else{
                            Intent i = new Intent(getApplicationContext(), SingleCorporate.class);
                            i.putExtra("objectId", organizationID);
                            i.putExtra("image", organizationID);
                            startActivity(i);
                        }
                    }
                });
            }
        });

        btYes.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setButton(true);
                ParseUser parseUser = ParseUser.getCurrentUser();
                if(noRequest){
                    noRequest = false;
                    myInvite = true;
                    meetingStatus = "NA";
                    sendCustomPush(thisPerson.getString("push_id"), true);
                    try{
                        ParseObject meetingObject = new ParseObject("Meeting");
                        meetingObject.put("senderName", currentUserName);
                        meetingObject.put("recieverName", receiverUserName);
                        meetingObject.put("eventName", eventName);
                        meetingObject.put("accepted", false);
                        meetingObject.put("sender", ParseObject.createWithoutData("_User", parseUser.getObjectId()));
                        meetingObject.put("reciever", ParseObject.createWithoutData("_User", thisPerson.getObjectId()));
                        meetingObject.put("event", ParseObject.createWithoutData("Event", eventID));
                        meetingObject.save();
                    }catch (ParseException pe){
                        pe.printStackTrace();
                        Toast.makeText(getApplicationContext(), "Cannot invite right now!", Toast.LENGTH_SHORT).show();
                    }
                }else{
                    myInvite = false;
                    noRequest = false;
                    meetingStatus = "ACCEPTED";
                    sendCustomPush(thisPerson.getString("push_id"), false);
                    ParseQuery<ParseObject> invitedMe = ParseQuery.getQuery("Meeting");
                    invitedMe.include("reciever");
                    invitedMe.include("sender");
                    invitedMe.include("event");
                    invitedMe.whereEqualTo("sender", ParseObject.createWithoutData("_User", thisPerson.getObjectId()));
                    invitedMe.whereEqualTo("reciever", ParseObject.createWithoutData("_User", parseUser.getObjectId()));
                    invitedMe.whereEqualTo("event", ParseObject.createWithoutData("Event", eventID));
                    invitedMe.findInBackground(new FindCallback<ParseObject>() {
                        @Override
                        public void done(List<ParseObject> objects, ParseException e) {
                            if(e == null){
                                objects.get(0).put("accepted", true);
                                objects.get(0).saveInBackground();
                            }else {

                            }
                        }
                    });
                }
            }
        });

        btNo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ParseUser parseUser = ParseUser.getCurrentUser();
                setButton(false);
                if(noRequest){
                    Toast.makeText(SingleIndividualInvite.this, "Kindly Request for a meeting First!", Toast.LENGTH_SHORT).show();
                }else {
                    if(myInvite){
                        myInvite = true;
                        noRequest = false;
                        meetingStatus = "NA";
                        ParseQuery<ParseObject> invitedThem = ParseQuery.getQuery("Meeting");
                        invitedThem.whereEqualTo("objectId", currentMeeting);
                        invitedThem.findInBackground(new FindCallback<ParseObject>() {
                            @Override
                            public void done(List<ParseObject> objects, ParseException e) {
                                if(e==null) {
                                    for (ParseObject delete : objects) {
                                        try{
                                            delete.delete();
                                            Toast.makeText(getApplicationContext(), "Invite Cancelled", Toast.LENGTH_SHORT).show();
                                        }catch (ParseException pe){
                                            pe.printStackTrace();
                                            Toast.makeText(getApplicationContext(), "Cannot retrieve Meeting!", Toast.LENGTH_SHORT).show();
                                        }
                                    }
                                }else{
                                    Toast.makeText(getApplicationContext(), "Cannot retrieve Meeting!", Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
                    }else {
                        myInvite = false;
                        noRequest = false;
                        meetingStatus = "NA";
                        ParseQuery<ParseObject> invitedMe = ParseQuery.getQuery("Meeting");
                        invitedMe.include("reciever");
                        invitedMe.include("sender");
                        invitedMe.include("event");
                        invitedMe.whereEqualTo("sender", ParseObject.createWithoutData("_User", thisPerson.getObjectId()));
                        invitedMe.whereEqualTo("reciever", ParseObject.createWithoutData("_User", parseUser.getObjectId()));
                        invitedMe.whereEqualTo("event", ParseObject.createWithoutData("Event", eventID));
                        invitedMe.findInBackground(new FindCallback<ParseObject>() {
                            @Override
                            public void done(List<ParseObject> objects, ParseException e) {
                                if(e == null){
                                    objects.get(0).put("accepted", true);
                                    objects.get(0).saveInBackground();
                                }else {

                                }
                            }
                        });
                    }
                }
                setLayout();
            }
        });
    }

    public void setButton(boolean status){
        if(status){
            btYes.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
            btYes.setTextColor(Color.WHITE);
            btYes.setClickable(false);
            btNo.setBackgroundColor(Color.WHITE);
            btNo.setTextColor(getResources().getColor(R.color.colorPrimary));
            btNo.setClickable(true);
        }else{
            btYes.setBackgroundColor(Color.WHITE);
            btYes.setTextColor(getResources().getColor(R.color.colorPrimary));
            btYes.setClickable(true);
            btNo.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
            btNo.setTextColor(Color.WHITE);
            btNo.setClickable(false);
        }
    }

    private JSONObject parseObjectToJson(ParseObject parseObject) throws ParseException, JSONException {
        JSONObject jsonObject = new JSONObject();
        parseObject.fetchIfNeeded();
        Set<String> keys = parseObject.keySet();
        for (String key : keys) {
            Object objectValue = parseObject.get(key);
            if (objectValue instanceof ParseObject) {
                jsonObject.put(key, parseObjectToJson(parseObject.getParseObject(key)));
            } else if (objectValue instanceof ParseRelation) {
            } else {
                jsonObject.put(key, objectValue.toString());
            }
        }
        return jsonObject;
    }

    public void sendCustomPush(String receiverPushID, boolean isRequesting){
        String payBody;
        if(receiverPushID.equals("") || receiverPushID == null){
            Toast.makeText(getApplicationContext(), "Invite Sent. User is not registered for push!", Toast.LENGTH_SHORT).show();
        }else{
            if(isRequesting){
                payBody = "{\r\n  " +
                        "\"app_id\": \"APP_ID HERE \",\r\n  " +
                        "\"include_player_ids\": [\"" + receiverPushID + "\"]," + "\r\n  " +
                        "\"data\": {\"eventName\": \"" + eventName +"\", \"eventId\":\""+ eventID + "\", \"personId\":\"" + thisPerson.getObjectId() + "\"},\r\n  " +
                        "\"contents\": {\"en\": \"" + currentUserName + " has requested for a meeting with you.\"},\r\n  " +
                        "\"headings\": {\"en\": \"Meeting Alert!\"}" +
                        "\r\n}";
            }else{
                payBody = "{\r\n  " +
                        "\"app_id\": \" APP_ID HERE \",\r\n  " +
                        "\"include_player_ids\": [\"" + receiverPushID + "\"]," + "\r\n  " +
                        "\"data\": {\"eventName\": \"" + eventName +"\", \"eventId\":\""+ eventID + "\", \"personId\":\"" + thisPerson.getObjectId() + "\"},\r\n  " +
                        "\"contents\": {\"en\": \"" + currentUserName + " has accepted your meeting request.\"},\r\n  " +
                        "\"headings\": {\"en\": \"Meeting Alert!\"}" +
                        "\r\n}";
            }
            OutputStreamWriter pushPayLoadWriter = null;
            Scanner pushPayLoadReader = null;
            HttpURLConnection pushRequest = null;
            try{
                URL postURL = new URL(" ");

                pushRequest = (HttpURLConnection) postURL.openConnection();
                pushRequest.setRequestMethod("POST");
                pushRequest.setUseCaches(false);
                pushRequest.setRequestProperty("Accept", "application/json");
                pushRequest.setRequestProperty("Content-Type", "application/json");
                pushRequest.setRequestProperty("X-Parse-Client-Key", "");
                pushRequest.connect();

                pushPayLoadWriter = new OutputStreamWriter(pushRequest.getOutputStream());
                pushPayLoadWriter.write(payBody);
                pushPayLoadWriter.flush();

                pushPayLoadReader = new Scanner(pushRequest.getInputStream());
                String responseLoad = "";
                while(pushPayLoadReader.hasNext()){
                    responseLoad += pushPayLoadReader.next();
                }
                Log.d("Push Request Response", responseLoad);

            }catch (Exception ue){
                ue.printStackTrace();
            }finally {
                pushRequest.disconnect();
            }
        }
    }

    public void fetchMeeting(){
        //Handling Meeting Invite
        ParseQuery<ParseObject> invitedThem = ParseQuery.getQuery("Meeting");
        invitedThem.include("reciever");
        invitedThem.include("sender");
        invitedThem.include("event");
        invitedThem.whereEqualTo("event", ParseObject.createWithoutData("Event", eventID));
        invitedThem.whereEqualTo("sender", ParseObject.createWithoutData("_User", parseUser.getObjectId()));
        invitedThem.whereEqualTo("reciever", ParseObject.createWithoutData("_User", thisPerson.getObjectId()));
        invitedThem.findInBackground(new FindCallback<ParseObject>() {
            @Override
            public void done(List<ParseObject> objects, ParseException e) {
                if(e == null){
                    if(objects.size() == 0){
                        myInvite = false;
                        Log.d("No Request", "No Request");
                        ParseQuery<ParseObject> invitedMe = ParseQuery.getQuery("Meeting");
                        invitedMe.include("reciever");
                        invitedMe.include("sender");
                        invitedMe.include("event");
                        invitedMe.whereEqualTo("event", ParseObject.createWithoutData("Event", eventID));
                        invitedMe.whereEqualTo("sender", ParseObject.createWithoutData("_User", thisPerson.getObjectId()));
                        invitedMe.whereEqualTo("reciever", ParseObject.createWithoutData("_User", parseUser.getObjectId()));
                        invitedMe.findInBackground(new FindCallback<ParseObject>() {
                            @Override
                            public void done(List<ParseObject> objects, ParseException e) {
                                if(e == null){
                                    if(objects.size() == 0){
                                        noRequest = true;
                                        setLayout();
                                    }else{
                                        if(objects.get(0).getBoolean("accepted")){
                                            meetingStatus = "ACCEPTED";
                                        }else{
                                            meetingStatus = "NA";
                                        }
                                        noRequest = false;
                                        setLayout();
                                    }
                                }else{
                                    Toast.makeText(SingleIndividualInvite.this, "Unable to fetch Meeting. Please Try Again!", Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
                    }else{
                        if(objects.get(0).getBoolean("accepted")){
                            meetingStatus = "ACCEPTED";
                        }else{
                            meetingStatus = "NA";
                        }
                        noRequest = false;
                        myInvite = true;
                        setLayout();
                    }
                }else{
                    Toast.makeText(SingleIndividualInvite.this, "Unable to fetch Meeting. Please Try Again!", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    public void setLayout(){
        if(canRequest){
            if(noRequest){
                setButton(false);
                buttonLayout.setVisibility(View.VISIBLE);
                inviteMessage.setVisibility(View.VISIBLE);
                messageLayout.setVisibility(View.VISIBLE);
                inviteMessage.setText("Do you want to invite this person for a meeting?");
            }else{
                if(myInvite){
                    setButton(true);
                    inviteMessage.setVisibility(View.VISIBLE);
                    messageLayout.setVisibility(View.VISIBLE);
                    if(meetingStatus.equals("ACCEPTED")){
                        buttonLayout.setVisibility(View.INVISIBLE);
                        inviteMessage.setText("You request has been accepted, be ready fo the meeting.");
                    }else{
                        buttonLayout.setVisibility(View.VISIBLE);
                        inviteMessage.setText("You have already requested a meeting with this attendee and it's waiting for approval.");
                    }
                }else{
                    inviteMessage.setVisibility(View.VISIBLE);
                    messageLayout.setVisibility(View.VISIBLE);
                    buttonLayout.setVisibility(View.VISIBLE);

                    if(meetingStatus.equals("ACCEPTED")){
                        setButton(true);
                        inviteMessage.setText("You have already accepted the meeting request. Press NO to cancel it!");
                    }else{
                        setButton(false);
                        inviteMessage.setText("You have been requested for a meeting. Do you wish to accept it?");
                    }
                }
            }
        }else{
            buttonLayout.setVisibility(View.INVISIBLE);
            inviteMessage.setVisibility(View.VISIBLE);
            messageLayout.setVisibility(View.VISIBLE);
            inviteMessage.setText("Sorry, you cannot respond to this event. This event has already passed.");
        }

    }
}

Solution

  • hi, I guys I found answer

     if(ParseUser.getCurrentUser().getObjectId().equals(objectId)){
                                btYes.setVisibility(View.INVISIBLE);
                                btNo.setVisibility(View.INVISIBLE);
                            }