diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java index 3f8696dd2..564c53248 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/MastodonAPIController.java @@ -16,6 +16,7 @@ import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.api.gson.IsoInstantTypeAdapter; import org.joinmastodon.android.api.gson.IsoLocalDateTypeAdapter; import org.joinmastodon.android.api.session.AccountSession; +import org.joinmastodon.android.model.Status; import java.io.BufferedReader; import java.io.IOException; @@ -40,12 +41,15 @@ import okhttp3.ResponseBody; public class MastodonAPIController{ private static final String TAG="MastodonAPIController"; - public static final Gson gson=new GsonBuilder() + public static final Gson gsonWithoutDeserializer = new GsonBuilder() .disableHtmlEscaping() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .registerTypeAdapter(Instant.class, new IsoInstantTypeAdapter()) .registerTypeAdapter(LocalDate.class, new IsoLocalDateTypeAdapter()) .create(); + public static final Gson gson = gsonWithoutDeserializer.newBuilder() + .registerTypeAdapter(Status.class, new Status.StatusDeserializer()) + .create(); private static WorkerThread thread=new WorkerThread("MastodonAPIController"); private static OkHttpClient httpClient=new OkHttpClient.Builder().build(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index 2ab21d41c..41d9e6f93 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -674,8 +674,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr moreBtn.setImageDrawable(visibilityIcon); moreBtn.setBackground(null); TextView timestamp = view.findViewById(R.id.timestamp); - if (status.editedAt==null) timestamp.setText(UiUtils.formatRelativeTimestamp(getContext(), status.createdAt)); - else timestamp.setText(getString(R.string.edited_timestamp, UiUtils.formatRelativeTimestamp(getContext(), status.editedAt))); + if (status.editedAt!=null) timestamp.setText(getString(R.string.edited_timestamp, UiUtils.formatRelativeTimestamp(getContext(), status.editedAt))); + else if (status.createdAt!=null) timestamp.setText(UiUtils.formatRelativeTimestamp(getContext(), status.createdAt)); + else timestamp.setText(""); if (status.spoilerText != null && !status.spoilerText.isBlank()) { view.findViewById(R.id.spoiler_header).setVisibility(View.VISIBLE); ((TextView) view.findViewById(R.id.spoiler_title_inline)).setText(status.spoilerText); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index 648c017c0..7705b47c4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -550,10 +550,12 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList fields.clear(); - AccountField joined=new AccountField(); - joined.parsedName=joined.name=getString(R.string.profile_joined); - joined.parsedValue=joined.value=DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).format(LocalDateTime.ofInstant(account.createdAt, ZoneId.systemDefault())); - fields.add(joined); + if (account.createdAt != null) { + AccountField joined=new AccountField(); + joined.parsedName=joined.name=getString(R.string.profile_joined); + joined.parsedValue=joined.value=DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).format(LocalDateTime.ofInstant(account.createdAt, ZoneId.systemDefault())); + fields.add(joined); + } for(AccountField field:account.fields){ field.parsedValue=ssb=HtmlParser.parse(field.value, account.emojis, Collections.emptyList(), Collections.emptyList(), accountID); diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Account.java b/mastodon/src/main/java/org/joinmastodon/android/model/Account.java index 362406f85..b4424e0a6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Account.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Account.java @@ -43,7 +43,7 @@ public class Account extends BaseModel implements Searchable{ /** * The profile's display name. */ - @RequiredField +// @RequiredField public String displayName; /** * The profile's bio / description. @@ -86,7 +86,7 @@ public class Account extends BaseModel implements Searchable{ /** * When the account was created. */ - @RequiredField +// @RequiredField public Instant createdAt; /** * When the most recent status was posted. diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Poll.java b/mastodon/src/main/java/org/joinmastodon/android/model/Poll.java index 5aeeb9e54..739a79f71 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Poll.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Poll.java @@ -18,11 +18,11 @@ public class Poll extends BaseModel{ public int votersCount; public int votesCount; public boolean voted; - @RequiredField +// @RequiredField public List ownVotes; @RequiredField public List