Skip to content

Commit dd19fc0

Browse files
committed
Merge branch 'master' of https://github.com/sowmen/ChatFull
2 parents fcd9eda + 3b921a2 commit dd19fc0

File tree

1 file changed

+109
-3
lines changed

1 file changed

+109
-3
lines changed

app/src/main/java/com/example/chatfull/ChatActivity.java

Lines changed: 109 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package com.example.chatfull;
22

3+
import android.Manifest;
34
import android.app.DownloadManager;
45
import android.content.Context;
56
import android.content.DialogInterface;
67
import android.content.Intent;
8+
import android.content.SharedPreferences;
9+
import android.content.pm.PackageManager;
710
import android.content.res.TypedArray;
811
import android.database.Cursor;
912
import android.graphics.Color;
1013
import android.net.Uri;
14+
import android.os.Build;
1115
import android.os.Bundle;
1216
import android.os.Environment;
17+
import android.os.Handler;
1318
import android.provider.OpenableColumns;
1419
import android.util.Base64;
1520
import android.util.Log;
@@ -27,12 +32,14 @@
2732
import androidx.annotation.Nullable;
2833
import androidx.appcompat.app.AppCompatActivity;
2934
import androidx.appcompat.widget.Toolbar;
35+
import androidx.core.app.ActivityCompat;
3036

3137
import com.bumptech.glide.Glide;
3238
import com.flask.colorpicker.ColorPickerView;
3339
import com.flask.colorpicker.OnColorSelectedListener;
3440
import com.flask.colorpicker.builder.ColorPickerClickListener;
3541
import com.flask.colorpicker.builder.ColorPickerDialogBuilder;
42+
import com.google.gson.Gson;
3643
import com.stfalcon.chatkit.commons.ImageLoader;
3744
import com.stfalcon.chatkit.messages.MessageHolders;
3845
import com.stfalcon.chatkit.messages.MessagesList;
@@ -45,24 +52,35 @@
4552
import java.io.InputStream;
4653
import java.util.ArrayList;
4754
import java.util.Calendar;
55+
import java.util.Date;
56+
import java.util.List;
4857

4958
public class ChatActivity extends AppCompatActivity
5059
implements MessageHolders.ContentChecker<Message>,
51-
MessagesListAdapter.OnMessageLongClickListener<Message> {
60+
MessagesListAdapter.OnMessageLongClickListener<Message>,
61+
MessagesListAdapter.OnLoadMoreListener{
5262

5363
private static final int PICK_FILE_REQUEST = 1;
5464
private static final int PICK_IMAGE_REQUEST = 2;
5565
private static final byte CONTENT_TYPE_FILE = 1;
66+
private static final int REQUEST_WRITE_EXTERNAL_STORAGE = 200;
67+
private static String PREFERENCE_FILE_KEY;
68+
private final static String SHARED_PREFERENCES_KEY_MESSAGE_LIST = "User_Info_List";
69+
SharedPreferences sharedPref;
70+
SharedPreferences.Editor editor;
71+
Gson gson;
5672

5773
private User user;
5874
private SendMessage sender;
5975
private MessageReceiveServer messageReceiveServer;
6076

6177
MessagesList messagesList;
6278
protected final String senderId = "1";
79+
private static final int TOTAL_MESSAGES_COUNT = 20;
80+
private Date lastLoadedDate;
6381

6482
MessagesListAdapter<Message> adapter;
65-
int cnt = 0;
83+
int cnt = 0; //Sets message counter id
6684

6785
Button btnSend;
6886
ImageButton btnAttachment, btnImage;
@@ -71,12 +89,13 @@ public class ChatActivity extends AppCompatActivity
7189
RelativeLayout back_view;
7290
int[] colors;
7391

74-
ArrayList<Message> messageArrayList;
92+
List<Message> messageArrayList;
7593

7694
@Override
7795
protected void onCreate(Bundle savedInstanceState) {
7896
super.onCreate(savedInstanceState);
7997
setContentView(R.layout.activity_chat_alternate);
98+
isStoragePermissionGranted();
8099

81100
user = (User) getIntent().getSerializableExtra("user");
82101

@@ -131,6 +150,47 @@ public void loadImage(ImageView imageView, @Nullable String url, @Nullable Objec
131150
ta.recycle();
132151

133152
adapter.setOnMessageLongClickListener(this);
153+
154+
messageArrayList = new ArrayList<Message>();
155+
gson = new Gson();
156+
157+
PREFERENCE_FILE_KEY = user.getId();
158+
sharedPref = this.getSharedPreferences(
159+
PREFERENCE_FILE_KEY, Context.MODE_PRIVATE);
160+
editor = sharedPref.edit();
161+
162+
String jsonDataString = sharedPref.getString(SHARED_PREFERENCES_KEY_MESSAGE_LIST,"");
163+
if(jsonDataString.length() > 0) {
164+
Message messageArray[] = gson.fromJson(jsonDataString, Message[].class);
165+
for (Message msg : messageArray) {
166+
messageArrayList.add(msg);
167+
}
168+
adapter.addToEnd(messageArrayList,false);
169+
Log.e("MESSAGE_SIZE", messageArrayList.size() + "");
170+
}
171+
}
172+
173+
public boolean isStoragePermissionGranted() {
174+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
175+
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
176+
== PackageManager.PERMISSION_GRANTED) {
177+
return true;
178+
} else {
179+
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_EXTERNAL_STORAGE );
180+
return false;
181+
}
182+
}
183+
else { //permission is automatically granted on sdk<23 upon installation
184+
return true;
185+
}
186+
}
187+
188+
@Override
189+
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
190+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
191+
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
192+
//resume tasks needing this permission
193+
}
134194
}
135195

