Skip to content

Commit

Permalink
Merge pull request #41 from angrezichatterbox/Update-App-UI-to-a-tab-bar
Browse files Browse the repository at this point in the history
feat:Added a bottom nav bar
  • Loading branch information
andrewtavis authored Jul 25, 2024
2 parents 6471d54 + 59866bd commit af158a7
Show file tree
Hide file tree
Showing 17 changed files with 362 additions and 12 deletions.
3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ if (keystorePropertiesFile.exists()) {
}

android {
compileSdk 31
compileSdk 34

defaultConfig {
applicationId "org.scribe"
Expand Down Expand Up @@ -77,6 +77,7 @@ dependencies {
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation "androidx.exifinterface:exifinterface:1.3.3"
implementation "androidx.biometric:biometric-ktx:1.2.0-alpha03"
implementation 'com.google.android.material:material:1.12.0'

api 'joda-time:joda-time:2.10.13'
api 'com.github.tibbi:RecyclerView-FastScroller:e7d3e150c4'
Expand Down
87 changes: 86 additions & 1 deletion app/src/main/kotlin/org/scribe/activities/AboutActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,19 @@ import android.content.Intent
import android.content.Intent.*
import android.os.Build
import android.os.Bundle
import android.view.GestureDetector
import android.view.Menu
import android.view.MotionEvent
import androidx.core.net.toUri
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.android.synthetic.main.activity_about.*
import org.scribe.R
import org.scribe.dialogs.ConfirmationAdvancedDialog
import org.scribe.extensions.*
import org.scribe.helpers.*
import kotlin.math.abs

class AboutActivity : BaseSimpleActivity() {
class AboutActivity : BaseSimpleActivity(), GestureDetector.OnGestureListener{
private var appName = ""
private var primaryColor = 0

Expand All @@ -22,17 +26,46 @@ class AboutActivity : BaseSimpleActivity() {
private val EASTER_EGG_TIME_LIMIT = 3000L
private val EASTER_EGG_REQUIRED_CLICKS = 7

private lateinit var gestureDetector: GestureDetector
private val swipeThreshold = 100
private val swipeVelocityThreshold = 100

override fun getAppIconIDs() = intent.getIntegerArrayListExtra(APP_ICON_IDS) ?: ArrayList()

override fun getAppLauncherName() = intent.getStringExtra(APP_LAUNCHER_NAME) ?: ""

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_about)
gestureDetector = GestureDetector(this)
appName = intent.getStringExtra(APP_NAME) ?: ""
val textColor = getProperTextColor()
val backgroundColor = getProperBackgroundColor()
primaryColor = getProperPrimaryColor()
supportActionBar?.setDisplayHomeAsUpEnabled(false)
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation)

bottomNavigationView.selectedItemId = R.id.info

bottomNavigationView.setOnNavigationItemSelectedListener(BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.settings -> {
startActivity(Intent(applicationContext, SettingsActivity::class.java))
overridePendingTransition(0, 0)
return@OnNavigationItemSelectedListener true
}

R.id.about -> {
return@OnNavigationItemSelectedListener true }
R.id.installation -> {
startActivity(Intent(applicationContext, MainActivity::class.java))
overridePendingTransition(0, 0)
return@OnNavigationItemSelectedListener true
}
}
false
})
bottomNavigationView.selectedItemId = R.id.about

arrayOf(
about_invite_icon,
Expand All @@ -50,6 +83,15 @@ class AboutActivity : BaseSimpleActivity() {
}
}

override fun onTouchEvent(event: MotionEvent): Boolean {
return if (gestureDetector.onTouchEvent(event)) {
true
}
else {
super.onTouchEvent(event)
}
}

override fun onResume() {
super.onResume()
updateTextColors(about_scrollview)
Expand Down Expand Up @@ -121,4 +163,47 @@ class AboutActivity : BaseSimpleActivity() {
}
}
}

override fun onDown(e: MotionEvent): Boolean {
return false
}

override fun onShowPress(e: MotionEvent) {
return
}

override fun onSingleTapUp(e: MotionEvent): Boolean {
return false
}

override fun onScroll(e1: MotionEvent?, e2: MotionEvent, distanceX: Float, distanceY: Float): Boolean {
return false
}

override fun onLongPress(e: MotionEvent) {
return
}

override fun onFling(e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
try {
val diffY = e2.y - e1!!.y
val diffX = e2.x - e1.x
if (abs(diffX) > abs(diffY)) {
if (abs(diffX) > swipeThreshold && abs(velocityX) > swipeVelocityThreshold) {
if (diffX > 0) {
startActivity(Intent(applicationContext, SettingsActivity::class.java))
}
else {
return false
}
}
}
}
catch (exception: Exception) {
exception.printStackTrace()
}
return true
}
}


