@@ -20,9 +20,11 @@ This program (the AndroidFilePickerLight library) is free software written by
2020import android .app .Activity ;
2121import android .content .res .ColorStateList ;
2222import android .graphics .PorterDuff ;
23+ import android .graphics .Typeface ;
2324import android .graphics .drawable .Drawable ;
2425import android .graphics .drawable .GradientDrawable ;
2526import android .util .Log ;
27+ import android .util .TypedValue ;
2628import android .view .View ;
2729import android .view .Window ;
2830import 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}
0 commit comments