Skip to content

Commit feeacc7

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
1 parent 0e3ec70 commit feeacc7

File tree

13 files changed

+544
-0
lines changed

13 files changed

+544
-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
@@ -48,6 +49,7 @@ import com.owncloud.android.utils.ErrorMessageAdapter
4849
import com.owncloud.android.utils.FileSortOrder
4950
import com.owncloud.android.utils.PathUtils
5051
import java.io.File
52+
import java.util.Locale
5153
import javax.inject.Inject
5254

5355
@Suppress("Detekt.TooManyFunctions")
@@ -473,6 +475,30 @@ open class FolderPickerActivity :
473475
OperationsService.ACTION_MOVE_FILE
474476
)
475477
}
478+
adjustButtonTexts()
479+
}
480+
}
481+
482+
// NMC-4239 fix
483+
// adjust button german texts in portrait mode
484+
private fun adjustButtonTexts(){
485+
if (!com.nmc.android.utils.DisplayUtils.isTablet() && !com.nmc.android.utils.DisplayUtils.isLandscapeOrientation()) {
486+
if (Locale.getDefault().language.equals(Locale.GERMAN.language)
487+
|| Locale.getDefault().language.equals(Locale.GERMANY.language)
488+
) {
489+
folderPickerBinding.folderPickerBtnCopy.setTextSize(
490+
TypedValue.COMPLEX_UNIT_PX,
491+
getResources().getDimension(R.dimen.txt_size_11sp)
492+
)
493+
folderPickerBinding.folderPickerBtnMove.setTextSize(
494+
TypedValue.COMPLEX_UNIT_PX,
495+
getResources().getDimension(R.dimen.txt_size_11sp)
496+
)
497+
folderPickerBinding.folderPickerBtnCancel.setTextSize(
498+
TypedValue.COMPLEX_UNIT_PX,
499+
getResources().getDimension(R.dimen.txt_size_11sp)
500+
);
501+
}
476502
}
477503
}
478504

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);
@@ -177,6 +184,23 @@ private void setupContent() {
177184
uploadListAdapter.loadUploadItemsFromDb();
178185
}
179186

187+
private void addListItemDecorator() {
188+
if (com.nmc.android.utils.DisplayUtils.isShowDividerForList()) {
189+
//check and remove divider item decorator if exist then add item decorator
190+
removeListDividerDecorator();
191+
binding.list.addItemDecoration(simpleListItemDividerDecoration);
192+
}
193+
}
194+
195+
/**
196+
* method to remove the divider item decorator
197+
*/
198+
private void removeListDividerDecorator() {
199+
if (binding.list.getItemDecorationCount() > 0) {
200+
binding.list.removeItemDecoration(simpleListItemDividerDecoration);
201+
}
202+
}
203+
180204
private void loadItems() {
181205
uploadListAdapter.loadUploadItemsFromDb();
182206

@@ -357,4 +381,20 @@ public void onReceive(Context context, Intent intent) {
357381
});
358382
}
359383
}
384+
385+
@Override
386+
public void onConfigurationChanged(@NonNull Configuration newConfig) {
387+
super.onConfigurationChanged(newConfig);
388+
//this should only run when device is not tablet because we are adding dividers in tablet for both the
389+
// orientations
390+
if (!com.nmc.android.utils.DisplayUtils.isTablet()) {
391+
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
392+
//add the divider item decorator when orientation is landscape
393+
addListItemDecorator();
394+
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
395+
//remove the divider item decorator when orientation is portrait
396+
removeListDividerDecorator();
397+
}
398+
}
399+
}
360400
}
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)