Skip to content

Commit 41d6f17

Browse files
committed
List divider added for tablet and landscape mode.
NMC-2142: Upload file button text size configured. NMC-4239: FolderPickerActivity button text size configured NMC-4667 -- fix tablet grid span count
1 parent a1d3e20 commit 41d6f17

File tree

13 files changed

+538
-0
lines changed

13 files changed

+538
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.nmc.android.utils
2+
3+
import android.content.res.Configuration
4+
import com.owncloud.android.MainApp
5+
import com.owncloud.android.R
6+
7+
object DisplayUtils {
8+
9+
@JvmStatic
10+
fun isShowDividerForList(): Boolean = isTablet() || isLandscapeOrientation()
11+
12+
@JvmStatic
13+
fun isTablet(): Boolean = MainApp.getAppContext().resources.getBoolean(R.bool.isTablet)
14+
15+
@JvmStatic
16+
fun isLandscapeOrientation(): Boolean =
17+
MainApp.getAppContext().resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
18+
}

app/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import android.content.IntentFilter
1616
import android.content.res.Resources
1717
import android.os.Bundle
1818
import android.os.Parcelable
19+
import android.util.TypedValue
1920
import android.view.ActionMode
2021
import android.view.Menu
2122
import android.view.MenuItem
@@ -49,6 +50,7 @@ import com.owncloud.android.utils.ErrorMessageAdapter
4950
import com.owncloud.android.utils.FileSortOrder
5051
import com.owncloud.android.utils.PathUtils
5152
import java.io.File
53+
import java.util.Locale
5254
import javax.inject.Inject
5355

5456
@Suppress("Detekt.TooManyFunctions")
@@ -462,6 +464,30 @@ open class FolderPickerActivity :
462464
OperationsService.ACTION_MOVE_FILE
463465
)
464466
}
467+
adjustButtonTexts()
468+
}
469+
}
470+
471+
// NMC-4239 fix
472+
// adjust button german texts in portrait mode
473+
private fun adjustButtonTexts(){
474+
if (!com.nmc.android.utils.DisplayUtils.isTablet() && !com.nmc.android.utils.DisplayUtils.isLandscapeOrientation()) {
475+
if (Locale.getDefault().language.equals(Locale.GERMAN.language)
476+
|| Locale.getDefault().language.equals(Locale.GERMANY.language)
477+
) {
478+
folderPickerBinding.folderPickerBtnCopy.setTextSize(
479+
TypedValue.COMPLEX_UNIT_PX,
480+
getResources().getDimension(R.dimen.txt_size_11sp)
481+
)
482+
folderPickerBinding.folderPickerBtnMove.setTextSize(
483+
TypedValue.COMPLEX_UNIT_PX,
484+
getResources().getDimension(R.dimen.txt_size_11sp)
485+
)
486+
folderPickerBinding.folderPickerBtnCancel.setTextSize(
487+
TypedValue.COMPLEX_UNIT_PX,
488+
getResources().getDimension(R.dimen.txt_size_11sp)
489+
);
490+
}
465491
}
466492
}
467493

app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import android.content.pm.PackageManager;
2121
import android.os.Bundle;
2222
import android.os.Environment;
23+
import android.util.TypedValue;
2324
import android.view.Menu;
2425
import android.view.MenuItem;
2526
import android.view.View;
@@ -58,6 +59,7 @@
5859
import java.io.File;
5960
import java.util.ArrayList;
6061
import java.util.List;
62+
import java.util.Locale;
6163

6264
import javax.inject.Inject;
6365

