Compare commits

...

4 Commits

@ -26,6 +26,7 @@ import org.isoron.uhabits.BuildConfig
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.databinding.AboutBinding
import org.isoron.uhabits.utils.applyBottomInset
import org.isoron.uhabits.utils.applyRootViewInsets
import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.setupToolbar
@ -55,6 +56,7 @@ class AboutView(
binding.tvTranslate.setOnClickListener { screen.showTranslationWebsite() }
binding.tvVersion.setOnClickListener { screen.onPressDeveloperCountdown() }
binding.tvVersion.text = String.format(version, BuildConfig.VERSION_NAME)
binding.outerLinearLayout.applyBottomInset()
applyRootViewInsets()
}
}

@ -20,11 +20,14 @@
package org.isoron.uhabits.activities.habits.list.views
import android.content.Context
import android.graphics.Rect
import android.os.Bundle
import android.os.Parcelable
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.ItemTouchHelper.DOWN
import androidx.recyclerview.widget.ItemTouchHelper.END
@ -57,6 +60,7 @@ class HabitCardListView(
) : RecyclerView(context, null, R.attr.scrollableRecyclerViewStyle) {
var checkmarkCount: Int = 0
private var insetDecorationsAdded: Boolean = false
var dataOffset: Int = 0
set(value) {
@ -75,9 +79,32 @@ class HabitCardListView(
setHasFixedSize(true)
isLongClickable = true
layoutManager = LinearLayoutManager(context)
applyBottomInset()
super.setAdapter(adapter)
}
private fun applyBottomInset() {
ViewCompat.setOnApplyWindowInsetsListener(this) { _, insets ->
if (insetDecorationsAdded) return@setOnApplyWindowInsetsListener insets
insetDecorationsAdded = true
val systemBarsInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())
addItemDecoration(object : ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: State
) {
val itemCount = parent.adapter?.itemCount
if (parent.getChildAdapterPosition(view) == itemCount?.minus(1)) {
outRect.bottom = systemBarsInsets.bottom
}
}
})
insets
}
}
fun createHabitCardView(): HabitCardView {
return cardViewFactory.create()
}

@ -238,17 +238,18 @@ class HabitCardView(
private fun getAbsoluteButtonLocation(timestamp: Timestamp): PointF {
val containerLocation = IntArray(2)
this.getLocationOnScreen(containerLocation)
this.getLocationInWindow(containerLocation)
val relButtonLocation = getRelativeButtonLocation(timestamp)
val windowInsets = rootWindowInsets
val statusBarHeight = if (SDK_INT <= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
val xInset = windowInsets?.displayCutout?.safeInsetLeft ?: 0
val yInset = if (SDK_INT <= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
windowInsets?.systemWindowInsetTop ?: 0
} else {
0
}
return PointF(
containerLocation[0].toFloat() + relButtonLocation.x,
containerLocation[1].toFloat() + relButtonLocation.y - statusBarHeight
containerLocation[0].toFloat() + relButtonLocation.x - xInset,
containerLocation[1].toFloat() + relButtonLocation.y - yInset
)
}

@ -25,6 +25,7 @@ import android.widget.FrameLayout
import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitState
import org.isoron.uhabits.databinding.ShowHabitBinding
import org.isoron.uhabits.utils.applyBottomInset
import org.isoron.uhabits.utils.applyToolbarInsets
import org.isoron.uhabits.utils.setupToolbar
@ -57,6 +58,7 @@ class ShowHabitView(context: Context) : FrameLayout(context) {
} else {
binding.targetCard.visibility = GONE
}
binding.linearLayout.applyBottomInset()
}
fun setListener(presenter: ShowHabitPresenter) {

@ -26,6 +26,7 @@ import org.isoron.uhabits.R
import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.databinding.SettingsActivityBinding
import org.isoron.uhabits.utils.applyBottomInset
import org.isoron.uhabits.utils.applyRootViewInsets
import org.isoron.uhabits.utils.setupToolbar
@ -44,6 +45,7 @@ class SettingsActivity : AppCompatActivity() {
theme = themeSwitcher.currentTheme
)
binding.root.applyRootViewInsets()
binding.root.applyBottomInset()
setContentView(binding.root)
}
}

