Skip to content

Commit 95df4ce

Browse files
committed
List divider added for tablet and landscape mode.
NMC-2142: Upload file button text size configured.
1 parent 76a21c0 commit 95df4ce

12 files changed

Lines changed: 453 additions & 3 deletions

File tree

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/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;
@@ -55,6 +56,7 @@
5556
import java.io.File;
5657
import java.util.ArrayList;
5758
import java.util.List;
59+
import java.util.Locale;
5860

5961
import javax.inject.Inject;
6062

@@ -194,6 +196,19 @@ public void onCreate(Bundle savedInstanceState) {
194196
binding.uploadFilesBtnUpload.setOnClickListener(this);
195197
binding.uploadFilesBtnUpload.setEnabled(mLocalFolderPickerMode);
196198

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

199214
// 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;
@@ -44,11 +45,13 @@
4445
import com.owncloud.android.ui.adapter.UploadListAdapter;
4546
import com.owncloud.android.ui.decoration.MediaGridItemDecoration;
4647
import com.owncloud.android.utils.DisplayUtils;
48+
import com.owncloud.android.ui.decoration.SimpleListItemDividerDecoration;
4749
import com.owncloud.android.utils.FilesSyncHelper;
4850
import com.owncloud.android.utils.theme.ViewThemeUtils;
4951

5052
import javax.inject.Inject;
5153

54+
import androidx.annotation.NonNull;
5255
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
5356
import androidx.recyclerview.widget.GridLayoutManager;
5457
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
@@ -99,6 +102,8 @@ public class UploadListActivity extends FileActivity {
99102

100103
private UploadListLayoutBinding binding;
101104

105+
private SimpleListItemDividerDecoration simpleListItemDividerDecoration;
106+
102107
public static Intent createIntent(OCFile file, User user, Integer flag, Context context) {
103108
Intent intent = new Intent(context, UploadListActivity.class);
104109
if (flag != null) {
@@ -177,6 +182,8 @@ private void setupContent() {
177182
int spacing = getResources().getDimensionPixelSize(R.dimen.media_grid_spacing);
178183
binding.list.addItemDecoration(new MediaGridItemDecoration(spacing));
179184
binding.list.setLayoutManager(lm);
185+
simpleListItemDividerDecoration = new SimpleListItemDividerDecoration(this, R.drawable.item_divider, true);
186+
addListItemDecorator();
180187
binding.list.setAdapter(uploadListAdapter);
181188

182189
viewThemeUtils.androidx.themeSwipeRefreshLayout(swipeListRefreshLayout);
@@ -186,6 +193,23 @@ private void setupContent() {
186193
uploadListAdapter.loadUploadItemsFromDb();
187194
}
188195

196+
private void addListItemDecorator() {
197+
if (com.nmc.android.utils.DisplayUtils.isShowDividerForList()) {
198+
//check and remove divider item decorator if exist then add item decorator
199+
removeListDividerDecorator();
200+
binding.list.addItemDecoration(simpleListItemDividerDecoration);
201+
}
202+
}
203+
204+
/**
205+
* method to remove the divider item decorator
206+
*/
207+
private void removeListDividerDecorator() {
208+
if (binding.list.getItemDecorationCount() > 0) {
209+
binding.list.removeItemDecoration(simpleListItemDividerDecoration);
210+
}
211+
}
212+
189213
private void loadItems() {
190214
uploadListAdapter.loadUploadItemsFromDb();
191215

@@ -373,4 +397,20 @@ public void onReceive(Context context, Intent intent) {
373397
});
374398
}
375399
}
400+
401+
@Override
402+
public void onConfigurationChanged(@NonNull Configuration newConfig) {
403+
super.onConfigurationChanged(newConfig);
404+
//this should only run when device is not tablet because we are adding dividers in tablet for both the
405+
// orientations
406+
if (!com.nmc.android.utils.DisplayUtils.isTablet()) {
407+
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
408+
//add the divider item decorator when orientation is landscape
409+
addListItemDecorator();
410+
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
411+
//remove the divider item decorator when orientation is portrait
412+
removeListDividerDecorator();
413+
}
414+
}
415+
}
376416
}

app/src/main/java/com/owncloud/android/ui/decoration/SimpleListItemDividerDecoration.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import android.util.DisplayMetrics;
1515
import android.view.View;
1616

17+
import androidx.core.content.ContextCompat;
1718
import androidx.recyclerview.widget.DividerItemDecoration;
1819
import androidx.recyclerview.widget.RecyclerView;
1920

@@ -25,7 +26,8 @@ public class SimpleListItemDividerDecoration extends DividerItemDecoration {
2526

2627
private final Rect bounds = new Rect();
2728
private Drawable divider;
28-
private int leftPadding;
29+
private int leftPadding = 0;
30+
private boolean hasFooter;
2931

3032
/**
3133
* Default divider will be used
@@ -38,6 +40,17 @@ public SimpleListItemDividerDecoration(Context context) {
3840
styledAttributes.recycle();
3941
}
4042

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+
4154
@Override
4255
public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
4356
canvas.save();
@@ -51,7 +64,12 @@ public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state)
5164
right = parent.getWidth();
5265
}
5366

54-
final int childCount = parent.getChildCount();
67+
int childCount = parent.getChildCount();
68+
69+
if (hasFooter) {
70+
childCount = childCount - 1;
71+
}
72+
5573
for (int i = 0; i < childCount; i++) {
5674
final View child = parent.getChildAt(i);
5775
parent.getDecoratedBoundsWithMargins(child, bounds);

0 commit comments

Comments
 (0)