Skip to content

MainActivity Old

Kokoichi edited this page Sep 26, 2021 · 2 revisions
        Picasso.get().load(imgUrl).fetch()

        // TODO: ここも API から持ってくる
        val memberNames = listOf<String>(
            "iwamotorenka",
//            "akimotomanatsu",
//            "suzukiayane",
//            "tsutsuiayame",
//            "kitanohinako",
//            "yakubomio",
//            "yumikinao",
//            "tamuramayu",
//            "endousakura",
        )
        val dbHelper = MemberInfoAPI()
        membersFromStorage = mutableListOf<Member>()  // 初期化する
        for (memberName in memberNames) {
            Log.d("MainActivity", memberName);
//            val userInfo = dbHelper.downloadMemberInfo(memberName)
            var userInfo = downloadMemberInfo(memberName)
            Log.d("MainActivity", userInfo.toString());
//            var member = Member(
//                name = userInfo?.nameEn!!,
//                name_ja = userInfo.nameJa,
//                birthday = userInfo?.birthday,
//                imgUrl = userInfo.imgUrl,
//            )
//            var member = Member(
//                name = userInfo?.nameEn!!,
//                imgUrl = userInfo.imgUrl,
//            )
//            membersFromStorage.add(member)
        }

        Picasso.get()
            .load(imgUrl)
            .placeholder(R.drawable.profile_picture)
            .into(object : CustomTarget<Bitmap>(){
            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                imageView.setImageBitmap(resource)
            }
            override fun onLoadCleared(placeholder: Drawable?) {
                // this is called when imageView is cleared on lifecycle call or for
                // some other reason.
                // if you are referencing the bitmap somewhere else too other than this imageView
                // clear it here as you can no longer have the bitmap
            }
        })
                // あらかじめキャッシュしておく
        for (imageUrl in userImageList.images) {
            Picasso.get().load(imageUrl).fetch()
        }





// TODO: group 名を格納する enum か何かを作る
// TODO: WorkerThread で thread を止める処理は、数が多すぎたら良くない?
// 非同期的に動く get に対応するため、戻り値を変更
// memberに直接追加することにする!
suspend fun <T> Task<T>.toSuspendable(): T {
    return suspendCoroutine { cont ->
        this.addOnCompleteListener { task ->
            if (task.isSuccessful) {
                cont.resume(task.result!!)
            } else if (task.isCanceled) {
                cont.resumeWithException(CancellationException())
            } else {
                cont.resumeWithException(task.exception ?: Exception("Unknown"))
            }
        }
    }
}

suspend fun downloader(groupName: String): MutableList<Member> {
    var memberListFromStorage = mutableListOf<Member>()
//    GlobalScope.launch(Dispatchers.IO) {
//    runBlocking {

    val db = Firebase.firestore

//        var memberListFromStorage = mutableListOf<Member>()  // 初期化する
//            .whereEqualTo("capital", true)


    var job = GlobalScope.launch(Dispatchers.IO) {
        val querySnapshot = db.collection(groupName)
            .get().toSuspendable()

        Log.d("checker3", querySnapshot.toString())
        for (document in querySnapshot) {
            Log.d("checker3", document.id + " => " + document.data)
            // TODO: メンバーリストに追加する
            val userInfo = document.toObject(MemberPayload::class.java)

            Log.d("MainActivity", "response is $userInfo")

            var member = Member(
                name = userInfo?.name_en!!,
                name_ja = userInfo.name_ja,
                birthday = userInfo?.birthday,
                imgUrl = userInfo.img_url,
            )
            Log.d("MainActivity", userInfo.toString())

            memberListFromStorage.add(member)
        }
        Log.d("checker3", "downloader finished")

        memberListFromStorage
    }


//        return@launch memberListFromStorage


    job.join()
    return memberListFromStorage
}


suspend fun downloadMemberInfos(groupName: String){

    // TODO: ここも API から持ってくる
    val memberNames = listOf<String>(
        "iwamotorenka",
        "akimotomanatsu",
        "suzukiayane",
//        "tsutsuiayame",
//        "kitanohinako",
//        "yakubomio",
//        "yumikinao",
//        "tamuramayu",
//        "endousakura",
    )
    membersFromStorage = mutableListOf<Member>()  // 初期化する

    val db = Firebase.firestore


//    var hoge = CoroutineScope(Dispatchers.IO).async {
    for (memberName in memberNames) {
        Log.d("MainActivity", memberName);

//        KotFirestore

        val res = null
        db.collection(groupName).document(memberName).get()
            .addOnSuccessListener { document ->
//            val userImageList = document.toObject(UserImageList::class.java)
                // レスポンスのデータを、今ある class にバインドするイメージ
                Log.d("MainActivity", document.toString())
                val userInfo = document.toObject(MemberPayload::class.java)
//            val res = document.toObject<MemberPayload>
                Log.d("MainActivity", "Member name is $memberName:")
                Log.d("MainActivity", "response is $userInfo")

                var member = Member(
                    name = userInfo?.name_en!!,
                    name_ja = userInfo.name_ja,
                    birthday = userInfo?.birthday,
                    imgUrl = userInfo.img_url,
                )
                Log.d("MainActivity", userInfo.toString())

                membersFromStorage.add(member)


                if (memberName == memberNames[memberNames.size - 1]) {
                    Log.d("checker2", "Num of membersFromStorage is " + membersFromStorage.size)
//                    Log.d("checker2", membersFromStorage.toString())
                    Log.d("checker2", "Return from downloadInfo")
                }

            }.addOnFailureListener { exception ->
                Log.e("checker2", "Exception when retrieving all members infos", exception)
            }
    }

    Log.d(
        "checker",
        "[Just Before of Returns] Num of membersFromStorage is " + membersFromStorage.size
    )

    Log.d("checker2", "Return from downloadInfo")
//    return membersFromStorage
}

Mock

// Mock For Development
val mockMembers = arrayOf<Member>(
    Member(name = "renka", name_ja = "renka", birthday = "2004/02/02"),
    Member(name = "manatsu", name_ja = "renka", birthday = "1993/08/20"),
    Member(name = "ayame", name_ja = "renka", birthday = "2004/06/08"),
    Member(name = "ayane", name_ja = "renka", birthday = "1999/03/05"),
    Member(name = "hinako", name_ja = "renka", birthday = "1996/07/17"),
    Member(name = "mio", name_ja = "renka", birthday = "2002/08/14"),
    Member(name = "nao", name_ja = "renka", birthday = "1999/02/03"),
    Member(name = "mayu", name_ja = "renka", birthday = "1999/01/12"),
    Member(name = "sakura", name_ja = "renka", birthday = "1999/10/03"),
)
Clone this wiki locally