136196
private void setClipboard(Context context, String text) {
@@ -202,6 +262,8 @@ public void onBtnSendClick(View view) {
202262
message.setFilename(null);
203263
adapter.addToStart(message, true);
204264

265+
messageArrayList.add(message);
266+
205267
sender = new SendMessage(user.getIpAddress(), user.getPort(), message, this);
206268
sender.execute();
207269
Log.e("SEND", input.getText().toString());
@@ -242,6 +304,9 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten
242304
message.setIsFile(true);
243305

244306
adapter.addToStart(message, true);
307+
308+
messageArrayList.add(message);
309+
245310
sender = new SendMessage(user.getIpAddress(), user.getPort(), message, this);
246311
sender.execute();
247312
}
@@ -260,6 +325,9 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten
260325
message.setIsFile(false);
261326

262327
adapter.addToStart(message, true);
328+
329+
messageArrayList.add(message);
330+
263331
sender = new SendMessage(user.getIpAddress(), user.getPort(), message, this);
264332
sender.execute();
265333
}
@@ -367,6 +435,9 @@ public void run() {
367435
} else if (msg.isColor()) {
368436
back_view.setBackgroundColor(msg.getColor());
369437
}
438+
439+
if(!msg.isColor())
440+
messageArrayList.add(msg);
370441
}
371442
});
372443
}
@@ -381,6 +452,15 @@ protected void onDestroy() {
381452
super.onDestroy();
382453
}
383454

455+
@Override
456+
protected void onPause() {
457+
super.onPause();
458+
459+
String jsonDataString = gson.toJson(messageArrayList);
460+
editor.putString(SHARED_PREFERENCES_KEY_MESSAGE_LIST, jsonDataString);
461+
editor.commit();
462+
}
463+
384464
@Override
385465
public void onBackPressed() {
386466
Log.e("CHAT_ACTIVITY", "PAUSE");
@@ -455,4 +535,30 @@ public void onMessageLongClick(Message message) {
455535
downloadManager.addCompletedDownload(message.getId() + message.getFilename(), message.getId() + message.getFilename(), true, "image/*", file.getAbsolutePath(), file.length(), true);
456536
}
457537
}
538+
539+
@Override
540+
public void onLoadMore(int page, int totalItemsCount) {
541+
Log.i("TAG", "onLoadMore: " + page + " " + totalItemsCount);
542+
if (totalItemsCount < TOTAL_MESSAGES_COUNT) {
543+
loadMessages();
544+
}
545+
}
546+
547+
protected void loadMessages() {
548+
new Handler().postDelayed(new Runnable() { //imitation of internet connection
549+
@Override
550+
public void run() {
551+
Log.e("load","Ashche");
552+
ArrayList<Message> more_messages = new ArrayList<>();
553+
for(int i=0, j=0; i<messageArrayList.size() && j<10; i++){
554+
if(messageArrayList.get(i).getCreatedAt().before(lastLoadedDate)){
555+
more_messages.add(messageArrayList.get(i));
556+
j++;
557+
}
558+
}
559+
lastLoadedDate = more_messages.get(more_messages.size() - 1).getCreatedAt();
560+
adapter.addToEnd(more_messages, false);
561+
}
562+
}, 500);
563+
}
458564
}

0 commit comments

Comments
 (0)