@ -260,6 +260,14 @@ fun View.applyRootViewInsets() {
}
}
fun View.applyBottomInset() {
ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
val systemBarsInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())
view.setPadding(0, 0, 0, systemBarsInsets.bottom)
insets
}
}
fun View.applyToolbarInsets() {
ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
val systemBarsInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~
~ This file is part of Loop Habit Tracker.
@ -19,16 +18,16 @@
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="?windowBackgroundColor"
android:fillViewport="true">
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="?windowBackgroundColor"
android:fillViewport="true">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
app:popupTheme="?toolbarPopupTheme"
style="@style/Toolbar"/>
style="@style/Toolbar" />
<ScrollView
android:id="@+id/scrollView"
@ -37,6 +36,7 @@
android:layout_below="@id/toolbar">
<LinearLayout
android:id="@+id/outerLinearLayout"
style="@style/CardList">
<LinearLayout
@ -47,7 +47,7 @@
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="6dp"
android:src="@drawable/intro_icon_1"/>
android:src="@drawable/intro_icon_1" />
<TextView
android:layout_width="wrap_content"
@ -57,14 +57,14 @@
android:textSize="16sp"
android:layout_margin="6dp"
android:textColor="?aboutScreenColor"
android:text="@string/app_name"/>
android:text="@string/app_name" />
<TextView
android:id="@+id/tvVersion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text=""/>
android:text="" />
</LinearLayout>
@ -75,32 +75,32 @@
<TextView
style="@style/CardHeader"
android:text="@string/links"
android:textColor="?aboutScreenColor"/>
android:textColor="?aboutScreenColor" />
<TextView
android:id="@+id/tvRate"
style="@style/About.Item.Clickable"
android:text="@string/pref_rate_this_app"/>
android:text="@string/pref_rate_this_app" />
<TextView
android:id="@+id/tvFeedback"
style="@style/About.Item.Clickable"
android:text="@string/pref_send_feedback"/>
android:text="@string/pref_send_feedback" />
<TextView
android:id="@+id/tvTranslate"
style="@style/About.Item.Clickable"
android:text="@string/help_translate"/>
android:text="@string/help_translate" />
<TextView
android:id="@+id/tvSource"
style="@style/About.Item.Clickable"
android:text="@string/pref_view_source_code"/>
android:text="@string/pref_view_source_code" />
<TextView
android:id="@+id/tvPrivacy"
style="@style/About.Item.Clickable"
android:text="@string/pref_view_privacy"/>
android:id="@+id/tvPrivacy"
style="@style/About.Item.Clickable"
android:text="@string/pref_view_privacy" />
</LinearLayout>
@ -111,7 +111,7 @@
<TextView
style="@style/CardHeader"
android:text="@string/developers"
android:textColor="?aboutScreenColor"/>
android:textColor="?aboutScreenColor" />
<!--
This file lists developers who contributed with at least 100 lines
@ -120,31 +120,76 @@
linked at the bottom of the list. If you qualify, please feel free to
submit a pull request adding yourself here.
-->
<TextView style="@style/About.Item" android:text="Álinson S. Xavier (@iSoron)"/>
<TextView style="@style/About.Item" android:text="Quentin Hibon (@hiqua)"/>
<TextView style="@style/About.Item" android:text="Oleg Ivashchenko (@olegivo)"/>
<TextView style="@style/About.Item" android:text="Kristian Tashkov (@KristianTashkov)"/>
<TextView style="@style/About.Item" android:text="Jakub Kalinowski (@kalina559)"/>
<TextView style="@style/About.Item" android:text="Rechee Jozil (@recheej)"/>
<TextView style="@style/About.Item" android:text="Sebastian Gallese (@sgallese)"/>
<TextView style="@style/About.Item" android:text="Luboš Luňák (@llunak)"/>
<TextView style="@style/About.Item" android:text="Bindu (@vbh)"/>
<TextView style="@style/About.Item" android:text="Victor Yu (@vyu1)"/>
<TextView style="@style/About.Item" android:text="Christoph Hennemann (@chennemann)"/>
<TextView style="@style/About.Item" android:text="Денис (@sciamano)"/>
<TextView style="@style/About.Item" android:text="Joseph Tran (@JotraN)"/>
<TextView style="@style/About.Item" android:text="Nikhil (@regularcoder)"/>
<TextView style="@style/About.Item" android:text="JanetQC"/>
<TextView
android:id="@+id/tvContributors"
style="@style/About.Item.Clickable"
android:text="@string/view_all_contributors"/>
<TextView
style="@style/About.Item"
android:text="Álinson S. Xavier (@iSoron)" />
<TextView
style="@style/About.Item"
android:text="Quentin Hibon (@hiqua)" />
<TextView
style="@style/About.Item"
android:text="Oleg Ivashchenko (@olegivo)" />
<TextView
style="@style/About.Item"
android:text="Kristian Tashkov (@KristianTashkov)" />
<TextView
style="@style/About.Item"
android:text="Jakub Kalinowski (@kalina559)" />
<TextView
style="@style/About.Item"
android:text="Rechee Jozil (@recheej)" />
<TextView
style="@style/About.Item"
android:text="Sebastian Gallese (@sgallese)" />
<TextView
style="@style/About.Item"
android:text="Luboš Luňák (@llunak)" />
<TextView
style="@style/About.Item"
android:text="Bindu (@vbh)" />
<TextView
style="@style/About.Item"
android:text="Victor Yu (@vyu1)" />
<TextView
style="@style/About.Item"
android:text="Christoph Hennemann (@chennemann)" />
<TextView
style="@style/About.Item"
android:text="Денис (@sciamano)" />
<TextView
style="@style/About.Item"
android:text="Joseph Tran (@JotraN)" />
<TextView
style="@style/About.Item"
android:text="Nikhil (@regularcoder)" />
<TextView
style="@style/About.Item"
android:text="JanetQC" />
<TextView
android:id="@+id/tvContributors"
style="@style/About.Item.Clickable"
android:text="@string/view_all_contributors" />
</LinearLayout>
<include layout="@layout/about_translators"/>
<include layout="@layout/about_translators" />
>
>
</LinearLayout>
</ScrollView>

@ -17,8 +17,7 @@
~ with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<RelativeLayout
android:id="@+id/container"
<RelativeLayout android:id="@+id/container"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
@ -29,7 +28,7 @@
android:id="@+id/toolbar"
style="@style/Toolbar"
app:popupTheme="?toolbarPopupTheme"
android:layout_alignParentTop="true"/>
android:layout_alignParentTop="true" />
<ScrollView
android:id="@+id/scrollView"
@ -41,11 +40,12 @@
<LinearLayout
style="@style/CardList"
android:id="@+id/linearLayout"
android:clipToPadding="false">
<org.isoron.uhabits.activities.habits.show.views.SubtitleCardView
android:id="@+id/subtitleCard"
style="@style/ShowHabit.Subtitle"/>
style="@style/ShowHabit.Subtitle" />
<org.isoron.uhabits.activities.habits.show.views.NotesCardView
android:id="@+id/notesCard"
@ -55,36 +55,36 @@
<org.isoron.uhabits.activities.habits.show.views.OverviewCardView
android:id="@+id/overviewCard"
style="@style/Card"
android:paddingTop="12dp"/>
android:paddingTop="12dp" />
<org.isoron.uhabits.activities.habits.show.views.TargetCardView
android:id="@+id/targetCard"
style="@style/Card"
android:paddingTop="12dp"/>
android:paddingTop="12dp" />
<org.isoron.uhabits.activities.habits.show.views.ScoreCardView
android:id="@+id/scoreCard"
style="@style/Card"
android:gravity="center"/>
android:gravity="center" />
<org.isoron.uhabits.activities.habits.show.views.BarCardView
android:id="@+id/barCard"
style="@style/Card"
android:gravity="center"/>
android:gravity="center" />
<org.isoron.uhabits.activities.habits.show.views.HistoryCardView
android:id="@+id/historyCard"
style="@style/Card"
android:gravity="center"
android:paddingBottom="0dp"/>
android:paddingBottom="0dp" />
<org.isoron.uhabits.activities.habits.show.views.StreakCardView
android:id="@+id/streakCard"
style="@style/Card"/>
style="@style/Card" />
<org.isoron.uhabits.activities.habits.show.views.FrequencyCardView
android:id="@+id/frequencyCard"
style="@style/Card"/>
style="@style/Card" />
</LinearLayout>
</ScrollView>

Loading…
Cancel
Save