88 changes: 87 additions & 1 deletion app/src/main/kotlin/org/scribe/activities/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,58 @@ import android.graphics.drawable.LayerDrawable
import android.graphics.drawable.RippleDrawable
import android.os.Bundle
import android.provider.Settings
import android.view.GestureDetector
import android.view.Menu
import android.view.MenuItem
import android.view.MotionEvent
import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import androidx.appcompat.app.AppCompatDelegate
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.android.synthetic.main.activity_main.*
import org.scribe.BuildConfig
import org.scribe.R
import org.scribe.dialogs.ConfirmationAdvancedDialog
import org.scribe.extensions.*
import org.scribe.helpers.LICENSE_GSON
import kotlin.math.abs

class MainActivity : SimpleActivity() {

class MainActivity : SimpleActivity(), GestureDetector.OnGestureListener {

private lateinit var gestureDetector: GestureDetector
private val swipeThreshold = 100
private val swipeVelocityThreshold = 100
override fun onCreate(savedInstanceState: Bundle?) {
applyUserDarkModePreference()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
appLaunched(BuildConfig.APPLICATION_ID)
gestureDetector = GestureDetector(this)

val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation)

bottomNavigationView.selectedItemId = R.id.installation

bottomNavigationView.setOnNavigationItemSelectedListener(BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.settings -> {
startActivity(Intent(applicationContext, SettingsActivity::class.java))
overridePendingTransition(0, 0)
return@OnNavigationItemSelectedListener true
}

R.id.installation -> {
return@OnNavigationItemSelectedListener true
}
R.id.info -> {
startActivity(Intent(applicationContext, AboutActivity::class.java))
overridePendingTransition(0, 0)
return@OnNavigationItemSelectedListener true
}
}
false
})
scribe_key.setOnClickListener {
(getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager).showInputMethodPicker()
}
Expand All @@ -41,6 +76,15 @@ class MainActivity : SimpleActivity() {
else AppCompatDelegate.MODE_NIGHT_NO
)
}

override fun onTouchEvent(event: MotionEvent): Boolean {
return if (gestureDetector.onTouchEvent(event)) {
true
}
else {
super.onTouchEvent(event)
}
}
override fun onResume() {
super.onResume()
if (!isKeyboardEnabled()) {
Expand Down Expand Up @@ -101,4 +145,46 @@ class MainActivity : SimpleActivity() {
it.settingsActivity == SettingsActivity::class.java.canonicalName
}
}

override fun onDown(e: MotionEvent): Boolean {
return false
}

override fun onShowPress(e: MotionEvent) {
return
}

override fun onSingleTapUp(e: MotionEvent): Boolean {
return false
}

override fun onScroll(e1: MotionEvent?, e2: MotionEvent, distanceX: Float, distanceY: Float): Boolean {
return false
}

override fun onLongPress(e: MotionEvent) {
return
}

override fun onFling(e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
try {
val diffY = e2.y - e1!!.y
val diffX = e2.x - e1.x
if (abs(diffX) > abs(diffY)) {
if (abs(diffX) > swipeThreshold && abs(velocityX) > swipeVelocityThreshold) {
if (diffX > 0) {
return false
}
else {
startActivity(Intent(applicationContext, SettingsActivity::class.java))
}
}
}
}
catch (exception: Exception) {
exception.printStackTrace()
}
return true
}
}

87 changes: 85 additions & 2 deletions app/src/main/kotlin/org/scribe/activities/SettingsActivity.kt
Original file line number Diff line number Diff line change
@@ -1,23 +1,55 @@
package org.scribe.activities

