SHARE
TWEET

Untitled

a guest Jun 25th, 2019 66 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package com.example.android.debateapp.Message;
  2.  
  3.  
  4. public class Message {
  5.  
  6.     private String ChatMessage;
  7.     private String mChatImageURL;
  8.  
  9.  
  10.     public Message(){
  11.         //Empty constructor needed
  12.     }
  13.  
  14.     public Message(String ChatMessage, String mChatImageURL ){
  15.         this.ChatMessage = ChatMessage;
  16.         this.mChatImageURL = mChatImageURL;
  17.     }
  18.  
  19.     public String getChatMessage() {
  20.         return ChatMessage;
  21.     }
  22.  
  23.     public String getmChatImageURL() {
  24.  
  25.         return mChatImageURL;
  26.     }
  27.  
  28. }
  29.      
  30. public class MessageRecyclerAdapter extends FirestoreRecyclerAdapter<Message, MessageRecyclerAdapter.MessageHolder> {
  31.  
  32.  
  33. public MessageRecyclerAdapter(@NonNull FirestoreRecyclerOptions<Message> options) {
  34.     super(options);
  35.  
  36. }
  37.  
  38. @Override
  39. protected void onBindViewHolder(@NonNull MessageHolder holder, int position, @NonNull Message model) {
  40.  
  41.     holder.ChatMessage.setText(model.getChatMessage());
  42.  
  43.  
  44. }
  45.  
  46. @NonNull
  47. @Override
  48. public MessageHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
  49.  
  50.     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.message_item, viewGroup, false);
  51.  
  52.     return new MessageHolder(v);
  53. }
  54.  
  55. class MessageHolder extends RecyclerView.ViewHolder{
  56.  
  57.     TextView ChatMessage;
  58.     CircleImageView MessageProfilePicture;
  59.     ImageView ChatMessageImage;
  60.  
  61.  
  62.  
  63.     public MessageHolder(@NonNull View itemView) {
  64.         super(itemView);
  65.  
  66.         ChatMessage = itemView.findViewById(R.id.Message_Chat_Content);
  67.         MessageProfilePicture = itemView.findViewById(R.id.Chat_Profile_picture);
  68.         ChatMessageImage = itemView.findViewById(R.id.chat_Message_image);
  69.  
  70.     }
  71.  
  72.     public void setChatImage(final String downloadUri) {
  73.  
  74.         ChatMessageImage = itemView.findViewById(R.id.chat_Message_image);
  75.         Glide.with(itemView.getContext()).load(downloadUri).into(ChatMessageImage);
  76.  
  77.         }
  78.     }
  79. }
  80.      
  81. public class ChatActivity extends AppCompatActivity {
  82.  
  83. public static final int DEFAULT_MSG_LENGTH_LIMIT = 1000;
  84. private static final int GALLERY_PICK = 1;
  85.  
  86. private ListView mMessageListView;
  87. private ImageButton mPhotoPickerButton;
  88. private EditText mMessageEditText;
  89. private Button mSendButton;
  90. private String mUsername;
  91. private ChildEventListener mChildEventListner;
  92. private ValueEventListener mValueEventListner;
  93. private FirebaseUser mCurrentUser;
  94.  
  95. private StorageReference storageReference;
  96.  
  97. private StorageReference mChatPhotosStorageReference;
  98. private Context mContext;
  99.  
  100. private MessageRecyclerAdapter adapter;
  101.  
  102. private ImageView chatimage;
  103.  
  104. private String TESTmessagedoc;
  105.  
  106. private ImageView chatProfile;
  107.  
  108.  
  109. //FIRE STORE
  110. private DocumentReference mMessageDoc;
  111. private FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
  112. private CollectionReference collectionReference = (firebaseFirestore).collection("Messages");
  113. private CollectionReference colRef;
  114.  
  115. private static final String TAG = ChatActivity.class.getName();
  116.  
  117.  
  118. @Override
  119. protected void onCreate(@Nullable Bundle savedInstanceState) {
  120.     super.onCreate(savedInstanceState);
  121.     setContentView(R.layout.chat_activity);
  122.  
  123.     storageReference = FirebaseStorage.getInstance().getReference();
  124.  
  125.     chatProfile = findViewById(R.id.Chat_Profile_picture);
  126.  
  127.     //chatimage = findViewById(R.id.photoImageView);
  128.  
  129.     final String messageDoc = getIntent().getStringExtra("Message_ID");
  130.  
  131.     TESTmessagedoc = messageDoc;
  132.  
  133.     mMessageDoc = firebaseFirestore.collection("Messages").document(messageDoc);
  134.  
  135.  
  136.     colRef = firebaseFirestore.collection("Messages").document(messageDoc).collection("chats");
  137.  
  138.     mPhotoPickerButton = (ImageButton) findViewById(R.id.photoPickerButton);
  139.     mMessageEditText = (EditText) findViewById(R.id.messageEditText);
  140.     mSendButton = (Button) findViewById(R.id.sendButton);
  141.  
  142.     mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
  143.     final String current_uid = mCurrentUser.getUid();
  144.  
  145.     // ImagePickerButton shows an image picker to upload a image for a message
  146.     mPhotoPickerButton.setOnClickListener(new View.OnClickListener() {
  147.         @Override
  148.         public void onClick(View view) {
  149.             Intent galleryIntent = new Intent();
  150.             galleryIntent.setType("image/*");
  151.             galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
  152.  
  153.             startActivityForResult(Intent.createChooser(galleryIntent, "Select Image"), GALLERY_PICK);
  154.         }
  155.     });
  156.  
  157.  
  158.     setUpRecyclerView();
  159.  
  160.     // Enable Send button when there's text to send
  161.     mMessageEditText.addTextChangedListener(new TextWatcher() {
  162.         @Override
  163.         public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
  164.         }
  165.  
  166.         @Override
  167.         public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
  168.             if (charSequence.toString().trim().length() > 0) {
  169.                 mSendButton.setEnabled(true);
  170.             } else {
  171.                 mSendButton.setEnabled(false);
  172.             }
  173.         }
  174.  
  175.         @Override
  176.         public void afterTextChanged(Editable editable) {
  177.         }
  178.     });
  179.     mMessageEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(DEFAULT_MSG_LENGTH_LIMIT)});
  180.  
  181.     mSendButton.setOnClickListener(new View.OnClickListener() {
  182.         @Override
  183.         public void onClick(View view) {
  184.  
  185.             String MessageText = mMessageEditText.getText().toString();
  186.  
  187.  
  188.             Map<String, Object> chatMap = new HashMap<>();
  189.             chatMap.put("ChatMessage", MessageText);
  190.             chatMap.put("User ID", current_uid);
  191.             chatMap.put("Timestamp", FieldValue.serverTimestamp());
  192.  
  193.             firebaseFirestore.collection("Messages")
  194.                     .document(messageDoc).collection("chats")
  195.                     .add(chatMap)
  196.                     .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
  197.                         @Override
  198.                         public void onSuccess(DocumentReference documentReference) {
  199.  
  200.                         }
  201.                     })
  202.                     .addOnFailureListener(new OnFailureListener() {
  203.                         @Override
  204.                         public void onFailure(@NonNull Exception e) {
  205.  
  206.                         }
  207.                     });
  208.  
  209.  
  210.             // Clear input box
  211.             mMessageEditText.setText("");
  212.         }
  213.     });
  214.  
  215. }
  216.  
  217. private void setUpRecyclerView() {
  218.     Query query = colRef.orderBy("Timestamp", Query.Direction.ASCENDING);
  219.  
  220.     FirestoreRecyclerOptions<Message> options = new FirestoreRecyclerOptions.Builder<Message>()
  221.             .setQuery(query, Message.class)
  222.             .build();
  223.  
  224.     adapter = new MessageRecyclerAdapter(options);
  225.  
  226.     RecyclerView recyclerView = findViewById(R.id.recycler_message_view);
  227.     recyclerView.setHasFixedSize(true);
  228.     recyclerView.setLayoutManager(new LinearLayoutManager(this));
  229.     recyclerView.setAdapter(adapter);
  230.  
  231. }
  232.  
  233. @Override
  234. protected void onStart() {
  235.     super.onStart();
  236.     adapter.startListening();
  237. }
  238.  
  239. @Override
  240. protected void onStop() {
  241.     super.onStop();
  242.     adapter.stopListening();
  243. }
  244.  
  245.  
  246. @Override
  247. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  248.     super.onActivityResult(requestCode, resultCode, data);
  249.  
  250.     if (requestCode == GALLERY_PICK && resultCode == RESULT_OK) {
  251.  
  252.         String imageUri = data.getDataString();
  253.  
  254.         CropImage.activity(Uri.parse(imageUri))
  255.                 .setAspectRatio(1, 1)
  256.                 .start(this);
  257.  
  258.     }
  259.  
  260.     if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
  261.         CropImage.ActivityResult result = CropImage.getActivityResult(data);
  262.         if (resultCode == RESULT_OK) {
  263.  
  264.  
  265.             Uri resultUri = result.getUri();
  266.  
  267.             final String current_user_id = mCurrentUser.getUid();
  268.             final String randomName = UUID.randomUUID().toString();
  269.  
  270.  
  271.             final StorageReference filepath = storageReference.child("chat_photos").child(randomName + ".JPG");
  272.             filepath.putFile(resultUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
  273.                 @Override
  274.                 public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
  275.  
  276.                     filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
  277.                         @Override
  278.                         public void onSuccess(Uri uri) {
  279.  
  280.                             final String downloadUrl = uri.toString();
  281.  
  282.                             Map<String, String> newImageUrl = new HashMap<>();
  283.                             newImageUrl.put("image", downloadUrl);
  284.  
  285.  
  286.                             firebaseFirestore.collection("Messages").document(TESTmessagedoc).collection("chats")
  287.                                     .add(newImageUrl)
  288.                                     .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
  289.                                         @Override
  290.                                         public void onSuccess(DocumentReference documentReference) {
  291.  
  292.                                             /*
  293.                                             filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
  294.                                                 @Override
  295.                                                 public void onSuccess(Uri uri) {
  296.  
  297.                                                     //The download url
  298.                                                     final String downloadUrl =
  299.                                                             uri.toString();
  300.                                                     Log.d("tag", downloadUrl);
  301.                                                     if (!downloadUrl.equals("default")) {
  302.                                                         // I changed this to glide since i thought picasso was the problem.
  303.                                                         // Picasso still should work. Glide is recommended by google tho
  304.                                                         Glide.with(getApplicationContext()).load(downloadUrl).into(chatProfile);
  305.                                                     }
  306.  
  307.                                                 }
  308.                                             });
  309.                                             */
  310.  
  311.                                         }
  312.                                     }).addOnFailureListener(new OnFailureListener() {
  313.                                 @Override
  314.                                 public void onFailure(@NonNull Exception e) {
  315.                                     Toast.makeText(getApplicationContext(), "There was some error in saving Changes.", Toast.LENGTH_LONG).show();
  316.                                 }
  317.  
  318.                             });
  319.                         }
  320.                     });
  321.  
  322.  
  323.  
  324.                 }
  325.             });
  326.         }
  327.     }
  328.  
  329. }}
  330.      
  331. @Override
  332. protected void onBindViewHolder(@NonNull MessageHolder holder, int position, @NonNull Message model) {
  333.  
  334.     holder.ChatMessage.setText(model.getChatMessage());
  335.  
  336.     holder.setChatImage(model.getmChatImageURL());
  337.  
  338. }
  339.      
  340. @Override
  341. protected void onBindViewHolder(@NonNull MessageHolder holder, int position, @NonNull Message model) {
  342.  
  343.     holder.ChatMessage.setText(model.getChatMessage());
  344.     holder.setChatImage(imageUrl)
  345.  
  346. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top