Search in sources :

Example 11 with Group

use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.

the class LoginSignUpActivity method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // the first time user open the app the default preferences must be setted up
    PreferenceManager.setDefaultValues(this, R.layout.preferences, false);
    Log.i(TAG, "onCreate");
    FirebaseUtils.getInstance().setUp();
    // getting Intent from invitation
    Intent startingIntent = getIntent();
    //prepare intent for MainActivity
    goToMain = new Intent(getApplicationContext(), MainActivity.class);
    goToMain.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    String action = startingIntent.getAction();
    Log.d(TAG, "action " + action);
    // retrieving data from the intent inviterID & groupToBeAddedID as the group ID where to add the current user
    if (startingIntent.hasExtra("inviterID")) {
        // to be used to set the current user as friend of the inviter
        Log.d(TAG, "there is an invite");
        inviterID = startingIntent.getStringExtra("inviterID");
        startingIntent.removeExtra("inviterID");
        goToMain.putExtra("inviterID", inviterID);
    } else
        inviterID = null;
    if (startingIntent.hasExtra("groupToBeAddedID")) {
        groupToBeAddedID = startingIntent.getStringExtra("groupToBeAddedID");
        startingIntent.removeExtra("groupToBeAddedID");
        goToMain.putExtra("groupToBeAddedID", groupToBeAddedID);
    } else
        groupToBeAddedID = null;
    // insert tabs and current fragment in the main layout
    setContentView(R.layout.activity_log_in_signup);
    // for adding custom font to the title of the app
    TextView titleTextView = (TextView) findViewById(R.id.title);
    Typeface mycustomfont = Typeface.createFromAsset(getAssets(), "fonts/Lobster-Regular.ttf");
    titleTextView.setTypeface(mycustomfont);
    // for adding custom background image
    ImageView background = (ImageView) findViewById(R.id.background);
    Glide.with(this).load(R.drawable.background).centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into(background);
    //  findViewById(R.id.activity_log_in_signup_layout).setOnClickListener(this);
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setText(R.string.login));
    tabLayout.addTab(tabLayout.newTab().setText(R.string.signup));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    viewPager = (ViewPager) findViewById(R.id.main_view_pager);
    adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    viewPager.setCurrentItem(0);
    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {

        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            Log.d(TAG, String.valueOf(tab.getPosition()));
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
}
Also used : Typeface(android.graphics.Typeface) TabLayout(android.support.design.widget.TabLayout) Intent(android.content.Intent) TextView(android.widget.TextView) MainActivity(com.polito.mad17.madmax.activities.MainActivity) ImageView(android.widget.ImageView) FragmentPagerAdapter(android.support.v4.app.FragmentPagerAdapter)

Example 12 with Group

use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.

