Skip to content

Instantly share code, notes, and snippets.

View ziginsider's full-sized avatar
🤴
καὶ σύ, τέκνον

Aliaksei ziginsider

🤴
καὶ σύ, τέκνον
View GitHub Profile
[alias]
amen = commit --amend
co = checkout
ci = commit
st = status
br = branch
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
hi7 = log --all --pretty=format:\"%h %cd %s (%an)\" --since='7 days ago'
type = cat-file -t
dump = cat-file -p
@ziginsider
ziginsider / Download.kt
Created October 13, 2021 13:31
Download to device by url
class MyDownloadManager {
fun downloadByUrl(context: Context, url: String) {
val fileName = url.substring(url.lastIndexOf('/') + 1)
val request = DownloadManager.Request(Uri.parse(url)).apply {
setTitle("image $fileName")
setDescription("From CatGallery")
setNotificationVisibility(VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
setDestinationInExternalPublicDir(DIRECTORY_DOWNLOADS, fileName)
}
@ziginsider
ziginsider / DialPadFragment.kt
Created October 9, 2021 12:16
Android: Request permission with rationale via registerForActivityResult example
package com.some.site.dialpad
import android.content.Context
import android.os.Bundle
import android.view.KeyEvent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.Fragment
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onAppBackgrounded() {
val startIntent = Intent(this, ForegroundService::class.java)
startIntent.putExtra(COMMAND_ID, COMMAND_START)
startIntent.putExtra(STARTED_TIMER_TIME_MS, startTime)
startService(startIntent)
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onAppForegrounded() {
class ForegroundService : Service() {
private var isServiceStarted = false
private var notificationManager: NotificationManager? = null
private var job: Job? = null
private val builder by lazy {
NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Simple Timer")
.setGroup("Timer")
class MainActivity : AppCompatActivity(), LifecycleObserver {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
binding = ActivityMainBinding.inflate(layoutInflater)
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private var startTime = 0L
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.example.customview.CustomView
android:id="@+id/custom_view_one"
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private var current = 0L
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
class CustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
@AttrRes defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
private var periodMs = 0L
private var currentMs = 0L
private var color = 0
private var style = FILL