package com.shsening.autouploadvideos
|
|
import CookieHelper
|
import CookieHelper.saveSessionProfileUrlCookies
|
import Profile
|
import SessionProfile
|
import SessionProfileManager
|
import android.app.Activity
|
import android.content.Intent
|
import android.os.Bundle
|
import android.util.Log
|
import android.view.View
|
import android.webkit.CookieManager
|
import android.webkit.WebChromeClient
|
import android.webkit.WebView
|
import android.webkit.WebViewClient
|
import android.widget.ArrayAdapter
|
import android.widget.EditText
|
import android.widget.LinearLayout
|
import android.widget.ProgressBar
|
import android.widget.Spinner
|
import android.widget.Switch
|
import android.widget.TextView
|
import android.widget.Toast
|
import androidx.appcompat.app.AppCompatActivity
|
import java.util.UUID
|
|
|
class SessionProfileActivity : AppCompatActivity() {
|
|
private lateinit var sessionProfileManager: SessionProfileManager
|
private lateinit var sessionProfile: SessionProfile
|
private val appConfigItems = AppConfig.SESSION_PROFILE_PALTFORM_LISTS // 获取平台信息列表
|
private lateinit var editName: EditText
|
private lateinit var spinnerType: Spinner
|
private lateinit var switchContainer: LinearLayout
|
private lateinit var sessionProfileWebView:SessionProfileWebView
|
|
private var isNewSessionProfile:Boolean = false;
|
|
private lateinit var progressBar: ProgressBar
|
|
private lateinit var activityReference: SessionProfileActivity
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
setContentView(R.layout.activity_session_profile)
|
activityReference = this
|
|
// 获取传入的 SessionProfile
|
sessionProfile = intent.getSerializableExtra("sessionProfile") as? SessionProfile
|
?: SessionProfile(
|
id = "",
|
name = "",
|
type = 0,
|
lastUploadTime = "",
|
profiles = mutableListOf()
|
)
|
|
if (sessionProfile.id == ""){
|
isNewSessionProfile = true
|
sessionProfile.id = UUID.randomUUID().toString().replace("-", "")
|
findViewById<TextView>(R.id.txt_session_id).text = "new:"+sessionProfile.id
|
}else {
|
findViewById<TextView>(R.id.txt_session_id).text = sessionProfile.id
|
}
|
|
editName = findViewById(R.id.edit_name)
|
findViewById<TextView>(R.id.edit_name).text = sessionProfile.name
|
|
spinnerType = findViewById(R.id.spinner_type)
|
spinnerType.adapter = ArrayAdapter(
|
this,
|
android.R.layout.simple_spinner_item,
|
AppConfig.SESSION_PROFILE_TYPE.values.toList()
|
)
|
spinnerType.setSelection(sessionProfile.type)
|
|
switchContainer = findViewById(R.id.switch_container)
|
setupSwitches()
|
|
// 初始化 SessionProfileManager
|
sessionProfileManager = SessionProfileManager(this)
|
|
progressBar = findViewById(R.id.progressBar)
|
sessionProfileWebView = findViewById<SessionProfileWebView>(R.id.sessionProfileWebView)
|
sessionProfileWebView.setInitialScale(75) // 初始缩放比例
|
sessionProfileWebView.isFocusableInTouchMode = true
|
try{
|
Log.e("shsening", sessionProfile.id)
|
|
Log.e("shsening", CookieManager.getInstance().getCookie(AppConfig.URL_UPLOAD_SERVER_DOUYIN))
|
|
}catch(e:Exception){
|
Log.e("shsening", "there is no cookie founded")
|
|
}
|
sessionProfileWebView.loadSessionProfileCookies(sessionProfile.id)
|
try{
|
Log.e("shsening", CookieManager.getInstance().getCookie(AppConfig.URL_UPLOAD_SERVER_DOUYIN))
|
|
}catch(e:Exception){
|
Log.e("shsening", "there is no cookie founded")
|
|
}
|
sessionProfileWebView.webViewClient = object : WebViewClient() {
|
|
override fun onPageStarted(
|
view: WebView?,
|
url: String?,
|
favicon: android.graphics.Bitmap?
|
) {
|
super.onPageStarted(view, url, favicon)
|
progressBar.visibility = View.VISIBLE
|
}
|
override fun onPageFinished(view: WebView?, url: String?) {
|
super.onPageFinished(view, url)
|
progressBar.visibility = View.GONE
|
url?.let{
|
Log.e("shsening", url)
|
try {
|
val cookies = CookieManager.getInstance().getCookie(url)
|
if (cookies != null) {
|
CookieHelper.saveSessionProfileUrlCookies(
|
activityReference,
|
sessionProfile.id,
|
url,
|
cookies
|
)
|
} else {
|
Log.w("shsening", "No cookies found for URL: $url")
|
}
|
} catch (e: java.lang.Exception) {
|
Log.e("CookieHelper", "Failed to get cookies: ", e)
|
}
|
}
|
}
|
}
|
sessionProfileWebView.webChromeClient = object : WebChromeClient() {
|
override fun onShowCustomView(view: View?, callback: CustomViewCallback?) {
|
super.onShowCustomView(view, callback)
|
view?.requestFocus()
|
}
|
}
|
// 保存按钮的监听
|
findViewById<TextView>(R.id.btn_save).setOnClickListener {
|
saveSessionProfile()
|
}
|
findViewById<TextView>(R.id.btn_back).setOnClickListener {
|
finish()
|
}
|
}
|
|
|
private fun setupSwitches() {
|
switchContainer.removeAllViews()
|
|
// 创建一个水平的 LinearLayout
|
var horizontalLayout: LinearLayout? = null
|
|
// 遍历从 AppConfig 获取的所有平台项目
|
for ((index, platform) in appConfigItems.withIndex()) {
|
if (index % 2 == 0) {
|
// 每两项创建一个新的水平布局
|
horizontalLayout = LinearLayout(this).apply {
|
orientation = LinearLayout.HORIZONTAL
|
layoutParams = LinearLayout.LayoutParams(
|
LinearLayout.LayoutParams.MATCH_PARENT,
|
LinearLayout.LayoutParams.WRAP_CONTENT
|
)
|
}
|
}
|
|
val switchView:Switch = Switch(this).apply {
|
text = platform.name
|
val existingProfile = sessionProfile.profiles.find { it.name == platform.name }
|
isChecked = existingProfile?.status ?: false
|
isEnabled = platform.enabled
|
|
// 开关监听器
|
setOnCheckedChangeListener { _, isChecked ->
|
if (existingProfile != null) {
|
existingProfile.status = isChecked
|
} else {
|
sessionProfile.addOrUpdateProfile(Profile(name = platform.name, status = isChecked))
|
}
|
if (isChecked) {
|
//sessionProfileWebView.loadSessionProfileCookies(sessionProfile.id)
|
sessionProfileWebView.loadUrl(platform.url)
|
}
|
}
|
layoutParams = LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f).apply {
|
marginStart = 8
|
marginEnd = 8
|
}
|
}
|
|
// 添加 Switch 到水平布局
|
horizontalLayout?.addView(switchView)
|
|
// 如果是偶数索引或者最后一个项目,添加水平布局到主容器
|
if (index % 2 == 1 || index == appConfigItems.size - 1) {
|
switchContainer.addView(horizontalLayout)
|
}
|
}
|
}
|
|
private fun saveSessionProfile() {
|
try {
|
CookieHelper.saveSessionCookies(this,sessionProfile.id)
|
val name = editName.text.toString().trim() // 获取输入的名称
|
if (name.isEmpty()) {
|
Toast.makeText(this, "Name cannot be empty!", Toast.LENGTH_SHORT).show()
|
return
|
}
|
if (isNewSessionProfile and sessionProfileManager.checkProfileNameExist(name)){
|
Toast.makeText(this, "Name already exist !", Toast.LENGTH_SHORT).show()
|
return // 不保存
|
}
|
sessionProfile.name = name
|
sessionProfile.type = spinnerType.selectedItemPosition
|
sessionProfileManager.addOrUpdateSessionProfile(sessionProfile)
|
sessionProfileManager.saveToFile()
|
|
Toast.makeText(this, "Session profile saved", Toast.LENGTH_SHORT).show()
|
setResult(Activity.RESULT_OK, Intent())
|
finish()
|
}catch (e:Exception){
|
e.printStackTrace()
|
}
|
}
|
}
|