User.kt 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package org.mjdev.desktop.data
  2. import android.accounts.Account
  3. import android.accounts.AccountManager
  4. import android.os.Environment
  5. import okio.Path
  6. import okio.Path.Companion.toPath
  7. import org.mjdev.desktop.context.DesktopContext
  8. import org.mjdev.desktop.context.IDesktopContext
  9. import org.mjdev.desktop.icons.user.AccountCircle
  10. import org.mjdev.desktop.interfaces.ITheme
  11. import org.mjdev.desktop.interfaces.IUser
  12. import org.mjdev.desktop.interfaces.IUserDirs
  13. import java.io.File
  14. class User(
  15. val account: Account? = null,
  16. ) : IUser {
  17. override val userName: String
  18. get() = account?.name ?: ""
  19. override val password: String
  20. get() = "" // todo
  21. override val uid: String
  22. get() = "" // todo
  23. override val gid: String
  24. get() = "" // todo
  25. override val description: String
  26. get() = "" // todo
  27. override val home: String
  28. get() = "/sdcard/" // todo
  29. override val shell: String
  30. get() = "" // todo
  31. override val picture: Any
  32. get() = AccountCircle // todo
  33. override val homeDir: Path
  34. get() = Environment.getExternalStorageDirectory().path.toPath()
  35. override val isLoggedIn
  36. get() = isLoggedIn(userName) // todo
  37. override val userDirs: IUserDirs
  38. get() = UserDirs(homeDir)
  39. override val config: DesktopConfig
  40. get() = DesktopConfig.load(this) // todo load
  41. override val theme: ITheme
  42. get() = Theme.load(this) // todo load
  43. override val backgrounds
  44. get() = config.desktopBackgrounds
  45. override fun toString(): String = userName
  46. // fun login(
  47. // context: IDesktopContext,
  48. // password: String
  49. // ): Flow<Boolean> = flow { context.login(userName, password) }
  50. companion object {
  51. val NOBODY = User()
  52. val DEFAULT = NOBODY
  53. fun isLoggedIn(uname: String): Boolean = false // todo
  54. fun loadPicture(
  55. home: String,
  56. pic: String,
  57. ): File? = loadPicture(File(home), pic)
  58. fun loadPicture(
  59. homeDir: File,
  60. picName: String,
  61. ): File? =
  62. File(homeDir, picName).let { f ->
  63. if (f.exists()) f else null
  64. }
  65. fun allUsers(context: IDesktopContext): List<User> =
  66. if (context is DesktopContext) {
  67. AccountManager.get(context.context).accounts.map { a ->
  68. User(a)
  69. }
  70. } else {
  71. emptyList()
  72. }
  73. }
  74. }