1+ package com.rabimi.javaskinchanger
12
3+ import android.app.Activity
4+ import android.content.Context
5+ import android.content.Intent
6+ import android.graphics.Bitmap
7+ import android.graphics.BitmapFactory
8+ import android.os.Bundle
9+ import android.view.LayoutInflater
10+ import android.view.View
11+ import android.view.ViewGroup
12+ import android.widget.ImageButton
13+ import android.widget.ImageView
14+ import androidx.appcompat.app.AppCompatActivity
15+ import androidx.recyclerview.widget.GridLayoutManager
16+ import androidx.recyclerview.widget.RecyclerView
17+ import java.io.File
18+ import java.io.FileOutputStream
19+
20+ class SkinLibraryActivity : AppCompatActivity () {
21+
22+ companion object {
23+ const val RESULT_SKIN_BITMAP = " result_skin_bitmap"
24+ const val EXTRA_CURRENT_SKIN = " extra_current_skin"
25+ }
26+
27+ private lateinit var recyclerView: RecyclerView
28+ private lateinit var adapter: SkinAdapter
29+ private lateinit var btnAddCurrent: ImageButton
30+ private val skinFiles = mutableListOf<File >()
31+
32+ override fun onCreate (savedInstanceState : Bundle ? ) {
33+ super .onCreate(savedInstanceState)
34+ setContentView(R .layout.activity_library)
35+
36+ recyclerView = findViewById(R .id.recyclerViewSkins)
37+ recyclerView.layoutManager = GridLayoutManager (this , 4 )
38+
39+ btnAddCurrent = findViewById(R .id.btnAddCurrentSkin)
40+
41+ loadLibrary()
42+ adapter = SkinAdapter (skinFiles.map { it.absolutePath }) { path ->
43+ val bmp = BitmapFactory .decodeFile(path)
44+ val resized = Bitmap .createScaledBitmap(bmp, 64 , 64 , true )
45+ val intent = Intent ().apply {
46+ putExtra(RESULT_SKIN_BITMAP , bmpToByteArray(resized))
47+ }
48+ setResult(Activity .RESULT_OK , intent)
49+ finish()
50+ }
51+ recyclerView.adapter = adapter
52+
53+ btnAddCurrent.setOnClickListener {
54+ val bytes = intent.getByteArrayExtra(EXTRA_CURRENT_SKIN ) ? : return @setOnClickListener
55+ val bmp = BitmapFactory .decodeByteArray(bytes, 0 , bytes.size)
56+ saveSkinToLibrary(bmp)
57+ }
58+ }
59+
60+ private fun loadLibrary () {
61+ val dir = getDir(" skin_library" , Context .MODE_PRIVATE )
62+ skinFiles.clear()
63+ skinFiles.addAll(dir.listFiles()?.toList() ? : emptyList())
64+ }
65+
66+ private fun saveSkinToLibrary (bitmap : Bitmap ) {
67+ val dir = getDir(" skin_library" , Context .MODE_PRIVATE )
68+ val file = File (dir, " skin_${System .currentTimeMillis()} .png" )
69+ FileOutputStream (file).use { out ->
70+ bitmap.compress(Bitmap .CompressFormat .PNG , 100 , out )
71+ }
72+ skinFiles.add(file)
73+ adapter.updateData(skinFiles.map { it.absolutePath })
74+ }
75+
76+ private fun bmpToByteArray (bitmap : Bitmap ): ByteArray {
77+ val baos = java.io.ByteArrayOutputStream ()
78+ bitmap.compress(Bitmap .CompressFormat .PNG , 100 , baos)
79+ return baos.toByteArray()
80+ }
81+ }
0 commit comments