Merge pull request #17 from finnmglas/feature/open-settings

Feature/open settings
This commit is contained in:
Finn M Glas 2020-05-21 06:39:05 +02:00 committed by GitHub
commit 75af3f2866
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 95 additions and 21 deletions

View file

@ -10,22 +10,6 @@ import android.view.animation.Animation
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_firststartup.*
// Taken from https://stackoverflow.com/questions/47293269
fun View.blink(
times: Int = Animation.INFINITE,
duration: Long = 1000L,
offset: Long = 20L,
minAlpha: Float = 0.2f,
maxAlpha: Float = 1.0f,
repeatMode: Int = Animation.REVERSE
) {
startAnimation(AlphaAnimation(minAlpha, maxAlpha).also {
it.duration = duration
it.startOffset = offset
it.repeatMode = repeatMode
it.repeatCount = times
})
}
class FirstStartupActivity : AppCompatActivity(){

View file

@ -10,8 +10,43 @@ import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.provider.Settings
import android.view.View
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.DecelerateInterpolator
import android.widget.Toast
// Taken from https://stackoverflow.com/questions/47293269
fun View.blink(
times: Int = Animation.INFINITE,
duration: Long = 1000L,
offset: Long = 20L,
minAlpha: Float = 0.2f,
maxAlpha: Float = 1.0f,
repeatMode: Int = Animation.REVERSE
) {
startAnimation(AlphaAnimation(minAlpha, maxAlpha).also {
it.duration = duration
it.startOffset = offset
it.repeatMode = repeatMode
it.repeatCount = times
})
}
fun View.fadeIn(duration: Long = 1000L) {
startAnimation(AlphaAnimation(0f, 1f).also {
it.interpolator = DecelerateInterpolator()
it.duration = duration
})
}
fun View.fadeOut(duration: Long = 1000L) {
startAnimation(AlphaAnimation(1f, 0f).also {
it.interpolator = DecelerateInterpolator()
it.duration = duration
})
}
/** Activity related */
fun isInstalled(uri: String, context: Context): Boolean {

View file

@ -32,7 +32,12 @@ class MainActivity : AppCompatActivity(),
// get device dimensions
private val displayMetrics = DisplayMetrics()
// timers
private var clockTimer = Timer()
private var tooltipTimer = Timer()
private var settingsIconShown = false
/** Activity Lifecycle functions */
override fun onCreate(savedInstanceState: Bundle?) {
@ -54,6 +59,9 @@ class MainActivity : AppCompatActivity(),
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
setContentView(R.layout.activity_main)
// Start by showing the settings icon
showSettingsIcon()
}
override fun onStart(){
@ -75,12 +83,13 @@ class MainActivity : AppCompatActivity(),
val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault())
clockTimer = fixedRateTimer("timer", true, 0L, 1000) {
clockTimer = fixedRateTimer("clockTimer", true, 0L, 1000) {
this@MainActivity.runOnUiThread {
dateView.text = dateFormat.format(Date())
timeView.text = timeFormat.format(Date())
}
}
}
override fun onPause() {
@ -88,6 +97,11 @@ class MainActivity : AppCompatActivity(),
clockTimer.cancel()
}
private fun openSettings(){
startActivity(Intent(this, SettingsActivity::class.java))
}
/** Touch- and Key-related functions to start activities */
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
@ -120,11 +134,36 @@ class MainActivity : AppCompatActivity(),
return true
}
// Open Settings Activity
override fun onLongPress(event: MotionEvent) {
startActivity(Intent(this, SettingsActivity::class.java))
override fun onLongPress(event: MotionEvent) { openSettings() }
// Tooltip
override fun onSingleTapUp(event: MotionEvent): Boolean {
when(settingsIconShown) {
true -> hideSettingsIcon()
false -> showSettingsIcon()
}
return true
}
private fun showSettingsIcon(){
settingstooltip.fadeIn()
settingstooltip.visibility = View.VISIBLE
settingsIconShown = true
tooltipTimer = fixedRateTimer("tooltipTimer", true, 10000, 1000) {
this@MainActivity.runOnUiThread { hideSettingsIcon() }
}
}
private fun hideSettingsIcon(){
tooltipTimer.cancel()
settingstooltip.fadeOut()
settingstooltip.visibility = View.INVISIBLE
settingsIconShown = false
}
fun settingsIconOnTouch(view: View){ openSettings() }
override fun onTouchEvent(event: MotionEvent): Boolean {
return if (mDetector.onTouchEvent(event)) { true } else { super.onTouchEvent(event) }
}
@ -136,6 +175,5 @@ class MainActivity : AppCompatActivity(),
override fun onDown(event: MotionEvent): Boolean { return true }
override fun onScroll(e1: MotionEvent, e2: MotionEvent, dX: Float, dY: Float): Boolean { return true }
override fun onShowPress(event: MotionEvent) {}
override fun onSingleTapUp(event: MotionEvent): Boolean { return true }
override fun onSingleTapConfirmed(event: MotionEvent): Boolean { return true }
}

View file

@ -36,4 +36,20 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.finnmglas.launcher.FontAwesomeSolid
android:id="@+id/settingstooltip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="settingsIconOnTouch"
android:text="@string/fas_settings"
android:textColor="#ccc"
android:textSize="36sp"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.95"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.95" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -3,6 +3,7 @@
<string name="fas_bars" translatable="false">&#xf0c9;</string>
<string name="fas_home" translatable="false">&#xf015;</string>
<string name="fas_globe" translatable="false">&#xf0ac;</string>
<string name="fas_settings" translatable="false">&#xf013;</string>
<string name="fas_star" translatable="false">&#xf005;</string>
<string name="far_star" translatable="false">&#xf005;</string>