the class NewMemberActivity method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.d(TAG, "onCreate di NewMemeberAcitivity");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new_member);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    buttonInvite = (Button) findViewById(R.id.btn_new_friend);
    Intent intent = getIntent();
    groupID = intent.getStringExtra("groupID");
    groupName = intent.getStringExtra("groupName");
    Log.d(TAG, groupID);
    friendsListView = (ListView) findViewById(R.id.lv_friends);
    friendsAdapter = new HashMapFriendsAdapter(friends);
    addedFriendsListView = (ListView) findViewById(R.id.lv_added_members);
    addedAdapter = new HashMapFriendsAdapter(alreadySelected);
    addedFriendsListView.setAdapter(addedAdapter);
    databaseReference.child("users").child(MainActivity.getCurrentUser().getID()).child("friends").addListenerForSingleValueEvent(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Boolean alreadyAdded = false;
            for (DataSnapshot friendSnapshot : dataSnapshot.getChildren()) {
                if (friendSnapshot.hasChild("sharedGroups")) {
                    if (friendSnapshot.child("sharedGroups").hasChild(groupID)) {
                        alreadyAdded = friendSnapshot.child("sharedGroups").child(groupID).getValue(Boolean.class);
                    }
                }
                // se sono già nel gruppo => vengono inseriti nell'addedAdapter
                if (alreadyAdded) {
                    FirebaseUtils.getInstance().getFriendInviteToGroup(friendSnapshot.getKey(), groupID, alreadySelected, addedAdapter);
                } else // altrimenti vengono inseriti nella lista friendsAdapter degli amici disponibili
                {
                    FirebaseUtils.getInstance().getFriendInviteToGroup(friendSnapshot.getKey(), "", friends, friendsAdapter);
                }
            }
            friendsListView.setAdapter(friendsAdapter);
            addedFriendsListView.setAdapter(addedAdapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.w(TAG, databaseError.getMessage());
        }
    });
    //When i click on one friend of the list
    friendsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            User item = friendsAdapter.getItem(position).getValue();
            friends.remove(item.getID());
            friendsAdapter.update(friends);
            friendsAdapter.notifyDataSetChanged();
            alreadySelected.put(item.getID(), item);
            addedAdapter.update(alreadySelected);
            addedAdapter.notifyDataSetChanged();
        }
    });
    //When i click on one added friend of the list
    addedFriendsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            User item = addedAdapter.getItem(position).getValue();
            alreadySelected.remove(item.getID());
            addedAdapter.update(alreadySelected);
            addedAdapter.notifyDataSetChanged();
            friends.put(item.getID(), item);
            friendsAdapter.update(friends);
            friendsAdapter.notifyDataSetChanged();
        }
    });
    buttonInvite.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.d(TAG, "button clicked");
            Log.d(TAG, "invite a member to join the group");
            //        String deepLink = getString(R.string.invitation_deep_link) + "?groupToBeAddedID=" + groupID+ "?inviterToGroupUID=" + MainActivity.getCurrentUser().getID();
            Uri.Builder builder = Uri.parse(getString(R.string.invitation_deep_link)).buildUpon().appendQueryParameter("groupToBeAddedID", groupID).appendQueryParameter("inviterUID", MainActivity.getCurrentUser().getID());
            Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title)).setDeepLink(builder.build()).setMessage(//.setCustomImage(Uri.parse(getString(R.string.invitation_custom_image)))
            getString(R.string.invitationToGroup_message)).setCallToActionText(//todo vedere perchè non mostra questo link
            getString(R.string.invitationToGroup)).build();
            startActivityForResult(intent, MainActivity.REQUEST_INVITE_GROUP);
        }
    });
}
Also used : User(com.polito.mad17.madmax.entities.User) AppInviteInvitation(com.google.android.gms.appinvite.AppInviteInvitation) Intent(android.content.Intent) DataSnapshot(com.google.firebase.database.DataSnapshot) View(android.view.View) AdapterView(android.widget.AdapterView) ListView(android.widget.ListView) DatabaseError(com.google.firebase.database.DatabaseError) AdapterView(android.widget.AdapterView) ValueEventListener(com.google.firebase.database.ValueEventListener) Toolbar(android.support.v7.widget.Toolbar)

Example 13 with Group

use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.

the class GroupsFragment method getGroupAndBalance.

