Skip to content

Commit

Permalink
Merge pull request #1770 from pantasystem/feature/#1688/switch-accoun…
Browse files Browse the repository at this point in the history
…t-in-profile

プロフィール画面でアカウントを切り替えられるようにした
  • Loading branch information
pantasystem authored Jul 16, 2023
2 parents 83d6a6e + 28b30e6 commit 5b7f1a0
Show file tree
Hide file tree
Showing 6 changed files with 263 additions and 101 deletions.
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 @@ -16,7 +16,6 @@ import net.pantasystem.milktea.user.UserCardActionHandler
import net.pantasystem.milktea.user.compose.screen.FollowFollowerRoute
import net.pantasystem.milktea.user.viewmodel.FollowFollowerViewModel
import net.pantasystem.milktea.user.viewmodel.ToggleFollowViewModel
import net.pantasystem.milktea.user.viewmodel.UserDetailViewModel
import net.pantasystem.milktea.user.viewmodel.provideFactory
import javax.inject.Inject

Expand All @@ -42,8 +41,6 @@ class FollowFollowerActivity : AppCompatActivity() {
}
}

@Inject
lateinit var assistedFactory: UserDetailViewModel.ViewModelAssistedFactory

@Inject
lateinit var applyTheme: ApplyTheme
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ 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
import net.pantasystem.milktea.user.viewmodel.UserDetailTabType
import net.pantasystem.milktea.user.viewmodel.UserDetailViewModel
import net.pantasystem.milktea.user.viewmodel.provideFactory
import javax.inject.Inject

class UserDetailNavigationImpl @Inject constructor(
Expand All @@ -80,11 +80,11 @@ class UserDetailNavigationImpl @Inject constructor(
@AndroidEntryPoint
class UserDetailActivity : AppCompatActivity() {
companion object {
private const val EXTRA_USER_ID =
internal const val EXTRA_USER_ID =
"net.pantasystem.milktea.user.activity.UserDetailActivity.EXTRA_USER_ID"
private const val EXTRA_USER_NAME =
internal const val EXTRA_USER_NAME =
"net.pantasystem.milktea.user.activity.UserDetailActivity.EXTRA_USER_NAME"
private const val EXTRA_ACCOUNT_ID =
internal const val EXTRA_ACCOUNT_ID =
"jp.panta.misskeyandroiclient.UserDetailActivity.EXTRA_ACCOUNT_ID"
const val EXTRA_IS_MAIN_ACTIVE = "jp.panta.misskeyandroidclient.EXTRA_IS_MAIN_ACTIVE"

Expand All @@ -104,8 +104,6 @@ class UserDetailActivity : AppCompatActivity() {
}
}

@Inject
lateinit var assistedFactory: UserDetailViewModel.ViewModelAssistedFactory

@Inject
lateinit var accountStore: AccountStore
Expand All @@ -117,25 +115,27 @@ class UserDetailActivity : AppCompatActivity() {
lateinit var searchNavigation: SearchNavigation


@ExperimentalCoroutinesApi
val mViewModel: UserDetailViewModel by viewModels {
val remoteUserId: String? = intent.getStringExtra(EXTRA_USER_ID)
val accountId: Long = intent.getLongExtra(EXTRA_ACCOUNT_ID, -1)
if (!(remoteUserId == null || accountId == -1L)) {
val userId = User.Id(accountId, remoteUserId)
return@viewModels UserDetailViewModel.provideFactory(assistedFactory, userId)
}
val userName = intent.data?.getQueryParameter("userName")
?: intent.getStringExtra(EXTRA_USER_NAME)
?: intent.data?.path?.let { path ->
if (path.startsWith("/")) {
path.substring(1, path.length)
} else {
path
}
}
return@viewModels UserDetailViewModel.provideFactory(assistedFactory, userName!!)
}
// @ExperimentalCoroutinesApi
// val mViewModel: UserDetailViewModel by viewModels {
// val remoteUserId: String? = intent.getStringExtra(EXTRA_USER_ID)
// val accountId: Long = intent.getLongExtra(EXTRA_ACCOUNT_ID, -1)
// if (!(remoteUserId == null || accountId == -1L)) {
// val userId = User.Id(accountId, remoteUserId)
// return@viewModels UserDetailViewModel.provideFactory(assistedFactory, userId)
// }
// val userName = intent.data?.getQueryParameter("userName")
// ?: intent.getStringExtra(EXTRA_USER_NAME)
// ?: intent.data?.path?.let { path ->
// if (path.startsWith("/")) {
// path.substring(1, path.length)
// } else {
// path
// }
// }
// return@viewModels UserDetailViewModel.provideFactory(assistedFactory, userName!!)
// }

private val mViewModel: UserDetailViewModel by viewModels()


private var mUserId: User.Id? = null
Expand Down Expand Up @@ -338,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 @@ -413,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
@@ -0,0 +1,70 @@
package net.pantasystem.milktea.user.profile

import android.app.Dialog
import android.os.Bundle
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.activityViewModels
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.composethemeadapter.MdcTheme
import dagger.hilt.android.AndroidEntryPoint
import net.pantasystem.milktea.common_android_ui.account.AccountSwitchingDialogLayout
import net.pantasystem.milktea.common_navigation.AccountSettingNavigation
import net.pantasystem.milktea.common_navigation.AuthorizationArgs
import net.pantasystem.milktea.common_navigation.AuthorizationNavigation
import net.pantasystem.milktea.common_navigation.UserDetailNavigation
import net.pantasystem.milktea.common_navigation.UserDetailNavigationArgs
import net.pantasystem.milktea.user.viewmodel.UserDetailViewModel
import javax.inject.Inject

@AndroidEntryPoint
class ProfileAccountSwitchDialog : BottomSheetDialogFragment() {
@Inject
lateinit var authorizationNavigation: AuthorizationNavigation

@Inject
lateinit var userDetailNavigation: UserDetailNavigation

@Inject
lateinit var accountSettingNavigation: AccountSettingNavigation

private val userDetailViewModel: UserDetailViewModel by activityViewModels()

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return super.onCreateDialog(savedInstanceState).apply {
val view = ComposeView(requireContext()).apply {
setContent {
MdcTheme {
val uiState by userDetailViewModel.accountUiState.collectAsState()
AccountSwitchingDialogLayout(
uiState = uiState,
onSettingButtonClicked = {
startActivity(accountSettingNavigation.newIntent(Unit))
dismiss()
},
onAvatarIconClicked = { accountInfo ->
startActivity(
userDetailNavigation.newIntent(UserDetailNavigationArgs.UserName(accountInfo.user?.let {
"@${it.userName}@${it.host}"
} ?: "@${accountInfo.account.userName}@${accountInfo.account.getHost()}"))
)
dismiss()
},
onAccountClicked = {
userDetailViewModel.setCurrentAccount(it.account.accountId)
dismiss()
},
onAddAccountButtonClicked = {
requireActivity().startActivity(authorizationNavigation.newIntent(
AuthorizationArgs.New))
dismiss()
}
)
}
}
}
setContentView(view)
}
}
}
Loading

0 comments on commit 5b7f1a0

Please sign in to comment.