Skip to content

Commit

Permalink
feat: アカウントを切り替えられるようにした
Browse files Browse the repository at this point in the history
  • Loading branch information
pantasystem committed Jul 16, 2023
1 parent f971aeb commit 28b30e6
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,9 @@
<item
android:id="@+id/share"
android:title="@string/share"/>

<item
android:id="@+id/nav_switch_account"
android:title="@string/switch_account"
/>
</menu>
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import net.pantasystem.milktea.user.activity.binder.UserDetailActivityMenuBinder
import net.pantasystem.milktea.user.databinding.ActivityUserDetailBinding
import net.pantasystem.milktea.user.nickname.EditNicknameDialog
import net.pantasystem.milktea.user.profile.ConfirmUserBlockDialog
import net.pantasystem.milktea.user.profile.ProfileAccountSwitchDialog
import net.pantasystem.milktea.user.profile.UserProfileFieldListAdapter
import net.pantasystem.milktea.user.profile.mute.SpecifyMuteExpiredAtDialog
import net.pantasystem.milktea.user.reaction.UserReactionsFragment
Expand Down Expand Up @@ -337,7 +338,6 @@ class UserDetailActivity : AppCompatActivity() {
}


@OptIn(ExperimentalCoroutinesApi::class)
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.activity_user_menu, menu)

Expand Down Expand Up @@ -412,6 +412,9 @@ class UserDetailActivity : AppCompatActivity() {
)
)
}
R.id.nav_switch_account -> {
ProfileAccountSwitchDialog().show(supportFragmentManager, "switchAccountDialog")
}
else -> return false

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,15 @@ import net.pantasystem.milktea.common.mapCancellableCatching
import net.pantasystem.milktea.common.runCancellableCatching
import net.pantasystem.milktea.common_android.eventbus.EventBus
import net.pantasystem.milktea.common_android.resource.StringSource
import net.pantasystem.milktea.common_android_ui.account.viewmodel.AccountViewModelUiStateHelper
import net.pantasystem.milktea.model.account.Account
import net.pantasystem.milktea.model.account.AccountRepository
import net.pantasystem.milktea.model.account.page.Pageable
import net.pantasystem.milktea.model.account.page.PageableTemplate
import net.pantasystem.milktea.model.ap.ApResolverService
import net.pantasystem.milktea.model.instance.FeatureEnables
import net.pantasystem.milktea.model.instance.FeatureType
import net.pantasystem.milktea.model.instance.InstanceInfoService
import net.pantasystem.milktea.model.user.*
import net.pantasystem.milktea.model.user.block.BlockRepository
import net.pantasystem.milktea.model.user.mute.CreateMute
Expand All @@ -48,9 +51,11 @@ class UserDetailViewModel @Inject constructor(
private val muteRepository: MuteRepository,
userDataSource: UserDataSource,
loggerFactory: Logger.Factory,
instanceInfoService: InstanceInfoService,
private val userRepository: UserRepository,
private val featureEnables: FeatureEnables,
private val toggleFollowUseCase: ToggleFollowUseCase,
private val apResolverService: ApResolverService,
private val savedStateHandle: SavedStateHandle,
) : ViewModel() {

Expand Down Expand Up @@ -186,6 +191,14 @@ class UserDetailViewModel @Inject constructor(
logger.error("ユーザープロフィールのタブの取得に失敗", it)
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5_000), emptyList())

val accountUiState = AccountViewModelUiStateHelper(
currentAccount,
accountStore,
userDataSource,
instanceInfoService,
viewModelScope,
).uiState

@OptIn(ExperimentalCoroutinesApi::class)
val renoteMuteState = userState.filterNotNull().flatMapLatest {
renoteMuteRepository.observeOne(it.id)
Expand Down Expand Up @@ -362,6 +375,21 @@ class UserDetailViewModel @Inject constructor(
}
}

fun setCurrentAccount(accountId: Long) {
viewModelScope.launch {
accountRepository.get(accountId).mapCancellableCatching {
it to apResolverService.resolve(getUserId(), accountId).getOrThrow()
}.onSuccess { (account, resolved) ->
savedStateHandle[UserDetailActivity.EXTRA_USER_ID] = resolved.id.id
savedStateHandle[UserDetailActivity.EXTRA_ACCOUNT_ID] = resolved.id.accountId
accountStore.setCurrent(account)
}.onFailure {
logger.error("setCurrentAccount failed", it)
_errors.tryEmit(it)
}
}
}

private suspend fun findUser(): User {
return userRepository.find(getUserId())
}
Expand Down

0 comments on commit 28b30e6

Please sign in to comment.