Skip to content

Commit a4cdc4d

Browse files
committed
More style options for text formatting of the chooser
1 parent f9c132d commit a4cdc4d

6 files changed

Lines changed: 247 additions & 15 deletions

File tree

AndroidFilePickerLightLibrary/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ android {
3131
defaultConfig {
3232
minSdkVersion 29
3333
targetSdkVersion 30
34-
versionCode 6
35-
versionName "1.0.5"
34+
versionCode 7
35+
versionName "1.0.6"
3636
}
3737

3838
compileOptions {

AndroidFilePickerLightLibrary/src/main/java/com/maxieds/androidfilepickerlightlibrary/CustomThemeBuilder.java

Lines changed: 205 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ This program (the AndroidFilePickerLight library) is free software written by
2020
import android.app.Activity;
2121
import android.content.res.ColorStateList;
2222
import android.graphics.PorterDuff;
23+
import android.graphics.Typeface;
2324
import android.graphics.drawable.Drawable;
2425
import android.graphics.drawable.GradientDrawable;
2526
import android.util.Log;
27+
import android.util.TypedValue;
2628
import android.view.View;
2729
import android.view.Window;
2830
import android.widget.Button;
@@ -63,7 +65,26 @@ public CustomThemeBuilder(Activity activityCtxRef) {
6365
toolbarIconResId = NULL_RESOURCE_ID;
6466
useToolbarGradients = false;
6567
navBtnIconResIdMap = new HashMap<FileChooserBuilder.DefaultNavFoldersType, Integer>();
68+
actionButtonTextSize = 14;
69+
actionButtonTypeface = Typeface.SERIF;
70+
actionButtonTextAllCaps = true;
71+
actionButtonTextStyle = Typeface.BOLD;
72+
navBtnPrefixTextSize = 17;
73+
navBtnPrefixTextAllCaps = true;
74+
navBtnPrefixTypeface = Typeface.SERIF;
75+
navBtnPrefixTextStyle = Typeface.BOLD;
76+
navBtnLongDisplayTextSize = 8;
77+
navBtnLongDisplayTextAllCaps = false;
78+
navBtnLongDisplayTypeface = Typeface.SERIF;
79+
navBtnLongDisplayTextStyle = Typeface.BOLD_ITALIC;
6680
fileIconResId = fileHiddenIconResId = folderIconResId = NULL_RESOURCE_ID;
81+
showFileItemMetaPropsVisible = true;
82+
fileItemMetaPropsTextSize = 8;
83+
fileItemMetaPropsTextStyle = Typeface.BOLD;
84+
fileItemPermsDisplayStyle = FileItemPermissionsDisplayStyle.PERMISSIONS_DISPLAY_OCTAL_STYLE;
85+
fileItemNameTextSize = 10;
86+
fileItemNameTypeface = Typeface.SERIF;
87+
fileItemNameTextStyle = Typeface.NORMAL;
6788
}
6889

6990
private int pickerTitleTextResId;
@@ -253,6 +274,81 @@ public static int getNavigationPathButtonIconDimension() {
253274
return 32; // pixels
254275
}
255276

277+
private int actionButtonTextSize;
278+
private Typeface actionButtonTypeface;
279+
private boolean actionButtonTextAllCaps;
280+
private int actionButtonTextStyle;
281+
282+
public CustomThemeBuilder setActionButtonTextSize(int textSize) {
283+
actionButtonTextSize = textSize;
284+
return this;
285+
}
286+
287+
public CustomThemeBuilder setActionButtonTypeface(Typeface textTypeFace) {
288+
actionButtonTypeface = textTypeFace;
289+
return this;
290+
}
291+
292+
public CustomThemeBuilder setActionButtonTextAllCaps(boolean allCaps) {
293+
actionButtonTextAllCaps = allCaps;
294+
return this;
295+
}
296+
297+
public CustomThemeBuilder setActionButtonTextStyle(int textStyle) {
298+
actionButtonTextStyle = textStyle;
299+
return this;
300+
}
301+
302+
private int navBtnPrefixTextSize;
303+
private boolean navBtnPrefixTextAllCaps;
304+
private Typeface navBtnPrefixTypeface;
305+
private int navBtnPrefixTextStyle;
306+
307+
public CustomThemeBuilder setNavButtonPrefixTextSize(int textSize) {
308+
navBtnPrefixTextSize = textSize;
309+
return this;
310+
}
311+
312+
public CustomThemeBuilder setNavButtonPrefixTextAllCaps(boolean allCaps) {
313+
navBtnPrefixTextAllCaps = allCaps;
314+
return this;
315+
}
316+
317+
public CustomThemeBuilder setNavButtonPrefixTypeface(Typeface textTypeFace) {
318+
navBtnPrefixTypeface = textTypeFace;
319+
return this;
320+
}
321+
322+
public CustomThemeBuilder setNavButtonPrefixTextStyle(int textStyle) {
323+
navBtnPrefixTextStyle = textStyle;
324+
return this;
325+
}
326+
327+
private int navBtnLongDisplayTextSize;
328+
private boolean navBtnLongDisplayTextAllCaps;
329+
private Typeface navBtnLongDisplayTypeface;
330+
private int navBtnLongDisplayTextStyle;
331+
332+
public CustomThemeBuilder setNavButtonLongDisplayTextSize(int textSize) {
333+
navBtnLongDisplayTextSize = textSize;
334+
return this;
335+
}
336+
337+
public CustomThemeBuilder setNavButtonLongDisplayTextAllCaps(boolean allCaps) {
338+
navBtnLongDisplayTextAllCaps = allCaps;
339+
return this;
340+
}
341+
342+
public CustomThemeBuilder setNavButtonLongDisplayTypeface(Typeface textTypeFace) {
343+
navBtnLongDisplayTypeface = textTypeFace;
344+
return this;
345+
}
346+
347+
public CustomThemeBuilder setNavButtonLongDisplayTextStyle(int textStyle) {
348+
navBtnLongDisplayTextStyle = textStyle;
349+
return this;
350+
}
351+
256352
public interface FileChooserActivityMainLayoutStylizer {
257353
boolean styleNavigationDisplayToolbar(Toolbar toolbar);
258354
boolean styleNavigationByPathsBaseDisplay(TextView tvNavBtnsDirective);
@@ -317,6 +413,18 @@ public FileChooserActivityMainLayoutStylizer createActivityMainLayoutStylizer()
317413
private final Drawable _globalBackBtnIcon = _globalBackBtnIconFinal;
318414
private final Drawable _doneActionBtnIcon = _doneActionBtnIconFinal;
319415
private final Drawable _cancelActionBtnIcon = _cancelActionBtnIconFinal;
416+
private final int _actionButtonTextSize = actionButtonTextSize;
417+
private final Typeface _actionButtonTypeface = actionButtonTypeface;
418+
private final boolean _actionButtonTextAllCaps = actionButtonTextAllCaps;
419+
private final int _actionButtonTextStyle = actionButtonTextStyle;
420+
private final int _navBtnPrefixTextSize = navBtnPrefixTextSize;
421+
private final boolean _navBtnPrefixTextAllCaps = navBtnPrefixTextAllCaps;
422+
private final Typeface _navBtnPrefixTypeface = navBtnPrefixTypeface;
423+
private final int _navBtnPrefixTextStyle = navBtnPrefixTextStyle;
424+
private final int _navBtnLongDisplayTextSize = navBtnLongDisplayTextSize;
425+
private final boolean _navBtnLongDisplayTextAllCaps = navBtnLongDisplayTextAllCaps;
426+
private final Typeface _navBtnLongDisplayTypeface = navBtnLongDisplayTypeface;
427+
private final int _navBtnLongDisplayTextStyle = navBtnLongDisplayTextStyle;
320428

321429
@Override
322430
public boolean styleNavigationDisplayToolbar(Toolbar toolbar) {
@@ -369,6 +477,9 @@ public boolean styleDefaultPathNavigationButtonLongText(TextView navBtnLongDesc)
369477
return false;
370478
}
371479
navBtnLongDesc.setTextColor(_themeColorScheme.getColorPrimaryDark());
480+
navBtnLongDesc.setTextSize(TypedValue.COMPLEX_UNIT_SP, _navBtnLongDisplayTextSize);
481+
navBtnLongDesc.setAllCaps(_navBtnLongDisplayTextAllCaps);
482+
navBtnLongDesc.setTypeface(_navBtnLongDisplayTypeface, _navBtnLongDisplayTextStyle);
372483
return true;
373484
}
374485

@@ -377,6 +488,9 @@ public boolean styleNavigationByPathsBaseDisplay(TextView tvNavBtnsDirective) {
377488
if(tvNavBtnsDirective == null) {
378489
return false;
379490
}
491+
tvNavBtnsDirective.setTextSize(TypedValue.COMPLEX_UNIT_SP, _navBtnPrefixTextSize);
492+
tvNavBtnsDirective.setAllCaps(_navBtnPrefixTextAllCaps);
493+
tvNavBtnsDirective.setTypeface(_navBtnPrefixTypeface, _navBtnPrefixTextStyle);
380494
tvNavBtnsDirective.setText(_navBarPrefixText);
381495
tvNavBtnsDirective.setTextColor(_themeColorScheme.getColorPrimaryDark());
382496
return true;
@@ -389,10 +503,16 @@ public boolean styleBottomNavigationActionButtons(Button doneActionBtn, Button c
389503
}
390504
int btnBGColor = _useToolbarGradients ? _themeColorScheme.getColorTransparent() : _themeColorScheme.getColorAccentLight();
391505
doneActionBtn.setBackgroundColor(btnBGColor);
506+
doneActionBtn.setTextSize(TypedValue.COMPLEX_UNIT_SP, _actionButtonTextSize);
507+
doneActionBtn.setTypeface(_actionButtonTypeface, _actionButtonTextStyle);
508+
doneActionBtn.setAllCaps(_actionButtonTextAllCaps);
392509
doneActionBtn.setTextColor(_themeColorScheme.getColorAccentMedium());
393510
doneActionBtn.setText(_doneActionBtnText);
394511
doneActionBtn.setCompoundDrawablesRelativeWithIntrinsicBounds(_doneActionBtnIcon, null, null, null);
395512
cancelActionBtn.setBackgroundColor(btnBGColor);
513+
cancelActionBtn.setTextSize(TypedValue.COMPLEX_UNIT_SP, _actionButtonTextSize);
514+
cancelActionBtn.setTypeface(_actionButtonTypeface, _actionButtonTextStyle);
515+
cancelActionBtn.setAllCaps(_actionButtonTextAllCaps);
396516
cancelActionBtn.setTextColor(_themeColorScheme.getColorAccentMedium());
397517
cancelActionBtn.setText(_cancelActionBtnText);
398518
cancelActionBtn.setCompoundDrawablesRelativeWithIntrinsicBounds(_cancelActionBtnIcon, null, null, null);
@@ -513,6 +633,55 @@ public static int getFileItemEntryIconDimension() {
513633
return 16; // pixels
514634
}
515635

636+
private boolean showFileItemMetaPropsVisible;
637+
private int fileItemMetaPropsTextSize;
638+
private int fileItemMetaPropsTextStyle;
639+
private FileItemPermissionsDisplayStyle fileItemPermsDisplayStyle;
640+
641+
public CustomThemeBuilder setFileItemMetaDataPropertiesTextVisible(boolean show) {
642+
showFileItemMetaPropsVisible = show;
643+
return this;
644+
}
645+
646+
public CustomThemeBuilder setFileItemMetaDataPropertiesTextSize(int textSize) {
647+
fileItemMetaPropsTextSize = textSize;
648+
return this;
649+
}
650+
651+
public CustomThemeBuilder setFileItemMetaDataPropertiesTextStyle(int textStyle) {
652+
fileItemMetaPropsTextStyle = textStyle;
653+
return this;
654+
}
655+
656+
public enum FileItemPermissionsDisplayStyle {
657+
PERMISSIONS_DISPLAY_OCTAL_STYLE,
658+
PERMISSIONS_DISPLAY_POSIX_STYLE;
659+
}
660+
661+
public CustomThemeBuilder setFileItemMetaDataPermissionsDisplayStyle(FileItemPermissionsDisplayStyle displayStyle) {
662+
fileItemPermsDisplayStyle = displayStyle;
663+
return this;
664+
}
665+
666+
private int fileItemNameTextSize;
667+
private Typeface fileItemNameTypeface;
668+
private int fileItemNameTextStyle;
669+
670+
public CustomThemeBuilder setFileItemNameTextSize(int textSize) {
671+
fileItemNameTextSize = textSize;
672+
return this;
673+
}
674+
675+
public CustomThemeBuilder setFileItemNameTypeface(Typeface textTypeface) {
676+
fileItemNameTypeface = textTypeface;
677+
return this;
678+
}
679+
680+
public CustomThemeBuilder setFileItemNameTextStyle(int textStyle) {
681+
fileItemNameTextStyle = textStyle;
682+
return this;
683+
}
684+
516685
public interface FileItemLayoutStylizer {
517686
FileChooserColorScheme getThemeColorizer();
518687
boolean setFileTypeIcon(ImageView imgBtn, DisplayTypes.FileType fileItemEntry);
@@ -531,15 +700,23 @@ public FileItemLayoutStylizer createFileItemLayoutStylizer() {
531700
final Drawable fileIconFinal = DisplayUtils.resolveDrawableFromResId(activityCtx, fileIconResId);
532701
final Drawable fileHiddenIconFinal = DisplayUtils.resolveDrawableFromResId(activityCtx, fileHiddenIconResId);
533702
final Drawable folderIconFinal = DisplayUtils.resolveDrawableFromResId(activityCtx, folderIconResId);
703+
534704
if(fileIconFinal == null || fileHiddenIconFinal == null || folderIconFinal == null) {
535705
return null;
536706
}
537707
return new FileItemLayoutStylizer() {
538708

709+
private final FileChooserColorScheme _themeColorScheme = themeColorScheme;
539710
private final Drawable _fileIcon = fileIconFinal;
540711
private final Drawable _fileHiddenIcon = fileHiddenIconFinal;
541712
private final Drawable _folderIcon = folderIconFinal;
542-
private final FileChooserColorScheme _themeColorScheme = themeColorScheme;
713+
private final boolean _fileItemMetaDataVisible = showFileItemMetaPropsVisible;
714+
private final int _fileItemMetaDataTextSize = fileItemMetaPropsTextSize;
715+
private final int _fileItemMetaDataTextStyle = fileItemMetaPropsTextStyle;
716+
private final FileItemPermissionsDisplayStyle _fileItemPermsDisplayStyle = fileItemPermsDisplayStyle;
717+
private final int _fileItemNameTextSize = fileItemNameTextSize;
718+
private final Typeface _fileItemNameTypeface = fileItemNameTypeface;
719+
private final int _fileItemNameTextStyle = fileItemNameTextStyle;
543720

544721
@Override
545722
public FileChooserColorScheme getThemeColorizer() { return _themeColorScheme; }
@@ -597,9 +774,31 @@ public boolean applyStyleToLayout(View parentViewContainer, DisplayTypes.FileTyp
597774
else {
598775
containerLayout.setBackgroundColor(_themeColorScheme.getColorPrimary());
599776
tvPermsSummary.setTextColor(_themeColorScheme.getColorAccent());
600-
tvPropsDivider.setTextColor(_themeColorScheme.getColorAccent());
601-
tvFileSize.setTextColor(_themeColorScheme.getColorAccent());
777+
tvPermsSummary.setText(
778+
_fileItemPermsDisplayStyle.ordinal() == FileItemPermissionsDisplayStyle.PERMISSIONS_DISPLAY_OCTAL_STYLE.ordinal() ?
779+
fileItemEntry.getChmodStylePermissions() :
780+
fileItemEntry.getPosixPermissions()
781+
);
782+
if(!_fileItemMetaDataVisible) {
783+
tvPermsSummary.setVisibility(View.GONE);
784+
tvPropsDivider.setVisibility(View.GONE);
785+
tvFileSize.setVisibility(View.GONE);
786+
}
787+
else {
788+
tvPermsSummary.setTextSize(TypedValue.COMPLEX_UNIT_SP, _fileItemMetaDataTextSize);
789+
tvPermsSummary.setTypeface(Typeface.MONOSPACE, _fileItemMetaDataTextStyle);
790+
tvPropsDivider.setTextColor(_themeColorScheme.getColorAccent());
791+
tvPropsDivider.setTextSize(TypedValue.COMPLEX_UNIT_SP, _fileItemMetaDataTextSize);
792+
tvPropsDivider.setTypeface(Typeface.MONOSPACE, _fileItemMetaDataTextStyle);
793+
tvFileSize.setTextColor(_themeColorScheme.getColorAccent());
794+
tvFileSize.setText(fileItemEntry.getFileSizeString());
795+
tvFileSize.setTextSize(TypedValue.COMPLEX_UNIT_SP, _fileItemMetaDataTextSize);
796+
tvFileSize.setTypeface(Typeface.MONOSPACE, _fileItemMetaDataTextStyle);
797+
}
602798
tvFileBaseName.setTextColor(_themeColorScheme.getColorAccent());
799+
tvFileBaseName.setTextSize(TypedValue.COMPLEX_UNIT_SP, _fileItemNameTextSize);
800+
tvFileBaseName.setTypeface(_fileItemNameTypeface, _fileItemNameTextStyle);
801+
tvFileBaseName.setText(fileItemEntry.getBaseName());
603802
}
604803
boolean opStatus = true;
605804
opStatus = opStatus && styleSelectionBox(parentViewContainer.findViewById(R.id.fileSelectCheckBox));
@@ -622,4 +821,7 @@ public boolean applyStyleToLayoutDivider(Drawable fileItemSep) {
622821

623822
}
624823

824+
//tvNavBtnsDirective.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
825+
// tvNavBtnsDirective.setTypeface(Typeface.SANS_SERIF, Typeface.BOLD_ITALIC);
826+
625827
}

AndroidFilePickerLightLibrary/src/main/java/com/maxieds/androidfilepickerlightlibrary/DisplayFragments.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -309,18 +309,17 @@ public static void resetLayout(View layoutContainer, DisplayTypes.FileType fileI
309309
} else {
310310
fileTypeIcon.setImageDrawable(getInstance().folderIconInst);
311311
}
312+
TextView fileSizeText = layoutContainer.findViewById(R.id.fileEntrySizeText);
313+
fileSizeText.setText(fileItem.getFileSizeString());
314+
TextView filePermsSummary = layoutContainer.findViewById(R.id.fileEntryPermsSummaryText);
315+
filePermsSummary.setText(fileItem.getChmodStylePermissions());
316+
TextView fileBaseNameDisplayText = layoutContainer.findViewById(R.id.fileEntryBaseName);
317+
fileBaseNameDisplayText.setText(fileItem.getBaseName());
312318
}
313319
else {
314320
fileItemLayoutStylizer.applyStyleToLayout(layoutContainer, fileItem);
315321
}
316322

317-
TextView fileSizeText = layoutContainer.findViewById(R.id.fileEntrySizeText);
318-
fileSizeText.setText(fileItem.getFileSizeString());
319-
TextView filePermsSummary = layoutContainer.findViewById(R.id.fileEntryPermsSummaryText);
320-
filePermsSummary.setText(fileItem.getChmodStylePermissions());
321-
TextView fileBaseNameDisplayText = layoutContainer.findViewById(R.id.fileEntryBaseName);
322-
fileBaseNameDisplayText.setText(fileItem.getBaseName());
323-
324323
boolean displaySelectionBox = (fileItem.isDirectory() && getInstance().allowSelectFolders) ||
325324
(!fileItem.isDirectory() && getInstance().allowSelectFiles);
326325
CheckBox selectionBox = layoutContainer.findViewById(R.id.fileSelectCheckBox);

0 commit comments

Comments
 (0)