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) {
}
});
}
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);
}
});
}
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;
}
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);
}
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);
}
Aggregations