Skip to content

Instantly share code, notes, and snippets.

View Bradleycorn's full-sized avatar

Brad Ball Bradleycorn

View GitHub Profile
@Bradleycorn
Bradleycorn / sqlplus.js
Created March 14, 2015 15:42
Titanium Alloy sqlite adapter with support for models with array values
//Based on alloy's built-in sqlite adapter from alloy v1.5.1
//https://github.com/appcelerator/alloy/blob/1.5.1/Alloy/lib/alloy/sync/sql.js
var _ = require('alloy/underscore')._;
// The database name used when none is specified in the
// model configuration.
var ALLOY_DB_DEFAULT = '_alloy_';
var ALLOY_ID_DEFAULT = 'alloy_id';
@Bradleycorn
Bradleycorn / activity_main.xml
Last active January 18, 2019 03:22
MotionLayout - Main Activity Layout
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
app:layoutDescription="@xml/main_activity_motion_scene"
app:currentState="@id/video_state_embedded_stopped">
@Bradleycorn
Bradleycorn / main_activity_motion_scene.xml
Last active January 19, 2019 00:34
MotionLayout - Motion Scene
<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">
<ConstraintSet android:id="@+id/video_state_embedded_playing">
<Constraint
android:id="@+id/video_player"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
@Bradleycorn
Bradleycorn / MainActivityViewModel.kt
Last active January 22, 2019 01:39
MotionLayout - ViewModel
class MainActivityViewModel: ViewModel() {
//...
private fun setOrientation(requestedOrientation: Int = -1) {
val newOrientation = requestedOrientation.takeUnless { it == -1 } ?: currentOrientation
_layoutState.value = when (newOrientation) {
Configuration.ORIENTATION_LANDSCAPE -> VideoLayoutState.FULLSCREEN
@Bradleycorn
Bradleycorn / MainActivity.kt
Last active February 3, 2019 21:19
MotionLayout - MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = getString(R.string.app_name)
setupVideo()
}
class MainActivity : AppCompatActivity() {
lateinit var orientationListener: OrientationEventListener
override fun onCreate(savedInstanceState: Bundle?) {
orientationListener = object: OrientationEventListener(this) {
override fun onOrientationChanged(orientation: Int) {
viewModel.onOrientationChange(orientation, resources.configuration.orientation)
}
}.apply { disable() }
class MainActivityViewModel: ViewModel() {
private val orientationHandler = Handler()
private var orientationLock: Int = Configuration.ORIENTATION_UNDEFINED
fun onDeviceOrientationChange(deviceOrientation: Int, activityOrientation: Int?) {
currentOrientation = when (deviceOrientation) {
in 0..20, in 160..200, in 340..359 -> Configuration.ORIENTATION_PORTRAIT
class MainActivityViewModel: ViewModel() {
val videoUrl = "https://video-dev.github.io/streams/x36xhzz/x36xhzz.m3u8"
enum class VideoPlaybackState {
STOPPED,
PLAYING
}
enum class VideoLayoutState {
class MainActivity : AppCompatActivity() {
private val viewModel: MainActivityViewModel by viewModels()
private val videoPlayerCallbacks = object: ControlledVideoView.IVideoListener {
override fun onPipToggleClicked() {
viewModel.onPipToggled()
}
override fun onVideoCloseClicked() {
class MainActivity : AppCompatActivity() {
private var currentPlaybackState: MainActivityViewModel.VideoPlaybackState? = null
private var currentLayoutState: MainActivityViewModel.VideoLayoutState? = null
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
super.onCreateOptionsMenu(menu)
menuInflater.inflate(R.menu.options_menu, menu)
return true
}