Browse Source

New icons (#5012)

This changes all icons to rounded Material symbols and additionally

- removes the material typeface library
- increases the size of the subscribe icon on profiles and makes the two
states easier to distinguish
- displays filled icons on selected tabs and outlined ones on unselected
tabs
- adjusts some colors to better fit into the themes
- removes duplicate icons
- establishes a naming convention for icons
- when "download media previews" is off, gifs now have their own icon
instead of sharing the video icon
- changes the # and @ buttons in the compose view to use icons instead
of text

<img
src="https://github.com/user-attachments/assets/c6289d1b-55d7-43e9-a7df-c3495b866fb2"
width="260"/> <img
src="https://github.com/user-attachments/assets/64bbcaf1-ace1-4ca6-8a7a-42486dd5d664"
width="260"/> <img
src="https://github.com/user-attachments/assets/2cfdb8ba-4ef9-4282-afa6-f0d4622a4f57"
width="260"/> <img
src="https://github.com/user-attachments/assets/4d3460ff-d29d-4c60-97d7-dd094f3287b9"
width="260"/>
pull/5025/head
Konrad Pozniak 12 months ago committed by GitHub
parent
commit
db84e2e01a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 13
      CONTRIBUTING.md
  2. 1
      app/build.gradle
  3. 4
      app/src/green/res/values/flavor-colors.xml
  4. 2
      app/src/main/AndroidManifest.xml
  5. 4
      app/src/main/java/com/keylesspalace/tusky/AccountsInListFragment.kt
  6. 18
      app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.kt
  7. 46
      app/src/main/java/com/keylesspalace/tusky/MainActivity.kt
  8. 18
      app/src/main/java/com/keylesspalace/tusky/TabData.kt
  9. 32
      app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java
  10. 4
      app/src/main/java/com/keylesspalace/tusky/adapter/StatusDetailedViewHolder.java
  11. 2
      app/src/main/java/com/keylesspalace/tusky/adapter/StatusViewHolder.java
  12. 2
      app/src/main/java/com/keylesspalace/tusky/adapter/TabAdapter.kt
  13. 11
      app/src/main/java/com/keylesspalace/tusky/components/account/AccountActivity.kt
  14. 2
      app/src/main/java/com/keylesspalace/tusky/components/account/AccountFieldAdapter.kt
  15. 11
      app/src/main/java/com/keylesspalace/tusky/components/account/media/AccountMediaFragment.kt
  16. 6
      app/src/main/java/com/keylesspalace/tusky/components/account/media/AccountMediaGridAdapter.kt
  17. 62
      app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
  18. 2
      app/src/main/java/com/keylesspalace/tusky/components/compose/MediaPreviewAdapter.kt
  19. 2
      app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt
  20. 2
      app/src/main/java/com/keylesspalace/tusky/components/compose/view/ComposeScheduleView.kt
  21. 8
      app/src/main/java/com/keylesspalace/tusky/components/compose/view/ProgressImageView.kt
  22. 11
      app/src/main/java/com/keylesspalace/tusky/components/compose/view/TootButton.kt
  23. 11
      app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt
  24. 2
      app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftMediaAdapter.kt
  25. 2
      app/src/main/java/com/keylesspalace/tusky/components/filters/EditFilterActivity.kt
  26. 46
      app/src/main/java/com/keylesspalace/tusky/components/notifications/StatusNotificationViewHolder.kt
  27. 4
      app/src/main/java/com/keylesspalace/tusky/components/notifications/StatusViewHolder.kt
  28. 13
      app/src/main/java/com/keylesspalace/tusky/components/notifications/requests/NotificationRequestsActivity.kt
  29. 35
      app/src/main/java/com/keylesspalace/tusky/components/preference/AccountPreferencesFragment.kt
  30. 40
      app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt
  31. 11
      app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt
  32. 11
      app/src/main/java/com/keylesspalace/tusky/components/scheduled/ScheduledStatusActivity.kt
  33. 11
      app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchFragment.kt
  34. 6
      app/src/main/java/com/keylesspalace/tusky/components/systemnotifications/NotificationService.kt
  35. 12
      app/src/main/java/com/keylesspalace/tusky/components/timeline/TimelineFragment.kt
  36. 4
      app/src/main/java/com/keylesspalace/tusky/components/viewthread/ViewThreadFragment.kt
  37. 11
      app/src/main/java/com/keylesspalace/tusky/components/viewthread/edits/ViewEditsFragment.kt
  38. 4
      app/src/main/java/com/keylesspalace/tusky/receiver/SendStatusBroadcastReceiver.kt
  39. 4
      app/src/main/java/com/keylesspalace/tusky/service/SendStatusService.kt
  40. 14
      app/src/main/java/com/keylesspalace/tusky/util/IconUtils.kt
  41. 2
      app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt
  42. 39
      app/src/main/java/com/keylesspalace/tusky/util/SpanUtils.kt
  43. 5
      app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt
  44. 9
      app/src/main/res/drawable/audio_file_preview.xml
  45. 22
      app/src/main/res/drawable/bot_badge.xml
  46. 10
      app/src/main/res/drawable/heart_broken_24.xml
  47. 11
      app/src/main/res/drawable/help_24dp.xml
  48. 9
      app/src/main/res/drawable/ic_access_time.xml
  49. 13
      app/src/main/res/drawable/ic_account_settings.xml
  50. 9
      app/src/main/res/drawable/ic_add_24dp.xml
  51. 4
      app/src/main/res/drawable/ic_add_a_photo_32dp.xml
  52. 9
      app/src/main/res/drawable/ic_add_a_photo_32dp_filled.xml
  53. 8
      app/src/main/res/drawable/ic_alert_circle.xml
  54. 11
      app/src/main/res/drawable/ic_arrow_back_24dp.xml
  55. 13
      app/src/main/res/drawable/ic_arrow_back_with_background.xml
  56. 10
      app/src/main/res/drawable/ic_arrow_drop_down_24dp.xml
  57. 10
      app/src/main/res/drawable/ic_arrow_drop_up_24dp.xml
  58. 10
      app/src/main/res/drawable/ic_at_18dp.xml
  59. 10
      app/src/main/res/drawable/ic_attach_file_24dp.xml
  60. 11
      app/src/main/res/drawable/ic_block_24dp.xml
  61. 10
      app/src/main/res/drawable/ic_bookmark_24dp.xml
  62. 9
      app/src/main/res/drawable/ic_bookmark_24dp_filled.xml
  63. 9
      app/src/main/res/drawable/ic_bookmark_active_24dp.xml
  64. 13
      app/src/main/res/drawable/ic_bot_24dp.xml
  65. 10
      app/src/main/res/drawable/ic_bottom_navigation_24dp.xml
  66. 10
      app/src/main/res/drawable/ic_bottom_navigation_24dp_mirrored.xml
  67. 9
      app/src/main/res/drawable/ic_briefcase.xml
  68. 9
      app/src/main/res/drawable/ic_bullhorn_24dp.xml
  69. 9
      app/src/main/res/drawable/ic_campaign_24dp.xml
  70. 9
      app/src/main/res/drawable/ic_cancel_24dp.xml
  71. 9
      app/src/main/res/drawable/ic_cancel_24dp_filled.xml
  72. 13
      app/src/main/res/drawable/ic_check_24dp.xml
  73. 4
      app/src/main/res/drawable/ic_check_32dp.xml
  74. 10
      app/src/main/res/drawable/ic_check_box_outline_blank_18dp.xml
  75. 8
      app/src/main/res/drawable/ic_check_circle.xml
  76. 6
      app/src/main/res/drawable/ic_chevron_right_24dp.xml
  77. 9
      app/src/main/res/drawable/ic_clear_24dp.xml
  78. 10
      app/src/main/res/drawable/ic_close_24dp.xml
  79. 9
      app/src/main/res/drawable/ic_comments_disabled_24dp.xml
  80. 5
      app/src/main/res/drawable/ic_content_copy_24.xml
  81. 11
      app/src/main/res/drawable/ic_content_copy_24dp.xml
  82. 9
      app/src/main/res/drawable/ic_create_24dp.xml
  83. 9
      app/src/main/res/drawable/ic_cw_24dp.xml
  84. 10
      app/src/main/res/drawable/ic_developer_mode_24dp.xml
  85. 10
      app/src/main/res/drawable/ic_done_outline_24dp.xml
  86. 9
      app/src/main/res/drawable/ic_download_24dp.xml
  87. 6
      app/src/main/res/drawable/ic_drag_indicator_24dp.xml
  88. 9
      app/src/main/res/drawable/ic_drag_indicator_horiz_24dp.xml
  89. 10
      app/src/main/res/drawable/ic_edit_24dp.xml
  90. 9
      app/src/main/res/drawable/ic_edit_24dp_filled.xml
  91. 10
      app/src/main/res/drawable/ic_edit_document_24dp.xml
  92. 7
      app/src/main/res/drawable/ic_email_24dp.xml
  93. 9
      app/src/main/res/drawable/ic_email_alternate_18dp.xml
  94. 9
      app/src/main/res/drawable/ic_email_alternate_24dp.xml
  95. 9
      app/src/main/res/drawable/ic_emoji_24dp.xml
  96. 9
      app/src/main/res/drawable/ic_error_24dp.xml
  97. 9
      app/src/main/res/drawable/ic_eye_24dp.xml
  98. 9
      app/src/main/res/drawable/ic_favourite_24dp.xml
  99. 9
      app/src/main/res/drawable/ic_favourite_active_24dp.xml
  100. 9
      app/src/main/res/drawable/ic_feedback_24dp_filled.xml
  101. Some files were not shown because too many files have changed in this diff Show More

13
CONTRIBUTING.md

@ -15,7 +15,7 @@ To add a new language, click on the 'Start a new translation' button on at the b
## Contributing code
### Prerequisites
You should have a general understanding of Android development and Git.
You should have a general understanding of Android development and Git.
### Architecture
We try to follow the [Guide to app architecture](https://developer.android.com/topic/architecture).
@ -35,9 +35,16 @@ If there is untranslatable text that you don't want to keep as a string constant
We use [Viewbinding](https://developer.android.com/topic/libraries/view-binding) to reference views. No contribution using another mechanism will be accepted.
There are useful extensions in `src/main/java/com/keylesspalace/tusky/util/ViewExtensions.kt` that make working with viewbinding easier.
### Visuals
### Themes
There are three themes in the app, so any visual changes should be checked with each of them to ensure they look appropriate no matter which theme is selected. Usually, you can use existing color attributes like `?attr/colorPrimary` and `?attr/textColorSecondary`.
All icons are from the Material iconset, find new icons [here](https://fonts.google.com/icons) (Google fonts) or [here](https://fonts.google.com/icons) (community contributions).
### Icons
All icons are from the rounded variant of the Material Symbols icon set with weight 400 and grade 0.
New icons can be found [here](https://fonts.google.com/icons?icon.style=Rounded&icon.size=24).
Usually we prefer outlined icons, but there are cases where a filled one is a better choice.
If the icon needs to have an active/inactive state it is a good idea to use the outlined icon for the inactive and the filled one for the active state.
Icons should be imported as vector drawables and named `ic_icon_name_sizedp_modifier.xml`, e.g. `ic_home_24dp` or `ic_notifications_24dp_filled`.
### Accessibility
We try to make Tusky as accessible as possible for as many people as possible. Please make sure that all touch targets are at least 48dpx48dp in size, Text has sufficient contrast and images or icons have a image description. See [this guide](https://developer.android.com/guide/topics/ui/accessibility/apps) for more information.

1
app/build.gradle

@ -169,7 +169,6 @@ dependencies {
implementation libs.touchimageview
implementation libs.bundles.material.drawer
implementation libs.material.typeface
implementation libs.image.cropper

4
app/src/green/res/values/flavor-colors.xml

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="notification_color">#19A341</color>
<color name="notification_color">@color/tusky_green</color>
<color name="icon_background">#097b44</color>
<color name="icon_highlight">#39ff9e</color>
</resources>
</resources>

2
app/src/main/AndroidManifest.xml

@ -185,7 +185,7 @@
<service
android:name=".service.TuskyTileService"
android:icon="@drawable/ic_quicksettings"
android:icon="@drawable/tusky_quicksettings_icon"
android:label="@string/tusky_compose_post_quicksetting_label"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
android:exported="true">

4
app/src/main/java/com/keylesspalace/tusky/AccountsInListFragment.kt

@ -265,10 +265,10 @@ class AccountsInListFragment : DialogFragment() {
holder.binding.rejectButton.apply {
contentDescription = if (inAList) {
setImageResource(R.drawable.ic_reject_24dp)
setImageResource(R.drawable.ic_close_24dp)
getString(R.string.action_remove_from_list)
} else {
setImageResource(R.drawable.ic_plus_24dp)
setImageResource(R.drawable.ic_add_24dp)
getString(R.string.action_add_to_list)
}
}

18
app/src/main/java/com/keylesspalace/tusky/EditProfileActivity.kt

@ -44,8 +44,6 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.canhub.cropper.CropImage
import com.canhub.cropper.CropImageContract
import com.canhub.cropper.options
import com.google.android.material.R as materialR
import com.google.android.material.color.MaterialColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
import com.keylesspalace.tusky.adapter.AccountFieldEditAdapter
@ -59,10 +57,6 @@ import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.viewBinding
import com.keylesspalace.tusky.viewmodel.EditProfileViewModel
import com.keylesspalace.tusky.viewmodel.ProfileDataInUi
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
@ -150,18 +144,6 @@ class EditProfileActivity : BaseActivity() {
binding.fieldList.layoutManager = LinearLayoutManager(this)
binding.fieldList.adapter = accountFieldEditAdapter
val plusDrawable = IconicsDrawable(this, GoogleMaterial.Icon.gmd_add).apply {
sizeDp = 12
colorInt = MaterialColors.getColor(binding.addFieldButton, materialR.attr.colorOnPrimary)
}
binding.addFieldButton.setCompoundDrawablesRelativeWithIntrinsicBounds(
plusDrawable,
null,
null,
null
)
binding.addFieldButton.setOnClickListener {
accountFieldEditAdapter.addField()
if (accountFieldEditAdapter.itemCount >= maxAccountFields) {

46
app/src/main/java/com/keylesspalace/tusky/MainActivity.kt

@ -104,14 +104,9 @@ import com.keylesspalace.tusky.util.reduceSwipeSensitivity
import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.startActivityWithSlideInAnimation
import com.keylesspalace.tusky.util.viewBinding
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import com.mikepenz.materialdrawer.holder.BadgeStyle
import com.mikepenz.materialdrawer.holder.ColorHolder
import com.mikepenz.materialdrawer.holder.StringHolder
import com.mikepenz.materialdrawer.iconics.iconicsIcon
import com.mikepenz.materialdrawer.model.AbstractDrawerItem
import com.mikepenz.materialdrawer.model.DividerDrawerItem
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
@ -465,12 +460,6 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.activity_main, menu)
menu.findItem(R.id.action_search)?.apply {
icon = IconicsDrawable(this@MainActivity, GoogleMaterial.Icon.gmd_search).apply {
sizeDp = 20
colorInt = MaterialColors.getColor(binding.mainToolbar, android.R.attr.textColorPrimary)
}
}
}
override fun onPrepareMenu(menu: Menu) {
@ -597,7 +586,8 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
identifier = DRAWER_ITEM_ADD_ACCOUNT
nameRes = R.string.add_account_name
descriptionRes = R.string.add_account_description
iconicsIcon = GoogleMaterial.Icon.gmd_add
iconRes = R.drawable.ic_add_24dp
isIconTinted = true
},
0
)
@ -665,7 +655,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
addItems(
primaryDrawerItem {
nameRes = R.string.action_edit_profile
iconicsIcon = GoogleMaterial.Icon.gmd_person
iconRes = R.drawable.ic_person_24dp
onClick = {
val intent = Intent(context, EditProfileActivity::class.java)
startActivityWithSlideInAnimation(intent)
@ -674,7 +664,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
primaryDrawerItem {
nameRes = R.string.action_view_favourites
isSelectable = false
iconicsIcon = GoogleMaterial.Icon.gmd_star
iconRes = R.drawable.ic_star_24dp
onClick = {
val intent = StatusListActivity.newFavouritesIntent(context)
startActivityWithSlideInAnimation(intent)
@ -682,7 +672,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
},
primaryDrawerItem {
nameRes = R.string.action_view_bookmarks
iconicsIcon = GoogleMaterial.Icon.gmd_bookmark
iconRes = R.drawable.ic_bookmark_24dp
onClick = {
val intent = StatusListActivity.newBookmarksIntent(context)
startActivityWithSlideInAnimation(intent)
@ -690,7 +680,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
},
primaryDrawerItem {
nameRes = R.string.action_view_follow_requests
iconicsIcon = GoogleMaterial.Icon.gmd_person_add
iconRes = R.drawable.ic_person_add_24dp_mirrored
onClick = {
val intent = AccountListActivity.newIntent(context, AccountListActivity.Type.FOLLOW_REQUESTS)
startActivityWithSlideInAnimation(intent)
@ -698,14 +688,14 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
},
primaryDrawerItem {
nameRes = R.string.action_lists
iconicsIcon = GoogleMaterial.Icon.gmd_list
iconRes = R.drawable.ic_list_alt_24dp
onClick = {
startActivityWithSlideInAnimation(ListsActivity.newIntent(context))
}
},
primaryDrawerItem {
nameRes = R.string.action_access_drafts
iconRes = R.drawable.ic_notebook
iconRes = R.drawable.ic_edit_document_24dp
onClick = {
val intent = DraftsActivity.newIntent(context)
startActivityWithSlideInAnimation(intent)
@ -713,7 +703,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
},
primaryDrawerItem {
nameRes = R.string.action_access_scheduled_posts
iconRes = R.drawable.ic_access_time
iconRes = R.drawable.ic_schedule_24dp
onClick = {
startActivityWithSlideInAnimation(ScheduledStatusActivity.newIntent(context))
}
@ -721,7 +711,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
primaryDrawerItem {
identifier = DRAWER_ITEM_ANNOUNCEMENTS
nameRes = R.string.title_announcements
iconRes = R.drawable.ic_bullhorn_24dp
iconRes = R.drawable.ic_campaign_24dp
onClick = {
startActivityWithSlideInAnimation(AnnouncementsActivity.newIntent(context))
}
@ -733,7 +723,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
DividerDrawerItem(),
secondaryDrawerItem {
nameRes = R.string.action_view_account_preferences
iconRes = R.drawable.ic_account_settings
iconRes = R.drawable.ic_manage_accounts_24dp
onClick = {
val intent = PreferencesActivity.newIntent(context, PreferencesActivity.ACCOUNT_PREFERENCES)
startActivityWithSlideInAnimation(intent)
@ -741,7 +731,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
},
secondaryDrawerItem {
nameRes = R.string.action_view_preferences
iconicsIcon = GoogleMaterial.Icon.gmd_settings
iconRes = R.drawable.ic_settings_24dp
onClick = {
val intent = PreferencesActivity.newIntent(context, PreferencesActivity.GENERAL_PREFERENCES)
startActivityWithSlideInAnimation(intent)
@ -749,7 +739,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
},
secondaryDrawerItem {
nameRes = R.string.about_title_activity
iconicsIcon = GoogleMaterial.Icon.gmd_info
iconRes = R.drawable.ic_info_24dp
onClick = {
val intent = Intent(context, AboutActivity::class.java)
startActivityWithSlideInAnimation(intent)
@ -757,7 +747,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
},
secondaryDrawerItem {
nameRes = R.string.action_logout
iconRes = R.drawable.ic_logout
iconRes = R.drawable.ic_logout_24dp
onClick = ::logout
}
)
@ -767,7 +757,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
4,
primaryDrawerItem {
nameRes = R.string.action_search
iconicsIcon = GoogleMaterial.Icon.gmd_search
iconRes = R.drawable.ic_search_24dp
onClick = {
startActivityWithSlideInAnimation(SearchActivity.getIntent(context))
}
@ -780,7 +770,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
5,
primaryDrawerItem {
nameRes = R.string.title_public_trending_hashtags
iconicsIcon = GoogleMaterial.Icon.gmd_trending_up
iconRes = R.drawable.ic_whatshot_24dp
onClick = {
startActivityWithSlideInAnimation(TrendingActivity.getIntent(context))
}
@ -793,7 +783,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
6,
primaryDrawerItem {
nameRes = R.string.title_public_trending_statuses
iconicsIcon = GoogleMaterial.Icon.gmd_local_fire_department
iconRes = R.drawable.ic_local_fire_department_24dp
onClick = {
startActivityWithSlideInAnimation(StatusListActivity.newTrendingIntent(context))
}
@ -811,7 +801,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvider {
secondaryDrawerItem {
nameText = "Developer tools"
isEnabled = true
iconicsIcon = GoogleMaterial.Icon.gmd_developer_mode
iconRes = R.drawable.ic_developer_mode_24dp
onClick = {
showDeveloperToolsDialog()
}

18
app/src/main/java/com/keylesspalace/tusky/TabData.kt

@ -67,19 +67,19 @@ fun createTabDataFromId(id: String, arguments: List<String> = emptyList()): TabD
HOME -> TabData(
id = HOME,
text = R.string.title_home,
icon = R.drawable.ic_home_24dp,
icon = R.drawable.tab_icon_home,
fragment = { TimelineFragment.newInstance(TimelineViewModel.Kind.HOME) }
)
NOTIFICATIONS -> TabData(
id = NOTIFICATIONS,
text = R.string.title_notifications,
icon = R.drawable.ic_notifications_24dp,
icon = R.drawable.tab_icon_notifications,
fragment = { NotificationsFragment.newInstance() }
)
LOCAL -> TabData(
id = LOCAL,
text = R.string.title_public_local,
icon = R.drawable.ic_local_24dp,
icon = R.drawable.tab_icon_local,
fragment = { TimelineFragment.newInstance(TimelineViewModel.Kind.PUBLIC_LOCAL) }
)
FEDERATED -> TabData(
@ -91,19 +91,19 @@ fun createTabDataFromId(id: String, arguments: List<String> = emptyList()): TabD
DIRECT -> TabData(
id = DIRECT,
text = R.string.title_direct_messages,
icon = R.drawable.ic_reblog_direct_24dp,
icon = R.drawable.tab_icon_direct,
fragment = { ConversationsFragment.newInstance() }
)
TRENDING_TAGS -> TabData(
id = TRENDING_TAGS,
text = R.string.title_public_trending_hashtags,
icon = R.drawable.ic_trending_up_24px,
icon = R.drawable.tab_icon_trending_tags,
fragment = { TrendingTagsFragment.newInstance() }
)
TRENDING_STATUSES -> TabData(
id = TRENDING_STATUSES,
text = R.string.title_public_trending_statuses,
icon = R.drawable.ic_hot_24dp,
icon = R.drawable.tab_icon_trending_posts,
fragment = {
TimelineFragment.newInstance(
TimelineViewModel.Kind.PUBLIC_TRENDING_STATUSES
@ -113,7 +113,7 @@ fun createTabDataFromId(id: String, arguments: List<String> = emptyList()): TabD
HASHTAG -> TabData(
id = HASHTAG,
text = R.string.hashtags,
icon = R.drawable.ic_hashtag,
icon = R.drawable.ic_tag_24dp,
fragment = { args -> TimelineFragment.newHashtagInstance(args) },
arguments = arguments,
title = { context ->
@ -125,7 +125,7 @@ fun createTabDataFromId(id: String, arguments: List<String> = emptyList()): TabD
LIST -> TabData(
id = LIST,
text = R.string.list,
icon = R.drawable.ic_list,
icon = R.drawable.tab_icon_list,
fragment = { args ->
TimelineFragment.newInstance(
TimelineViewModel.Kind.LIST,
@ -138,7 +138,7 @@ fun createTabDataFromId(id: String, arguments: List<String> = emptyList()): TabD
BOOKMARKS -> TabData(
id = BOOKMARKS,
text = R.string.title_bookmarks,
icon = R.drawable.ic_bookmark_active_24dp,
icon = R.drawable.tab_icon_bookmarks,
fragment = { TimelineFragment.newInstance(TimelineViewModel.Kind.BOOKMARKS) }
)
else -> throw IllegalArgumentException("unknown tab type")

32
app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java

@ -448,20 +448,20 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
int inactiveId;
int activeId;
if (visibility == Status.Visibility.PRIVATE) {
inactiveId = R.drawable.ic_reblog_private_24dp;
activeId = R.drawable.ic_reblog_private_active_24dp;
inactiveId = R.drawable.ic_lock_24dp;
activeId = R.drawable.ic_lock_24dp_filled;
} else {
inactiveId = R.drawable.ic_reblog_24dp;
activeId = R.drawable.ic_reblog_active_24dp;
inactiveId = R.drawable.ic_repeat_24dp;
activeId = R.drawable.ic_repeat_active_24dp;
}
reblogButton.setInactiveImage(inactiveId);
reblogButton.setActiveImage(activeId);
} else {
int disabledId;
if (visibility == Status.Visibility.DIRECT) {
disabledId = R.drawable.ic_reblog_direct_24dp;
disabledId = R.drawable.ic_mail_24dp;
} else {
disabledId = R.drawable.ic_reblog_private_24dp;
disabledId = R.drawable.ic_lock_24dp;
}
reblogButton.setInactiveImage(disabledId);
reblogButton.setActiveImage(disabledId);
@ -551,7 +551,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
final Attachment.Type type = attachment.getType();
if (showingContent && (type == Attachment.Type.VIDEO || type == Attachment.Type.GIFV)) {
imageView.setForegroundGravity(Gravity.CENTER);
imageView.setForeground(AppCompatResources.getDrawable(itemView.getContext(), R.drawable.ic_play_indicator));
imageView.setForeground(AppCompatResources.getDrawable(itemView.getContext(), R.drawable.play_indicator));
} else {
imageView.setForeground(null);
}
@ -593,17 +593,13 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
@DrawableRes
private static int getLabelIcon(Attachment.Type type) {
switch (type) {
case IMAGE:
return R.drawable.ic_photo_24dp;
case GIFV:
case VIDEO:
return R.drawable.ic_videocam_24dp;
case AUDIO:
return R.drawable.ic_music_box_24dp;
default:
return R.drawable.ic_attach_file_24dp;
}
return switch (type) {
case IMAGE -> R.drawable.ic_image_24dp;
case GIFV -> R.drawable.ic_gif_box_24dp;
case VIDEO -> R.drawable.ic_slideshow_24dp;
case AUDIO -> R.drawable.ic_music_box_24dp;
default -> R.drawable.ic_attach_file_24dp;
};
}
private void updateMediaLabel(int index, boolean sensitive, boolean showingContent) {

4
app/src/main/java/com/keylesspalace/tusky/adapter/StatusDetailedViewHolder.java

@ -177,10 +177,10 @@ public class StatusDetailedViewHolder extends StatusBaseViewHolder {
visibilityIcon = R.drawable.ic_lock_open_24dp;
break;
case PRIVATE:
visibilityIcon = R.drawable.ic_lock_outline_24dp;
visibilityIcon = R.drawable.ic_lock_24dp;
break;
case DIRECT:
visibilityIcon = R.drawable.ic_email_24dp;
visibilityIcon = R.drawable.ic_mail_24dp;
break;
default:
return null;

2
app/src/main/java/com/keylesspalace/tusky/adapter/StatusViewHolder.java

@ -130,7 +130,7 @@ public class StatusViewHolder extends StatusBaseViewHolder {
statusDisplayOptions.animateEmojis()
);
statusInfo.setText(emojifiedText);
statusInfo.setCompoundDrawablesWithIntrinsicBounds(isReply ? R.drawable.ic_reply_18dp : R.drawable.ic_reblog_18dp, 0, 0, 0);
statusInfo.setCompoundDrawablesWithIntrinsicBounds(isReply ? R.drawable.ic_reply_18dp : R.drawable.ic_repeat_18dp, 0, 0, 0);
statusInfo.setVisibility(View.VISIBLE);
}

2
app/src/main/java/com/keylesspalace/tusky/adapter/TabAdapter.kt

@ -122,7 +122,7 @@ class TabAdapter(
val chip = binding.chipGroup.getChildAt(i).takeUnless { it.id == R.id.actionChip } as Chip?
?: Chip(context).apply {
setCloseIconResource(R.drawable.ic_cancel_24dp)
setCloseIconResource(R.drawable.ic_cancel_24dp_filled)
isCheckable = false
binding.chipGroup.addView(this, binding.chipGroup.size - 1)
}

11
app/src/main/java/com/keylesspalace/tusky/components/account/AccountActivity.kt

@ -38,6 +38,7 @@ import androidx.annotation.Px
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.app.ActivityOptionsCompat
import androidx.core.graphics.ColorUtils
import androidx.core.graphics.toColorInt
import androidx.core.view.MenuProvider
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
@ -316,8 +317,8 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvide
binding.accountToolbar.setBackgroundColor(Color.TRANSPARENT)
binding.accountToolbar.setNavigationIcon(R.drawable.ic_arrow_back_with_background)
binding.accountToolbar.overflowIcon = AppCompatResources.getDrawable(this, R.drawable.ic_more_with_background)
binding.accountToolbar.setNavigationIcon(R.drawable.toolbar_icon_arrow_back_with_background)
binding.accountToolbar.overflowIcon = AppCompatResources.getDrawable(this, R.drawable.toolbar_icon_more_with_background)
val avatarBackground = MaterialShapeDrawable().apply {
fillColor = ColorStateList.valueOf(toolbarColor)
@ -518,7 +519,7 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvide
loadedAccount?.roles?.forEach { role ->
val badgeColor = if (role.color.isNotBlank()) {
Color.parseColor(role.color)
role.color.toColorInt()
} else {
// sometimes the color is not set for a role, in this case fall back to our default blue
getColor(R.color.tusky_blue)
@ -527,7 +528,7 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvide
val sb = SpannableStringBuilder("${role.name} ${viewModel.domain}")
sb.setSpan(StyleSpan(Typeface.BOLD), 0, role.name.length, 0)
val badgeView = getBadge(badgeColor, R.drawable.profile_badge_person_24dp, sb, isLight)
val badgeView = getBadge(badgeColor, R.drawable.ic_person_24dp, sb, isLight)
binding.accountBadgeContainer.addView(badgeView)
}
@ -742,7 +743,7 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, MenuProvide
private fun updateMuteButton() {
if (muting) {
binding.accountMuteButton.setIconResource(R.drawable.ic_unmute_24dp)
binding.accountMuteButton.setIconResource(R.drawable.ic_volume_up_24dp)
} else {
binding.accountMuteButton.hide()
}

2
app/src/main/java/com/keylesspalace/tusky/components/account/AccountFieldAdapter.kt

@ -69,7 +69,7 @@ class AccountFieldAdapter(
valueTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(
0,
0,
R.drawable.ic_check_circle,
R.drawable.ic_verified_18dp,
0
)
} else {

11
app/src/main/java/com/keylesspalace/tusky/components/account/media/AccountMediaFragment.kt

@ -30,7 +30,6 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.paging.LoadState
import androidx.recyclerview.widget.GridLayoutManager
import com.google.android.material.color.MaterialColors
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.ViewMediaActivity
import com.keylesspalace.tusky.databinding.FragmentTimelineBinding
@ -43,10 +42,6 @@ import com.keylesspalace.tusky.util.openLink
import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.viewBinding
import com.keylesspalace.tusky.viewdata.AttachmentViewData
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.flow.collectLatest
@ -153,12 +148,6 @@ class AccountMediaFragment :
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.fragment_account_media, menu)
menu.findItem(R.id.action_refresh)?.apply {
icon = IconicsDrawable(requireContext(), GoogleMaterial.Icon.gmd_refresh).apply {
sizeDp = 20
colorInt = MaterialColors.getColor(binding.root, android.R.attr.textColorPrimary)
}
}
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {

6
app/src/main/java/com/keylesspalace/tusky/components/account/media/AccountMediaGridAdapter.kt

@ -53,11 +53,11 @@ class AccountMediaGridAdapter(
)
private val videoIndicator = AppCompatResources.getDrawable(
context,
R.drawable.ic_play_indicator
R.drawable.play_indicator
)
private val mediaHiddenDrawable = AppCompatResources.getDrawable(
context,
R.drawable.ic_hide_media_24dp
R.drawable.ic_visibility_off_24dp
)
private val itemBgBaseHSV = FloatArray(3)
@ -101,7 +101,7 @@ class AccountMediaGridAdapter(
)
Glide.with(imageView)
.load(R.drawable.ic_music_box_preview_24dp)
.load(R.drawable.ic_music_box_24dp)
.centerInside()
.into(imageView)

62
app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt

@ -46,6 +46,7 @@ import androidx.annotation.AttrRes
import androidx.annotation.ColorInt
import androidx.annotation.StringRes
import androidx.annotation.VisibleForTesting
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.FileProvider
import androidx.core.content.res.use
import androidx.core.view.ContentInfoCompat
@ -114,10 +115,6 @@ import com.keylesspalace.tusky.util.setOnWindowInsetsChangeListener
import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.viewBinding
import com.keylesspalace.tusky.util.visible
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.migration.OptionalInject
import java.io.File
@ -410,12 +407,7 @@ class ComposeActivity :
if (replyingStatusAuthor != null) {
binding.composeReplyView.show()
binding.composeReplyView.text = getString(R.string.replying_to, replyingStatusAuthor)
val arrowDownIcon = IconicsDrawable(
this,
GoogleMaterial.Icon.gmd_arrow_drop_down
).apply {
sizeDp = 12
}
val arrowDownIcon = AppCompatResources.getDrawable(this, R.drawable.ic_arrow_drop_down_24dp)!!
setDrawableTint(this, arrowDownIcon, android.R.attr.textColorTertiary)
binding.composeReplyView.setCompoundDrawablesRelativeWithIntrinsicBounds(
@ -440,10 +432,7 @@ class ComposeActivity :
)
} else {
binding.composeReplyContentView.show()
val arrowUpIcon = IconicsDrawable(
this,
GoogleMaterial.Icon.gmd_arrow_drop_up
).apply { sizeDp = 12 }
val arrowUpIcon = AppCompatResources.getDrawable(this, R.drawable.ic_arrow_drop_up_24dp)!!
setDrawableTint(this, arrowUpIcon, android.R.attr.textColorTertiary)
binding.composeReplyView.setCompoundDrawablesRelativeWithIntrinsicBounds(
@ -647,41 +636,6 @@ class ComposeActivity :
displayTransientMessage(R.string.hint_media_description_missing)
}
val textColor = MaterialColors.getColor(binding.root, android.R.attr.textColorTertiary)
val cameraIcon = IconicsDrawable(this, GoogleMaterial.Icon.gmd_camera_alt).apply {
colorInt = textColor
sizeDp = 18
}
binding.actionPhotoTake.setCompoundDrawablesRelativeWithIntrinsicBounds(
cameraIcon,
null,
null,
null
)
val imageIcon = IconicsDrawable(this, GoogleMaterial.Icon.gmd_image).apply {
colorInt = textColor
sizeDp = 18
}
binding.actionPhotoPick.setCompoundDrawablesRelativeWithIntrinsicBounds(
imageIcon,
null,
null,
null
)
val pollIcon = IconicsDrawable(this, GoogleMaterial.Icon.gmd_poll).apply {
colorInt = textColor
sizeDp = 18
}
binding.addPollTextActionTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(
pollIcon,
null,
null,
null
)
binding.actionPhotoTake.visible(
Intent(MediaStore.ACTION_IMAGE_CAPTURE).resolveActivity(packageManager) != null
)
@ -856,16 +810,16 @@ class ComposeActivity :
} else {
binding.composeHideMediaButton.show()
@AttrRes val color = if (contentWarningShown) {
binding.composeHideMediaButton.setImageResource(R.drawable.ic_hide_media_24dp)
binding.composeHideMediaButton.setImageResource(R.drawable.ic_visibility_off_24dp)
binding.composeHideMediaButton.isClickable = false
materialR.attr.colorPrimary
} else {
binding.composeHideMediaButton.isClickable = true
if (markMediaSensitive) {
binding.composeHideMediaButton.setImageResource(R.drawable.ic_hide_media_24dp)
binding.composeHideMediaButton.setImageResource(R.drawable.ic_visibility_off_24dp)
materialR.attr.colorPrimary
} else {
binding.composeHideMediaButton.setImageResource(R.drawable.ic_eye_24dp)
binding.composeHideMediaButton.setImageResource(R.drawable.ic_visibility_24dp)
android.R.attr.textColorTertiary
}
}
@ -916,8 +870,8 @@ class ComposeActivity :
val iconRes = when (visibility) {
Status.Visibility.PUBLIC -> R.drawable.ic_public_24dp
Status.Visibility.PRIVATE -> R.drawable.ic_lock_outline_24dp
Status.Visibility.DIRECT -> R.drawable.ic_email_24dp
Status.Visibility.PRIVATE -> R.drawable.ic_lock_24dp
Status.Visibility.DIRECT -> R.drawable.ic_mail_24dp
Status.Visibility.UNLISTED -> R.drawable.ic_lock_open_24dp
else -> R.drawable.ic_lock_open_24dp
}

2
app/src/main/java/com/keylesspalace/tusky/components/compose/MediaPreviewAdapter.kt

@ -90,7 +90,7 @@ class MediaPreviewAdapter(
holder.progressImageView.setProgress(item.uploadPercent)
if (item.type == ComposeViewModel.QueuedMedia.Type.AUDIO) {
// TODO: Fancy waveform display?
holder.progressImageView.setImageResource(R.drawable.ic_music_box_preview_24dp)
holder.progressImageView.setImageResource(R.drawable.audio_file_preview)
} else {
val imageView = holder.progressImageView
val focus = item.focus

2
app/src/main/java/com/keylesspalace/tusky/components/compose/dialog/AddPollDialog.kt

@ -41,7 +41,7 @@ fun showAddPollDialog(
val inset = context.resources.getDimensionPixelSize(R.dimen.dialog_inset)
val dialog = MaterialAlertDialogBuilder(context)
.setIcon(R.drawable.ic_poll_24dp)
.setIcon(R.drawable.ic_insert_chart_24dp_filled)
.setTitle(R.string.create_poll_title)
.setView(binding.root)
.setBackgroundInsetTop(inset)

2
app/src/main/java/com/keylesspalace/tusky/components/compose/view/ComposeScheduleView.kt

@ -87,7 +87,7 @@ class ComposeScheduleView
}
private fun setEditIcons() {
val icon = AppCompatResources.getDrawable(context, R.drawable.ic_create_24dp) ?: return
val icon = AppCompatResources.getDrawable(context, R.drawable.ic_edit_24dp_filled) ?: return
val size = binding.scheduledDateTime.lineHeight
icon.setBounds(0, 0, size, size)
binding.scheduledDateTime.setCompoundDrawablesRelative(null, null, icon, null)

8
app/src/main/java/com/keylesspalace/tusky/components/compose/view/ProgressImageView.kt

@ -52,12 +52,8 @@ class ProgressImageView
}
private val captionDrawable = AppCompatResources.getDrawable(
context,
R.drawable.spellcheck
)!!.apply {
setTint(
MaterialColors.getColor(this@ProgressImageView, android.R.attr.textColorTertiary)
)
}
R.drawable.ic_spellcheck_24dp
)!!
private val circleRadius = Utils.dpToPx(context, 14)
private val circleMargin = Utils.dpToPx(context, 14)

11
app/src/main/java/com/keylesspalace/tusky/components/compose/view/TootButton.kt

@ -16,15 +16,11 @@
package com.keylesspalace.tusky.components.compose.view
import android.content.Context
import android.graphics.Color
import android.util.AttributeSet
import androidx.appcompat.content.res.AppCompatResources
import com.google.android.material.button.MaterialButton
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.entity.Status
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
class TootButton
@JvmOverloads constructor(
@ -60,10 +56,7 @@ class TootButton
Status.Visibility.PRIVATE,
Status.Visibility.DIRECT -> {
setText(R.string.action_send)
IconicsDrawable(context, GoogleMaterial.Icon.gmd_lock).apply {
sizeDp = 18
colorInt = Color.WHITE
}
AppCompatResources.getDrawable(context, R.drawable.ic_lock_24dp)
}
else -> {
null

11
app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt

@ -32,7 +32,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.SimpleItemAnimator
import at.connyduck.sparkbutton.helpers.Utils
import com.google.android.material.color.MaterialColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.StatusListActivity
@ -55,10 +54,6 @@ import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.updateRelativeTimePeriodically
import com.keylesspalace.tusky.util.viewBinding
import com.keylesspalace.tusky.viewdata.AttachmentViewData
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.flow.collectLatest
@ -203,12 +198,6 @@ class ConversationsFragment :
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.fragment_conversations, menu)
menu.findItem(R.id.action_refresh)?.apply {
icon = IconicsDrawable(requireContext(), GoogleMaterial.Icon.gmd_refresh).apply {
sizeDp = 20
colorInt = MaterialColors.getColor(binding.root, android.R.attr.textColorPrimary)
}
}
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {

2
app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftMediaAdapter.kt

@ -52,7 +52,7 @@ class DraftMediaAdapter(
getItem(position)?.let { attachment ->
if (attachment.type == DraftAttachment.Type.AUDIO) {
holder.imageView.clearFocus()
holder.imageView.setImageResource(R.drawable.ic_music_box_preview_24dp)
holder.imageView.setImageResource(R.drawable.audio_file_preview)
} else {
if (attachment.focus != null) {
holder.imageView.setFocalPoint(attachment.focus)

2
app/src/main/java/com/keylesspalace/tusky/components/filters/EditFilterActivity.kt

@ -206,7 +206,7 @@ class EditFilterActivity : BaseActivity() {
val chip = binding.keywordChips.getChildAt(index).takeUnless {
it.id == R.id.actionChip
} as Chip? ?: Chip(this).apply {
setCloseIconResource(R.drawable.ic_cancel_24dp)
setCloseIconResource(R.drawable.ic_cancel_24dp_filled)
isCheckable = false
binding.keywordChips.addView(this, binding.keywordChips.size - 1)
}

46
app/src/main/java/com/keylesspalace/tusky/components/notifications/StatusNotificationViewHolder.kt

@ -17,17 +17,14 @@
package com.keylesspalace.tusky.components.notifications
import android.content.Context
import android.annotation.SuppressLint
import android.content.res.ColorStateList
import android.graphics.Typeface
import android.graphics.drawable.Drawable
import android.text.InputFilter
import android.text.Spanned
import android.text.format.DateUtils
import android.text.style.StyleSpan
import android.view.View
import androidx.annotation.ColorRes
import androidx.annotation.DrawableRes
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.text.toSpannable
import androidx.recyclerview.widget.RecyclerView
import at.connyduck.sparkbutton.helpers.Utils
@ -176,16 +173,6 @@ internal class StatusNotificationViewHolder(
}
}
private fun getIconWithColor(
context: Context,
@DrawableRes drawable: Int,
@ColorRes color: Int
): Drawable? {
val icon = AppCompatResources.getDrawable(context, drawable)
icon?.setTint(context.getColor(color))
return icon
}
private fun setAvatar(statusAvatarUrl: String?, isBot: Boolean, animateAvatars: Boolean, showBotOverlay: Boolean) {
binding.notificationStatusAvatar.setPaddingRelative(0, 0, 0, 0)
loadAvatar(
@ -222,6 +209,7 @@ internal class StatusNotificationViewHolder(
)
}
@SuppressLint("UseCompatTextViewDrawableApis")
fun setMessage(
notificationViewData: NotificationViewData.Concrete,
listener: LinkListener,
@ -232,35 +220,37 @@ internal class StatusNotificationViewHolder(
val type = notificationViewData.type
val context = binding.notificationTopText.context
val format: String
val icon: Drawable?
val icon: Int
val iconColor: Int
when (type) {
Notification.Type.Favourite -> {
icon = getIconWithColor(context, R.drawable.ic_star_24dp, R.color.tusky_orange)
icon = R.drawable.ic_star_24dp_filled
iconColor = R.color.favoriteButtonActiveColor
format = context.getString(R.string.notification_favourite_format)
}
Notification.Type.Reblog -> {
icon = getIconWithColor(context, R.drawable.ic_repeat_24dp, R.color.tusky_blue)
icon = R.drawable.ic_repeat_24dp
iconColor = R.color.colorPrimary
format = context.getString(R.string.notification_reblog_format)
}
Notification.Type.Status -> {
icon = getIconWithColor(context, R.drawable.ic_notifications_active_24dp, R.color.tusky_blue)
icon = R.drawable.ic_notifications_active_24dp
iconColor = R.color.colorPrimary
format = context.getString(R.string.notification_subscription_format)
}
Notification.Type.Update -> {
icon = getIconWithColor(context, R.drawable.ic_edit_24dp, R.color.tusky_blue)
icon = R.drawable.ic_edit_24dp_filled
iconColor = R.color.colorPrimary
format = context.getString(R.string.notification_update_format)
}
else -> {
icon = getIconWithColor(context, R.drawable.ic_star_24dp, R.color.tusky_orange)
icon = R.drawable.ic_star_24dp_filled
iconColor = R.color.favoriteButtonActiveColor
format = context.getString(R.string.notification_favourite_format)
}
}
binding.notificationTopText.setCompoundDrawablesRelativeWithIntrinsicBounds(
icon,
null,
null,
null
)
binding.notificationTopText.setCompoundDrawablesRelativeWithIntrinsicBounds(icon, 0, 0, 0)
binding.notificationTopText.compoundDrawableTintList = ColorStateList.valueOf(context.getColor(iconColor))
val wholeMessage = String.format(format, displayName).toSpannable()
val displayNameIndex = format.indexOf("%1\$s")
wholeMessage.setSpan(
@ -376,7 +366,7 @@ internal class StatusNotificationViewHolder(
binding.notificationAttachmentInfo.text = attachmentText
} else if (status.poll != null) {
binding.notificationAttachmentInfo.show()
binding.notificationAttachmentInfo.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_poll_24dp, 0, 0, 0)
binding.notificationAttachmentInfo.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_insert_chart_24dp, 0, 0, 0)
binding.notificationAttachmentInfo.setText(R.string.poll)
} else {
binding.notificationAttachmentInfo.hide()

4
app/src/main/java/com/keylesspalace/tusky/components/notifications/StatusViewHolder.kt

@ -59,7 +59,7 @@ internal class StatusViewHolder(
val res = itemView.resources
if (viewData.type == Notification.Type.Poll) {
statusInfo.setText(if (accountId == viewData.account.id) R.string.poll_ended_created else R.string.poll_ended_voted)
statusInfo.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_poll_24dp, 0, 0, 0)
statusInfo.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_insert_chart_24dp_filled, 0, 0, 0)
statusInfo.setCompoundDrawablePadding(res.getDimensionPixelSize(R.dimen.status_info_drawable_padding_large))
statusInfo.setPadding(res.getDimensionPixelSize(R.dimen.status_info_padding_large), 0, 0, 0)
statusInfo.show()
@ -76,7 +76,7 @@ internal class StatusViewHolder(
statusInfo.setText(R.string.notification_info_reply)
}
} else {
statusInfo.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_at_18dp, 0, 0, 0)
statusInfo.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_email_alternate_18dp, 0, 0, 0)
if (viewData.statusViewData.status.visibility == Status.Visibility.DIRECT) {
statusInfo.setText(R.string.notification_info_private_mention)

13
app/src/main/java/com/keylesspalace/tusky/components/notifications/requests/NotificationRequestsActivity.kt

@ -30,7 +30,6 @@ import androidx.paging.LoadState
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.material.color.MaterialColors
import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_LONG
import com.google.android.material.snackbar.Snackbar
import com.keylesspalace.tusky.BaseActivity
@ -47,13 +46,7 @@ import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.startActivityWithSlideInAnimation
import com.keylesspalace.tusky.util.viewBinding
import com.keylesspalace.tusky.util.visible
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import dagger.hilt.android.AndroidEntryPoint
import kotlin.String
import kotlin.getValue
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@ -144,12 +137,6 @@ class NotificationRequestsActivity : BaseActivity(), MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.activity_notification_requests, menu)
menu.findItem(R.id.open_settings)?.apply {
icon = IconicsDrawable(this@NotificationRequestsActivity, GoogleMaterial.Icon.gmd_settings).apply {
sizeDp = 20
colorInt = MaterialColors.getColor(binding.includedToolbar.toolbar, android.R.attr.textColorPrimary)
}
}
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {

35
app/src/main/java/com/keylesspalace/tusky/components/preference/AccountPreferencesFragment.kt

@ -16,7 +16,6 @@
package com.keylesspalace.tusky.components.preference
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.os.Build
import android.os.Bundle
@ -24,7 +23,6 @@ import android.util.Log
import androidx.lifecycle.lifecycleScope
import androidx.preference.ListPreference
import at.connyduck.calladapter.networkresult.fold
import com.google.android.material.color.MaterialColors
import com.google.android.material.snackbar.Snackbar
import com.keylesspalace.tusky.BaseActivity
import com.keylesspalace.tusky.BuildConfig
@ -54,10 +52,6 @@ import com.keylesspalace.tusky.util.getLocaleList
import com.keylesspalace.tusky.util.getTuskyDisplayName
import com.keylesspalace.tusky.util.icon
import com.keylesspalace.tusky.util.startActivityWithSlideInAnimation
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeRes
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.launch
@ -81,10 +75,7 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
makePreferenceScreen {
preference {
setTitle(R.string.pref_title_edit_notification_settings)
icon = IconicsDrawable(context, GoogleMaterial.Icon.gmd_notifications).apply {
sizeRes = R.dimen.preference_icon_size
colorInt = MaterialColors.getColor(context, R.attr.iconColor, Color.BLACK)
}
icon = icon(R.drawable.ic_notifications_24dp)
setOnPreferenceClickListener {
openNotificationSystemPrefs()
true
@ -93,7 +84,7 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
preference {
setTitle(R.string.title_tab_preferences)
icon = icon(R.drawable.ic_tabs)
icon = icon(R.drawable.ic_tabs_24dp)
setOnPreferenceClickListener {
val intent = Intent(context, TabPreferenceActivity::class.java)
activity?.startActivityWithSlideInAnimation(intent)
@ -103,7 +94,7 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
preference {
setTitle(R.string.title_followed_hashtags)
icon = icon(R.drawable.ic_hashtag)
icon = icon(R.drawable.ic_tag_24dp)
setOnPreferenceClickListener {
val intent = Intent(context, FollowedTagsActivity::class.java)
activity?.startActivityWithSlideInAnimation(intent)
@ -113,7 +104,7 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
preference {
setTitle(R.string.action_view_mutes)
icon = icon(R.drawable.ic_mute_24dp)
icon = icon(R.drawable.ic_volume_off_24dp)
setOnPreferenceClickListener {
val intent = Intent(context, AccountListActivity::class.java)
intent.putExtra("type", AccountListActivity.Type.MUTES)
@ -124,7 +115,7 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
preference {
setTitle(R.string.action_view_blocks)
icon = icon(GoogleMaterial.Icon.gmd_block)
icon = icon(R.drawable.ic_block_24dp)
setOnPreferenceClickListener {
val intent = Intent(context, AccountListActivity::class.java)
intent.putExtra("type", AccountListActivity.Type.BLOCKS)
@ -135,7 +126,7 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
preference {
setTitle(R.string.title_domain_mutes)
icon = icon(R.drawable.ic_mute_24dp)
icon = icon(R.drawable.ic_volume_off_24dp)
setOnPreferenceClickListener {
val intent = Intent(context, DomainBlocksActivity::class.java)
activity?.startActivityWithSlideInAnimation(intent)
@ -145,7 +136,7 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
preference {
setTitle(R.string.pref_title_timeline_filters)
icon = icon(R.drawable.ic_filter_24dp)
icon = icon(R.drawable.ic_filter_alt_24dp)
setOnPreferenceClickListener {
launchFilterActivity()
true
@ -216,7 +207,7 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
).toTypedArray()
entryValues = (listOf("") + locales.map { it.language }).toTypedArray()
key = PrefKeys.DEFAULT_POST_LANGUAGE
icon = icon(GoogleMaterial.Icon.gmd_translate)
icon = icon(R.drawable.ic_translate_24dp)
value = accountManager.activeAccount?.defaultPostLanguage.orEmpty()
isPersistent = false // This will be entirely server-driven
setSummaryProvider { entry }
@ -229,7 +220,7 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
switchPreference {
setTitle(R.string.pref_default_media_sensitivity)
icon = icon(R.drawable.ic_eye_24dp)
icon = icon(R.drawable.ic_visibility_24dp)
key = PrefKeys.DEFAULT_MEDIA_SENSITIVITY
val sensitivity = accountManager.activeAccount?.defaultMediaSensitivity == true
setDefaultValue(sensitivity)
@ -342,9 +333,9 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
private fun getIconForVisibility(visibility: Status.Visibility): Drawable? {
val iconRes = when (visibility) {
Status.Visibility.PRIVATE -> R.drawable.ic_lock_outline_24dp
Status.Visibility.PRIVATE -> R.drawable.ic_lock_24dp
Status.Visibility.UNLISTED -> R.drawable.ic_lock_open_24dp
Status.Visibility.DIRECT -> R.drawable.ic_email_24dp
Status.Visibility.DIRECT -> R.drawable.ic_mail_24dp
else -> R.drawable.ic_public_24dp
}
return icon(iconRes)
@ -352,9 +343,9 @@ class AccountPreferencesFragment : BasePreferencesFragment() {
private fun getIconForSensitivity(sensitive: Boolean): Drawable? {
return if (sensitive) {
icon(R.drawable.ic_hide_media_24dp)
icon(R.drawable.ic_visibility_off_24dp)
} else {
icon(R.drawable.ic_eye_24dp)
icon(R.drawable.ic_visibility_24dp)
}
}

40
app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt

@ -15,10 +15,13 @@
package com.keylesspalace.tusky.components.preference
import android.content.SharedPreferences
import android.os.Bundle
import androidx.annotation.DrawableRes
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.components.preference.PreferencesFragment.ReadingOrder.valueOf
import com.keylesspalace.tusky.components.systemnotifications.NotificationChannelData
import com.keylesspalace.tusky.db.AccountManager
import com.keylesspalace.tusky.settings.AppTheme
@ -32,7 +35,6 @@ import com.keylesspalace.tusky.settings.sliderPreference
import com.keylesspalace.tusky.settings.switchPreference
import com.keylesspalace.tusky.util.LocaleManager
import com.keylesspalace.tusky.util.icon
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import dagger.hilt.android.AndroidEntryPoint
import de.c1710.filemojicompat_ui.views.picker.preference.EmojiPickerPreference
import javax.inject.Inject
@ -47,6 +49,9 @@ class PreferencesFragment : BasePreferencesFragment() {
@Inject
lateinit var localeManager: LocaleManager
@Inject
lateinit var sharedPrefs: SharedPreferences
enum class ReadingOrder {
/** User scrolls up, reading statuses oldest to newest */
OLDEST_FIRST,
@ -77,12 +82,12 @@ class PreferencesFragment : BasePreferencesFragment() {
key = PrefKeys.APP_THEME
setSummaryProvider { entry }
setTitle(R.string.pref_title_app_theme)
icon = icon(GoogleMaterial.Icon.gmd_palette)
icon = icon(R.drawable.ic_palette_24dp)
}
emojiPreference(requireActivity()) {
setTitle(R.string.emoji_style)
icon = icon(GoogleMaterial.Icon.gmd_sentiment_satisfied)
icon = icon(R.drawable.ic_mood_24dp)
}
listPreference {
@ -92,7 +97,7 @@ class PreferencesFragment : BasePreferencesFragment() {
key = PrefKeys.LANGUAGE + "_" // deliberately not the actual key, the real handling happens in LocaleManager
setSummaryProvider { entry }
setTitle(R.string.pref_title_language)
icon = icon(GoogleMaterial.Icon.gmd_translate)
icon = icon(R.drawable.ic_translate_24dp)
preferenceDataStore = localeManager
}
@ -104,9 +109,9 @@ class PreferencesFragment : BasePreferencesFragment() {
stepSize = 5F
setTitle(R.string.pref_ui_text_size)
format = "%.0f%%"
decrementIcon = icon(GoogleMaterial.Icon.gmd_zoom_out)
incrementIcon = icon(GoogleMaterial.Icon.gmd_zoom_in)
icon = icon(GoogleMaterial.Icon.gmd_format_size)
decrementIcon = icon(R.drawable.ic_zoom_out_24dp)
incrementIcon = icon(R.drawable.ic_zoom_in_24dp)
icon = icon(R.drawable.ic_format_size_24dp)
}
listPreference {
@ -116,7 +121,7 @@ class PreferencesFragment : BasePreferencesFragment() {
key = PrefKeys.STATUS_TEXT_SIZE
setSummaryProvider { entry }
setTitle(R.string.pref_post_text_size)
icon = icon(GoogleMaterial.Icon.gmd_format_size)
icon = icon(R.drawable.ic_format_size_24dp)
}
listPreference {
@ -126,7 +131,7 @@ class PreferencesFragment : BasePreferencesFragment() {
key = PrefKeys.READING_ORDER
setSummaryProvider { entry }
setTitle(R.string.pref_title_reading_order)
icon = icon(GoogleMaterial.Icon.gmd_sort)
icon = icon(R.drawable.ic_sort_24dp)
}
listPreference {
@ -136,6 +141,15 @@ class PreferencesFragment : BasePreferencesFragment() {
key = PrefKeys.MAIN_NAV_POSITION
setSummaryProvider { entry }
setTitle(R.string.pref_main_nav_position)
icon = icon(
navigationPositionIcon(
sharedPrefs.getString(PrefKeys.MAIN_NAV_POSITION, "top").orEmpty()
)
)
setOnPreferenceChangeListener { _, newValue ->
icon = icon(navigationPositionIcon(newValue.toString()))
true
}
}
listPreference {
@ -285,6 +299,14 @@ class PreferencesFragment : BasePreferencesFragment() {
}
}
@DrawableRes private fun navigationPositionIcon(position: String): Int {
return if (position == "bottom") {
R.drawable.ic_bottom_navigation_24dp
} else {
R.drawable.ic_bottom_navigation_24dp_mirrored
}
}
override fun onResume() {
super.onResume()
requireActivity().setTitle(R.string.action_view_preferences)

11
app/src/main/java/com/keylesspalace/tusky/components/report/fragments/ReportStatusesFragment.kt

@ -33,7 +33,6 @@ import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import com.google.android.material.color.MaterialColors
import com.google.android.material.snackbar.Snackbar
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.StatusListActivity
@ -54,10 +53,6 @@ import com.keylesspalace.tusky.util.viewBinding
import com.keylesspalace.tusky.util.visible
import com.keylesspalace.tusky.viewdata.AttachmentViewData
import com.keylesspalace.tusky.viewdata.StatusViewData
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.flow.collectLatest
@ -124,12 +119,6 @@ class ReportStatusesFragment :
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.fragment_report_statuses, menu)
menu.findItem(R.id.action_refresh)?.apply {
icon = IconicsDrawable(requireContext(), GoogleMaterial.Icon.gmd_refresh).apply {
sizeDp = 20
colorInt = MaterialColors.getColor(binding.root, android.R.attr.textColorPrimary)
}
}
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {

11
app/src/main/java/com/keylesspalace/tusky/components/scheduled/ScheduledStatusActivity.kt

@ -27,7 +27,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.paging.LoadState
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.color.MaterialColors
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.keylesspalace.tusky.BaseActivity
import com.keylesspalace.tusky.R
@ -40,10 +39,6 @@ import com.keylesspalace.tusky.util.ensureBottomPadding
import com.keylesspalace.tusky.util.hide
import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.viewBinding
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.flow.collectLatest
@ -129,12 +124,6 @@ class ScheduledStatusActivity :
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.activity_scheduled_status, menu)
menu.findItem(R.id.action_search)?.apply {
icon = IconicsDrawable(this@ScheduledStatusActivity, GoogleMaterial.Icon.gmd_search).apply {
sizeDp = 20
colorInt = MaterialColors.getColor(binding.includedToolbar.toolbar, android.R.attr.textColorPrimary)
}
}
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {

11
app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchFragment.kt

@ -16,7 +16,6 @@ import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.google.android.material.color.MaterialColors
import com.google.android.material.snackbar.Snackbar
import com.keylesspalace.tusky.BottomSheetActivity
import com.keylesspalace.tusky.R
@ -30,10 +29,6 @@ import com.keylesspalace.tusky.util.ensureBottomPadding
import com.keylesspalace.tusky.util.startActivityWithSlideInAnimation
import com.keylesspalace.tusky.util.viewBinding
import com.keylesspalace.tusky.util.visible
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collectLatest
@ -113,12 +108,6 @@ abstract class SearchFragment<T : Any> :
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.fragment_search, menu)
menu.findItem(R.id.action_refresh)?.apply {
icon = IconicsDrawable(requireContext(), GoogleMaterial.Icon.gmd_refresh).apply {
sizeDp = 20
colorInt = MaterialColors.getColor(binding.root, android.R.attr.textColorPrimary)
}
}
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {

6
app/src/main/java/com/keylesspalace/tusky/components/systemnotifications/NotificationService.kt

@ -389,7 +389,7 @@ class NotificationService @Inject constructor(
val text = joinNames(activeNotifications, additionalNotifications)
val summaryBuilder = NotificationCompat.Builder(context, typeChannelId)
.setSmallIcon(R.drawable.ic_notify)
.setSmallIcon(R.drawable.tusky_notification_icon)
.setContentIntent(summaryResultPendingIntent)
.setColor(context.getColor(R.color.notification_color))
.setAutoCancel(true)
@ -415,7 +415,7 @@ class NotificationService @Inject constructor(
return NotificationCompat.Builder(context, CHANNEL_BACKGROUND_TASKS)
.setContentTitle(title)
.setTicker(title)
.setSmallIcon(R.drawable.ic_notify)
.setSmallIcon(R.drawable.tusky_notification_icon)
.setOngoing(true)
.build()
}
@ -459,7 +459,7 @@ class NotificationService @Inject constructor(
}
val builder = NotificationCompat.Builder(context, channelId)
.setSmallIcon(R.drawable.ic_notify)
.setSmallIcon(R.drawable.tusky_notification_icon)
.setContentIntent(eventResultPendingIntent)
.setColor(context.getColor(R.color.notification_color))
.setAutoCancel(true)

12
app/src/main/java/com/keylesspalace/tusky/components/timeline/TimelineFragment.kt

@ -36,7 +36,6 @@ import androidx.recyclerview.widget.SimpleItemAnimator
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import at.connyduck.calladapter.networkresult.onFailure
import at.connyduck.sparkbutton.helpers.Utils
import com.google.android.material.color.MaterialColors
import com.google.android.material.snackbar.Snackbar
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.appstore.EventHub
@ -69,10 +68,6 @@ import com.keylesspalace.tusky.util.viewBinding
import com.keylesspalace.tusky.viewdata.AttachmentViewData
import com.keylesspalace.tusky.viewdata.StatusViewData
import com.keylesspalace.tusky.viewdata.TranslationViewData
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.flow.collectLatest
@ -307,13 +302,6 @@ class TimelineFragment :
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
if (isSwipeToRefreshEnabled) {
menuInflater.inflate(R.menu.fragment_timeline, menu)
menu.findItem(R.id.action_refresh)?.apply {
icon = IconicsDrawable(requireContext(), GoogleMaterial.Icon.gmd_refresh).apply {
sizeDp = 20
colorInt =
MaterialColors.getColor(binding.root, android.R.attr.textColorPrimary)
}
}
}
}

4
app/src/main/java/com/keylesspalace/tusky/components/viewthread/ViewThreadFragment.kt

@ -275,8 +275,8 @@ class ViewThreadFragment :
actionReveal.isVisible = revealButtonState != RevealButtonState.NO_BUTTON
actionReveal.setIcon(
when (revealButtonState) {
RevealButtonState.REVEAL -> R.drawable.ic_eye_24dp
else -> R.drawable.ic_hide_media_24dp
RevealButtonState.REVEAL -> R.drawable.ic_visibility_24dp
else -> R.drawable.ic_visibility_off_24dp
}
)
}

11
app/src/main/java/com/keylesspalace/tusky/components/viewthread/edits/ViewEditsFragment.kt

@ -32,7 +32,6 @@ import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import com.google.android.material.color.MaterialColors
import com.keylesspalace.tusky.BottomSheetActivity
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.StatusListActivity
@ -47,10 +46,6 @@ import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.util.startActivityWithSlideInAnimation
import com.keylesspalace.tusky.util.unicodeWrap
import com.keylesspalace.tusky.util.viewBinding
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizeDp
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.launch
@ -162,12 +157,6 @@ class ViewEditsFragment :
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.fragment_view_edits, menu)
menu.findItem(R.id.action_refresh)?.apply {
icon = IconicsDrawable(requireContext(), GoogleMaterial.Icon.gmd_refresh).apply {
sizeDp = 20
colorInt = MaterialColors.getColor(binding.root, android.R.attr.textColorPrimary)
}
}
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {

4
app/src/main/java/com/keylesspalace/tusky/receiver/SendStatusBroadcastReceiver.kt

@ -71,7 +71,7 @@ class SendStatusBroadcastReceiver : BroadcastReceiver() {
context,
NotificationChannelData.MENTION.getChannelId(senderIdentifier)
)
.setSmallIcon(R.drawable.ic_notify)
.setSmallIcon(R.drawable.tusky_notification_icon)
.setColor(context.getColor(R.color.tusky_blue))
.setGroup(senderFullName)
.setDefaults(0) // We don't want this to make any sound or vibration
@ -116,7 +116,7 @@ class SendStatusBroadcastReceiver : BroadcastReceiver() {
context,
NotificationChannelData.MENTION.getChannelId(senderIdentifier)
)
.setSmallIcon(R.drawable.ic_notify)
.setSmallIcon(R.drawable.tusky_notification_icon)
.setColor(context.getColor(R.color.notification_color))
.setGroup(senderFullName)
.setDefaults(0) // We don't want this to make any sound or vibration

4
app/src/main/java/com/keylesspalace/tusky/service/SendStatusService.kt

@ -115,7 +115,7 @@ class SendStatusService : Service() {
}
val builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notify)
.setSmallIcon(R.drawable.tusky_notification_icon)
.setContentTitle(getString(R.string.send_post_notification_title))
.setContentText(notificationText)
.setProgress(1, 0, true)
@ -432,7 +432,7 @@ class SendStatusService : Service() {
)
return NotificationCompat.Builder(this@SendStatusService, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notify)
.setSmallIcon(R.drawable.tusky_notification_icon)
.setContentTitle(getString(title))
.setContentText(getString(content))
.setColor(getColor(R.color.notification_color))

14
app/src/main/java/com/keylesspalace/tusky/util/IconUtils.kt

@ -21,20 +21,6 @@ import androidx.appcompat.content.res.AppCompatResources
import androidx.preference.PreferenceFragmentCompat
import com.google.android.material.color.MaterialColors
import com.keylesspalace.tusky.R
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.colorInt
import com.mikepenz.iconics.utils.sizePx
fun PreferenceFragmentCompat.icon(icon: GoogleMaterial.Icon): IconicsDrawable {
val context = requireContext()
return IconicsDrawable(context, icon).apply {
sizePx = context.resources.getDimensionPixelSize(
R.dimen.preference_icon_size
)
colorInt = MaterialColors.getColor(context, R.attr.iconColor, Color.BLACK)
}
}
fun PreferenceFragmentCompat.icon(icon: Int): Drawable? {
val context = requireContext()

2
app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt

@ -222,7 +222,7 @@ internal fun markupHiddenUrls(view: TextView, content: CharSequence): SpannableS
// reinsert the span so it covers the original and the additional text
spannableContent.setSpan(span, start, end + additionalText.length, 0)
val linkDrawable = AppCompatResources.getDrawable(view.context, R.drawable.ic_link)!!
val linkDrawable = AppCompatResources.getDrawable(view.context, R.drawable.ic_open_in_new_24dp)!!
// ImageSpan does not always align the icon correctly in the line, let's use our custom emoji span for this
val linkDrawableSpan = EmojiSpan(view)
linkDrawableSpan.imageDrawable = linkDrawable

39
app/src/main/java/com/keylesspalace/tusky/util/SpanUtils.kt

@ -9,9 +9,9 @@ import android.text.style.DynamicDrawableSpan
import android.text.style.ForegroundColorSpan
import android.text.style.ImageSpan
import android.text.style.URLSpan
import androidx.appcompat.content.res.AppCompatResources
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.util.twittertext.Regex
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import java.util.regex.Pattern
/**
@ -95,23 +95,34 @@ private fun <T> Spannable.clearSpans(spanClass: Class<T>) {
}
}
private val iconNameMapping: Map<String, Int> = mapOf(
"{{home}}" to R.drawable.ic_home_24dp,
"{{mail}}" to R.drawable.ic_mail_24dp,
"{{group}}" to R.drawable.ic_group_24dp,
"{{search}}" to R.drawable.ic_search_24dp,
"{{manage_accounts}}" to R.drawable.ic_manage_accounts_24dp,
"{{chevron_right}}" to R.drawable.ic_chevron_right_24dp,
)
/**
* Replaces text of the form [iconics name] with their spanned counterparts (ImageSpan).
* Replaces text of the form {{icon_name}} with their spanned counterparts (ImageSpan). Supported icon names are above.
*/
fun addDrawables(text: CharSequence, color: Int, size: Int, context: Context): Spannable {
val builder = SpannableStringBuilder(text)
val pattern = Pattern.compile("\\[iconics ([0-9a-z_]+)]")
val matcher = pattern.matcher(builder)
while (matcher.find()) {
val resourceName = matcher.group(1)
?: continue
val drawable = IconicsDrawable(context, GoogleMaterial.getIcon(resourceName))
drawable.setBounds(0, 0, size, size)
drawable.setTint(color)
builder.setSpan(ImageSpan(drawable, DynamicDrawableSpan.ALIGN_BASELINE), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
iconNameMapping.forEach { iconName, icon ->
var index = 0
while (index < text.length - iconName.length && index != -1) {
index = text.indexOf(iconName, index)
if (index != -1) {
val drawable = AppCompatResources.getDrawable(context, icon)!!
drawable.setBounds(0, 0, size, size)
drawable.setTint(color)
builder.setSpan(ImageSpan(drawable, DynamicDrawableSpan.ALIGN_CENTER), index, index + iconName.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
index += iconName.length
}
}
}
return builder

5
app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt

@ -262,8 +262,9 @@ class StatusViewHelper(private val itemView: View) {
@DrawableRes
private fun getLabelIcon(type: Attachment.Type): Int {
return when (type) {
Attachment.Type.IMAGE -> R.drawable.ic_photo_24dp
Attachment.Type.GIFV, Attachment.Type.VIDEO -> R.drawable.ic_videocam_24dp
Attachment.Type.IMAGE -> R.drawable.ic_image_24dp
Attachment.Type.GIFV -> R.drawable.ic_gif_box_24dp
Attachment.Type.VIDEO -> R.drawable.ic_slideshow_24dp
Attachment.Type.AUDIO -> R.drawable.ic_music_box_24dp
else -> R.drawable.ic_attach_file_24dp
}

9
app/src/main/res/drawable/audio_file_preview.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="18dp"
android:viewportWidth="720"
android:viewportHeight="720">
<path
android:pathData="m80,0c-22,0 -40.82,7.85 -56.48,23.52C7.85,39.18 0,58 0,80v560c0,22 7.85,40.82 23.52,56.48C39.18,712.15 58,720 80,720h560c22,0 40.82,-7.85 56.48,-23.52C712.15,680.82 720,662 720,640v-560c0,-22 -7.85,-40.82 -23.52,-56.48C680.82,7.85 662,0 640,0ZM383.44,148.75h93.91c6.65,0 12.22,2.22 16.72,6.72 4.5,4.5 6.8,10.07 6.8,16.72v46.95c0,6.65 -2.3,12.22 -6.8,16.72 -4.5,4.5 -10.07,6.8 -16.72,6.8h-70.39v234.69c0,25.82 -9.19,47.94 -27.58,66.33 -18.39,18.39 -40.51,27.58 -66.33,27.58 -25.82,0 -47.94,-9.19 -66.33,-27.58 -18.39,-18.39 -27.58,-40.51 -27.58,-66.33 0,-25.82 9.19,-47.94 27.58,-66.33 18.39,-18.39 40.51,-27.58 66.33,-27.58 9,0 17.29,1.13 24.92,3.28 7.63,2.15 14.99,5.38 22.03,9.69L360,172.19c0,-6.65 2.22,-12.22 6.72,-16.72 4.5,-4.5 10.07,-6.72 16.72,-6.72z"
android:fillColor="?android:textColorTertiary"/>
</vector>

22
app/src/main/res/drawable/bot_badge.xml

@ -1,13 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M5.7407,0L18.2593,0A5.7407,5.7407 0,0 1,24 5.7407L24,18.2593A5.7407,5.7407 0,0 1,18.2593 24L5.7407,24A5.7407,5.7407 0,0 1,0 18.2593L0,5.7407A5.7407,5.7407 0,0 1,5.7407 0z"
android:fillAlpha="0.75"
android:fillColor="@color/botBadgeBackground" />
<path
android:fillColor="@color/botBadgeForeground"
android:pathData="m12,3.1674a1.6059,1.6059 0,0 1,1.6059 1.6059c0,0.5942 -0.3212,1.1161 -0.803,1.3891v1.0198h0.803a5.6207,5.6207 0,0 1,5.6207 5.6207h0.803a0.803,0.803 0,0 1,0.803 0.803v2.4089a0.803,0.803 0,0 1,-0.803 0.803h-0.803v0.803a1.6059,1.6059 0,0 1,-1.6059 1.6059H6.3793A1.6059,1.6059 0,0 1,4.7733 17.6207V16.8178H3.9704A0.803,0.803 0,0 1,3.1674 16.0148V13.6059A0.803,0.803 0,0 1,3.9704 12.803H4.7733a5.6207,5.6207 0,0 1,5.6207 -5.6207h0.803V6.1625C10.7153,5.8894 10.3941,5.3675 10.3941,4.7733A1.6059,1.6059 0,0 1,12 3.1674M8.3867,12A2.0074,2.0074 0,0 0,6.3793 14.0074,2.0074 2.0074,0 0,0 8.3867,16.0148 2.0074,2.0074 0,0 0,10.3941 14.0074,2.0074 2.0074,0 0,0 8.3867,12m7.2267,0a2.0074,2.0074 0,0 0,-2.0074 2.0074,2.0074 2.0074,0 0,0 2.0074,2.0074 2.0074,2.0074 0,0 0,2.0074 -2.0074A2.0074,2.0074 0,0 0,15.6133 12Z" />
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M5.741,0L18.259,0A5.741,5.741 0,0 1,24 5.741L24,18.259A5.741,5.741 0,0 1,18.259 24L5.741,24A5.741,5.741 0,0 1,0 18.259L0,5.741A5.741,5.741 0,0 1,5.741 0z"
android:fillColor="@color/botBadgeBackground"
android:fillAlpha="0.75"/>
<path
android:pathData="m5.574,20.262q-0.757,0 -1.297,-0.539Q3.738,19.183 3.738,18.426l0,-9.18q0,-2.295 1.607,-3.902 1.607,-1.607 3.902,-1.607l5.508,0q2.295,0 3.902,1.607 1.607,1.607 1.607,3.902l0,9.18q0,0.757 -0.539,1.297Q19.183,20.262 18.426,20.262ZM5.574,18.426l12.852,0l0,-9.18q0,-1.515 -1.079,-2.593 -1.079,-1.079 -2.593,-1.079L9.246,5.574q-1.515,0 -2.593,1.079 -1.079,1.079 -1.079,2.593zM9.246,12q-0.757,0 -1.297,-0.539Q7.41,10.921 7.41,10.164q0,-0.757 0.539,-1.297 0.539,-0.539 1.297,-0.539 0.757,0 1.297,0.539 0.539,0.539 0.539,1.297 0,0.757 -0.539,1.297Q10.003,12 9.246,12ZM14.754,12q-0.757,0 -1.297,-0.539Q12.918,10.921 12.918,10.164q0,-0.757 0.539,-1.297 0.539,-0.539 1.297,-0.539 0.757,0 1.297,0.539 0.539,0.539 0.539,1.297 0,0.757 -0.539,1.297Q15.511,12 14.754,12ZM7.41,18.426l0,-1.836q0,-0.757 0.539,-1.297Q8.489,14.754 9.246,14.754l5.508,0q0.757,0 1.297,0.539 0.539,0.539 0.539,1.297l0,1.836l-1.836,0l0,-1.836l-1.836,0l0,1.836l-1.836,0l0,-1.836l-1.836,0l0,1.836zM5.574,18.426l12.852,0z"
android:fillColor="@color/botBadgeForeground"/>
</vector>

10
app/src/main/res/drawable/heart_broken_24.xml

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M16.5,3c-0.96,0 -1.9,0.25 -2.73,0.69L12,9h3l-3,10l1,-9h-3l1.54,-5.39C10.47,3.61 9.01,3 7.5,3C4.42,3 2,5.42 2,8.5c0,4.13 4.16,7.18 10,12.5c5.47,-4.94 10,-8.26 10,-12.5C22,5.42 19.58,3 16.5,3z"/>
</vector>

11
app/src/main/res/drawable/help_24dp.xml

@ -1,11 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M478,720Q499,720 513.5,705.5Q528,691 528,670Q528,649 513.5,634.5Q499,620 478,620Q457,620 442.5,634.5Q428,649 428,670Q428,691 442.5,705.5Q457,720 478,720ZM442,566L516,566Q516,533 523.5,514Q531,495 566,462Q592,436 607,412.5Q622,389 622,356Q622,300 581,270Q540,240 484,240Q427,240 391.5,270Q356,300 342,342L408,368Q413,350 430.5,329Q448,308 484,308Q516,308 532,325.5Q548,343 548,364Q548,384 536,401.5Q524,419 506,434Q462,473 452,493Q442,513 442,566ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
</vector>

9
app/src/main/res/drawable/ic_access_time.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8zM12.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z"/>
</vector>

13
app/src/main/res/drawable/ic_account_settings.xml

@ -1,13 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillAlpha="1"
android:fillColor="#000000"
android:pathData="M8.9987,3.9987C6.7925,3.9987 5,5.7913 5,7.9975C5,10.21 6.7925,12.0025 8.9987,12.0025C11.2113,12.0025 12.9975,10.21 12.9975,7.9975C12.9975,5.7913 11.2113,3.9987 8.9987,3.9987ZM8.9987,13.9987C6.3288,13.9987 1.0013,15.3325 1.0013,17.9975L1.0013,20L12.08,20C12.0262,19.6675 12.0025,19.3362 12.0025,18.9988C12.0025,17.485 12.495,16.0113 13.4087,14.8C11.88,14.2775 10.1813,13.9987 8.9987,13.9987ZM17.9887,13.9987C17.8712,13.9987 17.7588,14.0912 17.7388,14.2087L17.5487,15.5275C17.2512,15.6588 16.9575,15.82 16.6988,16.02L15.4587,15.5175C15.3512,15.4787 15.22,15.5225 15.1512,15.63L14.15,17.3587C14.0913,17.4713 14.1112,17.5975 14.2087,17.6812L15.2688,18.5113C15.2487,18.6712 15.2388,18.8275 15.2388,18.9988C15.2388,19.17 15.2487,19.3312 15.2688,19.4925L14.2087,20.3225C14.1212,20.4 14.0913,20.5325 14.15,20.64L15.1512,22.3687C15.21,22.48 15.3413,22.52 15.4587,22.48L16.6988,21.9825C16.9575,22.1825 17.2412,22.3488 17.5487,22.4713L17.7388,23.7888C17.7588,23.9113 17.8612,23.9988 17.9887,23.9988L19.99,23.9988C20.1123,23.9988 20.22,23.9113 20.2393,23.7888L20.4297,22.4713C20.7275,22.3387 21.0205,22.1825 21.27,21.9825L22.52,22.48C22.6312,22.52 22.7588,22.48 22.8325,22.3687L23.8288,20.64C23.8913,20.5325 23.8575,20.4 23.77,20.3225L22.7002,19.4925C22.72,19.3312 22.7393,19.17 22.7393,18.9988C22.7393,18.8275 22.7295,18.6712 22.7002,18.5113L23.76,17.6812C23.8475,17.5975 23.8812,17.4713 23.8188,17.3587L22.8225,15.63C22.7588,15.5225 22.6312,15.4787 22.51,15.5175L21.27,16.02C21.0107,15.82 20.7275,15.65 20.42,15.5275L20.2295,14.2087C20.22,14.0912 20.1123,13.9987 19.99,13.9987M18.9888,17.5C19.8188,17.5 20.4888,18.1687 20.4888,18.9988C20.4888,19.8288 19.8188,20.4975 18.9888,20.4975C18.1588,20.4975 17.49,19.8288 17.49,18.9988C17.49,18.1687 18.1588,17.5 18.9888,17.5Z"
android:strokeWidth="0.2"
android:strokeLineJoin="round" />
</vector>

9
app/src/main/res/drawable/ic_add_24dp.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M440,520L240,520Q223,520 211.5,508.5Q200,497 200,480Q200,463 211.5,451.5Q223,440 240,440L440,440L440,240Q440,223 451.5,211.5Q463,200 480,200Q497,200 508.5,211.5Q520,223 520,240L520,440L720,440Q737,440 748.5,451.5Q760,463 760,480Q760,497 748.5,508.5Q737,520 720,520L520,520L520,720Q520,737 508.5,748.5Q497,760 480,760Q463,760 451.5,748.5Q440,737 440,720L440,520Z"/>
</vector>

4
app/src/main/res/drawable/ic_add_a_photo_32dp.xml

@ -1,4 +0,0 @@
<vector android:height="32dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFFFF" android:pathData="M3,4L3,1h2v3h3v2L5,6v3L3,9L3,6L0,6L0,4h3zM6,10L6,7h3L9,4h7l1.83,2L21,6c1.1,0 2,0.9 2,2v12c0,1.1 -0.9,2 -2,2L5,22c-1.1,0 -2,-0.9 -2,-2L3,10h3zM13,19c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5 -5,2.24 -5,5 2.24,5 5,5zM9.8,14c0,1.77 1.43,3.2 3.2,3.2s3.2,-1.43 3.2,-3.2 -1.43,-3.2 -3.2,-3.2 -3.2,1.43 -3.2,3.2z"/>
</vector>

9
app/src/main/res/drawable/ic_add_a_photo_32dp_filled.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M800,280Q783,280 771.5,268.5Q760,257 760,240L760,200L720,200Q703,200 691.5,188.5Q680,177 680,160Q680,143 691.5,131.5Q703,120 720,120L760,120L760,80Q760,63 771.5,51.5Q783,40 800,40Q817,40 828.5,51.5Q840,63 840,80L840,120L880,120Q897,120 908.5,131.5Q920,143 920,160Q920,177 908.5,188.5Q897,200 880,200L840,200L840,240Q840,257 828.5,268.5Q817,280 800,280ZM440,700Q515,700 567.5,647.5Q620,595 620,520Q620,445 567.5,392.5Q515,340 440,340Q365,340 312.5,392.5Q260,445 260,520Q260,595 312.5,647.5Q365,700 440,700ZM440,620Q398,620 369,591Q340,562 340,520Q340,478 369,449Q398,420 440,420Q482,420 511,449Q540,478 540,520Q540,562 511,591Q482,620 440,620ZM120,840Q87,840 63.5,816.5Q40,793 40,760L40,280Q40,247 63.5,223.5Q87,200 120,200L246,200L296,146Q307,134 322.5,127Q338,120 355,120L560,120Q577,120 588.5,131.5Q600,143 600,160L600,220Q600,245 617.5,262.5Q635,280 660,280L680,280L680,300Q680,325 697.5,342.5Q715,360 740,360L800,360Q817,360 828.5,371.5Q840,383 840,400L840,760Q840,793 816.5,816.5Q793,840 760,840L120,840Z"/>
</vector>

8
app/src/main/res/drawable/ic_alert_circle.xml

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z" />
</vector>

11
app/src/main/res/drawable/ic_arrow_back_24dp.xml

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:autoMirrored="true"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#fff"
android:pathData="M313,520L509,716Q521,728 520.5,744Q520,760 508,772Q496,783 480,783.5Q464,784 452,772L188,508Q182,502 179.5,495Q177,488 177,480Q177,472 179.5,465Q182,458 188,452L452,188Q463,177 479.5,177Q496,177 508,188Q520,200 520,216.5Q520,233 508,245L313,440L760,440Q777,440 788.5,451.5Q800,463 800,480Q800,497 788.5,508.5Q777,520 760,520L313,520Z"/>
</vector>

13
app/src/main/res/drawable/ic_arrow_back_with_background.xml

@ -1,13 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:autoMirrored="true"
android:viewportWidth="32"
android:viewportHeight="32">
<path
android:fillColor="@color/toolbar_icon_background"
android:pathData="M16 0C7.152 0 0 7.152 0 16s7.152 16 16 16 16-7.152 16-16S24.848 0 16 0z" />
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M24 15H11.83l5.59-5.59L16 8l-8 8 8 8 1.41-1.41L11.83 17H24v-2z" />
</vector>

10
app/src/main/res/drawable/ic_arrow_drop_down_24dp.xml

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M459,579L314,434Q311,431 309.5,427.5Q308,424 308,420Q308,412 313.5,406Q319,400 328,400L632,400Q641,400 646.5,406Q652,412 652,420Q652,422 646,434L501,579Q496,584 491,586Q486,588 480,588Q474,588 469,586Q464,584 459,579Z"/>
</vector>

10
app/src/main/res/drawable/ic_arrow_drop_up_24dp.xml

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M328,560Q319,560 313.5,554Q308,548 308,540Q308,538 314,526L459,381Q464,376 469,374Q474,372 480,372Q486,372 491,374Q496,376 501,381L646,526Q649,529 650.5,532.5Q652,536 652,540Q652,548 646.5,554Q641,560 632,560L328,560Z"/>
</vector>

10
app/src/main/res/drawable/ic_at_18dp.xml

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="18dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?android:textColorTertiary">
<path
android:fillColor="@android:color/white"
android:pathData="M12,1.95c-5.52,0 -10,4.48 -10,10s4.48,10 10,10h5v-2h-5c-4.34,0 -8,-3.66 -8,-8s3.66,-8 8,-8 8,3.66 8,8v1.43c0,0.79 -0.71,1.57 -1.5,1.57s-1.5,-0.78 -1.5,-1.57v-1.43c0,-2.76 -2.24,-5 -5,-5s-5,2.24 -5,5 2.24,5 5,5c1.38,0 2.64,-0.56 3.54,-1.47 0.65,0.89 1.77,1.47 2.96,1.47 1.97,0 3.5,-1.6 3.5,-3.57v-1.43c0,-5.52 -4.48,-10 -10,-10zM12,14.95c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3z"/>
</vector>

10
app/src/main/res/drawable/ic_attach_file_24dp.xml

@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M16.5,6v11.5c0,2.21 -1.79,4 -4,4s-4,-1.79 -4,-4V5c0,-1.38 1.12,-2.5 2.5,-2.5s2.5,1.12 2.5,2.5v10.5c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1V6H10v9.5c0,1.38 1.12,2.5 2.5,2.5s2.5,-1.12 2.5,-2.5V5c0,-2.21 -1.79,-4 -4,-4S7,2.79 7,5v12.5c0,3.04 2.46,5.5 5.5,5.5s5.5,-2.46 5.5,-5.5V6h-1.5z"/>
android:pathData="M720,630Q720,734 647,807Q574,880 470,880Q366,880 293,807Q220,734 220,630L220,260Q220,185 272.5,132.5Q325,80 400,80Q475,80 527.5,132.5Q580,185 580,260L580,610Q580,656 548,688Q516,720 470,720Q424,720 392,688Q360,656 360,610L360,280Q360,263 371.5,251.5Q383,240 400,240Q417,240 428.5,251.5Q440,263 440,280L440,610Q440,623 448.5,631.5Q457,640 470,640Q483,640 491.5,631.5Q500,623 500,610L500,260Q499,218 470.5,189Q442,160 400,160Q358,160 329,189Q300,218 300,260L300,630Q299,701 349,750.5Q399,800 470,800Q540,800 589,750.5Q638,701 640,630L640,280Q640,263 651.5,251.5Q663,240 680,240Q697,240 708.5,251.5Q720,263 720,280L720,630Z"/>
</vector>

11
app/src/main/res/drawable/ic_block_24dp.xml

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q534,800 584,782.5Q634,765 676,732L228,284Q195,326 177.5,376Q160,426 160,480Q160,614 253,707Q346,800 480,800ZM732,676Q765,634 782.5,584Q800,534 800,480Q800,346 707,253Q614,160 480,160Q426,160 376,177.5Q326,195 284,228L732,676Z"/>
</vector>

10
app/src/main/res/drawable/ic_bookmark_24dp.xml

@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="?android:attr/textColorTertiary"
android:pathData="M17,3L7,3c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3L19,5c0,-1.1 -0.9,-2 -2,-2zM17,18l-5,-2.18L7,18L7,5h10v13z"/>
android:pathData="M480,720L312,792Q272,809 236,785.5Q200,762 200,719L200,200Q200,167 223.5,143.5Q247,120 280,120L680,120Q713,120 736.5,143.5Q760,167 760,200L760,719Q760,762 724,785.5Q688,809 648,792L480,720ZM480,632L680,718Q680,718 680,718Q680,718 680,718L680,200Q680,200 680,200Q680,200 680,200L280,200Q280,200 280,200Q280,200 280,200L280,718Q280,718 280,718Q280,718 280,718L480,632ZM480,200L280,200Q280,200 280,200Q280,200 280,200L280,200Q280,200 280,200Q280,200 280,200L680,200Q680,200 680,200Q680,200 680,200L680,200Q680,200 680,200Q680,200 680,200L480,200Z"/>
</vector>

9
app/src/main/res/drawable/ic_bookmark_24dp_filled.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@color/tusky_green"
android:pathData="M480,720L312,792Q272,809 236,785.5Q200,762 200,719L200,200Q200,167 223.5,143.5Q247,120 280,120L680,120Q713,120 736.5,143.5Q760,167 760,200L760,719Q760,762 724,785.5Q688,809 648,792L480,720Z"/>
</vector>

9
app/src/main/res/drawable/ic_bookmark_active_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#19a341"
android:pathData="M17,3H7c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3V5c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>

13
app/src/main/res/drawable/ic_bot_24dp.xml

@ -1,8 +1,9 @@
<!-- drawable/robot.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1 21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1 0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1 12,2M7.5,13A2.5,2.5 0 0,0 5,15.5A2.5,2.5 0 0,0 7.5,18A2.5,2.5 0 0,0 10,15.5A2.5,2.5 0 0,0 7.5,13M16.5,13A2.5,2.5 0 0,0 14,15.5A2.5,2.5 0 0,0 16.5,18A2.5,2.5 0 0,0 19,15.5A2.5,2.5 0 0,0 16.5,13Z" />
</vector>
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,360Q120,260 190,190Q260,120 360,120L600,120Q700,120 770,190Q840,260 840,360L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L280,760L280,760L360,760L360,760L440,760L440,760L520,760L520,760L600,760L600,760L680,760L680,760L760,760Q760,760 760,760Q760,760 760,760L760,360Q760,294 713,247Q666,200 600,200L360,200Q294,200 247,247Q200,294 200,360L200,760Q200,760 200,760Q200,760 200,760ZM360,480Q327,480 303.5,456.5Q280,433 280,400Q280,367 303.5,343.5Q327,320 360,320Q393,320 416.5,343.5Q440,367 440,400Q440,433 416.5,456.5Q393,480 360,480ZM600,480Q567,480 543.5,456.5Q520,433 520,400Q520,367 543.5,343.5Q567,320 600,320Q633,320 656.5,343.5Q680,367 680,400Q680,433 656.5,456.5Q633,480 600,480ZM280,760L280,680Q280,647 303.5,623.5Q327,600 360,600L600,600Q633,600 656.5,623.5Q680,647 680,680L680,760L600,760L600,680Q600,680 600,680Q600,680 600,680L520,680L520,760L440,760L440,680L360,680Q360,680 360,680Q360,680 360,680L360,760L280,760ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,760Q760,760 713,760Q666,760 600,760L360,760Q294,760 247,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760Z"/>
</vector>

10
app/src/main/res/drawable/ic_bottom_navigation_24dp.xml

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,600L760,600L760,200Q760,200 760,200Q760,200 760,200L200,200Q200,200 200,200Q200,200 200,200L200,600ZM200,680L200,760Q200,760 200,760Q200,760 200,760L760,760Q760,760 760,760Q760,760 760,760L760,680L200,680ZM200,680L200,680L200,760Q200,760 200,760Q200,760 200,760L200,760Q200,760 200,760Q200,760 200,760L200,680Z"/>
</vector>

10
app/src/main/res/drawable/ic_bottom_navigation_24dp_mirrored.xml

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="m200,120q-33,0 -56.5,23.5Q120,167 120,200v560q0,33 23.5,56.5 23.5,23.5 56.5,23.5h560q33,0 56.5,-23.5Q840,793 840,760v-560q0,-33 -23.5,-56.5Q793,120 760,120ZM200,360h560v400L200,760ZM200,280v-80h560v80zM200,280v-80z" />
</vector>

9
app/src/main/res/drawable/ic_briefcase.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="18dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="@color/textColorTertiary"
android:pathData="M20,6C20.58,6 21.05,6.2 21.42,6.59C21.8,7 22,7.45 22,8V19C22,19.55 21.8,20 21.42,20.41C21.05,20.8 20.58,21 20,21H4C3.42,21 2.95,20.8 2.58,20.41C2.2,20 2,19.55 2,19V8C2,7.45 2.2,7 2.58,6.59C2.95,6.2 3.42,6 4,6H8V4C8,3.42 8.2,2.95 8.58,2.58C8.95,2.2 9.42,2 10,2H14C14.58,2 15.05,2.2 15.42,2.58C15.8,2.95 16,3.42 16,4V6H20M4,8V19H20V8H4M14,6V4H10V6H14Z" />
</vector>

9
app/src/main/res/drawable/ic_bullhorn_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M12,8H4A2,2 0,0 0,2 10V14A2,2 0,0 0,4 16H5V20A1,1 0,0 0,6 21H8A1,1 0,0 0,9 20V16H12L17,20V4L12,8M21.5,12C21.5,13.71 20.54,15.26 19,16V8C20.53,8.75 21.5,10.3 21.5,12Z" />
</vector>

9
app/src/main/res/drawable/ic_campaign_24dp.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M840,520L760,520Q743,520 731.5,508.5Q720,497 720,480Q720,463 731.5,451.5Q743,440 760,440L840,440Q857,440 868.5,451.5Q880,463 880,480Q880,497 868.5,508.5Q857,520 840,520ZM664,672Q674,658 690,656Q706,654 720,664L784,712Q798,722 800,738Q802,754 792,768Q782,782 766,784Q750,786 736,776L672,728Q658,718 656,702Q654,686 664,672ZM784,248L720,296Q706,306 690,304Q674,302 664,288Q654,274 656,258Q658,242 672,232L736,184Q750,174 766,176Q782,178 792,192Q802,206 800,222Q798,238 784,248ZM200,600L160,600Q127,600 103.5,576.5Q80,553 80,520L80,440Q80,407 103.5,383.5Q127,360 160,360L320,360L459,276Q479,264 499.5,276Q520,288 520,311L520,649Q520,672 499.5,684Q479,696 459,684L320,600L280,600L280,720Q280,737 268.5,748.5Q257,760 240,760Q223,760 211.5,748.5Q200,737 200,720L200,600ZM440,578L440,382L342,440L160,440Q160,440 160,440Q160,440 160,440L160,520Q160,520 160,520Q160,520 160,520L342,520L440,578ZM560,614L560,346Q587,370 603.5,404.5Q620,439 620,480Q620,521 603.5,555.5Q587,590 560,614ZM300,480L300,480L300,480Q300,480 300,480Q300,480 300,480L300,480Q300,480 300,480Q300,480 300,480L300,480L300,480Z"/>
</vector>

9
app/src/main/res/drawable/ic_cancel_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z"/>
</vector>

9
app/src/main/res/drawable/ic_cancel_24dp_filled.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M480,536L596,652Q607,663 624,663Q641,663 652,652Q663,641 663,624Q663,607 652,596L536,480L652,364Q663,353 663,336Q663,319 652,308Q641,297 624,297Q607,297 596,308L480,424L364,308Q353,297 336,297Q319,297 308,308Q297,319 297,336Q297,353 308,364L424,480L308,596Q297,607 297,624Q297,641 308,652Q319,663 336,663Q353,663 364,652L480,536ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880Z"/>
</vector>

13
app/src/main/res/drawable/ic_check_24dp.xml

@ -1,9 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
android:fillColor="@android:color/white"
android:pathData="M382,606L721,267Q733,255 749,255Q765,255 777,267Q789,279 789,295.5Q789,312 777,324L410,692Q398,704 382,704Q366,704 354,692L182,520Q170,508 170.5,491.5Q171,475 183,463Q195,451 211.5,451Q228,451 240,463L382,606Z"/>
</vector>

4
app/src/main/res/drawable/ic_check_32dp.xml

@ -1,4 +0,0 @@
<vector android:height="32dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?attr/colorControlNormal" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>

10
app/src/main/res/drawable/ic_check_box_outline_blank_18dp.xml

@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="18dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"/>
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L760,120Q793,120 816.5,143.5Q840,167 840,200L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM200,760L760,760Q760,760 760,760Q760,760 760,760L760,200Q760,200 760,200Q760,200 760,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760Z"/>
</vector>

8
app/src/main/res/drawable/ic_check_circle.xml

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="18dp"
android:width="18dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="?attr/colorPrimary" android:pathData="M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z" />
</vector>

6
app/src/main/res/drawable/ic_trending_up_24px.xml → app/src/main/res/drawable/ic_chevron_right_24dp.xml

@ -1,11 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M3.4,18 L2,16.6 9.4,9.15 13.4,13.15 18.6,8H16V6H22V12H20V9.4L13.4,16L9.4,12Z"/>
android:pathData="M504,480L320,296L376,240L616,480L376,720L320,664L504,480Z"/>
</vector>

9
app/src/main/res/drawable/ic_clear_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#fff"
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
</vector>

10
app/src/main/res/drawable/ic_close_24dp.xml

@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="?android:attr/textColorSecondary"
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
android:pathData="M480,536L284,732Q273,743 256,743Q239,743 228,732Q217,721 217,704Q217,687 228,676L424,480L228,284Q217,273 217,256Q217,239 228,228Q239,217 256,217Q273,217 284,228L480,424L676,228Q687,217 704,217Q721,217 732,228Q743,239 743,256Q743,273 732,284L536,480L732,676Q743,687 743,704Q743,721 732,732Q721,743 704,743Q687,743 676,732L480,536Z"/>
</vector>

9
app/src/main/res/drawable/ic_comments_disabled_24dp.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M607,720L160,720Q127,720 103.5,696.5Q80,673 80,640L80,193Q80,193 80,193Q80,193 80,193L55,168Q43,156 43,139.5Q43,123 55,111Q67,99 83.5,99Q100,99 112,111L848,847Q860,859 860,875Q860,891 848,903Q836,915 819.5,915Q803,915 791,903L607,720ZM880,160L880,717Q880,731 868,736Q856,741 846,731L675,560L680,560Q697,560 708.5,548.5Q720,537 720,520Q720,503 708.5,491.5Q697,480 680,480L595,480L555,440L680,440Q697,440 708.5,428.5Q720,417 720,400Q720,383 708.5,371.5Q697,360 680,360L475,360L435,320L680,320Q697,320 708.5,308.5Q720,297 720,280Q720,263 708.5,251.5Q697,240 680,240L355,240L263,148Q253,138 251.5,127Q250,116 255,105Q260,94 269,87Q278,80 292,80L800,80Q833,80 856.5,103.5Q880,127 880,160ZM447,560L367,480L280,480Q263,480 251.5,491.5Q240,503 240,520Q240,537 251.5,548.5Q263,560 280,560L447,560ZM327,440L255,368L255,368Q248,373 244,381.5Q240,390 240,400Q240,417 251.5,428.5Q263,440 280,440L327,440Z"/>
</vector>

5
app/src/main/res/drawable/ic_content_copy_24.xml

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M16,1L4,1c-1.1,0 -2,0.9 -2,2v14h2L4,3h12L16,1zM19,5L8,5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2L21,7c0,-1.1 -0.9,-2 -2,-2zM19,21L8,21L8,7h11v14z"/>
</vector>

11
app/src/main/res/drawable/ic_content_copy_24dp.xml

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M360,720Q327,720 303.5,696.5Q280,673 280,640L280,160Q280,127 303.5,103.5Q327,80 360,80L720,80Q753,80 776.5,103.5Q800,127 800,160L800,640Q800,673 776.5,696.5Q753,720 720,720L360,720ZM360,640L720,640Q720,640 720,640Q720,640 720,640L720,160Q720,160 720,160Q720,160 720,160L360,160Q360,160 360,160Q360,160 360,160L360,640Q360,640 360,640Q360,640 360,640ZM200,880Q167,880 143.5,856.5Q120,833 120,800L120,280Q120,263 131.5,251.5Q143,240 160,240Q177,240 188.5,251.5Q200,263 200,280L200,800Q200,800 200,800Q200,800 200,800L600,800Q617,800 628.5,811.5Q640,823 640,840Q640,857 628.5,868.5Q617,880 600,880L200,880ZM360,640Q360,640 360,640Q360,640 360,640L360,160Q360,160 360,160Q360,160 360,160L360,160Q360,160 360,160Q360,160 360,160L360,640Q360,640 360,640Q360,640 360,640Z"/>
</vector>

9
app/src/main/res/drawable/ic_create_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/white"
android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/>
</vector>

9
app/src/main/res/drawable/ic_cw_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM13,14h-2v-2h2v2zM13,10h-2L11,6h2v4z"/>
</vector>

10
app/src/main/res/drawable/ic_developer_mode_24dp.xml

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M274,480L372,578Q384,590 383.5,606Q383,622 372,634Q360,646 343.5,646.5Q327,647 315,635L188,508Q176,496 176,480Q176,464 188,452L315,325Q327,313 343.5,313.5Q360,314 372,326Q383,338 383.5,354Q384,370 372,382L274,480ZM280,800L280,840Q280,840 280,840Q280,840 280,840L680,840Q680,840 680,840Q680,840 680,840L680,800L280,800ZM280,160L680,160L680,120Q680,120 680,120Q680,120 680,120L280,120Q280,120 280,120Q280,120 280,120L280,160ZM686,480L588,382Q576,370 576.5,354Q577,338 588,326Q600,314 616.5,313.5Q633,313 645,325L772,452Q784,464 784,480Q784,496 772,508L645,635Q633,647 616.5,646.5Q600,646 588,634Q577,622 576.5,606Q576,590 588,578L686,480ZM280,160L280,120Q280,120 280,120Q280,120 280,120L280,120Q280,120 280,120Q280,120 280,120L280,160ZM280,800L280,800L280,840Q280,840 280,840Q280,840 280,840L280,840Q280,840 280,840Q280,840 280,840L280,800ZM280,920Q247,920 223.5,896.5Q200,873 200,840L200,720Q200,703 211.5,691.5Q223,680 240,680Q257,680 268.5,691.5Q280,703 280,720L280,720L680,720L680,720Q680,703 691.5,691.5Q703,680 720,680Q737,680 748.5,691.5Q760,703 760,720L760,840Q760,873 736.5,896.5Q713,920 680,920L280,920ZM280,40L680,40Q713,40 736.5,63.5Q760,87 760,120L760,240Q760,257 748.5,268.5Q737,280 720,280Q703,280 691.5,268.5Q680,257 680,240L680,240L280,240L280,240Q280,257 268.5,268.5Q257,280 240,280Q223,280 211.5,268.5Q200,257 200,240L200,120Q200,87 223.5,63.5Q247,40 280,40Z"/>
</vector>

10
app/src/main/res/drawable/ic_done_outline_24dp.xml

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M381,720L805,296L748,240L380,607L211,437L154,494L381,720ZM324,776L98,550Q86,538 80.5,523.5Q75,509 75,494Q75,479 80.5,464Q86,449 98,437L154,381Q166,369 180.5,363Q195,357 211,357Q227,357 241.5,363Q256,369 268,381L381,494L691,183Q702,171 717,165.5Q732,160 747,160Q762,160 777,165.5Q792,171 804,182L861,238Q873,250 879,264.5Q885,279 885,295Q885,311 879.5,325.5Q874,340 862,352L438,776Q426,788 411,794Q396,800 381,800Q366,800 351,794Q336,788 324,776Z"/>
</vector>

9
app/src/main/res/drawable/ic_download_24dp.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M480,623Q472,623 465,620.5Q458,618 452,612L308,468Q296,456 296.5,440Q297,424 308,412Q320,400 336.5,399.5Q353,399 365,411L440,486L440,200Q440,183 451.5,171.5Q463,160 480,160Q497,160 508.5,171.5Q520,183 520,200L520,486L595,411Q607,399 623.5,399.5Q640,400 652,412Q663,424 663.5,440Q664,456 652,468L508,612Q502,618 495,620.5Q488,623 480,623ZM240,800Q207,800 183.5,776.5Q160,753 160,720L160,640Q160,623 171.5,611.5Q183,600 200,600Q217,600 228.5,611.5Q240,623 240,640L240,720Q240,720 240,720Q240,720 240,720L720,720Q720,720 720,720Q720,720 720,720L720,640Q720,623 731.5,611.5Q743,600 760,600Q777,600 788.5,611.5Q800,623 800,640L800,720Q800,753 776.5,776.5Q753,800 720,800L240,800Z"/>
</vector>

6
app/src/main/res/drawable/ic_drag_indicator_24dp.xml

@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="?android:attr/textColorPrimary"
android:pathData="M11,18c0,1.1 -0.9,2 -2,2s-2,-0.9 -2,-2 0.9,-2 2,-2 2,0.9 2,2zM9,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM9,4c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM15,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM15,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM15,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z" />
android:pathData="M360,800Q327,800 303.5,776.5Q280,753 280,720Q280,687 303.5,663.5Q327,640 360,640Q393,640 416.5,663.5Q440,687 440,720Q440,753 416.5,776.5Q393,800 360,800ZM600,800Q567,800 543.5,776.5Q520,753 520,720Q520,687 543.5,663.5Q567,640 600,640Q633,640 656.5,663.5Q680,687 680,720Q680,753 656.5,776.5Q633,800 600,800ZM360,560Q327,560 303.5,536.5Q280,513 280,480Q280,447 303.5,423.5Q327,400 360,400Q393,400 416.5,423.5Q440,447 440,480Q440,513 416.5,536.5Q393,560 360,560ZM600,560Q567,560 543.5,536.5Q520,513 520,480Q520,447 543.5,423.5Q567,400 600,400Q633,400 656.5,423.5Q680,447 680,480Q680,513 656.5,536.5Q633,560 600,560ZM360,320Q327,320 303.5,296.5Q280,273 280,240Q280,207 303.5,183.5Q327,160 360,160Q393,160 416.5,183.5Q440,207 440,240Q440,273 416.5,296.5Q393,320 360,320ZM600,320Q567,320 543.5,296.5Q520,273 520,240Q520,207 543.5,183.5Q567,160 600,160Q633,160 656.5,183.5Q680,207 680,240Q680,273 656.5,296.5Q633,320 600,320Z" />
</vector>

9
app/src/main/res/drawable/ic_drag_indicator_horiz_24dp.xml

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<size
android:width="8dp"
android:height="1dp" />
<solid android:color="?android:textColorTertiary" />
<corners android:radius="1dp" />
</shape>

10
app/src/main/res/drawable/ic_edit_24dp.xml

@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/>
</vector>

9
app/src/main/res/drawable/ic_edit_24dp_filled.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@color/white"
android:pathData="M160,840Q143,840 131.5,828.5Q120,817 120,800L120,703Q120,687 126,672.5Q132,658 143,647L648,143Q660,132 674.5,126Q689,120 705,120Q721,120 736,126Q751,132 762,144L817,200Q829,211 834.5,226Q840,241 840,256Q840,272 834.5,286.5Q829,301 817,313L313,817Q302,828 287.5,834Q273,840 257,840L160,840ZM704,312L760,256L704,200L648,256L704,312Z"/>
</vector>

10
app/src/main/res/drawable/ic_edit_document_24dp.xml

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M560,840L560,774Q560,766 563,758.5Q566,751 572,745L781,537Q790,528 801,524Q812,520 823,520Q835,520 846,524.5Q857,529 866,538L903,575Q911,584 915.5,595Q920,606 920,617Q920,628 916,639.5Q912,651 903,660L695,868Q689,874 681.5,877Q674,880 666,880L600,880Q583,880 571.5,868.5Q560,857 560,840ZM860,617L860,617L823,580L823,580L860,617ZM620,820L658,820L779,698L742,661L620,782L620,820ZM240,880Q207,880 183.5,856.5Q160,833 160,800L160,160Q160,127 183.5,103.5Q207,80 240,80L527,80Q543,80 557.5,86Q572,92 583,103L777,297Q788,308 794,322.5Q800,337 800,353L800,410Q800,427 788.5,438.5Q777,450 760,450Q743,450 731.5,438.5Q720,427 720,410L720,360L560,360Q543,360 531.5,348.5Q520,337 520,320L520,160L240,160Q240,160 240,160Q240,160 240,160L240,800Q240,800 240,800Q240,800 240,800L440,800Q457,800 468.5,811.5Q480,823 480,840Q480,857 468.5,868.5Q457,880 440,880L240,880ZM240,800L240,756Q240,740 240,725.5Q240,711 240,700L240,440L240,440L240,440L240,360L240,160L240,160Q240,160 240,160Q240,160 240,160L240,800Q240,800 240,800Q240,800 240,800ZM761,679L742,661L742,661L779,698L779,698L761,679Z"/>
</vector>

7
app/src/main/res/drawable/ic_email_24dp.xml

@ -1,7 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#fff" android:pathData="M4,4H20A2,2 0 0,1 22,6V18A2,2 0 0,1 20,20H4C2.89,20 2,19.1 2,18V6C2,4.89 2.89,4 4,4M12,11L20,6H4L12,11M4,18H20V8.37L12,13.36L4,8.37V18Z" />
</vector>

9
app/src/main/res/drawable/ic_email_alternate_18dp.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="18dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="?android:textColorTertiary"
android:pathData="M480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480L880,538Q880,597 839.5,638.5Q799,680 740,680Q705,680 674,665Q643,650 622,622Q593,651 556.5,665.5Q520,680 480,680Q397,680 338.5,621.5Q280,563 280,480Q280,397 338.5,338.5Q397,280 480,280Q563,280 621.5,338.5Q680,397 680,480L680,538Q680,564 697,582Q714,600 740,600Q766,600 783,582Q800,564 800,538L800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800L640,800Q657,800 668.5,811.5Q680,823 680,840Q680,857 668.5,868.5Q657,880 640,880L480,880ZM480,600Q530,600 565,565Q600,530 600,480Q600,430 565,395Q530,360 480,360Q430,360 395,395Q360,430 360,480Q360,530 395,565Q430,600 480,600Z"/>
</vector>

9
app/src/main/res/drawable/ic_email_alternate_24dp.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="?android:textColorTertiary"
android:pathData="M480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480L880,538Q880,597 839.5,638.5Q799,680 740,680Q705,680 674,665Q643,650 622,622Q593,651 556.5,665.5Q520,680 480,680Q397,680 338.5,621.5Q280,563 280,480Q280,397 338.5,338.5Q397,280 480,280Q563,280 621.5,338.5Q680,397 680,480L680,538Q680,564 697,582Q714,600 740,600Q766,600 783,582Q800,564 800,538L800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800L640,800Q657,800 668.5,811.5Q680,823 680,840Q680,857 668.5,868.5Q657,880 640,880L480,880ZM480,600Q530,600 565,565Q600,530 600,480Q600,430 565,395Q530,360 480,360Q430,360 395,395Q360,430 360,480Q360,530 395,565Q430,600 480,600Z"/>
</vector>

9
app/src/main/res/drawable/ic_emoji_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#fff"
android:pathData="M12,17.5C14.33,17.5 16.3,16.04 17.11,14H6.89C7.69,16.04 9.67,17.5 12,17.5M8.5,11A1.5,1.5 0 0,0 10,9.5A1.5,1.5 0 0,0 8.5,8A1.5,1.5 0 0,0 7,9.5A1.5,1.5 0 0,0 8.5,11M15.5,11A1.5,1.5 0 0,0 17,9.5A1.5,1.5 0 0,0 15.5,8A1.5,1.5 0 0,0 14,9.5A1.5,1.5 0 0,0 15.5,11M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
</vector>

9
app/src/main/res/drawable/ic_error_24dp.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M480,680Q497,680 508.5,668.5Q520,657 520,640Q520,623 508.5,611.5Q497,600 480,600Q463,600 451.5,611.5Q440,623 440,640Q440,657 451.5,668.5Q463,680 480,680ZM480,520Q497,520 508.5,508.5Q520,497 520,480L520,320Q520,303 508.5,291.5Q497,280 480,280Q463,280 451.5,291.5Q440,303 440,320L440,480Q440,497 451.5,508.5Q463,520 480,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
</vector>

9
app/src/main/res/drawable/ic_eye_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z" />
</vector>

9
app/src/main/res/drawable/ic_favourite_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="?android:attr/textColorTertiary"
android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z" />
</vector>

9
app/src/main/res/drawable/ic_favourite_active_24dp.xml

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/favoriteButtonActiveColor"
android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
</vector>

9
app/src/main/res/drawable/ic_feedback_24dp_filled.xml

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#fff"
android:pathData="M240,720L148,812Q129,831 104.5,820.5Q80,810 80,783L80,160Q80,127 103.5,103.5Q127,80 160,80L800,80Q833,80 856.5,103.5Q880,127 880,160L880,640Q880,673 856.5,696.5Q833,720 800,720L240,720ZM480,600Q497,600 508.5,588.5Q520,577 520,560Q520,543 508.5,531.5Q497,520 480,520Q463,520 451.5,531.5Q440,543 440,560Q440,577 451.5,588.5Q463,600 480,600ZM480,440Q497,440 508.5,428.5Q520,417 520,400L520,240Q520,223 508.5,211.5Q497,200 480,200Q463,200 451.5,211.5Q440,223 440,240L440,400Q440,417 451.5,428.5Q463,440 480,440Z"/>
</vector>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save