Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.boringdroid.systemui.provider

import android.media.AudioSystem
import com.boringdroid.systemui.data.AudioDevice
import com.boringdroid.systemui.view.TopBarControlWindow.Companion.TAG
import kotlin.text.isEmpty
import kotlin.text.split

class VolumeProvider {

var audioDevice: AudioDevice? = null

fun getVolume(): Int{
val streamMinVolume = 0
val streamMaxVolume = 100
val devices = getDevices(false)
if (devices.isNotEmpty()) audioDevice = devices[0]
val curVolume = audioDevice?.volume ?: 0F
val currentVolume = (curVolume * streamMaxVolume).toInt()
return currentVolume
}

// Returns results such as :
// alsa_output.pci-0000_04_00.1.hdmi-stereo hdmi-output-0=HDMI / DisplayPort=0.440000=0;alsa_output.platform-PHYT0006_00.stereo-fallback analog-output-headphones=模拟耳机=0.450000=0
private fun getDevices(type: Boolean): ArrayList<AudioDevice> {
try {
val devicesResult = AudioSystem.getDevs(type)
val audioDeviceList = ArrayList<AudioDevice>()

// When there is no device, the result is empty,
// then you should return the audioDevices in advance.
if (devicesResult == null || devicesResult.isEmpty()) return audioDeviceList
val deviceResult = devicesResult.split(';')
deviceResult.forEachIndexed { index, device ->
val audioDevice = parseDevice(device, type, index == 0)
if (audioDevice != null) audioDeviceList.add(audioDevice)
}
return audioDeviceList
} catch (e: Exception) {
com.boringdroid.systemui.Log.e(TAG, "getDevs Exception: ${e.message}")
return ArrayList()
}
}

private fun parseDevice(result: String, type: Boolean, isSelected: Boolean): AudioDevice? {
try {
val deviceInfo = result.split('=')
val audioDevice = AudioDevice(deviceInfo[0], deviceInfo[1], type, isSelected)
// If the size of the returned data is 4, it means that volume and isMuted exist.
if (deviceInfo.size == 4) {
audioDevice.needInfo = false
audioDevice.volume = deviceInfo[2].toFloat()
audioDevice.isMuted = ("1" == deviceInfo[3])
}
return audioDevice
} catch (e: Exception) {
com.boringdroid.systemui.Log.e(TAG, "parseDevs exception: ${e.message}")
return null
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.view.KeyEvent
import android.view.KeyEvent.KEYCODE_ENTER
import android.view.KeyEvent.KEYCODE_TAB
import android.view.LayoutInflater
import android.view.View
Expand Down Expand Up @@ -77,6 +78,7 @@ class AppOverviewWindow(
var wallpaperManager :WallpaperManager ?= null
var wallpaperBitmap : Bitmap ?= null
var blurWallPaperRadius : Float ?= 0.0f
var div : Int = 1

companion object {
const val WINDOW_PADDING = 100
Expand Down Expand Up @@ -117,7 +119,7 @@ class AppOverviewWindow(
getContext().resources.getDimensionPixelSize(R.dimen.overview_margin_bottom)
val dimensionPixelSize =
getContext().resources.getDimensionPixelSize(R.dimen.overview_app_height)
val div = (screenHeight - dimensionPixelSize1 - dimensionPixelSize2 + 30 ).div(dimensionPixelSize)
div = (screenHeight - dimensionPixelSize1 - dimensionPixelSize2 + 30 ).div(dimensionPixelSize)
Log.d(TAG, "initViews: $dimensionPixelSize1 $dimensionPixelSize2 $screenHeight $dimensionPixelSize $div")
appPages = apps.chunked(NUMBER_OF_COLUMNS * div) as MutableList<MutableList<AppData>>
appsPagerAdapter = AppsPagerAdapter(appPages, this)
Expand Down Expand Up @@ -174,6 +176,8 @@ class AppOverviewWindow(
} else if(keyCode == KEYCODE_TAB && event.action == KeyEvent.ACTION_UP) {
focusView?.requestFocus()
return@setOnKeyListener true
} else if(keyCode == KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP){
return@setOnKeyListener true
} else {
return@setOnKeyListener false
}
Expand Down Expand Up @@ -229,10 +233,6 @@ class AppOverviewWindow(
override fun onAnimationEnd(animation: Animator) {
if(isEnter){
blurWallPaper(OVERVIEW_BG_RADIUS * 1.0f)
// getContentView()?.postDelayed(300,
// {
// blurWallPaper(OVERVIEW_BG_RADIUS * 1.0f)
// })
} else {
destroy()
}
Expand Down Expand Up @@ -310,29 +310,13 @@ class AppOverviewWindow(
override fun onPageScrollStateChanged(state: Int) {
Log.d("ViewPager", "onPageScrollStateChanged() called with: state = $state")
indicatorMi?.onPageScrollStateChanged(state)
// if(state == 0){
appsVp?.blockScroll = false
// }
}
})
}

override fun dismiss() {
// val anim = AnimationUtils.loadAnimation(getContext(), R.anim.lp_exit)
//
// anim.setAnimationListener(object : Animation.AnimationListener {
// override fun onAnimationStart(animation: Animation) {
// }
//
// override fun onAnimationEnd(animation: Animation) {
destroy()
// }

// override fun onAnimationRepeat(animation: Animation) {
// }
// })
//
// appsVp?.startAnimation(anim)
destroy()
}

fun destroy(){
Expand Down Expand Up @@ -361,8 +345,7 @@ class AppOverviewWindow(
fun updateAppList(apps: MutableList<AppData>) {
this.apps.clear()
this.apps.addAll(apps)
// apps.forEach { app-> Log.d(TAG, "updateAppList: app:$app") }
appPages = apps.chunked(MAX_TASKS_ONE_PAGE) as MutableList<MutableList<AppData>>
appPages = apps.chunked(NUMBER_OF_COLUMNS * div) as MutableList<MutableList<AppData>>
appsVp?.adapter = AppsPagerAdapter(appPages, this)
appsVp?.adapter?.notifyDataSetChanged()
updateChannel()
Expand Down Expand Up @@ -402,7 +385,6 @@ class AppsPagerAdapter(
}

override fun getItemPosition(`object`: Any): Int {
// val recycleView = `object` as LoadedOverviewRecycleView
val view = `object` as View
val recycleView = view.findViewById<LoadedOverviewRecycleView>(R.id.loaded_overview_recycle_view) as LoadedOverviewRecycleView
val list : MutableList<AppData>? = recycleView.list
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class TopBarControlWindow(
private val dm: DisplayManager = context.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
private val SETTINGS_PACKAGE = "com.android.settings"
private val Wifi_ACTION = SETTINGS_PACKAGE+".CONNECTIVITY_CHANGE"
var topBarVolumeImage: ImageView?= null


var topbarController: TopbarLayoutController ?=null
Expand Down Expand Up @@ -105,7 +106,7 @@ class TopBarControlWindow(
super.showPopupWindow()
runWindowAnim(WindowGravity.top, true)
initViews()
initVolumeSeekbar()
// initVolumeSeekbar()
initVolumes()
initBrightnessSeekbar()
}
Expand All @@ -130,6 +131,22 @@ class TopBarControlWindow(
volumeSeekBar?.max = streamMaxVolume
volumeSeekBar?.progress = currentVolume
volumeSeekBar?.setOnSeekBarChangeListener(volumeChangeListener)
if (currentVolume == 0) {
volumeImage?.setImageResource(R.drawable.icon_volume_mute)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_mute)
} else if (currentVolume < volumeSeekBar?.max!!.div(3)) {
// volumeBtn?.setImageResource(R.drawable.icon_volume_min)
volumeImage?.setImageResource(R.drawable.icon_volume_min)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_min)
} else if (currentVolume < (volumeSeekBar?.max!!.div(3) * 2)) {
// volumeBtn?.setImageResource(R.drawable.icon_volume_mid)
volumeImage?.setImageResource(R.drawable.icon_volume_middle)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_middle)
} else {
// volumeBtn?.setImageResource(R.drawable.icon_volume_max)
volumeImage?.setImageResource(R.drawable.icon_volume_max)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_max)
}
}

private fun initVolumeSeekbar() {
Expand All @@ -156,17 +173,21 @@ class TopBarControlWindow(
Log.w(TAG, "progress: $progress ")
// val am = context!!.getSystemService(Context.AUDIO_SERVICE) as AudioManager
// am.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0)
if(progress == 0){
if (progress == 0) {
volumeImage?.setImageResource(R.drawable.icon_volume_mute)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_mute)
} else if (progress < volumeSeekBar?.max!!.div(3)) {
// volumeBtn?.setImageResource(R.drawable.icon_volume_min)
volumeImage?.setImageResource(R.drawable.icon_volume_min)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_min)
} else if (progress < (volumeSeekBar?.max!!.div(3) * 2)) {
// volumeBtn?.setImageResource(R.drawable.icon_volume_mid)
volumeImage?.setImageResource(R.drawable.icon_volume_middle)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_middle)
} else {
// volumeBtn?.setImageResource(R.drawable.icon_volume_max)
volumeImage?.setImageResource(R.drawable.icon_volume_max)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_max)
}

if(audioDevice == null || TextUtils.isEmpty(audioDevice?.physicalName )){
Expand Down
17 changes: 17 additions & 0 deletions app/src/main/java/com/boringdroid/systemui/view/TopBarLayout.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import com.boringdroid.systemui.SystemUIOverlay.Companion
import com.boringdroid.systemui.data.DesktopNotification
import com.boringdroid.systemui.data.WindowAttr
import com.boringdroid.systemui.provider.AllAppsProvider
import com.boringdroid.systemui.provider.VolumeProvider
import com.boringdroid.systemui.receiver.BatteryReceiver
import com.boringdroid.systemui.receiver.DynamicReceiver.NotificationListener
import com.boringdroid.systemui.receiver.NotificationReceiver
Expand Down Expand Up @@ -193,6 +194,20 @@ class TopBarLayout(context: Context?, attrs: AttributeSet?) :
if(needUpdateBattery){
onBatteryChanged(percentage, status, plugged)
}
initVolume()
}

private fun initVolume() {
val volume = VolumeProvider().getVolume()
if (volume == 0) {
volumeBtn?.setImageResource(R.drawable.icon_volume_mute)
} else if (volume < 100.div(3)) {
volumeBtn?.setImageResource(R.drawable.icon_volume_min)
} else if (volume < (100.div(3) * 2)) {
volumeBtn?.setImageResource(R.drawable.icon_volume_middle)
} else {
volumeBtn?.setImageResource(R.drawable.icon_volume_max)
}
}

internal inner class GlobalSearchRecevier : BroadcastReceiver(){
Expand Down Expand Up @@ -233,6 +248,7 @@ class TopBarLayout(context: Context?, attrs: AttributeSet?) :
}
}
volumeWindow?.enterView = imageView
volumeWindow?.topBarVolumeImage = volumeBtn
windowList.add(volumeWindow!!)

}
Expand Down Expand Up @@ -391,6 +407,7 @@ class TopBarLayout(context: Context?, attrs: AttributeSet?) :
this@TopBarLayout.controlBtn?.background = null
}
}
controlWindow?.topBarVolumeImage = volumeBtn
controlWindow?.enterView = imageView
controlWindow?.topbarController = this
windowList.add(controlWindow!!)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class TopBarVolumeWindow(
private var inRv: LoadedSoundRecycleView ?= null
private var isInput: Boolean = false
private var fromUser: Boolean = false
var topBarVolumeImage: ImageView?= null


companion object {
Expand Down Expand Up @@ -102,6 +103,22 @@ class TopBarVolumeWindow(
volumeSeekBar?.max = streamMaxVolume
volumeSeekBar?.progress = currentVolume
volumeTv?.text = "$currentVolume"
if (currentVolume == 0) {
volumeImage?.setImageResource(R.drawable.icon_volume_mute)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_mute)
} else if (currentVolume < volumeSeekBar?.max!!.div(3)) {
// volumeBtn?.setImageResource(R.drawable.icon_volume_min)
volumeImage?.setImageResource(R.drawable.icon_volume_min)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_min)
} else if (currentVolume < (volumeSeekBar?.max!!.div(3) * 2)) {
// volumeBtn?.setImageResource(R.drawable.icon_volume_mid)
volumeImage?.setImageResource(R.drawable.icon_volume_middle)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_middle)
} else {
// volumeBtn?.setImageResource(R.drawable.icon_volume_max)
volumeImage?.setImageResource(R.drawable.icon_volume_max)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_max)
}
}


