From ee229c970938fc64a3937dd1811766c3a5dd47cd Mon Sep 17 00:00:00 2001
From: Colin Lee
Date: Sun, 10 Feb 2019 19:30:37 -0600
Subject: [PATCH] Fixes #354: Overflow menu for multitasking in current session
---
app/build.gradle | 2 +
.../org/mozilla/fenix/home/HomeFragment.kt | 10 +-
.../CurrentSessionBottomSheetFragment.kt | 44 ++++++
.../org/mozilla/fenix/home/tabs/TabsUIView.kt | 26 ++++
.../main/res/drawable/ic_add_black_24dp.xml | 9 --
app/src/main/res/drawable/ic_archive.xml | 10 ++
.../main/res/drawable/ic_close_black_24dp.xml | 9 --
app/src/main/res/drawable/ic_delete.xml | 10 ++
app/src/main/res/drawable/ic_send.xml | 10 ++
.../ic_session_thumbnail_placeholder_blue.xml | 20 +++
.../layout/current_session_bottom_sheet.xml | 98 +++++++++++++
app/src/main/res/layout/fragment_home.xml | 135 +++++++++---------
app/src/main/res/layout/tab_list_header.xml | 2 +-
app/src/main/res/layout/tab_list_row.xml | 2 +-
app/src/main/res/values/strings.xml | 6 +
app/src/main/res/values/styles.xml | 9 ++
16 files changed, 309 insertions(+), 93 deletions(-)
create mode 100644 app/src/main/java/org/mozilla/fenix/home/sessions/CurrentSessionBottomSheetFragment.kt
delete mode 100644 app/src/main/res/drawable/ic_add_black_24dp.xml
create mode 100644 app/src/main/res/drawable/ic_archive.xml
delete mode 100644 app/src/main/res/drawable/ic_close_black_24dp.xml
create mode 100644 app/src/main/res/drawable/ic_delete.xml
create mode 100644 app/src/main/res/drawable/ic_send.xml
create mode 100644 app/src/main/res/drawable/ic_session_thumbnail_placeholder_blue.xml
create mode 100644 app/src/main/res/layout/current_session_bottom_sheet.xml
diff --git a/app/build.gradle b/app/build.gradle
index 96c77674a..b184f880f 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -25,6 +25,8 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
+ shrinkResources false
+ minifyEnabled false
applicationIdSuffix ".debug"
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
index 61b805795..2d43bb5ea 100644
--- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
@@ -17,14 +17,12 @@ import androidx.fragment.app.Fragment
import androidx.navigation.Navigation
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.fragment_home.view.*
-import kotlinx.android.synthetic.main.tab_list_header.view.*
import mozilla.components.browser.menu.BrowserMenu
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import org.mozilla.fenix.DefaultThemeManager
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
-import org.mozilla.fenix.ext.increaseTapArea
import org.mozilla.fenix.ThemeManager
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.home.sessions.SessionsComponent
@@ -92,12 +90,7 @@ class HomeFragment : Fragment() {
view.toolbar.setCompoundDrawablesWithIntrinsicBounds(searchIcon, null, null, null)
val roundToInt = (toolbarPaddingDp * Resources.getSystem().displayMetrics.density).roundToInt()
view.toolbar.compoundDrawablePadding = roundToInt
- view.toolbar.setOnClickListener { it ->
- val directions = HomeFragmentDirections.actionHomeFragmentToSearchFragment(null)
- Navigation.findNavController(it).navigate(directions)
- }
- view.add_tab_button.increaseTapArea(addTabButtonIncreaseDps)
- view.add_tab_button.setOnClickListener {
+ view.toolbar.setOnClickListener {
val directions = HomeFragmentDirections.actionHomeFragmentToSearchFragment(null)
Navigation.findNavController(it).navigate(directions)
}
@@ -210,6 +203,7 @@ class HomeFragment : Fragment() {
companion object {
const val addTabButtonIncreaseDps = 8
+ const val overflowButtonIncreaseDps = 8
const val toolbarPaddingDp = 12f
const val firstKeyTriggerFrame = 55
const val secondKeyTriggerFrame = 90
diff --git a/app/src/main/java/org/mozilla/fenix/home/sessions/CurrentSessionBottomSheetFragment.kt b/app/src/main/java/org/mozilla/fenix/home/sessions/CurrentSessionBottomSheetFragment.kt
new file mode 100644
index 000000000..9dc2b44db
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/home/sessions/CurrentSessionBottomSheetFragment.kt
@@ -0,0 +1,44 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.fenix.home.sessions
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.google.android.material.bottomsheet.BottomSheetDialogFragment
+import kotlinx.android.extensions.LayoutContainer
+import kotlinx.android.synthetic.main.current_session_bottom_sheet.view.*
+import org.mozilla.fenix.R
+import org.mozilla.fenix.ext.requireComponents
+
+class CurrentSessionBottomSheetFragment : BottomSheetDialogFragment(), LayoutContainer {
+
+ override val containerView: View?
+ get() = view
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setStyle(BottomSheetDialogFragment.STYLE_NORMAL, R.style.CurrentSessionBottomSheetDialogTheme)
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ val view = inflater.inflate(R.layout.current_session_bottom_sheet, container, false)
+
+ view.current_session_card_tab_list.text = requireComponents.core.sessionManager.sessions.joinToString(", ") {
+ if (it.title.length > maxTitleLength) it.title.substring(0, maxTitleLength) + "..." else it.title
+ }
+
+ view.delete_session_button.setOnClickListener {
+ requireComponents.core.sessionManager.removeAll()
+ dismiss()
+ }
+ return view
+ }
+
+ companion object {
+ const val maxTitleLength = 20
+ }
+}
diff --git a/app/src/main/java/org/mozilla/fenix/home/tabs/TabsUIView.kt b/app/src/main/java/org/mozilla/fenix/home/tabs/TabsUIView.kt
index ca7dc3099..cd4afe841 100644
--- a/app/src/main/java/org/mozilla/fenix/home/tabs/TabsUIView.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/tabs/TabsUIView.kt
@@ -4,17 +4,25 @@
package org.mozilla.fenix.home.tabs
+import android.app.Activity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.fragment.app.FragmentActivity
+import androidx.navigation.Navigation
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import io.reactivex.Observable
import io.reactivex.Observer
import io.reactivex.functions.Consumer
+import kotlinx.android.synthetic.main.tab_list_header.view.*
import org.mozilla.fenix.R
+import org.mozilla.fenix.ext.increaseTapArea
+import org.mozilla.fenix.home.HomeFragment
+import org.mozilla.fenix.home.HomeFragmentDirections
+import org.mozilla.fenix.home.sessions.CurrentSessionBottomSheetFragment
import org.mozilla.fenix.mvi.UIView
class TabsUIView(
@@ -40,10 +48,28 @@ class TabsUIView(
adapter = tabsAdapter
itemAnimator = DefaultItemAnimator()
}
+ header.add_tab_button.increaseTapArea(HomeFragment.addTabButtonIncreaseDps)
+ header.add_tab_button.setOnClickListener {
+ val directions = HomeFragmentDirections.actionHomeFragmentToSearchFragment(null)
+ Navigation.findNavController(it).navigate(directions)
+ }
+ header.tabs_overflow_button.increaseTapArea(HomeFragment.overflowButtonIncreaseDps)
+ header.tabs_overflow_button.setOnClickListener {
+ if (view.context as? Activity != null) {
+ CurrentSessionBottomSheetFragment().show(
+ (view.context as FragmentActivity).supportFragmentManager,
+ overflowFragmentTag
+ )
+ }
+ }
}
override fun updateView() = Consumer {
tabsAdapter.sessions = it.sessions
header.visibility = if (it.sessions.isEmpty()) View.GONE else View.VISIBLE
}
+
+ companion object {
+ const val overflowFragmentTag = "current session overflow"
+ }
}
diff --git a/app/src/main/res/drawable/ic_add_black_24dp.xml b/app/src/main/res/drawable/ic_add_black_24dp.xml
deleted file mode 100644
index 0258249cc..000000000
--- a/app/src/main/res/drawable/ic_add_black_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_archive.xml b/app/src/main/res/drawable/ic_archive.xml
new file mode 100644
index 000000000..001c5806a
--- /dev/null
+++ b/app/src/main/res/drawable/ic_archive.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_close_black_24dp.xml b/app/src/main/res/drawable/ic_close_black_24dp.xml
deleted file mode 100644
index ede4b7108..000000000
--- a/app/src/main/res/drawable/ic_close_black_24dp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 000000000..26cc6d19b
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_send.xml b/app/src/main/res/drawable/ic_send.xml
new file mode 100644
index 000000000..5c0be40c8
--- /dev/null
+++ b/app/src/main/res/drawable/ic_send.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_session_thumbnail_placeholder_blue.xml b/app/src/main/res/drawable/ic_session_thumbnail_placeholder_blue.xml
new file mode 100644
index 000000000..97b362472
--- /dev/null
+++ b/app/src/main/res/drawable/ic_session_thumbnail_placeholder_blue.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/current_session_bottom_sheet.xml b/app/src/main/res/layout/current_session_bottom_sheet.xml
new file mode 100644
index 000000000..fb183120b
--- /dev/null
+++ b/app/src/main/res/layout/current_session_bottom_sheet.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 0e67e5e84..07442d656 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -2,79 +2,83 @@
-
+ android:layout_height="match_parent">
+
-
-
-
-
-
-
-
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/menuButton" />
-
-
+ android:layout_marginEnd="16dp"
+ android:layout_marginTop="64dp"
+ android:layout_marginStart="16dp"
+ android:elevation="@dimen/toolbar_elevation"
+ android:background="?attr/toolbarWrapperBackground"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/wordmark">
-
+
+
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/tab_list_header.xml b/app/src/main/res/layout/tab_list_header.xml
index a22b6b06d..27d487388 100644
--- a/app/src/main/res/layout/tab_list_header.xml
+++ b/app/src/main/res/layout/tab_list_header.xml
@@ -24,7 +24,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
- android:src="@drawable/ic_add_black_24dp"
+ android:src="@drawable/ic_new"
android:baselineAlignBottom="true"
app:layout_constraintBaseline_toBaselineOf="@id/header_text"
app:layout_constraintEnd_toStartOf="@id/tabs_overflow_button"/>
diff --git a/app/src/main/res/layout/tab_list_row.xml b/app/src/main/res/layout/tab_list_row.xml
index 78a82b39b..410d13ef2 100644
--- a/app/src/main/res/layout/tab_list_row.xml
+++ b/app/src/main/res/layout/tab_list_row.xml
@@ -42,7 +42,7 @@
%1$s puts you in control.
%1$s is produced by Mozilla. Our mission is to foster a healthy, open Internet.
]]>
+
+
+ Delete
+ Archive
+ Send and Share
+ Current session image
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index a59bf6b44..7cc50b199 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -116,4 +116,13 @@
- 0dp
- @drawable/search_pill_background
+
+
+
+