Skip to content

Commit b4feac1

Browse files
Additional ImageViewer added at Main Thread.
1 parent 93cdf98 commit b4feac1

5 files changed

Lines changed: 150 additions & 34 deletions

File tree

.idea/misc.xml

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/AndroidManifest.xml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,22 @@
99
android:roundIcon="@mipmap/ic_launcher_round"
1010
android:supportsRtl="true"
1111
android:theme="@style/Theme.BolChal">
12+
<activity
13+
android:name=".ImageViewer"
14+
android:exported="false"
15+
android:parentActivityName=".MainActivity">
16+
17+
</activity>
1218
<activity
1319
android:name=".details"
14-
android:exported="true" >
15-
<!-- <intent-filter>-->
16-
<!-- <action android:name="android.intent.action.MAIN" />-->
20+
android:exported="true">
21+
22+
<!-- <intent-filter> -->
23+
<!-- <action android:name="android.intent.action.MAIN" /> -->
1724

1825

19-
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
20-
<!-- </intent-filter>-->
26+
<!-- <category android:name="android.intent.category.LAUNCHER" /> -->
27+
<!-- </intent-filter> -->
2128
</activity>
2229
<activity
2330
android:name=".Otp_verification"

app/src/main/java/com/assistant/android/bolchal/MainActivity.java

Lines changed: 91 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,53 @@
11
package 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;
113
import android.content.Intent;
124
import android.net.Uri;
135
import android.os.Bundle;
6+
import android.os.Parcelable;
147
import android.text.Editable;
158
import android.text.InputFilter;
16-
import android.text.Spanned;
179
import android.text.TextWatcher;
1810
import android.util.Log;
19-
import android.view.Menu;
20-
import android.view.MenuInflater;
11+
import android.view.Gravity;
2112
import android.view.MenuItem;
2213
import android.view.View;
14+
import android.widget.AdapterView;
2315
import android.widget.EditText;
2416
import android.widget.ImageView;
2517
import android.widget.ListView;
2618
import android.widget.PopupMenu;
2719
import android.widget.TextView;
2820
import 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+
3028
import com.bumptech.glide.Glide;
31-
import com.firebase.ui.auth.AuthUI;
3229
import com.google.android.gms.tasks.OnFailureListener;
3330
import com.google.android.gms.tasks.OnSuccessListener;
3431
import com.google.android.gms.tasks.Task;
35-
import com.google.firebase.FirebaseException;
3632
import com.google.firebase.auth.FirebaseAuth;
37-
import com.google.firebase.auth.FirebaseAuth.AuthStateListener;
3833
import 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;
4234
import com.google.firebase.database.ChildEventListener;
4335
import com.google.firebase.database.DataSnapshot;
4436
import com.google.firebase.database.DatabaseError;
4537
import com.google.firebase.database.DatabaseReference;
4638
import com.google.firebase.database.FirebaseDatabase;
39+
import com.google.firebase.database.Query;
40+
import com.google.firebase.database.ValueEventListener;
4741
import com.google.firebase.storage.FirebaseStorage;
4842
import com.google.firebase.storage.StorageReference;
4943
import com.google.firebase.storage.UploadTask;
5044
import com.mikhaellopez.circularimageview.CircularImageView;
5145

52-
import java.net.URI;
53-
import java.net.URL;
5446
import java.text.SimpleDateFormat;
5547
import java.util.ArrayList;
5648
import java.util.Date;
57-
import java.util.HashMap;
5849
import java.util.List;
59-
import java.util.Map;
6050
import java.util.Objects;
61-
import java.util.concurrent.TimeUnit;
6251

6352
public 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

app/src/main/java/com/assistant/android/bolchal/Message.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.assistant.android.bolchal;
22

3-
public class Message {
3+
import android.os.Parcel;
4+
import android.os.Parcelable;
5+
6+
public class Message implements Parcelable {
47

58
private String text;
69
private String name;
@@ -24,6 +27,25 @@ public Message(String text,String name,String photoUrl,String time){
2427
this.time = time;
2528
}
2629

30+
protected Message(Parcel in) {
31+
text = in.readString();
32+
name = in.readString();
33+
photoUrl = in.readString();
34+
time = in.readString();
35+
}
36+
37+
public static final Creator<Message> CREATOR = new Creator<Message>() {
38+
@Override
39+
public Message createFromParcel(Parcel in) {
40+
return new Message(in);
41+
}
42+
43+
@Override
44+
public Message[] newArray(int size) {
45+
return new Message[size];
46+
}
47+
};
48+
2749
public String getText(){
2850
return text;
2951
}
@@ -55,4 +77,17 @@ public void setText(String text) {
5577
public void setTime(String time) {
5678
this.time = time;
5779
}
80+
81+
@Override
82+
public int describeContents() {
83+
return 0;
84+
}
85+
86+
@Override
87+
public void writeToParcel(Parcel parcel, int i) {
88+
parcel.writeString(text);
89+
parcel.writeString(name);
90+
parcel.writeString(photoUrl);
91+
parcel.writeString(time);
92+
}
5893
}

app/src/main/res/values/themes.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,12 @@
1919
</style>
2020

2121
<style name="Alb" parent="Theme.AppCompat.Light"/>
22+
<style name="Theme.BolChal.AppBarOverlay">
23+
24+
</style>
25+
26+
<style name="Theme.BolChal.PopupOverlay">
27+
28+
</style>
2229

2330
</resources>

0 commit comments

Comments
 (0)