diff --git a/app/src/main/java/com/duckduckgo/app/bookmarks/ui/BookmarksActivity.kt b/app/src/main/java/com/duckduckgo/app/bookmarks/ui/BookmarksActivity.kt index 5a904f1981f2..93376cea4c79 100644 --- a/app/src/main/java/com/duckduckgo/app/bookmarks/ui/BookmarksActivity.kt +++ b/app/src/main/java/com/duckduckgo/app/bookmarks/ui/BookmarksActivity.kt @@ -16,7 +16,6 @@ package com.duckduckgo.app.bookmarks.ui -import android.app.AlertDialog import android.content.Context import android.content.Intent import android.net.Uri @@ -26,7 +25,7 @@ import android.view.Menu import android.view.View import android.view.ViewGroup import android.widget.ImageView -import android.widget.PopupMenu +import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.SearchView import androidx.lifecycle.Observer import androidx.recyclerview.widget.RecyclerView.Adapter @@ -46,6 +45,15 @@ import com.duckduckgo.app.global.view.show import kotlinx.android.synthetic.main.content_bookmarks.* import kotlinx.android.synthetic.main.include_toolbar.* import kotlinx.android.synthetic.main.view_bookmark_entry.view.* +import kotlinx.android.synthetic.main.content_bookmarks.emptyBookmarks +import kotlinx.android.synthetic.main.content_bookmarks.recycler +import kotlinx.android.synthetic.main.include_toolbar.toolbar +import kotlinx.android.synthetic.main.popup_window_bookmarks_menu.view.deleteBookmark +import kotlinx.android.synthetic.main.popup_window_bookmarks_menu.view.editBookmark +import kotlinx.android.synthetic.main.view_bookmark_entry.view.favicon +import kotlinx.android.synthetic.main.view_bookmark_entry.view.overflowMenu +import kotlinx.android.synthetic.main.view_bookmark_entry.view.title +import kotlinx.android.synthetic.main.view_bookmark_entry.view.url import timber.log.Timber class BookmarksActivity : DuckDuckGoActivity() { @@ -64,7 +72,7 @@ class BookmarksActivity : DuckDuckGoActivity() { } private fun setupBookmarksRecycler() { - adapter = BookmarksAdapter(applicationContext, viewModel) + adapter = BookmarksAdapter(layoutInflater, viewModel) recycler.adapter = adapter } @@ -126,10 +134,13 @@ class BookmarksActivity : DuckDuckGoActivity() { deleteDialog = AlertDialog.Builder(this) .setTitle(title) .setMessage(message) - .setPositiveButton(android.R.string.yes) { _, _ -> delete(bookmark) } - .setNegativeButton(android.R.string.no) { _, _ -> } - .create() - deleteDialog?.show() + .setPositiveButton(android.R.string.yes) { _, _ -> + delete(bookmark) + } + .setNegativeButton(android.R.string.no) { dialog, _ -> + dialog.dismiss() + } + .show() } private fun delete(bookmark: BookmarkEntity) { @@ -151,7 +162,7 @@ class BookmarksActivity : DuckDuckGoActivity() { } class BookmarksAdapter( - private val context: Context, + private val layoutInflater: LayoutInflater, private val viewModel: BookmarksViewModel ) : Adapter() { @@ -164,7 +175,7 @@ class BookmarksActivity : DuckDuckGoActivity() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookmarksViewHolder { val inflater = LayoutInflater.from(parent.context) val view = inflater.inflate(R.layout.view_bookmark_entry, parent, false) - return BookmarksViewHolder(view, viewModel) + return BookmarksViewHolder(layoutInflater, view, viewModel) } override fun onBindViewHolder(holder: BookmarksViewHolder, position: Int) { @@ -176,8 +187,7 @@ class BookmarksActivity : DuckDuckGoActivity() { } } - class BookmarksViewHolder(itemView: View, private val viewModel: BookmarksViewModel) : - ViewHolder(itemView) { + class BookmarksViewHolder(val layoutInflater: LayoutInflater, itemView: View, private val viewModel: BookmarksViewModel) : ViewHolder(itemView) { lateinit var bookmark: BookmarkEntity @@ -217,23 +227,14 @@ class BookmarksActivity : DuckDuckGoActivity() { return uri.baseHost ?: return urlString } - private fun showOverFlowMenu(overflowMenu: ImageView, bookmark: BookmarkEntity) { - val popup = PopupMenu(overflowMenu.context, overflowMenu) - popup.inflate(R.menu.bookmarks_individual_overflow_menu) - popup.setOnMenuItemClickListener { - when (it.itemId) { - - R.id.edit -> { - editBookmark(bookmark); true - } - R.id.delete -> { - deleteBookmark(bookmark); true - } - else -> false - - } + private fun showOverFlowMenu(anchor: ImageView, bookmark: BookmarkEntity) { + val popupMenu = BookmarksPopupMenu(layoutInflater) + val view = popupMenu.contentView + popupMenu.apply { + onMenuItemClicked(view.editBookmark) { editBookmark(bookmark) } + onMenuItemClicked(view.deleteBookmark) { deleteBookmark(bookmark) } } - popup.show() + popupMenu.show(itemView, anchor) } private fun editBookmark(bookmark: BookmarkEntity) { diff --git a/app/src/main/java/com/duckduckgo/app/bookmarks/ui/BookmarksPopupMenu.kt b/app/src/main/java/com/duckduckgo/app/bookmarks/ui/BookmarksPopupMenu.kt new file mode 100644 index 000000000000..8d10d48dd860 --- /dev/null +++ b/app/src/main/java/com/duckduckgo/app/bookmarks/ui/BookmarksPopupMenu.kt @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2020 DuckDuckGo + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.duckduckgo.app.bookmarks.ui + +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Build.VERSION.SDK_INT +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup.LayoutParams.WRAP_CONTENT +import android.widget.PopupWindow +import com.duckduckgo.app.browser.R + +class BookmarksPopupMenu(layoutInflater: LayoutInflater, view: View = inflate(layoutInflater, R.layout.popup_window_bookmarks_menu)) : + PopupWindow(view, WRAP_CONTENT, WRAP_CONTENT, true) { + + init { + if (SDK_INT <= 22) { + // popupwindow gets stuck on the screen on API 22 (tested on 23) without a background + // color. Adding it however garbles the elevation so we cannot have elevation here. + setBackgroundDrawable(ColorDrawable(Color.WHITE)) + } else { + elevation = ELEVATION + } + animationStyle = android.R.style.Animation_Dialog + } + + fun onMenuItemClicked(menuView: View, onClick: () -> Unit) { + menuView.setOnClickListener { + onClick() + dismiss() + } + } + + fun show(rootView: View, anchorView: View) { + val anchorLocation = IntArray(2) + anchorView.getLocationOnScreen(anchorLocation) + val x = MARGIN + val y = anchorLocation[1] + MARGIN + showAtLocation(rootView, Gravity.TOP or Gravity.END, x, y) + } + + companion object { + + private const val MARGIN = 30 + private const val ELEVATION = 6f + + fun inflate(layoutInflater: LayoutInflater, resourceId: Int): View { + return layoutInflater.inflate(resourceId, null) + } + } +} diff --git a/app/src/main/java/com/duckduckgo/app/icon/ui/ChangeIconActivity.kt b/app/src/main/java/com/duckduckgo/app/icon/ui/ChangeIconActivity.kt index 7df4c71f5934..2e2ced876991 100644 --- a/app/src/main/java/com/duckduckgo/app/icon/ui/ChangeIconActivity.kt +++ b/app/src/main/java/com/duckduckgo/app/icon/ui/ChangeIconActivity.kt @@ -24,6 +24,8 @@ import androidx.lifecycle.Observer import androidx.recyclerview.widget.GridLayoutManager import com.duckduckgo.app.browser.R import com.duckduckgo.app.global.DuckDuckGoActivity +import kotlinx.android.synthetic.main.content_app_icons.appIconsList +import kotlinx.android.synthetic.main.include_toolbar.toolbar import kotlinx.android.synthetic.main.content_app_icons.* import kotlinx.android.synthetic.main.include_toolbar.* diff --git a/app/src/main/res/color/browser_icon_color_selector_dark.xml b/app/src/main/res/color/browser_icon_color_selector_dark.xml index c2ff93c64211..cc3056f1256f 100644 --- a/app/src/main/res/color/browser_icon_color_selector_dark.xml +++ b/app/src/main/res/color/browser_icon_color_selector_dark.xml @@ -17,5 +17,5 @@ - + diff --git a/app/src/main/res/color/browser_icon_color_selector_light.xml b/app/src/main/res/color/browser_icon_color_selector_light.xml index 08729162fab2..4a7816ad6569 100644 --- a/app/src/main/res/color/browser_icon_color_selector_light.xml +++ b/app/src/main/res/color/browser_icon_color_selector_light.xml @@ -17,5 +17,5 @@ - + diff --git a/app/src/main/res/drawable/bottom_navigation_bar_bg.xml b/app/src/main/res/drawable/bottom_navigation_bar_bg.xml index 1cf17cd39fdb..79bff523c7a4 100644 --- a/app/src/main/res/drawable/bottom_navigation_bar_bg.xml +++ b/app/src/main/res/drawable/bottom_navigation_bar_bg.xml @@ -43,13 +43,13 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_cancel_brownish_24dp.xml b/app/src/main/res/drawable/ic_cancel_brownish_24dp.xml index 1052e0370478..796f2febb521 100644 --- a/app/src/main/res/drawable/ic_cancel_brownish_24dp.xml +++ b/app/src/main/res/drawable/ic_cancel_brownish_24dp.xml @@ -20,6 +20,6 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> diff --git a/app/src/main/res/drawable/loading_progress.xml b/app/src/main/res/drawable/loading_progress.xml new file mode 100644 index 000000000000..4de517b4f678 --- /dev/null +++ b/app/src/main/res/drawable/loading_progress.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/popup_menu_bg.xml b/app/src/main/res/drawable/popup_menu_bg.xml index faaf444af467..548e94e21199 100644 --- a/app/src/main/res/drawable/popup_menu_bg.xml +++ b/app/src/main/res/drawable/popup_menu_bg.xml @@ -15,6 +15,6 @@ --> - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_system_search.xml b/app/src/main/res/layout/activity_system_search.xml index 43c06a1e8cdb..8e4a25cc31be 100644 --- a/app/src/main/res/layout/activity_system_search.xml +++ b/app/src/main/res/layout/activity_system_search.xml @@ -142,7 +142,7 @@ android:paddingEnd="16dp" android:paddingBottom="2dp" android:text="@string/systemSearchDeviceAppLabel" - android:textColor="@color/grayish" + android:textColor="?normalTextColor" android:textSize="13sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/activity_tab_switcher_bottom_bar_feature.xml b/app/src/main/res/layout/activity_tab_switcher_bottom_bar_feature.xml index 175a1bb0d139..e6e198c10774 100644 --- a/app/src/main/res/layout/activity_tab_switcher_bottom_bar_feature.xml +++ b/app/src/main/res/layout/activity_tab_switcher_bottom_bar_feature.xml @@ -46,7 +46,7 @@ android:layout_width="match_parent" android:layout_height="@dimen/bottomBarHeight" android:layout_gravity="bottom" - android:background="@drawable/bottom_navigation_bar_bg" + android:background="?toolbarBgColor" android:gravity="center" android:orientation="horizontal" android:elevation="8dp" diff --git a/app/src/main/res/layout/fragment_browser_tab.xml b/app/src/main/res/layout/fragment_browser_tab.xml index ef5f9e496c81..50767e75aeed 100644 --- a/app/src/main/res/layout/fragment_browser_tab.xml +++ b/app/src/main/res/layout/fragment_browser_tab.xml @@ -28,10 +28,10 @@ android:layout_width="match_parent" android:layout_height="@dimen/bottomBarHeight" android:layout_gravity="bottom" - android:background="@drawable/bottom_navigation_bar_bg" android:elevation="8dp" android:gravity="center" android:orientation="horizontal" + android:background="?toolbarBgColor" app:layoutResource="@layout/layout_browser_bottom_navigation_bar" app:layout_behavior="com.duckduckgo.app.browser.ui.BottomNavigationBehavior" /> @@ -61,8 +61,8 @@ android:id="@+id/autoCompleteSuggestionsList" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/colorPrimary" - android:backgroundTint="?attr/colorPrimary" + android:background="?toolbarBgColor" + android:backgroundTint="?toolbarBgColor" android:clipToPadding="false" android:elevation="4dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" diff --git a/app/src/main/res/layout/include_cta.xml b/app/src/main/res/layout/include_cta.xml index a7bc15f426a9..664ef7b4a0ca 100644 --- a/app/src/main/res/layout/include_cta.xml +++ b/app/src/main/res/layout/include_cta.xml @@ -21,7 +21,7 @@ android:id="@+id/cta" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/colorPrimary" + android:background="?toolbarBgColor" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> diff --git a/app/src/main/res/layout/include_omnibar_toolbar.xml b/app/src/main/res/layout/include_omnibar_toolbar.xml index f637edec915b..79d8954e107a 100644 --- a/app/src/main/res/layout/include_omnibar_toolbar.xml +++ b/app/src/main/res/layout/include_omnibar_toolbar.xml @@ -33,13 +33,13 @@ android:id="@+id/toolbarContainer" android:layout_width="match_parent" android:layout_height="match_parent" - android:theme="@style/OmnibarToolbarTheme"> + android:background="?toolbarBgColor"> - + diff --git a/app/src/main/res/layout/item_autocomplete_bookmark_suggestion.xml b/app/src/main/res/layout/item_autocomplete_bookmark_suggestion.xml index 4796d7998112..eac317bb8e60 100644 --- a/app/src/main/res/layout/item_autocomplete_bookmark_suggestion.xml +++ b/app/src/main/res/layout/item_autocomplete_bookmark_suggestion.xml @@ -26,7 +26,7 @@ android:id="@+id/bookmarkIndicator" android:layout_width="24dp" android:layout_height="24dp" - android:layout_marginStart="16dp" + android:layout_marginStart="18dp" android:importantForAccessibility="no" android:src="@drawable/ic_autocomplete_bookmark" app:layout_constraintBottom_toBottomOf="parent" @@ -37,9 +37,9 @@ android:id="@+id/title" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="16dp" + android:layout_marginStart="8dp" android:ellipsize="end" - android:letterSpacing="0" + android:includeFontPadding="false" android:fontFamily="sans-serif" android:gravity="center_vertical|start" android:maxLines="1" @@ -55,9 +55,8 @@ android:id="@+id/url" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="16dp" + android:layout_marginStart="8dp" android:ellipsize="end" - android:letterSpacing="0" android:fontFamily="sans-serif" android:gravity="center_vertical|start" android:maxLines="1" diff --git a/app/src/main/res/layout/item_autocomplete_search_suggestion.xml b/app/src/main/res/layout/item_autocomplete_search_suggestion.xml index b929cfa9d7bd..25132140587b 100644 --- a/app/src/main/res/layout/item_autocomplete_search_suggestion.xml +++ b/app/src/main/res/layout/item_autocomplete_search_suggestion.xml @@ -58,7 +58,7 @@ android:layout_height="wrap_content" android:padding="6dp" android:paddingStart="16dp" - android:paddingEnd="16dp" + android:paddingEnd="14dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"> diff --git a/app/src/main/res/layout/item_tab.xml b/app/src/main/res/layout/item_tab.xml index 1375e0ee704e..e61cfcb180f3 100644 --- a/app/src/main/res/layout/item_tab.xml +++ b/app/src/main/res/layout/item_tab.xml @@ -23,7 +23,7 @@ android:layout_marginEnd="7dp" android:layout_marginBottom="10dp" app:cardElevation="4dp" - app:cardBackgroundColor="?attr/colorPrimary" + app:cardBackgroundColor="?toolbarBgColor" app:cardCornerRadius="6dp"> diff --git a/app/src/main/res/layout/popup_window_bookmarks_menu.xml b/app/src/main/res/layout/popup_window_bookmarks_menu.xml new file mode 100644 index 000000000000..337d368d472a --- /dev/null +++ b/app/src/main/res/layout/popup_window_bookmarks_menu.xml @@ -0,0 +1,35 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/view_bookmark_entry.xml b/app/src/main/res/layout/view_bookmark_entry.xml index ef2e3625ec0c..7d60da4d8dd2 100644 --- a/app/src/main/res/layout/view_bookmark_entry.xml +++ b/app/src/main/res/layout/view_bookmark_entry.xml @@ -51,7 +51,7 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:fontFamily="sans-serif" - android:textColor="?attr/bookmarkTitleTextColor" + android:textColor="?attr/normalTextColor" android:textSize="16sp" android:textStyle="normal" android:maxLines="1" diff --git a/app/src/main/res/values-v27/themes.xml b/app/src/main/res/values-v27/themes.xml index 2159a170cb68..f457f6ee067c 100644 --- a/app/src/main/res/values-v27/themes.xml +++ b/app/src/main/res/values-v27/themes.xml @@ -21,7 +21,7 @@ @@ -38,14 +38,17 @@ @color/darkThemePrimaryDark @color/white @color/white - @color/grayish - @color/grayish + @color/white + @color/white + @color/newBlack + @color/toolbarBorderColorDark + @color/almostBlackDark @color/browser_icon_color_selector_dark @color/white - @color/midGray - @color/midGray + @color/warGreyTwo + @color/almostBlack @color/white - @color/grayishTwo + @color/paleBrownishGray @color/midGray @color/white @color/grayish @@ -62,7 +65,7 @@ @color/white @color/grayishTwo @color/white - @color/midGray + @color/warGreyTwo @color/grayishTwo @color/subtleGrayTwo @color/almostBlack @@ -112,50 +115,53 @@