2929import java .util .EnumSet ;
3030import java .util .HashMap ;
3131
32+ import static com .pspdfkit .flutter .pspdfkit .util .Preconditions .requireNotNullNotEmpty ;
33+ import static io .flutter .util .Preconditions .checkNotNull ;
34+
3235class ConfigurationAdapter {
3336 private static final String LOG_TAG = "ConfigurationAdapter" ;
3437
@@ -46,7 +49,8 @@ class ConfigurationAdapter {
4649 private static final String ANDROID_SHOW_SEARCH_ACTION = "showSearchAction" ;
4750 private static final String INLINE_SEARCH = "inlineSearch" ;
4851 private static final String SHOW_THUMBNAIL_BAR = "showThumbnailBar" ;
49- private static final String SHOW_THUMBNAIL_BAR_DEFAULT = "default" ;
52+ private static final String SHOW_THUMBNAIL_BAR_FLOATING = "floating" ;
53+ private static final String SHOW_THUMBNAIL_BAR_PINNED = "pinned" ;
5054 private static final String SHOW_THUMBNAIL_BAR_SCROLLABLE = "scrollable" ;
5155 private static final String SHOW_THUMBNAIL_BAR_NONE = "none" ;
5256 private static final String ANDROID_SHOW_THUMBNAIL_GRID_ACTION = "showThumbnailGridAction" ;
@@ -75,10 +79,9 @@ class ConfigurationAdapter {
7579 private static final String SETTINGS_MENU_ITEMS = "settingsMenuItems" ;
7680 private static final String SHOW_ACTION_NAVIGATION_BUTTONS = "showActionNavigationButtons" ;
7781
78- private final PdfActivityConfiguration .Builder configuration ;
82+ @ NonNull private final PdfActivityConfiguration .Builder configuration ;
7983 @ Nullable private String password = null ;
8084
81- @ SuppressWarnings ("ConstantConditions" )
8285 ConfigurationAdapter (@ NonNull Context context ,
8386 @ Nullable HashMap <String , Object > configurationMap ) {
8487 this .configuration = new PdfActivityConfiguration .Builder (context );
@@ -168,7 +171,7 @@ class ConfigurationAdapter {
168171 configureDefaultThemeRes ((String ) configurationMap .get (ANDROID_DEFAULT_THEME_RESOURCE ), context );
169172 }
170173 if (containsKeyOfType (configurationMap , SETTINGS_MENU_ITEMS , ArrayList .class )) {
171- configureSettingsMenuItems ((ArrayList <String >) configurationMap .get (SETTINGS_MENU_ITEMS ));
174+ configureSettingsMenuItems ((ArrayList <? >) configurationMap .get (SETTINGS_MENU_ITEMS ));
172175 }
173176 if (containsKeyOfType (configurationMap , SHOW_ACTION_NAVIGATION_BUTTONS , Boolean .class )) {
174177 configureShowNavigationButtons ((Boolean ) configurationMap .get (SHOW_ACTION_NAVIGATION_BUTTONS ));
@@ -187,7 +190,8 @@ private void configureShowPageNumberOverlay(boolean showPageNumberOverlay) {
187190 }
188191 }
189192
190- private void configurePageScrollDirection (final String pageScrollDirection ) {
193+ private void configurePageScrollDirection (@ NonNull final String pageScrollDirection ) {
194+ requireNotNullNotEmpty (pageScrollDirection , "pageScrollDirection" );
191195 if (pageScrollDirection .equals (PAGE_SCROLL_DIRECTION_HORIZONTAL )) {
192196 configuration .scrollDirection (PageScrollDirection .HORIZONTAL );
193197 } else if (pageScrollDirection .equals (PAGE_SCROLL_DIRECTION_VERTICAL )) {
@@ -214,16 +218,25 @@ private void configureStartPage(int startPage) {
214218 configuration .page (startPage );
215219 }
216220
217- private void configureUserInterfaceViewMode (String userInterfaceViewMode ) {
218- UserInterfaceViewMode result = UserInterfaceViewMode .USER_INTERFACE_VIEW_MODE_AUTOMATIC ;
219- if (userInterfaceViewMode .equals (USER_INTERFACE_VIEW_MODE_AUTOMATIC )) {
220- result = UserInterfaceViewMode .USER_INTERFACE_VIEW_MODE_AUTOMATIC ;
221- } else if (userInterfaceViewMode .equals (USER_INTERFACE_VIEW_MODE_AUTOMATIC_BORDER_PAGES )) {
222- result = UserInterfaceViewMode .USER_INTERFACE_VIEW_MODE_AUTOMATIC_BORDER_PAGES ;
223- } else if (userInterfaceViewMode .equals (USER_INTERFACE_VIEW_MODE_ALWAYS_VISIBLE )) {
224- result = UserInterfaceViewMode .USER_INTERFACE_VIEW_MODE_VISIBLE ;
225- } else if (userInterfaceViewMode .equals (USER_INTERFACE_VIEW_MODE_ALWAYS_HIDDEN )) {
226- result = UserInterfaceViewMode .USER_INTERFACE_VIEW_MODE_HIDDEN ;
221+ private void configureUserInterfaceViewMode (@ NonNull String userInterfaceViewMode ) {
222+ requireNotNullNotEmpty (userInterfaceViewMode , "userInterfaceViewMode" );
223+
224+ UserInterfaceViewMode result ;
225+ switch (userInterfaceViewMode ) {
226+ case USER_INTERFACE_VIEW_MODE_AUTOMATIC :
227+ result = UserInterfaceViewMode .USER_INTERFACE_VIEW_MODE_AUTOMATIC ;
228+ break ;
229+ case USER_INTERFACE_VIEW_MODE_AUTOMATIC_BORDER_PAGES :
230+ result = UserInterfaceViewMode .USER_INTERFACE_VIEW_MODE_AUTOMATIC_BORDER_PAGES ;
231+ break ;
232+ case USER_INTERFACE_VIEW_MODE_ALWAYS_VISIBLE :
233+ result = UserInterfaceViewMode .USER_INTERFACE_VIEW_MODE_VISIBLE ;
234+ break ;
235+ case USER_INTERFACE_VIEW_MODE_ALWAYS_HIDDEN :
236+ result = UserInterfaceViewMode .USER_INTERFACE_VIEW_MODE_HIDDEN ;
237+ break ;
238+ default :
239+ throw new IllegalArgumentException ("Undefined user interface view mode for " + userInterfaceViewMode );
227240 }
228241 configuration .setUserInterfaceViewMode (result );
229242 }
@@ -240,14 +253,25 @@ private void configureImmersiveMode(boolean immersiveMode) {
240253 configuration .useImmersiveMode (immersiveMode );
241254 }
242255
243- private void configureShowThumbnailBar (String showThumbnailBar ) {
244- ThumbnailBarMode thumbnailBarMode = ThumbnailBarMode .THUMBNAIL_BAR_MODE_DEFAULT ;
245- if (showThumbnailBar .equals (SHOW_THUMBNAIL_BAR_DEFAULT )) {
246- thumbnailBarMode = ThumbnailBarMode .THUMBNAIL_BAR_MODE_DEFAULT ;
247- } else if (showThumbnailBar .equals (SHOW_THUMBNAIL_BAR_SCROLLABLE )) {
248- thumbnailBarMode = ThumbnailBarMode .THUMBNAIL_BAR_MODE_SCROLLABLE ;
249- } else if (showThumbnailBar .equals (SHOW_THUMBNAIL_BAR_NONE )) {
250- thumbnailBarMode = ThumbnailBarMode .THUMBNAIL_BAR_MODE_NONE ;
256+ private void configureShowThumbnailBar (@ NonNull String showThumbnailBar ) {
257+ requireNotNullNotEmpty (showThumbnailBar , "showThumbnailBar" );
258+
259+ ThumbnailBarMode thumbnailBarMode ;
260+ switch (showThumbnailBar ) {
261+ case SHOW_THUMBNAIL_BAR_FLOATING :
262+ thumbnailBarMode = ThumbnailBarMode .THUMBNAIL_BAR_MODE_FLOATING ;
263+ break ;
264+ case SHOW_THUMBNAIL_BAR_PINNED :
265+ thumbnailBarMode = ThumbnailBarMode .THUMBNAIL_BAR_MODE_PINNED ;
266+ break ;
267+ case SHOW_THUMBNAIL_BAR_SCROLLABLE :
268+ thumbnailBarMode = ThumbnailBarMode .THUMBNAIL_BAR_MODE_SCROLLABLE ;
269+ break ;
270+ case SHOW_THUMBNAIL_BAR_NONE :
271+ thumbnailBarMode = ThumbnailBarMode .THUMBNAIL_BAR_MODE_NONE ;
272+ break ;
273+ default :
274+ throw new IllegalArgumentException ("Undefined thumbnail bar mode for " + showThumbnailBar );
251275 }
252276 configuration .setThumbnailBarMode (thumbnailBarMode );
253277 }
@@ -356,24 +380,34 @@ private void configureDocumentInfoView(boolean enableDocumentInfoView) {
356380 }
357381 }
358382
359- private void configureThemeMode (String themeMode ) {
360- ThemeMode result = ThemeMode .DEFAULT ;
383+ private void configureThemeMode (@ NonNull String themeMode ) {
384+ requireNotNullNotEmpty (themeMode , "themeMode" );
385+
386+ ThemeMode result ;
361387 if (themeMode .equals (APPEARANCE_MODE_DEFAULT )) {
362388 result = ThemeMode .DEFAULT ;
363389 } else if (themeMode .equals (APPEARANCE_MODE_NIGHT )) {
364390 result = ThemeMode .NIGHT ;
391+ } else {
392+ throw new IllegalArgumentException ("Undefined theme mode for " + themeMode );
365393 }
366394 configuration .themeMode (result );
367395 }
368396
369- private void configureDarkThemeRes (String darkThemeResource , Context context ) {
397+ private void configureDarkThemeRes (@ NonNull String darkThemeResource , @ NonNull Context context ) {
398+ requireNotNullNotEmpty (darkThemeResource , "darkThemeResource" );
399+ checkNotNull (context );
400+
370401 @ StyleRes int darkThemeId = getStyleResourceId (darkThemeResource , context );
371402 if (darkThemeId != 0 ) {
372403 configuration .themeDark (darkThemeId );
373404 }
374405 }
375406
376- private void configureDefaultThemeRes (String defaultThemeResource , Context context ) {
407+ private void configureDefaultThemeRes (@ NonNull String defaultThemeResource , @ NonNull Context context ) {
408+ requireNotNullNotEmpty (defaultThemeResource , "defaultThemeResource" );
409+ checkNotNull (context );
410+
377411 @ StyleRes int defaultThemeId = getStyleResourceId (defaultThemeResource , context );
378412 if (defaultThemeId != 0 ) {
379413 configuration .theme (defaultThemeId );
@@ -388,17 +422,26 @@ private void configureShowNavigationButtons(boolean showNavigationButtons) {
388422 }
389423 }
390424
391- private static int getStyleResourceId (String styleName , Context context ) {
425+ private static int getStyleResourceId (@ NonNull String styleName , @ NonNull Context context ) {
426+ requireNotNullNotEmpty (styleName , "styleName" );
427+ checkNotNull (context );
428+
392429 int resourceId = context .getResources ().getIdentifier (styleName , "style" , context .getPackageName ());
393430 if (resourceId == 0 ) {
394431 Log .e (LOG_TAG , String .format ("Style resource not found for %s" , styleName ));
395432 }
396433 return resourceId ;
397434 }
398435
399- private void configureSettingsMenuItems (ArrayList <String > settingsMenuItems ) {
436+ private <T > void configureSettingsMenuItems (@ NonNull ArrayList <T > settingsMenuItems ) {
437+ checkNotNull (settingsMenuItems );
438+
400439 EnumSet <SettingsMenuItemType > settingsMenuItemTypes = EnumSet .noneOf (SettingsMenuItemType .class );
401- for (String menuType : settingsMenuItems ) {
440+ for (T settingsMenuItem : settingsMenuItems ) {
441+ if (!(settingsMenuItem instanceof String )) {
442+ throw new IllegalArgumentException ("Provided settingMenuItem " + settingsMenuItem + " must be a String." );
443+ }
444+ String menuType = (String ) settingsMenuItem ;
402445 if (menuType .equalsIgnoreCase ("theme" )) {
403446 settingsMenuItemTypes .add (SettingsMenuItemType .THEME );
404447 } else if (menuType .equalsIgnoreCase ("screenAwake" )) {
@@ -416,7 +459,9 @@ private void configureSettingsMenuItems(ArrayList<String> settingsMenuItems) {
416459 configuration .setSettingsMenuItems (settingsMenuItemTypes );
417460 }
418461
419- private <T > boolean containsKeyOfType (HashMap <String , Object > configurationMap , String key , Class <T > clazz ) {
462+ private <T > boolean containsKeyOfType (@ NonNull HashMap <String , Object > configurationMap ,
463+ @ NonNull String key ,
464+ @ NonNull Class <T > clazz ) {
420465 if (configurationMap .get (key ) != null ) {
421466 checkCast (configurationMap .get (key ), clazz , key );
422467 return true ;
0 commit comments