diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8014d33ba07c..b07c591992c6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -379,14 +379,13 @@
android:name=".ui.activity.SettingsActivity"
android:enableOnBackInvokedCallback="false"
android:exported="false"
- android:theme="@style/PreferenceTheme" />
+ android:theme="@style/Theme.ownCloud" />
+ android:launchMode="singleTask" />
val bottomNavItems = setOf(R.id.nav_assistant, R.id.nav_all_files, R.id.nav_favorites, R.id.nav_gallery)
diff --git a/app/src/main/java/com/nmc/android/utils/DrawableThemeUtils.kt b/app/src/main/java/com/nmc/android/utils/DrawableThemeUtils.kt
new file mode 100644
index 000000000000..90d87bc6dcd6
--- /dev/null
+++ b/app/src/main/java/com/nmc/android/utils/DrawableThemeUtils.kt
@@ -0,0 +1,18 @@
+package com.nmc.android.utils
+
+import android.graphics.drawable.Drawable
+import androidx.annotation.ColorInt
+import androidx.core.graphics.BlendModeColorFilterCompat
+import androidx.core.graphics.BlendModeCompat
+import androidx.core.graphics.drawable.DrawableCompat
+
+object DrawableThemeUtils {
+ @JvmStatic
+ fun tintDrawable(drawable: Drawable, @ColorInt color: Int): Drawable {
+ val wrap: Drawable = DrawableCompat.wrap(drawable)
+ wrap.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(
+ color, BlendModeCompat.SRC_ATOP
+ )
+ return wrap
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nmc/android/utils/NavigationViewThemeUtils.kt b/app/src/main/java/com/nmc/android/utils/NavigationViewThemeUtils.kt
new file mode 100644
index 000000000000..c3155e7e7f50
--- /dev/null
+++ b/app/src/main/java/com/nmc/android/utils/NavigationViewThemeUtils.kt
@@ -0,0 +1,46 @@
+package com.nmc.android.utils
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.graphics.Color
+import com.google.android.material.navigation.NavigationView
+import com.nextcloud.android.common.ui.util.buildColorStateList
+import com.owncloud.android.R
+
+object NavigationViewThemeUtils {
+ @JvmStatic
+ @JvmOverloads
+ fun colorNavigationView(
+ context: Context,
+ navigationView: NavigationView,
+ colorIcons: Boolean = true
+ ) {
+ if (navigationView.itemBackground != null) {
+ navigationView.itemBackground?.setTintList(
+ buildColorStateList(
+ android.R.attr.state_checked to context.resources.getColor(R.color.nav_selected_bg_color, null),
+ -android.R.attr.state_checked to Color.TRANSPARENT
+ )
+ )
+ }
+ navigationView.background.setTintList(
+ ColorStateList.valueOf(
+ context.resources.getColor(
+ R.color.nav_bg_color,
+ null
+ )
+ )
+ )
+
+ val colorStateList =
+ buildColorStateList(
+ android.R.attr.state_checked to context.resources.getColor(R.color.nav_txt_selected_color, null),
+ -android.R.attr.state_checked to context.resources.getColor(R.color.nav_txt_unselected_color, null),
+ )
+
+ navigationView.itemTextColor = colorStateList
+ if (colorIcons) {
+ navigationView.itemIconTintList = colorStateList
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nmc/android/utils/ToolbarThemeUtils.kt b/app/src/main/java/com/nmc/android/utils/ToolbarThemeUtils.kt
new file mode 100644
index 000000000000..de28f3a33952
--- /dev/null
+++ b/app/src/main/java/com/nmc/android/utils/ToolbarThemeUtils.kt
@@ -0,0 +1,27 @@
+package com.nmc.android.utils
+
+import android.content.Context
+import android.graphics.Typeface
+import android.text.Spannable
+import android.text.style.StyleSpan
+import androidx.appcompat.app.ActionBar
+import com.owncloud.android.R
+import com.owncloud.android.utils.StringUtils
+
+object ToolbarThemeUtils {
+ @JvmStatic
+ fun setColoredTitle(context: Context, actionBar: ActionBar?, title: String) {
+ if (actionBar != null) {
+ val text: Spannable = StringUtils.getColorSpan(title, context.resources.getColor(R.color.fontAppbar, null))
+
+ //bold the magenta from MagentaCLOUD title
+ if (title.contains(context.resources.getString(R.string.app_name))) {
+ val textToBold = context.resources.getString(R.string.splashScreenBold)
+ val indexStart = title.indexOf(textToBold)
+ val indexEnd = indexStart + textToBold.length
+ text.setSpan(StyleSpan(Typeface.BOLD), indexStart, indexEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
+ }
+ actionBar.title = text
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java
index ac256cd2375c..574d64c1cb5b 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java
+++ b/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java
@@ -252,7 +252,9 @@ public void networkAndServerConnectionListener(boolean isNetworkAndServerAvailab
refreshList();
}
} else {
- if (this instanceof AudioPlayerActivity) {
+ if (this instanceof AudioPlayerActivity
+ // NMC-4150 fix
+ || this instanceof PreviewMediaActivity) {
hideInfoBox();
} else {
showInfoBox(R.string.offline_mode);
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java
index 0b8c51755f78..b04f20eada09 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java
+++ b/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java
@@ -23,6 +23,7 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -1020,15 +1021,10 @@ private void setupActionBar() {
actionBar.setDisplayShowTitleEnabled(true);
if (getResources() == null) return;
- Drawable menuIcon = ResourcesCompat.getDrawable(getResources(),
- R.drawable.ic_arrow_back,
- null);
-
- if (menuIcon == null) return;
- viewThemeUtils.androidx.themeActionBar(this,
- actionBar,
- getString(R.string.actionbar_settings),
- menuIcon);
+ // custom color for back arrow for NMC
+ viewThemeUtils.files.themeActionBar(this, actionBar, getResources().getString(R.string.actionbar_settings));
+ // required for NMC
+ actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.bg_default, null)));
}
private void launchDavDroidLogin() {
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.kt
index a0df0673cf4c..24a326b6e50d 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.kt
@@ -121,7 +121,6 @@ class ShareActivity :
setupFileIcon(binding, file, user)
with(binding) {
shareFileName.text = getString(R.string.share_file, file.fileName)
- viewThemeUtils.platform.colorViewBackground(shareHeaderDivider)
shareFileSize.text = HumanReadableFormatter.formatBytes(file.fileLength)
}
}
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.kt
index d52539f636dc..9833e7167725 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.kt
@@ -26,7 +26,8 @@ import com.google.android.material.card.MaterialCardView
import com.google.android.material.textview.MaterialTextView
import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.client.di.Injectable
-import com.nextcloud.client.systembars.SystemBarBackgroundCallbacks
+import com.nmc.android.utils.DrawableThemeUtils
+import com.nmc.android.utils.ToolbarThemeUtils
import com.owncloud.android.R
import com.owncloud.android.datamodel.FileDataStorageManager
import com.owncloud.android.datamodel.OCFile
@@ -36,6 +37,7 @@ import com.owncloud.android.ui.activity.drawer.DrawerActivity
import com.owncloud.android.ui.fragment.OCFileListFragment
import com.owncloud.android.ui.fragment.SearchType
import com.owncloud.android.ui.navigation.model.ActionBarStyle
+import com.owncloud.android.utils.StringUtils
import com.owncloud.android.utils.theme.ThemeUtils
import com.owncloud.android.utils.theme.ViewThemeUtils
import javax.inject.Inject
@@ -60,7 +62,7 @@ abstract class ToolbarActivity :
private lateinit var defaultToolbar: RelativeLayout
private lateinit var homeSearchToolbar: LinearLayout
private lateinit var homeSearchContainer: MaterialCardView
-
+ private lateinit var mDefaultToolbarDivider: View
private var appBar: AppBarLayout? = null
var previewImageView: ImageView? = null
private set
@@ -134,13 +136,16 @@ abstract class ToolbarActivity :
searchText = findViewById(R.id.search_text)
switchAccountButton = findViewById(R.id.switch_account_button)
notificationButton = findViewById(R.id.notification_button)
+ mDefaultToolbarDivider = findViewById(R.id.default_toolbar_divider)
toolbarSpinner = findViewById(R.id.toolbar_spinner)
}
private fun themeToolbarViews() {
viewThemeUtils.run {
- material.themeToolbar(toolbar)
- material.colorToolbarOverflowIcon(toolbar)
+ // custom color for overflow icon required for NMC
+ toolbar.overflowIcon?.let { icon ->
+ DrawableThemeUtils.tintDrawable(icon, resources.getColor(R.color.fontAppbar, null))
+ }
platform.themeStatusBar(this@ToolbarActivity)
material.colorMaterialTextButton(switchAccountButton)
material.themeSearchCardView(homeSearchContainer)
@@ -194,7 +199,10 @@ abstract class ToolbarActivity :
fun setActionBarTitle(title: String?) {
val actionBar = supportActionBar ?: return
- title?.let { actionBar.title = it }
+ title?.let {
+ // custom styling for action bar title required for NMC
+ ToolbarThemeUtils.setColoredTitle(this, actionBar, it)
+ }
actionBar.setDisplayShowTitleEnabled(title != null)
}
@@ -203,8 +211,8 @@ abstract class ToolbarActivity :
fun updateToolbarSubtitle(subtitle: String) {
val actionBar = supportActionBar ?: return
- actionBar.subtitle = subtitle
- viewThemeUtils.androidx.themeActionBarSubtitle(this, actionBar)
+ // required for NMC
+ actionBar.subtitle = StringUtils.getColorSpan(subtitle, resources.getColor(R.color.fontAppbar, null))
}
fun clearToolbarSubtitle() {
@@ -229,27 +237,11 @@ abstract class ToolbarActivity :
private fun switchActionBar(style: ActionBarStyle) {
val appBar = appBar ?: return
- viewThemeUtils.material.themeToolbar(toolbar)
-
- when (style) {
- ActionBarStyle.Search -> {
- viewThemeUtils.platform.resetStatusBar(this)
- setAppBarStateListAnimator(appBar, R.animator.appbar_elevation_off)
- defaultToolbar.isVisible = false
- homeSearchToolbar.isVisible = true
- viewThemeUtils.material.themeSearchCardView(homeSearchContainer)
- viewThemeUtils.material.themeSearchBarText(searchText)
- }
-
- ActionBarStyle.Plain -> {
- setAppBarStateListAnimator(appBar, R.animator.appbar_elevation_on)
- viewThemeUtils.platform.themeStatusBar(this)
- defaultToolbar.isVisible = true
- homeSearchToolbar.isVisible = false
- }
- }
-
- SystemBarBackgroundCallbacks.apply(this, viewThemeUtils)
+ appBar.stateListAnimator = AnimatorInflater.loadStateListAnimator(appBar.context,
+ R.animator.appbar_elevation_on)
+ viewThemeUtils.platform.themeStatusBar(this)
+ defaultToolbar.visibility = View.VISIBLE
+ homeSearchToolbar.visibility = View.GONE
}
private fun setAppBarStateListAnimator(appBar: AppBarLayout, @AnimatorRes animatorId: Int) {
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/drawer/DrawerActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/drawer/DrawerActivity.kt
index 8f16eda75bee..42e134fbe2c1 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/drawer/DrawerActivity.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/drawer/DrawerActivity.kt
@@ -41,6 +41,8 @@ import com.nextcloud.utils.extensions.getSelectedMenuItemId
import com.nextcloud.utils.extensions.highlightNavigationView
import com.nextcloud.utils.extensions.setVisibleIf
import com.nextcloud.utils.mdm.MDMConfig
+import com.nmc.android.utils.DrawableThemeUtils
+import com.nmc.android.utils.NavigationViewThemeUtils
import com.owncloud.android.R
import com.owncloud.android.authentication.PassCodeManager
import com.owncloud.android.datamodel.ArbitraryDataProviderImpl
@@ -57,7 +59,6 @@ import com.owncloud.android.ui.activity.drawer.externallinks.DrawerExternalLinks
import com.owncloud.android.ui.activity.drawer.externallinks.ExternalLinkOpener
import com.owncloud.android.ui.activity.drawer.externallinks.ExternalLinksSynchronizer
import com.owncloud.android.ui.activity.drawer.fragment.DrawerFragmentFinder
-import com.owncloud.android.ui.activity.drawer.header.DrawerHeaderController
import com.owncloud.android.ui.activity.drawer.navigation.DrawerDeepLinkHandler
import com.owncloud.android.ui.activity.drawer.navigation.DrawerMenuFilter
import com.owncloud.android.ui.activity.drawer.navigation.DrawerMenuItemClickHandler
@@ -107,7 +108,6 @@ abstract class DrawerActivity :
private set
private var drawerLayout: DrawerLayout? = null
- private var navigationViewHeader: View? = null
private var pendingRunnable: Runnable? = null
private lateinit var externalLinksSynchronizer: ExternalLinksSynchronizer
@@ -116,7 +116,6 @@ abstract class DrawerActivity :
private val externalLinkOpener = ExternalLinkOpener(this)
private val externalLinksMenu by lazy { DrawerExternalLinksMenu(this, externalLinkOpener) }
private val quotaController by lazy { DrawerQuotaController(this, externalLinkOpener) }
- private val headerController by lazy { DrawerHeaderController(this, drawerNavigator) }
private val menuItemClickHandler by lazy { DrawerMenuItemClickHandler(this, drawerNavigator, externalLinksMenu) }
private val deepLinkHandler by lazy { DrawerDeepLinkHandler(this, drawerNavigator, menuItemClickHandler) }
@@ -238,9 +237,10 @@ abstract class DrawerActivity :
}
private fun setupDrawerNavigationView(navigationView: NavigationView, id: Int) {
- viewThemeUtils.files.colorNavigationView(navigationView)
- navigationViewHeader = navigationView.getHeaderView(0)
- updateHeader()
+ // NMC Customization: theme navigation view
+ drawerNavigationView?.let {
+ NavigationViewThemeUtils.colorNavigationView(this, it)
+ }
navigationView.setNavigationItemSelectedListener { menuItem ->
drawerLayout?.closeDrawers()
@@ -281,7 +281,14 @@ abstract class DrawerActivity :
toggle.isDrawerIndicatorEnabled = true
toggle.isDrawerSlideAnimationEnabled = true
ResourcesCompat.getDrawable(resources, R.drawable.ic_arrow_back, null)?.let { backArrow ->
- viewThemeUtils.platform.tintToolbarArrowDrawable(this, toggle, backArrow)
+ // custom color for back arrow required for NMC
+ toggle.setHomeAsUpIndicator(
+ DrawableThemeUtils.tintDrawable(
+ backArrow,
+ resources.getColor(R.color.fontAppbar, null)
+ )
+ )
+ toggle.drawerArrowDrawable.color = resources.getColor(R.color.fontAppbar, null)
}
}
@@ -290,11 +297,6 @@ abstract class DrawerActivity :
Handler(Looper.getMainLooper()).post(runnable)
pendingRunnable = null
}
-
- fun updateHeader() {
- val header = navigationViewHeader ?: return
- headerController.update(header)
- }
// endregion
// region Navigation
@@ -316,7 +318,8 @@ abstract class DrawerActivity :
fun getFragment(tag: String?, clazz: Class): Optional = fragmentFinder.getFragment(tag, clazz)
fun showBottomNavigationBar(show: Boolean) {
- bottomNavigationView.setVisibleIf(show)
+ // NMC Customization: always hide bottom bar
+ bottomNavigationView.setVisibleIf(false)
}
protected fun handleDeepLink(uri: Uri) = deepLinkHandler.handle(uri)
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/drawer/navigation/DrawerMenuFilter.kt b/app/src/main/java/com/owncloud/android/ui/activity/drawer/navigation/DrawerMenuFilter.kt
index 2abc4c4e6bc5..f8faa46e33ca 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/drawer/navigation/DrawerMenuFilter.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/drawer/navigation/DrawerMenuFilter.kt
@@ -17,7 +17,9 @@ object DrawerMenuFilter {
fun filter(menu: Menu, user: User, capability: OCCapability?, resources: Resources) {
capability?.let {
- DrawerMenuUtil.filterTrashbinMenuItem(menu, it)
+ // NMC: trashbin icon is depending on capability due to this it doesn't appear in some of the devices
+ // so removing the check as we need this option always
+ // DrawerMenuUtil.filterTrashbinMenuItem(menu, it)
DrawerMenuUtil.filterActivityMenuItem(menu, it)
DrawerMenuUtil.filterGroupfoldersMenuItem(menu, it)
DrawerMenuUtil.filterAssistantMenuItem(menu, it, resources)
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/drawer/navigation/DrawerMenuItemClickHandler.kt b/app/src/main/java/com/owncloud/android/ui/activity/drawer/navigation/DrawerMenuItemClickHandler.kt
index 0e0ef9cadf21..2daeb60ba67d 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/drawer/navigation/DrawerMenuItemClickHandler.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/drawer/navigation/DrawerMenuItemClickHandler.kt
@@ -15,6 +15,7 @@ import com.owncloud.android.ui.activity.drawer.DrawerActivity
import com.owncloud.android.ui.activity.drawer.externallinks.DrawerExternalLinksMenu
import com.owncloud.android.ui.events.ChangeMenuEvent
import com.owncloud.android.ui.navigation.NavigatorScreen
+import com.nmc.android.marketTracking.MoEngageSdkUtils
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
import org.greenrobot.eventbus.EventBus
@@ -39,6 +40,12 @@ class DrawerMenuItemClickHandler(
R.id.nav_recent_files -> navigator.openRecentFiles()
R.id.nav_assistant -> navigator.openAssistant()
R.id.nav_groupfolders -> navigator.openGroupfolders()
+ R.id.nav_notifications -> {
+ navigator.pushFragment(NavigatorScreen.Notifications)
+ // NMC: track notification screen event
+ MoEngageSdkUtils.trackNotificationsScreenEvent(activity)
+ }
+
else -> onOtherNavigationItemClicked(menuItem)
}
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/drawer/quota/DrawerQuotaController.kt b/app/src/main/java/com/owncloud/android/ui/activity/drawer/quota/DrawerQuotaController.kt
index a8384d88ef1c..33421bdea160 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/drawer/quota/DrawerQuotaController.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/drawer/quota/DrawerQuotaController.kt
@@ -10,13 +10,13 @@ import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.annotation.IdRes
+import androidx.appcompat.widget.AppCompatTextView
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.google.android.material.navigation.NavigationView
import com.google.android.material.progressindicator.LinearProgressIndicator
-import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.utils.GlideHelper
-import com.nextcloud.utils.HumanReadableFormatter
+import com.nextcloud.utils.HumanReadableFormatter.formatBytes
import com.nextcloud.utils.mdm.MDMConfig
import com.owncloud.android.R
import com.owncloud.android.lib.common.ExternalLink
@@ -25,7 +25,12 @@ import com.owncloud.android.lib.common.Quota
import com.owncloud.android.lib.resources.users.GetUserInfoRemoteOperation
import com.owncloud.android.ui.activity.drawer.DrawerActivity
import com.owncloud.android.ui.activity.drawer.externallinks.ExternalLinkOpener
+import com.owncloud.android.utils.StringUtils
import kotlinx.coroutines.launch
+import java.lang.String
+import kotlin.Boolean
+import kotlin.Int
+import kotlin.let
import kotlin.math.ceil
import kotlin.math.roundToInt
@@ -36,7 +41,7 @@ class DrawerQuotaController(private val activity: DrawerActivity, private val ex
private var quotaProgressBar: LinearProgressIndicator? = null
private var quotaTextPercentage: TextView? = null
private var quotaTextLink: TextView? = null
-
+ private var mQuotaTextUsage: AppCompatTextView? = null
private val Quota.isDisplayable: Boolean
get() = quota > 0 ||
quota == GetUserInfoRemoteOperation.SPACE_UNLIMITED ||
@@ -46,13 +51,13 @@ class DrawerQuotaController(private val activity: DrawerActivity, private val ex
quotaView = findQuotaViewById(navigationView, R.id.drawer_quota)
quotaProgressBar = findQuotaViewById(navigationView, R.id.drawer_quota_ProgressBar)
quotaTextPercentage = findQuotaViewById(navigationView, R.id.drawer_quota_percentage)
+ mQuotaTextUsage = findQuotaViewById(navigationView, R.id.drawer_quota_usage)
quotaTextLink = findQuotaViewById(navigationView, R.id.drawer_quota_link)
quotaProgressBar?.let {
- activity.viewThemeUtils.material.colorProgressBar(it, ColorRole.PRIMARY)
+ activity.viewThemeUtils.material.colorProgressBar(it, activity.resources.getColor(R.color.primary, null))
it.trackStopIndicatorSize = 0
}
- quotaView?.let { activity.viewThemeUtils.platform.colorViewBackground(it) }
}
fun fetchAndDisplay() {
@@ -84,24 +89,28 @@ class DrawerQuotaController(private val activity: DrawerActivity, private val ex
}
private fun findQuotaViewById(navigationView: NavigationView, @IdRes id: Int): T? =
- navigationView.getHeaderView(0)?.findViewById(id) ?: activity.findViewById(id)
+ navigationView.findViewById(id) ?: activity.findViewById(id)
private fun showQuotaInformation(quota: Quota) {
- quotaTextPercentage?.text = if (quota.quota == GetUserInfoRemoteOperation.SPACE_UNLIMITED) {
- activity.getString(R.string.drawer_quota_unlimited, HumanReadableFormatter.formatBytes(quota.used))
- } else {
- activity.getString(
- R.string.drawer_quota,
- HumanReadableFormatter.formatBytes(quota.used),
- HumanReadableFormatter.formatBytes(quota.total)
- )
- }
+ // NMC: custom text and formatting
+ val usageText = String.format(
+ activity.getString(R.string.drawer_quota_usage),
+ formatBytes(quota.used),
+ formatBytes(quota.total)
+ )
+
+ mQuotaTextUsage?.text = StringUtils.makeTextBold(usageText, formatBytes(quota.used))
+ quotaTextPercentage?.text = String.format(
+ activity.getString(R.string.drawer_quota_percentage), quota.relative)
val relative = ceil(quota.relative).toInt()
quotaProgressBar?.let { progressBar ->
progressBar.progress = relative
if (relative < RELATIVE_THRESHOLD_WARNING) {
- activity.viewThemeUtils.material.colorProgressBar(progressBar, ColorRole.PRIMARY)
+ activity.viewThemeUtils.material.colorProgressBar(
+ progressBar,
+ activity.resources.getColor(R.color.primary, null)
+ )
} else {
activity.viewThemeUtils.material.colorProgressBar(
progressBar,
diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/SortingOrderDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/SortingOrderDialogFragment.kt
index b788e2ad6e23..26fac356386a 100644
--- a/app/src/main/java/com/owncloud/android/ui/dialog/SortingOrderDialogFragment.kt
+++ b/app/src/main/java/com/owncloud/android/ui/dialog/SortingOrderDialogFragment.kt
@@ -65,11 +65,12 @@ class SortingOrderDialogFragment :
view.tag = sortOrder
view.let {
it.setOnClickListener(OnSortOrderClickListener())
- viewThemeUtils?.material?.colorMaterialButtonPrimaryBorderless(it)
+ // NMC Customization
+ it.setTextColor(resources.getColor(R.color.standard_grey, null))
+ it.setIconTintResource(R.color.standard_grey)
}
}
- viewThemeUtils?.material?.colorMaterialButtonPrimaryTonal(binding.cancel)
binding.cancel.setOnClickListener { dismiss() }
}
diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.kt
index 5ed2c45e47a4..b304501f3e2c 100644
--- a/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.kt
+++ b/app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.kt
@@ -323,14 +323,7 @@ open class ExtendedListFragment :
}
mSortButton = requireActivity().findViewById(R.id.sort_button)
- mSortButton?.let {
- viewThemeUtils.material.colorMaterialTextButton(it)
- }
-
mSwitchGridViewButton = requireActivity().findViewById(R.id.switch_grid_view_button)
- mSwitchGridViewButton?.let {
- viewThemeUtils.material.colorMaterialTextButton(it)
- }
return v
}
diff --git a/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaActivity.kt b/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaActivity.kt
index 154248d0014a..649fec16acb0 100644
--- a/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaActivity.kt
+++ b/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaActivity.kt
@@ -18,7 +18,6 @@ import android.view.MenuItem
import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.core.content.ContextCompat
-import androidx.core.graphics.drawable.toDrawable
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
@@ -66,6 +65,7 @@ import com.owncloud.android.ui.fragment.GalleryFragment
import com.owncloud.android.ui.fragment.GalleryFragmentBottomSheetDialog.MediaState
import com.owncloud.android.ui.navigation.animator.NavigationAnimator
import com.owncloud.android.ui.navigation.animator.SharedElementTransition
+import com.owncloud.android.ui.navigation.model.ActionBarStyle
import com.owncloud.android.ui.preview.model.PreviewImageActivityState
import com.owncloud.android.utils.MimeTypeUtil
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
@@ -135,6 +135,7 @@ class PreviewMediaActivity :
}
setContentView(R.layout.preview_image_activity)
+ showActionBar(ActionBarStyle.Plain)
setupDrawer(menuItemId)
@@ -145,7 +146,6 @@ class PreviewMediaActivity :
updateActionBarTitleAndHomeButton(chosenFile)
viewThemeUtils.files.setWhiteBackButton(this, it)
it.setDisplayHomeAsUpEnabled(true)
- it.setBackgroundDrawable(R.color.black.toDrawable())
}
setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
@@ -155,7 +155,9 @@ class PreviewMediaActivity :
screenState = PreviewImageActivityState.WaitingForBinder
}
- applyDisplayCutOutTopPadding()
+ // NMC-4604 fix: we don't need to call this function
+ // as we using toolbar_standard directly inside the xml and no padding is required
+ // applyDisplayCutOutTopPadding()
handleBackPress()
@@ -402,7 +404,8 @@ class PreviewMediaActivity :
return
}
- updateActionBarTitle(file.fileName)
+ // NMC Customization
+ updateActionBarTitleAndHomeButton(getFile())
if (pagerNeedsRebuild) {
savedPosition = null
@@ -614,15 +617,12 @@ class PreviewMediaActivity :
}
if (currentFile != null) {
- updateActionBarTitle(currentFile.fileName)
+ // NMC Customization
+ updateActionBarTitleAndHomeButton(currentFile)
setDrawerIndicatorEnabled(false)
}
}
- private fun updateActionBarTitle(title: String?) {
- supportActionBar?.title = title
- }
-
/**
* Class waiting for broadcast events from the [FileDownloadWorker] service.
*
diff --git a/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaFragment.kt
index 8306217a58e4..858d0e4266aa 100644
--- a/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaFragment.kt
+++ b/app/src/main/java/com/owncloud/android/ui/preview/media/PreviewMediaFragment.kt
@@ -143,8 +143,9 @@ class PreviewMediaFragment :
binding = PreviewImageFragmentBinding.inflate(inflater, container, false)
binding.image.visibility = View.GONE
- binding.root.setOnClickListener { togglePreviewImageFullScreen() }
- binding.image.setOnClickListener { togglePreviewImageFullScreen() }
+ // NMC: no full screen for image preview
+ // binding.root.setOnClickListener { togglePreviewImageFullScreen() }
+ // binding.image.setOnClickListener { togglePreviewImageFullScreen() }
checkLivePhotoAvailability()
setMultiListLoadingMessage()
diff --git a/app/src/main/java/com/owncloud/android/utils/StringUtils.java b/app/src/main/java/com/owncloud/android/utils/StringUtils.java
index d4339f0003eb..637b6c4ea15d 100644
--- a/app/src/main/java/com/owncloud/android/utils/StringUtils.java
+++ b/app/src/main/java/com/owncloud/android/utils/StringUtils.java
@@ -7,7 +7,14 @@
*/
package com.owncloud.android.utils;
+
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.style.ForegroundColorSpan;
+
import java.util.Locale;
+import android.graphics.Typeface;
+import android.text.style.StyleSpan;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -55,6 +62,15 @@ String searchAndColor(@Nullable String text, @Nullable String searchText,
}
}
+ public static Spannable getColorSpan(@NonNull String title, @ColorInt int color) {
+ Spannable text = new SpannableString(title);
+ text.setSpan(new ForegroundColorSpan(color),
+ 0,
+ text.length(),
+ Spannable.SPAN_INCLUSIVE_INCLUSIVE);
+ return text;
+ }
+
public static
@NonNull
String removePrefix(@NonNull String s, @NonNull String prefix) {
@@ -63,4 +79,19 @@ String removePrefix(@NonNull String s, @NonNull String prefix) {
}
return s;
}
+
+ /**
+ * make the passed text bold
+ *
+ * @param fullText actual text
+ * @param textToBold to be bold
+ * @return
+ */
+ public static Spannable makeTextBold(String fullText, String textToBold) {
+ Spannable spannable = new SpannableString(fullText);
+ int indexStart = fullText.indexOf(textToBold);
+ int indexEnd = indexStart + textToBold.length();
+ spannable.setSpan(new StyleSpan(Typeface.BOLD), indexStart, indexEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ return spannable;
+ }
}
diff --git a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt
index 5b2c6701e078..b357b2aebee5 100644
--- a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt
+++ b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt
@@ -38,7 +38,9 @@ import com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils
import com.nextcloud.android.common.ui.theme.utils.AndroidXViewThemeUtils
import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.android.common.ui.util.buildColorStateList
+import com.nmc.android.utils.ToolbarThemeUtils
import com.nextcloud.utils.view.FastScrollPopupBackground
+import com.nmc.android.utils.DrawableThemeUtils
import com.owncloud.android.R
import com.owncloud.android.lib.common.utils.Log_OC
import com.owncloud.android.lib.resources.shares.ShareType
@@ -126,7 +128,11 @@ class FilesSpecificViewThemeUtils @Inject constructor(
@JvmOverloads
fun themeActionBar(context: Context, actionBar: ActionBar, title: String, isMenu: Boolean = false) {
- androidXViewThemeUtils.themeActionBar(context, actionBar, title, getHomeAsUpDrawable(context, isMenu))
+ //custom styling for action bar title required for NMC
+ ToolbarThemeUtils.setColoredTitle(context, actionBar, title)
+
+ //custom color for back arrow for NMC
+ themeActionBar(context, actionBar, isMenu)
}
@JvmOverloads
@@ -136,7 +142,13 @@ class FilesSpecificViewThemeUtils @Inject constructor(
@JvmOverloads
fun themeActionBar(context: Context, actionBar: ActionBar, isMenu: Boolean = false) {
- androidXViewThemeUtils.themeActionBar(context, actionBar, getHomeAsUpDrawable(context, isMenu))
+ // custom color for back arrow for NMC
+ actionBar.setHomeAsUpIndicator(
+ DrawableThemeUtils.tintDrawable(
+ getHomeAsUpDrawable(context, isMenu),
+ context.resources.getColor(R.color.fontAppbar, null)
+ )
+ )
}
fun themeTemplateCardView(view: MaterialCardView) {
diff --git a/app/src/main/res/drawable/ic_magentacloud_product_logo.xml b/app/src/main/res/drawable/ic_magentacloud_product_logo.xml
new file mode 100644
index 000000000000..287fc029a729
--- /dev/null
+++ b/app/src/main/res/drawable/ic_magentacloud_product_logo.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/menu_background_color_state.xml b/app/src/main/res/drawable/menu_background_color_state.xml
new file mode 100644
index 000000000000..1aee89b3ea28
--- /dev/null
+++ b/app/src/main/res/drawable/menu_background_color_state.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/nav_notifications.xml b/app/src/main/res/drawable/nav_notifications.xml
new file mode 100644
index 000000000000..6dfdde4bbdc3
--- /dev/null
+++ b/app/src/main/res/drawable/nav_notifications.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/app/src/main/res/layout/action_mode_close_layout.xml b/app/src/main/res/layout/action_mode_close_layout.xml
new file mode 100644
index 000000000000..36e355cb18c3
--- /dev/null
+++ b/app/src/main/res/layout/action_mode_close_layout.xml
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/drawer.xml b/app/src/main/res/layout/drawer.xml
index 733ffd26e694..6ecfa836e572 100644
--- a/app/src/main/res/layout/drawer.xml
+++ b/app/src/main/res/layout/drawer.xml
@@ -12,14 +12,13 @@
+
+
+
+
+ android:drawablePadding="@dimen/alternate_half_padding"
+ android:visibility="gone" />
@@ -59,9 +80,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawablePadding="@dimen/alternate_half_padding"
- android:fontFamily="sans-serif-medium"
+ android:paddingLeft="@dimen/standard_padding"
+ android:paddingRight="@dimen/standard_padding"
android:text="@string/drawer_quota"
- android:textColor="@color/drawer_text_color" />
+ android:textColor="@color/drawer_quota_txt_color"
+ android:textSize="@dimen/txt_size_14sp" />
diff --git a/app/src/main/res/layout/files.xml b/app/src/main/res/layout/files.xml
index 98af6d19fb14..68d247cc93bb 100644
--- a/app/src/main/res/layout/files.xml
+++ b/app/src/main/res/layout/files.xml
@@ -47,10 +47,10 @@
@@ -60,7 +60,7 @@
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_marginEnd="@dimen/standard_margin"
- android:layout_marginBottom="@dimen/floating_action_button_bottom_margin"
+ android:layout_marginBottom="@dimen/standard_margin"
android:contentDescription="@string/fab_label"
app:srcCompat="@drawable/ic_plus"
app:layout_behavior="com.nextcloud.ui.behavior.OnScrollBehavior"
diff --git a/app/src/main/res/layout/preview_image_activity.xml b/app/src/main/res/layout/preview_image_activity.xml
index 35746487f5f1..f53792ba5b84 100644
--- a/app/src/main/res/layout/preview_image_activity.xml
+++ b/app/src/main/res/layout/preview_image_activity.xml
@@ -10,17 +10,28 @@
~ SPDX-FileCopyrightText: 2013 David A. Velasco
~ SPDX-License-Identifier: GPL-2.0-only AND (AGPL-3.0-or-later OR GPL-2.0-only)
-->
-
-
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/sorting_order_fragment.xml b/app/src/main/res/layout/sorting_order_fragment.xml
index 3cb563d7c27a..49111cb471cc 100644
--- a/app/src/main/res/layout/sorting_order_fragment.xml
+++ b/app/src/main/res/layout/sorting_order_fragment.xml
@@ -88,6 +88,7 @@
@@ -61,11 +61,28 @@
android:layout_marginEnd="1dp"
android:contentDescription="@string/action_switch_grid_view"
app:cornerRadius="@dimen/button_corner_radius"
+ app:iconSize="24dp"
app:icon="@drawable/ic_view_module"
- app:iconTint="@color/fontAppbar"
+ app:iconTint="@color/icon_color"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
@@ -87,6 +104,7 @@
android:id="@+id/preview_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="@color/bg_default"
android:contentDescription="@string/preview_image_description"
android:scaleType="centerCrop" />
@@ -95,7 +113,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
- android:background="@color/appbar"
+ android:background="@color/bg_default"
android:theme="@style/Theme.ToolbarTheme"
tools:visibility="gone">
@@ -108,6 +126,14 @@
app:popupTheme="@style/Theme.AppCompat.DayNight.NoActionBar" />
+
+
+ android:title="@string/drawer_item_personal_files"
+ android:visible="false" />
+
+
+
+
+
+
+
+
+
+
+ android:visible="false"/>
+ android:title="@string/drawer_item_groupfolders"
+ android:visible="false" />
@@ -57,12 +97,8 @@
android:id="@+id/nav_activity"
android:icon="@drawable/selector_activity"
android:orderInCategory="1"
- android:title="@string/drawer_item_activities" />
-
+ android:title="@string/drawer_item_activities"
+ android:visible="false" />
-
+ android:title="@string/drawer_item_uploads_list"
+ android:visible="false" />
-
-
-
-
+
+
+
+ #FFFFFF
+ @color/grey_30
+ @color/grey_30
+ #CCCCCC
+ @color/grey_70
+ @color/grey_80
+ #2D2D2D
+ @color/grey_70
+ @color/grey_70
+
+
+ @color/grey_80
+ @color/grey_0
+
+
+ @color/grey_80
+ @color/grey_0
+
+
+ @color/grey_60
+ @color/grey_0
+ @color/grey_0
+ @color/grey_30
+ #FFFFFF
+ @color/grey_30
+ @color/grey_80
+ #FFFFFF
+
+
+ @color/grey_80
+ @color/grey_30
+ @color/grey_0
+
+
+ @color/grey_80
+ @color/grey_0
+ @color/grey_80
+
+
+ @color/grey_70
+ @color/grey_60
+
+
+ @color/grey_70
+ @color/grey_70
+
+
+ #FFFFFF
+ @color/grey_30
+ @color/grey_0
+ @color/grey_0
+ @color/grey_0
+ @color/grey_0
+ @color/grey_60
+ @color/grey_0
+ #FFFFFF
+ #7d94f9
+
+
+ #121212
+ @color/grey_0
+ @color/grey_80
+ @color/grey_80
+
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 19b3ce692520..ef13919a9f09 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -22,6 +22,11 @@
- @style/Widget.App.TextInputLayout
- @style/Nextcloud.Widget.PopupMenu
- @style/ThemeOverlay.App.BottomSheetDialog
+
+ - @color/primary
+
+ - @drawable/ic_arrow_back
+ - @drawable/ic_arrow_back
- @style/App.ActionMode
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 000000000000..43e80a31e3f2
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,33 @@
+
+
+ 4dp
+ 16dp
+ 24dp
+ 24dp
+ 6dp
+ 18sp
+ 15sp
+ 15dp
+ 56dp
+ 86dp
+ 80dp
+ 11sp
+ 30dp
+ 55dp
+ 258dp
+ 17sp
+ 20dp
+ 160dp
+ 50dp
+ 150dp
+ 55dp
+ 48dp
+ 48dp
+ 24dp
+ 26dp
+ 20sp
+ 145dp
+ 1dp
+ 13sp
+ 44dp
+
\ No newline at end of file
diff --git a/app/src/main/res/values/nmc_colors.xml b/app/src/main/res/values/nmc_colors.xml
new file mode 100644
index 000000000000..3aa33ccdf362
--- /dev/null
+++ b/app/src/main/res/values/nmc_colors.xml
@@ -0,0 +1,98 @@
+
+
+
+
+ #191919
+ @color/primary
+ #191919
+ #191919
+ @color/grey_30
+ @android:color/white
+ #FFFFFF
+ @color/grey_0
+ #CCCCCC
+ #77c4ff
+ #B3FFFFFF
+ @color/grey_10
+
+
+ #101010
+ #F2F2F2
+ #E5E5E5
+ #B2B2B2
+ #666666
+ #4C4C4C
+ #333333
+
+
+ @color/design_snackbar_background_color
+ @color/white
+
+
+ #FFFFFF
+ #191919
+
+
+ @color/grey_0
+ #191919
+ @color/primary
+ #191919
+ @color/primary
+ @color/grey_30
+ @color/white
+ #191919
+
+
+ #FFFFFF
+ #191919
+ #191919
+
+
+ #FFFFFF
+ #191919
+ #FFFFFF
+
+
+ @color/primary
+ #F399C7
+ #FFFFFF
+ @color/grey_30
+ @color/grey_10
+ @color/grey_0
+
+
+ @color/primary
+ @color/grey_30
+ @color/grey_30
+ #CCCCCC
+
+
+ #191919
+ @color/grey_30
+ #191919
+ #191919
+ #191919
+ #191919
+ @color/grey_30
+ #191919
+ #000000
+ #191919
+ #F6E5EB
+ #C16F81
+ #0D39DF
+ #0099ff
+ #2238df
+
+
+ @color/grey_0
+ #191919
+ @color/grey_0
+ @color/grey_30
+ #77b6bb
+ #5077b6bb
+
\ No newline at end of file
diff --git a/app/src/main/res/values/nmc_navigation_styles.xml b/app/src/main/res/values/nmc_navigation_styles.xml
new file mode 100644
index 000000000000..5e2acf8f859e
--- /dev/null
+++ b/app/src/main/res/values/nmc_navigation_styles.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/setup.xml b/app/src/main/res/values/setup.xml
index a758c6884e77..3b0509f52aee 100644
--- a/app/src/main/res/values/setup.xml
+++ b/app/src/main/res/values/setup.xml
@@ -77,7 +77,7 @@
true
- false
+ true
true
@@ -110,7 +110,7 @@
- true
+ false
https://f-droid.org/repository/browse/?fdid=com.nextcloud.android.beta
https://download.nextcloud.com/android/dev/latest.apk
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 31901ff1e355..840675a0a322 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -157,6 +157,8 @@
Notifications
%1$s of %2$s used
%1$s used
+ %d %% Storage used
+ %1$s of %2$s
Close sidebar
Open sidebar
General
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index b01edd987c4e..2181b46d6067 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -31,6 +31,11 @@
- @style/FallbackDatePickerDialogTheme
- @color/bg_default
- @style/Widget.App.TextInputLayout
+
+ - @color/primary
+
+ - @drawable/ic_arrow_back
+ - @drawable/ic_arrow_back
- @dimen/dialogBorderRadius
@@ -51,6 +56,11 @@
- @style/FallbackDatePickerDialogTheme
- @color/bg_default
- @style/Widget.App.TextInputLayout
+
+ - @color/primary
+
+ - @drawable/ic_arrow_back
+ - @drawable/ic_arrow_back
- @dimen/dialogBorderRadius
@@ -288,7 +298,7 @@
- end
- @color/transparent
- - @color/drawer_active_item_background
+ - @color/text_color