推送通知,如果我有评论或喜欢

时间:2019-07-28 11:54:44

标签: java android

嗨,我是首次参加android编程,我设计了一个应用程序,当用户发表评论或希望我们收到推送通知时,我确实需要帮助。预先谢谢你...

嗨,我是首次参加android编程,我设计了一个应用程序,当用户发表评论或希望我们收到推送通知时,我确实需要帮助。预先谢谢你...

CommentActivity

    package com.developer.fireone.finga;

import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.widget.Toolbar;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.developer.fireone.finga.Adapter.CommentAdapter;
import com.developer.fireone.finga.Model.Comment;
import com.developer.fireone.finga.Model.User;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;

public class CommentsActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private CommentAdapter commentAdapter;
    private List<Comment> commentList;

    EditText addcomment;
    ImageView image_profile;
    TextView post;

    String postid;
    String publisherid, currentDate, currentTime;

    FirebaseUser firebaseUser;

    boolean notify = false;
    Intent intent;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_comments);


        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle(R.string.comments1);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        Intent intent = getIntent();
        postid = intent.getStringExtra("postid");
        publisherid = intent.getStringExtra("publisherid");


        recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);
        commentList = new ArrayList<>();
        commentAdapter = new CommentAdapter(this, commentList, postid);
        recyclerView.setAdapter(commentAdapter);

        addcomment = findViewById(R.id.add_comment);
        image_profile = findViewById(R.id.image_profile);
        post = findViewById(R.id.post);


        firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

        post.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                notify=true;
                if(addcomment.getText().toString().equals("")){
                    Toast.makeText(CommentsActivity.this, R.string.pasdecommentvide, Toast.LENGTH_SHORT).show();
                }else{
                    addComment();
                }
            }
        });

        getImage();
        readComments();

    }

    private void addComment() {

        Calendar calForDate = Calendar.getInstance();
        SimpleDateFormat currentDateFormat = new SimpleDateFormat("MMM dd, yyyy");
        currentDate = currentDateFormat.format(calForDate.getTime());

        Calendar calForTime = Calendar.getInstance();
        SimpleDateFormat currentTimeFormat = new SimpleDateFormat("hh:mm a");
        currentTime = currentTimeFormat.format(calForTime.getTime());

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Comments").child(postid);

        String commentid = reference.push().getKey();

        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("comment", addcomment.getText().toString());
        hashMap.put("publisher", firebaseUser.getUid());
        hashMap.put("commentid", commentid);
        hashMap.put("date", currentDate);
        hashMap.put("time", currentTime);

        reference.child(commentid).setValue(hashMap);
        addNotifications();
        addcomment.setText("");

    }

    private void addNotifications(){
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Notifications").child(publisherid);

        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("userid", firebaseUser.getUid());
        hashMap.put("text", getString(R.string.commenterxa)+" "+addcomment.getText().toString());
        hashMap.put("postid", postid);
        hashMap.put("ispost", true);
        hashMap.put("isseen", false);

        reference.push().setValue(hashMap);
    }


    private void getImage(){

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());
        reference.keepSynced(true);

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                final User user = dataSnapshot.getValue(User.class);
                Glide.with(getApplicationContext()).load(user.getImageurl()).into(image_profile);


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

    private void readComments(){
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Comments").child(postid);
        reference.keepSynced(true);
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                commentList.clear();
                for(DataSnapshot snapshot:dataSnapshot.getChildren()){
                    Comment comment = snapshot.getValue(Comment.class);
                    commentList.add(comment);
                }

                commentAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

}

PostAdapter(例如此处)

   package com.developer.fireone.finga.Adapter;

import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.developer.fireone.finga.CommentsActivity;
import com.developer.fireone.finga.FollowersActivity;
import com.developer.fireone.finga.Fragment.PostDetailFragment;
import com.developer.fireone.finga.Fragment.ProfileFragment;
import com.developer.fireone.finga.Model.ForAllUser;
import com.developer.fireone.finga.Model.Post;
import com.developer.fireone.finga.Model.User;
import com.developer.fireone.finga.R;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.tylersuehr.socialtextview.SocialTextView;

import java.util.HashMap;
import java.util.List;

import static java.security.AccessController.getContext;

/**
 * Created by user on 10/12/2018.
 */

public class PostAdapter extends  RecyclerView.Adapter<PostAdapter.ViewHolder>{

    public Context mContext;
    public List<Post> mPost;

    public FirebaseUser firebaseUser;

