add setting show extension
This commit is contained in:
parent
2190a509ef
commit
9d724496c0
16 changed files with 206 additions and 101 deletions
|
@ -4,10 +4,10 @@
|
||||||
<selectionStates>
|
<selectionStates>
|
||||||
<SelectionState runConfigName="app">
|
<SelectionState runConfigName="app">
|
||||||
<option name="selectionMode" value="DROPDOWN" />
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
<DropdownSelection timestamp="2024-10-09T05:47:14.530453572Z">
|
<DropdownSelection timestamp="2024-10-11T03:45:10.780689385Z">
|
||||||
<Target type="DEFAULT_BOOT">
|
<Target type="DEFAULT_BOOT">
|
||||||
<handle>
|
<handle>
|
||||||
<DeviceId pluginId="LocalEmulator" identifier="path=/home/kagura/.android/avd/Pixel_6_API_33.avd" />
|
<DeviceId pluginId="LocalEmulator" identifier="path=/home/kagura/.android/avd/Pixel_3_API_30.avd" />
|
||||||
</handle>
|
</handle>
|
||||||
</Target>
|
</Target>
|
||||||
</DropdownSelection>
|
</DropdownSelection>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
<option name="testRunner" value="CHOOSE_PER_TEST" />
|
<option name="testRunner" value="CHOOSE_PER_TEST" />
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
<option name="gradleJvm" value="#JAVA_HOME" />
|
<option name="gradleJvm" value="jbr-17" />
|
||||||
<option name="modules">
|
<option name="modules">
|
||||||
<set>
|
<set>
|
||||||
<option value="$PROJECT_DIR$" />
|
<option value="$PROJECT_DIR$" />
|
||||||
|
|
|
@ -1,16 +1,135 @@
|
||||||
package com.example.myapplication.compose
|
package com.example.myapplication.compose
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
|
import androidx.compose.foundation.Image
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.Row
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.navigationBarsPadding
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.statusBarsPadding
|
||||||
|
import androidx.compose.material3.IconButton
|
||||||
|
import androidx.compose.material3.Surface
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.res.vectorResource
|
||||||
|
import androidx.compose.ui.text.TextStyle
|
||||||
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import com.example.myapplication.R
|
||||||
|
import com.example.myapplication.SettingStorage
|
||||||
|
import com.example.myapplication.compose.ui.Setting
|
||||||
|
import com.example.myapplication.main_page
|
||||||
|
|
||||||
class SettingActivity : ComponentActivity() {
|
class SettingActivity : ComponentActivity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
|
val setting = Setting(
|
||||||
|
rowModifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(horizontal = 20.dp, vertical = 10.dp),
|
||||||
|
nameTextStyle = TextStyle(
|
||||||
|
fontSize = 24.sp,
|
||||||
|
fontWeight = FontWeight(400),
|
||||||
|
fontFamily = FontFamily.SansSerif
|
||||||
|
),
|
||||||
|
descriptionModifier = Modifier.padding(start = 2.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
val settingStorage = SettingStorage(this)
|
||||||
|
val context = this
|
||||||
|
|
||||||
setContent {
|
setContent {
|
||||||
|
Surface(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.background(Color(getColor(R.color.WhiteSmoke)))
|
||||||
|
.statusBarsPadding()
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(horizontal = 10.dp, vertical = 10.dp),
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
IconButton(
|
||||||
|
onClick = {
|
||||||
|
val intent = Intent(
|
||||||
|
context,
|
||||||
|
main_page::class.java
|
||||||
|
)
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
||||||
|
context.startActivity(intent)
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Image(
|
||||||
|
imageVector = ImageVector.vectorResource(R.drawable.ic_left_arrow), "back"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = getString(R.string.settings),
|
||||||
|
fontSize = 30.sp,
|
||||||
|
modifier = Modifier
|
||||||
|
.padding(start = 10.dp)
|
||||||
|
.fillMaxWidth(0.75f),
|
||||||
|
maxLines = 1,
|
||||||
|
overflow = TextOverflow.Ellipsis
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
setting.BooleanSetting(
|
||||||
|
name = ContextCompat.getString(context, R.string.setting_show_extension),
|
||||||
|
description = ContextCompat.getString(
|
||||||
|
context,
|
||||||
|
R.string.setting_show_extension_description
|
||||||
|
),
|
||||||
|
initialState = settingStorage.get(settingStorage.showExtension) ?: true
|
||||||
|
) { settingStorage.set(settingStorage.showExtension, it) }
|
||||||
|
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = stringResource(R.string.about),
|
||||||
|
fontSize = 18.sp,
|
||||||
|
color = Color.Gray,
|
||||||
|
modifier = Modifier.padding(start = 10.dp)
|
||||||
|
)
|
||||||
|
setting.BooleanSetting(
|
||||||
|
name = "作者",
|
||||||
|
description = "B22040723 舒乔嘉祺\nB22040721 黄译",
|
||||||
|
initialState = null
|
||||||
|
) { }
|
||||||
|
setting.BooleanSetting(
|
||||||
|
name = "系统信息",
|
||||||
|
description = "Android 版本:${Build.VERSION.RELEASE}\n手机型号: ${Build.MANUFACTURER} ${Build.MODEL}",
|
||||||
|
initialState = null
|
||||||
|
) { }
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.navigationBarsPadding())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,7 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import com.example.myapplication.R
|
import com.example.myapplication.R
|
||||||
|
import com.example.myapplication.SettingStorage
|
||||||
import com.example.myapplication.compose.PasteHelper
|
import com.example.myapplication.compose.PasteHelper
|
||||||
import com.example.myapplication.fileSystem.CutHelper
|
import com.example.myapplication.fileSystem.CutHelper
|
||||||
import com.example.myapplication.fileSystem.WrappedFile
|
import com.example.myapplication.fileSystem.WrappedFile
|
||||||
|
@ -72,6 +73,7 @@ import java.io.FileNotFoundException
|
||||||
|
|
||||||
class FileColumn(val context: Context) {
|
class FileColumn(val context: Context) {
|
||||||
private val fileList = mutableStateListOf<WrappedFile>()
|
private val fileList = mutableStateListOf<WrappedFile>()
|
||||||
|
private val settingStorage = SettingStorage(context)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Draw(startFolder: String) {
|
fun Draw(startFolder: String) {
|
||||||
|
@ -132,7 +134,8 @@ class FileColumn(val context: Context) {
|
||||||
Text(
|
Text(
|
||||||
text = path,
|
text = path,
|
||||||
fontSize = 24.sp,
|
fontSize = 24.sp,
|
||||||
modifier = Modifier.padding(start = 10.dp)
|
modifier = Modifier
|
||||||
|
.padding(start = 10.dp)
|
||||||
.fillMaxWidth(0.75f),
|
.fillMaxWidth(0.75f),
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis
|
overflow = TextOverflow.Ellipsis
|
||||||
|
@ -526,13 +529,21 @@ class FileColumn(val context: Context) {
|
||||||
.fillMaxWidth(0.8f)
|
.fillMaxWidth(0.8f)
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = forceName ?: file.name,
|
text = forceName ?: if (settingStorage.get(settingStorage.showExtension) == false || file.type == Type.DIRECTORY){
|
||||||
|
file.nameWithoutExt
|
||||||
|
}else{
|
||||||
|
file.name
|
||||||
|
},
|
||||||
fontSize = 24.sp,
|
fontSize = 24.sp,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
overflow = TextOverflow.Ellipsis
|
overflow = TextOverflow.Ellipsis
|
||||||
)
|
)
|
||||||
Text(
|
Text(
|
||||||
text = forceParent ?: file.getModifiedTimeString(context),
|
text = forceParent ?: if (file.type == Type.FILE){
|
||||||
|
"${file.getModifiedTimeString(context)} ${file.getSizeString()}"
|
||||||
|
}else{
|
||||||
|
file.getModifiedTimeString(context)
|
||||||
|
},
|
||||||
fontSize = 15.sp,
|
fontSize = 15.sp,
|
||||||
color = Color.Gray,
|
color = Color.Gray,
|
||||||
maxLines = 1
|
maxLines = 1
|
||||||
|
|
|
@ -29,7 +29,7 @@ class Setting(
|
||||||
@Composable
|
@Composable
|
||||||
fun BooleanSetting(
|
fun BooleanSetting(
|
||||||
name: String,
|
name: String,
|
||||||
initialState: Boolean = true,
|
initialState: Boolean? = true,
|
||||||
description: String? = null,
|
description: String? = null,
|
||||||
onCheckedChange: ((Boolean) -> Unit)? = null
|
onCheckedChange: ((Boolean) -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
|
@ -55,8 +55,9 @@ class Setting(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
|
if (checkState != null) {
|
||||||
Switch(
|
Switch(
|
||||||
checked = checkState,
|
checked = checkState!!,
|
||||||
onCheckedChange = {
|
onCheckedChange = {
|
||||||
checkState = it
|
checkState = it
|
||||||
onCheckedChange?.invoke(it)
|
onCheckedChange?.invoke(it)
|
||||||
|
@ -66,3 +67,4 @@ class Setting(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
|
@ -19,8 +19,8 @@ import androidx.core.content.FileProvider
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsCompat.Type
|
import androidx.core.view.WindowInsetsCompat.Type
|
||||||
import com.example.myapplication.adapters.DocumentAdapter
|
import com.example.myapplication.fileSystem.adapters.DocumentAdapter
|
||||||
import com.example.myapplication.adapters.DocumentModel
|
import com.example.myapplication.fileSystem.adapters.DocumentModel
|
||||||
import com.example.myapplication.compose.SearchActivity
|
import com.example.myapplication.compose.SearchActivity
|
||||||
import com.example.myapplication.fileSystem.CutHelper
|
import com.example.myapplication.fileSystem.CutHelper
|
||||||
import com.example.myapplication.fileSystem.byTypeFileLister.DocumentLister.Companion.instance
|
import com.example.myapplication.fileSystem.byTypeFileLister.DocumentLister.Companion.instance
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.example.myapplication.adapters
|
package com.example.myapplication.fileSystem.adapters
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -7,10 +7,12 @@ import android.view.ViewGroup
|
||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.example.myapplication.R
|
import com.example.myapplication.R
|
||||||
|
import com.example.myapplication.SettingStorage
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class DocumentModel(document: File) {
|
class DocumentModel(document: File) {
|
||||||
val name: String = document.name
|
val name: String = document.name
|
||||||
|
val nameWithoutExt: String = document.nameWithoutExtension
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (!document.isFile) {
|
if (!document.isFile) {
|
||||||
|
@ -21,13 +23,19 @@ class DocumentModel(document: File) {
|
||||||
|
|
||||||
class DocumentAdapter(context: Context, list: ArrayList<DocumentModel>) :
|
class DocumentAdapter(context: Context, list: ArrayList<DocumentModel>) :
|
||||||
ArrayAdapter<DocumentModel>(context, 0, list) {
|
ArrayAdapter<DocumentModel>(context, 0, list) {
|
||||||
|
private val settingStorage = SettingStorage(context)
|
||||||
|
private val showExtension = settingStorage.get(settingStorage.showExtension)
|
||||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||||
val listView = convertView ?: LayoutInflater.from(context).inflate(
|
val listView = convertView ?: LayoutInflater.from(context).inflate(
|
||||||
R.layout.document_card_item, parent, false
|
R.layout.document_card_item, parent, false
|
||||||
)
|
)
|
||||||
val model = getItem(position) ?: throw RuntimeException()
|
val model = getItem(position) ?: throw RuntimeException()
|
||||||
val card = listView.findViewById<TextView>(R.id.iconButton)
|
val card = listView.findViewById<TextView>(R.id.iconButton)
|
||||||
card.text = model.name
|
card.text = if (showExtension != false) {
|
||||||
|
model.name
|
||||||
|
} else {
|
||||||
|
model.nameWithoutExt
|
||||||
|
}
|
||||||
return listView
|
return listView
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package com.example.myapplication.adapters
|
package com.example.myapplication.fileSystem.adapters
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
|
@ -13,11 +13,13 @@ import android.widget.GridView
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.example.myapplication.R
|
import com.example.myapplication.R
|
||||||
|
import com.example.myapplication.SettingStorage
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class ImageModel(image: File) {
|
class ImageModel(image: File) {
|
||||||
val name: String = image.name
|
val name: String = image.name
|
||||||
var thumbnail: Bitmap
|
var thumbnail: Bitmap
|
||||||
|
val nameWithoutExt: String = image.nameWithoutExtension
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (!image.isFile) {
|
if (!image.isFile) {
|
||||||
|
@ -29,13 +31,19 @@ class ImageModel(image: File) {
|
||||||
|
|
||||||
class ImageAdapter(context: Context, list: ArrayList<ImageModel>) :
|
class ImageAdapter(context: Context, list: ArrayList<ImageModel>) :
|
||||||
ArrayAdapter<ImageModel>(context, 0, list) {
|
ArrayAdapter<ImageModel>(context, 0, list) {
|
||||||
|
private val settingStorage = SettingStorage(context)
|
||||||
|
private val showExtension = settingStorage.get(settingStorage.showExtension)
|
||||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||||
val listView = convertView ?: LayoutInflater.from(context).inflate(
|
val listView = convertView ?: LayoutInflater.from(context).inflate(
|
||||||
R.layout.picture_card_item, parent, false
|
R.layout.picture_card_item, parent, false
|
||||||
)
|
)
|
||||||
val model = getItem(position) ?: throw RuntimeException()
|
val model = getItem(position) ?: throw RuntimeException()
|
||||||
listView.findViewById<ImageView>(R.id.pictureCardImage).setImageBitmap(model.thumbnail)
|
listView.findViewById<ImageView>(R.id.pictureCardImage).setImageBitmap(model.thumbnail)
|
||||||
listView.findViewById<TextView>(R.id.pictureCardText).text = model.name
|
listView.findViewById<TextView>(R.id.pictureCardText).text = if (showExtension != false) {
|
||||||
|
model.name
|
||||||
|
} else {
|
||||||
|
model.nameWithoutExt
|
||||||
|
}
|
||||||
listView.setLayoutParams(LayoutParams(GridView.AUTO_FIT, 530))
|
listView.setLayoutParams(LayoutParams(GridView.AUTO_FIT, 530))
|
||||||
|
|
||||||
return listView
|
return listView
|
|
@ -1,4 +1,4 @@
|
||||||
package com.example.myapplication.adapters
|
package com.example.myapplication.fileSystem.adapters
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -7,10 +7,12 @@ import android.view.ViewGroup
|
||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.example.myapplication.R
|
import com.example.myapplication.R
|
||||||
|
import com.example.myapplication.SettingStorage
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class MusicModel(music: File) {
|
class MusicModel(music: File) {
|
||||||
val name: String = music.nameWithoutExtension // 歌曲就不放扩展名了
|
val name: String = music.nameWithoutExtension // 歌曲就不放扩展名了
|
||||||
|
val nameWithoutExt: String = music.nameWithoutExtension
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (!music.isFile) {
|
if (!music.isFile) {
|
||||||
|
@ -21,13 +23,19 @@ class MusicModel(music: File) {
|
||||||
|
|
||||||
class MusicAdapter(context: Context, list: ArrayList<MusicModel>) :
|
class MusicAdapter(context: Context, list: ArrayList<MusicModel>) :
|
||||||
ArrayAdapter<MusicModel>(context, 0, list) {
|
ArrayAdapter<MusicModel>(context, 0, list) {
|
||||||
|
private val settingStorage = SettingStorage(context)
|
||||||
|
private val showExtension = settingStorage.get(settingStorage.showExtension)
|
||||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||||
val listView = convertView ?: LayoutInflater.from(context).inflate(
|
val listView = convertView ?: LayoutInflater.from(context).inflate(
|
||||||
R.layout.music_card_item, parent, false
|
R.layout.music_card_item, parent, false
|
||||||
)
|
)
|
||||||
val model = getItem(position) ?: throw RuntimeException()
|
val model = getItem(position) ?: throw RuntimeException()
|
||||||
val card = listView.findViewById<TextView>(R.id.iconButton)
|
val card = listView.findViewById<TextView>(R.id.iconButton)
|
||||||
card.text = model.name
|
card.text = if (showExtension != false) {
|
||||||
|
model.name
|
||||||
|
} else {
|
||||||
|
model.nameWithoutExt
|
||||||
|
}
|
||||||
return listView
|
return listView
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package com.example.myapplication.adapters
|
package com.example.myapplication.fileSystem.adapters
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
|
@ -13,11 +13,13 @@ import android.widget.GridView
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.example.myapplication.R
|
import com.example.myapplication.R
|
||||||
|
import com.example.myapplication.SettingStorage
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class VideoModel(video: File) {
|
class VideoModel(video: File) {
|
||||||
val name: String = video.name
|
val name: String = video.name
|
||||||
var thumbnail: Bitmap
|
var thumbnail: Bitmap
|
||||||
|
val nameWithoutExt: String = video.nameWithoutExtension
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (!video.isFile) {
|
if (!video.isFile) {
|
||||||
|
@ -32,13 +34,19 @@ class VideoModel(video: File) {
|
||||||
|
|
||||||
class VideoAdapter(context: Context, list: ArrayList<VideoModel>) :
|
class VideoAdapter(context: Context, list: ArrayList<VideoModel>) :
|
||||||
ArrayAdapter<VideoModel>(context, 0, list) {
|
ArrayAdapter<VideoModel>(context, 0, list) {
|
||||||
|
private val settingStorage = SettingStorage(context)
|
||||||
|
private val showExtension = settingStorage.get(settingStorage.showExtension)
|
||||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||||
val listView = convertView ?: LayoutInflater.from(context).inflate(
|
val listView = convertView ?: LayoutInflater.from(context).inflate(
|
||||||
R.layout.picture_card_item, parent, false
|
R.layout.picture_card_item, parent, false
|
||||||
)
|
)
|
||||||
val model = getItem(position) ?: throw RuntimeException()
|
val model = getItem(position) ?: throw RuntimeException()
|
||||||
listView.findViewById<ImageView>(R.id.pictureCardImage).setImageBitmap(model.thumbnail)
|
listView.findViewById<ImageView>(R.id.pictureCardImage).setImageBitmap(model.thumbnail)
|
||||||
listView.findViewById<TextView>(R.id.pictureCardText).text = model.name
|
listView.findViewById<TextView>(R.id.pictureCardText).text = if (showExtension != false) {
|
||||||
|
model.name
|
||||||
|
} else {
|
||||||
|
model.nameWithoutExt
|
||||||
|
}
|
||||||
listView.setLayoutParams(LayoutParams(GridView.AUTO_FIT, 530))
|
listView.setLayoutParams(LayoutParams(GridView.AUTO_FIT, 530))
|
||||||
|
|
||||||
return listView
|
return listView
|
|
@ -12,6 +12,7 @@ import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
|
|
||||||
import com.example.myapplication.compose.SearchActivity;
|
import com.example.myapplication.compose.SearchActivity;
|
||||||
|
import com.example.myapplication.compose.SettingActivity;
|
||||||
import com.example.myapplication.compose.ViewFileActivity;
|
import com.example.myapplication.compose.ViewFileActivity;
|
||||||
import com.example.myapplication.fileSystem.DeleteHelper;
|
import com.example.myapplication.fileSystem.DeleteHelper;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -44,6 +45,7 @@ public class main_page extends AppCompatActivity {
|
||||||
findViewById(R.id.MainPageDCIMButton).setOnClickListener(buttonClickerHandler);
|
findViewById(R.id.MainPageDCIMButton).setOnClickListener(buttonClickerHandler);
|
||||||
findViewById(R.id.MainPagePicturesButton).setOnClickListener(buttonClickerHandler);
|
findViewById(R.id.MainPagePicturesButton).setOnClickListener(buttonClickerHandler);
|
||||||
findViewById(R.id.MainPageSearchButton).setOnClickListener(buttonClickerHandler);
|
findViewById(R.id.MainPageSearchButton).setOnClickListener(buttonClickerHandler);
|
||||||
|
findViewById(R.id.MainPageSettingsButton).setOnClickListener(buttonClickerHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override protected void onDestroy() {
|
@Override protected void onDestroy() {
|
||||||
|
@ -131,6 +133,10 @@ public class main_page extends AppCompatActivity {
|
||||||
Intent intent = new Intent(context, SearchActivity.class);
|
Intent intent = new Intent(context, SearchActivity.class);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
|
if (view.getId() == R.id.MainPageSettingsButton) {
|
||||||
|
Intent intent = new Intent(context, SettingActivity.class);
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -18,8 +18,8 @@ import androidx.core.content.FileProvider
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsCompat.Type
|
import androidx.core.view.WindowInsetsCompat.Type
|
||||||
import com.example.myapplication.adapters.MusicAdapter
|
import com.example.myapplication.fileSystem.adapters.MusicAdapter
|
||||||
import com.example.myapplication.adapters.MusicModel
|
import com.example.myapplication.fileSystem.adapters.MusicModel
|
||||||
import com.example.myapplication.compose.SearchActivity
|
import com.example.myapplication.compose.SearchActivity
|
||||||
import com.example.myapplication.fileSystem.CutHelper
|
import com.example.myapplication.fileSystem.CutHelper
|
||||||
import com.example.myapplication.fileSystem.byTypeFileLister.DocumentLister
|
import com.example.myapplication.fileSystem.byTypeFileLister.DocumentLister
|
||||||
|
|
|
@ -18,8 +18,8 @@ import androidx.core.content.FileProvider
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsCompat.Type
|
import androidx.core.view.WindowInsetsCompat.Type
|
||||||
import com.example.myapplication.adapters.ImageAdapter
|
import com.example.myapplication.fileSystem.adapters.ImageAdapter
|
||||||
import com.example.myapplication.adapters.ImageModel
|
import com.example.myapplication.fileSystem.adapters.ImageModel
|
||||||
import com.example.myapplication.compose.SearchActivity
|
import com.example.myapplication.compose.SearchActivity
|
||||||
import com.example.myapplication.fileSystem.CutHelper
|
import com.example.myapplication.fileSystem.CutHelper
|
||||||
import com.example.myapplication.fileSystem.byTypeFileLister.DocumentLister
|
import com.example.myapplication.fileSystem.byTypeFileLister.DocumentLister
|
||||||
|
|
|
@ -18,8 +18,8 @@ import androidx.core.content.FileProvider
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsCompat.Type
|
import androidx.core.view.WindowInsetsCompat.Type
|
||||||
import com.example.myapplication.adapters.VideoAdapter
|
import com.example.myapplication.fileSystem.adapters.VideoAdapter
|
||||||
import com.example.myapplication.adapters.VideoModel
|
import com.example.myapplication.fileSystem.adapters.VideoModel
|
||||||
import com.example.myapplication.compose.SearchActivity
|
import com.example.myapplication.compose.SearchActivity
|
||||||
import com.example.myapplication.fileSystem.CutHelper
|
import com.example.myapplication.fileSystem.CutHelper
|
||||||
import com.example.myapplication.fileSystem.byTypeFileLister.DocumentLister
|
import com.example.myapplication.fileSystem.byTypeFileLister.DocumentLister
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<item
|
|
||||||
android:id="@+id/Delete"
|
|
||||||
android:title="@string/Delete" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/copy"
|
|
||||||
android:title="@string/copy" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/cut"
|
|
||||||
android:title="@string/cut" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/paste"
|
|
||||||
android:title="@string/paste" />
|
|
||||||
<item
|
|
||||||
android:id="@+id/unload"
|
|
||||||
android:title="@string/unload" />
|
|
||||||
</menu>
|
|
|
@ -13,65 +13,15 @@
|
||||||
<string name="delete">最近删除</string>
|
<string name="delete">最近删除</string>
|
||||||
<string name="download">下载与接收</string>
|
<string name="download">下载与接收</string>
|
||||||
<string name="source">来源</string>
|
<string name="source">来源</string>
|
||||||
<string name="qq">QQ</string>
|
|
||||||
<string name="wechat">微信</string>
|
|
||||||
<string name="internet">浏览器</string>
|
<string name="internet">浏览器</string>
|
||||||
<string name="radio">录音机</string>
|
<string name="radio">录音机</string>
|
||||||
<string name="installpackage">安装包</string>
|
|
||||||
<string name="Camera">Camera</string>
|
|
||||||
<string name="Screenshots">屏幕截图</string>
|
|
||||||
<!-- Strings used for fragments for navigation -->
|
|
||||||
<string name="first_fragment_label">First Fragment</string>
|
|
||||||
<string name="second_fragment_label">Second Fragment</string>
|
|
||||||
<string name="next">Next</string>
|
<string name="next">Next</string>
|
||||||
<string name="previous">Previous</string>
|
<string name="previous">Previous</string>
|
||||||
<string name="Delete">删除</string>
|
<string name="Delete">删除</string>
|
||||||
<string name="copy">复制</string>
|
<string name="copy">复制</string>
|
||||||
<string name="cut">剪切</string>
|
<string name="cut">剪切</string>
|
||||||
<string name="paste">粘贴</string>
|
<string name="paste">粘贴</string>
|
||||||
<string name="tiktok">抖音</string>
|
|
||||||
<string name="alipay">支付宝</string>
|
|
||||||
<string name="taobao">淘宝</string>
|
|
||||||
<string name="little_red_book">小红书</string>
|
|
||||||
<string name="unload">卸载</string>
|
|
||||||
<string name="store_package">压缩包</string>
|
|
||||||
<string name="phone_information">通话与信息</string>
|
|
||||||
<string name="lorem_ipsum">
|
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris
|
|
||||||
volutpat, dolor id interdum ullamcorper, risus dolor egestas lectus, sit amet mattis purus
|
|
||||||
dui nec risus. Maecenas non sodales nisi, vel dictum dolor. Class aptent taciti sociosqu ad
|
|
||||||
litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse blandit eleifend
|
|
||||||
diam, vel rutrum tellus vulputate quis. Aliquam eget libero aliquet, imperdiet nisl a,
|
|
||||||
ornare ex. Sed rhoncus est ut libero porta lobortis. Fusce in dictum tellus.\n\n
|
|
||||||
Suspendisse interdum ornare ante. Aliquam nec cursus lorem. Morbi id magna felis. Vivamus
|
|
||||||
egestas, est a condimentum egestas, turpis nisl iaculis ipsum, in dictum tellus dolor sed
|
|
||||||
neque. Morbi tellus erat, dapibus ut sem a, iaculis tincidunt dui. Interdum et malesuada
|
|
||||||
fames ac ante ipsum primis in faucibus. Curabitur et eros porttitor, ultricies urna vitae,
|
|
||||||
molestie nibh. Phasellus at commodo eros, non aliquet metus. Sed maximus nisl nec dolor
|
|
||||||
bibendum, vel congue leo egestas.\n\n
|
|
||||||
Sed interdum tortor nibh, in sagittis risus mollis quis. Curabitur mi odio, condimentum sit
|
|
||||||
amet auctor at, mollis non turpis. Nullam pretium libero vestibulum, finibus orci vel,
|
|
||||||
molestie quam. Fusce blandit tincidunt nulla, quis sollicitudin libero facilisis et. Integer
|
|
||||||
interdum nunc ligula, et fermentum metus hendrerit id. Vestibulum lectus felis, dictum at
|
|
||||||
lacinia sit amet, tristique id quam. Cras eu consequat dui. Suspendisse sodales nunc ligula,
|
|
||||||
in lobortis sem porta sed. Integer id ultrices magna, in luctus elit. Sed a pellentesque
|
|
||||||
est.\n\n
|
|
||||||
Aenean nunc velit, lacinia sed dolor sed, ultrices viverra nulla. Etiam a venenatis nibh.
|
|
||||||
Morbi laoreet, tortor sed facilisis varius, nibh orci rhoncus nulla, id elementum leo dui
|
|
||||||
non lorem. Nam mollis ipsum quis auctor varius. Quisque elementum eu libero sed commodo. In
|
|
||||||
eros nisl, imperdiet vel imperdiet et, scelerisque a mauris. Pellentesque varius ex nunc,
|
|
||||||
quis imperdiet eros placerat ac. Duis finibus orci et est auctor tincidunt. Sed non viverra
|
|
||||||
ipsum. Nunc quis augue egestas, cursus lorem at, molestie sem. Morbi a consectetur ipsum, a
|
|
||||||
placerat diam. Etiam vulputate dignissim convallis. Integer faucibus mauris sit amet finibus
|
|
||||||
convallis.\n\n
|
|
||||||
Phasellus in aliquet mi. Pellentesque habitant morbi tristique senectus et netus et
|
|
||||||
malesuada fames ac turpis egestas. In volutpat arcu ut felis sagittis, in finibus massa
|
|
||||||
gravida. Pellentesque id tellus orci. Integer dictum, lorem sed efficitur ullamcorper,
|
|
||||||
libero justo consectetur ipsum, in mollis nisl ex sed nisl. Donec maximus ullamcorper
|
|
||||||
sodales. Praesent bibendum rhoncus tellus nec feugiat. In a ornare nulla. Donec rhoncus
|
|
||||||
libero vel nunc consequat, quis tincidunt nisl eleifend. Cras bibendum enim a justo luctus
|
|
||||||
vestibulum. Fusce dictum libero quis erat maximus, vitae volutpat diam dignissim.
|
|
||||||
</string>
|
|
||||||
<string name="title_activity_require_permission">RequirePermissionActivity</string>
|
<string name="title_activity_require_permission">RequirePermissionActivity</string>
|
||||||
|
|
||||||
<string name="require_permission_readwrite">需要读取/写入存储权限以继续</string>
|
<string name="require_permission_readwrite">需要读取/写入存储权限以继续</string>
|
||||||
|
@ -137,4 +87,7 @@
|
||||||
<string name="sort_by_size">已选择按大小排序</string>
|
<string name="sort_by_size">已选择按大小排序</string>
|
||||||
<string name="sort_by_time">已选择按时间排序</string>
|
<string name="sort_by_time">已选择按时间排序</string>
|
||||||
<string name="title_activity_setting">SettingActivity</string>
|
<string name="title_activity_setting">SettingActivity</string>
|
||||||
|
<string name="setting_show_extension">显示扩展名</string>
|
||||||
|
<string name="setting_show_extension_description">如果打开,则会显示 abc.txt,否则只显示 abc</string>
|
||||||
|
<string name="about">关于</string>
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in a new issue