11package com .assistant .android .bolchal ;
22
3- import androidx .annotation .NonNull ;
4- import androidx .annotation .Nullable ;
5- import androidx .appcompat .app .ActionBar ;
6- import androidx .appcompat .app .AppCompatActivity ;
7- import androidx .constraintlayout .widget .ConstraintLayout ;
8- import androidx .recyclerview .widget .RecyclerView ;
9-
10- import android .app .Activity ;
113import android .content .Intent ;
124import android .net .Uri ;
135import android .os .Bundle ;
6+ import android .os .Parcelable ;
147import android .text .Editable ;
158import android .text .InputFilter ;
16- import android .text .Spanned ;
179import android .text .TextWatcher ;
1810import android .util .Log ;
19- import android .view .Menu ;
20- import android .view .MenuInflater ;
11+ import android .view .Gravity ;
2112import android .view .MenuItem ;
2213import android .view .View ;
14+ import android .widget .AdapterView ;
2315import android .widget .EditText ;
2416import android .widget .ImageView ;
2517import android .widget .ListView ;
2618import android .widget .PopupMenu ;
2719import android .widget .TextView ;
2820import android .widget .Toast ;
2921
22+ import androidx .annotation .NonNull ;
23+ import androidx .annotation .Nullable ;
24+ import androidx .appcompat .app .ActionBar ;
25+ import androidx .appcompat .app .AppCompatActivity ;
26+ import androidx .constraintlayout .widget .ConstraintLayout ;
27+
3028import com .bumptech .glide .Glide ;
31- import com .firebase .ui .auth .AuthUI ;
3229import com .google .android .gms .tasks .OnFailureListener ;
3330import com .google .android .gms .tasks .OnSuccessListener ;
3431import com .google .android .gms .tasks .Task ;
35- import com .google .firebase .FirebaseException ;
3632import com .google .firebase .auth .FirebaseAuth ;
37- import com .google .firebase .auth .FirebaseAuth .AuthStateListener ;
3833import com .google .firebase .auth .FirebaseUser ;
39- import com .google .firebase .auth .PhoneAuthCredential ;
40- import com .google .firebase .auth .PhoneAuthOptions ;
41- import com .google .firebase .auth .PhoneAuthProvider ;
4234import com .google .firebase .database .ChildEventListener ;
4335import com .google .firebase .database .DataSnapshot ;
4436import com .google .firebase .database .DatabaseError ;
4537import com .google .firebase .database .DatabaseReference ;
4638import com .google .firebase .database .FirebaseDatabase ;
39+ import com .google .firebase .database .Query ;
40+ import com .google .firebase .database .ValueEventListener ;
4741import com .google .firebase .storage .FirebaseStorage ;
4842import com .google .firebase .storage .StorageReference ;
4943import com .google .firebase .storage .UploadTask ;
5044import com .mikhaellopez .circularimageview .CircularImageView ;
5145
52- import java .net .URI ;
53- import java .net .URL ;
5446import java .text .SimpleDateFormat ;
5547import java .util .ArrayList ;
5648import java .util .Date ;
57- import java .util .HashMap ;
5849import java .util .List ;
59- import java .util .Map ;
6050import java .util .Objects ;
61- import java .util .concurrent .TimeUnit ;
6251
6352public class MainActivity extends AppCompatActivity {
6453
@@ -76,6 +65,7 @@ public class MainActivity extends AppCompatActivity {
7665 private static final String TAG = "MainActivity" ;
7766 public static final String ANONYMOUS = "Unknown" ;
7867 public static final String FRIENDLY_MSG_LENGTH_KEY = "friendly_msg_length" ;
68+ private static List <Message > arrayList ;
7969
8070 private static final int RC_PHOTO_PICKER = 3 ;
8171 private static final int DEFAULT_MSG_LENGTH_LIMIT = 80 ;
@@ -96,7 +86,7 @@ protected void onCreate(Bundle savedInstanceState) {
9686 super .onCreate (savedInstanceState );
9787 setContentView (R .layout .activity_main );
9888
99- this .getSupportActionBar ().setDisplayOptions (ActionBar .DISPLAY_SHOW_CUSTOM );
89+ Objects . requireNonNull ( this .getSupportActionBar () ).setDisplayOptions (ActionBar .DISPLAY_SHOW_CUSTOM );
10090 getSupportActionBar ().setDisplayShowCustomEnabled (true );
10191 getSupportActionBar ().setCustomView (R .layout .main_action_bar );
10292 //getSupportActionBar().setElevation(0);
@@ -147,7 +137,7 @@ public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
147137 /**
148138 * Adapter of List Setup
149139 */
150- final List < Message > arrayList = new ArrayList <>();
140+ arrayList = new ArrayList <>();
151141 mChatAdapter = new ChatAdapter (this ,R .layout .chat_layout_page ,arrayList );
152142 mListView .setAdapter (mChatAdapter );
153143
@@ -235,8 +225,8 @@ public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String prev
235225
236226 @ Override
237227 public void onChildRemoved (@ NonNull DataSnapshot snapshot ) {
238- Message messageServer = snapshot .getValue (Message .class );
239- mChatAdapter .add ( messageServer );
228+ Message friendlyMessage = snapshot .getValue (Message .class );
229+ mChatAdapter .remove ( friendlyMessage );
240230 }
241231
242232 @ Override
@@ -276,9 +266,81 @@ public boolean onMenuItemClick(MenuItem menuItem) {
276266 popupMenu .show ();
277267 }
278268 });
279-
269+
270+ /**
271+ * Long-press List item deletes that message
272+ */
273+ mListView .setOnItemLongClickListener (new AdapterView .OnItemLongClickListener () {
274+ @ Override
275+ public boolean onItemLongClick (AdapterView <?> adapterView , View view , int i , long l ) {
276+ Message message = (Message ) adapterView .getAdapter ().getItem (i );
277+
278+ if (message .getPhotoUrl ()==null ) {
279+ // Toast.makeText(MainActivity.this, message.getText(), Toast.LENGTH_LONG).show();
280+
281+ PopupMenu popupMenu = new PopupMenu (MainActivity .this , mListView , Gravity .AXIS_PULL_AFTER );
282+ MainActivity .this .getMenuInflater ().inflate (R .menu .delete_menu , popupMenu .getMenu ());
283+
284+ popupMenu .setOnMenuItemClickListener (new PopupMenu .OnMenuItemClickListener () {
285+ @ Override
286+ public boolean onMenuItemClick (MenuItem menuItem ) {
287+ if (menuItem .getItemId () == R .id .delete ) {
288+ deleteMessage (message , i );
289+ return true ;
290+ }
291+ return true ;
292+ }
293+ });
294+ popupMenu .show ();
295+ }
296+ return false ;
297+ }
298+ });
299+
300+ /**
301+ * opens image when clicked upon it
302+ */
303+ mListView .setOnItemClickListener (new AdapterView .OnItemClickListener () {
304+ @ Override
305+ public void onItemClick (AdapterView <?> adapterView , View view , int i , long l ) {
306+ Message message = (Message ) adapterView .getAdapter ().getItem (i );
307+
308+ boolean hasImg = message .getPhotoUrl ()!=null ;
309+
310+ if (hasImg ){
311+ Intent intent = new Intent (MainActivity .this ,ImageViewer .class );
312+ intent .putExtra ("ImageRes" ,message );
313+ startActivity (intent );
314+ }
315+
316+ }
317+ });
318+
319+
280320 }
281321
322+ private void deleteMessage (Message message ,int pos ){
323+
324+ String msgTxt = message .getText ();
325+ DatabaseReference ref = FirebaseDatabase .getInstance ().getReference ();
326+ Query taskQuery = ref .child ("messages" ).orderByChild ("text" ).equalTo (msgTxt );
327+
328+ taskQuery .addListenerForSingleValueEvent (new ValueEventListener () {
329+ @ Override
330+ public void onDataChange (DataSnapshot dataSnapshot ) {
331+ for (DataSnapshot appleSnapshot : dataSnapshot .getChildren ()) {
332+ appleSnapshot .getRef ().removeValue ();
333+ }
334+ arrayList .remove (pos );
335+ mChatAdapter .notifyDataSetChanged ();
336+ }
337+
338+ @ Override
339+ public void onCancelled (DatabaseError databaseError ) {
340+ Log .v (TAG , "onCancelled" , databaseError .toException ());
341+ }
342+ });
343+ }
282344
283345 private void onSignedInIntialize (String displayName ) {
284346 mUserName = displayName ;
@@ -307,7 +369,8 @@ public void onChildChanged(DataSnapshot dataSnapshot, String s) {
307369
308370 @ Override
309371 public void onChildRemoved (DataSnapshot dataSnapshot ) {
310-
372+ Message friendlyMessage1 = dataSnapshot .getValue (Message .class );
373+ mChatAdapter .remove (friendlyMessage1 );
311374 }
312375
313376 @ Override
0 commit comments