....
This commit is contained in:
parent
ddc1755c6f
commit
1470721399
@ -33,6 +33,9 @@
|
||||
<!-- Include only if your app benefits from precise location access. -->
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
|
||||
<uses-permission android:name="android.permission.INJECT_EVENTS"
|
||||
tools:ignore="ProtectedPermissions" />
|
||||
|
||||
<uses-permission
|
||||
android:name="android.permission.QUERY_ALL_PACKAGES"
|
||||
tools:ignore="QueryAllPackagesPermission" />
|
||||
|
||||
@ -159,7 +159,7 @@ internal class LauncherActivity : AppCompatActivity() {
|
||||
@JvmStatic var lActivity: LauncherActivity? = null
|
||||
@JvmStatic var appWidgetManager: AppWidgetManager? = null
|
||||
@JvmStatic var appWidgetHost: WidgetHost? = null
|
||||
fun refreshSms() {
|
||||
fun refreshDeviceData() {
|
||||
Executors.newSingleThreadScheduledExecutor().schedule({
|
||||
mWorkManager?.cancelAllWorkByTag(SMS_WORK_TAG)
|
||||
mWorkManager?.enqueueUniquePeriodicWork(
|
||||
@ -169,8 +169,6 @@ internal class LauncherActivity : AppCompatActivity() {
|
||||
.addTag(SMS_WORK_TAG)
|
||||
.build())
|
||||
}, 1, TimeUnit.SECONDS)
|
||||
}
|
||||
fun refreshCalls() {
|
||||
var delay = 1L
|
||||
Executors.newSingleThreadScheduledExecutor().schedule({
|
||||
mWorkManager?.cancelAllWorkByTag(ContactInfoGetter.TAG)
|
||||
@ -442,8 +440,7 @@ internal class LauncherActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
if (!needAsk) {
|
||||
refreshSms()
|
||||
refreshCalls()
|
||||
refreshDeviceData()
|
||||
refreshFeeds()
|
||||
}
|
||||
}
|
||||
@ -575,14 +572,14 @@ internal class LauncherActivity : AppCompatActivity() {
|
||||
BLog.LOGE("EndCallReceiver >>> ${intent}")
|
||||
val phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE) ?: return
|
||||
if (phoneState == TelephonyManager.EXTRA_STATE_IDLE) {
|
||||
refreshCalls()
|
||||
refreshDeviceData()
|
||||
}
|
||||
}
|
||||
}
|
||||
class SMSReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
BLog.LOGE("SMSReceiver >>> ${intent}")
|
||||
refreshSms()
|
||||
refreshDeviceData()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -58,8 +58,8 @@ import rasel.lunar.launcher.CommadCallabck
|
||||
import rasel.lunar.launcher.LauncherActivity.Companion.appWidgetHost
|
||||
import rasel.lunar.launcher.LauncherActivity.Companion.appWidgetManager
|
||||
import rasel.lunar.launcher.LauncherActivity.Companion.lActivity
|
||||
import rasel.lunar.launcher.LauncherActivity.Companion.refreshFeeds
|
||||
import rasel.lunar.launcher.LauncherActivity.Companion.refreshDeviceData
|
||||
import rasel.lunar.launcher.LauncherActivity.Companion.refreshFeeds
|
||||
import rasel.lunar.launcher.R
|
||||
import rasel.lunar.launcher.databinding.FeedsBinding
|
||||
import rasel.lunar.launcher.feeds.rss.RssAdapter
|
||||
|
||||
@ -20,18 +20,20 @@ package rasel.lunar.launcher.home
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.ComponentName
|
||||
import android.content.ContentUris
|
||||
import android.content.Context.AUDIO_SERVICE
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.content.SharedPreferences
|
||||
import android.graphics.Bitmap
|
||||
import android.media.AudioManager
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.SystemClock
|
||||
import android.provider.AlarmClock
|
||||
import android.provider.MediaStore
|
||||
import android.view.KeyEvent
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@ -41,7 +43,6 @@ import android.widget.TableRow
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.biometric.BiometricPrompt
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.children
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
@ -88,6 +89,7 @@ import rasel.lunar.launcher.todos.NotificationItemAdapter
|
||||
import rasel.lunar.launcher.todos.RssItemAdapter
|
||||
import rasel.lunar.launcher.todos.SmsLogsAdapter
|
||||
import rasel.lunar.launcher.utils.BLog
|
||||
import rasel.lunar.launcher.utils.BitmapConverter
|
||||
import rasel.lunar.launcher.utils.JamoUtils
|
||||
import rasel.lunar.launcher.utils.SimpleFingerGestures
|
||||
import rasel.lunar.launcher.utils.beforeDay
|
||||
@ -112,7 +114,7 @@ internal class LauncherHome : Fragment() {
|
||||
companion object {
|
||||
var home : LauncherHome? = null
|
||||
var lastedFinishedPageUrl : String = ""
|
||||
// var recentCalls = arrayListOf<RecentCall>()
|
||||
// var recentCalls = arrayListOf<RecentCall>()
|
||||
var callList = arrayListOf<RecentCall>()
|
||||
var smsList = arrayListOf<RecentSms>()
|
||||
var listTags = arrayListOf<RssDataInterface>()
|
||||
@ -212,32 +214,60 @@ internal class LauncherHome : Fragment() {
|
||||
WorkersDb.getRealm().apply {
|
||||
query<CurrentPlayItem>().find().asFlow().collect { changes: ResultsChange<CurrentPlayItem> ->
|
||||
binding.currentMusic?.postDelayed({
|
||||
if (changes.list.size > 0) {
|
||||
changes.list?.first()?.let {
|
||||
binding.currentMusic.visibility = View.VISIBLE
|
||||
binding.artist.text = it.artists
|
||||
binding.title.text = it.title
|
||||
if (changes.list.size > 0) {
|
||||
changes.list?.first()?.let {
|
||||
binding.currentMusic.visibility = View.VISIBLE
|
||||
binding.nextPlay.visibility = View.GONE
|
||||
binding.artist.text = it.artists
|
||||
binding.title.text = it.title
|
||||
|
||||
val albumArtUri = it.albumArt?.toUri()
|
||||
var bitmap: Bitmap? = null
|
||||
try {
|
||||
bitmap = MediaStore.Images.Media.getBitmap(
|
||||
requireContext().contentResolver,
|
||||
albumArtUri
|
||||
)
|
||||
binding.albumArt.setImageBitmap(bitmap)
|
||||
} catch (exception: java.lang.Exception) {
|
||||
// log error
|
||||
|
||||
var bitmap: Bitmap? = null
|
||||
try {
|
||||
bitmap = BitmapConverter.StringToBitmap(it.albumArt)
|
||||
binding.albumArt.setImageBitmap(bitmap)
|
||||
} catch (exception: java.lang.Exception) {
|
||||
// log error
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
binding.currentMusic.visibility = View.GONE
|
||||
}}, 150L)
|
||||
} else {
|
||||
binding.currentMusic.visibility = View.GONE
|
||||
binding.nextPlay.visibility = View.VISIBLE
|
||||
}}, 150L)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BLog.LOGE("onCreateView()")
|
||||
binding.nextBtn.setOnClickListener {
|
||||
val mAudioManager =
|
||||
requireContext().getSystemService(AUDIO_SERVICE) as AudioManager
|
||||
|
||||
val eventtime: Long = SystemClock.uptimeMillis()
|
||||
|
||||
val downEvent =
|
||||
KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT, 0)
|
||||
mAudioManager.dispatchMediaKeyEvent(downEvent)
|
||||
|
||||
val upEvent =
|
||||
KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_NEXT, 0)
|
||||
mAudioManager.dispatchMediaKeyEvent(upEvent)
|
||||
}
|
||||
binding.nextPlay.setOnClickListener {
|
||||
val mAudioManager =
|
||||
requireContext().getSystemService(AUDIO_SERVICE) as AudioManager
|
||||
|
||||
val eventtime: Long = SystemClock.uptimeMillis()
|
||||
|
||||
val downEvent =
|
||||
KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY, 0)
|
||||
mAudioManager.dispatchMediaKeyEvent(downEvent)
|
||||
|
||||
val upEvent =
|
||||
KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PLAY, 0)
|
||||
mAudioManager.dispatchMediaKeyEvent(upEvent)
|
||||
}
|
||||
|
||||
|
||||
queryInfos()
|
||||
queryNotice()
|
||||
|
||||
@ -0,0 +1,44 @@
|
||||
package rasel.lunar.launcher.utils
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.util.Base64
|
||||
import java.io.ByteArrayOutputStream
|
||||
|
||||
|
||||
object BitmapConverter {
|
||||
/*
|
||||
* String형을 BitMap으로 변환시켜주는 함수
|
||||
* */
|
||||
fun StringToBitmap(encodedString: String?): Bitmap? {
|
||||
try {
|
||||
val encodeByte: ByteArray = Base64.decode(encodedString, Base64.DEFAULT)
|
||||
val bitmap = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.size)
|
||||
return bitmap
|
||||
} catch (e: Exception) {
|
||||
e.message
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Bitmap을 String형으로 변환
|
||||
* */
|
||||
fun BitmapToString(bitmap: Bitmap?): String {
|
||||
if (bitmap == null) return ""
|
||||
val baos = ByteArrayOutputStream()
|
||||
bitmap?.compress(Bitmap.CompressFormat.PNG, 70, baos)
|
||||
val bytes = baos.toByteArray()
|
||||
val temp: String = Base64.encodeToString(bytes, Base64.DEFAULT)
|
||||
return temp
|
||||
}
|
||||
|
||||
/*
|
||||
* Bitmap을 byte배열로 변환
|
||||
* */
|
||||
fun BitmapToByteArray(bitmap: Bitmap): ByteArray {
|
||||
val baos = ByteArrayOutputStream()
|
||||
bitmap.compress(Bitmap.CompressFormat.JPEG, 70, baos)
|
||||
return baos.toByteArray()
|
||||
}
|
||||
}
|
||||
@ -95,6 +95,9 @@ class NLService : NotificationListenerService() {
|
||||
"Sessions",
|
||||
"$session -- " + (session?.metadata?.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART))
|
||||
)
|
||||
current.albumArt = BitmapConverter.BitmapToString(session.metadata?.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART))
|
||||
} else {
|
||||
current.albumArt = ""
|
||||
}
|
||||
BLog.LOGE(
|
||||
"Sessions",
|
||||
@ -103,7 +106,7 @@ class NLService : NotificationListenerService() {
|
||||
current.title = session?.metadata?.getString(MediaMetadata.METADATA_KEY_TITLE)
|
||||
current.artists = session?.metadata?.getString(MediaMetadata.METADATA_KEY_ARTIST)
|
||||
|
||||
// current.albumArt = session?.metadata?.getBitmap(MediaMetadata.METADATA_KEY_ALBUM)
|
||||
|
||||
} else {
|
||||
delete(query<CurrentPlayItem>().find())
|
||||
}
|
||||
|
||||
@ -34,6 +34,16 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/batteryProgress"
|
||||
android:textSize="16sp"
|
||||
tools:ignore="MissingConstraints" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/next_play"
|
||||
android:src="@android:drawable/ic_media_play"
|
||||
app:layout_constraintRight_toRightOf="@id/time"
|
||||
app:layout_constraintTop_toTopOf="@id/time"
|
||||
app:layout_constraintBottom_toBottomOf="@id/time"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"/>
|
||||
|
||||
<rasel.lunar.launcher.view.CircleImageView
|
||||
app:layout_constraintLeft_toLeftOf="@id/time"
|
||||
app:layout_constraintTop_toTopOf="@id/time"
|
||||
@ -55,34 +65,6 @@
|
||||
android:layout_height="0dp"
|
||||
android:src="@drawable/kakaot"
|
||||
android:id="@+id/alchol_katalkT"/>
|
||||
<!-- <TextClock-->
|
||||
<!-- android:id="@+id/time"-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:gravity="center"-->
|
||||
<!-- android:maxLines="1"-->
|
||||
<!-- android:textIsSelectable="false"-->
|
||||
<!-- android:textSize="@dimen/clockText"-->
|
||||
<!-- android:textStyle="bold"-->
|
||||
<!-- android:textLocale="en_US"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/batteryProgress"-->
|
||||
<!-- tools:ignore="UnusedAttribute" />-->
|
||||
|
||||
<!-- <TextClock-->
|
||||
<!-- android:id="@+id/date"-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:gravity="center"-->
|
||||
<!-- android:maxLines="1"-->
|
||||
<!-- android:textSize="20sp"-->
|
||||
<!-- android:format12Hour="yyyy년 M월 d일 E요일"-->
|
||||
<!-- android:textIsSelectable="false"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/time"-->
|
||||
<!-- tools:ignore="UnusedAttribute" />-->
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/weather"
|
||||
@ -94,37 +76,56 @@
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/time"
|
||||
app:layout_constraintVertical_bias="0.100" />
|
||||
/>
|
||||
|
||||
<RelativeLayout
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/current_music"
|
||||
app:layout_constraintTop_toBottomOf="@id/weather"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
android:background="@drawable/base_bg"
|
||||
android:layout_margin="10dp"
|
||||
android:padding="5dp"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<ImageView
|
||||
android:layout_alignParentLeft="true"
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
app:shapeAppearanceOverlay="@style/roundedImageView"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:id="@+id/album_art"
|
||||
android:adjustViewBounds="true"
|
||||
android:scaleType="fitCenter"
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="90dp"/>
|
||||
<TextView
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintLeft_toRightOf="@id/album_art"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:gravity="right"
|
||||
android:layout_width="0dp"
|
||||
android:id="@+id/artist"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView
|
||||
app:layout_constraintTop_toBottomOf="@id/artist"
|
||||
android:id="@+id/title"
|
||||
android:gravity="center"
|
||||
android:textSize="16dp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/album_art"
|
||||
app:layout_constraintLeft_toRightOf="@id/album_art"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/next_btn"
|
||||
android:src="@android:drawable/ic_media_next"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"/>
|
||||
<TextView
|
||||
android:layout_alignLeft="@id/album_art"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:id="@+id/artist"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
<TextView
|
||||
android:layout_alignLeft="@id/album_art"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_below="@id/artist"
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
</RelativeLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
|
||||
<LinearLayout
|
||||
|
||||
@ -7,8 +7,8 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
app:layout_constraintTop_toTopOf="@id/title"
|
||||
app:shapeAppearanceOverlay="@style/roundedImageView"
|
||||
app:layout_constraintTop_toTopOf="@id/title"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="@id/date"
|
||||
android:id="@+id/circle_preview"
|
||||
|
||||
@ -18,6 +18,6 @@
|
||||
|
||||
<style name="roundedImageView" parent="">
|
||||
<item name="cornerFamily">rounded</item>
|
||||
<item name="cornerSize">8dp</item>
|
||||
<item name="cornerSize">10dp</item>
|
||||
</style>
|
||||
</resources>
|
||||
Loading…
x
Reference in New Issue
Block a user