Expand Down Expand Up @@ -150,15 +167,19 @@ class TopBarVolumeWindow(
// am.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0)
if (progress == 0) {
volumeImage?.setImageResource(R.drawable.icon_volume_mute)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_mute)
} else if (progress < volumeSeekBar?.max!!.div(3)) {
// volumeBtn?.setImageResource(R.drawable.icon_volume_min)
volumeImage?.setImageResource(R.drawable.icon_volume_min)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_min)
} else if (progress < (volumeSeekBar?.max!!.div(3) * 2)) {
// volumeBtn?.setImageResource(R.drawable.icon_volume_mid)
volumeImage?.setImageResource(R.drawable.icon_volume_middle)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_middle)
} else {
// volumeBtn?.setImageResource(R.drawable.icon_volume_max)
volumeImage?.setImageResource(R.drawable.icon_volume_max)
topBarVolumeImage?.setImageResource(R.drawable.icon_volume_max)
}

if(audioDevice == null || TextUtils.isEmpty(audioDevice?.physicalName )){
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/layout/window_topbar_control.xml
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,8 @@
android:layout_marginTop="64dp"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:breakStrategy="balanced"
android:justificationMode="inter_word"
android:textColor="#ff292929"
android:textSize="13sp"
android:alpha="1"
Expand Down
Loading