    public PostAdapter(Context mContext, List<Post> mPost) {
        this.mContext = mContext;
        this.mPost = mPost;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.post_item, viewGroup, false);
        return new PostAdapter.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {

        firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

        final Post post = mPost.get(i);


        viewHolder.finga_android.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext, "Finga for Android V 1.0.0",Toast.LENGTH_LONG).show();
            }
        });


        if(post.getType().equals("text")){
            viewHolder.bord2.setVisibility(View.GONE);
            viewHolder.bord1.setVisibility(View.GONE);
            viewHolder.description.setTextSize(20);
            viewHolder.post_image.setVisibility(View.GONE);

        }else {
            DatabaseReference referencepub = FirebaseDatabase.getInstance().getReference("ForAllUser");
            referencepub.keepSynced(true);

            referencepub.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if(getContext() == null){
                        return;
                    }

                    final ForAllUser forAllUser = dataSnapshot.getValue(ForAllUser.class);
                    Glide.with(mContext).load(forAllUser.getPost_border()).into(viewHolder.bord1);
                    Glide.with(mContext).load(forAllUser.getPost_border()).into(viewHolder.bord2);

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            viewHolder.post_image.setVisibility(View.VISIBLE);
             Glide.with(mContext).load(post.getPostimage()).into(viewHolder.post_image);

        }
        //test hastag and mention
        viewHolder.socialTextView.setLinkText(viewHolder.description.toString());

        if(post.getDescription().equals("")){

            viewHolder.description.setVisibility(View.GONE);

        }else{

            viewHolder.description.setVisibility(View.VISIBLE);
            viewHolder.description.setText(post.getDescription());

        }

        publisherInfo(viewHolder.image_profile,viewHolder.username, viewHolder.fullname, viewHolder.publisher, post.getPublisher());
        isLiked(post.getPostid(),viewHolder.like);
        nrLikes(viewHolder.likes, post.getPostid());
        getComments(post.getPostid(), viewHolder.comments);

        isSave(post.getPostid(), viewHolder.save);

        viewHolder.txt_date.setText(post.getDate());
        viewHolder.txt_time.setText(post.getTime());


        viewHolder.image_profile.setOnClickListener(view -> {

            SharedPreferences.Editor editor= mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
            editor.putString("profileid", post.getPublisher());
            editor.apply();

            ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new ProfileFragment()).commit();

        });

        viewHolder.username.setOnClickListener(view -> {

            SharedPreferences.Editor editor= mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
            editor.putString("profileid", post.getPublisher());
            editor.apply();

            ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new ProfileFragment()).commit();

        });

        viewHolder.publisher.setOnClickListener(view -> {

            SharedPreferences.Editor editor= mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
            editor.putString("profileid", post.getPublisher());
            editor.apply();

            ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new ProfileFragment()).commit();

        });

        viewHolder.post_image.setOnClickListener(view -> {

            SharedPreferences.Editor editor= mContext.getSharedPreferences("PREFS", Context.MODE_PRIVATE).edit();
            editor.putString("postid", post.getPostid());
            editor.apply();

            ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new PostDetailFragment()).commit();

        });



        viewHolder.save.setOnClickListener(view -> {

            if(viewHolder.save.getTag().equals("save")){

                FirebaseDatabase.getInstance().getReference().child("Saves").child(firebaseUser.getUid())
                        .child(post.getPostid()).setValue(true);

            }else{
                FirebaseDatabase.getInstance().getReference().child("Saves").child(firebaseUser.getUid())
                        .child(post.getPostid()).removeValue();
            }

        });

        viewHolder.like.setOnClickListener(view -> {
            if(viewHolder.like.getTag().equals("like")){
                FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid())
                        .child(firebaseUser.getUid()).setValue(true);
             addNotifications(post.getPublisher(), post.getPostid());
            }else{
                FirebaseDatabase.getInstance().getReference().child("Likes").child(post.getPostid()).child(firebaseUser.getUid()).removeValue();

            }
        });


        viewHolder.comment.setOnClickListener(view -> {
            Intent intent = new Intent(mContext, CommentsActivity.class);
            intent.putExtra("postid",post.getPostid());
            intent.putExtra("publisherid",post.getPublisher());
            mContext.startActivity(intent);
        });

        viewHolder.comments.setOnClickListener(view -> {
            Intent intent = new Intent(mContext, CommentsActivity.class);
            intent.putExtra("postid",post.getPostid());
            intent.putExtra("publisherid",post.getPublisher());
            mContext.startActivity(intent);
        });

        viewHolder.likes.setOnClickListener(view -> {
            Intent intent = new Intent(mContext, FollowersActivity.class);
            intent.putExtra("id", post.getPostid());
            intent.putExtra("title", "likes");
            mContext.startActivity(intent);
        });

        viewHolder.more.setOnClickListener(view -> {
            PopupMenu popupMenu = new PopupMenu(mContext, view);
            popupMenu.setOnMenuItemClickListener(menuItem -> {
                switch (menuItem.getItemId()){

                    case R.id.edit:
                        editPost(post.getPostid());
                        return true;

                    case R.id.delete:
//                                FirebaseDatabase.getInstance().getReference("Posts")
//                                        .child(post.getPostid()).removeValue()
//                                        .addOnCompleteListener(new OnCompleteListener<Void>() {
//                                            @Override
//                                            public void onComplete(@NonNull Task<Void> task) {
//                                                if(task.isSuccessful()){
//                                                    Toast.makeText(mContext, "Deleted!", Toast.LENGTH_SHORT).show();
//                                                }
//                                            }
//                                        });
                        Toast.makeText(mContext, "nous y travaillons desole :)", Toast.LENGTH_SHORT).show();
                        return true;
                    case R.id.report:
                        Toast.makeText(mContext, "Report clicked!", Toast.LENGTH_SHORT).show();
                        return true;
                        default:
                            return false;
                }

            });

            popupMenu.inflate(R.menu.post_menu);
            if(!post.getPublisher().equals(firebaseUser.getUid())){
                popupMenu.getMenu().findItem(R.id.edit).setVisible(false);
                popupMenu.getMenu().findItem(R.id.delete).setVisible(false);
            }
            popupMenu.show();
        });

    }

    @Override
    public int getItemCount() {
        return mPost.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        public ImageView image_profile, post_image, like, comment, save, more, bord0, bord1, bord2;
        public TextView username, fullname, likes, publisher, description, comments, txt_time, txt_date, finga_android;
        public SocialTextView socialTextView;



        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            socialTextView=new SocialTextView(mContext);
            finga_android=itemView.findViewById(R.id.finga_android);
            image_profile=itemView.findViewById(R.id.image_profile);
            bord0=itemView.findViewById(R.id.bord0);
            bord1=itemView.findViewById(R.id.bord1);
            bord2=itemView.findViewById(R.id.bord2);
            post_image=itemView.findViewById(R.id.post_image);
            like=itemView.findViewById(R.id.like);
            comment=itemView.findViewById(R.id.comment);
            save=itemView.findViewById(R.id.save);
            username=itemView.findViewById(R.id.username);
            fullname=itemView.findViewById(R.id.fullname);
            likes=itemView.findViewById(R.id.likes);
            publisher=itemView.findViewById(R.id.publisher);
            description=itemView.findViewById(R.id.description);
            comments=itemView.findViewById(R.id.comments);
            more=itemView.findViewById(R.id.more);
            txt_date=itemView.findViewById(R.id.txt_date);
            txt_time=itemView.findViewById(R.id.txt_time);

        }
    }

    private void getComments(String postid, final TextView comments ){

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comments").child(postid);

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                comments.setText(mContext.getString(R.string.viewAll)+" "+dataSnapshot.getChildrenCount()+" "+mContext.getString(R.string.comments1));

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

// isliked
    private void isLiked(String postid, final ImageView imageView){

        final FirebaseUser firebaseUser=FirebaseAuth.getInstance().getCurrentUser();

        DatabaseReference reference=FirebaseDatabase.getInstance().getReference()
                .child("Likes")
                .child(postid);

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if(dataSnapshot.child(firebaseUser.getUid()).exists()){
                    imageView.setImageResource(R.drawable.ic_liked);
                    imageView.setTag("liked");
                }else {
                    imageView.setImageResource(R.drawable.ic_like);
                    imageView.setTag("like");
                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }


    private void addNotifications(String userid, String postid){
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Notifications").child(userid);

        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("userid", firebaseUser.getUid());
        hashMap.put("text", mContext.getString(R.string.strlikePost));
        hashMap.put("postid", postid);
        hashMap.put("ispost", true);
        hashMap.put("isseen", false);
        reference.push().setValue(hashMap);
    }



    private  void nrLikes(final TextView likes, String postid){
        DatabaseReference reference=FirebaseDatabase.getInstance().getReference().child("Likes")
                .child(postid);
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                likes.setText(dataSnapshot.getChildrenCount()+" yamo.");

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }


    private void  publisherInfo(final ImageView image_profile, final TextView username, final TextView fullname, final TextView publisher, final String userid){

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                User user = dataSnapshot.getValue(User.class);
                Glide.with(mContext.getApplicationContext()).load(user.getImageurl()).into(image_profile);
                username.setText(user.getUsername());
                fullname.setText(user.getFullname());
                publisher.setText(user.getUsername());

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

    private void isSave(final String postid, final ImageView imageView){
        FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

       DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Saves")
                .child(firebaseUser.getUid());

       reference.addValueEventListener(new ValueEventListener() {
           @Override
           public void onDataChange(DataSnapshot dataSnapshot) {

               if(dataSnapshot.child(postid).exists()){
                   imageView.setImageResource(R.drawable.ic_saved);
                   imageView.setTag("saved");
               }else{
                   imageView.setImageResource(R.drawable.ic_save_black);
                   imageView.setTag("save");
               }

           }

           @Override
           public void onCancelled(DatabaseError databaseError) {

           }
       });

    }

    private void editPost(final String postid){

        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
        alertDialog.setTitle(R.string.strEditPost);

        final EditText editText = new EditText(mContext);
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT
        );
        editText.setLayoutParams(lp);
        alertDialog.setView(editText);

        getText(postid, editText);
        alertDialog.setPositiveButton(R.string.strEdit, (dialogInterface, i) -> {

            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("description", editText.getText().toString());

            FirebaseDatabase.getInstance().getReference("Posts")
                    .child(postid).updateChildren(hashMap);

        });
        alertDialog.setNegativeButton(R.string.strCancel, (dialogInterface, i) -> dialogInterface.dismiss());

        alertDialog.show();

    }

    private void getText(String postid, final EditText editText){

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts")
                .child(postid);

        reference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                editText.setText(dataSnapshot.getValue(Post.class).getDescription());


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }




}

0 个答案:

没有答案
相关问题