import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.os.Bundle
import android.view.GestureDetector
import android.view.Menu
import android.view.MotionEvent
import androidx.appcompat.app.AppCompatDelegate
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.android.synthetic.main.activity_settings.*
import org.scribe.R
import org.scribe.dialogs.RadioGroupDialog
import org.scribe.extensions.config
import org.scribe.extensions.updateTextColors
import org.scribe.helpers.*
import org.scribe.models.RadioItem
import kotlin.math.abs

class SettingsActivity : SimpleActivity() {
class SettingsActivity : SimpleActivity(), GestureDetector.OnGestureListener {

private lateinit var gestureDetector: GestureDetector
private val swipeThreshold = 100
private val swipeVelocityThreshold = 100
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_settings)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
gestureDetector = GestureDetector(this)
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation)
if (bottomNavigationView != null) {
bottomNavigationView.selectedItemId = R.id.settings

bottomNavigationView.setOnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.installation -> {
startActivity(Intent(applicationContext, MainActivity::class.java))
overridePendingTransition(0, 0)
true
}
R.id.settings -> true
R.id.info -> {
startActivity(Intent(applicationContext, AboutActivity::class.java))
overridePendingTransition(0, 0)
true
}
else -> false
}
}
}
}

override fun onResume() {
Expand Down Expand Up @@ -120,4 +152,55 @@ class SettingsActivity : SimpleActivity() {
else -> getString(R.string.translation_english)
}
}
}

override fun onTouchEvent(event: MotionEvent): Boolean {
return if (gestureDetector.onTouchEvent(event)) {
true
}
else {
super.onTouchEvent(event)
}
}

override fun onDown(e: MotionEvent): Boolean {
return false
}

override fun onShowPress(e: MotionEvent) {
return
}

override fun onSingleTapUp(e: MotionEvent): Boolean {
return false
}

override fun onScroll(e1: MotionEvent?, e2: MotionEvent, distanceX: Float, distanceY: Float): Boolean {
return false
}

override fun onLongPress(e: MotionEvent) {
return
}

override fun onFling(e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
try {
val diffY = e2.y - e1!!.y
val diffX = e2.x - e1.x
if (abs(diffX) > abs(diffY)) {
if (abs(diffX) > swipeThreshold && abs(velocityX) > swipeVelocityThreshold) {
if (diffX > 0) {
startActivity(Intent(applicationContext, MainActivity::class.java))
}
else {
startActivity(Intent(applicationContext, AboutActivity::class.java))
}
}
}
}
catch (exception: Exception) {
exception.printStackTrace()
}
return true
}
}

9 changes: 9 additions & 0 deletions app/src/main/res/drawable/material_info.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:pathData="M448.67,680h66.66v-240h-66.66v240ZM479.99,364q15.01,0 25.18,-9.97 10.16,-9.96 10.16,-24.7 0,-15.3 -10.15,-25.65 -10.16,-10.35 -25.17,-10.35 -15.01,0 -25.18,10.35 -10.16,10.35 -10.16,25.65 0,14.74 10.15,24.7 10.16,9.97 25.17,9.97ZM480.18,880q-82.83,0 -155.67,-31.5 -72.84,-31.5 -127.18,-85.83Q143,708.33 111.5,635.44T80,479.67q0,-82.88 31.5,-155.78Q143,251 197.33,197q54.34,-54 127.23,-85.5T480.33,80q82.88,0 155.78,31.5Q709,143 763,197t85.5,127Q880,397 880,479.82q0,82.83 -31.5,155.67Q817,708.33 763,762.54q-54,54.21 -127,85.84Q563,880 480.18,880ZM480.33,813.33q139,0 236,-97.33t97,-236.33q0,-139 -96.87,-236 -96.88,-97 -236.46,-97 -138.67,0 -236,96.87 -97.33,96.88 -97.33,236.46 0,138.67 97.33,236 97.33,97.33 236.33,97.33ZM480,480Z"
android:fillColor="#e8eaed"/>
</vector>
Loading

0 comments on commit af158a7

Please sign in to comment.