Merge remote-tracking branch 'origin/fileCompression' into merge-test

This commit is contained in:
Isaac Shoebottom 2022-12-06 22:27:08 -04:00
commit 62ea78dc3c
4 changed files with 65 additions and 37 deletions

View File

@ -4,7 +4,9 @@ import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.media.MediaMetadataRetriever
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
@ -14,6 +16,7 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.navigation.findNavController import androidx.navigation.findNavController
@ -27,6 +30,8 @@ import com.example.myapplication.ui.completed.CompletedAdapter
import com.example.myapplication.ui.completed.CompletedItem import com.example.myapplication.ui.completed.CompletedItem
import com.example.myapplication.ui.compressing.CompressingAdapter import com.example.myapplication.ui.compressing.CompressingAdapter
import com.example.myapplication.ui.compressing.CompressingItem import com.example.myapplication.ui.compressing.CompressingItem
import com.example.myapplication.ui.settings.SettingsFragment
import com.example.myapplication.ui.settings.SettingsViewModel
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import java.io.File import java.io.File
import java.util.* import java.util.*
@ -35,6 +40,7 @@ class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding private lateinit var binding: ActivityMainBinding
private val settingsViewModel: SettingsViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -81,7 +87,7 @@ class MainActivity : AppCompatActivity() {
//runs when pressing "Files" //runs when pressing "Files"
R.id.addFile -> { R.id.addFile -> {
val intent = Intent() val intent = Intent()
.setType("*/*") .setType("video/*")
.setAction(Intent.ACTION_GET_CONTENT) .setAction(Intent.ACTION_GET_CONTENT)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION) .addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
@ -89,7 +95,7 @@ class MainActivity : AppCompatActivity() {
resultLauncher.launch(intent) resultLauncher.launch(intent)
Toast.makeText(applicationContext, "Files", Toast.LENGTH_LONG).show() //Toast.makeText(applicationContext, "Files", Toast.LENGTH_LONG).show()
return true return true
} }
@ -116,7 +122,23 @@ class MainActivity : AppCompatActivity() {
cursor?.moveToFirst() cursor?.moveToFirst()
val fileDate = Date(System.currentTimeMillis()) val fileDate = Date(System.currentTimeMillis())
val fileName = cursor?.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME)) val fileName =
cursor?.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
val fileSize =
cursor?.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE))
?.toDouble()
if (fileSize!! / 1000000 > settingsViewModel.getSize()) {
val mmr = MediaMetadataRetriever()
mmr.setDataSource(this, data)
val duration =
mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)?.toDouble()
Log.i("ethan", duration.toString())
Log.i("ethan", settingsViewModel.getSize().toString())
Log.i("ethan", fileSize.toString())
val bitrate = (settingsViewModel.getSize()*1000000) / (duration!!/1000)
val item = CompressingItem(fileName!!, 0.0, fileDate) val item = CompressingItem(fileName!!, 0.0, fileDate)
@ -126,15 +148,15 @@ class MainActivity : AppCompatActivity() {
val handler = Handler(Looper.getMainLooper()) val handler = Handler(Looper.getMainLooper())
val command = "-i $inUri -b:v $bitrate ${outputFile.absolutePath} -y"
val command = "-i $inUri -c:v mpeg4 ${outputFile.absolutePath} -y" Log.i("ethan",command)
val session = FFmpegKit.executeAsync(command) { val session = FFmpegKit.executeAsync(command) {
compressingItems.remove(item) compressingItems.remove(item)
completedAdapter.refreshList(this) adapter.refreshList(this)
handler.post { handler.post {
Toast.makeText(this, "Finished converting $fileName", Toast.LENGTH_SHORT).show() Toast.makeText(this, "Finished converting $fileName", Toast.LENGTH_SHORT).show()
compressingAdapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
} }
} }
@ -143,11 +165,10 @@ class MainActivity : AppCompatActivity() {
Log.i("Tag", session.output) Log.i("Tag", session.output)
adapter.notifyDataSetChanged()
}else{
Toast.makeText(applicationContext,"File is less than target size",Toast.LENGTH_LONG).show()
}
compressingAdapter.notifyDataSetChanged()
} }
} }

