mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-06 06:15:12 +00:00
Theme RemoteFileBrowser
Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
This commit is contained in:
parent
a4c01978a8
commit
49f9e0ffc4
@ -44,6 +44,7 @@ import com.nextcloud.talk.remotefilebrowser.SelectionInterface
|
||||
import com.nextcloud.talk.remotefilebrowser.adapters.RemoteFileBrowserItemsAdapter
|
||||
import com.nextcloud.talk.remotefilebrowser.viewmodels.RemoteFileBrowserItemsViewModel
|
||||
import com.nextcloud.talk.ui.dialog.SortingOrderDialogFragment
|
||||
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
||||
import com.nextcloud.talk.utils.DisplayUtils
|
||||
import com.nextcloud.talk.utils.FileSortOrder
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_MIME_TYPE_FILTER
|
||||
@ -59,6 +60,9 @@ class RemoteFileBrowserActivity : AppCompatActivity(), SelectionInterface, Swipe
|
||||
@Inject
|
||||
lateinit var currentUserProvider: CurrentUserProviderNew
|
||||
|
||||
@Inject
|
||||
lateinit var viewThemeUtils: ViewThemeUtils
|
||||
|
||||
private lateinit var binding: ActivityRemoteFileBrowserBinding
|
||||
private lateinit var viewModel: RemoteFileBrowserItemsViewModel
|
||||
|
||||
@ -91,8 +95,7 @@ class RemoteFileBrowserActivity : AppCompatActivity(), SelectionInterface, Swipe
|
||||
initViewModel(mimeTypeSelectionFilter)
|
||||
|
||||
binding.swipeRefreshList.setOnRefreshListener(this)
|
||||
binding.swipeRefreshList.setColorSchemeResources(R.color.colorPrimary)
|
||||
binding.swipeRefreshList.setProgressBackgroundColorSchemeResource(R.color.refresh_spinner_background)
|
||||
viewThemeUtils.themeSwipeRefreshLayout(binding.swipeRefreshList)
|
||||
|
||||
binding.pathNavigationBackButton.setOnClickListener { viewModel.navigateUp() }
|
||||
binding.sortButton.setOnClickListener { changeSorting() }
|
||||
@ -160,6 +163,7 @@ class RemoteFileBrowserActivity : AppCompatActivity(), SelectionInterface, Swipe
|
||||
mimeTypeSelectionFilter = mimeTypeSelectionFilter,
|
||||
user = currentUserProvider.currentUser.blockingGet(),
|
||||
selectionInterface = this,
|
||||
viewThemeUtils = viewThemeUtils,
|
||||
onItemClicked = viewModel::onItemClicked
|
||||
)
|
||||
adapter.items = remoteFileBrowserItems
|
||||
|
@ -28,19 +28,20 @@ import com.nextcloud.talk.data.user.model.User
|
||||
import com.nextcloud.talk.databinding.RvItemBrowserFileBinding
|
||||
import com.nextcloud.talk.remotefilebrowser.SelectionInterface
|
||||
import com.nextcloud.talk.remotefilebrowser.model.RemoteFileBrowserItem
|
||||
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
||||
|
||||
class RemoteFileBrowserItemsAdapter(
|
||||
private val showGrid: Boolean = false,
|
||||
private val mimeTypeSelectionFilter: String? = null,
|
||||
private val user: User,
|
||||
private val selectionInterface: SelectionInterface,
|
||||
private val viewThemeUtils: ViewThemeUtils,
|
||||
private val onItemClicked: (RemoteFileBrowserItem) -> Unit
|
||||
) : RecyclerView.Adapter<RemoteFileBrowserItemsViewHolder>() {
|
||||
|
||||
var items: List<RemoteFileBrowserItem> = emptyList()
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RemoteFileBrowserItemsViewHolder {
|
||||
|
||||
return if (showGrid) {
|
||||
RemoteFileBrowserItemsListViewHolder(
|
||||
RvItemBrowserFileBinding.inflate(
|
||||
@ -50,7 +51,8 @@ class RemoteFileBrowserItemsAdapter(
|
||||
),
|
||||
mimeTypeSelectionFilter,
|
||||
user,
|
||||
selectionInterface
|
||||
selectionInterface,
|
||||
viewThemeUtils
|
||||
) {
|
||||
onItemClicked(items[it])
|
||||
}
|
||||
@ -63,7 +65,8 @@ class RemoteFileBrowserItemsAdapter(
|
||||
),
|
||||
mimeTypeSelectionFilter,
|
||||
user,
|
||||
selectionInterface
|
||||
selectionInterface,
|
||||
viewThemeUtils
|
||||
) {
|
||||
onItemClicked(items[it])
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
package com.nextcloud.talk.remotefilebrowser.adapters
|
||||
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.text.format.Formatter
|
||||
import android.view.View
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
@ -33,6 +34,7 @@ import com.nextcloud.talk.data.user.model.User
|
||||
import com.nextcloud.talk.databinding.RvItemBrowserFileBinding
|
||||
import com.nextcloud.talk.remotefilebrowser.SelectionInterface
|
||||
import com.nextcloud.talk.remotefilebrowser.model.RemoteFileBrowserItem
|
||||
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.DateUtils.getLocalDateTimeStringFromTimestamp
|
||||
import com.nextcloud.talk.utils.DisplayUtils
|
||||
@ -45,6 +47,7 @@ class RemoteFileBrowserItemsListViewHolder(
|
||||
mimeTypeSelectionFilter: String?,
|
||||
currentUser: User,
|
||||
selectionInterface: SelectionInterface,
|
||||
private val viewThemeUtils: ViewThemeUtils,
|
||||
onItemClicked: (Int) -> Unit
|
||||
) : RemoteFileBrowserItemsViewHolder(binding, mimeTypeSelectionFilter, currentUser, selectionInterface) {
|
||||
|
||||
@ -66,7 +69,6 @@ class RemoteFileBrowserItemsListViewHolder(
|
||||
}
|
||||
|
||||
override fun onBind(item: RemoteFileBrowserItem) {
|
||||
|
||||
super.onBind(item)
|
||||
|
||||
binding.fileIcon.controller = null
|
||||
@ -99,9 +101,7 @@ class RemoteFileBrowserItemsListViewHolder(
|
||||
binding.fileIcon
|
||||
.hierarchy
|
||||
.setPlaceholderImage(
|
||||
AppCompatResources.getDrawable(
|
||||
binding.fileIcon.context, getDrawableResourceIdForMimeType(item.mimeType)
|
||||
)
|
||||
getPlaceholderImage(item)
|
||||
)
|
||||
|
||||
if (item.hasPreview) {
|
||||
@ -129,9 +129,23 @@ class RemoteFileBrowserItemsListViewHolder(
|
||||
binding.selectFileCheckbox.isChecked = selectionInterface.isPathSelected(item.path!!)
|
||||
}
|
||||
|
||||
private fun getPlaceholderImage(item: RemoteFileBrowserItem): Drawable? {
|
||||
val drawableResourceId = getDrawableResourceIdForMimeType(item.mimeType)
|
||||
val context = binding.fileIcon.context
|
||||
val drawable = AppCompatResources.getDrawable(
|
||||
context,
|
||||
drawableResourceId
|
||||
)
|
||||
if (drawable != null && THEMEABLE_PLACEHOLDER_IDS.contains(drawableResourceId)) {
|
||||
viewThemeUtils.colorDrawable(context, drawable)
|
||||
}
|
||||
return drawable
|
||||
}
|
||||
|
||||
private fun setSelectability() {
|
||||
if (selectable) {
|
||||
binding.selectFileCheckbox.visibility = View.VISIBLE
|
||||
viewThemeUtils.themeCheckbox(binding.selectFileCheckbox)
|
||||
} else {
|
||||
binding.selectFileCheckbox.visibility = View.GONE
|
||||
}
|
||||
@ -150,5 +164,9 @@ class RemoteFileBrowserItemsListViewHolder(
|
||||
companion object {
|
||||
private const val DISABLED_ALPHA: Float = 0.38f
|
||||
private const val ENABLED_ALPHA: Float = 1.0f
|
||||
private val THEMEABLE_PLACEHOLDER_IDS = listOf(
|
||||
R.drawable.ic_mimetype_package_x_generic,
|
||||
R.drawable.ic_mimetype_folder
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -33,9 +33,9 @@ import android.widget.TextView;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.nextcloud.talk.R;
|
||||
import com.nextcloud.talk.application.NextcloudTalkApplication;
|
||||
import com.nextcloud.talk.databinding.SortingOrderFragmentBinding;
|
||||
import com.nextcloud.talk.ui.theme.ViewThemeUtils;
|
||||
import com.nextcloud.talk.utils.FileSortOrder;
|
||||
import com.nextcloud.talk.utils.preferences.AppPreferences;
|
||||
|
||||
@ -46,7 +46,6 @@ import javax.inject.Inject;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import autodagger.AutoInjector;
|
||||
import kotlin.jvm.JvmField;
|
||||
|
||||
/**
|
||||
* Dialog to show and choose the sorting order for the file listing.
|
||||
@ -60,9 +59,11 @@ public class SortingOrderDialogFragment extends DialogFragment implements View.O
|
||||
private static final String KEY_SORT_ORDER = "SORT_ORDER";
|
||||
|
||||
@Inject
|
||||
@JvmField
|
||||
AppPreferences appPreferences;
|
||||
|
||||
@Inject
|
||||
ViewThemeUtils viewThemeUtils;
|
||||
|
||||
private SortingOrderFragmentBinding binding;
|
||||
private View dialogView;
|
||||
|
||||
@ -119,7 +120,7 @@ public class SortingOrderDialogFragment extends DialogFragment implements View.O
|
||||
* find all relevant UI elements and set their values.
|
||||
*/
|
||||
private void setupDialogElements() {
|
||||
binding.cancel.setTextColor(getResources().getColor(R.color.colorPrimary));
|
||||
viewThemeUtils.colorMaterialButtonText(binding.cancel);
|
||||
|
||||
taggedViews = new View[12];
|
||||
taggedViews[0] = binding.sortByNameAscending;
|
||||
@ -154,18 +155,17 @@ public class SortingOrderDialogFragment extends DialogFragment implements View.O
|
||||
* tints the icon reflecting the actual sorting choice in the apps primary color.
|
||||
*/
|
||||
private void setupActiveOrderSelection() {
|
||||
final int color = getResources().getColor(R.color.colorPrimary);
|
||||
Log.i("SortOrder", "currentSortOrderName="+currentSortOrderName);
|
||||
Log.i("SortOrder", "currentSortOrderName=" + currentSortOrderName);
|
||||
for (View view : taggedViews) {
|
||||
Log.i("SortOrder", ((FileSortOrder) view.getTag()).getName());
|
||||
if (!((FileSortOrder) view.getTag()).getName().equals(currentSortOrderName)) {
|
||||
continue;
|
||||
}
|
||||
if (view instanceof MaterialButton) {
|
||||
((MaterialButton) view).setIconTintResource(R.color.colorPrimary);
|
||||
viewThemeUtils.colorMaterialButtonText((MaterialButton) view);
|
||||
}
|
||||
if (view instanceof TextView) {
|
||||
((TextView) view).setTextColor(color);
|
||||
viewThemeUtils.colorTextViewElement((TextView) view);
|
||||
((TextView) view).setTypeface(Typeface.DEFAULT_BOLD);
|
||||
}
|
||||
}
|
||||
|
@ -25,12 +25,15 @@ import android.content.Context
|
||||
import android.content.res.ColorStateList
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.view.View
|
||||
import android.widget.CheckBox
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.widget.SwitchCompat
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.core.view.children
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
import com.google.android.material.button.MaterialButton
|
||||
import com.google.android.material.card.MaterialCardView
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
@ -106,6 +109,7 @@ class ViewThemeUtils @Inject constructor(val theme: ServerTheme) {
|
||||
|
||||
fun colorMaterialButtonText(button: MaterialButton) {
|
||||
colorTextViewElement(button)
|
||||
button.iconTint = ColorStateList.valueOf(getElementColor(button.context))
|
||||
}
|
||||
|
||||
fun colorMaterialButtonBackground(button: MaterialButton) {
|
||||
@ -166,4 +170,23 @@ class ViewThemeUtils @Inject constructor(val theme: ServerTheme) {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun colorDrawable(context: Context, drawable: Drawable) {
|
||||
val color = getElementColor(context)
|
||||
drawable.setTint(color)
|
||||
}
|
||||
|
||||
fun themeCheckbox(checkbox: CheckBox) {
|
||||
withElementColor(checkbox) { color ->
|
||||
checkbox.setTextColor(color)
|
||||
checkbox.buttonTintList = ColorStateList.valueOf(color)
|
||||
}
|
||||
}
|
||||
|
||||
fun themeSwipeRefreshLayout(swipeRefreshLayout: SwipeRefreshLayout) {
|
||||
withElementColor(swipeRefreshLayout) { color ->
|
||||
swipeRefreshLayout.setColorSchemeColors(color)
|
||||
swipeRefreshLayout.setProgressBackgroundColorSchemeResource(R.color.refresh_spinner_background)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user