Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ChatActivity extends AppCompatActivity implements View.OnClickListener {
- private RecyclerView recyclerChat;
- public static final int VIEW_TYPE_USER_MESSAGE = 0;
- public static final int VIEW_TYPE_FRIEND_MESSAGE = 1;
- private FirebaseAuth mAuth;
- private ListMessageAdapter adapter;
- private String roomId;
- private ArrayList<CharSequence> idFriend;
- private Consersation consersation;
- private ImageButton btnSend;
- private EditText editWriteMessage;
- private LinearLayoutManager linearLayoutManager;
- public static HashMap<String, Bitmap> bitmapAvataFriend;
- public Bitmap bitmapAvataUser;
- // Storage Permissions
- private static final int REQUEST_EXTERNAL_STORAGE = 1;
- private static String[] PERMISSIONS_STORAGE = {
- android.Manifest.permission.READ_EXTERNAL_STORAGE,
- android.Manifest.permission.WRITE_EXTERNAL_STORAGE
- };
- FirebaseStorage storage = FirebaseStorage.getInstance();
- private static final int IMAGE_GALLERY_REQUEST = 1;
- private static final int IMAGE_CAMERA_REQUEST = 2;
- //File
- private File filePathImageCamera;
- static final String TAG = ChatActivity.class.getSimpleName();
- //Progress Upload
- private ProgressDialog mProgressDialog;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_chat);
- Intent intentData = getIntent();
- idFriend = intentData.getCharSequenceArrayListExtra(StaticConfig.INTENT_KEY_CHAT_ID);
- roomId = intentData.getStringExtra(StaticConfig.INTENT_KEY_CHAT_ROOM_ID);
- String nameFriend = intentData.getStringExtra(StaticConfig.INTENT_KEY_CHAT_FRIEND);
- mProgressDialog = new ProgressDialog(this);
- consersation = new Consersation();
- btnSend = (ImageButton) findViewById(R.id.btnSend);
- btnSend.setOnClickListener(this);
- String base64AvataUser = SharedPreferenceHelper.getInstance(this).getUserInfo().avata;
- if (!base64AvataUser.equals(StaticConfig.STR_DEFAULT_BASE64)) {
- byte[] decodedString = Base64.decode(base64AvataUser, Base64.DEFAULT);
- bitmapAvataUser = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
- } else {
- bitmapAvataUser = null;
- }
- editWriteMessage = (EditText) findViewById(R.id.editWriteMessage);
- if (idFriend != null && nameFriend != null) {
- getSupportActionBar().setTitle(nameFriend);
- linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
- recyclerChat = (RecyclerView) findViewById(R.id.recyclerChat);
- recyclerChat.setLayoutManager(linearLayoutManager);
- adapter = new ListMessageAdapter(this, consersation, bitmapAvataFriend, bitmapAvataUser);
- FirebaseDatabase.getInstance().getReference().child("message/" + roomId).addChildEventListener(new ChildEventListener() {
- @Override
- public void onChildAdded(DataSnapshot dataSnapshot, String s) {
- if (dataSnapshot.getValue() != null) {
- HashMap mapMessage = (HashMap) dataSnapshot.getValue();
- Message newMessage = new Message();
- newMessage.idSender = (String) mapMessage.get("idSender");
- newMessage.idReceiver = (String) mapMessage.get("idReceiver");
- newMessage.text = (String) mapMessage.get("text");
- newMessage.timestamp = (long) mapMessage.get("timestamp");
- consersation.getListMessageData().add(newMessage);
- adapter.notifyDataSetChanged();
- linearLayoutManager.scrollToPosition(consersation.getListMessageData().size() - 1);
- }
- }
- @Override
- public void onChildChanged(DataSnapshot dataSnapshot, String s) {
- }
- @Override
- public void onChildRemoved(DataSnapshot dataSnapshot) {
- }
- @Override
- public void onChildMoved(DataSnapshot dataSnapshot, String s) {
- }
- @Override
- public void onCancelled(DatabaseError databaseError) {
- }
- });
- recyclerChat.setAdapter(adapter);
- }
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- StorageReference storageRef = storage.getReferenceFromUrl(Util.URL_STORAGE_REFERENCE).child(Util.FOLDER_STORAGE_IMG);
- if (requestCode == IMAGE_GALLERY_REQUEST && resultCode == RESULT_OK) {
- Uri selectedImageUri = data.getData();
- if (selectedImageUri != null) {
- sendImageFirebase(storageRef, selectedImageUri);
- } else {
- //URI IS NULL
- }
- } else if (requestCode == IMAGE_CAMERA_REQUEST) {
- if (resultCode == RESULT_OK) {
- if (filePathImageCamera != null && filePathImageCamera.exists()) {
- StorageReference imageCameraRef = storageRef.child(filePathImageCamera.getName() + ".jpg");
- sendCameraFirebase(imageCameraRef, filePathImageCamera);
- } else {
- //IS NULL
- }
- }
- }
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_chat, menu);
- return true;
- }
- public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
- Log.d(TAG, "onConnectionFailed:" + connectionResult);
- Util.initToast(this, "Google Play Services error.");
- }
- public void clickImageChat(View view, int position, String nameUser, String urlPhotoUser, String urlPhotoClick) {
- Intent intent = new Intent(this, FullScreenImageActivity.class);
- intent.putExtra("nameUser", nameUser);
- intent.putExtra("urlPhotoUser", urlPhotoUser);
- intent.putExtra("urlPhotoClick", urlPhotoClick);
- startActivity(intent);
- }
- private void sendImageFirebase(StorageReference storageReference, final Uri file) {
- if (storageReference != null) {
- final String name = DateFormat.format("yyyy-MM-dd_hhmmss", new Date()).toString();
- StorageReference imageGalleryRef = storageReference.child(name + "_gallery");
- UploadTask uploadTask = imageGalleryRef.putFile(file);
- mProgressDialog.setMessage("Uploading...");
- mProgressDialog.setCanceledOnTouchOutside(false);
- mProgressDialog.show();
- uploadTask.addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(@NonNull Exception e) {
- Log.e(TAG, "onFailure sendFileFirebase " + e.getMessage());
- }
- })
- .addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
- @Override
- public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
- if (task.isSuccessful()) {
- vigenerechiper vig = new vigenerechiper();
- String download_url = task.getResult().getDownloadUrl().toString();
- String enkripVigener = vig.Encrypt(download_url);
- Log.d("URL GAMBAR", "ISINYA " + enkripVigener);
- Message newMessage = new Message();
- newMessage.text = enkripVigener;
- newMessage.idSender = StaticConfig.UID;
- newMessage.idReceiver = roomId;
- newMessage.timestamp = System.currentTimeMillis();
- FirebaseDatabase.getInstance().getReference().child("message/" + roomId).push().setValue(newMessage);
- mProgressDialog.dismiss();
- Toast.makeText(ChatActivity.this, "pesan gambar terkirim", Toast.LENGTH_SHORT).show();
- }
- }
- });
- } else {
- //IS NULL
- }
- }
- /**
- * Envia o arvquivo para o firebase
- */
- private void sendCameraFirebase(StorageReference storageReference, final File file) {
- if (storageReference != null) {
- Uri photoURI = FileProvider.getUriForFile(ChatActivity.this,
- BuildConfig.APPLICATION_ID + ".provider",
- file);
- UploadTask uploadTask = storageReference.putFile(photoURI);
- mProgressDialog.setMessage("Uploading...");
- mProgressDialog.setCanceledOnTouchOutside(false);
- mProgressDialog.show();
- uploadTask.addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(@NonNull Exception e) {
- Log.e(TAG, "onFailure sendFileFirebase " + e.getMessage());
- }
- }).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
- @Override
- public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
- if (task.isSuccessful()) {
- vigenerechiper vig = new vigenerechiper();
- String download_url = task.getResult().getDownloadUrl().toString();
- String enkripVigener = vig.Encrypt(download_url);
- Message newMessage = new Message();
- newMessage.text = enkripVigener;
- newMessage.idSender = StaticConfig.UID;
- newMessage.idReceiver = roomId;
- newMessage.timestamp = System.currentTimeMillis();
- FirebaseDatabase.getInstance().getReference().child("message/" + roomId).push().setValue(newMessage);
- mProgressDialog.dismiss();
- Toast.makeText(ChatActivity.this, "pesan gambar terkirim", Toast.LENGTH_SHORT).show();
- }
- }
- });
- } else {
- //IS NULL
- }
- }
- /**
- * Enviar foto tirada pela camera
- */
- private void photoCameraIntent() {
- String nomeFoto = DateFormat.format("yyyy-MM-dd_hhmmss", new Date()).toString();
- filePathImageCamera = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), nomeFoto + "1234");
- Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- Uri photoURI = FileProvider.getUriForFile(ChatActivity.this,
- BuildConfig.APPLICATION_ID + ".provider",
- filePathImageCamera);
- it.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
- startActivityForResult(it, IMAGE_CAMERA_REQUEST);
- }
- /**
- * Enviar foto pela galeria
- */
- private void photoGalleryIntent() {
- Intent intent = new Intent();
- intent.setType("image/*");
- intent.setAction(Intent.ACTION_GET_CONTENT);
- startActivityForResult(Intent.createChooser(intent, getString(R.string.select_picture_title)), IMAGE_GALLERY_REQUEST);
- }
- public void verifyStoragePermissions() {
- // Check if we have write permission
- int permission = ActivityCompat.checkSelfPermission(ChatActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
- if (permission != PackageManager.PERMISSION_GRANTED) {
- // We don't have permission so prompt the user
- ActivityCompat.requestPermissions(
- ChatActivity.this,
- PERMISSIONS_STORAGE,
- REQUEST_EXTERNAL_STORAGE
- );
- } else {
- // we already have permission, lets go ahead and call camera intent
- photoCameraIntent();
- }
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == android.R.id.home) {
- Intent result = new Intent();
- result.putExtra("idFriend", idFriend.get(0));
- setResult(RESULT_OK, result);
- this.finish();
- }
- switch (item.getItemId()) {
- case R.id.sendPhotoGallery:
- photoGalleryIntent();
- break;
- case R.id.sendCamera:
- verifyStoragePermissions();
- // photoCameraIntent();
- break;
- }
- return true;
- }
- @Override
- public void onBackPressed() {
- Intent result = new Intent();
- result.putExtra("idFriend", idFriend.get(0));
- setResult(RESULT_OK, result);
- this.finish();
- }
- @Override
- public void onClick(View view) {
- if (view.getId() == R.id.btnSend) {
- String content = editWriteMessage.getText().toString().trim();
- if (content.length() > 0) {
- editWriteMessage.setText("");
- Message newMessage = new Message();
- try {
- String kunci = "kibo11" + roomId;
- Log.d("kunci", "" + kunci);
- byte[] enkripRC4 = new RC4().encryptMessage(content, kunci);
- Log.d("pesanEnkripRC4", enkripRC4.toString());
- String enkripAES = EncodeDecodeAES.encrypt(kunci, converter.static_byteArrayToString(enkripRC4));
- Log.d("pesanEnkripAES", enkripAES);
- newMessage.text = enkripAES;
- newMessage.idSender = StaticConfig.UID;
- newMessage.idReceiver = roomId;
- newMessage.timestamp = System.currentTimeMillis();
- FirebaseDatabase.getInstance().getReference().child("message/" + roomId).push().setValue(newMessage);
- Toast.makeText(this, "pesan terkirim", Toast.LENGTH_SHORT).show();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
- class ListMessageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
- private Context context;
- private Consersation consersation;
- private HashMap<String, Bitmap> bitmapAvata;
- private HashMap<String, DatabaseReference> bitmapAvataDB;
- private Bitmap bitmapAvataUser;
- public ListMessageAdapter(Context context, Consersation consersation, HashMap<String, Bitmap> bitmapAvata, Bitmap bitmapAvataUser) {
- this.context = context;
- this.consersation = consersation;
- this.bitmapAvata = bitmapAvata;
- this.bitmapAvataUser = bitmapAvataUser;
- bitmapAvataDB = new HashMap<>();
- }
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- if (viewType == ChatActivity.VIEW_TYPE_FRIEND_MESSAGE) {
- View view = LayoutInflater.from(context).inflate(R.layout.rc_item_message_friend, parent, false);
- return new ItemMessageFriendHolder(view);
- } else if (viewType == ChatActivity.VIEW_TYPE_USER_MESSAGE) {
- View view = LayoutInflater.from(context).inflate(R.layout.rc_item_message_user, parent, false);
- return new ItemMessageUserHolder(view);
- }
- return null;
- }
- @Override
- public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
- if (holder instanceof ItemMessageFriendHolder) {
- if (consersation.getListMessageData().get(position).text.length() == 161) {
- ((ItemMessageFriendHolder) holder).ivContent.setVisibility(View.VISIBLE);
- ((ItemMessageFriendHolder) holder).txtContent.setVisibility(View.GONE);
- Glide.with(context)
- .load(consersation.getListMessageData()
- .get(position).text)
- .placeholder(R.drawable.bt_shape_2)
- .error(R.drawable.bt_shape_2)
- .into(((ItemMessageFriendHolder) holder)
- .ivContent);
- Log.d("TEST", "TEST PRE");
- ((ItemMessageFriendHolder) holder).ivContent.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Log.d("TEST", "TEST FRIEND");
- Intent toFullScreen = new Intent(context, FullScreenImageActivity.class);
- vigenerechiper vig = new vigenerechiper();
- String dekripnya = vig.Decrypt(consersation.getListMessageData().get(position).text);
- Log.d("dekripVigener", "ISINYA " + dekripnya);
- toFullScreen.putExtra("imgkey", dekripnya);
- context.startActivity(toFullScreen);
- }
- });
- } else {
- ((ItemMessageFriendHolder) holder).ivContent.setVisibility(View.GONE);
- ((ItemMessageFriendHolder) holder).txtContent.setVisibility(View.VISIBLE);
- try {
- String kunci = "kibo11" + consersation.getListMessageData().get(position).idReceiver;
- Log.d("kunci", "" + kunci);
- String pesandekrip = consersation.getListMessageData().get(position).text;
- String dekripAES = EncodeDecodeAES.decrypt(kunci, pesandekrip);
- Log.d("pesan", dekripAES);
- String dekripRC4 = new RC4().decryptMessage(converter.static_stringToByteArray(dekripAES), kunci);
- Log.d("pesan", dekripRC4);
- ((ItemMessageFriendHolder) holder).txtContent.setText(dekripRC4);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- Bitmap currentAvata = bitmapAvata.get(consersation.getListMessageData().get(position).idSender);
- if (currentAvata != null) {
- ((ItemMessageFriendHolder) holder).avata.setImageBitmap(currentAvata);
- } else {
- final String id = consersation.getListMessageData().get(position).idSender;
- if (bitmapAvataDB.get(id) == null) {
- bitmapAvataDB.put(id, FirebaseDatabase.getInstance().getReference().child("user/" + id + "/avata"));
- bitmapAvataDB.get(id).addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(DataSnapshot dataSnapshot) {
- if (dataSnapshot.getValue() != null) {
- String avataStr = (String) dataSnapshot.getValue();
- if (!avataStr.equals(StaticConfig.STR_DEFAULT_BASE64)) {
- byte[] decodedString = Base64.decode(avataStr, Base64.DEFAULT);
- ChatActivity.bitmapAvataFriend.put(id, BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length));
- } else {
- ChatActivity.bitmapAvataFriend.put(id, BitmapFactory.decodeResource(context.getResources(), R.drawable.default_avata));
- }
- notifyDataSetChanged();
- }
- }
- @Override
- public void onCancelled(DatabaseError databaseError) {
- }
- });
- }
- }
- } else if (holder instanceof ItemMessageUserHolder) {
- if (consersation.getListMessageData().get(position).text.length() == 161) {
- ((ItemMessageUserHolder) holder).ivContent.setVisibility(View.VISIBLE);
- ((ItemMessageUserHolder) holder).txtContent.setVisibility(View.GONE);
- Glide.with(context)
- .load(consersation.getListMessageData()
- .get(position).text)
- .placeholder(R.drawable.bt_shape_2)
- .error(R.drawable.bt_shape_2)
- .into(((ItemMessageUserHolder) holder).ivContent);
- Log.d("TEST", "TEST PRE USER");
- ((ItemMessageUserHolder) holder).ivContent.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Log.d("TEST2", "TEST USER");
- Intent toFullScreen = new Intent(context, FullScreenImageActivity.class);
- vigenerechiper vig = new vigenerechiper();
- String dekripnya = vig.Decrypt(consersation.getListMessageData().get(position).text);
- Log.d("dekripVigener", "ISINYA " + dekripnya);
- toFullScreen.putExtra("imgkey", dekripnya);
- context.startActivity(toFullScreen);
- }
- });
- } else {
- ((ItemMessageUserHolder) holder).ivContent.setVisibility(View.GONE);
- ((ItemMessageUserHolder) holder).txtContent.setVisibility(View.VISIBLE);
- try {
- String kunci = "kibo11" + consersation.getListMessageData().get(position).idReceiver;
- Log.d("kunci", "" + kunci);
- String pesandekrip = consersation.getListMessageData().get(position).text;
- String dekripAES = EncodeDecodeAES.decrypt(kunci, pesandekrip);
- Log.d("pesan", dekripAES);
- String dekripRC4 = new RC4().decryptMessage(converter.static_stringToByteArray(dekripAES), kunci);
- Log.d("pesan", dekripRC4);
- ((ItemMessageUserHolder) holder).txtContent.setText(dekripRC4);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- if (bitmapAvataUser != null) {
- ((ItemMessageUserHolder) holder).avata.setImageBitmap(bitmapAvataUser);
- }
- }
- }
- @Override
- public int getItemViewType(int position) {
- if (consersation.getListMessageData().get(position).idSender.equals(StaticConfig.UID)) {
- return ChatActivity.VIEW_TYPE_USER_MESSAGE;
- } else {
- return ChatActivity.VIEW_TYPE_FRIEND_MESSAGE;
- }
- }
- @Override
- public int getItemCount() {
- return consersation.getListMessageData().size();
- }
- }
- class ItemMessageUserHolder extends RecyclerView.ViewHolder {
- public TextView txtContent;
- public ImageView ivContent;
- public CircleImageView avata;
- public ItemMessageUserHolder(View itemView) {
- super(itemView);
- txtContent = (TextView) itemView.findViewById(R.id.textContentUser);
- avata = (CircleImageView) itemView.findViewById(R.id.imageView2);
- ivContent = (ImageView) itemView.findViewById(R.id.ivImage);
- }
- }
- class ItemMessageFriendHolder extends RecyclerView.ViewHolder {
- public TextView txtContent;
- public CircleImageView avata;
- public ImageView ivContent;
- public ItemMessageFriendHolder(View itemView) {
- super(itemView);
- txtContent = (TextView) itemView.findViewById(R.id.textContentFriend);
- avata = (CircleImageView) itemView.findViewById(R.id.imageView3);
- ivContent = (ImageView) itemView.findViewById(R.id.ivImage);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement