Search in sources :

Example 1 with Group

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;
            }
        }
    });
}
Also used : User(com.polito.mad17.madmax.entities.User) DecimalFormat(java.text.DecimalFormat) ArrayList(java.util.ArrayList) DataSnapshot(com.google.firebase.database.DataSnapshot) Expense(com.polito.mad17.madmax.entities.Expense) TabLayout(android.support.design.widget.TabLayout) ValueEventListener(com.google.firebase.database.ValueEventListener) ActionBar(android.support.v7.app.ActionBar) ExpenseDetailPagerAdapter(com.polito.mad17.madmax.activities.ExpenseDetailPagerAdapter) Intent(android.content.Intent) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) DatabaseError(com.google.firebase.database.DatabaseError) Event(com.polito.mad17.madmax.entities.Event) SimpleDateFormat(java.text.SimpleDateFormat)

Example 2 with Group

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();
    }
}
Also used : Bundle(android.os.Bundle) Intent(android.content.Intent) DetailFragment(com.polito.mad17.madmax.activities.DetailFragment) BarDetailFragment(com.polito.mad17.madmax.activities.BarDetailFragment)

Example 3 with Group

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;
}
Also used : User(com.polito.mad17.madmax.entities.User) StorageReference(com.google.firebase.storage.StorageReference) ByteArrayOutputStream(java.io.ByteArrayOutputStream) Bitmap(android.graphics.Bitmap) UploadTask(com.google.firebase.storage.UploadTask) NonNull(android.support.annotation.NonNull) Event(com.polito.mad17.madmax.entities.Event) SimpleDateFormat(java.text.SimpleDateFormat) OnFailureListener(com.google.android.gms.tasks.OnFailureListener)

Example 4 with Group

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());
        }
    });
}
Also used : Group(com.polito.mad17.madmax.entities.Group) DatabaseError(com.google.firebase.database.DatabaseError) Intent(android.content.Intent) ValueEventListener(com.google.firebase.database.ValueEventListener) DataSnapshot(com.google.firebase.database.DataSnapshot) ImageView(android.widget.ImageView) View(android.view.View) TargetApi(android.annotation.TargetApi)

Example 5 with Group

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);
}
Also used : ViewGroup(android.view.ViewGroup) Group(com.polito.mad17.madmax.entities.Group) ViewGroup(android.view.ViewGroup) Intent(android.content.Intent) ImageView(android.widget.ImageView) TextView(android.widget.TextView) View(android.view.View) ListView(android.widget.ListView) ListView(android.widget.ListView) Expense(com.polito.mad17.madmax.entities.Expense) NewExpenseActivity(com.polito.mad17.madmax.activities.expenses.NewExpenseActivity) LayoutInflater(android.view.LayoutInflater) FloatingActionButton(android.support.design.widget.FloatingActionButton) TextView(android.widget.TextView) ImageView(android.widget.ImageView) BaseAdapter(android.widget.BaseAdapter)

Aggregations

Intent (android.content.Intent)10 Group (com.polito.mad17.madmax.entities.Group)7 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 ImageView (android.widget.ImageView)5 ViewGroup (android.view.ViewGroup)4 TextView (android.widget.TextView)4 HashMap (java.util.HashMap)4 TabLayout (android.support.design.widget.TabLayout)3 Event (com.polito.mad17.madmax.entities.Event)3 Expense (com.polito.mad17.madmax.entities.Expense)3 SimpleDateFormat (java.text.SimpleDateFormat)3 Map (java.util.Map)3 Bitmap (android.graphics.Bitmap)2 Uri (android.net.Uri)2 ListView (android.widget.ListView)2 StorageReference (com.google.firebase.storage.StorageReference)2