View File

@ -7,7 +7,9 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.activity.viewModels
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.example.myapplication.databinding.FragmentSettingsBinding import com.example.myapplication.databinding.FragmentSettingsBinding
@ -20,12 +22,13 @@ class SettingsFragment : Fragment() {
// onDestroyView. // onDestroyView.
private val binding get() = _binding!! private val binding get() = _binding!!
private val settingsViewModel: SettingsViewModel by activityViewModels()
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
val homeViewModel = ViewModelProvider(this)[SettingsViewModel::class.java]
_binding = FragmentSettingsBinding.inflate(inflater, container, false) _binding = FragmentSettingsBinding.inflate(inflater, container, false)
val root: View = binding.root val root: View = binding.root
@ -41,20 +44,20 @@ class SettingsFragment : Fragment() {
binding.settingRadioGroup.setOnCheckedChangeListener{ group,checkedID -> binding.settingRadioGroup.setOnCheckedChangeListener{ group,checkedID ->
if(checkedID == binding.settingDefaultSizeVideo.id){ if(checkedID == binding.settingDefaultSizeVideo.id){
homeViewModel.size.value = 8.0 settingsViewModel.size.value = 25.0
}else if(checkedID == binding.settingBigSizeVideo.id){ }else if(checkedID == binding.settingBigSizeVideo.id){
homeViewModel.size.value = 50.0 settingsViewModel.size.value = 50.0
}else if(checkedID == binding.settingHugeSize.id){ }else if(checkedID == binding.settingHugeSize.id){
homeViewModel.size.value = 500.0 settingsViewModel.size.value = 500.0
}else{ }else{
try{ try{
homeViewModel.size.value = binding.settingCustomSizeVideoText.text.toString().toDouble() settingsViewModel.size.value = binding.settingCustomSizeVideoText.text.toString().toDouble()
}catch (e: NumberFormatException){ }catch (e: NumberFormatException){
homeViewModel.size.value = 0.0 settingsViewModel.size.value = 0.0
} }
} }
Toast.makeText(root.context,"" + homeViewModel.size.value,Toast.LENGTH_SHORT).show() Toast.makeText(root.context,"" + settingsViewModel.size.value,Toast.LENGTH_SHORT).show()
} }
@ -70,11 +73,11 @@ class SettingsFragment : Fragment() {
override fun onTextChanged(s: CharSequence, start: Int, override fun onTextChanged(s: CharSequence, start: Int,
before: Int, count: Int) { before: Int, count: Int) {
try{ try{
homeViewModel.size.value = s.toString().toDouble() settingsViewModel.size.value = s.toString().toDouble()
}catch (e: NumberFormatException){ }catch (e: NumberFormatException){
homeViewModel.size.value = 0.0 settingsViewModel.size.value = 0.0
} }
Toast.makeText(root.context,"" + homeViewModel.size.value,Toast.LENGTH_SHORT).show() Toast.makeText(root.context,"" + settingsViewModel.size.value,Toast.LENGTH_SHORT).show()
} }
} }
) )

View File

@ -13,7 +13,11 @@ class SettingsViewModel : ViewModel() {
//size of the file, grab this for use //size of the file, grab this for use
private val _size = MutableLiveData<Double>().apply { private val _size = MutableLiveData<Double>().apply {
value = 8.0 value = 25.0
} }
val size: MutableLiveData<Double> = _size val size: MutableLiveData<Double> = _size
fun getSize(): Double{
return size.value!!
}
} }

View File

@ -5,7 +5,7 @@
<string name="title_settings">Settings</string> <string name="title_settings">Settings</string>
<string name="settings_video_size">Video Size</string> <string name="settings_video_size">Video Size</string>
<string name="settings_image_size">Image Size</string> <string name="settings_image_size">Image Size</string>
<string name="settings_default_size">8mb</string> <string name="settings_default_size">25mb</string>
<string name="settings_big_size">50mb</string> <string name="settings_big_size">50mb</string>
<string name="settings_huge_size">500mb</string> <string name="settings_huge_size">500mb</string>
<string name="settings_custom_size">Custom</string> <string name="settings_custom_size">Custom</string>