@@ -200,6 +202,19 @@ public void onCreate(Bundle savedInstanceState) {
200202
binding.uploadFilesBtnUpload.setOnClickListener(this);
201203
binding.uploadFilesBtnUpload.setEnabled(mLocalFolderPickerMode);
202204

205+
//reduce the button text size so that the text doesn't go to next line
206+
//this should only happen for GERMAN language
207+
//and device should not be tablet and should be in portrait mode
208+
if (!com.nmc.android.utils.DisplayUtils.isTablet() && !com.nmc.android.utils.DisplayUtils.isLandscapeOrientation()) {
209+
if (Locale.getDefault().getLanguage().equals(Locale.GERMAN.getLanguage())
210+
|| Locale.getDefault().getLanguage().equals(Locale.GERMANY.getLanguage())) {
211+
binding.uploadFilesBtnUpload.setTextSize(TypedValue.COMPLEX_UNIT_PX,
212+
getResources().getDimensionPixelSize(R.dimen.txt_size_13sp));
213+
binding.uploadFilesBtnCancel.setTextSize(TypedValue.COMPLEX_UNIT_PX,
214+
getResources().getDimensionPixelSize(R.dimen.txt_size_13sp));
215+
}
216+
}
217+
203218
int localBehaviour = preferences.getUploaderBehaviour();
204219

205220
// file upload spinner

app/src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import android.content.Context;
1515
import android.content.Intent;
1616
import android.content.IntentFilter;
17+
import android.content.res.Configuration;
1718
import android.os.Bundle;
1819
import android.view.Menu;
1920
import android.view.MenuInflater;
@@ -42,10 +43,12 @@
4243
import com.owncloud.android.ui.adapter.UploadListAdapter;
4344
import com.owncloud.android.ui.decoration.MediaGridItemDecoration;
4445
import com.owncloud.android.utils.DisplayUtils;
46+
import com.owncloud.android.ui.decoration.SimpleListItemDividerDecoration;
4547
import com.owncloud.android.utils.FilesSyncHelper;
4648

4749
import javax.inject.Inject;
4850

51+
import androidx.annotation.NonNull;
4952
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
5053
import androidx.recyclerview.widget.GridLayoutManager;
5154
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
@@ -90,6 +93,8 @@ public class UploadListActivity extends FileActivity {
9093

9194
private UploadListLayoutBinding binding;
9295

96+
private SimpleListItemDividerDecoration simpleListItemDividerDecoration;
97+
9398
public static Intent createIntent(OCFile file, User user, Integer flag, Context context) {
9499
Intent intent = new Intent(context, UploadListActivity.class);
95100
if (flag != null) {
@@ -168,6 +173,8 @@ private void setupContent() {
168173
int spacing = getResources().getDimensionPixelSize(R.dimen.media_grid_spacing);
169174
binding.list.addItemDecoration(new MediaGridItemDecoration(spacing));
170175
binding.list.setLayoutManager(lm);
176+
simpleListItemDividerDecoration = new SimpleListItemDividerDecoration(this, R.drawable.item_divider, true);
177+
addListItemDecorator();
171178
binding.list.setAdapter(uploadListAdapter);
172179

173180
viewThemeUtils.androidx.themeSwipeRefreshLayout(swipeListRefreshLayout);
@@ -176,6 +183,23 @@ private void setupContent() {
176183
loadItems();
177184
}
178185

186+
private void addListItemDecorator() {
187+
if (com.nmc.android.utils.DisplayUtils.isShowDividerForList()) {
188+
//check and remove divider item decorator if exist then add item decorator
189+
removeListDividerDecorator();
190+
binding.list.addItemDecoration(simpleListItemDividerDecoration);
191+
}
192+
}
193+
194+
/**
195+
* method to remove the divider item decorator
196+
*/
197+
private void removeListDividerDecorator() {
198+
if (binding.list.getItemDecorationCount() > 0) {
199+
binding.list.removeItemDecoration(simpleListItemDividerDecoration);
200+
}
201+
}
202+
179203
private void loadItems() {
180204
swipeListRefreshLayout.setRefreshing(true);
181205
uploadListAdapter.loadUploadItemsFromDb(() -> swipeListRefreshLayout.setRefreshing(false));
@@ -346,4 +370,20 @@ public void onReceive(Context context, Intent intent) {
346370
throttler.run("update_upload_list", () -> uploadListAdapter.loadUploadItemsFromDb());
347371
}
348372
}
373+
374+
@Override
375+
public void onConfigurationChanged(@NonNull Configuration newConfig) {
376+
super.onConfigurationChanged(newConfig);
377+
//this should only run when device is not tablet because we are adding dividers in tablet for both the
378+
// orientations
379+
if (!com.nmc.android.utils.DisplayUtils.isTablet()) {
380+
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
381+
//add the divider item decorator when orientation is landscape
382+
addListItemDecorator();
383+
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
384+
//remove the divider item decorator when orientation is portrait
385+
removeListDividerDecorator();
386+
}
387+
}
388+
}
349389
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* Nextcloud - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2018 Andy Scherzinger <info@andy-scherzinger.de>
5+
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
6+
*/
7+
package com.owncloud.android.ui.decoration;
8+
9+
import android.content.Context;
10+
import android.content.res.TypedArray;
11+
import android.graphics.Canvas;
12+
import android.graphics.Rect;
13+
import android.graphics.drawable.Drawable;
14+
import android.util.DisplayMetrics;
15+
import android.view.View;
16+
17+
import androidx.core.content.ContextCompat;
18+
import androidx.recyclerview.widget.DividerItemDecoration;
19+
import androidx.recyclerview.widget.RecyclerView;
20+
21+
/**
22+
* DividerItemDecoration based on {@link DividerItemDecoration} adding a 72dp left padding.
23+
*/
24+
public class SimpleListItemDividerDecoration extends DividerItemDecoration {
25+
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
26+
27+
private final Rect bounds = new Rect();
28+
private Drawable divider;
29+
private int leftPadding = 0;
30+
private boolean hasFooter;
31+
32+
/**
33+
* Default divider will be used
34+
*/
35+
public SimpleListItemDividerDecoration(Context context) {
36+
super(context, DividerItemDecoration.VERTICAL);
37+
final TypedArray styledAttributes = context.obtainStyledAttributes(ATTRS);
38+
divider = styledAttributes.getDrawable(0);
39+
leftPadding = Math.round(72 * (context.getResources().getDisplayMetrics().xdpi / DisplayMetrics.DENSITY_DEFAULT));
40+
styledAttributes.recycle();
41+
}
42+
43+
/**
44+
* Custom divider will be used
45+
*
46+
* @param hasFooter if recyclerview has footer and no divider should be shown for footer then pass true else false
47+
*/
48+
public SimpleListItemDividerDecoration(Context context, int resId, boolean hasFooter) {
49+
super(context, DividerItemDecoration.VERTICAL);
50+
this.hasFooter = hasFooter;
51+
divider = ContextCompat.getDrawable(context, resId);
52+
}
53+
54+
@Override
55+
public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
56+
canvas.save();
57+
final int right;
58+
//noinspection AndroidLintNewApi - NewApi lint fails to handle overrides.
59+
if (parent.getClipToPadding()) {
60+
right = parent.getWidth() - parent.getPaddingRight();
61+
canvas.clipRect(leftPadding, parent.getPaddingTop(), right,
62+
parent.getHeight() - parent.getPaddingBottom());
63+
} else {
64+
right = parent.getWidth();
65+
}
66+
67+
int childCount = parent.getChildCount();
68+
69+
if (hasFooter) {
70+
childCount = childCount - 1;
71+
}
72+
73+
for (int i = 0; i < childCount; i++) {
74+
final View child = parent.getChildAt(i);
75+
parent.getDecoratedBoundsWithMargins(child, bounds);
76+
final int bottom = bounds.bottom + Math.round(child.getTranslationY());
77+
final int top = bottom - 1;
78+
79+
if (divider != null) {
80+
divider.setBounds(leftPadding, top, right, bottom);
81+
divider.draw(canvas);
82+
}
83+
}
84+
canvas.restore();
85+
}
86+
}

0 commit comments

Comments
 (0)