use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.
the class PendingExpenseDetailActivity method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "OnCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pending_expense_detail);
Intent intent = getIntent();
expenseID = intent.getStringExtra("expenseID");
// intent.getStringExtra("userID");
userID = MainActivity.getCurrentUID();
fab = (FloatingActionButton) findViewById(R.id.fab);
updateFab(0);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setBackgroundColor(0x0000FF00);
// Get a support ActionBar corresponding to this toolbar
ActionBar ab = getSupportActionBar();
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
// insert tabs and current fragment in the main layout
// mainView.addView(getLayoutInflater().inflate(R.layout.activity_expense_detail, null));
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText(R.string.expense_detail));
tabLayout.addTab(tabLayout.newTab().setText(R.string.comments));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
viewPager = (ViewPager) findViewById(R.id.expense_detail_view_pager);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.d(TAG, String.valueOf(tab.getPosition()));
updateFab(tab.getPosition());
Log.d(TAG, "tab.getPosition() " + tab.getPosition());
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
ExpenseDetailPagerAdapter adapter = new ExpenseDetailPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount(), expenseID, TAG);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(0);
imageView = (ImageView) findViewById(R.id.img_photo);
amountTextView = (TextView) findViewById(R.id.tv_amount);
creatorNameTextView = (TextView) findViewById(R.id.tv_creator_name);
groupTextView = (TextView) findViewById(R.id.tv_group_name);
expenseNameTextView = (TextView) findViewById(R.id.tv_pending_name);
moveExpenseButton = (Button) findViewById(R.id.btn_move_expense);
// Retrieve data of this pending expense
databaseReference.child("proposedExpenses").child(expenseID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
expenseName = dataSnapshot.child("description").getValue(String.class);
String groupName = dataSnapshot.child("groupName").getValue(String.class);
Double amount = dataSnapshot.child("amount").getValue(Double.class);
expenseNameTextView.setText(expenseName);
groupTextView.setText(groupName);
amountTextView.setText(amount.toString());
creatorID = dataSnapshot.child("creatorID").getValue(String.class);
groupID = dataSnapshot.child("groupID").getValue(String.class);
// .load(dataSnapshot.child("image").getValue(String.class))
Glide.with(getApplicationContext()).load(dataSnapshot.child("expensePhoto").getValue(String.class)).placeholder(R.color.colorPrimary).centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
databaseReference.child("users").child(creatorID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot creatorSnapshot) {
creatorNameTextView.setText(creatorSnapshot.child("name").getValue(String.class) + " " + creatorSnapshot.child("surname").getValue(String.class));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
DecimalFormat df = new DecimalFormat("#.##");
amountTextView.setText(df.format(amount) + " €");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
// Click on button to move from pending to real expense
moveExpenseButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Only the creator of pending expense can move it
if (creatorID.equals(userID)) {
databaseReference.child("proposedExpenses").child(expenseID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<String> participants = new ArrayList<String>();
expenseName = dataSnapshot.child("description").getValue(String.class);
groupID = dataSnapshot.child("groupID").getValue(String.class);
Double amount = dataSnapshot.child("amount").getValue(Double.class);
String currency = dataSnapshot.child("currency").getValue(String.class);
String creatorID = dataSnapshot.child("creatorID").getValue(String.class);
String expensePhoto = dataSnapshot.child("expensePhoto").getValue(String.class);
for (DataSnapshot participantSnap : dataSnapshot.child("participants").getChildren()) participants.add(participantSnap.getKey());
Expense newExpense = new Expense();
newExpense.setDescription(expenseName);
newExpense.setAmount(amount);
newExpense.setCurrency(currency);
newExpense.setGroupID(groupID);
newExpense.setCreatorID(creatorID);
newExpense.setEquallyDivided(true);
newExpense.setDeleted(false);
newExpense.setExpensePhoto(expensePhoto);
Double amountPerMember = 1 / (double) participants.size();
for (String participant : participants) {
newExpense.getParticipants().put(participant, amountPerMember);
// Delete expense from his proposed expenses
databaseReference.child("users").child(participant).child("proposedExpenses").child(expenseID).setValue(false);
}
String timeStamp = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date());
newExpense.setTimestamp(timeStamp);
// Add expense to db
FirebaseUtils.getInstance().addExpenseFirebase(newExpense, null, null, getApplicationContext());
// Delete pending expense from proposed expenses list
databaseReference.child("proposedExpenses").child(expenseID).child("deleted").setValue(true);
// Delete pending expense from group
databaseReference.child("groups").child(groupID).child("proposedExpenses").child(expenseID).setValue(false);
// add event for PENDING_EXPENSE_APPROVED
User currentUser = MainActivity.getCurrentUser();
String userID = currentUser.getID();
Event event = new Event(groupID, Event.EventType.PENDING_EXPENSE_APPROVED, currentUser.getName() + " " + currentUser.getSurname(), newExpense.getDescription(), newExpense.getAmount());
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 myIntent = new Intent(PendingExpenseDetailActivity.this, GroupDetailActivity.class);
myIntent.putExtra("groupID", groupID);
myIntent.putExtra("userID", userID);
finish();
startActivity(myIntent);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
} else {
Toast.makeText(PendingExpenseDetailActivity.this, getString(R.string.only_creator), Toast.LENGTH_SHORT).show();
return;
}
}
});
}
use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.
the class GroupDetailActivity method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_bar_main);
databaseReference = FirebaseDatabase.getInstance().getReference();
Intent intent = getIntent();
groupID = intent.getStringExtra("groupID");
userID = intent.getStringExtra("userID");
Log.d(TAG, "onCreate di GroupDetailActivity. Group: " + groupID);
Bundle bundle = new Bundle();
bundle.putString("groupID", groupID);
bundle.putString("userID", userID);
if (findViewById(R.id.collapsed_content) != null) {
Log.d(TAG, groupID);
barDetailFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.collapsed_content, barDetailFragment).commit();
}
if (findViewById(R.id.main) != null) {
Log.d(TAG, groupID);
DetailFragment detailFragment = new DetailFragment();
detailFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.main, detailFragment).commit();
}
}
use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.
the class GroupEdit method updateGroup.
private boolean updateGroup(final Group group) {
Log.i(TAG, "update group");
if (!validateForm()) {
Log.i(TAG, "submitted form is not valid");
Toast.makeText(this, getString(R.string.invalid_form), Toast.LENGTH_SHORT).show();
return false;
}
String newName = groupNameView.getText().toString();
String newDescription = groupDescriptionView.getText().toString();
if (!newName.isEmpty() && (group.getName() == null || !group.getName().equals(newName))) {
group.setName(newName);
databaseReference.child("groups").child(group.getID()).child("name").setValue(group.getName());
}
if (!newDescription.isEmpty() && (group.getDescription() == null || !group.getDescription().equals(newDescription))) {
group.setDescription(newDescription);
databaseReference.child("groups").child(group.getID()).child("description").setValue(group.getDescription());
}
if (IMAGE_CHANGED) {
// for saving image
StorageReference uGroupImageImageFilenameRef = storageReference.child("groups").child(group.getID()).child(group.getID() + "_groupImage.jpg");
// Get the data from an ImageView as bytes
groupImageView.setDrawingCacheEnabled(true);
groupImageView.buildDrawingCache();
Bitmap bitmap = groupImageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
UploadTask uploadTask = uGroupImageImageFilenameRef.putBytes(data);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// todo Handle unsuccessful uploads
Log.e(TAG, "image upload failed");
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
group.setImage(taskSnapshot.getMetadata().getDownloadUrl().toString());
databaseReference.child("groups").child(group.getID()).child("image").setValue(group.getImage());
}
});
}
// add event for GROUP_EDIT
User currentUser = MainActivity.getCurrentUser();
Event event = new Event(group.getID(), Event.EventType.GROUP_EDIT, currentUser.getName() + " " + currentUser.getSurname(), group.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);
return true;
}
use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.
the class GroupEdit method onCreate.
@Override
@TargetApi(23)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_group);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
groupNameView = (EditText) this.findViewById(R.id.group_name);
groupDescriptionView = (EditText) this.findViewById(R.id.group_description);
groupImageView = (ImageView) this.findViewById(R.id.group_image);
saveButton = (Button) this.findViewById(R.id.btn_save);
final Intent intent = getIntent();
final String groupID = intent.getStringExtra("groupID");
Log.d("DAVIDE", "da GroupEdit: " + groupID);
databaseReference.child("groups").child(groupID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
group = new Group();
group.setID(dataSnapshot.getKey());
group.setName(dataSnapshot.child("name").getValue(String.class));
group.setDescription(dataSnapshot.child("description").getValue(String.class));
group.setImage(dataSnapshot.child("image").getValue(String.class));
groupNameView.setText(group.getName());
groupDescriptionView.setText(group.getDescription());
// progressDialog = new ProgressDialog(ProfileEdit.this);
String groupImage = group.getImage();
if (groupImage != null && !groupImage.equals("noImage")) {
// Loading image
Glide.with(getApplicationContext()).load(groupImage).centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into(groupImageView);
} else {
// Loading image
Glide.with(getApplicationContext()).load(R.drawable.group_default).centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into(groupImageView);
}
groupImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG, "image clicked");
if (MainActivity.shouldAskPermission()) {
String[] perms = { "android.permission.READ_EXTERNAL_STORAGE" };
int permsRequestCode = 200;
requestPermissions(perms, permsRequestCode);
}
// allow to the user the choose image
Intent intent = new Intent();
// Show only images, no videos or anything else
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
// Always show the chooser (if there are multiple options available)
startActivityForResult(Intent.createChooser(intent, "Select picture"), PICK_IMAGE_REQUEST);
// now see onActivityResult
}
});
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG, "save clicked");
if (updateGroup(group)) {
Toast.makeText(GroupEdit.this, getString(R.string.saved), Toast.LENGTH_SHORT).show();
Intent i = new Intent(getApplicationContext(), GroupDetailActivity.class);
i.putExtra("groupID", groupID);
i.putExtra("userID", MainActivity.getCurrentUID());
startActivity(i);
finish();
}
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, databaseError.getMessage());
}
});
}
use of com.polito.mad17.madmax.entities.Group in project MadMax by deviz92.
the class GroupExpensesActivity method onCreate.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_group_expenses);
final String IDGroup;
Intent intent = getIntent();
// if starting activity from itself (adding a new expense)
if (intent.getBooleanExtra("addExpenseToGroup", true)) {
IDGroup = intent.getStringExtra("IDGroup");
String description = intent.getStringExtra("description");
String amount = intent.getStringExtra("amount");
String currency = intent.getStringExtra("currency");
// expenses.put(String.valueOf(i), new Expense(String.valueOf(i), description + " " + currency + " " + amount, (double) i+1));
Group group = MainActivity.getCurrentUser().getUserGroups().get(IDGroup);
expenses = group.getExpenses();
// todo a cosa serve questa expense?? quale utente la fa?
/*Expense e = new Expense(
String.valueOf(expenses.size()), description, null, Double.valueOf(amount),
currency, String.valueOf(R.drawable.expense6), "urlBill", false, group.getID(), null, false
);*/
// save the new expense
// expenses.put(String.valueOf(expenses.size()), e);
// GroupsActivity.users.get(0).addExpense(e);
// GroupsActivity.myself.addExpense(e);
// todo mettere addExpenseFirebase
} else // if starting activity from GroupActivity (tapping on a group for showing details)
{
IDGroup = intent.getStringExtra("IDGroup");
Group group = MainActivity.getCurrentUser().getUserGroups().get(IDGroup);
expenses = group.getExpenses();
}
// then show group expenses list
// todo getting IDGroup from the intent from GroupsActivity
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(GroupExpensesActivity.this, NewExpenseActivity.class);
intent.putExtra("IDGroup", IDGroup);
intent.putExtra("callingActivity", "GroupExpensesActivity");
intent.putExtra("newPending", false);
GroupExpensesActivity.this.startActivity(intent);
finish();
GroupExpensesActivity.this.startActivity(intent);
/*Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();*/
}
});
/* //Button to go to group info
Button groupInfoButton = (Button) findViewById(R.id.infobutton);
groupInfoButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
Context context = GroupExpensesActivity.this;
Class destinationActivity = GroupInfoActivity.class;
Intent intent = new Intent(context, destinationActivity);
intent.putExtra("groupID", IDGroup);
intent.putExtra("caller", "GroupExpensesActivity");
startActivity(intent);
}
});*/
// todo when we'll use Firebase -> retrieve expenses HashMap with IDGroup received from GroupsActivity
ListView lv = (ListView) findViewById(R.id.expenses);
// for putting data inside the list view I need an adapter
BaseAdapter a = new BaseAdapter() {
@Override
public int getCount() {
return expenses.size();
}
@Override
public Object getItem(int position) {
return expenses.get(String.valueOf(position));
}
// not changed
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// if it's the first time I create the view
if (convertView == null) {
// LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater = LayoutInflater.from(GroupExpensesActivity.this);
// last parameter is very important: for now we don't want to attach our view to the parent view
convertView = inflater.inflate(R.layout.list_item, parent, false);
}
Expense expense = expenses.get(String.valueOf(position));
ImageView photo = (ImageView) convertView.findViewById(R.id.img_photo);
TextView description = (TextView) convertView.findViewById(R.id.tv_sender);
TextView amount = (TextView) convertView.findViewById(R.id.tv_balance);
if (expense.getExpensePhoto() != null)
photo.setImageResource(Integer.parseInt(expense.getExpensePhoto()));
description.setText(expense.getDescription());
String amountString = expense.getAmount() + " " + expense.getCurrency();
amount.setText(amountString);
return convertView;
}
};
lv.setAdapter(a);
}
Aggregations