Fix crashes
This commit is contained in:
parent
4dcb2cc3d9
commit
8ae5566054
|
@ -150,7 +150,7 @@ public class Status implements Parcelable{
|
||||||
|
|
||||||
private int warningFetched = -1;
|
private int warningFetched = -1;
|
||||||
private List<String> imageURL;
|
private List<String> imageURL;
|
||||||
private boolean statusAnimated = false;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToParcel(Parcel dest, int flags) {
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
@ -1603,12 +1603,4 @@ public class Status implements Parcelable{
|
||||||
public void setImageURL(List<String> imageURL) {
|
public void setImageURL(List<String> imageURL) {
|
||||||
this.imageURL = imageURL;
|
this.imageURL = imageURL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isStatusAnimated() {
|
|
||||||
return statusAnimated;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatusAnimated(boolean statusAnimated) {
|
|
||||||
this.statusAnimated = statusAnimated;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,6 +104,7 @@ import app.fedilab.android.interfaces.OnPostNotificationsActionInterface;
|
||||||
import app.fedilab.android.interfaces.OnRetrieveEmojiAccountInterface;
|
import app.fedilab.android.interfaces.OnRetrieveEmojiAccountInterface;
|
||||||
import app.fedilab.android.interfaces.OnRetrieveEmojiInterface;
|
import app.fedilab.android.interfaces.OnRetrieveEmojiInterface;
|
||||||
|
|
||||||
|
import static android.content.Context.MODE_PRIVATE;
|
||||||
import static app.fedilab.android.activities.BaseMainActivity.social;
|
import static app.fedilab.android.activities.BaseMainActivity.social;
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,7 +124,32 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
|
||||||
private boolean isOnWifi;
|
private boolean isOnWifi;
|
||||||
private NotificationsListAdapter.ViewHolder holder;
|
private NotificationsListAdapter.ViewHolder holder;
|
||||||
private int style;
|
private int style;
|
||||||
private Timer timer;
|
private List<NotificationsListAdapter.ViewHolder> lstHolders;
|
||||||
|
private Runnable updateAnimatedEmoji = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
synchronized (lstHolders) {
|
||||||
|
for (NotificationsListAdapter.ViewHolder holder : lstHolders) {
|
||||||
|
holder.updateAnimatedEmoji();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
private Handler mHandler = new Handler();
|
||||||
|
private void startUpdateTimer() {
|
||||||
|
|
||||||
|
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
|
||||||
|
boolean disableAnimatedEmoji = sharedpreferences.getBoolean(Helper.SET_DISABLE_ANIMATED_EMOJI, false);
|
||||||
|
if( !disableAnimatedEmoji ){
|
||||||
|
Timer tmr = new Timer();
|
||||||
|
tmr.schedule(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
mHandler.post(updateAnimatedEmoji);
|
||||||
|
}
|
||||||
|
}, 0, 130);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public NotificationsListAdapter(Context context, boolean isOnWifi, int behaviorWithAttachments, List<Notification> notifications){
|
public NotificationsListAdapter(Context context, boolean isOnWifi, int behaviorWithAttachments, List<Notification> notifications){
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
@ -132,6 +158,8 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
|
||||||
notificationsListAdapter = this;
|
notificationsListAdapter = this;
|
||||||
this.isOnWifi = isOnWifi;
|
this.isOnWifi = isOnWifi;
|
||||||
this.behaviorWithAttachments = behaviorWithAttachments;
|
this.behaviorWithAttachments = behaviorWithAttachments;
|
||||||
|
lstHolders = new ArrayList<>();
|
||||||
|
startUpdateTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -146,6 +174,11 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
|
||||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
|
||||||
|
|
||||||
holder = (NotificationsListAdapter.ViewHolder) viewHolder;
|
holder = (NotificationsListAdapter.ViewHolder) viewHolder;
|
||||||
|
|
||||||
|
synchronized (lstHolders) {
|
||||||
|
lstHolders.add(holder);
|
||||||
|
}
|
||||||
|
|
||||||
final Notification notification = notifications.get(position);
|
final Notification notification = notifications.get(position);
|
||||||
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||||
|
|
||||||
|
@ -377,34 +410,7 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
|
||||||
holder.status_document_container.setVisibility(View.GONE);
|
holder.status_document_container.setVisibility(View.GONE);
|
||||||
else
|
else
|
||||||
holder.status_document_container.setVisibility(View.VISIBLE);
|
holder.status_document_container.setVisibility(View.VISIBLE);
|
||||||
boolean disableAnimatedEmoji = sharedpreferences.getBoolean(Helper.SET_DISABLE_ANIMATED_EMOJI, false);
|
|
||||||
if( !disableAnimatedEmoji && !notification.isNotificationAnimated() && (status.getEmojis().size() > 0 || status.getAccount().getEmojis().size() > 0) ) {
|
|
||||||
notification.setNotificationAnimated(true);
|
|
||||||
/*try{
|
|
||||||
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
holder.notification_status_content.invalidate();
|
|
||||||
}
|
|
||||||
}, 0, 130, TimeUnit.MILLISECONDS);
|
|
||||||
}catch (Exception ignored){}*/
|
|
||||||
if( timer == null) {
|
|
||||||
timer = new Timer();
|
|
||||||
timer.scheduleAtFixedRate(new TimerTask() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
((Activity) context).runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
holder.notification_account_username.invalidate();
|
|
||||||
holder.notification_status_content.invalidate();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
}, 0, 130);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if( !status.isClickable())
|
if( !status.isClickable())
|
||||||
Status.transform(context, status);
|
Status.transform(context, status);
|
||||||
if( !status.isEmojiFound())
|
if( !status.isEmojiFound())
|
||||||
|
@ -1485,6 +1491,12 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
|
||||||
submit_vote = itemView.findViewById(R.id.submit_vote);
|
submit_vote = itemView.findViewById(R.id.submit_vote);
|
||||||
refresh_poll = itemView.findViewById(R.id.refresh_poll);
|
refresh_poll = itemView.findViewById(R.id.refresh_poll);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void updateAnimatedEmoji() {
|
||||||
|
holder.notification_account_username.invalidate();
|
||||||
|
holder.notification_status_content.invalidate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -216,7 +216,34 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
private TextView warning_message;
|
private TextView warning_message;
|
||||||
private Status tootReply;
|
private Status tootReply;
|
||||||
private long currentToId = -1;
|
private long currentToId = -1;
|
||||||
private Timer timer;
|
private List<ViewHolder> lstHolders;
|
||||||
|
private Runnable updateAnimatedEmoji = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
synchronized (lstHolders) {
|
||||||
|
for (ViewHolder holder : lstHolders) {
|
||||||
|
holder.updateAnimatedEmoji();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
private Handler mHandler = new Handler();
|
||||||
|
|
||||||
|
private void startUpdateTimer() {
|
||||||
|
|
||||||
|
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
|
||||||
|
boolean disableAnimatedEmoji = sharedpreferences.getBoolean(Helper.SET_DISABLE_ANIMATED_EMOJI, false);
|
||||||
|
if( !disableAnimatedEmoji ){
|
||||||
|
Timer tmr = new Timer();
|
||||||
|
tmr.schedule(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
mHandler.post(updateAnimatedEmoji);
|
||||||
|
}
|
||||||
|
}, 0, 130);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public StatusListAdapter(Context context, RetrieveFeedsAsyncTask.Type type, String targetedId, boolean isOnWifi, List<Status> statuses){
|
public StatusListAdapter(Context context, RetrieveFeedsAsyncTask.Type type, String targetedId, boolean isOnWifi, List<Status> statuses){
|
||||||
super();
|
super();
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
@ -227,6 +254,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.targetedId = targetedId;
|
this.targetedId = targetedId;
|
||||||
redraft = false;
|
redraft = false;
|
||||||
|
lstHolders = new ArrayList<>();
|
||||||
|
startUpdateTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public StatusListAdapter(Context context, TagTimeline tagTimeline, String targetedId, boolean isOnWifi, List<Status> statuses){
|
public StatusListAdapter(Context context, TagTimeline tagTimeline, String targetedId, boolean isOnWifi, List<Status> statuses){
|
||||||
|
@ -240,6 +269,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
this.targetedId = targetedId;
|
this.targetedId = targetedId;
|
||||||
redraft = false;
|
redraft = false;
|
||||||
this.tagTimeline = tagTimeline;
|
this.tagTimeline = tagTimeline;
|
||||||
|
lstHolders = new ArrayList<>();
|
||||||
|
startUpdateTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public StatusListAdapter(Context context, int position, String targetedId, boolean isOnWifi, List<Status> statuses){
|
public StatusListAdapter(Context context, int position, String targetedId, boolean isOnWifi, List<Status> statuses){
|
||||||
|
@ -252,6 +283,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
this.conversationPosition = position;
|
this.conversationPosition = position;
|
||||||
this.targetedId = targetedId;
|
this.targetedId = targetedId;
|
||||||
redraft = false;
|
redraft = false;
|
||||||
|
lstHolders = new ArrayList<>();
|
||||||
|
startUpdateTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -776,7 +809,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
quick_reply_privacy = itemView.findViewById(R.id.quick_reply_privacy);
|
quick_reply_privacy = itemView.findViewById(R.id.quick_reply_privacy);
|
||||||
|
|
||||||
warning_message = itemView.findViewById(R.id.warning_message);
|
warning_message = itemView.findViewById(R.id.warning_message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateAnimatedEmoji() {
|
||||||
|
status_account_displayname.invalidate();
|
||||||
|
status_content.invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -831,7 +868,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
|
|
||||||
if( viewHolder.getItemViewType() != HIDDEN_STATUS ) {
|
if( viewHolder.getItemViewType() != HIDDEN_STATUS ) {
|
||||||
|
|
||||||
|
|
||||||
final ViewHolder holder = (ViewHolder) viewHolder;
|
final ViewHolder holder = (ViewHolder) viewHolder;
|
||||||
|
synchronized (lstHolders) {
|
||||||
|
lstHolders.add(holder);
|
||||||
|
}
|
||||||
final Status status = statuses.get(i);
|
final Status status = statuses.get(i);
|
||||||
if( status == null)
|
if( status == null)
|
||||||
return;
|
return;
|
||||||
|
@ -1172,35 +1213,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
|
||||||
}
|
}
|
||||||
boolean disableAnimatedEmoji = sharedpreferences.getBoolean(Helper.SET_DISABLE_ANIMATED_EMOJI, false);
|
boolean disableAnimatedEmoji = sharedpreferences.getBoolean(Helper.SET_DISABLE_ANIMATED_EMOJI, false);
|
||||||
|
|
||||||
|
|
||||||
if( !disableAnimatedEmoji && !status.isStatusAnimated() && (status.getEmojis().size() > 0 || status.getAccount().getEmojis().size() > 0) ) {
|
|
||||||
status.setStatusAnimated(true);
|
|
||||||
/*try{
|
|
||||||
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
holder.status_content.invalidate();
|
|
||||||
}
|
|
||||||
}, 0, 130, TimeUnit.MILLISECONDS);
|
|
||||||
}catch (Exception ignored){}*/
|
|
||||||
if( timer == null) {
|
|
||||||
timer = new Timer();
|
|
||||||
timer.scheduleAtFixedRate(new TimerTask() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
((Activity) context).runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
holder.status_account_displayname.invalidate();
|
|
||||||
holder.status_content.invalidate();
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, 0, 130);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
holder.status_spoiler.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14 * textSizePercent / 100);
|
holder.status_spoiler.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14 * textSizePercent / 100);
|
||||||
|
|
||||||
switch (translator) {
|
switch (translator) {
|
||||||
|
|
Loading…
Reference in New Issue