166 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Kotlin
		
	
	
	
	
	
package tech.kinc
 | 
						|
 | 
						|
import android.app.NativeActivity
 | 
						|
import android.content.Context
 | 
						|
import android.content.Intent
 | 
						|
import android.content.pm.ApplicationInfo
 | 
						|
import android.content.pm.PackageManager
 | 
						|
import android.net.Uri
 | 
						|
import android.os.Bundle
 | 
						|
import android.os.Handler
 | 
						|
import android.os.Message
 | 
						|
import android.os.Vibrator
 | 
						|
import android.os.VibrationEffect
 | 
						|
import android.os.Build
 | 
						|
import android.view.KeyEvent
 | 
						|
import android.view.View
 | 
						|
import android.view.WindowManager
 | 
						|
import android.view.inputmethod.InputMethodManager
 | 
						|
import kotlin.system.exitProcess
 | 
						|
 | 
						|
class KincActivity: NativeActivity(), KeyEvent.Callback {
 | 
						|
	companion object {
 | 
						|
		var instance: KincActivity? = null
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun showKeyboard() {
 | 
						|
			instance!!.inputManager!!.showSoftInput(instance!!.window.decorView, 0)
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun hideKeyboard() {
 | 
						|
			instance!!.inputManager!!.hideSoftInputFromWindow(instance!!.window.decorView.windowToken, 0)
 | 
						|
			instance!!.delayedHideSystemUI()
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun loadURL(url: String) {
 | 
						|
			val i = Intent(Intent.ACTION_VIEW, Uri.parse(url))
 | 
						|
			instance!!.startActivity(i)
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun getLanguage(): String {
 | 
						|
			return java.util.Locale.getDefault().language
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun vibrate(ms: Int) {
 | 
						|
			val v: Vibrator = instance!!.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
 | 
						|
			if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
 | 
						|
				v.vibrate(VibrationEffect.createOneShot(ms.toLong(), VibrationEffect.DEFAULT_AMPLITUDE))
 | 
						|
			}
 | 
						|
			else {
 | 
						|
				// deprecated in API 26
 | 
						|
				v.vibrate(ms.toLong())
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun getRotation(): Int {
 | 
						|
			val context: Context = instance!!.applicationContext
 | 
						|
			val manager: WindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
 | 
						|
			return manager.defaultDisplay.rotation
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun getScreenDpi(): Int {
 | 
						|
			val context: Context = instance!!.applicationContext
 | 
						|
			val manager: WindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
 | 
						|
			val metrics: android.util.DisplayMetrics = android.util.DisplayMetrics()
 | 
						|
			manager.defaultDisplay.getMetrics(metrics)
 | 
						|
			return metrics.xdpi.toInt()
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun getRefreshRate(): Int {
 | 
						|
			val context: Context = instance!!.applicationContext
 | 
						|
			val manager: WindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
 | 
						|
			return manager.defaultDisplay.refreshRate.toInt()
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun getDisplayWidth(): Int {
 | 
						|
			val context: Context = instance!!.applicationContext
 | 
						|
			val manager: WindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
 | 
						|
			val size: android.graphics.Point = android.graphics.Point()
 | 
						|
			manager.defaultDisplay.getRealSize(size)
 | 
						|
			return size.x
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun getDisplayHeight(): Int {
 | 
						|
			val context: Context = instance!!.applicationContext
 | 
						|
			val manager: WindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
 | 
						|
			val size: android.graphics.Point = android.graphics.Point()
 | 
						|
			manager.defaultDisplay.getRealSize(size)
 | 
						|
			return size.y
 | 
						|
		}
 | 
						|
 | 
						|
		@JvmStatic
 | 
						|
		fun stop() {
 | 
						|
			instance!!.runOnUiThread {
 | 
						|
				fun run() {
 | 
						|
					instance!!.finish()
 | 
						|
					exitProcess(0)
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		class MyHandler(private val kincActivity: KincActivity) : Handler() {
 | 
						|
			override fun handleMessage(msg: Message) {
 | 
						|
				kincActivity.hideSystemUI()
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	var inputManager: InputMethodManager? = null
 | 
						|
	private var isDisabledStickyImmersiveMode = false
 | 
						|
 | 
						|
	private val hideSystemUIHandler = MyHandler(this)
 | 
						|
 | 
						|
	override fun onCreate(state: Bundle?) {
 | 
						|
		super.onCreate(state)
 | 
						|
		hideSystemUI()
 | 
						|
		instance = this
 | 
						|
		inputManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
 | 
						|
		isDisabledStickyImmersiveMode = try {
 | 
						|
			val ai: ApplicationInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
 | 
						|
			val bundle: Bundle = ai.metaData
 | 
						|
			bundle.getBoolean("disableStickyImmersiveMode")
 | 
						|
		} catch (e: PackageManager.NameNotFoundException) {
 | 
						|
			false
 | 
						|
		} catch (e: NullPointerException) {
 | 
						|
			false
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
    private fun hideSystemUI() {
 | 
						|
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
 | 
						|
    }
 | 
						|
 | 
						|
    private fun delayedHideSystemUI() {
 | 
						|
        hideSystemUIHandler.removeMessages(0)
 | 
						|
        if (!isDisabledStickyImmersiveMode) {
 | 
						|
            hideSystemUIHandler.sendEmptyMessageDelayed(0, 300)
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    override fun onWindowFocusChanged(hasFocus: Boolean) {
 | 
						|
        super.onWindowFocusChanged(hasFocus)
 | 
						|
        if (hasFocus) {
 | 
						|
            delayedHideSystemUI()
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            hideSystemUIHandler.removeMessages(0)
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
	override fun onKeyMultiple(keyCode: Int, count: Int, event: KeyEvent): Boolean {
 | 
						|
		this.nativeKincKeyPress(event.characters)
 | 
						|
		return false
 | 
						|
	}
 | 
						|
 | 
						|
	private external fun nativeKincKeyPress(chars: String)
 | 
						|
}
 |