v16.6-a3: Invite/kick actions now visible, preparations on message actions

This commit is contained in:
Austin Huang 2020-07-01 23:20:54 -04:00
parent d523a1e22c
commit f85d438066
No known key found for this signature in database
GPG Key ID: 84C23AA04587A91F
5 changed files with 102 additions and 12 deletions

View File

@ -4,6 +4,7 @@ import android.content.Intent;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -18,17 +19,25 @@ import java.util.List;
import awais.instagrabber.R; import awais.instagrabber.R;
import awais.instagrabber.adapters.MessageItemsAdapter; import awais.instagrabber.adapters.MessageItemsAdapter;
import awais.instagrabber.asyncs.direct_messages.UserInboxFetcher; import awais.instagrabber.asyncs.direct_messages.UserInboxFetcher;
import awais.instagrabber.asyncs.UsernameFetcher;
import awais.instagrabber.customviews.helpers.RecyclerLazyLoader; import awais.instagrabber.customviews.helpers.RecyclerLazyLoader;
import awais.instagrabber.databinding.ActivityDmsBinding; import awais.instagrabber.databinding.ActivityDmsBinding;
import awais.instagrabber.interfaces.FetchListener; import awais.instagrabber.interfaces.FetchListener;
import awais.instagrabber.models.PostModel;
import awais.instagrabber.models.ProfileModel; import awais.instagrabber.models.ProfileModel;
import awais.instagrabber.models.StoryModel;
import awais.instagrabber.models.direct_messages.DirectItemModel; import awais.instagrabber.models.direct_messages.DirectItemModel;
import awais.instagrabber.models.direct_messages.DirectItemModel.DirectItemMediaModel;
import awais.instagrabber.models.direct_messages.InboxThreadModel; import awais.instagrabber.models.direct_messages.InboxThreadModel;
import awais.instagrabber.models.enums.DirectItemType;
import awais.instagrabber.models.enums.MediaItemType;
import awais.instagrabber.models.enums.UserInboxDirection; import awais.instagrabber.models.enums.UserInboxDirection;
import awais.instagrabber.utils.Constants; import awais.instagrabber.utils.Constants;
import awais.instagrabber.utils.Utils; import awais.instagrabber.utils.Utils;
public final class DirectMessagesUserInbox extends AppCompatActivity { public final class DirectMessagesUserInbox extends AppCompatActivity {
private DirectItemModel directItemModel;
private final ProfileModel myProfileHolder = new ProfileModel(false, false, null, null, null, null, null, null, null, 0, 0, 0);
private final ArrayList<ProfileModel> users = new ArrayList<>(); private final ArrayList<ProfileModel> users = new ArrayList<>();
private final ArrayList<DirectItemModel> directItemModels = new ArrayList<>(); private final ArrayList<DirectItemModel> directItemModels = new ArrayList<>();
private final FetchListener<InboxThreadModel> fetchListener = new FetchListener<InboxThreadModel>() { private final FetchListener<InboxThreadModel> fetchListener = new FetchListener<InboxThreadModel>() {
@ -90,12 +99,58 @@ public final class DirectMessagesUserInbox extends AppCompatActivity {
dmsBinding.rvDirectMessages.setAdapter(messageItemsAdapter = new MessageItemsAdapter(directItemModels, users, v -> { dmsBinding.rvDirectMessages.setAdapter(messageItemsAdapter = new MessageItemsAdapter(directItemModels, users, v -> {
// todo do something with clicked message // todo do something with clicked message
Log.d("AWAISKING_APP", "--> " + v.getTag()); Object tag = v.getTag();
if (tag instanceof DirectItemModel) {
directItemModel = (DirectItemModel) tag;
final String username = getUser(directItemModel.getUserId()).getUsername();
final DirectItemType itemType = directItemModel.getItemType();
switch(itemType) {
case MEDIA_SHARE:
startActivity(new Intent(this, PostViewer.class)
.putExtra(Constants.EXTRAS_POST, new PostModel(directItemModel.getMediaModel().getCode())));
break;
/*case STORY_SHARE:
startActivity(new Intent(this, StoryViewer.class)
.putExtra(Constants.EXTRAS_USERNAME, directItemModel.getReelShare().getReelOwnerName())
.putExtra(Constants.EXTRAS_STORIES, new StoryModel(
directItemModel.getReelShare().getReelId(),
directItemModel.getReelShare().getMedia()
))
);
break;*/
case TEXT:
searchUsername(username);
}
/*
startActivity(new Intent(this, PostViewer.class)
.putExtra(Constants.EXTRAS_POST, new PostModel(tag.toString())));
*/
}
}, (view, text, isHashtag) -> { }, (view, text, isHashtag) -> {
// todo mention click stuff // todo mention click stuff
})); }));
new UserInboxFetcher(threadModel.getThreadId(), UserInboxDirection.OLDER, null, fetchListener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); new UserInboxFetcher(threadModel.getThreadId(), UserInboxDirection.OLDER, null, fetchListener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} }
@Nullable
private ProfileModel getUser(final long userId) {
if (users != null) {
for (final ProfileModel user : users)
if (Long.toString(userId).equals(user.getId())) return user;
return myProfileHolder;
}
return null;
}
private void searchUsername(final String text) {
if (Main.scanHack != null) {
Main.scanHack.onResult(text);
setResult(6969);
Intent intent = new Intent(getApplicationContext(), Main.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}
} }

View File

@ -1,13 +1,16 @@
package awais.instagrabber.adapters; package awais.instagrabber.adapters;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import android.text.Spanned; import android.text.Spanned;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -20,6 +23,7 @@ import com.bumptech.glide.RequestManager;
import java.util.ArrayList; import java.util.ArrayList;
import awais.instagrabber.R; import awais.instagrabber.R;
import awais.instagrabber.activities.Main;
import awais.instagrabber.adapters.viewholder.directmessages.TextMessageViewHolder; import awais.instagrabber.adapters.viewholder.directmessages.TextMessageViewHolder;
import awais.instagrabber.interfaces.MentionClickListener; import awais.instagrabber.interfaces.MentionClickListener;
import awais.instagrabber.models.ProfileModel; import awais.instagrabber.models.ProfileModel;
@ -30,6 +34,7 @@ import awais.instagrabber.models.enums.DirectItemType;
import awais.instagrabber.models.enums.MediaItemType; import awais.instagrabber.models.enums.MediaItemType;
import awais.instagrabber.models.enums.RavenExpiringMediaType; import awais.instagrabber.models.enums.RavenExpiringMediaType;
import awais.instagrabber.models.enums.RavenMediaViewType; import awais.instagrabber.models.enums.RavenMediaViewType;
import awais.instagrabber.utils.Constants;
import awais.instagrabber.utils.Utils; import awais.instagrabber.utils.Utils;
import static awais.instagrabber.models.direct_messages.DirectItemModel.DirectItemLinkContext; import static awais.instagrabber.models.direct_messages.DirectItemModel.DirectItemLinkContext;
@ -163,6 +168,10 @@ public final class MessageItemsAdapter extends RecyclerView.Adapter<TextMessageV
else holder.tvMessage.setText(text); else holder.tvMessage.setText(text);
holder.tvMessage.setVisibility(View.VISIBLE); holder.tvMessage.setVisibility(View.VISIBLE);
holder.tvMessage.setOnClickListener(v -> {
Utils.copyText(v.getContext(), holder.tvMessage.getText());
Toast.makeText(v.getContext(), R.string.clipboard_copied, Toast.LENGTH_SHORT).show();
});
break; break;
case LINK: { case LINK: {
@ -351,7 +360,14 @@ public final class MessageItemsAdapter extends RecyclerView.Adapter<TextMessageV
case VIDEO_CALL_EVENT: { case VIDEO_CALL_EVENT: {
// todo add call event info // todo add call event info
holder.tvMessage.setVisibility(View.VISIBLE); holder.tvMessage.setVisibility(View.VISIBLE);
holder.itemView.setBackgroundColor(0xFF_1F90E6); // blue bitch holder.itemView.setBackgroundColor(0xFF_1F90E6);
}
break;
case ACTION_LOG: {
text = directItemModel.getActionLogModel().getDescription();
holder.tvMessage.setText(HtmlCompat.fromHtml("<small>"+text+"</small>", 63));
holder.tvMessage.setVisibility(View.VISIBLE);
} }
break; break;
} }

View File

@ -38,7 +38,7 @@ public final class AboutDialog extends BottomSheetDialogFragment {
if (!Utils.isEmpty(Utils.telegramPackage)) if (!Utils.isEmpty(Utils.telegramPackage))
intent.setPackage(Utils.telegramPackage); intent.setPackage(Utils.telegramPackage);
} else } else
intent.setData(Uri.parse("https://gitlab.com/AwaisKing/instagrabber/")); intent.setData(Uri.parse("https://github.com/austinhuang0131/instagrabber/"));
startActivity(intent); startActivity(intent);
}; };
btnProject.setOnClickListener(onClickListener); btnProject.setOnClickListener(onClickListener);

View File

@ -291,6 +291,7 @@ public final class DirectItemModel implements Serializable, Comparable<DirectIte
public final static class DirectItemReelShareModel implements Serializable { public final static class DirectItemReelShareModel implements Serializable {
private final boolean isReelPersisted; private final boolean isReelPersisted;
private final long reelOwnerId; private final long reelOwnerId;
private final String reelOwnerName;
private final String text; private final String text;
private final String type; private final String type;
private final String reelType; private final String reelType;
@ -298,10 +299,12 @@ public final class DirectItemModel implements Serializable, Comparable<DirectIte
private final String reelId; private final String reelId;
private final DirectItemMediaModel media; private final DirectItemMediaModel media;
public DirectItemReelShareModel(final boolean isReelPersisted, final long reelOwnerId, final String text, final String type, public DirectItemReelShareModel(final boolean isReelPersisted, final long reelOwnerId, final String reelOwnerName,
final String reelType, final String reelName, final String reelId, final DirectItemMediaModel media) { final String text, final String type, final String reelType, final String reelName,
final String reelId, final DirectItemMediaModel media) {
this.isReelPersisted = isReelPersisted; this.isReelPersisted = isReelPersisted;
this.reelOwnerId = reelOwnerId; this.reelOwnerId = reelOwnerId;
this.reelOwnerName = reelOwnerName;
this.text = text; this.text = text;
this.type = type; this.type = type;
this.reelType = reelType; this.reelType = reelType;
@ -318,6 +321,8 @@ public final class DirectItemModel implements Serializable, Comparable<DirectIte
return reelOwnerId; return reelOwnerId;
} }
public String getReelOwnerName() { return reelOwnerName; }
public String getText() { public String getText() {
return text; return text;
} }
@ -346,17 +351,18 @@ public final class DirectItemModel implements Serializable, Comparable<DirectIte
public final static class DirectItemMediaModel implements Serializable { public final static class DirectItemMediaModel implements Serializable {
private final MediaItemType mediaType; private final MediaItemType mediaType;
private final long expiringAt, pk; private final long expiringAt, pk;
private final String id, thumbUrl; private final String id, thumbUrl, code;
private final ProfileModel user; private final ProfileModel user;
public DirectItemMediaModel(final MediaItemType mediaType, final long expiringAt, final long pk, final String id, public DirectItemMediaModel(final MediaItemType mediaType, final long expiringAt, final long pk, final String id,
final String thumbUrl, final ProfileModel user) { final String thumbUrl, final ProfileModel user, final String code) {
this.mediaType = mediaType; this.mediaType = mediaType;
this.expiringAt = expiringAt; this.expiringAt = expiringAt;
this.pk = pk; this.pk = pk;
this.id = id; this.id = id;
this.thumbUrl = thumbUrl; this.thumbUrl = thumbUrl;
this.user = user; this.user = user;
this.code = code;
} }
public MediaItemType getMediaType() { public MediaItemType getMediaType() {
@ -375,6 +381,10 @@ public final class DirectItemModel implements Serializable, Comparable<DirectIte
return id; return id;
} }
public String getCode() {
return code;
}
public ProfileModel getUser() { public ProfileModel getUser() {
return user; return user;
} }

View File

@ -384,7 +384,8 @@ public final class Utils {
mediaObj.optLong("pk"), mediaObj.optLong("pk"),
id, id,
getThumbnailUrl(mediaObj, mediaType), getThumbnailUrl(mediaObj, mediaType),
user); user,
mediaObj.optString("code"));
} }
return mediaModel; return mediaModel;
} }
@ -527,6 +528,7 @@ public final class Utils {
reelShareModel = new DirectItemReelShareModel( reelShareModel = new DirectItemReelShareModel(
reelShare.optBoolean("is_reel_persisted"), reelShare.optBoolean("is_reel_persisted"),
reelShare.getLong("reel_owner_id"), reelShare.getLong("reel_owner_id"),
reelShare.getJSONObject("media").getJSONObject("user").getString("username"),
reelShare.getString("text"), reelShare.getString("text"),
reelShare.getString("type"), reelShare.getString("type"),
reelShare.getString("reel_type"), reelShare.getString("reel_type"),
@ -616,9 +618,15 @@ public final class Utils {
// prevents empty viewholders when in thread view mode // prevents empty viewholders when in thread view mode
continue; continue;
final JSONObject actionLog = itemObject.getJSONObject("action_log"); final JSONObject actionLog = itemObject.getJSONObject("action_log");
actionLogModel = new DirectItemActionLogModel(actionLog.getString("description") String desc = actionLog.getString("description");
// todo add bold , text_attributes objects [find out how tf to implement them] JSONArray bold = actionLog.getJSONArray("bold");
); for (int q=0; q < bold.length(); ++q) {
JSONObject boldItem = bold.getJSONObject(q);
desc = desc.substring(0, boldItem.getInt("start") + q*7) + "<b>"
+ desc.substring(boldItem.getInt("start") + q*7, boldItem.getInt("end") + q*7)
+ "</b>" + desc.substring(boldItem.getInt("end") + q*7, desc.length());
}
actionLogModel = new DirectItemActionLogModel(desc);
break; break;
case MEDIA_SHARE: case MEDIA_SHARE:
@ -642,6 +650,7 @@ public final class Utils {
reelShareModel = new DirectItemReelShareModel( reelShareModel = new DirectItemReelShareModel(
storyShare.optBoolean("is_reel_persisted"), storyShare.optBoolean("is_reel_persisted"),
storyShare.getJSONObject("media").getJSONObject("user").getLong("pk"), storyShare.getJSONObject("media").getJSONObject("user").getLong("pk"),
storyShare.getJSONObject("media").getJSONObject("user").getString("username"),
storyShare.getString("text"), storyShare.getString("text"),
storyShare.getString("story_share_type"), storyShare.getString("story_share_type"),
storyShare.getString("reel_type"), storyShare.getString("reel_type"),