11package com .example .chatfull ;
22
3+ import android .Manifest ;
34import android .app .DownloadManager ;
45import android .content .Context ;
56import android .content .DialogInterface ;
67import android .content .Intent ;
8+ import android .content .SharedPreferences ;
9+ import android .content .pm .PackageManager ;
710import android .content .res .TypedArray ;
811import android .database .Cursor ;
912import android .graphics .Color ;
1013import android .net .Uri ;
14+ import android .os .Build ;
1115import android .os .Bundle ;
1216import android .os .Environment ;
17+ import android .os .Handler ;
1318import android .provider .OpenableColumns ;
1419import android .util .Base64 ;
1520import android .util .Log ;
2732import androidx .annotation .Nullable ;
2833import androidx .appcompat .app .AppCompatActivity ;
2934import androidx .appcompat .widget .Toolbar ;
35+ import androidx .core .app .ActivityCompat ;
3036
3137import com .bumptech .glide .Glide ;
3238import com .flask .colorpicker .ColorPickerView ;
3339import com .flask .colorpicker .OnColorSelectedListener ;
3440import com .flask .colorpicker .builder .ColorPickerClickListener ;
3541import com .flask .colorpicker .builder .ColorPickerDialogBuilder ;
42+ import com .google .gson .Gson ;
3643import com .stfalcon .chatkit .commons .ImageLoader ;
3744import com .stfalcon .chatkit .messages .MessageHolders ;
3845import com .stfalcon .chatkit .messages .MessagesList ;
4552import java .io .InputStream ;
4653import java .util .ArrayList ;
4754import java .util .Calendar ;
55+ import java .util .Date ;
56+ import java .util .List ;
4857
4958public 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