///versione più complessa dell getGroup. Quest'ultima non verrà più usata.
//oltre al nome gruppo, prende anche il bilancio dello user col gruppo
void getGroupAndBalance(final String userID, final String groupID) {
    //final HashMap <String, Double> totalBalance = new HashMap<>();
    final HashMap<String, Expense> groupExpenses = new HashMap<>();
    //totalBalance.put(userID,0d);
    //totBalance = 0d;
    final HashMap<String, Double> totBalances = new HashMap<>();
    totBalances.clear();
    groupListener = databaseReference.child("groups").child(groupID).addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(final DataSnapshot groupDataSnapshot) {
            //totalBalance.put(userID,0d);
            totBalances.clear();
            if (!listenedGroups.contains(groupID))
                listenedGroups.add(groupID);
            final String groupName = groupDataSnapshot.child("name").getValue(String.class);
            final Boolean deleted = groupDataSnapshot.child("deleted").getValue(Boolean.class);
            if (deleted != null) {
                for (DataSnapshot groupExpenseSnapshot : groupDataSnapshot.child("expenses").getChildren()) {
                    //Contribuiscono al bilancio solo le spese non eliminate dal gruppo
                    if (groupExpenseSnapshot.getValue(Boolean.class) == true) {
                        //Adesso sono sicuro che la spesa non è stata eliminata
                        //Ascolto la singola spesa del gruppo
                        String expenseID = groupExpenseSnapshot.getKey();
                        databaseReference.child("expenses").child(expenseID).addListenerForSingleValueEvent(new ValueEventListener() {

                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                //dice se user contribuisce o no a quella spesa
                                Boolean involved = false;
                                for (DataSnapshot participantSnapshot : dataSnapshot.child("participants").getChildren()) {
                                    //todo poi gestire caso in cui utente viene tolto dai participant alla spesa
                                    if (participantSnapshot.getKey().equals(userID))
                                        involved = true;
                                }
                                //se user ha partecipato alla spesa
                                if (involved) {
                                    //balance = credito/debito dello user per quella spesa
                                    for (DataSnapshot d : dataSnapshot.child("participants").getChildren()) {
                                        Log.d(TAG, "PartCampo " + d.getKey() + ": " + d.getValue());
                                    }
                                    Double alreadyPaid = dataSnapshot.child("participants").child(userID).child("alreadyPaid").getValue(Double.class);
                                    Log.d(TAG, "Fraction: " + Double.parseDouble(String.valueOf(dataSnapshot.child("participants").child(userID).child("fraction").getValue())));
                                    Double dueImport = Double.parseDouble(String.valueOf(dataSnapshot.child("participants").child(userID).child("fraction").getValue())) * dataSnapshot.child("amount").getValue(Double.class);
                                    if (alreadyPaid != null && dueImport != null) {
                                        Double balance = alreadyPaid - dueImport;
                                        String currency = dataSnapshot.child("currency").getValue(String.class);
                                        //se user per quella spesa ha già pagato più soldi della sua quota, il balance è positivo
                                        //current balance for that currency
                                        Double temp = totBalances.get(currency);
                                        //update balance for that currency
                                        if (temp != null) {
                                            totBalances.put(currency, temp + balance);
                                            Log.d(TAG, "Actual debt for " + groupName + ": " + totBalances.get(currency) + " " + currency);
                                        } else {
                                            totBalances.put(currency, balance);
                                            Log.d(TAG, "Actual debt for " + groupName + ": " + totBalances.get(currency) + " " + currency);
                                        }
                                        //Double currentBalance = totalBalance.get(userID);
                                        //totalBalance.put(userID, currentBalance+balance);
                                        //totBalance += balance;
                                        Expense expense = new Expense();
                                        expense.setID(dataSnapshot.getKey());
                                        expense.setCurrency(dataSnapshot.child("currency").getValue(String.class));
                                        expense.setAmount(dataSnapshot.child("amount").getValue(Double.class));
                                        groupExpenses.put(dataSnapshot.getKey(), expense);
                                        Log.d(TAG, "added expense " + dataSnapshot.getKey());
                                    } else {
                                        Log.d(TAG, "Qui sarebbe crashato");
                                    }
                                }
                                Group g = new Group();
                                g.setName(groupName);
                                //g.setBalance(totalBalance.get(userID));
                                g.setCurrencyBalances(totBalances);
                                g.setExpenses(groupExpenses);
                                g.setDeleted(deleted);
                                //se il gruppo non è deleted e io faccio ancora parte del gruppo
                                if (!deleted && groupDataSnapshot.child("members").hasChild(MainActivity.getCurrentUser().getID()) && !groupDataSnapshot.child("members").child(MainActivity.getCurrentUser().getID()).child("deleted").getValue(Boolean.class)) {
                                    groups.put(groupID, g);
                                } else {
                                    groups.remove(groupID);
                                }
                                groupsViewAdapter.update(groups);
                                groupsViewAdapter.notifyDataSetChanged();
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                            }
                        });
                    }
                }
                //Per gestire il caso di quando ho appena abbandonato o eliminato il gruppo
                //if (dataSnapshot.child("members").hasChild(userID))
                //{
                Group g = new Group();
                g.setName(groupName);
                g.setBalance(0d);
                g.setDeleted(deleted);
                if (!deleted && groupDataSnapshot.child("members").hasChild(MainActivity.getCurrentUser().getID()) && !groupDataSnapshot.child("members").child(MainActivity.getCurrentUser().getID()).child("deleted").getValue(Boolean.class)) {
                    groups.put(groupID, g);
                } else {
                    groups.remove(groupID);
                }
                //                    Group nullGroup = new Group();
                //                    nullGroup.setID(groupID + 1);
                //                    groups.put(nullGroup.getID(), nullGroup);
                groupsViewAdapter.update(groups);
                groupsViewAdapter.notifyDataSetChanged();
            //totBalance = 0d;
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
    return;
}
Also used : ViewGroup(android.view.ViewGroup) Group(com.polito.mad17.madmax.entities.Group) DatabaseError(com.google.firebase.database.DatabaseError) HashMap(java.util.HashMap) Expense(com.polito.mad17.madmax.entities.Expense) ValueEventListener(com.google.firebase.database.ValueEventListener) DataSnapshot(com.google.firebase.database.DataSnapshot)

Example 14 with Group

use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.

the class NewGroupActivity method onOptionsItemSelected.

//When i click SAVE
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int itemThatWasClickedId = item.getItemId();
    if (itemThatWasClickedId == R.id.action_save) {
        //display message if text field is empty
        if (TextUtils.isEmpty(nameGroup.getText().toString())) {
            nameGroup.setError(getString(R.string.required));
            return false;
        }
        Log.d(TAG, "Second step: invite members to group");
        //        String deepLink = getString(R.string.invitation_deep_link) + "?groupToBeAddedID=" + groupID+ "?inviterToGroupUID=" + MainActivity.getCurrentUser().getID();
        newgroup_id = databaseReference.child("groups").push().getKey();
        String name = nameGroup.getText().toString();
        String description = descriptionGroup.getText().toString();
        //id is useless
        final Group newGroup = new Group("0", name, "noImage", description, 1);
        // for saving image
        if (imageSetted) {
            StorageReference uProfileImageFilenameRef = storageReference.child("groups").child(newgroup_id).child(newgroup_id + "_profileImage.jpg");
            // Get the data from an ImageView as bytes
            imageGroup.setDrawingCacheEnabled(true);
            imageGroup.buildDrawingCache();
            Bitmap bitmap = imageGroup.getDrawingCache();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] imageData = baos.toByteArray();
            UploadTask uploadTask = uProfileImageFilenameRef.putBytes(imageData);
            uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {

                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                    if (task.isSuccessful()) {
                        newGroup.setImage(task.getResult().getDownloadUrl().toString());
                        Log.d(TAG, "group img url: " + newGroup.getImage());
                        databaseReference.child("groups").child(newgroup_id).setValue(newGroup);
                        String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date());
                        databaseReference.child("groups").child(newgroup_id).child("timestamp").setValue(timeStamp);
                        databaseReference.child("groups").child(newgroup_id).child("numberMembers").setValue(1);
                        FirebaseUtils.getInstance().joinGroupFirebase(MainActivity.getCurrentUser().getID(), newgroup_id);
                        Log.d(TAG, "group " + newgroup_id + " created");
                        // add event for GROUP_ADD
                        User currentUser = MainActivity.getCurrentUser();
                        Event event = new Event(newgroup_id, Event.EventType.GROUP_ADD, currentUser.getName() + " " + currentUser.getSurname(), newGroup.getName());
                        event.setDate(new SimpleDateFormat("yyyy.MM.dd").format(new java.util.Date()));
                        event.setTime(new SimpleDateFormat("HH:mm").format(new java.util.Date()));
                        FirebaseUtils.getInstance().addEvent(event);
                    }
                }
            });
        } else {
            databaseReference.child("groups").child(newgroup_id).setValue(newGroup);
            String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date());
            databaseReference.child("groups").child(newgroup_id).child("timestamp").setValue(timeStamp);
            databaseReference.child("groups").child(newgroup_id).child("numberMembers").setValue(1);
            FirebaseUtils.getInstance().joinGroupFirebase(MainActivity.getCurrentUser().getID(), newgroup_id);
            Log.d(TAG, "group " + newgroup_id + " created");
            // add event for GROUP_ADD
            User currentUser = MainActivity.getCurrentUser();
            Event event = new Event(newgroup_id, Event.EventType.GROUP_ADD, currentUser.getName() + " " + currentUser.getSurname(), newGroup.getName());
            event.setDate(new SimpleDateFormat("yyyy.MM.dd").format(new java.util.Date()));
            event.setTime(new SimpleDateFormat("HH:mm").format(new java.util.Date()));
            FirebaseUtils.getInstance().addEvent(event);
        }
        Intent intent = new Intent(getApplicationContext(), NewMemberActivity.class);
        intent.putExtra("groupID", newgroup_id);
        intent.putExtra("groupName", name);
        startActivity(intent);
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}
Also used : Group(com.polito.mad17.madmax.entities.Group) User(com.polito.mad17.madmax.entities.User) StorageReference(com.google.firebase.storage.StorageReference) Intent(android.content.Intent) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Bitmap(android.graphics.Bitmap) UploadTask(com.google.firebase.storage.UploadTask) Event(com.polito.mad17.madmax.entities.Event) MotionEvent(android.view.MotionEvent) SimpleDateFormat(java.text.SimpleDateFormat)

Example 15 with Group

use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.

the class NewMemberActivity method onOptionsItemSelected.

//When I click SAVE
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int itemThatWasClickedId = item.getItemId();
    if (itemThatWasClickedId == R.id.action_save) {
        for (User newMemeber : alreadySelected.values()) {
            FirebaseUtils.getInstance().joinGroupFirebase(newMemeber.getID(), groupID);
            // add event for GROUP_MEMBER_ADD
            User currentUser = MainActivity.getCurrentUser();
            Event event = new Event(groupID, Event.EventType.GROUP_MEMBER_ADD, currentUser.getName() + " " + currentUser.getSurname(), newMemeber.getName() + " " + newMemeber.getSurname());
            event.setDate(new SimpleDateFormat("yyyy.MM.dd").format(new java.util.Date()));
            event.setTime(new SimpleDateFormat("HH:mm").format(new java.util.Date()));
            FirebaseUtils.getInstance().addEvent(event);
        }
        for (User user : friends.values()) {
            if (user.getIsInGroupForInvite().equals(groupID)) {
                FirebaseUtils.getInstance().removeMemberFirebase(user.getID(), groupID);
                // add event for GROUP_MEMBER_REMOVE
                User currentUser = MainActivity.getCurrentUser();
                Event event = new Event(groupID, Event.EventType.GROUP_MEMBER_REMOVE, currentUser.getName() + " " + currentUser.getSurname(), user.getName() + " " + user.getSurname());
                event.setDate(new SimpleDateFormat("yyyy.MM.dd").format(new java.util.Date()));
                event.setTime(new SimpleDateFormat("HH:mm").format(new java.util.Date()));
                FirebaseUtils.getInstance().addEvent(event);
            }
        }
        friends.clear();
        alreadySelected.clear();
        Toast.makeText(getApplicationContext(), "Friends added to group", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
}
Also used : User(com.polito.mad17.madmax.entities.User) Event(com.polito.mad17.madmax.entities.Event) Intent(android.content.Intent) SimpleDateFormat(java.text.SimpleDateFormat)

Aggregations

Intent (android.content.Intent)11 DataSnapshot (com.google.firebase.database.DataSnapshot)6 DatabaseError (com.google.firebase.database.DatabaseError)6 ValueEventListener (com.google.firebase.database.ValueEventListener)6 User (com.polito.mad17.madmax.entities.User)6 View (android.view.View)5 Group (com.polito.mad17.madmax.entities.Group)5 ViewGroup (android.view.ViewGroup)4 ImageView (android.widget.ImageView)4 TextView (android.widget.TextView)4 SimpleDateFormat (java.text.SimpleDateFormat)4 Event (com.polito.mad17.madmax.entities.Event)3 Expense (com.polito.mad17.madmax.entities.Expense)3 HashMap (java.util.HashMap)3 Uri (android.net.Uri)2 Bundle (android.os.Bundle)2 TabLayout (android.support.design.widget.TabLayout)2 RecyclerView (android.support.v7.widget.RecyclerView)2 ListView (android.widget.ListView)2 FirebaseUser (com.google.firebase.auth.FirebaseUser)2