2020-08-17 13:49:51 +00:00
package awais.instagrabber.fragments.directmessages ;
2020-07-01 17:08:28 +00:00
2020-08-15 21:25:57 +00:00
import android.app.Activity ;
2020-08-18 20:47:43 +00:00
import android.content.DialogInterface ;
2020-07-01 17:08:28 +00:00
import android.content.Intent ;
2020-08-18 15:15:13 +00:00
import android.graphics.Bitmap ;
import android.graphics.BitmapFactory ;
2020-07-03 00:27:54 +00:00
import android.net.Uri ;
2020-07-01 17:08:28 +00:00
import android.os.AsyncTask ;
import android.os.Bundle ;
2020-08-17 13:49:51 +00:00
import android.os.Handler ;
2020-07-01 17:08:28 +00:00
import android.util.Log ;
2020-08-17 13:49:51 +00:00
import android.view.LayoutInflater ;
2020-07-02 03:20:54 +00:00
import android.view.View ;
2020-08-17 13:49:51 +00:00
import android.view.ViewGroup ;
2020-08-18 20:47:43 +00:00
import android.widget.ArrayAdapter ;
2020-08-17 13:49:51 +00:00
import android.widget.LinearLayout ;
2020-07-01 17:08:28 +00:00
import android.widget.Toast ;
2020-08-17 13:49:51 +00:00
import androidx.annotation.NonNull ;
2020-07-01 17:08:28 +00:00
import androidx.annotation.Nullable ;
2020-08-18 20:47:43 +00:00
import androidx.appcompat.app.AlertDialog ;
2020-08-17 13:49:51 +00:00
import androidx.fragment.app.Fragment ;
import androidx.fragment.app.FragmentActivity ;
import androidx.lifecycle.MutableLiveData ;
import androidx.lifecycle.ViewModel ;
import androidx.lifecycle.ViewModelProvider ;
2020-07-01 17:08:28 +00:00
import androidx.recyclerview.widget.LinearLayoutManager ;
import androidx.recyclerview.widget.RecyclerView ;
2020-08-16 09:21:09 +00:00
import org.json.JSONException ;
import org.json.JSONObject ;
2020-08-18 13:22:16 +00:00
import java.io.File ;
2020-08-18 15:15:13 +00:00
import java.io.FileNotFoundException ;
import java.io.IOException ;
import java.io.InputStream ;
2020-08-16 09:21:09 +00:00
import java.io.UnsupportedEncodingException ;
import java.net.HttpURLConnection ;
2020-07-01 17:08:28 +00:00
import java.util.ArrayList ;
import java.util.Arrays ;
2020-07-03 00:27:54 +00:00
import java.util.Collections ;
2020-08-17 13:49:51 +00:00
import java.util.LinkedList ;
2020-07-01 17:08:28 +00:00
import java.util.List ;
import awais.instagrabber.R ;
2020-08-15 21:31:55 +00:00
import awais.instagrabber.activities.PostViewer ;
import awais.instagrabber.activities.ProfileViewer ;
import awais.instagrabber.activities.StoryViewer ;
2020-07-01 17:08:28 +00:00
import awais.instagrabber.adapters.MessageItemsAdapter ;
2020-08-16 09:21:09 +00:00
import awais.instagrabber.asyncs.ImageUploader ;
2020-08-17 13:49:51 +00:00
import awais.instagrabber.asyncs.direct_messages.DirectMessageInboxThreadFetcher ;
2020-08-16 09:21:09 +00:00
import awais.instagrabber.asyncs.direct_messages.DirectThreadBroadcaster ;
2020-07-01 17:08:28 +00:00
import awais.instagrabber.customviews.helpers.RecyclerLazyLoader ;
2020-08-17 13:49:51 +00:00
import awais.instagrabber.databinding.FragmentDirectMessagesThreadBinding ;
2020-07-01 17:08:28 +00:00
import awais.instagrabber.interfaces.FetchListener ;
2020-08-17 13:49:51 +00:00
import awais.instagrabber.interfaces.MentionClickListener ;
2020-08-16 09:21:09 +00:00
import awais.instagrabber.models.ImageUploadOptions ;
2020-07-02 03:20:54 +00:00
import awais.instagrabber.models.PostModel ;
2020-07-01 17:08:28 +00:00
import awais.instagrabber.models.ProfileModel ;
2020-07-02 03:20:54 +00:00
import awais.instagrabber.models.StoryModel ;
2020-07-01 17:08:28 +00:00
import awais.instagrabber.models.direct_messages.DirectItemModel ;
import awais.instagrabber.models.direct_messages.InboxThreadModel ;
2020-07-02 03:20:54 +00:00
import awais.instagrabber.models.enums.DirectItemType ;
2020-07-03 00:27:54 +00:00
import awais.instagrabber.models.enums.DownloadMethod ;
2020-07-01 17:08:28 +00:00
import awais.instagrabber.models.enums.UserInboxDirection ;
import awais.instagrabber.utils.Constants ;
import awais.instagrabber.utils.Utils ;
2020-08-17 13:49:51 +00:00
public class DirectMessageThreadFragment extends Fragment {
private static final String TAG = " DirectMessagesThreadFmt " ;
2020-08-15 21:25:57 +00:00
private static final int PICK_IMAGE = 100 ;
2020-08-17 13:49:51 +00:00
private FragmentActivity fragmentActivity ;
2020-08-15 21:08:25 +00:00
private String threadId ;
2020-08-17 13:49:51 +00:00
private String cursor ;
2020-08-18 20:47:43 +00:00
private final String cookie = Utils . settingsHelper . getString ( Constants . COOKIE ) ;
private final String myId = Utils . getUserIdFromCookie ( cookie ) ;
2020-08-17 13:49:51 +00:00
private FragmentDirectMessagesThreadBinding binding ;
private DirectItemModelListViewModel listViewModel ;
2020-08-18 20:47:43 +00:00
private DirectItemModel directItemModel ;
2020-08-17 13:49:51 +00:00
private RecyclerView messageList ;
private boolean hasSentSomething ;
private boolean hasOlder = true ;
2020-08-15 21:02:46 +00:00
2020-08-15 20:38:46 +00:00
private final ProfileModel myProfileHolder = ProfileModel . getDefaultProfileModel ( ) ;
2020-08-17 13:49:51 +00:00
private final List < ProfileModel > users = new ArrayList < > ( ) ;
private final List < ProfileModel > leftUsers = new ArrayList < > ( ) ;
2020-08-18 20:47:43 +00:00
private ArrayAdapter < String > dialogAdapter ;
2020-08-17 13:49:51 +00:00
private final View . OnClickListener clickListener = v - > {
if ( v = = binding . commentSend ) {
final String text = binding . commentText . getText ( ) . toString ( ) ;
if ( Utils . isEmpty ( text ) ) {
Toast . makeText ( requireContext ( ) , R . string . comment_send_empty_comment , Toast . LENGTH_SHORT ) . show ( ) ;
return ;
}
2020-08-18 20:47:43 +00:00
sendText ( text , null , false ) ;
2020-08-17 13:49:51 +00:00
return ;
}
if ( v = = binding . image ) {
final Intent intent = new Intent ( ) ;
intent . setType ( " image/* " ) ;
intent . setAction ( Intent . ACTION_GET_CONTENT ) ;
startActivityForResult ( Intent . createChooser ( intent , getString ( R . string . select_picture ) ) , PICK_IMAGE ) ;
}
} ;
2020-07-01 17:08:28 +00:00
private final FetchListener < InboxThreadModel > fetchListener = new FetchListener < InboxThreadModel > ( ) {
@Override
public void doBefore ( ) {
2020-08-17 13:49:51 +00:00
binding . swipeRefreshLayout . setRefreshing ( true ) ;
2020-07-01 17:08:28 +00:00
}
@Override
public void onResult ( final InboxThreadModel result ) {
2020-08-17 13:49:51 +00:00
if ( result = = null & & ( " MINCURSOR " . equals ( cursor ) | | " MAXCURSOR " . equals ( cursor ) | | Utils . isEmpty ( cursor ) ) )
Toast . makeText ( requireContext ( ) , R . string . downloader_unknown_error , Toast . LENGTH_SHORT ) . show ( ) ;
2020-07-01 17:08:28 +00:00
if ( result ! = null ) {
2020-08-17 13:49:51 +00:00
cursor = result . getOldestCursor ( ) ;
hasOlder = result . hasOlder ( ) ;
if ( " MINCURSOR " . equals ( cursor ) | | " MAXCURSOR " . equals ( cursor ) ) {
cursor = null ;
}
2020-07-01 17:08:28 +00:00
users . clear ( ) ;
users . addAll ( Arrays . asList ( result . getUsers ( ) ) ) ;
2020-08-15 21:08:25 +00:00
leftUsers . clear ( ) ;
leftUsers . addAll ( Arrays . asList ( result . getLeftUsers ( ) ) ) ;
2020-08-05 18:54:49 +00:00
2020-08-17 13:49:51 +00:00
// thread title is already comma separated username, so no need to set by ourselves
// String[] users = new String[result.getUsers().length];
// for (int i = 0; i < users.length; ++i) {
// users[i] = result.getUsers()[i].getUsername();
// }
2020-08-06 16:48:52 +00:00
2020-08-17 13:49:51 +00:00
List < DirectItemModel > list = listViewModel . getList ( ) . getValue ( ) ;
final List < DirectItemModel > newList = Arrays . asList ( result . getItems ( ) ) ;
list = list ! = null ? new LinkedList < > ( list ) : new LinkedList < > ( ) ;
if ( hasSentSomething ) {
list = newList ;
hasSentSomething = false ;
final Handler handler = new Handler ( ) ;
handler . postDelayed ( ( ) - > {
if ( messageList ! = null ) {
messageList . smoothScrollToPosition ( 0 ) ;
}
} , 200 ) ;
} else {
list . addAll ( newList ) ;
}
listViewModel . getList ( ) . postValue ( list ) ;
2020-07-01 17:08:28 +00:00
}
2020-08-17 13:49:51 +00:00
binding . swipeRefreshLayout . setRefreshing ( false ) ;
2020-08-15 21:25:57 +00:00
}
2020-08-15 21:02:46 +00:00
} ;
2020-07-01 17:08:28 +00:00
@Override
2020-08-17 13:49:51 +00:00
public void onCreate ( @Nullable final Bundle savedInstanceState ) {
2020-07-01 17:08:28 +00:00
super . onCreate ( savedInstanceState ) ;
2020-08-17 13:49:51 +00:00
fragmentActivity = requireActivity ( ) ;
}
2020-07-01 17:08:28 +00:00
2020-08-17 13:49:51 +00:00
@Override
public View onCreateView ( @NonNull final LayoutInflater inflater ,
final ViewGroup container ,
final Bundle savedInstanceState ) {
binding = FragmentDirectMessagesThreadBinding . inflate ( inflater , container , false ) ;
final LinearLayout root = binding . getRoot ( ) ;
if ( getArguments ( ) = = null ) {
return root ;
2020-07-01 17:08:28 +00:00
}
2020-08-17 14:06:51 +00:00
threadId = DirectMessageThreadFragmentArgs . fromBundle ( getArguments ( ) ) . getThreadId ( ) ;
2020-08-17 13:49:51 +00:00
binding . swipeRefreshLayout . setEnabled ( false ) ;
messageList = binding . messageList ;
messageList . setHasFixedSize ( true ) ;
binding . commentSend . setOnClickListener ( clickListener ) ;
binding . image . setOnClickListener ( clickListener ) ;
final LinearLayoutManager layoutManager = new LinearLayoutManager ( requireContext ( ) ) ;
layoutManager . setReverseLayout ( true ) ;
// layoutManager.setStackFromEnd(true);
messageList . setLayoutManager ( layoutManager ) ;
messageList . addOnScrollListener ( new RecyclerLazyLoader ( layoutManager , ( page , totalItemsCount ) - > {
if ( Utils . isEmpty ( cursor ) | | ! hasOlder ) {
return ;
2020-07-01 17:08:28 +00:00
}
2020-08-17 13:49:51 +00:00
new DirectMessageInboxThreadFetcher ( threadId , UserInboxDirection . OLDER , cursor , fetchListener ) . execute ( ) ; // serial because we don't want messages to be randomly ordered
2020-07-01 17:08:28 +00:00
} ) ) ;
2020-08-18 20:47:43 +00:00
final DialogInterface . OnClickListener onDialogListener = ( d , w ) - > {
if ( w = = 0 ) {
2020-07-02 03:20:54 +00:00
final DirectItemType itemType = directItemModel . getItemType ( ) ;
2020-07-03 00:27:54 +00:00
switch ( itemType ) {
2020-07-15 00:35:41 +00:00
case MEDIA_SHARE :
2020-08-17 13:49:51 +00:00
startActivity ( new Intent ( requireContext ( ) , PostViewer . class )
2020-08-04 02:28:42 +00:00
. putExtra ( Constants . EXTRAS_POST , new PostModel ( directItemModel . getMediaModel ( ) . getCode ( ) , false ) ) ) ;
2020-07-15 00:35:41 +00:00
break ;
2020-07-03 00:27:54 +00:00
case LINK :
Intent linkIntent = new Intent ( Intent . ACTION_VIEW ) ;
linkIntent . setData ( Uri . parse ( directItemModel . getLinkModel ( ) . getLinkContext ( ) . getLinkUrl ( ) ) ) ;
startActivity ( linkIntent ) ;
break ;
2020-07-15 00:35:41 +00:00
case TEXT :
case REEL_SHARE :
2020-08-18 20:47:43 +00:00
Utils . copyText ( requireContext ( ) , directItemModel . getText ( ) ) ;
Toast . makeText ( requireContext ( ) , R . string . clipboard_copied , Toast . LENGTH_SHORT ) . show ( ) ;
2020-07-02 03:20:54 +00:00
break ;
2020-07-15 00:35:41 +00:00
case RAVEN_MEDIA :
2020-07-03 00:27:54 +00:00
case MEDIA :
2020-08-15 21:14:57 +00:00
final ProfileModel user = getUser ( directItemModel . getUserId ( ) ) ;
2020-08-17 13:49:51 +00:00
Utils . dmDownload ( requireContext ( ) , user . getUsername ( ) , DownloadMethod . DOWNLOAD_DIRECT , Collections . singletonList ( itemType = = DirectItemType . MEDIA ? directItemModel . getMediaModel ( ) : directItemModel . getRavenMediaModel ( ) . getMedia ( ) ) ) ;
2020-08-18 20:47:43 +00:00
Toast . makeText ( requireContext ( ) , R . string . downloader_downloading_media , Toast . LENGTH_SHORT ) . show ( ) ;
2020-07-03 00:27:54 +00:00
break ;
case STORY_SHARE :
2020-08-05 18:54:49 +00:00
if ( directItemModel . getReelShare ( ) ! = null ) {
StoryModel sm = new StoryModel (
directItemModel . getReelShare ( ) . getReelId ( ) ,
directItemModel . getReelShare ( ) . getMedia ( ) . getVideoUrl ( ) ,
directItemModel . getReelShare ( ) . getMedia ( ) . getMediaType ( ) ,
directItemModel . getTimestamp ( ) ,
2020-08-06 16:48:52 +00:00
directItemModel . getReelShare ( ) . getReelOwnerName ( ) ,
String . valueOf ( directItemModel . getReelShare ( ) . getReelOwnerId ( ) ) ,
false
2020-08-05 18:54:49 +00:00
) ;
sm . setVideoUrl ( directItemModel . getReelShare ( ) . getMedia ( ) . getVideoUrl ( ) ) ;
StoryModel [ ] sms = { sm } ;
2020-08-17 13:49:51 +00:00
startActivity ( new Intent ( requireContext ( ) , StoryViewer . class )
2020-07-15 00:35:41 +00:00
. putExtra ( Constants . EXTRAS_USERNAME , directItemModel . getReelShare ( ) . getReelOwnerName ( ) )
. putExtra ( Constants . EXTRAS_STORIES , sms )
2020-07-03 00:27:54 +00:00
) ;
2020-08-15 21:00:30 +00:00
} else if ( directItemModel . getText ( ) ! = null & & directItemModel . getText ( ) . toString ( ) . contains ( " @ " ) ) {
2020-08-05 18:54:49 +00:00
searchUsername ( directItemModel . getText ( ) . toString ( ) . split ( " @ " ) [ 1 ] . split ( " " ) [ 0 ] ) ;
}
break ;
case PLACEHOLDER :
if ( directItemModel . getText ( ) . toString ( ) . contains ( " @ " ) )
searchUsername ( directItemModel . getText ( ) . toString ( ) . split ( " @ " ) [ 1 ] . split ( " " ) [ 0 ] ) ;
2020-07-03 00:27:54 +00:00
break ;
2020-07-15 00:35:41 +00:00
default :
2020-08-15 21:00:30 +00:00
Log . d ( " austin_debug " , " unsupported type " + itemType ) ;
2020-07-02 03:20:54 +00:00
}
}
2020-08-18 20:47:43 +00:00
else if ( w = = 1 ) {
sendText ( null , directItemModel . getItemId ( ) , directItemModel . isLiked ( ) ) ;
}
else if ( w = = 2 ) {
if ( String . valueOf ( directItemModel . getUserId ( ) ) . equals ( myId ) ) {
// unsend: https://www.instagram.com/direct_v2/web/threads/340282366841710300949128288687654467119/items/29473546990090204551245070881259520/delete/
}
else searchUsername ( getUser ( directItemModel . getUserId ( ) ) . getUsername ( ) ) ;
}
} ;
final View . OnClickListener onClickListener = v - > {
Object tag = v . getTag ( ) ;
if ( tag instanceof ProfileModel ) {
searchUsername ( ( ( ProfileModel ) tag ) . getUsername ( ) ) ;
}
else if ( tag instanceof DirectItemModel ) {
directItemModel = ( DirectItemModel ) tag ;
final DirectItemType itemType = directItemModel . getItemType ( ) ;
int firstOption = R . string . dms_inbox_raven_message_unknown ;
String [ ] dialogList ;
switch ( itemType ) {
case MEDIA_SHARE :
firstOption = R . string . view_post ;
break ;
case LINK :
firstOption = R . string . dms_inbox_open_link ;
break ;
case TEXT :
case REEL_SHARE :
firstOption = R . string . dms_inbox_copy_text ;
break ;
case RAVEN_MEDIA :
case MEDIA :
firstOption = R . string . dms_inbox_download ;
break ;
case STORY_SHARE :
if ( directItemModel . getReelShare ( ) ! = null ) {
firstOption = R . string . show_stories ;
} else if ( directItemModel . getText ( ) ! = null & & directItemModel . getText ( ) . toString ( ) . contains ( " @ " ) ) {
firstOption = R . string . open_profile ;
}
break ;
case PLACEHOLDER :
if ( directItemModel . getText ( ) . toString ( ) . contains ( " @ " ) )
firstOption = R . string . open_profile ;
break ;
}
dialogList = new String [ ] {
getString ( firstOption ) ,
getString ( directItemModel . isLiked ( ) ? R . string . dms_inbox_unlike : R . string . dms_inbox_like ) ,
getString ( String . valueOf ( directItemModel . getUserId ( ) ) . equals ( myId ) ? R . string . dms_inbox_unsend : R . string . dms_inbox_author )
} ;
dialogAdapter = new ArrayAdapter < > ( requireContext ( ) , android . R . layout . simple_list_item_1 , dialogList ) ;
new AlertDialog . Builder ( requireContext ( ) )
//.setTitle(title)
. setAdapter ( dialogAdapter , onDialogListener )
. setNeutralButton ( R . string . cancel , null )
. show ( ) ;
}
2020-08-17 13:49:51 +00:00
} ;
final MentionClickListener mentionClickListener = ( view , text , isHashtag ) - > searchUsername ( text ) ;
final MessageItemsAdapter adapter = new MessageItemsAdapter ( users , leftUsers , onClickListener , mentionClickListener ) ;
messageList . setAdapter ( adapter ) ;
listViewModel = new ViewModelProvider ( fragmentActivity ) . get ( DirectItemModelListViewModel . class ) ;
listViewModel . getList ( ) . observe ( fragmentActivity , adapter : : submitList ) ;
new DirectMessageInboxThreadFetcher ( threadId , UserInboxDirection . OLDER , null , fetchListener ) . executeOnExecutor ( AsyncTask . THREAD_POOL_EXECUTOR ) ;
return root ;
2020-07-01 17:08:28 +00:00
}
2020-07-02 03:20:54 +00:00
2020-08-15 21:25:57 +00:00
@Override
2020-08-17 13:49:51 +00:00
public void onActivityResult ( int requestCode , int resultCode , @Nullable Intent data ) {
2020-08-15 21:25:57 +00:00
super . onActivityResult ( requestCode , resultCode , data ) ;
2020-08-16 09:21:09 +00:00
if ( requestCode = = PICK_IMAGE & & resultCode = = Activity . RESULT_OK ) {
2020-08-15 21:25:57 +00:00
if ( data = = null | | data . getData ( ) = = null ) {
Log . w ( TAG , " data is null! " ) ;
return ;
}
2020-08-16 09:21:09 +00:00
final Uri uri = data . getData ( ) ;
sendImage ( uri ) ;
2020-08-15 21:25:57 +00:00
}
}
2020-08-17 13:49:51 +00:00
@Override
public void onDestroy ( ) {
super . onDestroy ( ) ;
listViewModel . getList ( ) . postValue ( Collections . emptyList ( ) ) ;
2020-07-02 03:20:54 +00:00
}
2020-08-16 09:21:09 +00:00
2020-08-18 20:47:43 +00:00
private void sendText ( final String text , final String itemId , final boolean delete ) {
DirectThreadBroadcaster . TextBroadcastOptions textOptions = null ;
DirectThreadBroadcaster . ReactionBroadcastOptions reactionOptions = null ;
if ( text ! = null ) {
try {
textOptions = new DirectThreadBroadcaster . TextBroadcastOptions ( text ) ;
} catch ( UnsupportedEncodingException e ) {
Log . e ( TAG , " Error " , e ) ;
return ;
}
}
else {
reactionOptions = new DirectThreadBroadcaster . ReactionBroadcastOptions ( itemId , delete ) ;
2020-08-16 09:21:09 +00:00
}
2020-08-18 20:47:43 +00:00
broadcast ( text ! = null ? textOptions : reactionOptions , result - > {
2020-08-16 09:21:09 +00:00
if ( result = = null | | result . getResponseCode ( ) ! = HttpURLConnection . HTTP_OK ) {
2020-08-17 13:49:51 +00:00
Toast . makeText ( requireContext ( ) , R . string . downloader_unknown_error , Toast . LENGTH_SHORT ) . show ( ) ;
2020-08-16 09:21:09 +00:00
return ;
}
2020-08-18 20:47:43 +00:00
if ( text ! = null ) {
binding . commentText . setText ( " " ) ;
}
else {
LinearLayout dim = ( LinearLayout ) binding . messageList . findViewWithTag ( directItemModel ) ;
2020-08-18 20:55:42 +00:00
if ( dim . findViewById ( R . id . liked ) ! = null ) dim . findViewById ( R . id . liked ) . setVisibility ( delete ? View . GONE : View . VISIBLE ) ;
2020-08-18 20:47:43 +00:00
directItemModel . setLiked ( ) ;
}
2020-08-17 13:49:51 +00:00
hasSentSomething = true ;
new DirectMessageInboxThreadFetcher ( threadId , UserInboxDirection . OLDER , null , fetchListener ) . executeOnExecutor ( AsyncTask . THREAD_POOL_EXECUTOR ) ;
2020-08-16 09:21:09 +00:00
} ) ;
}
private void sendImage ( final Uri imageUri ) {
2020-08-18 20:47:43 +00:00
try ( InputStream inputStream = requireContext ( ) . getContentResolver ( ) . openInputStream ( imageUri ) ) {
2020-08-18 15:15:13 +00:00
final Bitmap bitmap = BitmapFactory . decodeStream ( inputStream ) ;
2020-08-18 20:47:43 +00:00
Toast . makeText ( requireContext ( ) , R . string . uploading , Toast . LENGTH_SHORT ) . show ( ) ;
2020-08-18 15:15:13 +00:00
// Upload Image
final ImageUploader imageUploader = new ImageUploader ( ) ;
imageUploader . setOnTaskCompleteListener ( response - > {
if ( response = = null | | response . getResponseCode ( ) ! = HttpURLConnection . HTTP_OK ) {
Toast . makeText ( requireContext ( ) , R . string . downloader_unknown_error , Toast . LENGTH_SHORT ) . show ( ) ;
if ( response ! = null & & response . getResponse ( ) ! = null ) {
Log . e ( TAG , response . getResponse ( ) . toString ( ) ) ;
}
return ;
2020-08-18 13:22:16 +00:00
}
2020-08-18 15:15:13 +00:00
final JSONObject responseJson = response . getResponse ( ) ;
try {
final String uploadId = responseJson . getString ( " upload_id " ) ;
// Broadcast
final DirectThreadBroadcaster . ImageBroadcastOptions options = new DirectThreadBroadcaster . ImageBroadcastOptions ( true , uploadId ) ;
hasSentSomething = true ;
broadcast ( options , onBroadcastCompleteListener - > new DirectMessageInboxThreadFetcher ( threadId , UserInboxDirection . OLDER , null , fetchListener ) . executeOnExecutor ( AsyncTask . THREAD_POOL_EXECUTOR ) ) ;
} catch ( JSONException e ) {
Log . e ( TAG , " Error parsing json response " , e ) ;
}
} ) ;
final ImageUploadOptions options = ImageUploadOptions . builder ( bitmap ) . build ( ) ;
imageUploader . execute ( options ) ;
}
catch ( IOException e ) {
2020-08-18 20:47:43 +00:00
Toast . makeText ( requireContext ( ) , R . string . downloader_unknown_error , Toast . LENGTH_SHORT ) . show ( ) ;
2020-08-18 15:15:13 +00:00
Log . e ( TAG , " Error opening file " , e ) ;
}
2020-08-16 09:21:09 +00:00
}
2020-08-17 13:49:51 +00:00
private void broadcast ( final DirectThreadBroadcaster . BroadcastOptions broadcastOptions , final DirectThreadBroadcaster . OnBroadcastCompleteListener listener ) {
2020-08-16 09:21:09 +00:00
final DirectThreadBroadcaster broadcaster = new DirectThreadBroadcaster ( threadId ) ;
broadcaster . setOnTaskCompleteListener ( listener ) ;
broadcaster . execute ( broadcastOptions ) ;
}
2020-08-17 13:49:51 +00:00
@NonNull
private ProfileModel getUser ( final long userId ) {
ProfileModel result = myProfileHolder ;
for ( final ProfileModel user : users ) {
if ( Long . toString ( userId ) . equals ( user . getId ( ) ) ) result = user ;
}
for ( final ProfileModel leftUser : leftUsers ) {
if ( Long . toString ( userId ) . equals ( leftUser . getId ( ) ) ) result = leftUser ;
}
return result ;
}
private void searchUsername ( final String text ) {
startActivity ( new Intent ( requireContext ( ) , ProfileViewer . class ) . putExtra ( Constants . EXTRAS_USERNAME , text ) ) ;
}
public static class DirectItemModelListViewModel extends ViewModel {
private MutableLiveData < List < DirectItemModel > > list ;
public MutableLiveData < List < DirectItemModel > > getList ( ) {
if ( list = = null ) {
list = new MutableLiveData < > ( ) ;
}
return list ;
}
}
}