Add tab position setting support
This commit is contained in:
parent
6d05e2128e
commit
0d6f6c5dd1
|
@ -71,6 +71,9 @@ public interface SharedPreferenceConstants {
|
|||
String VALUE_COMPOSE_NOW_ACTION_TAKE_PHOTO = "take_photo";
|
||||
String VALUE_COMPOSE_NOW_ACTION_PICK_IMAGE = "pick_image";
|
||||
|
||||
String VALUE_TAB_POSITION_TOP = "top";
|
||||
String VALUE_TAB_POSITION_BOTTOM = "bottom";
|
||||
|
||||
String DEFAULT_THEME = VALUE_THEME_NAME_LIGHT;
|
||||
String DEFAULT_THEME_BACKGROUND = VALUE_THEME_BACKGROUND_DEFAULT;
|
||||
int DEFAULT_THEME_BACKGROUND_ALPHA = 160;
|
||||
|
@ -98,6 +101,8 @@ public interface SharedPreferenceConstants {
|
|||
int DEFAULT_DATABASE_ITEM_LIMIT = 100;
|
||||
int DEFAULT_LOAD_ITEM_LIMIT = 20;
|
||||
|
||||
String DEFAULT_TAB_POSITION = VALUE_TAB_POSITION_TOP;
|
||||
|
||||
// Exportable preferences
|
||||
|
||||
@ExportablePreference(INT)
|
||||
|
@ -286,6 +291,8 @@ public interface SharedPreferenceConstants {
|
|||
String KEY_NAVBAR_STYLE = "navbar_style";
|
||||
@ExportablePreference(STRING)
|
||||
String KEY_OVERRIDE_LANGUAGE = "override_language";
|
||||
@ExportablePreference(STRING)
|
||||
String KEY_TAB_POSITION = "tab_position";
|
||||
|
||||
// Internal preferences
|
||||
|
||||
|
|
|
@ -148,6 +148,12 @@ android {
|
|||
|
||||
}
|
||||
|
||||
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(':twidere.component.common')
|
||||
implementation project(':twidere.component.nyan')
|
||||
|
@ -174,6 +180,7 @@ dependencies {
|
|||
implementation 'androidx.palette:palette:1.0.0'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||
implementation 'com.google.android.material:material:1.1.0'
|
||||
implementation "androidx.core:core-ktx:1.2.0"
|
||||
|
||||
|
||||
/** Third-party dependencies **/
|
||||
|
|
|
@ -37,20 +37,6 @@ import android.graphics.drawable.Drawable
|
|||
import android.os.AsyncTask
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.view.GravityCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.viewpager.widget.ViewPager.OnPageChangeListener
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.unwrapped
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import androidx.drawerlayout.widget.DrawerLayoutAccessor
|
||||
import androidx.appcompat.app.ActionBarDrawerToggle
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.appcompat.widget.TintTypedArray
|
||||
import android.util.SparseIntArray
|
||||
import android.view.Gravity
|
||||
import android.view.KeyEvent
|
||||
|
@ -59,6 +45,18 @@ import android.view.View
|
|||
import android.view.View.OnClickListener
|
||||
import android.view.View.OnLongClickListener
|
||||
import android.view.ViewGroup.MarginLayoutParams
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.app.ActionBarDrawerToggle
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.appcompat.widget.TintTypedArray
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.view.*
|
||||
import androidx.drawerlayout.widget.DrawerLayout
|
||||
import androidx.drawerlayout.widget.DrawerLayoutAccessor
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.viewpager.widget.ViewPager.OnPageChangeListener
|
||||
import com.getkeepsafe.taptargetview.TapTarget
|
||||
import com.getkeepsafe.taptargetview.TapTargetView
|
||||
import com.squareup.otto.Subscribe
|
||||
|
@ -402,12 +400,20 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
|||
if (caller === leftDrawerFragment) return super.getSystemWindowInsets(caller, insets)
|
||||
if (mainTabs == null || homeContent == null) return false
|
||||
val height = mainTabs.height
|
||||
if (height != 0) {
|
||||
insets.top = height
|
||||
if (preferences[tabPositionKey] == SharedPreferenceConstants.VALUE_TAB_POSITION_TOP) {
|
||||
if (height != 0) {
|
||||
insets.top = height
|
||||
} else {
|
||||
insets.top = ThemeUtils.getActionBarHeight(this)
|
||||
}
|
||||
insets.bottom = systemWindowsInsets?.bottom ?: 0
|
||||
} else {
|
||||
insets.top = ThemeUtils.getActionBarHeight(this)
|
||||
if (height != 0) {
|
||||
insets.bottom = height
|
||||
} else {
|
||||
insets.bottom = ThemeUtils.getActionBarHeight(this)
|
||||
}
|
||||
}
|
||||
insets.bottom = systemWindowsInsets?.bottom ?: 0
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -600,19 +606,44 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
|||
return 1 - actionsButton.translationY / total
|
||||
}
|
||||
val totalHeight = controlBarHeight.toFloat()
|
||||
return 1 + toolbar.translationY / totalHeight
|
||||
return 1 + if (preferences[tabPositionKey] == SharedPreferenceConstants.VALUE_TAB_POSITION_TOP) {
|
||||
toolbar.translationY
|
||||
} else {
|
||||
-toolbar.translationY
|
||||
} / totalHeight
|
||||
}
|
||||
set(offset) {
|
||||
val translationY = if (mainTabs.columns > 1) 0 else (controlBarHeight * (offset - 1)).toInt()
|
||||
toolbar.translationY = translationY.toFloat()
|
||||
windowOverlay.translationY = translationY.toFloat()
|
||||
val lp = actionsButton.layoutParams
|
||||
if (lp is MarginLayoutParams) {
|
||||
actionsButton.translationY = (lp.bottomMargin + actionsButton.height) * (1 - offset)
|
||||
if (preferences[tabPositionKey] == SharedPreferenceConstants.VALUE_TAB_POSITION_TOP) {
|
||||
val translationY = if (mainTabs.columns > 1) {
|
||||
0
|
||||
} else {
|
||||
(controlBarHeight * (offset - 1)).toInt()
|
||||
}
|
||||
toolbar.translationY = translationY.toFloat()
|
||||
windowOverlay.translationY = translationY.toFloat()
|
||||
val lp = actionsButton.layoutParams
|
||||
if (lp is MarginLayoutParams) {
|
||||
actionsButton.translationY = (lp.bottomMargin + actionsButton.height) * (1 - offset)
|
||||
} else {
|
||||
actionsButton.translationY = actionsButton.height * (1 - offset)
|
||||
}
|
||||
notifyControlBarOffsetChanged()
|
||||
} else {
|
||||
actionsButton.translationY = actionsButton.height * (1 - offset)
|
||||
val translationY = if (mainTabs.columns > 1) {
|
||||
0
|
||||
} else {
|
||||
(toolbar.height * (offset - 1)).toInt()
|
||||
}
|
||||
toolbar.translationY = -translationY.toFloat()
|
||||
windowOverlay.translationY = -translationY.toFloat()
|
||||
val lp = actionsButton.layoutParams
|
||||
if (lp is MarginLayoutParams) {
|
||||
actionsButton.translationY = (lp.bottomMargin + toolbar.height + actionsButton.height) * (1 - offset)
|
||||
} else {
|
||||
actionsButton.translationY = actionsButton.height * (1 - offset)
|
||||
}
|
||||
notifyControlBarOffsetChanged()
|
||||
}
|
||||
notifyControlBarOffsetChanged()
|
||||
}
|
||||
|
||||
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
|
||||
|
@ -830,6 +861,21 @@ class HomeActivity : BaseActivity(), OnClickListener, OnPageChangeListener, Supp
|
|||
pagerAdapter.hasMultipleColumns = false
|
||||
mainTabs.columns = 1
|
||||
}
|
||||
if (preferences[tabPositionKey] == SharedPreferenceConstants.VALUE_TAB_POSITION_TOP) {
|
||||
toolbar.updateLayoutParams<RelativeLayout.LayoutParams> {
|
||||
addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE)
|
||||
}
|
||||
actionsButton.updateLayoutParams<RelativeLayout.LayoutParams> {
|
||||
addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE)
|
||||
}
|
||||
} else {
|
||||
toolbar.updateLayoutParams<RelativeLayout.LayoutParams> {
|
||||
addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE)
|
||||
}
|
||||
actionsButton.updateLayoutParams<RelativeLayout.LayoutParams> {
|
||||
addRule(RelativeLayout.ABOVE, toolbar.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupSlidingMenu() {
|
||||
|
|
|
@ -2,9 +2,9 @@ package org.mariotaku.twidere.constant
|
|||
|
||||
import android.content.SharedPreferences
|
||||
import android.os.Build
|
||||
import androidx.core.os.LocaleHelperAccessor
|
||||
import androidx.collection.ArraySet
|
||||
import android.text.TextUtils
|
||||
import androidx.collection.ArraySet
|
||||
import androidx.core.os.LocaleHelperAccessor
|
||||
import org.mariotaku.kpreferences.*
|
||||
import org.mariotaku.ktextension.bcp47Tag
|
||||
import org.mariotaku.ktextension.toLongOr
|
||||
|
@ -88,6 +88,7 @@ val navbarStyleKey = KStringKey(KEY_NAVBAR_STYLE, NavbarStyle.DEFAULT)
|
|||
val lastLaunchTimeKey = KLongKey("last_launch_time", -1)
|
||||
val promotionsEnabledKey = KBooleanKey("promotions_enabled", false)
|
||||
val translationDestinationKey = KNullableStringKey(KEY_TRANSLATION_DESTINATION, null)
|
||||
val tabPositionKey = KStringKey(KEY_TAB_POSITION, SharedPreferenceConstants.DEFAULT_TAB_POSITION)
|
||||
|
||||
object cacheSizeLimitKey : KSimpleKey<Int>(KEY_CACHE_SIZE_LIMIT, 300) {
|
||||
override fun read(preferences: SharedPreferences) = preferences.getInt(key, def).coerceIn(100,
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="?colorToolbar"
|
||||
android:elevation="@dimen/toolbar_elevation"
|
||||
app:contentInsetEnd="0dp"
|
||||
|
@ -80,7 +79,6 @@
|
|||
android:id="@+id/actionsButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_margin="@dimen/element_spacing_large"
|
||||
|
|
|
@ -35,6 +35,10 @@
|
|||
<item>Transparent</item>
|
||||
<item>Colored</item>
|
||||
</string-array>
|
||||
<string-array name="entries_tab_position">
|
||||
<item>Top</item>
|
||||
<item>Bottom</item>
|
||||
</string-array>
|
||||
<string-array name="entries_notification_content">
|
||||
<item>Home</item>
|
||||
<item>Interactions</item>
|
||||
|
|
|
@ -94,6 +94,10 @@
|
|||
<item>transparent</item>
|
||||
<item>colored</item>
|
||||
</string-array>
|
||||
<string-array name="values_tab_position">
|
||||
<item>top</item>
|
||||
<item>bottom</item>
|
||||
</string-array>
|
||||
<string-array name="values_notification_content">
|
||||
<item>home</item>
|
||||
<item>mentions</item>
|
||||
|
|
|
@ -914,6 +914,7 @@
|
|||
<string name="preference_title_multi_column_tab_width">Multi column tab width</string>
|
||||
<string name="preference_title_multi_column_tabs">Multi column tabs</string>
|
||||
<string name="preference_title_navbar_style">Navbar style</string>
|
||||
<string name="preference_title_tab_position">Tab position</string>
|
||||
<string name="preference_title_notification_channels">Channels</string>
|
||||
<string name="preference_title_notification_ringtone">Ringtone</string>
|
||||
<string name="preference_title_override_language">App language</string>
|
||||
|
|
|
@ -68,4 +68,19 @@
|
|||
android:value="true"/>
|
||||
</org.mariotaku.twidere.preference.EmojiSupportPreference>
|
||||
|
||||
<org.mariotaku.twidere.preference.EntrySummaryListPreference
|
||||
android:entries="@array/entries_tab_position"
|
||||
android:entryValues="@array/values_tab_position"
|
||||
android:key="tab_position"
|
||||
android:order="26"
|
||||
android:title="@string/preference_title_tab_position">
|
||||
<extra
|
||||
android:name="should_recreate"
|
||||
android:value="true"/>
|
||||
<extra
|
||||
android:name="recreate_activity"
|
||||
android:value="true"/>
|
||||
</org.mariotaku.twidere.preference.EntrySummaryListPreference>
|
||||
|
||||
|
||||
</PreferenceScreen>
|
Loading…
Reference in New Issue