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(R.id.txt_session_id).text = "new:"+sessionProfile.id }else { findViewById(R.id.txt_session_id).text = sessionProfile.id } editName = findViewById(R.id.edit_name) findViewById(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(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 ) } 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(R.id.btn_save).setOnClickListener { saveSessionProfile() } findViewById(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 { 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() } } }