Issue 2477: Show account's creation date in Profile. (#2480)
* Show account's creation date in Profile.
* Fix broken test.
* Store account creation date in the Database.
* Reformat and reposition Joined Date according to PR Feedback.
* Revert "Store account creation date in the Database."
This reverts commit d9761f53
as it's not needed.
* Change Account's Creation Date to a java.util.Date.
Update Test.
* Fix wildcard import.
* Show full month instead of an abbreviation.
* Remove `lazy` usage in favor of local instantiation.
Co-authored-by: Martin Marconcini <martin.marconcini.rodriguez@nl.abnamro.com>
Co-authored-by: Konrad Pozniak <connyduck@users.noreply.github.com>
This commit is contained in:
parent
df49851042
commit
d97493d312
|
@ -84,6 +84,9 @@ import com.keylesspalace.tusky.view.showMuteAccountDialog
|
||||||
import dagger.android.DispatchingAndroidInjector
|
import dagger.android.DispatchingAndroidInjector
|
||||||
import dagger.android.HasAndroidInjector
|
import dagger.android.HasAndroidInjector
|
||||||
import java.text.NumberFormat
|
import java.text.NumberFormat
|
||||||
|
import java.text.ParseException
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.Locale
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
|
|
||||||
|
@ -413,6 +416,7 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
|
||||||
updateToolbar()
|
updateToolbar()
|
||||||
updateMovedAccount()
|
updateMovedAccount()
|
||||||
updateRemoteAccount()
|
updateRemoteAccount()
|
||||||
|
updateAccountJoinedDate()
|
||||||
updateAccountStats()
|
updateAccountStats()
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
|
|
||||||
|
@ -422,6 +426,20 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateAccountJoinedDate() {
|
||||||
|
loadedAccount?.let { account ->
|
||||||
|
try {
|
||||||
|
binding.accountDateJoined.text = resources.getString(
|
||||||
|
R.string.account_date_joined,
|
||||||
|
SimpleDateFormat("MMMM, yyyy", Locale.getDefault()).format(account.createdAt)
|
||||||
|
)
|
||||||
|
binding.accountDateJoined.visibility = View.VISIBLE
|
||||||
|
} catch (e: ParseException) {
|
||||||
|
binding.accountDateJoined.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load account's avatar and header image
|
* Load account's avatar and header image
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -23,6 +23,7 @@ data class Account(
|
||||||
@SerializedName("username") val localUsername: String,
|
@SerializedName("username") val localUsername: String,
|
||||||
@SerializedName("acct") val username: String,
|
@SerializedName("acct") val username: String,
|
||||||
@SerializedName("display_name") val displayName: String?, // should never be null per Api definition, but some servers break the contract
|
@SerializedName("display_name") val displayName: String?, // should never be null per Api definition, but some servers break the contract
|
||||||
|
@SerializedName("created_at") val createdAt: Date,
|
||||||
val note: String,
|
val note: String,
|
||||||
val url: String,
|
val url: String,
|
||||||
val avatar: String,
|
val avatar: String,
|
||||||
|
|
|
@ -235,6 +235,19 @@
|
||||||
tools:itemCount="2"
|
tools:itemCount="2"
|
||||||
tools:listitem="@layout/item_account_field" />
|
tools:listitem="@layout/item_account_field" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/accountDateJoined"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
tools:text="April, 1971"
|
||||||
|
android:textColor="@color/textColorSecondary"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/accountFieldList"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/accountRemoveView"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/accountRemoveView"
|
android:id="@+id/accountRemoveView"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -245,7 +258,7 @@
|
||||||
android:lineSpacingMultiplier="1.1"
|
android:lineSpacingMultiplier="1.1"
|
||||||
android:text="@string/label_remote_account"
|
android:text="@string/label_remote_account"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
app:layout_constraintTop_toBottomOf="@id/accountFieldList"
|
app:layout_constraintTop_toBottomOf="@id/accountDateJoined"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
|
|
@ -643,10 +643,14 @@
|
||||||
<string name="action_unsubscribe_account">Unsubscribe</string>
|
<string name="action_unsubscribe_account">Unsubscribe</string>
|
||||||
|
|
||||||
<string name="tusky_compose_post_quicksetting_label">Compose Post</string>
|
<string name="tusky_compose_post_quicksetting_label">Compose Post</string>
|
||||||
|
|
||||||
|
<string name="account_date_joined">Joined %1$s</string>
|
||||||
|
|
||||||
<string name="saving_draft">Saving draft…</string>
|
<string name="saving_draft">Saving draft…</string>
|
||||||
|
|
||||||
<string name="tips_push_notification_migration">Re-login all accounts to enable push notification support.</string>
|
<string name="tips_push_notification_migration">Re-login all accounts to enable push notification support.</string>
|
||||||
<string name="dialog_push_notification_migration">In order to use push notifications via UnifiedPush, Tusky needs permission to subscribe to notifications on your Mastodon server. This requires a re-login to change the OAuth scopes granted to Tusky. Using the re-login option here or in Account Preferences will preserve all of your local drafts and cache.</string>
|
<string name="dialog_push_notification_migration">In order to use push notifications via UnifiedPush, Tusky needs permission to subscribe to notifications on your Mastodon server. This requires a re-login to change the OAuth scopes granted to Tusky. Using the re-login option here or in Account Preferences will preserve all of your local drafts and cache.</string>
|
||||||
<string name="dialog_push_notification_migration_other_accounts">You have re-logged into your current account to grant push subscription permission to Tusky. However, you still have other accounts that have not been migrated this way. Switch to them and re-login one by one in order to enable UnifiedPush notifications support.</string>
|
<string name="dialog_push_notification_migration_other_accounts">You have re-logged into your current account to grant push subscription permission to Tusky. However, you still have other accounts that have not been migrated this way. Switch to them and re-login one by one in order to enable UnifiedPush notifications support.</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -47,6 +47,8 @@ import org.robolectric.Robolectric
|
||||||
import org.robolectric.Shadows.shadowOf
|
import org.robolectric.Shadows.shadowOf
|
||||||
import org.robolectric.annotation.Config
|
import org.robolectric.annotation.Config
|
||||||
import org.robolectric.fakes.RoboMenuItem
|
import org.robolectric.fakes.RoboMenuItem
|
||||||
|
import java.util.Date
|
||||||
|
import kotlin.collections.HashMap
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by charlag on 3/7/18.
|
* Created by charlag on 3/7/18.
|
||||||
|
@ -466,22 +468,23 @@ class ComposeActivityTest {
|
||||||
null,
|
null,
|
||||||
listOf("en"),
|
listOf("en"),
|
||||||
Account(
|
Account(
|
||||||
"1",
|
id = "1",
|
||||||
"admin",
|
localUsername = "admin",
|
||||||
"admin",
|
username = "admin",
|
||||||
"admin",
|
displayName = "admin",
|
||||||
"",
|
createdAt = Date(),
|
||||||
"https://example.token",
|
note = "",
|
||||||
"",
|
url = "https://example.token",
|
||||||
"",
|
avatar = "",
|
||||||
false,
|
header = "",
|
||||||
0,
|
locked = false,
|
||||||
0,
|
statusesCount = 0,
|
||||||
0,
|
followersCount = 0,
|
||||||
null,
|
followingCount = 0,
|
||||||
false,
|
source = null,
|
||||||
emptyList(),
|
bot = false,
|
||||||
emptyList()
|
emojis = emptyList(),
|
||||||
|
fields = emptyList(),
|
||||||
),
|
),
|
||||||
maximumLegacyTootCharacters,
|
maximumLegacyTootCharacters,
|
||||||
null,
|
null,
|
||||||
|
|
Loading…
Reference in New Issue