Skip to content

Commit 9064af7

Browse files
authored
Update MainActivity.kt
1 parent 995ee7c commit 9064af7

File tree

1 file changed

+13
-34
lines changed

1 file changed

+13
-34
lines changed

app/src/main/java/com/rabimi/javaskinchanger/MainActivity.kt

Lines changed: 13 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.rabimi.javaskinchanger
22

3-
import com.rabimi.javaskinchanger.render.Skin3DApp
43
import android.app.Activity
54
import android.content.Intent
65
import android.content.res.ColorStateList
@@ -11,8 +10,6 @@ import android.provider.MediaStore
1110
import android.view.View
1211
import android.widget.*
1312
import androidx.appcompat.app.AlertDialog
14-
import com.badlogic.gdx.backends.android.AndroidApplication
15-
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration
1613
import com.google.android.material.switchmaterial.SwitchMaterial
1714
import kotlinx.coroutines.*
1815
import org.json.JSONObject
@@ -21,7 +18,7 @@ import java.io.DataOutputStream
2118
import java.net.HttpURLConnection
2219
import java.net.URL
2320

24-
class MainActivity : AndroidApplication() {
21+
class MainActivity : Activity() {
2522

2623
companion object { private const val TAG = "SkinDebug" }
2724

@@ -33,11 +30,11 @@ class MainActivity : AndroidApplication() {
3330
private lateinit var switchModel: SwitchMaterial
3431
private lateinit var lblModel: TextView
3532
private lateinit var progressBar: ProgressBar
33+
private lateinit var skinView: ImageView
3634

37-
private lateinit var skinApp: Skin3DApp
3835
private val REQUEST_SKIN_PICK = 1001
3936
private var currentSkinBitmap: Bitmap? = null
40-
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main) // UI を使うことが多いので Main をベースにする
37+
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
4138

4239
private val colorSelect = 0xFF4FC3F7.toInt()
4340
private val colorUploadTarget = 0xFF4CAF50.toInt()
@@ -55,12 +52,7 @@ class MainActivity : AndroidApplication() {
5552
switchModel = findViewById(R.id.switchModel)
5653
lblModel = findViewById(R.id.lblModel)
5754
progressBar = findViewById(R.id.progressBar)
58-
59-
val container = findViewById<FrameLayout>(R.id.skinContainer)
60-
skinApp = Skin3DApp()
61-
val config = AndroidApplicationConfiguration()
62-
val gdxView = initializeForView(skinApp, config)
63-
container.addView(gdxView, FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT))
55+
skinView = findViewById(R.id.imgSkin) // ← ここを ImageView に修正
6456

6557
setupUI()
6658
checkLogin()
@@ -75,8 +67,7 @@ class MainActivity : AndroidApplication() {
7567

7668
switchModel.setOnCheckedChangeListener { _, isChecked ->
7769
lblModel.text = if (isChecked) "モデル: Alex" else "モデル: Steve"
78-
skinApp.setModelType(if (isChecked) "slim" else "classic")
79-
currentSkinBitmap?.let { skinApp.updateSkin(it) }
70+
currentSkinBitmap?.let { skinView.setImageBitmap(it) }
8071
}
8172

8273
btnSelect.setOnClickListener { selectSkinImage() }
@@ -104,25 +95,22 @@ class MainActivity : AndroidApplication() {
10495
}
10596

10697
private fun loadAccountSkinOrTest() {
107-
// すでに選ばれているスキンがあればそれを優先
10898
if (currentSkinBitmap != null) {
109-
skinApp.updateSkin(currentSkinBitmap!!)
99+
skinView.setImageBitmap(currentSkinBitmap)
110100
return
111101
}
112102

113103
val prefs = getSharedPreferences("prefs", MODE_PRIVATE)
114104
val mcToken = prefs.getString("minecraft_token", null) ?: return
115105

116-
// Coroutine 内でネットワーク IO を行う(fetchMinecraftSkin は suspend)
117106
scope.launch {
118-
val skinBitmap = fetchMinecraftSkin(mcToken) // suspend safe
107+
val skinBitmap = fetchMinecraftSkin(mcToken)
119108
val bmp = skinBitmap ?: Bitmap.createBitmap(64, 64, Bitmap.Config.ARGB_8888).apply { eraseColor(0xFFFF0000.toInt()) }
120109
currentSkinBitmap = bmp
121-
skinApp.updateSkin(bmp)
110+
skinView.setImageBitmap(bmp)
122111
}
123112
}
124113

125-
// suspend にして IO スレッドで安全に動くようにする
126114
private suspend fun fetchMinecraftSkin(token: String): Bitmap? = withContext(Dispatchers.IO) {
127115
try {
128116
val url = URL("https://api.minecraftservices.com/minecraft/profile")
@@ -134,9 +122,8 @@ class MainActivity : AndroidApplication() {
134122
val resp = conn.inputStream.bufferedReader().use { it.readText() }
135123
val json = JSONObject(resp)
136124

137-
// JSON の構造が変わる可能性があるので安全に取り出す
138-
val skins = json.optJSONArray("skins")
139-
if (skins == null || skins.length() == 0) return@withContext null
125+
val skins = json.optJSONArray("skins") ?: return@withContext null
126+
if (skins.length() == 0) return@withContext null
140127
val skinUrl = skins.getJSONObject(0).optString("url", null) ?: return@withContext null
141128

142129
val skinConn = URL(skinUrl).openConnection() as HttpURLConnection
@@ -164,7 +151,7 @@ class MainActivity : AndroidApplication() {
164151
val orig = MediaStore.Images.Media.getBitmap(contentResolver, uri)
165152
val bmp = Bitmap.createScaledBitmap(orig.copy(Bitmap.Config.ARGB_8888, true), 64, 64, true)
166153
currentSkinBitmap = bmp
167-
skinApp.updateSkin(bmp)
154+
skinView.setImageBitmap(bmp)
168155

169156
btnUpload.visibility = View.VISIBLE
170157
btnUpload.backgroundTintList = ColorStateList.valueOf(colorUploadTarget)
@@ -192,25 +179,18 @@ class MainActivity : AndroidApplication() {
192179
progressBar.visibility = View.VISIBLE
193180
progressBar.progress = 0
194181

195-
// uploadSkin は suspend なので coroutine 内で呼ぶ
196182
scope.launch {
197183
val success = uploadSkin(mcToken, bmp, modelType) { progress ->
198-
// MainScope なので直接 UI 更新可能
199184
progressBar.progress = progress
200185
}
201186

202-
// アップロード完了/失敗の処理
203187
progressBar.visibility = View.GONE
204-
Toast.makeText(
205-
this@MainActivity,
188+
Toast.makeText(this@MainActivity,
206189
if (success) "アップロード完了" else "アップロード失敗",
207-
Toast.LENGTH_SHORT
208-
).show()
190+
Toast.LENGTH_SHORT).show()
209191
}
210192
}
211193

212-
213-
// suspend 化して IO で実行するようにした(進捗コールバックは保持)
214194
private suspend fun uploadSkin(token: String, bmp: Bitmap, model: String, onProgress: (Int) -> Unit): Boolean =
215195
withContext(Dispatchers.IO) {
216196
try {
@@ -255,7 +235,6 @@ class MainActivity : AndroidApplication() {
255235
out.flush()
256236
out.close()
257237

258-
// 応答を読みつつ終了コードを確認
259238
conn.inputStream.use { it.readBytes() }
260239
val rc = conn.responseCode
261240
rc in 200..299

0 commit comments

Comments
 (0)