1
0
mirror of https://github.com/AllanWang/Frost-for-Facebook.git synced 2024-11-08 20:12:39 +01:00

Add nav items programmatically

This commit is contained in:
Allan Wang 2019-12-27 00:28:33 -08:00
parent 454872d712
commit 44524ce6ee
No known key found for this signature in database
GPG Key ID: C93E3F9C679D7A56
8 changed files with 138 additions and 16 deletions

View File

@ -18,9 +18,11 @@ package com.pitchedapps.frost.activities
import android.annotation.SuppressLint
import android.app.ActivityOptions
import android.content.Context
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.PointF
import android.graphics.drawable.RippleDrawable
import android.net.Uri
import android.os.Bundle
import android.view.Menu
@ -30,6 +32,8 @@ import android.webkit.ValueCallback
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.widget.FrameLayout
import androidx.annotation.ColorInt
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter
@ -37,6 +41,8 @@ import ca.allanwang.kau.searchview.SearchItem
import ca.allanwang.kau.searchview.SearchView
import ca.allanwang.kau.searchview.SearchViewHolder
import ca.allanwang.kau.searchview.bindSearchView
import ca.allanwang.kau.utils.adjustAlpha
import ca.allanwang.kau.utils.drawable
import ca.allanwang.kau.utils.fadeScaleTransition
import ca.allanwang.kau.utils.materialDialog
import ca.allanwang.kau.utils.restart
@ -45,6 +51,7 @@ import ca.allanwang.kau.utils.setMenuIcons
import ca.allanwang.kau.utils.showIf
import ca.allanwang.kau.utils.string
import ca.allanwang.kau.utils.tint
import ca.allanwang.kau.utils.toDrawable
import ca.allanwang.kau.utils.withMinAlpha
import com.afollestad.materialdialogs.checkbox.checkBoxPrompt
import com.google.android.material.appbar.AppBarLayout
@ -204,6 +211,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
}
// setupDrawer(savedInstanceState)
L.i { "Main started in ${System.currentTimeMillis() - start} ms" }
drawerWrapperBinding.initDrawer()
contentBinding.initFab()
lastAccessTime = System.currentTimeMillis()
}
@ -216,6 +224,85 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
private var hasFab = false
private var shouldShow = false
private class FrostMenuBuilder(private val context: Context, private val menu: Menu) {
private var order: Int = 0
private var groupId: Int = 13
private val items: MutableList<Menu> = mutableListOf()
fun primaryFrostItem(fbItem: FbItem) {
val item = menu.add(groupId, fbItem.ordinal, order++, context.string(fbItem.titleId))
item.icon = fbItem.icon.toDrawable(context, 18)
}
fun divider() {
groupId++
}
fun secondaryFrostItem(fbItem: FbItem) {
menu.add(groupId, fbItem.ordinal, order++, context.string(fbItem.titleId))
}
}
private fun ActivityMainDrawerWrapperBinding.initDrawer() {
fun createNavDrawable(@ColorInt foregroundColor: Int): RippleDrawable {
val drawable = drawable(R.drawable.nav_item_background) as RippleDrawable
drawable.setColor(
ColorStateList(
arrayOf(intArrayOf()),
intArrayOf(foregroundColor.adjustAlpha(0.16f))
)
)
return drawable
}
val toggle = ActionBarDrawerToggle(
this@BaseMainActivity, drawer, contentBinding.toolbar,
R.string.open,
R.string.close
)
toggle.isDrawerSlideAnimationEnabled = false
drawer.addDrawerListener(toggle)
toggle.syncState()
val foregroundColor = ColorStateList.valueOf(Prefs.textColor)
with(navigation) {
FrostMenuBuilder(this@BaseMainActivity, menu).apply {
primaryFrostItem(FbItem.FEED_MOST_RECENT)
primaryFrostItem(FbItem.FEED_TOP_STORIES)
primaryFrostItem(FbItem.ACTIVITY_LOG)
divider()
primaryFrostItem(FbItem.PHOTOS)
primaryFrostItem(FbItem.GROUPS)
primaryFrostItem(FbItem.FRIENDS)
primaryFrostItem(FbItem.CHAT)
primaryFrostItem(FbItem.PAGES)
divider()
primaryFrostItem(FbItem.EVENTS)
primaryFrostItem(FbItem.BIRTHDAYS)
primaryFrostItem(FbItem.ON_THIS_DAY)
divider()
primaryFrostItem(FbItem.NOTES)
primaryFrostItem(FbItem.SAVED)
primaryFrostItem(FbItem.MARKETPLACE)
}
setNavigationItemSelectedListener {
val item = FbItem.values[it.itemId]
frostEvent("Drawer Tab", "name" to item.name)
drawer.closeDrawer(navigation)
launchWebOverlay(item.url)
false
}
val navBg = Prefs.bgColor.withMinAlpha(200)
setBackgroundColor(navBg)
itemBackground = createNavDrawable(Prefs.accentColor)
itemTextColor = foregroundColor
itemIconTintList = foregroundColor
}
}
private fun ActivityMainContentBinding.initFab() {
hasFab = false
shouldShow = false
@ -565,7 +652,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract,
}
override fun backConsumer(): Boolean {
with (drawerWrapperBinding) {
with(drawerWrapperBinding) {
if (drawer.isDrawerOpen(navigation)) {
drawer.closeDrawer(navigation)
return true

View File

@ -37,12 +37,14 @@ class MainActivity : BaseMainActivity() {
override val headerBadgeChannel = BroadcastChannel<String>(Channel.CONFLATED)
override fun onNestedCreate(savedInstanceState: Bundle?) {
setupTabs()
setupViewPager()
with(contentBinding) {
setupTabs()
setupViewPager()
}
}
private fun setupViewPager() {
viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
private fun ActivityMainContentBinding.setupViewPager() {
viewpager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
if (lastPosition == position) {
@ -75,9 +77,9 @@ class MainActivity : BaseMainActivity() {
})
}
private fun setupTabs() {
viewPager.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabs))
tabs.addOnTabSelectedListener(object : TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
private fun ActivityMainContentBinding.setupTabs() {
viewpager.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabs))
tabs.addOnTabSelectedListener(object : TabLayout.ViewPagerOnTabSelectedListener(viewpager) {
override fun onTabReselected(tab: TabLayout.Tab) {
super.onTabReselected(tab)
currentFragment.onTabClick()
@ -88,7 +90,7 @@ class MainActivity : BaseMainActivity() {
(tab.customView as BadgedIcon).badgeText = null
}
})
headerBadgeChannel.subscribeDuringJob(this, Dispatchers.IO) { html ->
headerBadgeChannel.subscribeDuringJob(this@MainActivity, Dispatchers.IO) { html ->
try {
val doc = Jsoup.parse(html)
if (doc.select("[data-sigil=count]").isEmpty())

View File

@ -47,7 +47,10 @@ fun Context.showWebContextMenu(wc: WebContext) {
}
onDismiss {
// showing the dialog interrupts the touch down event, so we must ensure that the viewpager's swipe is enabled
(this@showWebContextMenu as? MainActivity)?.viewPager?.enableSwipe = true
(this@showWebContextMenu as? MainActivity)
?.contentBinding
?.viewpager
?.enableSwipe = true
}
}
}

View File

@ -88,7 +88,7 @@ class FrostJSI(val web: FrostWebView) {
*/
@JavascriptInterface
fun longClick(start: Boolean) {
activity?.viewPager?.enableSwipe = !start
activity?.contentBinding?.viewpager?.enableSwipe = !start
if (web.frostWebClient.urlSupportsRefresh) {
web.parent.swipeEnabled = !start
}
@ -151,7 +151,7 @@ class FrostJSI(val web: FrostWebView) {
@JavascriptInterface
fun allowHorizontalScrolling(enable: Boolean) {
activity?.viewPager?.enableSwipe = enable
activity?.contentBinding?.viewpager?.enableSwipe = enable
(context as? WebOverlayActivityBase)?.swipeBack?.disallowIntercept = !enable
}
}

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#f0f">
<item
android:id="@android:id/mask"
android:right="8dp">
<shape android:shape="rectangle">
<corners
android:bottomRightRadius="50dp"
android:topRightRadius="50dp" />
<solid android:color="#fff" />
</shape>
</item>
</ripple>

View File

@ -1,9 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
android:fitsSystemWindows="true"
tools:openDrawer="end">
<FrameLayout
android:id="@+id/main_container"
@ -15,5 +17,6 @@
android:id="@+id/navigation"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:visibility="gone" />
android:layout_gravity="start"
android:theme="@style/ThemeOverlay.Frost.NavigationView" />
</androidx.drawerlayout.widget.DrawerLayout>

View File

@ -40,12 +40,14 @@
<string name="show_all_results">Show All Results</string>
<string name="frost_description">Frost is a fully themable,
fully functional alternative to the official Facebook app, made from scratch and proudly open sourced.</string>
<string name="faq_title">Frost FAQ</string>
<string name="open">Open</string>
<string name="close">Close</string>
<string name="html_extraction_error">An error occurred in the html extraction.</string>
<string name="html_extraction_cancelled">The request has been cancelled.</string>
<string name="html_extraction_timeout">The request has timed out.</string>

View File

@ -128,5 +128,16 @@
<item name="tabMode">fixed</item>
</style>
<style name="ThemeOverlay.Frost.NavigationView" parent="">
<item name="android:colorControlHighlight">@android:color/transparent</item>
</style>
<!-- <style name="ShapeAppearanceOverlay.Item" parent="">-->
<!-- <item name="cornerFamily">rounded</item>-->
<!-- <item name="cornerSizeTopRight">10dp</item>-->
<!-- <item name="cornerSizeBottomRight">10dp</item>-->
<!-- <item name="cornerSizeBottomLeft">0dp</item>-->
<!-- <item name="cornerSizeTopLeft">0dp</item>-->
<!-- </style>-->
</resources>