Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit dd19fc0

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /