Skip to content
This repository has been archived by the owner on Jan 16, 2024. It is now read-only.

Commit

Permalink
feat: IP
Browse files Browse the repository at this point in the history
  • Loading branch information
jing332 committed Jan 11, 2024
1 parent 66afc64 commit ade891b
Show file tree
Hide file tree
Showing 21 changed files with 349 additions and 139 deletions.
1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,9 @@ android {

dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation project(":utils")

implementation 'androidx.appcompat:appcompat:1.6.1'

implementation("com.iqiyi.xcrash:xcrash-android-lib:3.0.0")

Expand Down
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
tools:ignore="UnusedAttribute">

<service
android:name=".service.AlistService"
android:name=".service.AListService"
android:exported="true"
android:foregroundServiceType="systemExempted"
tools:ignore="ExportedService" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package com.github.jing332.alistandroid.model.alist

import android.annotation.SuppressLint
import android.content.Intent
import android.util.Log
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.github.jing332.alistandroid.R
import com.github.jing332.alistandroid.app
import com.github.jing332.alistandroid.constant.LogLevel
import com.github.jing332.alistandroid.data.appDb
import com.github.jing332.alistandroid.data.entities.ServerLog
import com.github.jing332.alistandroid.data.entities.ServerLog.Companion.evalLog
import com.github.jing332.alistandroid.service.AlistService
import com.github.jing332.alistandroid.service.AListService
import com.github.jing332.alistandroid.util.FileUtils.readAllText
import com.github.jing332.alistandroid.util.StringUtils.removeAnsiCodes
import com.github.jing332.alistandroid.util.ToastUtils.longToast
Expand All @@ -24,13 +22,6 @@ import java.io.IOException
import kotlin.coroutines.coroutineContext

object AList {
const val ACTION_STATUS_CHANGED =
"com.github.jing332.alistandroid.AList.ACTION_STATUS_CHANGED"

const val TYPE_HTTP = "http"
const val TYPE_HTTPS = "https"
const val TYPE_UNIX = "unix"

private val execPath by lazy {
context.applicationInfo.nativeLibraryDir + File.separator + "libalist.so"
}
Expand All @@ -43,26 +34,8 @@ object AList {
val configPath: String
get() = "$dataPath${File.separator}config.json"

/**
* 是否有服务正在运行
*/
val hasRunning: Boolean
get() = false

fun init() {
// Alistlib.setConfigData(dataPath)
// Alistlib.setConfigDebug(BuildConfig.DEBUG)
// Alistlib.setConfigLogStd(true)

// Log.i(AlistService.TAG, "level=${level}, msg=$msg")
// appDb.serverLogDao.insert(ServerLog(level = level.toInt(), message = msg))
}

fun setAdminPassword(pwd: String) {
if (!hasRunning) {
init()
}

val log = execWithParams(
redirect = true,
params = arrayOf("admin", "set", pwd, "--data", dataPath)
Expand All @@ -71,7 +44,7 @@ object AList {
}


fun shutdown(timeout: Long = 5000L) {
fun shutdown() {
runCatching {
mProcess?.destroy()
}.onFailure {
Expand All @@ -86,7 +59,7 @@ object AList {
errorStream.bufferedReader().use {
while (coroutineContext.isActive) {
val line = it.readLine() ?: break
Log.d(AlistService.TAG, "Process errorStream: $line")
Log.d(AListService.TAG, "Process errorStream: $line")
onNewLine(line)
}
}
Expand All @@ -98,7 +71,7 @@ object AList {
inputStream.bufferedReader().use {
while (coroutineContext.isActive) {
val line = it.readLine() ?: break
Log.d(AlistService.TAG, "Process inputStream: $line")
Log.d(AListService.TAG, "Process inputStream: $line")
onNewLine(line)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ import com.github.jing332.alistandroid.model.alist.AListConfigManager
import com.github.jing332.alistandroid.ui.MainActivity
import com.github.jing332.alistandroid.ui.theme.androidColor
import com.github.jing332.alistandroid.util.ClipboardUtils
import com.github.jing332.alistandroid.util.ToastUtils.longToast
import com.github.jing332.alistandroid.util.ToastUtils.toast
import com.github.jing332.utils.NativeLib
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import splitties.systemservices.powerManager

class AlistService : Service() {
class AListService : Service() {
companion object {
const val TAG = "AlistService"
const val ACTION_SHUTDOWN =
Expand Down Expand Up @@ -75,10 +75,7 @@ class AlistService : Service() {
mWakeLock?.acquire()
}

AppConst.localBroadcast.registerReceiver(
mReceiver,
IntentFilter(AList.ACTION_STATUS_CHANGED)
)
AppConst.localBroadcast.registerReceiver(mReceiver, IntentFilter(ACTION_STATUS_CHANGED))
ContextCompat.registerReceiver(
this,
mNotificationReceiver,
Expand Down Expand Up @@ -115,7 +112,6 @@ class AlistService : Service() {
isRunning = false
withMain {
if (ret != 0) toast("code: $ret")
stopSelf()
notifyStatusChanged()
}
}
Expand All @@ -127,8 +123,8 @@ class AlistService : Service() {
@Suppress("DEPRECATION")
inner class MyReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == AList.ACTION_STATUS_CHANGED) {
if (!AList.hasRunning) {
if (intent?.action == ACTION_STATUS_CHANGED) {
if (!isRunning) {
stopForeground(true)
stopSelf()
}
Expand All @@ -138,9 +134,8 @@ class AlistService : Service() {

private fun httpAddress(): String {
val cfg = AListConfigManager.config()
// val ip = Alistlib.getOutboundIPString()
// return "http://${ip}:${cfg.scheme.httpPort}"
return "none"
val ip = NativeLib.getLocalIp()
return "http://${ip}:${cfg.scheme.httpPort}"
}

@Suppress("DEPRECATION")
Expand Down Expand Up @@ -206,7 +201,7 @@ class AlistService : Service() {
.setSmallIcon(smallIconRes)
.setContentIntent(pendingIntent)
.addAction(0, getString(R.string.shutdown), shutdownAction)
// .addAction(0, getString(R.string.copy_address), copyAddressPendingIntent)
.addAction(0, getString(R.string.copy_address), copyAddressPendingIntent)
.build()

// 前台服务
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.github.jing332.alistandroid.ui

import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import androidx.activity.viewModels
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
Expand All @@ -22,8 +20,10 @@ import com.github.jing332.alistandroid.model.ShortCuts
import com.github.jing332.alistandroid.ui.MyTools.killBattery
import com.github.jing332.alistandroid.ui.nav.BottomNavBar
import com.github.jing332.alistandroid.ui.nav.NavigationGraph
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState
import kotlinx.coroutines.launch
import splitties.systemservices.powerManager

val LocalMainViewModel = staticCompositionLocalOf<MainViewModel> {
error("No MainViewModel provided")
Expand All @@ -46,11 +46,20 @@ class MainActivity : BaseComposeActivity() {
}
}


@OptIn(ExperimentalPermissionsApi::class)
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
override fun Content() {
val scope = rememberCoroutineScope()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // A13
val notificationPermission =
rememberPermissionState(permission = Manifest.permission.POST_NOTIFICATIONS)

if (!notificationPermission.status.isGranted)
LaunchedEffect(key1 = notificationPermission) {
notificationPermission.launchPermissionRequest()
}
}

if (vm.showUpdateDialog != null) {
val data = vm.showUpdateDialog ?: return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,21 @@ import android.app.Activity
import android.content.Intent
import android.os.Bundle
import com.github.jing332.alistandroid.R
import com.github.jing332.alistandroid.model.alist.AList
import com.github.jing332.alistandroid.service.AlistService
import com.github.jing332.alistandroid.service.AListService
import com.github.jing332.alistandroid.util.ToastUtils.toast

class SwitchServerActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

if (AList.hasRunning) {
if (AListService.isRunning) {
toast(R.string.alist_shut_downing)
startService(Intent(this, AlistService::class.java).apply {
action = AlistService.ACTION_SHUTDOWN
startService(Intent(this, AListService::class.java).apply {
action = AListService.ACTION_SHUTDOWN
})
} else {
toast(R.string.alist_starting)
startService(Intent(this, AlistService::class.java))
startService(Intent(this, AListService::class.java))
}

finish()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
Expand All @@ -21,7 +20,6 @@ import androidx.compose.material.icons.automirrored.filled.Send
import androidx.compose.material.icons.filled.AddBusiness
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.filled.Password
import androidx.compose.material.icons.filled.Send
import androidx.compose.material.icons.filled.Stop
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.DropdownMenu
Expand All @@ -41,7 +39,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
Expand All @@ -54,7 +51,8 @@ import androidx.compose.ui.unit.dp
import com.github.jing332.alistandroid.BuildConfig
import com.github.jing332.alistandroid.R
import com.github.jing332.alistandroid.model.alist.AList
import com.github.jing332.alistandroid.service.AlistService
import com.github.jing332.alistandroid.service.AListService
import com.github.jing332.alistandroid.service.AListService.Companion.ACTION_STATUS_CHANGED
import com.github.jing332.alistandroid.ui.LocalMainViewModel
import com.github.jing332.alistandroid.ui.MyTools
import com.github.jing332.alistandroid.ui.SwitchServerActivity
Expand All @@ -67,16 +65,16 @@ fun AListScreen() {
val context = LocalContext.current
val mainVM = LocalMainViewModel.current
val view = LocalView.current
var alistRunning by remember { mutableStateOf(AlistService.isRunning) }
var alistRunning by remember { mutableStateOf(AListService.isRunning) }

LocalBroadcastReceiver(intentFilter = IntentFilter(AlistService.ACTION_STATUS_CHANGED)) {
if (it?.action == AList.ACTION_STATUS_CHANGED)
alistRunning = AlistService.isRunning
LocalBroadcastReceiver(intentFilter = IntentFilter(ACTION_STATUS_CHANGED)) {
if (it?.action == ACTION_STATUS_CHANGED)
alistRunning = AListService.isRunning
}

fun switch() {
context.startService(Intent(context, AlistService::class.java).apply {
action = if (alistRunning) AlistService.ACTION_SHUTDOWN else ""
context.startService(Intent(context, AListService::class.java).apply {
action = if (alistRunning) AListService.ACTION_SHUTDOWN else ""
})
alistRunning = !alistRunning
}
Expand Down
Loading

0 comments on commit ade891b

Please sign in to comment.