From 1fc9ffef3a593ce00c49a1d6a9b021150a5edfa9 Mon Sep 17 00:00:00 2001 From: Sergey Solovyev Date: Fri, 15 Sep 2023 10:08:16 +0200 Subject: [PATCH] Revive the project --- app/build.gradle | 94 ++++++------- app/misc/libs/plotter.aar | Bin 259672 -> 0 bytes .../test/util/OrientationChangeAction.java | 18 +-- .../converter/ConverterFragmentTest.java | 24 ++-- .../android/calculator/plot/BasePlotTest.java | 24 ++-- .../plot/PlotEditFunctionFragmentTest.java | 20 +-- .../calculator/wizard/WizardActivityTest.java | 18 +-- app/src/main/AndroidManifest.xml | 33 ++--- .../CirclePageIndicator.java | 6 +- .../com/viewpagerindicator/PageIndicator.java | 3 +- .../main/java/org/solovyev/android/Check.java | 3 +- .../android/calculator/ActivityLauncher.java | 2 +- .../solovyev/android/calculator/AdView.java | 9 +- .../org/solovyev/android/calculator/App.java | 18 +-- .../android/calculator/AppModule.java | 4 +- .../android/calculator/BaseActivity.java | 29 ++-- .../calculator/BaseDialogFragment.java | 14 +- .../android/calculator/BaseFragment.java | 8 +- .../android/calculator/Calculator.java | 4 +- .../calculator/CalculatorActivity.java | 111 ++++++++-------- .../calculator/CalculatorApplication.java | 2 +- .../android/calculator/Clipboard.java | 16 +-- .../solovyev/android/calculator/Display.java | 2 +- .../android/calculator/DisplayFragment.java | 67 +++++----- .../android/calculator/DisplayView.java | 4 +- .../solovyev/android/calculator/Editor.java | 13 +- .../android/calculator/EditorFragment.java | 7 +- .../solovyev/android/calculator/Engine.java | 6 +- .../FloatingCalculatorKeyboard.java | 75 +++++------ .../android/calculator/FragmentTab.java | 4 +- .../solovyev/android/calculator/Keyboard.java | 4 +- .../android/calculator/KeyboardFragment.java | 5 - .../solovyev/android/calculator/Named.java | 4 +- .../solovyev/android/calculator/Notifier.java | 2 +- .../android/calculator/Preferences.java | 10 +- .../calculator/PreparedExpression.java | 2 +- .../calculator/RemovalConfirmationDialog.java | 4 +- .../android/calculator/Runnables.java | 2 +- .../android/calculator/StartupHelper.java | 6 +- .../android/calculator/TaskExecutor.java | 6 +- .../calculator/ToJsclTextProcessor.java | 14 +- .../android/calculator/UiPreferences.java | 2 +- .../android/calculator/VariablesRegistry.java | 2 +- .../android/calculator/WidgetReceiver.java | 6 +- .../calculator/about/AboutActivity.java | 2 +- .../calculator/about/AboutFragment.java | 13 +- .../about/ReleaseNotesFragment.java | 7 +- .../solovyev/android/calculator/ads/AdUi.java | 7 +- .../calculations/BaseConversionEvent.java | 2 +- .../calculations/ConversionFailedEvent.java | 2 +- .../calculations/ConversionFinishedEvent.java | 2 +- .../calculator/converter/Converter.java | 4 +- .../converter/ConverterFragment.java | 102 +++++++------- .../calculator/converter/Convertible.java | 2 +- .../converter/ConvertibleDimension.java | 2 +- .../converter/NumeralBaseConvertible.java | 2 +- .../converter/NumeralBaseDimension.java | 2 +- .../calculator/converter/UnitConvertible.java | 4 +- .../calculator/converter/UnitDimension.java | 6 +- .../entities/BaseEntitiesFragment.java | 33 +++-- .../entities/BaseEntitiesRegistry.java | 4 +- .../android/calculator/entities/Category.java | 2 +- .../android/calculator/entities/Entities.java | 2 +- .../errors/FixableErrorFragment.java | 8 +- .../errors/FixableErrorsActivity.java | 4 +- .../floating/FloatingCalculatorActivity.java | 8 +- .../floating/FloatingCalculatorService.java | 4 +- .../floating/FloatingCalculatorView.java | 4 +- .../functions/BaseFunctionFragment.java | 72 +++++----- .../calculator/functions/CppFunction.java | 2 +- .../functions/EditFunctionFragment.java | 6 +- .../functions/FunctionCategory.java | 2 +- .../functions/FunctionParamsView.java | 6 +- .../functions/FunctionsActivity.java | 4 +- .../functions/FunctionsFragment.java | 38 +++--- .../functions/FunctionsRegistry.java | 2 +- .../history/BaseHistoryFragment.java | 75 ++++++----- .../history/EditHistoryFragment.java | 21 ++- .../android/calculator/history/History.java | 4 +- .../calculator/history/HistoryActivity.java | 6 +- .../calculator/history/HistoryState.java | 2 +- .../calculator/history/RecentHistory.java | 4 +- .../calculator/jscl/JsclOperation.java | 2 +- .../android/calculator/json/Json.java | 2 +- .../keyboard/BaseFloatingKeyboard.java | 8 +- .../calculator/keyboard/BaseKeyboardUi.java | 4 +- .../calculator/keyboard/FloatingKeyboard.java | 2 +- .../keyboard/FloatingKeyboardWindow.java | 4 +- .../keyboard/FloatingNumberKeyboard.java | 18 +-- .../calculator/keyboard/KeyboardUi.java | 54 ++++---- .../keyboard/PartialKeyboardUi.java | 18 +-- .../android/calculator/language/Language.java | 2 +- .../android/calculator/math/MathType.java | 2 +- .../android/calculator/memory/Memory.java | 2 +- .../operators/OperatorCategory.java | 2 +- .../operators/OperatorsActivity.java | 2 +- .../operators/OperatorsFragment.java | 9 +- .../operators/OperatorsRegistry.java | 2 +- .../operators/PostfixFunctionsRegistry.java | 2 +- .../android/calculator/plot/PlotActivity.java | 13 +- .../plot/PlotDimensionsFragment.java | 49 +++---- .../plot/PlotEditFunctionFragment.java | 21 +-- .../plot/PlotFunctionsFragment.java | 31 ++--- .../NumberFormatExamplesPreference.java | 12 +- .../preferences/PrecisionPreference.java | 98 +++++++++----- .../preferences/PreferenceEntry.java | 2 +- .../preferences/PreferencesActivity.java | 8 +- .../preferences/PreferencesFragment.java | 117 +++++++++-------- .../preferences/PurchaseDialogActivity.java | 8 +- .../release/ChooseThemeReleaseNoteStep.java | 2 +- .../calculator/release/ReleaseNote.java | 4 +- .../calculator/release/ReleaseNoteStep.java | 2 +- .../calculator/variables/CppVariable.java | 2 +- .../variables/EditVariableFragment.java | 103 +++++++-------- .../variables/GreekFloatingKeyboard.java | 35 +++-- .../variables/VariableCategory.java | 2 +- .../variables/VariablesActivity.java | 2 +- .../variables/VariablesFragment.java | 42 +++--- .../calculator/view/EditTextCompat.java | 2 +- .../calculator/view/PagerViewFabBehavior.java | 14 +- .../android/calculator/view/Tabs.java | 21 ++- .../calculator/view/TextHighlighter.java | 2 +- .../calculator/view/TouchExpander.java | 8 +- .../calculator/widget/CalculatorWidget.java | 6 +- .../wizard/CalculatorWizardStep.java | 2 +- .../wizard/DragButtonWizardStep.java | 2 +- .../calculator/wizard/WizardActivity.java | 10 +- .../calculator/wizard/WizardArrayAdapter.java | 4 +- .../calculator/wizard/WizardFragment.java | 33 +++-- .../android/checkout/CppCheckout.java | 2 +- .../org/solovyev/android/io/BaseIoLoader.java | 2 +- .../org/solovyev/android/io/BaseIoSaver.java | 2 +- .../org/solovyev/android/io/FileLoader.java | 4 +- .../org/solovyev/android/io/FileSaver.java | 2 +- .../org/solovyev/android/io/FileSystem.java | 4 +- .../solovyev/android/prefs/CachingMapper.java | 2 +- .../android/sherlock/FragmentItem.java | 39 ------ .../android/sherlock/FragmentItemImpl.java | 113 ---------------- .../tabs/ActionBarFragmentTabListener.java | 76 ----------- .../text/method/NumberInputFilter.java | 4 +- .../org/solovyev/android/views/Adjuster.java | 6 +- .../android/views/AutoResizeTextView.java | 4 +- .../android/views/DiscreteSeekBar.java | 2 +- .../android/widget/menu/CustomPopupMenu.java | 21 ++- .../widget/menu/CustomPopupMenuHelper.java | 31 +++-- .../widget/menu/ListMenuItemViewCompat.java | 6 +- .../android/widget/menu/MenuItemDivider.java | 6 +- .../solovyev/android/wizard/WizardStep.java | 2 +- .../org/solovyev/android/wizard/WizardUi.java | 4 +- .../res/color/cpp_wizard_button_selector.xml | 2 +- .../cpp_wizard_button_selector_light.xml | 2 +- .../main/res/drawable-v21/button_no_bg.xml | 6 +- .../res/drawable-v21/material_blue_button.xml | 6 +- .../material_blue_button_lighter.xml | 6 +- .../drawable-v21/material_button_black.xml | 8 +- .../material_button_black_lighter.xml | 8 +- .../res/drawable-v21/material_button_dark.xml | 8 +- .../material_button_dark_lighter.xml | 8 +- .../material_button_deep_blue.xml | 6 +- .../material_button_deep_blue_lighter.xml | 6 +- .../drawable-v21/material_button_light.xml | 8 +- .../material_button_light_darker.xml | 8 +- .../material_button_light_primary.xml | 8 +- .../material_button_light_primary_darker.xml | 8 +- .../res/drawable-v21/metro_blue_button.xml | 6 +- .../res/drawable-v21/metro_button_dark.xml | 8 +- .../res/drawable-v21/metro_button_green.xml | 8 +- .../res/drawable-v21/metro_button_light.xml | 8 +- .../res/drawable-v21/metro_button_purple.xml | 8 +- .../res/drawable-v21/metro_widget_button.xml | 8 +- .../drawable-v21/metro_widget_button_dark.xml | 6 +- .../metro_widget_button_light.xml | 6 +- .../res/drawable-v21/widget_button_no_bg.xml | 6 +- .../widget_button_no_bg_light.xml | 6 +- app/src/main/res/drawable/blue_button.xml | 8 +- .../main/res/drawable/blue_button_dark.xml | 8 +- .../res/drawable/blue_button_dark_shape.xml | 20 +-- .../main/res/drawable/blue_button_shape.xml | 20 +-- app/src/main/res/drawable/button_no_bg.xml | 8 +- .../res/drawable/button_no_bg_pressed.xml | 4 +- app/src/main/res/drawable/gray_button.xml | 8 +- .../main/res/drawable/gray_button_dark.xml | 8 +- .../res/drawable/gray_button_dark_shape.xml | 18 +-- .../main/res/drawable/gray_button_shape.xml | 18 +-- .../res/drawable/material_blue_button.xml | 10 +- .../drawable/material_blue_button_lighter.xml | 10 +- .../res/drawable/material_button_black.xml | 8 +- .../material_button_black_lighter.xml | 8 +- .../res/drawable/material_button_dark.xml | 8 +- .../drawable/material_button_dark_lighter.xml | 8 +- .../drawable/material_button_deep_blue.xml | 10 +- .../material_button_deep_blue_lighter.xml | 10 +- .../res/drawable/material_button_light.xml | 8 +- .../drawable/material_button_light_darker.xml | 8 +- .../material_button_light_primary.xml | 10 +- .../material_button_light_primary_darker.xml | 10 +- .../res/drawable/material_button_pressed.xml | 4 +- .../main/res/drawable/metro_blue_button.xml | 8 +- .../res/drawable/metro_blue_button_shape.xml | 16 +-- .../main/res/drawable/metro_button_dark.xml | 8 +- .../res/drawable/metro_button_dark_shape.xml | 16 +-- .../main/res/drawable/metro_button_green.xml | 8 +- .../res/drawable/metro_button_green_shape.xml | 16 +-- .../main/res/drawable/metro_button_light.xml | 8 +- .../res/drawable/metro_button_light_shape.xml | 14 +- .../res/drawable/metro_button_pressed.xml | 16 +-- .../main/res/drawable/metro_button_purple.xml | 8 +- .../drawable/metro_button_purple_shape.xml | 14 +- .../main/res/drawable/metro_widget_button.xml | 8 +- .../res/drawable/metro_widget_button_dark.xml | 8 +- .../drawable/metro_widget_button_light.xml | 8 +- app/src/main/res/drawable/violet_button.xml | 8 +- .../main/res/drawable/violet_button_dark.xml | 8 +- .../res/drawable/violet_button_dark_shape.xml | 20 +-- .../main/res/drawable/violet_button_shape.xml | 20 +-- .../main/res/drawable/widget_button_no_bg.xml | 8 +- .../drawable/widget_button_no_bg_light.xml | 8 +- .../drawable/widget_button_no_bg_pressed.xml | 4 +- .../main/res/layout-land/activity_main.xml | 56 ++++---- .../layout-land/activity_tabs_tablayout.xml | 9 +- .../main/res/layout-land/cpp_app_keyboard.xml | 40 +++--- app/src/main/res/layout/activity_empty.xml | 4 +- app/src/main/res/layout/activity_main.xml | 46 +++---- ...ctivity_main_editor_with_overflow_menu.xml | 46 +++---- app/src/main/res/layout/activity_tabs.xml | 12 +- .../res/layout/activity_tabs_tablayout.xml | 6 +- .../main/res/layout/cpp_activity_wizard.xml | 10 +- app/src/main/res/layout/cpp_app_button_0.xml | 8 +- app/src/main/res/layout/cpp_app_button_1.xml | 8 +- app/src/main/res/layout/cpp_app_button_2.xml | 8 +- app/src/main/res/layout/cpp_app_button_3.xml | 8 +- app/src/main/res/layout/cpp_app_button_4.xml | 8 +- app/src/main/res/layout/cpp_app_button_5.xml | 8 +- app/src/main/res/layout/cpp_app_button_6.xml | 8 +- app/src/main/res/layout/cpp_app_button_7.xml | 8 +- app/src/main/res/layout/cpp_app_button_8.xml | 8 +- app/src/main/res/layout/cpp_app_button_9.xml | 8 +- .../main/res/layout/cpp_app_button_clear.xml | 8 +- .../res/layout/cpp_app_button_division.xml | 8 +- .../main/res/layout/cpp_app_button_dot.xml | 8 +- .../layout/cpp_app_button_equals_no_bg.xml | 12 +- .../main/res/layout/cpp_app_button_erase.xml | 2 +- .../res/layout/cpp_app_button_functions.xml | 10 +- .../res/layout/cpp_app_button_history.xml | 8 +- .../main/res/layout/cpp_app_button_left.xml | 8 +- .../main/res/layout/cpp_app_button_like.xml | 2 +- .../main/res/layout/cpp_app_button_memory.xml | 8 +- .../main/res/layout/cpp_app_button_minus.xml | 8 +- .../layout/cpp_app_button_multiplication.xml | 8 +- .../res/layout/cpp_app_button_percent.xml | 8 +- .../main/res/layout/cpp_app_button_plus.xml | 8 +- .../main/res/layout/cpp_app_button_right.xml | 2 +- .../layout/cpp_app_button_round_brackets.xml | 8 +- .../main/res/layout/cpp_app_button_vars.xml | 10 +- app/src/main/res/layout/cpp_app_display.xml | 2 +- app/src/main/res/layout/cpp_app_editor.xml | 8 +- app/src/main/res/layout/cpp_app_keyboard.xml | 40 +++--- .../main/res/layout/cpp_release_note_step.xml | 26 ++-- .../main/res/layout/cpp_simple_button_0.xml | 8 +- .../layout/cpp_simple_button_0_material.xml | 8 +- .../cpp_simple_button_0_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_1.xml | 8 +- .../layout/cpp_simple_button_1_material.xml | 8 +- .../cpp_simple_button_1_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_2.xml | 8 +- .../layout/cpp_simple_button_2_material.xml | 8 +- .../cpp_simple_button_2_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_3.xml | 8 +- .../layout/cpp_simple_button_3_material.xml | 8 +- .../cpp_simple_button_3_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_4.xml | 8 +- .../layout/cpp_simple_button_4_material.xml | 8 +- .../cpp_simple_button_4_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_5.xml | 8 +- .../layout/cpp_simple_button_5_material.xml | 8 +- .../cpp_simple_button_5_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_6.xml | 8 +- .../layout/cpp_simple_button_6_material.xml | 8 +- .../cpp_simple_button_6_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_7.xml | 8 +- .../layout/cpp_simple_button_7_material.xml | 8 +- .../cpp_simple_button_7_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_8.xml | 8 +- .../layout/cpp_simple_button_8_material.xml | 8 +- .../cpp_simple_button_8_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_9.xml | 8 +- .../layout/cpp_simple_button_9_material.xml | 8 +- .../cpp_simple_button_9_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_app.xml | 6 +- .../layout/cpp_simple_button_app_material.xml | 6 +- .../cpp_simple_button_app_material_light.xml | 6 +- .../res/layout/cpp_simple_button_clear.xml | 8 +- .../cpp_simple_button_clear_material.xml | 8 +- ...cpp_simple_button_clear_material_light.xml | 8 +- .../res/layout/cpp_simple_button_copy.xml | 6 +- .../cpp_simple_button_copy_material.xml | 6 +- .../cpp_simple_button_copy_material_light.xml | 6 +- .../res/layout/cpp_simple_button_division.xml | 8 +- .../cpp_simple_button_division_material.xml | 8 +- ..._simple_button_division_material_light.xml | 8 +- .../main/res/layout/cpp_simple_button_dot.xml | 8 +- .../layout/cpp_simple_button_dot_material.xml | 8 +- .../cpp_simple_button_dot_material_light.xml | 8 +- .../res/layout/cpp_simple_button_equals.xml | 8 +- .../cpp_simple_button_equals_material.xml | 8 +- ...pp_simple_button_equals_material_light.xml | 8 +- .../res/layout/cpp_simple_button_erase.xml | 6 +- .../cpp_simple_button_erase_material.xml | 6 +- ...cpp_simple_button_erase_material_light.xml | 6 +- .../layout/cpp_simple_button_functions.xml | 8 +- .../cpp_simple_button_functions_material.xml | 8 +- ...simple_button_functions_material_light.xml | 8 +- .../res/layout/cpp_simple_button_history.xml | 6 +- .../cpp_simple_button_history_material.xml | 6 +- ...p_simple_button_history_material_light.xml | 6 +- .../res/layout/cpp_simple_button_left.xml | 6 +- .../cpp_simple_button_left_material.xml | 6 +- .../cpp_simple_button_left_material_light.xml | 6 +- .../res/layout/cpp_simple_button_minus.xml | 8 +- .../cpp_simple_button_minus_material.xml | 8 +- ...cpp_simple_button_minus_material_light.xml | 8 +- .../cpp_simple_button_multiplication.xml | 8 +- ..._simple_button_multiplication_material.xml | 8 +- ...e_button_multiplication_material_light.xml | 8 +- .../layout/cpp_simple_button_operators.xml | 8 +- .../cpp_simple_button_operators_material.xml | 8 +- ...simple_button_operators_material_light.xml | 8 +- .../res/layout/cpp_simple_button_paste.xml | 6 +- .../cpp_simple_button_paste_material.xml | 6 +- ...cpp_simple_button_paste_material_light.xml | 6 +- .../res/layout/cpp_simple_button_percent.xml | 8 +- .../cpp_simple_button_percent_material.xml | 8 +- ...p_simple_button_percent_material_light.xml | 8 +- .../res/layout/cpp_simple_button_plus.xml | 8 +- .../cpp_simple_button_plus_material.xml | 8 +- .../cpp_simple_button_plus_material_light.xml | 8 +- .../res/layout/cpp_simple_button_power.xml | 8 +- .../cpp_simple_button_power_material.xml | 8 +- ...cpp_simple_button_power_material_light.xml | 8 +- .../res/layout/cpp_simple_button_right.xml | 6 +- .../cpp_simple_button_right_material.xml | 6 +- ...cpp_simple_button_right_material_light.xml | 6 +- .../cpp_simple_button_round_brackets.xml | 8 +- ..._simple_button_round_brackets_material.xml | 8 +- ...e_button_round_brackets_material_light.xml | 8 +- .../res/layout/cpp_simple_button_settings.xml | 6 +- .../cpp_simple_button_settings_material.xml | 6 +- ..._simple_button_settings_material_light.xml | 6 +- .../res/layout/cpp_simple_button_vars.xml | 8 +- .../cpp_simple_button_vars_material.xml | 8 +- .../cpp_simple_button_vars_material_light.xml | 8 +- .../layout/cpp_simple_keyboard_lockscreen.xml | 34 ++--- ...p_simple_keyboard_lockscreen_collapsed.xml | 28 ++-- .../main/res/layout/cpp_unit_converter.xml | 10 +- .../layout/cpp_wizard_step_choose_mode.xml | 60 ++++----- .../layout/cpp_wizard_step_choose_theme.xml | 34 ++--- .../cpp_wizard_step_choose_theme_preview.xml | 42 +++--- .../layout/cpp_wizard_step_drag_button.xml | 38 +++--- .../main/res/layout/cpp_wizard_step_final.xml | 22 ++-- .../res/layout/cpp_wizard_step_onscreen.xml | 28 ++-- .../res/layout/cpp_wizard_step_welcome.xml | 12 +- app/src/main/res/layout/fragment_about.xml | 56 ++++---- app/src/main/res/layout/fragment_entities.xml | 20 +-- .../res/layout/fragment_entities_item.xml | 18 +-- .../res/layout/fragment_function_edit.xml | 12 +- .../fragment_function_edit_base_controls.xml | 74 +++++------ .../layout/fragment_functions_function.xml | 5 +- app/src/main/res/layout/fragment_history.xml | 20 +-- .../main/res/layout/fragment_history_edit.xml | 38 +++--- .../main/res/layout/fragment_history_item.xml | 32 ++--- app/src/main/res/layout/fragment_plot.xml | 78 +++++------ .../res/layout/fragment_plot_dimensions.xml | 18 +-- .../layout/fragment_plot_function_edit.xml | 4 + .../res/layout/fragment_plot_functions.xml | 4 +- .../main/res/layout/fragment_preferences.xml | 6 - .../res/layout/fragment_release_notes.xml | 14 +- .../res/layout/fragment_variable_edit.xml | 124 +++++++++--------- app/src/main/res/layout/fragment_wizard.xml | 66 +++++----- app/src/main/res/layout/onscreen_display.xml | 4 +- .../res/layout/onscreen_display_light.xml | 4 +- app/src/main/res/layout/onscreen_editor.xml | 6 +- .../main/res/layout/onscreen_editor_light.xml | 6 +- app/src/main/res/layout/onscreen_header.xml | 46 +++---- .../res/layout/onscreen_header_material.xml | 46 +++---- .../layout/onscreen_header_material_light.xml | 46 +++---- app/src/main/res/layout/onscreen_layout.xml | 46 +++---- .../res/layout/onscreen_layout_material.xml | 46 +++---- .../layout/onscreen_layout_material_light.xml | 46 +++---- .../main/res/layout/preference_precision.xml | 2 +- app/src/main/res/layout/simple_keyboard.xml | 40 +++--- .../res/layout/simple_keyboard_material.xml | 40 +++--- .../layout/simple_keyboard_material_light.xml | 40 +++--- app/src/main/res/layout/widget_display.xml | 8 +- .../main/res/layout/widget_display_light.xml | 8 +- app/src/main/res/layout/widget_editor.xml | 4 +- .../main/res/layout/widget_editor_light.xml | 4 +- app/src/main/res/layout/widget_layout.xml | 42 +++--- .../res/layout/widget_layout_lockscreen.xml | 42 +++--- .../widget_layout_lockscreen_collapsed.xml | 58 ++++---- .../res/layout/widget_layout_material.xml | 42 +++--- .../layout/widget_layout_material_light.xml | 42 +++--- app/src/main/res/menu/main.xml | 2 +- app/src/main/res/values-cs/strings_about.xml | 2 +- app/src/main/res/values-cs/strings_vars.xml | 4 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-es/strings_vars.xml | 4 +- app/src/main/res/values-fi/strings.xml | 4 +- app/src/main/res/values-fi/strings_about.xml | 8 +- .../main/res/values-fi/strings_microsoft.xml | 4 +- app/src/main/res/values-it/strings.xml | 4 +- app/src/main/res/values-it/strings_about.xml | 2 +- app/src/main/res/values-it/strings_vars.xml | 4 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pl/strings_about.xml | 2 +- app/src/main/res/values-pl/strings_vars.xml | 4 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- .../main/res/values-pt-rBR/strings_vars.xml | 4 +- .../main/res/values-pt-rPT/strings_vars.xml | 4 +- app/src/main/res/values-tr/strings_about.xml | 2 +- app/src/main/res/values/admob.xml | 4 +- app/src/main/res/values/styles.xml | 23 ++-- app/src/main/res/values/theme.xml | 34 ++--- app/src/main/res/xml/calculator_widget.xml | 22 ++-- app/src/main/res/xml/preferences.xml | 82 ++++++------ .../main/res/xml/preferences_appearance.xml | 43 +++--- .../res/xml/preferences_number_format.xml | 33 +++-- app/src/main/res/xml/preferences_onscreen.xml | 18 +-- app/src/main/res/xml/preferences_other.xml | 22 ++-- app/src/main/res/xml/preferences_widget.xml | 12 +- .../android/CalculatorTestRunner.java | 29 ---- .../calculator/AndroidEditorViewTest.java | 3 +- .../calculator/BaseCalculatorTest.java | 43 +++--- .../calculator/CalculatorMessagesTest.java | 3 +- .../android/calculator/CalculatorTest.java | 2 +- .../android/calculator/EditorTest.java | 3 +- .../FromJsclSimplifyTextProcessorTest.java | 1 - .../solovyev/android/calculator/Tests.java | 2 +- .../calculator/TextHighlighterTest.java | 48 +++---- .../calculator/ToJsclTextProcessorTest.java | 5 +- .../calculator/WidgetReceiverTest.java | 22 ++-- .../calculator/history/HistoryTest.java | 35 ++--- .../FromJsclNumericTextProcessorTest.java | 1 - .../android/calculator/math/MathTypeTest.java | 1 - .../calculator/model/AndroidEngineTest.java | 1 - .../calculator/model/ComparisonTest.java | 1 - .../calculator/model/EvaluateTest.java | 9 +- .../calculator/model/NumeralBaseTest.java | 1 - .../android/calculator/model/OldVarTest.java | 47 ------- .../wizard/CalculatorWizardActivityTest.java | 8 +- .../wizard/CalculatorWizardTest.java | 2 +- .../OnScreenCalculatorWizardStepTest.java | 2 +- .../text/method/NumberInputFilterTest.java | 3 +- build.gradle | 15 ++- dragbutton/build.gradle | 8 +- dragbutton/src/main/AndroidManifest.xml | 2 +- .../views/dragbutton/DirectionDragButton.java | 6 +- .../dragbutton/DirectionDragImageButton.java | 5 +- .../dragbutton/DirectionDragListener.java | 6 +- .../views/dragbutton/DirectionDragView.java | 3 +- .../views/dragbutton/DirectionText.java | 4 +- .../views/dragbutton/DirectionTextView.java | 4 +- .../android/views/dragbutton/Drag.java | 6 +- .../android/views/dragbutton/DragButton.java | 6 +- .../views/dragbutton/DragDirection.java | 3 +- .../android/views/dragbutton/DragEvent.java | 2 +- .../views/dragbutton/DragGestureDetector.java | 4 +- .../views/dragbutton/DragImageButton.java | 6 +- .../views/dragbutton/DragListener.java | 2 +- .../android/views/dragbutton/DragView.java | 2 +- .../android/views/dragbutton/PaintCache.java | 8 +- gradle.properties | 16 ++- gradle/wrapper/gradle-wrapper.properties | 3 +- jscl/build.gradle | 6 +- .../main/java/jscl/math/NumericWrapper.java | 2 +- .../java/jscl/math/polynomial/Monomial.java | 2 +- jscl/src/main/java/jscl/text/MutableInt.java | 4 +- .../org/solovyev/common/NumberFormatter.java | 3 +- .../solovyev/common/msg/AbstractMessage.java | 2 +- .../test/java/jscl/math/ExpressionTest.java | 2 +- .../solovyev/common/NumberFormatterTest.java | 4 +- settings.gradle | 7 +- 481 files changed, 3061 insertions(+), 3414 deletions(-) delete mode 100644 app/misc/libs/plotter.aar delete mode 100644 app/src/main/java/org/solovyev/android/sherlock/FragmentItem.java delete mode 100644 app/src/main/java/org/solovyev/android/sherlock/FragmentItemImpl.java delete mode 100644 app/src/main/java/org/solovyev/android/sherlock/tabs/ActionBarFragmentTabListener.java delete mode 100644 app/src/main/res/layout/fragment_preferences.xml delete mode 100644 app/src/test/java/org/solovyev/android/CalculatorTestRunner.java delete mode 100644 app/src/test/java/org/solovyev/android/calculator/model/OldVarTest.java diff --git a/app/build.gradle b/app/build.gradle index ac7bba35..6f824bbc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,25 +21,28 @@ */ apply plugin: 'com.android.application' -apply plugin: 'maven' apply plugin: 'signing' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' android { - compileSdkVersion versions.sdk.compile - buildToolsVersion versions.sdk.buildTools + compileSdk versions.sdk.compile defaultConfig { applicationId "org.solovyev.android.calculator" minSdkVersion versions.sdk.min targetSdkVersion versions.sdk.target versionCode 157 versionName '2.2.7' - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' + } + buildFeatures { + dataBinding true + viewBinding true } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard.cfg' - zipAlignEnabled true } debug { minifyEnabled false @@ -49,72 +52,70 @@ android { multiDexEnabled true } } - lintOptions { + namespace 'org.solovyev.android.calculator' + lint { abortOnError false + disable 'ContentDescription', 'IconLauncherShape' warning 'MissingTranslation' - disable 'ContentDescription' - // floating icon is semi-transparent - disable 'IconLauncherShape' } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - defaultConfig { - javaCompileOptions { - annotationProcessorOptions { - arguments = ['library': 'true'] - } + testOptions { + unitTests { + includeAndroidResources = true } } } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } +} + dependencies { - implementation "com.android.support:support-v4:${versions.supportLib}" - implementation "com.android.support:appcompat-v7:${versions.supportLib}" - implementation "com.android.support:design:${versions.supportLib}" + implementation "org.jetbrains.kotlin:kotlin-stdlib:${versions.kotlin}" + + implementation "androidx.viewpager:viewpager:1.1.0-alpha01" + implementation "androidx.preference:preference-ktx:1.2.1" + implementation 'com.google.android.material:material:1.9.0' + implementation ':measure:' implementation ':square-otto:1.3.9-SNAPSHOT' - annotationProcessor ':square-otto:1.3.9-SNAPSHOT' - annotationProcessor ':square-otto-compiler:1.3.9-SNAPSHOT' - annotationProcessor 'com.squareup:javapoet:1.9.0' + kapt ':square-otto:1.3.9-SNAPSHOT' + kapt ':square-otto-compiler:1.3.9-SNAPSHOT' + kapt 'com.squareup:javapoet:1.9.0' + implementation project(':plotter:lib') implementation project(':dragbutton') implementation(project(':jscl')) { exclude(module: 'xercesImpl') } - implementation 'org.solovyev.android:checkout:1.2.1' - implementation 'org.solovyev.android:material:0.1.4@aar' - implementation "com.google.android.gms:play-services-ads:${versions.gpsLib}" + implementation 'org.solovyev.android:checkout:1.3.0' + implementation "com.google.android.gms:play-services-ads:22.2.0" implementation "com.google.android.gms:play-services-base:${versions.gpsLib}" - implementation "com.google.android.gms:play-services-analytics:${versions.gpsLib}" - implementation(name: 'plotter', ext: 'aar') - implementation 'com.google.guava:guava:20.0' - implementation('org.simpleframework:simple-xml:2.6.1') { + implementation "com.google.android.gms:play-services-analytics:18.0.3" + implementation 'com.google.guava:guava:32.1.2-android' + implementation('org.simpleframework:simple-xml:2.7.1') { exclude(module: 'stax') exclude(module: 'stax-api') exclude(module: 'xpp3') } - implementation 'com.jakewharton:butterknife:8.8.1' - annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' implementation 'com.google.dagger:dagger:2.0.2' - annotationProcessor "com.google.dagger:dagger-compiler:2.0.2" - implementation 'javax.annotation:jsr250-api:1.0' + kapt "com.google.dagger:dagger-compiler:2.0.2" + implementation 'javax.annotation:javax.annotation-api:1.3.2' + kapt "javax.annotation:javax.annotation-api:1.3.2" - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.2' testImplementation 'net.sf.opencsv:opencsv:2.0' - testImplementation 'org.mockito:mockito-core:2.7.6' - testImplementation 'org.robolectric:robolectric:3.5.1' - testImplementation 'org.mockito:mockito-all:1.9.5' - testImplementation 'org.skyscreamer:jsonassert:1.2.3' + testImplementation 'org.mockito:mockito-core:5.3.1' + testImplementation 'org.robolectric:robolectric:4.10.3' + testImplementation 'org.skyscreamer:jsonassert:1.5.0' testImplementation(name: 'org.apache.http.legacy', ext: 'jar') - androidTestImplementation "com.android.support:support-annotations:${versions.supportLib}" - androidTestImplementation'com.android.support.test:runner:1.0.2' - androidTestImplementation'com.android.support.test:rules:1.0.2' + androidTestImplementation 'androidx.annotation:annotation:1.7.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.5' + androidTestImplementation 'androidx.test:rules:1.5.0' androidTestImplementation'org.hamcrest:hamcrest-library:1.3' - androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { + androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { // use version of jsr305 provided by Checkout exclude group: 'com.google.code.findbugs', module: 'jsr305' })} @@ -122,6 +123,7 @@ dependencies { tasks.withType(Test) { scanForTestClasses = false include "**/*Test.class" + exclude "**/*BaseCalculatorTest*" exclude "**/*AndroidCalculatorEditorViewTest*" exclude "**/*CalculatorWizardActivityTest*" exclude "**/*OnScreenCalculatorWizardStepTest*" @@ -130,6 +132,7 @@ tasks.withType(Test) { exclude "**/*AngleUnitsButtonTest*" exclude "**/*NumeralBasesButtonTest*" } +/* task androidJavadocs(type: Javadoc) { source = android.sourceSets.main.java.srcDirs @@ -213,3 +216,4 @@ uploadArchives { } } } +*/ diff --git a/app/misc/libs/plotter.aar b/app/misc/libs/plotter.aar deleted file mode 100644 index 93ee7831f39922fafc9325649aab9c586599b244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259672 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

%a+Aq!>cdRq%ygKW{D1b~a( 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 z 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.PARAM_VIEW_TAG)))).perform(typeTextIntoFocusedView("y")); onView(allOf(hasFocus(), withTagValue(Matchers.equalTo(FunctionParamsView.PARAM_VIEW_TAG)))).check(matches(withText("y"))); } -} \ No newline at end of file +} diff --git a/app/src/androidTest/java/org/solovyev/android/calculator/wizard/WizardActivityTest.java b/app/src/androidTest/java/org/solovyev/android/calculator/wizard/WizardActivityTest.java index 2fb022f6..4ecbd557 100644 --- a/app/src/androidTest/java/org/solovyev/android/calculator/wizard/WizardActivityTest.java +++ b/app/src/androidTest/java/org/solovyev/android/calculator/wizard/WizardActivityTest.java @@ -1,19 +1,19 @@ package org.solovyev.android.calculator.wizard; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.rule.ActivityTestRule; +import androidx.test.ext.junit.runners.AndroidJUnit4; import android.test.suitebuilder.annotation.LargeTest; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.solovyev.android.calculator.R; -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.action.ViewActions.swipeLeft; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.RootMatchers.isDialog; -import static android.support.test.espresso.matcher.ViewMatchers.*; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.action.ViewActions.swipeLeft; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.RootMatchers.isDialog; +import static androidx.test.espresso.matcher.ViewMatchers.*; import static net.slideshare.mobile.test.util.OrientationChangeAction.orientationLandscape; import static net.slideshare.mobile.test.util.OrientationChangeAction.orientationPortrait; import static org.hamcrest.Matchers.allOf; @@ -62,4 +62,4 @@ public class WizardActivityTest { onView(isRoot()).perform(orientationPortrait()); onView(withId(R.id.pager)).check(matches(hasDescendant(withText(R.string.cpp_wizard_mode_title)))); } -} \ No newline at end of file +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9147c4f9..b307c501 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,7 @@ + android:installLocation="auto"> @@ -31,7 +30,12 @@ android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> + + @@ -120,6 +125,7 @@ android:theme="@style/Cpp.Theme.Dialog" /> @@ -128,6 +134,7 @@ @@ -144,6 +151,7 @@ @@ -201,17 +210,9 @@ android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent" /> - - - - @@ -220,18 +221,10 @@ - - - - - - \ No newline at end of file + diff --git a/app/src/main/java/com/viewpagerindicator/CirclePageIndicator.java b/app/src/main/java/com/viewpagerindicator/CirclePageIndicator.java index 1009b506..92c721ab 100644 --- a/app/src/main/java/com/viewpagerindicator/CirclePageIndicator.java +++ b/app/src/main/java/com/viewpagerindicator/CirclePageIndicator.java @@ -26,14 +26,14 @@ import android.graphics.Paint.Style; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; -import android.support.v4.view.MotionEventCompat; -import android.support.v4.view.ViewConfigurationCompat; -import android.support.v4.view.ViewPager; +import androidx.core.view.MotionEventCompat; +import androidx.core.view.ViewConfigurationCompat; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; +import androidx.viewpager.widget.ViewPager; import org.solovyev.android.calculator.R; import static android.graphics.Paint.ANTI_ALIAS_FLAG; diff --git a/app/src/main/java/com/viewpagerindicator/PageIndicator.java b/app/src/main/java/com/viewpagerindicator/PageIndicator.java index 929c91a4..c9f4c5cd 100644 --- a/app/src/main/java/com/viewpagerindicator/PageIndicator.java +++ b/app/src/main/java/com/viewpagerindicator/PageIndicator.java @@ -17,7 +17,8 @@ package com.viewpagerindicator; -import android.support.v4.view.ViewPager; + +import androidx.viewpager.widget.ViewPager; /** * A PageIndicator is responsible to show an visual indicator on the total views diff --git a/app/src/main/java/org/solovyev/android/Check.java b/app/src/main/java/org/solovyev/android/Check.java index 363639c3..df42b787 100644 --- a/app/src/main/java/org/solovyev/android/Check.java +++ b/app/src/main/java/org/solovyev/android/Check.java @@ -42,7 +42,8 @@ public final class Check { private static boolean isJunit() { final StackTraceElement[] stackTrace = currentThread().getStackTrace(); for (StackTraceElement element : stackTrace) { - if (element.getClassName().startsWith("org.junit.")) { + String className = element.getClassName(); + if (className.startsWith("org.junit.") || className.startsWith("org.robolectric.")) { return true; } } diff --git a/app/src/main/java/org/solovyev/android/calculator/ActivityLauncher.java b/app/src/main/java/org/solovyev/android/calculator/ActivityLauncher.java index 865a9d1d..ade54683 100644 --- a/app/src/main/java/org/solovyev/android/calculator/ActivityLauncher.java +++ b/app/src/main/java/org/solovyev/android/calculator/ActivityLauncher.java @@ -27,7 +27,7 @@ import android.app.Application; import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import dagger.Lazy; import jscl.math.Generic; diff --git a/app/src/main/java/org/solovyev/android/calculator/AdView.java b/app/src/main/java/org/solovyev/android/calculator/AdView.java index bfc3134e..164644ce 100644 --- a/app/src/main/java/org/solovyev/android/calculator/AdView.java +++ b/app/src/main/java/org/solovyev/android/calculator/AdView.java @@ -9,10 +9,12 @@ import android.view.Gravity; import android.view.View; import android.widget.FrameLayout; +import androidx.annotation.NonNull; import com.google.android.gms.ads.AdListener; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; +import com.google.android.gms.ads.LoadAdError; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -81,11 +83,6 @@ public class AdView extends FrameLayout { admobView.setAdListener(admobListener); final AdRequest.Builder b = new AdRequest.Builder(); - b.addTestDevice(AdRequest.DEVICE_ID_EMULATOR); - if (BuildConfig.DEBUG) { - // LG Nexus 5 - b.addTestDevice("B80E676D60CE6FDBE1B84A55464E3FE1"); - } admobView.loadAd(b.build()); } @@ -127,7 +124,7 @@ public class AdView extends FrameLayout { } @Override - public void onAdFailedToLoad(int errorCode) { + public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { if (adView != null) { adView.hide(); adView = null; diff --git a/app/src/main/java/org/solovyev/android/calculator/App.java b/app/src/main/java/org/solovyev/android/calculator/App.java index 9698125e..4f6a0d57 100644 --- a/app/src/main/java/org/solovyev/android/calculator/App.java +++ b/app/src/main/java/org/solovyev/android/calculator/App.java @@ -36,13 +36,8 @@ import android.net.Uri; import android.os.Build; import android.os.IBinder; import android.os.Looper; -import android.support.annotation.ColorInt; -import android.support.annotation.NonNull; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.view.ContextThemeWrapper; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; @@ -54,6 +49,11 @@ import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; +import androidx.appcompat.view.ContextThemeWrapper; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import org.solovyev.android.Check; import org.solovyev.android.calculator.floating.FloatingCalculatorService; @@ -312,7 +312,7 @@ public final class App { @Nonnull public static ArrayAdapter makeSimpleSpinnerAdapter(@NonNull Context context) { - return new ArrayAdapter<>(context, R.layout.support_simple_spinner_dropdown_item); + return new ArrayAdapter<>(context, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item); } public interface ViewProcessor { @@ -366,4 +366,4 @@ public final class App { public static int toPixels(@Nonnull View view, float dps) { return toPixels(view.getContext(), dps); } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/AppModule.java b/app/src/main/java/org/solovyev/android/calculator/AppModule.java index d17cedd6..75e7c292 100644 --- a/app/src/main/java/org/solovyev/android/calculator/AppModule.java +++ b/app/src/main/java/org/solovyev/android/calculator/AppModule.java @@ -7,12 +7,12 @@ import android.graphics.Typeface; import android.os.Handler; import android.os.Looper; import android.preference.PreferenceManager; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import com.squareup.otto.Bus; -import com.squareup.otto.GeneratedHandlerFinder; +import com.squareup.otto.GeneratedHandlerFinder; import org.solovyev.android.calculator.language.Languages; import org.solovyev.android.calculator.wizard.CalculatorWizards; import org.solovyev.android.checkout.Billing; diff --git a/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java b/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java index 8929243c..2cafefd8 100644 --- a/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/BaseActivity.java @@ -10,14 +10,6 @@ import android.app.Activity; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.DrawableRes; -import android.support.annotation.LayoutRes; -import android.support.annotation.StringRes; -import android.support.design.widget.AppBarLayout; -import android.support.design.widget.FloatingActionButton; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; import android.view.KeyEvent; import android.view.MenuItem; import android.view.View; @@ -25,6 +17,14 @@ import android.view.ViewGroup; import android.view.Window; import android.widget.TextView; +import androidx.annotation.DrawableRes; +import androidx.annotation.LayoutRes; +import androidx.annotation.StringRes; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import org.solovyev.android.Check; import org.solovyev.android.calculator.ga.Ga; import org.solovyev.android.calculator.language.Language; @@ -36,8 +36,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; import dagger.Lazy; public abstract class BaseActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener { @@ -58,13 +56,10 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr Lazy ga; @Inject Typeface typeface; - @BindView(R.id.main) ViewGroup mainView; @Nullable - @BindView(R.id.toolbar) Toolbar toolbar; @Nullable - @BindView(R.id.fab) FloatingActionButton fab; @Nonnull private Preferences.Gui.Theme theme = Preferences.Gui.Theme.material_theme; @@ -159,12 +154,16 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr private void createView() { setContentView(layoutId); + View contentView = findViewById(android.R.id.content); + mainView = contentView.findViewById(R.id.main); + toolbar = contentView.findViewById(R.id.toolbar); + fab = contentView.findViewById(R.id.fab); + bindViews(contentView); // title must be updated as if a non-system language is used the value from AndroidManifest // might be cached if (titleId != 0) { setTitle(titleId); } - ButterKnife.bind(this, this); fixFonts(mainView, typeface); initToolbar(); @@ -172,6 +171,8 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr tabs.onCreate(); } + protected void bindViews(@Nonnull View contentView) {} + private void initToolbar() { if (toolbar == null) { return; diff --git a/app/src/main/java/org/solovyev/android/calculator/BaseDialogFragment.java b/app/src/main/java/org/solovyev/android/calculator/BaseDialogFragment.java index afe8f280..072037c6 100644 --- a/app/src/main/java/org/solovyev/android/calculator/BaseDialogFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/BaseDialogFragment.java @@ -5,19 +5,19 @@ import android.content.DialogInterface; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.design.widget.TextInputLayout; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.FragmentActivity; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; +import androidx.annotation.StringRes; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentActivity; import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.Tracker; +import com.google.android.material.textfield.TextInputLayout; import org.solovyev.android.calculator.ga.Ga; import javax.inject.Inject; diff --git a/app/src/main/java/org/solovyev/android/calculator/BaseFragment.java b/app/src/main/java/org/solovyev/android/calculator/BaseFragment.java index ac09fc8c..e927cbe0 100644 --- a/app/src/main/java/org/solovyev/android/calculator/BaseFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/BaseFragment.java @@ -3,11 +3,11 @@ package org.solovyev.android.calculator; import android.graphics.Typeface; import android.os.Bundle; import android.os.Parcelable; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.v4.app.Fragment; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; import android.view.*; +import androidx.annotation.StringRes; +import androidx.fragment.app.Fragment; import org.solovyev.android.calculator.ads.AdUi; import org.solovyev.android.plotter.Check; diff --git a/app/src/main/java/org/solovyev/android/calculator/Calculator.java b/app/src/main/java/org/solovyev/android/calculator/Calculator.java index f9253dd4..3590fad2 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Calculator.java +++ b/app/src/main/java/org/solovyev/android/calculator/Calculator.java @@ -23,8 +23,8 @@ package org.solovyev.android.calculator; import android.content.SharedPreferences; -import android.support.annotation.NonNull; -import android.support.annotation.VisibleForTesting; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import android.text.TextUtils; import android.util.Log; diff --git a/app/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java b/app/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java index 6f44507e..798e5e1e 100644 --- a/app/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/CalculatorActivity.java @@ -25,11 +25,9 @@ package org.solovyev.android.calculator; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.StringRes; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.view.GravityCompat; -import android.support.v7.widget.PopupMenu; +import androidx.annotation.StringRes; +import androidx.appcompat.widget.PopupMenu; +import androidx.core.view.GravityCompat; import android.text.SpannableString; import android.text.Spanned; import android.text.style.StyleSpan; @@ -38,10 +36,12 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.FrameLayout; -import butterknife.BindView; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import jscl.AngleUnit; import jscl.NumeralBase; import org.solovyev.android.calculator.converter.ConverterFragment; +import org.solovyev.android.calculator.databinding.ActivityMainBinding; import org.solovyev.android.calculator.history.History; import org.solovyev.android.calculator.keyboard.PartialKeyboardUi; import org.solovyev.android.widget.menu.CustomPopupMenu; @@ -65,11 +65,8 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList @Inject StartupHelper startupHelper; @Nullable - @BindView(R.id.partial_keyboard) View partialKeyboard; - @BindView(R.id.editor) FrameLayout editor; - @BindView(R.id.main_menu) View mainMenuButton; private boolean useBackAsPrevious; @@ -77,6 +74,14 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList super(R.layout.activity_main, R.string.cpp_app_name); } + @Override + protected void bindViews(@Nonnull View contentView) { + ActivityMainBinding binding = ActivityMainBinding.bind(contentView.findViewById(R.id.main)); + partialKeyboard = binding.partialKeyboard; + editor = binding.editorContainer.editor; + mainMenuButton = binding.editorContainer.mainMenu; + } + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -149,10 +154,8 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList @Override public void onClick(View v) { - switch (v.getId()) { - case R.id.main_menu: - mainMenu.toggle(); - break; + if (v.getId() == R.id.main_menu) { + mainMenu.toggle(); } } @@ -171,7 +174,7 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList public void toggle() { if (popup == null) { - popup = new CustomPopupMenu(CalculatorActivity.this, mainMenuButton, GravityCompat.END, R.attr.actionOverflowMenuStyle, 0); + popup = new CustomPopupMenu(CalculatorActivity.this, mainMenuButton, GravityCompat.END, android.R.attr.actionOverflowMenuStyle, 0); popup.inflate(R.menu.main); popup.setOnMenuItemClickListener(this); popup.setKeepOnSubMenu(true); @@ -227,45 +230,45 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList @Override public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_settings: - launcher.showSettings(); - return true; - case R.id.menu_history: - launcher.showHistory(); - return true; - case R.id.menu_plotter: - launcher.showPlotter(); - return true; - case R.id.menu_conversion_tool: - ConverterFragment.show(CalculatorActivity.this); - return true; - case R.id.menu_about: - launcher.showAbout(); - return true; - case R.id.menu_mode_engineer: - Preferences.Gui.mode.putPreference(preferences, Preferences.Gui.Mode.engineer); - restartIfModeChanged(); - return true; - case R.id.menu_mode_simple: - Preferences.Gui.mode.putPreference(preferences, Preferences.Gui.Mode.simple); - restartIfModeChanged(); - return true; - case R.id.menu_au_deg: - Engine.Preferences.angleUnit.putPreference(preferences, AngleUnit.deg); - return true; - case R.id.menu_au_rad: - Engine.Preferences.angleUnit.putPreference(preferences, AngleUnit.rad); - return true; - case R.id.menu_nb_bin: - Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.bin); - return true; - case R.id.menu_nb_dec: - Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.dec); - return true; - case R.id.menu_nb_hex: - Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.hex); - return true; + int itemId = item.getItemId(); + if (itemId == R.id.menu_settings) { + launcher.showSettings(); + return true; + } else if (itemId == R.id.menu_history) { + launcher.showHistory(); + return true; + } else if (itemId == R.id.menu_plotter) { + launcher.showPlotter(); + return true; + } else if (itemId == R.id.menu_conversion_tool) { + ConverterFragment.show(CalculatorActivity.this); + return true; + } else if (itemId == R.id.menu_about) { + launcher.showAbout(); + return true; + } else if (itemId == R.id.menu_mode_engineer) { + Preferences.Gui.mode.putPreference(preferences, Preferences.Gui.Mode.engineer); + restartIfModeChanged(); + return true; + } else if (itemId == R.id.menu_mode_simple) { + Preferences.Gui.mode.putPreference(preferences, Preferences.Gui.Mode.simple); + restartIfModeChanged(); + return true; + } else if (itemId == R.id.menu_au_deg) { + Engine.Preferences.angleUnit.putPreference(preferences, AngleUnit.deg); + return true; + } else if (itemId == R.id.menu_au_rad) { + Engine.Preferences.angleUnit.putPreference(preferences, AngleUnit.rad); + return true; + } else if (itemId == R.id.menu_nb_bin) { + Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.bin); + return true; + } else if (itemId == R.id.menu_nb_dec) { + Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.dec); + return true; + } else if (itemId == R.id.menu_nb_hex) { + Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.hex); + return true; } return false; } @@ -280,4 +283,4 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList } } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java b/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java index 5b5c36a1..475f410c 100644 --- a/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java +++ b/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java @@ -26,7 +26,7 @@ import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Handler; import android.preference.PreferenceManager; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import android.util.TimingLogger; diff --git a/app/src/main/java/org/solovyev/android/calculator/Clipboard.java b/app/src/main/java/org/solovyev/android/calculator/Clipboard.java index 4666e9c3..19af8bf0 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Clipboard.java +++ b/app/src/main/java/org/solovyev/android/calculator/Clipboard.java @@ -23,8 +23,9 @@ package org.solovyev.android.calculator; import android.app.Application; +import android.content.ClipData; +import android.content.ClipboardManager; import android.content.Context; -import android.text.ClipboardManager; import javax.annotation.Nonnull; import javax.inject.Inject; @@ -32,31 +33,30 @@ import javax.inject.Singleton; @Singleton public class Clipboard { - @SuppressWarnings("deprecation") @Nonnull private final ClipboardManager clipboard; - @SuppressWarnings("deprecation") @Inject public Clipboard(@Nonnull Application application) { clipboard = (ClipboardManager) application.getSystemService(Context.CLIPBOARD_SERVICE); } - @SuppressWarnings("deprecation") @Nonnull public String getText() { - if (clipboard.hasText()) { - return String.valueOf(clipboard.getText()); + ClipData primaryClip = clipboard.getPrimaryClip(); + if (primaryClip != null && primaryClip.getItemCount() > 0) { + final CharSequence text = primaryClip.getItemAt(0).getText(); + return text != null ? text.toString() : ""; } return ""; } public void setText(@Nonnull CharSequence text) { - clipboard.setText(text); + clipboard.setPrimaryClip(ClipData.newPlainText("", text)); } public void setText(@Nonnull String text) { - clipboard.setText(text); + setText((CharSequence) text); } } diff --git a/app/src/main/java/org/solovyev/android/calculator/Display.java b/app/src/main/java/org/solovyev/android/calculator/Display.java index 5c46f708..ee3848b8 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Display.java +++ b/app/src/main/java/org/solovyev/android/calculator/Display.java @@ -24,7 +24,7 @@ package org.solovyev.android.calculator; import android.app.Application; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; diff --git a/app/src/main/java/org/solovyev/android/calculator/DisplayFragment.java b/app/src/main/java/org/solovyev/android/calculator/DisplayFragment.java index a0bc62bc..7d8f5149 100644 --- a/app/src/main/java/org/solovyev/android/calculator/DisplayFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/DisplayFragment.java @@ -25,14 +25,12 @@ package org.solovyev.android.calculator; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import android.view.*; -import butterknife.BindView; -import butterknife.ButterKnife; +import androidx.appcompat.app.AlertDialog; import com.squareup.otto.Bus; import jscl.NumeralBase; import jscl.math.Generic; @@ -63,19 +61,17 @@ public class DisplayFragment extends BaseFragment implements View.OnClickListene @Nullable public static ConversionMenuItem getByTitle(int title) { - switch (title) { - case R.string.convert_to_bin: - return to_bin; - case R.string.convert_to_dec: - return to_dec; - case R.string.convert_to_hex: - return to_hex; + if (title == R.string.convert_to_bin) { + return to_bin; + } else if (title == R.string.convert_to_dec) { + return to_dec; + } else if (title == R.string.convert_to_hex) { + return to_hex; } return null; } } - @BindView(R.id.calculator_display) DisplayView displayView; @Inject SharedPreferences preferences; @@ -106,7 +102,7 @@ public class DisplayFragment extends BaseFragment implements View.OnClickListene public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = super.onCreateView(inflater, container, savedInstanceState); - ButterKnife.bind(this, view); + displayView = view.findViewById(R.id.calculator_display); display.setView(displayView); displayView.setOnClickListener(this); return view; @@ -181,30 +177,27 @@ public class DisplayFragment extends BaseFragment implements View.OnClickListene public boolean onMenuItemClick(MenuItem item) { final DisplayState state = display.getState(); final Generic result = state.getResult(); - switch (item.getItemId()) { - case R.string.cpp_copy: - display.copy(); - return true; - case R.string.convert_to_bin: - case R.string.convert_to_dec: - case R.string.convert_to_hex: - final ConversionMenuItem menuItem = ConversionMenuItem.getByTitle(item.getItemId()); - if (menuItem == null) { - return false; - } - if (result != null) { - calculator.convert(state, menuItem.toNumeralBase); - } - return true; - case R.string.c_convert: - ConverterFragment.show(getActivity(), getValue(result)); - return true; - case R.string.c_plot: - launcher.plot(result); - return true; - default: + int itemId = item.getItemId(); + if (itemId == R.string.cpp_copy) { + display.copy(); + return true; + } else if (itemId == R.string.convert_to_bin || itemId == R.string.convert_to_dec || itemId == R.string.convert_to_hex) { + final ConversionMenuItem menuItem = ConversionMenuItem.getByTitle(item.getItemId()); + if (menuItem == null) { return false; + } + if (result != null) { + calculator.convert(state, menuItem.toNumeralBase); + } + return true; + } else if (itemId == R.string.c_convert) { + ConverterFragment.show(getActivity(), getValue(result)); + return true; + } else if (itemId == R.string.c_plot) { + launcher.plot(result); + return true; } + return false; } private static double getValue(@Nullable Generic result) { diff --git a/app/src/main/java/org/solovyev/android/calculator/DisplayView.java b/app/src/main/java/org/solovyev/android/calculator/DisplayView.java index 2862953a..df3ae3af 100644 --- a/app/src/main/java/org/solovyev/android/calculator/DisplayView.java +++ b/app/src/main/java/org/solovyev/android/calculator/DisplayView.java @@ -28,8 +28,8 @@ import static android.util.TypedValue.applyDimension; import android.content.Context; import android.content.res.Resources; import android.os.AsyncTask; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.text.method.ScrollingMovementMethod; import android.util.AttributeSet; diff --git a/app/src/main/java/org/solovyev/android/calculator/Editor.java b/app/src/main/java/org/solovyev/android/calculator/Editor.java index 833b0c62..cbef5713 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Editor.java +++ b/app/src/main/java/org/solovyev/android/calculator/Editor.java @@ -27,8 +27,8 @@ import static java.lang.Math.min; import android.app.Application; import android.content.SharedPreferences; import android.os.AsyncTask; -import android.support.annotation.NonNull; -import android.support.annotation.VisibleForTesting; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import android.text.TextUtils; import com.squareup.otto.Bus; @@ -173,12 +173,13 @@ public class Editor { state = newState; cancelAsyncHighlightText(); - highlighterTask = new AsyncHighlighter(oldState, newState, force, textProcessor); - if (highlighterTask.shouldAsync()) { - highlighterTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + AsyncHighlighter newHighlighterTask = new AsyncHighlighter(oldState, newState, force, textProcessor); + highlighterTask = newHighlighterTask; + if (newHighlighterTask.shouldAsync()) { + newHighlighterTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); return; } - highlighterTask.onPostExecute(newState); + newHighlighterTask.onPostExecute(newState); Check.isNull(highlighterTask); } diff --git a/app/src/main/java/org/solovyev/android/calculator/EditorFragment.java b/app/src/main/java/org/solovyev/android/calculator/EditorFragment.java index 08e6c1c8..2f0b7712 100644 --- a/app/src/main/java/org/solovyev/android/calculator/EditorFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/EditorFragment.java @@ -26,17 +26,15 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import butterknife.BindView; -import butterknife.ButterKnife; import javax.annotation.Nonnull; import javax.inject.Inject; +import org.solovyev.android.calculator.databinding.CppAppEditorBinding; public class EditorFragment extends BaseFragment { @Inject Editor editor; - @BindView(R.id.calculator_editor) EditorView editorView; public EditorFragment() { @@ -52,7 +50,8 @@ public class EditorFragment extends BaseFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = super.onCreateView(inflater, container, savedInstanceState); - ButterKnife.bind(this, view); + CppAppEditorBinding binding = CppAppEditorBinding.bind(view); + editorView = binding.calculatorEditor; editor.setView(editorView); return view; } diff --git a/app/src/main/java/org/solovyev/android/calculator/Engine.java b/app/src/main/java/org/solovyev/android/calculator/Engine.java index 378c73ce..d384f7d8 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Engine.java +++ b/app/src/main/java/org/solovyev/android/calculator/Engine.java @@ -24,9 +24,9 @@ package org.solovyev.android.calculator; import android.content.Context; import android.content.SharedPreferences; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.annotation.VisibleForTesting; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; +import androidx.annotation.VisibleForTesting; import android.text.TextUtils; import com.squareup.otto.Bus; diff --git a/app/src/main/java/org/solovyev/android/calculator/FloatingCalculatorKeyboard.java b/app/src/main/java/org/solovyev/android/calculator/FloatingCalculatorKeyboard.java index 422a3bc7..c9d1f9ae 100644 --- a/app/src/main/java/org/solovyev/android/calculator/FloatingCalculatorKeyboard.java +++ b/app/src/main/java/org/solovyev/android/calculator/FloatingCalculatorKeyboard.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; import android.text.TextUtils; import android.view.View; import android.widget.Button; @@ -174,47 +174,34 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard { if (user.isVibrateOnKeypress()) { v.performHapticFeedback(KEYBOARD_TAP, FLAG_IGNORE_GLOBAL_SETTING | FLAG_IGNORE_VIEW_SETTING); } - switch (v.getId()) { - case R.id.cpp_kb_button_divide: - user.insertOperator('/'); - break; - case R.id.cpp_kb_button_plus: - user.insertOperator('+'); - break; - case R.id.cpp_kb_button_minus: - user.insertOperator('-'); - break; - case R.id.cpp_kb_button_multiply: - user.insertOperator("×"); - break; - case R.id.cpp_kb_button_functions_constants: - user.showFunctionsConstants(v); - break; - case R.id.cpp_kb_button_functions: - user.showFunctions(v); - break; - case R.id.cpp_kb_button_constants: - user.showConstants(v); - break; - case R.id.cpp_kb_button_space: - user.insertText(" ", 0); - break; - case R.id.cpp_kb_button_keyboard: - user.showIme(); - break; - case R.id.cpp_kb_button_clear: - user.getEditor().setText(""); - user.getEditor().setSelection(0); - break; - case R.id.cpp_kb_button_brackets: - user.insertText("()", -1); - break; - case R.id.cpp_kb_button_close: - user.done(); - break; - default: - onDefaultClick(v); - break; + int id = v.getId(); + if (id == R.id.cpp_kb_button_divide) { + user.insertOperator('/'); + } else if (id == R.id.cpp_kb_button_plus) { + user.insertOperator('+'); + } else if (id == R.id.cpp_kb_button_minus) { + user.insertOperator('-'); + } else if (id == R.id.cpp_kb_button_multiply) { + user.insertOperator("×"); + } else if (id == R.id.cpp_kb_button_functions_constants) { + user.showFunctionsConstants(v); + } else if (id == R.id.cpp_kb_button_functions) { + user.showFunctions(v); + } else if (id == R.id.cpp_kb_button_constants) { + user.showConstants(v); + } else if (id == R.id.cpp_kb_button_space) { + user.insertText(" ", 0); + } else if (id == R.id.cpp_kb_button_keyboard) { + user.showIme(); + } else if (id == R.id.cpp_kb_button_clear) { + user.getEditor().setText(""); + user.getEditor().setSelection(0); + } else if (id == R.id.cpp_kb_button_brackets) { + user.insertText("()", -1); + } else if (id == R.id.cpp_kb_button_close) { + user.done(); + } else { + onDefaultClick(v); } user.getEditor().requestFocus(); } @@ -256,4 +243,4 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard { return true; } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/FragmentTab.java b/app/src/main/java/org/solovyev/android/calculator/FragmentTab.java index cd574fa1..3cedcf85 100644 --- a/app/src/main/java/org/solovyev/android/calculator/FragmentTab.java +++ b/app/src/main/java/org/solovyev/android/calculator/FragmentTab.java @@ -22,8 +22,8 @@ package org.solovyev.android.calculator; -import android.support.annotation.StringRes; -import android.support.v4.app.Fragment; +import androidx.annotation.StringRes; +import androidx.fragment.app.Fragment; import org.solovyev.android.calculator.about.AboutFragment; import org.solovyev.android.calculator.about.ReleaseNotesFragment; import org.solovyev.android.calculator.functions.FunctionsFragment; diff --git a/app/src/main/java/org/solovyev/android/calculator/Keyboard.java b/app/src/main/java/org/solovyev/android/calculator/Keyboard.java index 2e23ef19..1af378a9 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Keyboard.java +++ b/app/src/main/java/org/solovyev/android/calculator/Keyboard.java @@ -25,7 +25,7 @@ package org.solovyev.android.calculator; import static org.solovyev.android.calculator.Engine.Preferences.numeralBase; import android.content.SharedPreferences; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.Spannable; import android.text.TextUtils; import android.util.Log; @@ -366,4 +366,4 @@ public class Keyboard implements SharedPreferences.OnSharedPreferenceChangeListe this.mode = mode; } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/KeyboardFragment.java b/app/src/main/java/org/solovyev/android/calculator/KeyboardFragment.java index 2650c0f2..8d5e4ebb 100644 --- a/app/src/main/java/org/solovyev/android/calculator/KeyboardFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/KeyboardFragment.java @@ -22,12 +22,10 @@ package org.solovyev.android.calculator; -import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import butterknife.ButterKnife; import org.solovyev.android.Check; import org.solovyev.android.calculator.keyboard.KeyboardUi; @@ -36,8 +34,6 @@ import javax.inject.Inject; public class KeyboardFragment extends BaseFragment { - @Inject - SharedPreferences preferences; @Inject KeyboardUi keyboardUi; @@ -54,7 +50,6 @@ public class KeyboardFragment extends BaseFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = super.onCreateView(inflater, container, savedInstanceState); - ButterKnife.bind(this, view); Check.isNotNull(view); keyboardUi.onCreateView(getActivity(), view); return view; diff --git a/app/src/main/java/org/solovyev/android/calculator/Named.java b/app/src/main/java/org/solovyev/android/calculator/Named.java index bea042f6..b13f6aa5 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Named.java +++ b/app/src/main/java/org/solovyev/android/calculator/Named.java @@ -1,8 +1,8 @@ package org.solovyev.android.calculator; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; import javax.annotation.Nonnull; diff --git a/app/src/main/java/org/solovyev/android/calculator/Notifier.java b/app/src/main/java/org/solovyev/android/calculator/Notifier.java index 0fc4d6d2..016d7609 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Notifier.java +++ b/app/src/main/java/org/solovyev/android/calculator/Notifier.java @@ -24,7 +24,7 @@ package org.solovyev.android.calculator; import android.app.Application; import android.os.Handler; -import android.support.annotation.StringRes; +import androidx.annotation.StringRes; import android.widget.Toast; import org.solovyev.common.msg.Message; diff --git a/app/src/main/java/org/solovyev/android/calculator/Preferences.java b/app/src/main/java/org/solovyev/android/calculator/Preferences.java index 59872058..6969604d 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Preferences.java +++ b/app/src/main/java/org/solovyev/android/calculator/Preferences.java @@ -31,11 +31,11 @@ import android.content.SharedPreferences; import android.content.res.TypedArray; import android.graphics.Color; import android.provider.Settings; -import android.support.annotation.ColorRes; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.annotation.StyleRes; +import androidx.annotation.ColorRes; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; +import androidx.annotation.StyleRes; import android.text.TextUtils; import android.util.SparseArray; import android.view.ContextThemeWrapper; diff --git a/app/src/main/java/org/solovyev/android/calculator/PreparedExpression.java b/app/src/main/java/org/solovyev/android/calculator/PreparedExpression.java index cdc19d42..5d2cb6e7 100644 --- a/app/src/main/java/org/solovyev/android/calculator/PreparedExpression.java +++ b/app/src/main/java/org/solovyev/android/calculator/PreparedExpression.java @@ -22,7 +22,7 @@ package org.solovyev.android.calculator; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import jscl.math.function.IConstant; import javax.annotation.Nonnull; diff --git a/app/src/main/java/org/solovyev/android/calculator/RemovalConfirmationDialog.java b/app/src/main/java/org/solovyev/android/calculator/RemovalConfirmationDialog.java index 0d2ace06..106b3f79 100644 --- a/app/src/main/java/org/solovyev/android/calculator/RemovalConfirmationDialog.java +++ b/app/src/main/java/org/solovyev/android/calculator/RemovalConfirmationDialog.java @@ -2,9 +2,9 @@ package org.solovyev.android.calculator; import android.app.Activity; import android.content.DialogInterface; -import android.support.annotation.StringRes; -import android.support.v7.app.AlertDialog; +import androidx.annotation.StringRes; +import androidx.appcompat.app.AlertDialog; import javax.annotation.Nonnull; public class RemovalConfirmationDialog { diff --git a/app/src/main/java/org/solovyev/android/calculator/Runnables.java b/app/src/main/java/org/solovyev/android/calculator/Runnables.java index 7b4470bd..02db9c07 100644 --- a/app/src/main/java/org/solovyev/android/calculator/Runnables.java +++ b/app/src/main/java/org/solovyev/android/calculator/Runnables.java @@ -1,6 +1,6 @@ package org.solovyev.android.calculator; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.Check; import java.util.ArrayList; diff --git a/app/src/main/java/org/solovyev/android/calculator/StartupHelper.java b/app/src/main/java/org/solovyev/android/calculator/StartupHelper.java index 6c6bfc22..cbce0678 100644 --- a/app/src/main/java/org/solovyev/android/calculator/StartupHelper.java +++ b/app/src/main/java/org/solovyev/android/calculator/StartupHelper.java @@ -6,9 +6,9 @@ import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; import org.solovyev.android.calculator.wizard.CalculatorWizards; import org.solovyev.android.wizard.Wizard; import org.solovyev.android.wizard.Wizards; diff --git a/app/src/main/java/org/solovyev/android/calculator/TaskExecutor.java b/app/src/main/java/org/solovyev/android/calculator/TaskExecutor.java index 1a4a2b19..a1a9f3e5 100644 --- a/app/src/main/java/org/solovyev/android/calculator/TaskExecutor.java +++ b/app/src/main/java/org/solovyev/android/calculator/TaskExecutor.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator; -import android.support.annotation.NonNull; -import android.support.annotation.VisibleForTesting; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import android.util.Log; import org.solovyev.android.Check; @@ -118,4 +118,4 @@ class TaskExecutor { void setSynchronous() { synchronous = true; } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/ToJsclTextProcessor.java b/app/src/main/java/org/solovyev/android/calculator/ToJsclTextProcessor.java index 4ab0fe64..93472565 100644 --- a/app/src/main/java/org/solovyev/android/calculator/ToJsclTextProcessor.java +++ b/app/src/main/java/org/solovyev/android/calculator/ToJsclTextProcessor.java @@ -41,7 +41,7 @@ public class ToJsclTextProcessor implements TextProcessor undefinedVars, @Nonnull Engine engine) throws ParseException { - return replaceVariables(processExpression(s, engine).toString(), depth, undefinedVars, engine); + return replaceVariables(processExpression(removeWhitespaces(s), engine).toString(), depth, undefinedVars, engine); + } + + private static String removeWhitespaces(String s) { + final StringBuilder res = new StringBuilder(s.length()); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (Character.isWhitespace(c)) continue; + res.append(c); + } + return res.toString(); } @Nonnull diff --git a/app/src/main/java/org/solovyev/android/calculator/UiPreferences.java b/app/src/main/java/org/solovyev/android/calculator/UiPreferences.java index 1668650e..d47fcaf7 100644 --- a/app/src/main/java/org/solovyev/android/calculator/UiPreferences.java +++ b/app/src/main/java/org/solovyev/android/calculator/UiPreferences.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator; import android.content.SharedPreferences; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.prefs.BooleanPreference; import org.solovyev.android.prefs.IntegerPreference; diff --git a/app/src/main/java/org/solovyev/android/calculator/VariablesRegistry.java b/app/src/main/java/org/solovyev/android/calculator/VariablesRegistry.java index 19063c67..3e169f24 100644 --- a/app/src/main/java/org/solovyev/android/calculator/VariablesRegistry.java +++ b/app/src/main/java/org/solovyev/android/calculator/VariablesRegistry.java @@ -22,7 +22,7 @@ package org.solovyev.android.calculator; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import com.google.common.base.Strings; diff --git a/app/src/main/java/org/solovyev/android/calculator/WidgetReceiver.java b/app/src/main/java/org/solovyev/android/calculator/WidgetReceiver.java index 8c7ab933..2199bab5 100644 --- a/app/src/main/java/org/solovyev/android/calculator/WidgetReceiver.java +++ b/app/src/main/java/org/solovyev/android/calculator/WidgetReceiver.java @@ -4,7 +4,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Vibrator; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import org.solovyev.android.calculator.buttons.CppButton; @@ -40,7 +40,9 @@ public final class WidgetReceiver extends BroadcastReceiver { return; } - cast(context).getComponent().inject(this); + if (keyboard == null || history == null) { + cast(context).getComponent().inject(this); + } final int buttonId = intent.getIntExtra(ACTION_BUTTON_ID_EXTRA, 0); final CppButton button = CppButton.getById(buttonId); diff --git a/app/src/main/java/org/solovyev/android/calculator/about/AboutActivity.java b/app/src/main/java/org/solovyev/android/calculator/about/AboutActivity.java index 5bd6a65e..8e867cb3 100644 --- a/app/src/main/java/org/solovyev/android/calculator/about/AboutActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/about/AboutActivity.java @@ -23,7 +23,7 @@ package org.solovyev.android.calculator.about; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.BaseActivity; diff --git a/app/src/main/java/org/solovyev/android/calculator/about/AboutFragment.java b/app/src/main/java/org/solovyev/android/calculator/about/AboutFragment.java index ad83a71f..738aa090 100644 --- a/app/src/main/java/org/solovyev/android/calculator/about/AboutFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/about/AboutFragment.java @@ -29,24 +29,19 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import butterknife.BindView; -import butterknife.ButterKnife; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.BaseFragment; import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.databinding.FragmentAboutBinding; import static android.view.View.GONE; import static org.solovyev.common.text.Strings.isEmpty; public class AboutFragment extends BaseFragment { - @BindView(R.id.about_image) ImageView imageView; - @BindView(R.id.about_text) TextView textView; - @BindView(R.id.about_translators_label) TextView translatorsLabel; - @BindView(R.id.about_translators) TextView translatorsView; public AboutFragment() { @@ -56,7 +51,11 @@ public class AboutFragment extends BaseFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = super.onCreateView(inflater, container, savedInstanceState); - ButterKnife.bind(this, view); + final FragmentAboutBinding binding = FragmentAboutBinding.bind(view); + imageView = binding.aboutImage; + textView = binding.aboutText; + translatorsLabel = binding.aboutTranslatorsLabel; + translatorsView = binding.aboutTranslators; if (App.getTheme().light) { imageView.setImageResource(R.drawable.logo_wizard_light); } diff --git a/app/src/main/java/org/solovyev/android/calculator/about/ReleaseNotesFragment.java b/app/src/main/java/org/solovyev/android/calculator/about/ReleaseNotesFragment.java index 78e3e10a..6f2b3f92 100644 --- a/app/src/main/java/org/solovyev/android/calculator/about/ReleaseNotesFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/about/ReleaseNotesFragment.java @@ -29,15 +29,13 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import butterknife.BindView; -import butterknife.ButterKnife; import org.solovyev.android.calculator.BaseFragment; import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.databinding.FragmentReleaseNotesBinding; import org.solovyev.android.calculator.release.ReleaseNotes; public class ReleaseNotesFragment extends BaseFragment { - @BindView(R.id.releasenotes_text) TextView text; public ReleaseNotesFragment() { @@ -47,7 +45,8 @@ public class ReleaseNotesFragment extends BaseFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = super.onCreateView(inflater, container, savedInstanceState); - ButterKnife.bind(this, view); + final FragmentReleaseNotesBinding binding = FragmentReleaseNotesBinding.bind(view); + text = binding.releasenotesText; text.setMovementMethod(LinkMovementMethod.getInstance()); text.setText(Html.fromHtml(ReleaseNotes.getReleaseNotes(getActivity()))); return view; diff --git a/app/src/main/java/org/solovyev/android/calculator/ads/AdUi.java b/app/src/main/java/org/solovyev/android/calculator/ads/AdUi.java index a0961827..70f78d20 100644 --- a/app/src/main/java/org/solovyev/android/calculator/ads/AdUi.java +++ b/app/src/main/java/org/solovyev/android/calculator/ads/AdUi.java @@ -4,7 +4,7 @@ import static org.solovyev.android.checkout.ProductTypes.IN_APP; import android.os.Handler; import android.os.Looper; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; import org.solovyev.android.calculator.AdView; @@ -16,8 +16,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; public class AdUi { @@ -26,7 +24,6 @@ public class AdUi { @NonNull private final Handler handler; @Nullable - @BindView(R.id.cpp_ad) AdView adView; @Nullable private Boolean adFree = null; @@ -92,7 +89,7 @@ public class AdUi { } public void onCreateView(@NonNull View view) { - ButterKnife.bind(this, view); + adView = view.findViewById(R.id.cpp_ad); } public void onPause() { diff --git a/app/src/main/java/org/solovyev/android/calculator/calculations/BaseConversionEvent.java b/app/src/main/java/org/solovyev/android/calculator/calculations/BaseConversionEvent.java index 2d011639..d6d10889 100644 --- a/app/src/main/java/org/solovyev/android/calculator/calculations/BaseConversionEvent.java +++ b/app/src/main/java/org/solovyev/android/calculator/calculations/BaseConversionEvent.java @@ -1,6 +1,6 @@ package org.solovyev.android.calculator.calculations; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.calculator.DisplayState; diff --git a/app/src/main/java/org/solovyev/android/calculator/calculations/ConversionFailedEvent.java b/app/src/main/java/org/solovyev/android/calculator/calculations/ConversionFailedEvent.java index 62636d8d..d689f317 100644 --- a/app/src/main/java/org/solovyev/android/calculator/calculations/ConversionFailedEvent.java +++ b/app/src/main/java/org/solovyev/android/calculator/calculations/ConversionFailedEvent.java @@ -1,6 +1,6 @@ package org.solovyev.android.calculator.calculations; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.calculator.DisplayState; diff --git a/app/src/main/java/org/solovyev/android/calculator/calculations/ConversionFinishedEvent.java b/app/src/main/java/org/solovyev/android/calculator/calculations/ConversionFinishedEvent.java index 7c207923..50743a03 100644 --- a/app/src/main/java/org/solovyev/android/calculator/calculations/ConversionFinishedEvent.java +++ b/app/src/main/java/org/solovyev/android/calculator/calculations/ConversionFinishedEvent.java @@ -1,6 +1,6 @@ package org.solovyev.android.calculator.calculations; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.calculator.DisplayState; diff --git a/app/src/main/java/org/solovyev/android/calculator/converter/Converter.java b/app/src/main/java/org/solovyev/android/calculator/converter/Converter.java index bb2dc58d..8307be89 100644 --- a/app/src/main/java/org/solovyev/android/calculator/converter/Converter.java +++ b/app/src/main/java/org/solovyev/android/calculator/converter/Converter.java @@ -1,14 +1,14 @@ package org.solovyev.android.calculator.converter; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import com.google.common.base.Strings; +import javax.measure.unit.Unit; import jscl.JsclMathEngine; import midpcalc.Real; import org.solovyev.android.calculator.R; import javax.annotation.Nonnull; -import javax.measure.unit.Unit; final class Converter { static int unitName(@Nonnull Unit unit, @Nonnull UnitDimension dimension) { diff --git a/app/src/main/java/org/solovyev/android/calculator/converter/ConverterFragment.java b/app/src/main/java/org/solovyev/android/calculator/converter/ConverterFragment.java index 2cf22c3e..c51a2f8a 100644 --- a/app/src/main/java/org/solovyev/android/calculator/converter/ConverterFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/converter/ConverterFragment.java @@ -6,11 +6,8 @@ import android.content.DialogInterface; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.design.widget.TextInputLayout; -import android.support.v4.app.FragmentActivity; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.Editable; import android.text.InputType; import android.text.TextUtils; @@ -29,6 +26,9 @@ import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentActivity; +import com.google.android.material.textfield.TextInputLayout; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.AppModule; @@ -38,6 +38,7 @@ import org.solovyev.android.calculator.Editor; import org.solovyev.android.calculator.Keyboard; import org.solovyev.android.calculator.Named; import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.databinding.CppUnitConverterBinding; import org.solovyev.android.calculator.keyboard.FloatingKeyboard; import org.solovyev.android.calculator.keyboard.FloatingKeyboardWindow; import org.solovyev.android.calculator.keyboard.FloatingNumberKeyboard; @@ -48,9 +49,6 @@ import org.solovyev.android.calculator.view.EditTextCompat; import javax.annotation.Nonnull; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; - import static org.solovyev.android.calculator.UiPreferences.Converter.lastDimension; import static org.solovyev.android.calculator.UiPreferences.Converter.lastUnitsFrom; import static org.solovyev.android.calculator.UiPreferences.Converter.lastUnitsTo; @@ -77,21 +75,13 @@ public class ConverterFragment extends BaseDialogFragment SharedPreferences uiPreferences; @Inject Editor editor; - @BindView(R.id.converter_dimensions_spinner) Spinner dimensionsSpinner; - @BindView(R.id.converter_spinner_from) Spinner spinnerFrom; - @BindView(R.id.converter_label_from) TextInputLayout labelFrom; - @BindView(R.id.converter_edittext_from) EditTextCompat editTextFrom; - @BindView(R.id.converter_spinner_to) Spinner spinnerTo; - @BindView(R.id.converter_label_to) TextInputLayout labelTo; - @BindView(R.id.converter_edittext_to) EditText editTextTo; - @BindView(R.id.converter_swap_button) ImageButton swapButton; private ArrayAdapter> dimensionsAdapter; private ArrayAdapter> adapterFrom; @@ -139,9 +129,15 @@ public class ConverterFragment extends BaseDialogFragment @Override protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, @Nullable Bundle savedInstanceState) { - final View view = inflater.inflate(R.layout.cpp_unit_converter, null); - ButterKnife.bind(this, view); - + final CppUnitConverterBinding binding = CppUnitConverterBinding.inflate(inflater, null, false); + dimensionsSpinner = binding.converterDimensionsSpinner; + spinnerFrom = binding.converterSpinnerFrom; + labelFrom = binding.converterLabelFrom; + editTextFrom = binding.converterEdittextFrom; + spinnerTo = binding.converterSpinnerTo; + labelTo = binding.converterLabelTo; + editTextTo = binding.converterEdittextTo; + swapButton = binding.converterSwapButton; dimensionsAdapter = App.makeSimpleSpinnerAdapter(context); for (ConvertibleDimension dimension : UnitDimension.values()) { dimensionsAdapter.add(dimension.named(context)); @@ -177,7 +173,7 @@ public class ConverterFragment extends BaseDialogFragment pendingToSelection = savedInstanceState.getInt(STATE_SELECTION_TO, NONE); } - return view; + return binding.getRoot(); } @Override @@ -203,16 +199,13 @@ public class ConverterFragment extends BaseDialogFragment @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { - switch (parent.getId()) { - case R.id.converter_dimensions_spinner: - onDimensionChanged(dimensionsAdapter.getItem(position).item); - break; - case R.id.converter_spinner_from: - onUnitFromChanged(adapterFrom.getItem(position).item); - break; - case R.id.converter_spinner_to: - convert(); - break; + int parentId = parent.getId(); + if (parentId == R.id.converter_dimensions_spinner) { + onDimensionChanged(dimensionsAdapter.getItem(position).item); + } else if (parentId == R.id.converter_spinner_from) { + onUnitFromChanged(adapterFrom.getItem(position).item); + } else if (parentId == R.id.converter_spinner_to) { + convert(); } } @@ -299,15 +292,13 @@ public class ConverterFragment extends BaseDialogFragment @Override public void onFocusChange(View v, boolean hasFocus) { - switch (v.getId()) { - case R.id.converter_edittext_from: - if (!hasFocus) { - convert(); - } else { - clearError(labelFrom); - showKeyboard(); - } - break; + if (v.getId() == R.id.converter_edittext_from) { + if (!hasFocus) { + convert(); + } else { + clearError(labelFrom); + showKeyboard(); + } } } @@ -346,31 +337,26 @@ public class ConverterFragment extends BaseDialogFragment @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - switch (v.getId()) { - case R.id.converter_edittext_from: - if (actionId == EditorInfo.IME_ACTION_DONE) { - App.hideIme(editTextFrom); - convert(); - return true; - } - break; + if (v.getId() == R.id.converter_edittext_from) { + if (actionId == EditorInfo.IME_ACTION_DONE) { + App.hideIme(editTextFrom); + convert(); + return true; + } } return false; } @Override public void onClick(View v) { - switch (v.getId()) { - case R.id.converter_swap_button: - keyboardWindow.hide(); - swap(); - break; - case R.id.converter_edittext_from: - showKeyboard(); - break; - default: - super.onClick(v); - break; + int id = v.getId(); + if (id == R.id.converter_swap_button) { + keyboardWindow.hide(); + swap(); + } else if (id == R.id.converter_edittext_from) { + showKeyboard(); + } else { + super.onClick(v); } } diff --git a/app/src/main/java/org/solovyev/android/calculator/converter/Convertible.java b/app/src/main/java/org/solovyev/android/calculator/converter/Convertible.java index 701fe7b0..dbee74a1 100644 --- a/app/src/main/java/org/solovyev/android/calculator/converter/Convertible.java +++ b/app/src/main/java/org/solovyev/android/calculator/converter/Convertible.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.converter; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.calculator.Named; diff --git a/app/src/main/java/org/solovyev/android/calculator/converter/ConvertibleDimension.java b/app/src/main/java/org/solovyev/android/calculator/converter/ConvertibleDimension.java index f945b4dc..4e485141 100644 --- a/app/src/main/java/org/solovyev/android/calculator/converter/ConvertibleDimension.java +++ b/app/src/main/java/org/solovyev/android/calculator/converter/ConvertibleDimension.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.converter; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.calculator.Named; diff --git a/app/src/main/java/org/solovyev/android/calculator/converter/NumeralBaseConvertible.java b/app/src/main/java/org/solovyev/android/calculator/converter/NumeralBaseConvertible.java index 5c5dc63c..e5ba81f8 100644 --- a/app/src/main/java/org/solovyev/android/calculator/converter/NumeralBaseConvertible.java +++ b/app/src/main/java/org/solovyev/android/calculator/converter/NumeralBaseConvertible.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.converter; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.calculator.Named; diff --git a/app/src/main/java/org/solovyev/android/calculator/converter/NumeralBaseDimension.java b/app/src/main/java/org/solovyev/android/calculator/converter/NumeralBaseDimension.java index 8368101e..17c338ce 100644 --- a/app/src/main/java/org/solovyev/android/calculator/converter/NumeralBaseDimension.java +++ b/app/src/main/java/org/solovyev/android/calculator/converter/NumeralBaseDimension.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.converter; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import jscl.NumeralBase; import org.solovyev.android.calculator.Named; diff --git a/app/src/main/java/org/solovyev/android/calculator/converter/UnitConvertible.java b/app/src/main/java/org/solovyev/android/calculator/converter/UnitConvertible.java index 91aadf3f..20ae3160 100644 --- a/app/src/main/java/org/solovyev/android/calculator/converter/UnitConvertible.java +++ b/app/src/main/java/org/solovyev/android/calculator/converter/UnitConvertible.java @@ -1,15 +1,15 @@ package org.solovyev.android.calculator.converter; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; +import javax.measure.unit.Unit; import org.solovyev.android.calculator.Named; import jscl.JsclMathEngine; import jscl.NumeralBase; import javax.annotation.Nonnull; -import javax.measure.unit.Unit; final class UnitConvertible implements Convertible { @NonNull diff --git a/app/src/main/java/org/solovyev/android/calculator/converter/UnitDimension.java b/app/src/main/java/org/solovyev/android/calculator/converter/UnitDimension.java index 9fbd4b35..499fb0cf 100644 --- a/app/src/main/java/org/solovyev/android/calculator/converter/UnitDimension.java +++ b/app/src/main/java/org/solovyev/android/calculator/converter/UnitDimension.java @@ -1,9 +1,9 @@ package org.solovyev.android.calculator.converter; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import org.solovyev.android.calculator.Named; import org.solovyev.android.calculator.R; diff --git a/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesFragment.java b/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesFragment.java index 56b432e2..dce928ba 100644 --- a/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesFragment.java @@ -25,11 +25,11 @@ package org.solovyev.android.calculator.entities; import android.app.Activity; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.FragmentActivity; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentActivity; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.text.ClipboardManager; import android.text.TextUtils; import android.view.ContextMenu; @@ -45,6 +45,8 @@ import org.solovyev.android.calculator.BaseFragment; import org.solovyev.android.calculator.CalculatorActivity; import org.solovyev.android.calculator.Keyboard; import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.databinding.FragmentEntitiesBinding; +import org.solovyev.android.calculator.databinding.FragmentEntitiesItemBinding; import org.solovyev.common.math.MathEntity; import org.solovyev.common.text.Strings; @@ -57,8 +59,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; public abstract class BaseEntitiesFragment extends BaseFragment { @@ -71,7 +71,6 @@ public abstract class BaseEntitiesFragment extends BaseFra } }; - @BindView(R.id.entities_recyclerview) public RecyclerView recyclerView; @Inject Keyboard keyboard; @@ -96,7 +95,8 @@ public abstract class BaseEntitiesFragment extends BaseFra @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = super.onCreateView(inflater, container, savedInstanceState); - ButterKnife.bind(this, view); + final FragmentEntitiesBinding binding = FragmentEntitiesBinding.bind(view); + recyclerView = binding.entitiesRecyclerview; final Context context = inflater.getContext(); adapter = new EntitiesAdapter(context, TextUtils.isEmpty(category) ? getEntities() : getEntities(category)); recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); @@ -204,19 +204,18 @@ public abstract class BaseEntitiesFragment extends BaseFra protected abstract boolean onMenuItemClicked(@Nonnull MenuItem item, @Nonnull E entity); public class EntityViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener { - @BindView(R.id.entity_text) TextView textView; - @BindView(R.id.entity_description) TextView descriptionView; @Nullable private E entity; - public EntityViewHolder(@Nonnull View view) { - super(view); + public EntityViewHolder(@Nonnull FragmentEntitiesItemBinding binding) { + super(binding.getRoot()); BaseActivity.fixFonts(itemView, typeface); - ButterKnife.bind(this, view); - view.setOnClickListener(this); - view.setOnCreateContextMenuListener(this); + textView = binding.entityText; + descriptionView = binding.entityDescription; + itemView.setOnClickListener(this); + itemView.setOnCreateContextMenuListener(this); } public void bind(@Nonnull E entity) { @@ -266,7 +265,7 @@ public abstract class BaseEntitiesFragment extends BaseFra @Override public EntityViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new EntityViewHolder(inflater.inflate(R.layout.fragment_entities_item, parent, false)); + return new EntityViewHolder(FragmentEntitiesItemBinding.inflate(inflater, parent, false)); } @Override diff --git a/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesRegistry.java b/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesRegistry.java index 01af496f..2ea1df86 100644 --- a/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesRegistry.java +++ b/app/src/main/java/org/solovyev/android/calculator/entities/BaseEntitiesRegistry.java @@ -25,8 +25,8 @@ package org.solovyev.android.calculator.entities; import android.app.Application; import android.content.SharedPreferences; import android.os.Handler; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; import com.squareup.otto.Bus; diff --git a/app/src/main/java/org/solovyev/android/calculator/entities/Category.java b/app/src/main/java/org/solovyev/android/calculator/entities/Category.java index bab2a075..0495dfca 100644 --- a/app/src/main/java/org/solovyev/android/calculator/entities/Category.java +++ b/app/src/main/java/org/solovyev/android/calculator/entities/Category.java @@ -1,6 +1,6 @@ package org.solovyev.android.calculator.entities; -import android.support.annotation.StringRes; +import androidx.annotation.StringRes; import org.solovyev.common.math.MathEntity; diff --git a/app/src/main/java/org/solovyev/android/calculator/entities/Entities.java b/app/src/main/java/org/solovyev/android/calculator/entities/Entities.java index 00fc61e9..1d96451b 100644 --- a/app/src/main/java/org/solovyev/android/calculator/entities/Entities.java +++ b/app/src/main/java/org/solovyev/android/calculator/entities/Entities.java @@ -1,6 +1,6 @@ package org.solovyev.android.calculator.entities; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.common.math.MathEntity; diff --git a/app/src/main/java/org/solovyev/android/calculator/errors/FixableErrorFragment.java b/app/src/main/java/org/solovyev/android/calculator/errors/FixableErrorFragment.java index a691dd25..61b18eba 100644 --- a/app/src/main/java/org/solovyev/android/calculator/errors/FixableErrorFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/errors/FixableErrorFragment.java @@ -3,10 +3,10 @@ package org.solovyev.android.calculator.errors; import android.app.Activity; import android.content.DialogInterface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.FragmentManager; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentManager; import org.solovyev.android.Check; import org.solovyev.android.calculator.*; diff --git a/app/src/main/java/org/solovyev/android/calculator/errors/FixableErrorsActivity.java b/app/src/main/java/org/solovyev/android/calculator/errors/FixableErrorsActivity.java index 4352314d..4a64da98 100644 --- a/app/src/main/java/org/solovyev/android/calculator/errors/FixableErrorsActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/errors/FixableErrorsActivity.java @@ -26,8 +26,8 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.UiPreferences; import org.solovyev.common.msg.Message; diff --git a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorActivity.java b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorActivity.java index 020db385..730b8d52 100644 --- a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorActivity.java @@ -27,11 +27,11 @@ import android.content.DialogInterface; import android.os.Build; import android.os.Bundle; import android.provider.Settings; -import android.support.annotation.NonNull; -import android.support.v4.app.FragmentActivity; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentActivity; import org.solovyev.android.Check; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.BaseDialogFragment; diff --git a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorService.java b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorService.java index 1bdd644d..fbf40e13 100644 --- a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorService.java +++ b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorService.java @@ -29,7 +29,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.IBinder; -import android.support.v4.app.NotificationCompat; +import androidx.core.app.NotificationCompat; import android.util.DisplayMetrics; import android.view.WindowManager; import com.squareup.otto.Bus; @@ -177,7 +177,7 @@ public class FloatingCalculatorService extends Service implements FloatingViewLi builder.setOngoing(true); final Intent intent = createShowWindowIntent(this); - builder.setContentIntent(PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); + builder.setContentIntent(PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)); final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); nm.notify(NOTIFICATION_ID, builder.build()); diff --git a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorView.java b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorView.java index f1cdd753..d1fe5005 100644 --- a/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorView.java +++ b/app/src/main/java/org/solovyev/android/calculator/floating/FloatingCalculatorView.java @@ -32,7 +32,7 @@ import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.DisplayMetrics; import android.view.ContextThemeWrapper; import android.view.Display; @@ -209,7 +209,7 @@ public class FloatingCalculatorView { y = in.readInt(); } - @android.support.annotation.Nullable + @androidx.annotation.Nullable public static State fromPrefs(@NonNull SharedPreferences prefs) { if(!prefs.contains("width")) { return null; diff --git a/app/src/main/java/org/solovyev/android/calculator/functions/BaseFunctionFragment.java b/app/src/main/java/org/solovyev/android/calculator/functions/BaseFunctionFragment.java index 1ff41561..51be036e 100644 --- a/app/src/main/java/org/solovyev/android/calculator/functions/BaseFunctionFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/functions/BaseFunctionFragment.java @@ -27,10 +27,8 @@ import android.content.Context; import android.content.DialogInterface; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.design.widget.TextInputLayout; -import android.support.v7.app.AlertDialog; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; import android.text.Editable; import android.text.TextUtils; import android.view.ContextMenu; @@ -44,6 +42,8 @@ import android.view.ViewParent; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; +import androidx.appcompat.app.AlertDialog; +import com.google.android.material.textfield.TextInputLayout; import org.solovyev.android.Check; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.BaseDialogFragment; @@ -69,8 +69,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; import jscl.math.function.IConstant; import static org.solovyev.android.calculator.functions.CppFunction.NO_ID; @@ -86,20 +84,12 @@ public abstract class BaseFunctionFragment extends BaseDialogFragment implements private final FloatingKeyboardWindow keyboardWindow = new FloatingKeyboardWindow(null); @NonNull private final KeyboardUser keyboardUser = new KeyboardUser(); - @BindView(R.id.function_params) - public - FunctionParamsView paramsView; - @BindView(R.id.function_name_label) - TextInputLayout nameLabel; - @BindView(R.id.function_name) + public FunctionParamsView paramsView; + public TextInputLayout nameLabel; public EditText nameView; - @BindView(R.id.function_body_label) public TextInputLayout bodyLabel; - @BindView(R.id.function_body) public EditTextCompat bodyView; - @BindView(R.id.function_description_label) public TextInputLayout descriptionLabel; - @BindView(R.id.function_description) public EditText descriptionView; @Inject Calculator calculator; @@ -181,23 +171,20 @@ public abstract class BaseFunctionFragment extends BaseDialogFragment implements } final int id = v.getId(); - switch (id) { - case R.id.function_name: - if (hasFocus) { - clearError(nameLabel); - } else { - validateName(); - } - break; - case R.id.function_body: - if (hasFocus) { - clearError(bodyLabel); - showKeyboard(); - } else { - keyboardWindow.hide(); - validateBody(); - } - break; + if (id == R.id.function_name) { + if (hasFocus) { + clearError(nameLabel); + } else { + validateName(); + } + } else if (id == R.id.function_body) { + if (hasFocus) { + clearError(bodyLabel); + showKeyboard(); + } else { + keyboardWindow.hide(); + validateBody(); + } } } @@ -219,13 +206,10 @@ public abstract class BaseFunctionFragment extends BaseDialogFragment implements @Override public void onClick(View v) { - switch (v.getId()) { - case R.id.function_body: - showKeyboard(); - break; - default: - super.onClick(v); - break; + if (v.getId() == R.id.function_body) { + showKeyboard(); + } else { + super.onClick(v); } } @@ -348,7 +332,13 @@ public abstract class BaseFunctionFragment extends BaseDialogFragment implements @Override protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, @Nullable Bundle savedInstanceState) { final View view = inflater.inflate(layout, null); - ButterKnife.bind(this, view); + paramsView = view.findViewById(R.id.function_params); + nameLabel = view.findViewById(R.id.function_name_label); + nameView = view.findViewById(R.id.function_name); + bodyLabel = view.findViewById(R.id.function_body_label); + bodyView = view.findViewById(R.id.function_body); + descriptionLabel = view.findViewById(R.id.function_description_label); + descriptionView = view.findViewById(R.id.function_description); if (savedInstanceState == null && function != null) { paramsView.addParams(function.getParameters()); diff --git a/app/src/main/java/org/solovyev/android/calculator/functions/CppFunction.java b/app/src/main/java/org/solovyev/android/calculator/functions/CppFunction.java index bce2c93b..1d39104f 100644 --- a/app/src/main/java/org/solovyev/android/calculator/functions/CppFunction.java +++ b/app/src/main/java/org/solovyev/android/calculator/functions/CppFunction.java @@ -2,7 +2,7 @@ package org.solovyev.android.calculator.functions; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import jscl.math.function.CustomFunction; import jscl.math.function.IFunction; diff --git a/app/src/main/java/org/solovyev/android/calculator/functions/EditFunctionFragment.java b/app/src/main/java/org/solovyev/android/calculator/functions/EditFunctionFragment.java index 23452fa5..9cb51356 100644 --- a/app/src/main/java/org/solovyev/android/calculator/functions/EditFunctionFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/functions/EditFunctionFragment.java @@ -4,10 +4,10 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; +import androidx.annotation.NonNull; import android.text.TextUtils; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; import jscl.math.function.Function; import org.solovyev.android.Check; import org.solovyev.android.calculator.App; diff --git a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionCategory.java b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionCategory.java index eb0b9739..290ed5eb 100644 --- a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionCategory.java +++ b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionCategory.java @@ -22,7 +22,7 @@ package org.solovyev.android.calculator.functions; -import android.support.annotation.StringRes; +import androidx.annotation.StringRes; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.entities.Category; diff --git a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionParamsView.java b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionParamsView.java index 1ff24d46..062e8646 100644 --- a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionParamsView.java +++ b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionParamsView.java @@ -22,6 +22,7 @@ package org.solovyev.android.calculator.functions; +import com.google.android.material.textfield.TextInputLayout; import org.solovyev.android.Check; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.Preferences; @@ -33,8 +34,7 @@ import android.content.res.Resources; import android.os.Build; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; -import android.support.design.widget.TextInputLayout; +import androidx.annotation.NonNull; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; @@ -132,7 +132,7 @@ public class FunctionParamsView extends LinearLayout { addButton.setScaleType(ImageView.ScaleType.CENTER_INSIDE); addButton.setPadding(imageButtonPadding, imageButtonPadding, imageButtonPadding, imageButtonPadding); final TypedValue value = new TypedValue(); - if (getContext().getTheme().resolveAttribute(R.attr.selectableItemBackgroundBorderless, value, true)) { + if (getContext().getTheme().resolveAttribute(androidx.appcompat.R.attr.selectableItemBackgroundBorderless, value, true)) { addButton.setBackgroundResource(value.resourceId); } return addButton; diff --git a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsActivity.java b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsActivity.java index 44edd40e..50b29ecd 100644 --- a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsActivity.java @@ -24,7 +24,7 @@ package org.solovyev.android.calculator.functions; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.BaseActivity; @@ -91,4 +91,4 @@ public class FunctionsActivity extends BaseActivity { public static final class Dialog extends FunctionsActivity { } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsFragment.java b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsFragment.java index 1b71abe9..cd770676 100644 --- a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsFragment.java @@ -24,9 +24,9 @@ package org.solovyev.android.calculator.functions; import android.content.DialogInterface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.FragmentActivity; +import androidx.annotation.NonNull; import android.view.*; +import androidx.fragment.app.FragmentActivity; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; import jscl.math.function.Function; @@ -79,25 +79,25 @@ public class FunctionsFragment extends BaseEntitiesFragment { @Override protected boolean onMenuItemClicked(@Nonnull MenuItem item, @Nonnull final Function function) { final FragmentActivity activity = getActivity(); - switch (item.getItemId()) { - case R.string.c_use: - onClick(function); - return true; - case R.string.cpp_edit: - if (function instanceof IFunction) { - EditFunctionFragment.show(CppFunction.builder((IFunction) function).build(), + int itemId = item.getItemId(); + if (itemId == R.string.c_use) { + onClick(function); + return true; + } else if (itemId == R.string.cpp_edit) { + if (function instanceof IFunction) { + EditFunctionFragment.show(CppFunction.builder((IFunction) function).build(), activity.getSupportFragmentManager()); + } + return true; + } else if (itemId == R.string.cpp_delete) { + RemovalConfirmationDialog.showForFunction(getActivity(), function.getName(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Check.isTrue(which == DialogInterface.BUTTON_POSITIVE); + registry.remove(function); } - return true; - case R.string.cpp_delete: - RemovalConfirmationDialog.showForFunction(getActivity(), function.getName(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Check.isTrue(which == DialogInterface.BUTTON_POSITIVE); - registry.remove(function); - } - }); - return true; + }); + return true; } return false; } diff --git a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsRegistry.java b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsRegistry.java index 5800fc1d..f286d5de 100644 --- a/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsRegistry.java +++ b/app/src/main/java/org/solovyev/android/calculator/functions/FunctionsRegistry.java @@ -24,7 +24,7 @@ package org.solovyev.android.calculator.functions; import static android.text.TextUtils.isEmpty; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; diff --git a/app/src/main/java/org/solovyev/android/calculator/history/BaseHistoryFragment.java b/app/src/main/java/org/solovyev/android/calculator/history/BaseHistoryFragment.java index aef25408..162dbb71 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/BaseHistoryFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/BaseHistoryFragment.java @@ -29,11 +29,7 @@ import android.app.Activity; import android.content.Context; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.FragmentActivity; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; import android.text.ClipboardManager; import android.text.format.DateUtils; import android.view.ContextMenu; @@ -43,6 +39,10 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import androidx.fragment.app.FragmentActivity; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; @@ -53,6 +53,8 @@ import org.solovyev.android.calculator.BaseFragment; import org.solovyev.android.calculator.CalculatorActivity; import org.solovyev.android.calculator.Editor; import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.databinding.FragmentHistoryBinding; +import org.solovyev.android.calculator.databinding.FragmentHistoryItemBinding; import org.solovyev.android.calculator.jscl.JsclOperation; import org.solovyev.common.text.Strings; @@ -62,8 +64,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; public abstract class BaseHistoryFragment extends BaseFragment { private final boolean recentHistory; @@ -75,7 +75,6 @@ public abstract class BaseHistoryFragment extends BaseFragment { Bus bus; @Inject Typeface typeface; - @BindView(R.id.history_recyclerview) RecyclerView recyclerView; private HistoryAdapter adapter; @@ -111,7 +110,8 @@ public abstract class BaseHistoryFragment extends BaseFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = super.onCreateView(inflater, container, savedInstanceState); - ButterKnife.bind(this, view); + FragmentHistoryBinding binding = FragmentHistoryBinding.bind(view); + recyclerView = binding.historyRecyclerview; final Context context = inflater.getContext(); adapter = new HistoryAdapter(context); bus.register(adapter); @@ -156,21 +156,20 @@ public abstract class BaseHistoryFragment extends BaseFragment { public class HistoryViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener, View.OnClickListener, MenuItem.OnMenuItemClickListener { private static final int DATETIME_FORMAT = DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_MONTH | DateUtils.FORMAT_ABBREV_TIME; - @BindView(R.id.history_item_value) TextView valueView; - @BindView(R.id.history_item_comment) TextView commentView; - @BindView(R.id.history_item_time) TextView timeView; @Nullable private HistoryState state; - public HistoryViewHolder(View view) { - super(view); - BaseActivity.fixFonts(view, typeface); - ButterKnife.bind(this, view); - view.setOnCreateContextMenuListener(this); - view.setOnClickListener(this); + public HistoryViewHolder(@NonNull FragmentHistoryItemBinding binding) { + super(binding.getRoot()); + BaseActivity.fixFonts(binding.getRoot(), typeface); + valueView = binding.historyItemValue; + commentView = binding.historyItemComment; + timeView = binding.historyItemTime; + itemView.setOnCreateContextMenuListener(this); + itemView.setOnClickListener(this); } void bind(@Nonnull HistoryState state) { @@ -217,25 +216,25 @@ public abstract class BaseHistoryFragment extends BaseFragment { @Override public boolean onMenuItemClick(MenuItem item) { Check.isNotNull(state); - switch (item.getItemId()) { - case R.string.c_use: - useState(state); - return true; - case R.string.c_copy_expression: - copyExpression(state); - return true; - case R.string.c_copy_result: - copyResult(state); - return true; - case R.string.cpp_edit: - EditHistoryFragment.show(state, false, getFragmentManager()); - return true; - case R.string.c_save: - EditHistoryFragment.show(state, true, getFragmentManager()); - return true; - case R.string.cpp_delete: - history.removeSaved(state); - return true; + int itemId = item.getItemId(); + if (itemId == R.string.c_use) { + useState(state); + return true; + } else if (itemId == R.string.c_copy_expression) { + copyExpression(state); + return true; + } else if (itemId == R.string.c_copy_result) { + copyResult(state); + return true; + } else if (itemId == R.string.cpp_edit) { + EditHistoryFragment.show(state, false, getParentFragmentManager()); + return true; + } else if (itemId == R.string.c_save) { + EditHistoryFragment.show(state, true, getParentFragmentManager()); + return true; + } else if (itemId == R.string.cpp_delete) { + history.removeSaved(state); + return true; } return false; } @@ -262,7 +261,7 @@ public abstract class BaseHistoryFragment extends BaseFragment { @Override public HistoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new HistoryViewHolder(inflater.inflate(R.layout.fragment_history_item, parent, false)); + return new HistoryViewHolder(FragmentHistoryItemBinding.inflate(inflater, parent, false)); } @Override diff --git a/app/src/main/java/org/solovyev/android/calculator/history/EditHistoryFragment.java b/app/src/main/java/org/solovyev/android/calculator/history/EditHistoryFragment.java index ed9e0dda..34426baf 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/EditHistoryFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/EditHistoryFragment.java @@ -4,22 +4,21 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.FragmentManager; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.TextView; -import butterknife.BindView; -import butterknife.ButterKnife; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentManager; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.BaseDialogFragment; import org.solovyev.android.calculator.R; import javax.inject.Inject; +import org.solovyev.android.calculator.databinding.FragmentHistoryEditBinding; public class EditHistoryFragment extends BaseDialogFragment { @@ -33,10 +32,7 @@ public class EditHistoryFragment extends BaseDialogFragment { boolean newState; - @BindView(R.id.history_expression) TextView expressionView; - - @BindView(R.id.history_comment) EditText commentView; public static void show(@NonNull HistoryState state, boolean newState, @NonNull FragmentManager fm) { @@ -95,12 +91,13 @@ public class EditHistoryFragment extends BaseDialogFragment { @NonNull @Override protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, @Nullable Bundle savedInstanceState) { - final View view = inflater.inflate(R.layout.fragment_history_edit, null); - ButterKnife.bind(this, view); + final FragmentHistoryEditBinding binding = FragmentHistoryEditBinding.inflate(inflater, null, false); + expressionView = binding.historyExpression; + commentView = binding.historyComment; if (savedInstanceState == null) { expressionView.setText(BaseHistoryFragment.getHistoryText(state)); commentView.setText(state.getComment()); } - return view; + return binding.getRoot(); } } diff --git a/app/src/main/java/org/solovyev/android/calculator/history/History.java b/app/src/main/java/org/solovyev/android/calculator/history/History.java index 76d2b2c7..7c30afab 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/History.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/History.java @@ -27,7 +27,7 @@ import static android.text.TextUtils.isEmpty; import android.app.Application; import android.content.SharedPreferences; import android.os.Handler; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import com.google.common.base.Strings; @@ -466,4 +466,4 @@ public class History { }); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/history/HistoryActivity.java b/app/src/main/java/org/solovyev/android/calculator/history/HistoryActivity.java index 62953c93..932386d5 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/HistoryActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/HistoryActivity.java @@ -25,11 +25,11 @@ package org.solovyev.android.calculator.history; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; import android.view.View; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.Fragment; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.BaseActivity; diff --git a/app/src/main/java/org/solovyev/android/calculator/history/HistoryState.java b/app/src/main/java/org/solovyev/android/calculator/history/HistoryState.java index 9124d9a5..0ad322f4 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/HistoryState.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/HistoryState.java @@ -2,7 +2,7 @@ package org.solovyev.android.calculator.history; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import org.json.JSONException; diff --git a/app/src/main/java/org/solovyev/android/calculator/history/RecentHistory.java b/app/src/main/java/org/solovyev/android/calculator/history/RecentHistory.java index 6b966500..01445640 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/RecentHistory.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/RecentHistory.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.history; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.solovyev.android.Check; import java.util.Collections; diff --git a/app/src/main/java/org/solovyev/android/calculator/jscl/JsclOperation.java b/app/src/main/java/org/solovyev/android/calculator/jscl/JsclOperation.java index 13cfec2d..a8b8ea4a 100644 --- a/app/src/main/java/org/solovyev/android/calculator/jscl/JsclOperation.java +++ b/app/src/main/java/org/solovyev/android/calculator/jscl/JsclOperation.java @@ -23,7 +23,7 @@ package org.solovyev.android.calculator.jscl; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import jscl.MathEngine; import jscl.math.Generic; import jscl.text.ParseException; diff --git a/app/src/main/java/org/solovyev/android/calculator/json/Json.java b/app/src/main/java/org/solovyev/android/calculator/json/Json.java index e65ad179..98f11754 100644 --- a/app/src/main/java/org/solovyev/android/calculator/json/Json.java +++ b/app/src/main/java/org/solovyev/android/calculator/json/Json.java @@ -2,7 +2,7 @@ package org.solovyev.android.calculator.json; import static android.text.TextUtils.isEmpty; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.util.Log; import org.json.JSONArray; diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseFloatingKeyboard.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseFloatingKeyboard.java index bbe53867..66322da1 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseFloatingKeyboard.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseFloatingKeyboard.java @@ -3,10 +3,10 @@ package org.solovyev.android.calculator.keyboard; import android.content.res.Resources; import android.graphics.Color; import android.os.Build; -import android.support.annotation.ColorInt; -import android.support.annotation.DrawableRes; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; +import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; import android.text.TextUtils; import android.util.TypedValue; import android.view.View; diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java index 8801cfcb..d75bc3f4 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/BaseKeyboardUi.java @@ -11,8 +11,8 @@ import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.TypedValue; diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingKeyboard.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingKeyboard.java index b1eeed64..d22c017a 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingKeyboard.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingKeyboard.java @@ -2,7 +2,7 @@ package org.solovyev.android.calculator.keyboard; import android.content.Context; import android.graphics.Typeface; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ViewGroup; import android.widget.EditText; diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingKeyboardWindow.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingKeyboardWindow.java index 3a71f1c5..3ee7e6c6 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingKeyboardWindow.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingKeyboardWindow.java @@ -4,8 +4,8 @@ import android.app.Dialog; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.Gravity; import android.view.View; import android.view.Window; diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingNumberKeyboard.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingNumberKeyboard.java index 17c130f4..e2757bcc 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingNumberKeyboard.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/FloatingNumberKeyboard.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.keyboard; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; import android.view.View; import android.widget.EditText; import android.widget.LinearLayout; @@ -93,13 +93,13 @@ public class FloatingNumberKeyboard extends BaseFloatingKeyboard { @Override public void onClick(View v) { final EditText editor = getUser().getEditor(); - switch (v.getId()) { - case R.id.cpp_kb_button_clear: - editor.setText(""); - return; - case R.id.cpp_kb_button_close: - getUser().done(); - return; + int id = v.getId(); + if (id == R.id.cpp_kb_button_clear) { + editor.setText(""); + return; + } else if (id == R.id.cpp_kb_button_close) { + getUser().done(); + return; } if (v instanceof TextView) { insertText(((TextView) v).getText()); diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/KeyboardUi.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/KeyboardUi.java index f6eba6cc..6d33d37f 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/KeyboardUi.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/KeyboardUi.java @@ -3,10 +3,8 @@ package org.solovyev.android.calculator.keyboard; import android.app.Activity; import android.app.Application; import android.content.SharedPreferences; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.view.View; -import butterknife.BindView; -import butterknife.ButterKnife; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; import jscl.NumeralBase; @@ -24,25 +22,15 @@ import static org.solovyev.android.views.dragbutton.DragDirection.*; public class KeyboardUi extends BaseKeyboardUi { - @BindView(R.id.cpp_button_0) public DirectionDragButton button0; - @BindView(R.id.cpp_button_1) public DirectionDragButton button1; - @BindView(R.id.cpp_button_2) public DirectionDragButton button2; - @BindView(R.id.cpp_button_3) public DirectionDragButton button3; - @BindView(R.id.cpp_button_4) public DirectionDragButton button4; - @BindView(R.id.cpp_button_5) public DirectionDragButton button5; - @BindView(R.id.cpp_button_6) public DirectionDragButton button6; - @BindView(R.id.cpp_button_7) public DirectionDragButton button7; - @BindView(R.id.cpp_button_8) public DirectionDragButton button8; - @BindView(R.id.cpp_button_9) public DirectionDragButton button9; @Inject Engine engine; @@ -52,35 +40,22 @@ public class KeyboardUi extends BaseKeyboardUi { Bus bus; @Inject PartialKeyboardUi partialUi; - @BindView(R.id.cpp_button_vars) DirectionDragButton variablesButton; @Nullable - @BindView(R.id.cpp_button_operators) DirectionDragButton operatorsButton; - @BindView(R.id.cpp_button_functions) DirectionDragButton functionsButton; - @BindView(R.id.cpp_button_history) DirectionDragButton historyButton; - @BindView(R.id.cpp_button_multiplication) DirectionDragButton multiplicationButton; - @BindView(R.id.cpp_button_plus) DirectionDragButton plusButton; - @BindView(R.id.cpp_button_subtraction) DirectionDragButton subtractionButton; - @BindView(R.id.cpp_button_division) DirectionDragButton divisionButton; - @BindView(R.id.cpp_button_period) DirectionDragButton periodButton; - @BindView(R.id.cpp_button_round_brackets) DirectionDragButton bracketsButton; @Nullable - @BindView(R.id.cpp_button_like) DirectionDragButton likeButton; @Nullable - @BindView(R.id.cpp_button_percent) DirectionDragButton percentButton; @Nullable - @BindView(R.id.cpp_button_memory) DirectionDragButton memoryButton; @Inject @@ -101,7 +76,30 @@ public class KeyboardUi extends BaseKeyboardUi { public void onCreateView(@Nonnull Activity activity, @Nonnull View view) { super.onCreateView(activity, view); partialUi.onCreateView(activity, view); - ButterKnife.bind(this, view); + button0 = view.findViewById(R.id.cpp_button_0); + button1 = view.findViewById(R.id.cpp_button_1); + button2 = view.findViewById(R.id.cpp_button_2); + button3 = view.findViewById(R.id.cpp_button_3); + button4 = view.findViewById(R.id.cpp_button_4); + button5 = view.findViewById(R.id.cpp_button_5); + button6 = view.findViewById(R.id.cpp_button_6); + button7 = view.findViewById(R.id.cpp_button_7); + button8 = view.findViewById(R.id.cpp_button_8); + button9 = view.findViewById(R.id.cpp_button_9); + + variablesButton = view.findViewById(R.id.cpp_button_vars); + operatorsButton = view.findViewById(R.id.cpp_button_operators); + functionsButton = view.findViewById(R.id.cpp_button_functions); + historyButton = view.findViewById(R.id.cpp_button_history); + multiplicationButton = view.findViewById(R.id.cpp_button_multiplication); + plusButton = view.findViewById(R.id.cpp_button_plus); + subtractionButton = view.findViewById(R.id.cpp_button_subtraction); + divisionButton = view.findViewById(R.id.cpp_button_division); + periodButton = view.findViewById(R.id.cpp_button_period); + bracketsButton = view.findViewById(R.id.cpp_button_round_brackets); + likeButton = view.findViewById(R.id.cpp_button_like); + percentButton = view.findViewById(R.id.cpp_button_percent); + memoryButton = view.findViewById(R.id.cpp_button_memory); prepareButton(variablesButton); prepareButton(operatorsButton); @@ -169,4 +167,4 @@ public class KeyboardUi extends BaseKeyboardUi { public void onNumberModeChanged(@Nonnull Keyboard.NumberModeChangedEvent e) { updateNumberMode(e.mode); } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/keyboard/PartialKeyboardUi.java b/app/src/main/java/org/solovyev/android/calculator/keyboard/PartialKeyboardUi.java index 1905d6ec..58d041cc 100644 --- a/app/src/main/java/org/solovyev/android/calculator/keyboard/PartialKeyboardUi.java +++ b/app/src/main/java/org/solovyev/android/calculator/keyboard/PartialKeyboardUi.java @@ -3,8 +3,8 @@ package org.solovyev.android.calculator.keyboard; import android.app.Activity; import android.app.Application; import android.content.SharedPreferences; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import org.solovyev.android.calculator.R; @@ -14,28 +14,20 @@ import org.solovyev.android.views.dragbutton.DirectionDragButton; import javax.annotation.Nonnull; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; - import static org.solovyev.android.calculator.Preferences.Gui.vibrateOnKeypress; import static org.solovyev.android.views.dragbutton.DragDirection.down; public class PartialKeyboardUi extends BaseKeyboardUi { @Nullable - @BindView(R.id.cpp_button_right) DirectionDragButton rightButton; @Nullable - @BindView(R.id.cpp_button_left) DirectionDragButton leftButton; @Nullable - @BindView(R.id.cpp_button_clear) DirectionDragButton clearButton; @Nullable - @BindView(R.id.cpp_button_erase) DirectionDragButton eraseButton; @Nullable - @BindView(R.id.cpp_button_equals) DirectionDragButton equalsButton; @Nullable EditorLongClickEraser longClickEraser; @@ -48,7 +40,11 @@ public class PartialKeyboardUi extends BaseKeyboardUi { @Override public void onCreateView(@Nonnull Activity activity, @Nonnull View view) { super.onCreateView(activity, view); - ButterKnife.bind(this, view); + rightButton = view.findViewById(R.id.cpp_button_right); + leftButton = view.findViewById(R.id.cpp_button_left); + clearButton = view.findViewById(R.id.cpp_button_clear); + eraseButton = view.findViewById(R.id.cpp_button_erase); + equalsButton = view.findViewById(R.id.cpp_button_equals); prepareButton(rightButton); prepareButton(leftButton); prepareButton(equalsButton); diff --git a/app/src/main/java/org/solovyev/android/calculator/language/Language.java b/app/src/main/java/org/solovyev/android/calculator/language/Language.java index 21d0a2a0..3eefc4f9 100644 --- a/app/src/main/java/org/solovyev/android/calculator/language/Language.java +++ b/app/src/main/java/org/solovyev/android/calculator/language/Language.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.language; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.preferences.PreferenceEntry; diff --git a/app/src/main/java/org/solovyev/android/calculator/math/MathType.java b/app/src/main/java/org/solovyev/android/calculator/math/MathType.java index 89e464a9..2979863b 100644 --- a/app/src/main/java/org/solovyev/android/calculator/math/MathType.java +++ b/app/src/main/java/org/solovyev/android/calculator/math/MathType.java @@ -22,7 +22,7 @@ package org.solovyev.android.calculator.math; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import jscl.JsclMathEngine; import jscl.NumeralBase; import jscl.math.function.Constants; diff --git a/app/src/main/java/org/solovyev/android/calculator/memory/Memory.java b/app/src/main/java/org/solovyev/android/calculator/memory/Memory.java index 197c0ed1..5f49dbfa 100644 --- a/app/src/main/java/org/solovyev/android/calculator/memory/Memory.java +++ b/app/src/main/java/org/solovyev/android/calculator/memory/Memory.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.memory; import android.os.Handler; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import android.util.Log; diff --git a/app/src/main/java/org/solovyev/android/calculator/operators/OperatorCategory.java b/app/src/main/java/org/solovyev/android/calculator/operators/OperatorCategory.java index e546a883..be39a7a0 100644 --- a/app/src/main/java/org/solovyev/android/calculator/operators/OperatorCategory.java +++ b/app/src/main/java/org/solovyev/android/calculator/operators/OperatorCategory.java @@ -22,7 +22,7 @@ package org.solovyev.android.calculator.operators; -import android.support.annotation.StringRes; +import androidx.annotation.StringRes; import jscl.math.operator.*; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.entities.Category; diff --git a/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsActivity.java b/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsActivity.java index 0664d5e0..03cc0a3c 100644 --- a/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsActivity.java @@ -23,7 +23,7 @@ package org.solovyev.android.calculator.operators; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.BaseActivity; diff --git a/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsFragment.java b/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsFragment.java index 5b4b6a40..73f3bab9 100644 --- a/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsFragment.java @@ -22,7 +22,7 @@ package org.solovyev.android.calculator.operators; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.ContextMenu; import android.view.MenuItem; import jscl.math.operator.Operator; @@ -78,10 +78,9 @@ public class OperatorsFragment extends BaseEntitiesFragment { @Override protected boolean onMenuItemClicked(@Nonnull MenuItem item, @Nonnull Operator operator) { - switch (item.getItemId()) { - case R.string.c_use: - onClick(operator); - return true; + if (item.getItemId() == R.string.c_use) { + onClick(operator); + return true; } return false; diff --git a/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsRegistry.java b/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsRegistry.java index 0332b271..30bb634d 100644 --- a/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsRegistry.java +++ b/app/src/main/java/org/solovyev/android/calculator/operators/OperatorsRegistry.java @@ -22,7 +22,7 @@ package org.solovyev.android.calculator.operators; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import jscl.JsclMathEngine; import jscl.math.operator.Operator; import org.solovyev.android.calculator.R; diff --git a/app/src/main/java/org/solovyev/android/calculator/operators/PostfixFunctionsRegistry.java b/app/src/main/java/org/solovyev/android/calculator/operators/PostfixFunctionsRegistry.java index 74d61221..cea54e10 100644 --- a/app/src/main/java/org/solovyev/android/calculator/operators/PostfixFunctionsRegistry.java +++ b/app/src/main/java/org/solovyev/android/calculator/operators/PostfixFunctionsRegistry.java @@ -22,7 +22,7 @@ package org.solovyev.android.calculator.operators; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import jscl.JsclMathEngine; import jscl.math.operator.Operator; import org.solovyev.android.calculator.R; diff --git a/app/src/main/java/org/solovyev/android/calculator/plot/PlotActivity.java b/app/src/main/java/org/solovyev/android/calculator/plot/PlotActivity.java index 4a084e46..77024558 100644 --- a/app/src/main/java/org/solovyev/android/calculator/plot/PlotActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/plot/PlotActivity.java @@ -1,18 +1,19 @@ package org.solovyev.android.calculator.plot; import android.os.Bundle; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.content.ContextCompat; +import androidx.core.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.BaseActivity; import org.solovyev.android.calculator.BaseFragment; import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.databinding.FragmentPlotBinding; import org.solovyev.android.plotter.Dimensions; import org.solovyev.android.plotter.PlotData; import org.solovyev.android.plotter.PlotViewFrame; @@ -21,8 +22,6 @@ import org.solovyev.android.plotter.Plotter; import javax.annotation.Nonnull; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; public class PlotActivity extends BaseActivity { @@ -32,7 +31,6 @@ public class PlotActivity extends BaseActivity { @Inject Plotter plotter; - @BindView(R.id.plot_view_frame) PlotViewFrame plotView; public MyFragment() { @@ -49,7 +47,8 @@ public class PlotActivity extends BaseActivity { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = super.onCreateView(inflater, container, savedInstanceState); - ButterKnife.bind(this, view); + final FragmentPlotBinding binding = FragmentPlotBinding.bind(view); + plotView = binding.plotViewFrame; final PlotData pd = plotter.getPlotData(); pd.axisStyle.backgroundColor = ContextCompat.getColor(getActivity(), R.color.cpp_bg); diff --git a/app/src/main/java/org/solovyev/android/calculator/plot/PlotDimensionsFragment.java b/app/src/main/java/org/solovyev/android/calculator/plot/PlotDimensionsFragment.java index bb03376f..0af3d2bf 100644 --- a/app/src/main/java/org/solovyev/android/calculator/plot/PlotDimensionsFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/plot/PlotDimensionsFragment.java @@ -1,14 +1,10 @@ package org.solovyev.android.calculator.plot; -import android.annotation.SuppressLint; import android.content.Context; import android.content.DialogInterface; import android.graphics.RectF; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.design.widget.TextInputLayout; -import android.support.v4.app.FragmentManager; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -19,24 +15,22 @@ import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; - +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentManager; +import com.google.android.material.textfield.TextInputLayout; +import java.util.Locale; +import javax.annotation.Nonnull; +import javax.inject.Inject; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.BaseDialogFragment; import org.solovyev.android.calculator.BaseFragment; import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.databinding.FragmentPlotDimensionsBinding; import org.solovyev.android.plotter.Check; import org.solovyev.android.plotter.Plot; import org.solovyev.android.plotter.Plotter; -import java.util.Locale; - -import javax.annotation.Nonnull; -import javax.inject.Inject; - -import butterknife.BindView; -import butterknife.ButterKnife; - public class PlotDimensionsFragment extends BaseDialogFragment implements TextView.OnEditorActionListener { private static final String ARG_BOUNDS = "arg-bounds"; @@ -77,23 +71,14 @@ public class PlotDimensionsFragment extends BaseDialogFragment @Inject Plotter plotter; - @BindView(R.id.plot_x_min) EditText xMin; - @BindView(R.id.plot_x_min_label) TextInputLayout xMinLabel; - @BindView(R.id.plot_x_max) EditText xMax; - @BindView(R.id.plot_x_max_label) TextInputLayout xMaxLabel; - @BindView(R.id.plot_y_min) EditText yMin; - @BindView(R.id.plot_y_min_label) TextInputLayout yMinLabel; - @BindView(R.id.plot_y_max) EditText yMax; - @BindView(R.id.plot_y_max_label) TextInputLayout yMaxLabel; - @BindView(R.id.y_bounds) View yBounds; @NonNull private RectF bounds = new RectF(); @@ -160,9 +145,17 @@ public class PlotDimensionsFragment extends BaseDialogFragment @Override protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, Bundle savedInstanceState) { - @SuppressLint("InflateParams") final View view = - LayoutInflater.from(context).inflate(R.layout.fragment_plot_dimensions, null); - ButterKnife.bind(this, view); + final FragmentPlotDimensionsBinding binding = FragmentPlotDimensionsBinding.inflate(inflater, null, false); + + xMin = binding.plotXMin; + xMinLabel = binding.plotXMinLabel; + xMax = binding.plotXMax; + xMaxLabel = binding.plotXMaxLabel; + yMin = binding.plotYMin; + yMinLabel = binding.plotYMinLabel; + yMax = binding.plotYMax; + yMaxLabel = binding.plotYMaxLabel; + yBounds = binding.yBounds; setDimension(xMin, bounds.left); setDimension(xMax, bounds.right); @@ -175,7 +168,7 @@ public class PlotDimensionsFragment extends BaseDialogFragment if (d3) { yBounds.setVisibility(View.GONE); } - return view; + return binding.getRoot(); } @Override @@ -284,4 +277,4 @@ public class PlotDimensionsFragment extends BaseDialogFragment } return false; } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/plot/PlotEditFunctionFragment.java b/app/src/main/java/org/solovyev/android/calculator/plot/PlotEditFunctionFragment.java index a388ace6..db5ebd55 100644 --- a/app/src/main/java/org/solovyev/android/calculator/plot/PlotEditFunctionFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/plot/PlotEditFunctionFragment.java @@ -3,19 +3,20 @@ package org.solovyev.android.calculator.plot; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.FragmentManager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.widget.SeekBar; import android.widget.TextView; +import androidx.fragment.app.FragmentManager; import org.solovyev.android.Check; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.RemovalConfirmationDialog; +import org.solovyev.android.calculator.databinding.FragmentPlotFunctionEditBinding; import org.solovyev.android.calculator.functions.BaseFunctionFragment; import org.solovyev.android.calculator.functions.CppFunction; import org.solovyev.android.plotter.Color; @@ -30,7 +31,6 @@ import java.util.List; import javax.annotation.Nonnull; import javax.inject.Inject; -import butterknife.BindView; import jscl.math.function.CustomFunction; import uz.shift.colorpicker.LineColorPicker; import uz.shift.colorpicker.OnColorChangedListener; @@ -39,17 +39,11 @@ public class PlotEditFunctionFragment extends BaseFunctionFragment implements SeekBar.OnSeekBarChangeListener { @Inject Plotter plotter; - @BindView(R.id.fn_meshspec_views) View meshSpecViews; - @BindView(R.id.fn_color_label) TextView colorLabel; - @BindView(R.id.fn_color_picker) LineColorPicker colorPicker; - @BindView(R.id.fn_linewidth_label) TextView lineWidthLabel; - @BindView(R.id.fn_linewidth_seekbar) SeekBar lineWidthSeekBar; - @BindView(R.id.fn_iconview) PlotIconView iconView; private PlotFunction plotFunction; @@ -101,6 +95,13 @@ public class PlotEditFunctionFragment extends BaseFunctionFragment protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, @Nullable Bundle savedInstanceState) { final View view = super.onCreateDialogView(context, inflater, savedInstanceState); + FragmentPlotFunctionEditBinding binding = FragmentPlotFunctionEditBinding.bind(view); + meshSpecViews = binding.fnMeshspecViews; + colorLabel = binding.fnColorLabel; + colorPicker = binding.fnColorPicker; + lineWidthLabel = binding.fnLinewidthLabel; + lineWidthSeekBar = binding.fnLinewidthSeekbar; + iconView = binding.fnIconview; colorPicker.setOnColorChangedListener(new OnColorChangedListener() { @Override public void onColorChanged(int c) { diff --git a/app/src/main/java/org/solovyev/android/calculator/plot/PlotFunctionsFragment.java b/app/src/main/java/org/solovyev/android/calculator/plot/PlotFunctionsFragment.java index 062e2e95..e38c0493 100644 --- a/app/src/main/java/org/solovyev/android/calculator/plot/PlotFunctionsFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/plot/PlotFunctionsFragment.java @@ -1,6 +1,5 @@ package org.solovyev.android.calculator.plot; -import static android.support.v7.widget.LinearLayoutManager.VERTICAL; import static android.view.Menu.NONE; import android.annotation.SuppressLint; @@ -8,13 +7,8 @@ import android.content.Context; import android.content.DialogInterface; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.app.FragmentManager; -import android.support.v7.app.AlertDialog; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.MenuItem; @@ -22,11 +16,17 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentManager; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.BaseActivity; import org.solovyev.android.calculator.BaseDialogFragment; import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.databinding.FragmentFunctionsFunctionBinding; import org.solovyev.android.plotter.BasePlotterListener; import org.solovyev.android.plotter.PlotFunction; import org.solovyev.android.plotter.PlotIconView; @@ -37,8 +37,6 @@ import java.util.List; import javax.annotation.Nonnull; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; public class PlotFunctionsFragment extends BaseDialogFragment { @@ -75,7 +73,7 @@ public class PlotFunctionsFragment extends BaseDialogFragment { protected RecyclerView onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, Bundle savedInstanceState) { @SuppressLint("InflateParams") final RecyclerView view = (RecyclerView) inflater.inflate(R.layout.fragment_plot_functions, null); - view.setLayoutManager(new LinearLayoutManager(context, VERTICAL, false)); + view.setLayoutManager(new LinearLayoutManager(context, RecyclerView.VERTICAL, false)); view.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL)); adapter = new Adapter(plotter.getPlotData().functions); view.setAdapter(adapter); @@ -107,17 +105,16 @@ public class PlotFunctionsFragment extends BaseDialogFragment { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener { - @BindView(R.id.function_icon) PlotIconView icon; - @BindView(R.id.function_name) TextView name; private PlotFunction function; - private ViewHolder(@NonNull View itemView) { - super(itemView); + private ViewHolder(@NonNull FragmentFunctionsFunctionBinding binding) { + super(binding.getRoot()); BaseActivity.fixFonts(itemView, typeface); - ButterKnife.bind(this, itemView); + icon = binding.functionIcon; + name = binding.functionName; itemView.setOnClickListener(this); itemView.setOnCreateContextMenuListener(this); } @@ -159,7 +156,7 @@ public class PlotFunctionsFragment extends BaseDialogFragment { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); - return new ViewHolder(inflater.inflate(R.layout.fragment_functions_function, parent, false)); + return new ViewHolder(FragmentFunctionsFunctionBinding.inflate(inflater, parent, false)); } @Override diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/NumberFormatExamplesPreference.java b/app/src/main/java/org/solovyev/android/calculator/preferences/NumberFormatExamplesPreference.java index 9eabbbfe..9f53aa1e 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/NumberFormatExamplesPreference.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/NumberFormatExamplesPreference.java @@ -4,10 +4,11 @@ import android.content.Context; import android.graphics.Typeface; import android.util.AttributeSet; import android.view.View; -import android.view.ViewGroup; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.preference.Preference; +import androidx.preference.PreferenceViewHolder; import jscl.JsclMathEngine; -import org.solovyev.android.material.preferences.Preference; @SuppressWarnings("unused") public class NumberFormatExamplesPreference extends Preference { @@ -45,15 +46,14 @@ public class NumberFormatExamplesPreference extends Preference { } @Override - protected View onCreateView(ViewGroup parent) { - final View view = super.onCreateView(parent); - final View summary = view.findViewById(android.R.id.summary); + public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + final View summary = holder.findViewById(android.R.id.summary); if (summary instanceof TextView) { final TextView textView = (TextView) summary; textView.setMaxLines(12); textView.setLines(12); textView.setTypeface(Typeface.MONOSPACE); } - return view; } } diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/PrecisionPreference.java b/app/src/main/java/org/solovyev/android/calculator/preferences/PrecisionPreference.java index 49b7196d..4afb9da6 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/PrecisionPreference.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/PrecisionPreference.java @@ -1,26 +1,83 @@ package org.solovyev.android.calculator.preferences; +import static org.solovyev.common.NumberFormatter.MAX_PRECISION; +import static org.solovyev.common.NumberFormatter.MIN_PRECISION; import android.annotation.TargetApi; import android.content.Context; import android.content.SharedPreferences; import android.os.Build; -import android.preference.DialogPreference; +import android.os.Bundle; import android.util.AttributeSet; import android.view.View; -import butterknife.BindView; -import butterknife.ButterKnife; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.preference.DialogPreference; +import androidx.preference.PreferenceDialogFragmentCompat; import org.solovyev.android.calculator.Engine; import org.solovyev.android.calculator.R; import org.solovyev.android.views.DiscreteSeekBar; -import static org.solovyev.common.NumberFormatter.MAX_PRECISION; -import static org.solovyev.common.NumberFormatter.MIN_PRECISION; - @SuppressWarnings("unused") public class PrecisionPreference extends DialogPreference { - @BindView(R.id.precision_seekbar) - DiscreteSeekBar seekBar; + public static class Dialog extends PreferenceDialogFragmentCompat { + private static final String SAVE_STATE_PRECISION = "PrecisionPreferenceDialog.precision"; + + private DiscreteSeekBar seekBar; + private int precision; + + public Dialog() { + final Bundle args = new Bundle(); + args.putString(ARG_KEY, Engine.Preferences.Output.precision.getKey()); + setArguments(args); + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + if (seekBar != null) { + outState.putInt(SAVE_STATE_PRECISION, seekBar.getCurrentTick() + 1); + } + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (savedInstanceState == null) { + precision = readPrecision(); + } else { + precision = savedInstanceState.getInt(SAVE_STATE_PRECISION, readPrecision()); + } + } + + @Override + protected void onBindDialogView(@NonNull View view) { + super.onBindDialogView(view); + seekBar = (DiscreteSeekBar) view.findViewById(R.id.precision_seekbar); + + seekBar.setMax(MAX_PRECISION - 1); + seekBar.setCurrentTick(precision - 1); + } + + private int readPrecision() { + final DialogPreference preference = getPreference(); + final SharedPreferences preferences = preference.getSharedPreferences(); + return Math.max(MIN_PRECISION, Math.min(MAX_PRECISION, Engine.Preferences.Output.precision.getPreference(preferences))); + } + + @Override + public void onDialogClosed(boolean save) { + if (!save) return; + final int precision = seekBar.getCurrentTick() + 1; + final DialogPreference preference = getPreference(); + if (preference.callChangeListener(precision)) { + final SharedPreferences preferences = preference.getSharedPreferences(); + final SharedPreferences.Editor editor = preferences.edit(); + Engine.Preferences.Output.precision.putPreference(editor, precision); + editor.apply(); + } + } + } { setPersistent(false); @@ -44,29 +101,4 @@ public class PrecisionPreference extends DialogPreference { public PrecisionPreference(Context context) { super(context); } - - @Override - protected void onBindDialogView(View view) { - super.onBindDialogView(view); - ButterKnife.bind(this, view); - - final SharedPreferences preferences = getSharedPreferences(); - seekBar.setMax(MAX_PRECISION - 1); - final int precision = Math.max(MIN_PRECISION, Math.min(MAX_PRECISION, Engine.Preferences.Output.precision.getPreference(preferences))); - seekBar.setCurrentTick(precision - 1); - } - - @Override - protected void onDialogClosed(boolean save) { - super.onDialogClosed(save); - if (!save) { - return; - } - final int precision = seekBar.getCurrentTick() + 1; - if (callChangeListener(precision)) { - final SharedPreferences.Editor editor = getSharedPreferences().edit(); - Engine.Preferences.Output.precision.putPreference(editor, precision); - editor.apply(); - } - } } diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferenceEntry.java b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferenceEntry.java index 21aebcb2..ad0a6e4a 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferenceEntry.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferenceEntry.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.preferences; import android.content.Context; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; public interface PreferenceEntry { @NonNull diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java index 22f5aaf7..3c966e7d 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesActivity.java @@ -4,9 +4,9 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; -import android.support.annotation.XmlRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; +import androidx.annotation.XmlRes; import android.util.SparseArray; import org.solovyev.android.calculator.App; @@ -81,7 +81,7 @@ public class PreferencesActivity extends BaseActivity implements SharedPreferenc if (savedInstanceState == null) { final int preference = intent.getIntExtra(EXTRA_PREFERENCE, R.xml.preferences); getSupportFragmentManager().beginTransaction() - .add(R.id.main, PreferencesFragment.create(preference, R.layout.fragment_preferences)) + .add(R.id.main, PreferencesFragment.create(preference)) .commit(); } diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesFragment.java b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesFragment.java index f231cad9..22606ece 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/PreferencesFragment.java @@ -5,22 +5,31 @@ import static org.solovyev.android.calculator.Engine.Preferences.angleUnitName; import static org.solovyev.android.calculator.Engine.Preferences.numeralBaseName; import static org.solovyev.android.calculator.wizard.CalculatorWizards.DEFAULT_WIZARD_FLOW; import static org.solovyev.android.wizard.WizardUi.startWizard; - import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.os.Build; import android.os.Bundle; -import android.preference.ListPreference; -import android.preference.Preference; -import android.support.v4.app.FragmentActivity; import android.util.SparseArray; import android.view.View; -import android.widget.ListView; - +import android.view.ViewGroup; +import android.view.ViewParent; +import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentActivity; +import androidx.preference.ListPreference; +import androidx.preference.Preference; +import androidx.preference.PreferenceDialogFragmentCompat; +import androidx.preference.PreferenceFragmentCompat; +import androidx.recyclerview.widget.RecyclerView; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; - +import java.util.Arrays; +import java.util.List; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.inject.Inject; +import jscl.AngleUnit; +import jscl.JsclMathEngine; +import jscl.NumeralBase; import org.solovyev.android.calculator.ActivityLauncher; import org.solovyev.android.calculator.AdView; import org.solovyev.android.calculator.Engine; @@ -38,20 +47,11 @@ import org.solovyev.android.prefs.StringPreference; import org.solovyev.android.wizard.Wizards; import org.solovyev.common.text.CharacterMapper; -import java.util.Arrays; -import java.util.List; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.inject.Inject; +public class PreferencesFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener { + @Nonnull + private static String ARG_PREFERENCES = "preferences"; -import jscl.AngleUnit; -import jscl.JsclMathEngine; -import jscl.NumeralBase; - -public class PreferencesFragment extends org.solovyev.android.material.preferences.PreferencesFragment implements SharedPreferences.OnSharedPreferenceChangeListener { - - private static boolean SUPPORT_HEADERS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; @Nullable private AdView adView; @Inject @@ -70,9 +70,11 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc Bus bus; @Nonnull - public static PreferencesFragment create(int preferences, int layout) { + public static PreferencesFragment create(int preferences) { final PreferencesFragment fragment = new PreferencesFragment(); - fragment.setArguments(createArguments(preferences, layout, NO_THEME)); + final Bundle args = new Bundle(); + args.putInt(ARG_PREFERENCES, preferences); + fragment.setArguments(args); return fragment; } @@ -85,6 +87,12 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc bus.register(this); } + @Override + public void onCreatePreferences(@androidx.annotation.Nullable Bundle savedInstanceState, @androidx.annotation.Nullable String rootKey) { + int preferencesResId = getArguments().getInt(ARG_PREFERENCES); + addPreferencesFromResource(preferencesResId); + } + private void setPreferenceIntent(int xml, @Nonnull PreferencesActivity.PrefDef def) { final Preference preference = findPreference(def.id); if (preference != null) { @@ -96,11 +104,26 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } } + /** @noinspection deprecation*/ + @Override + public void onDisplayPreferenceDialog(@NonNull Preference preference) { + String fragmentTag = "fragment:" + preference.getKey(); + if (getParentFragmentManager().findFragmentByTag(fragmentTag) != null) return; + + if (preference instanceof PrecisionPreference) { + final PreferenceDialogFragmentCompat f = new PrecisionPreference.Dialog(); + f.setTargetFragment(this, 0); + f.show(getParentFragmentManager(), fragmentTag); + } else { + super.onDisplayPreferenceDialog(preference); + } + } + @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - final int preference = getPreferencesResId(); + final int preference = getArguments().getInt(ARG_PREFERENCES); if (preference == R.xml.preferences) { prepareScreens(); prepareIntroduction(); @@ -200,7 +223,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } private void prepareNumberFormatExamplesPreference() { - final NumberFormatExamplesPreference preference = (NumberFormatExamplesPreference) preferenceManager.findPreference("numberFormat.examples"); + final NumberFormatExamplesPreference preference = (NumberFormatExamplesPreference) getPreferenceManager().findPreference("numberFormat.examples"); if (preference == null) { return; } @@ -208,7 +231,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } private void prepareSeparatorPreference() { - final ListPreference preference = (ListPreference) preferenceManager.findPreference(Engine.Preferences.Output.separator.getKey()); + final ListPreference preference = (ListPreference) getPreferenceManager().findPreference(Engine.Preferences.Output.separator.getKey()); preference.setSummary(separatorName(Engine.Preferences.Output.separator.getPreference(preferences))); preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override @@ -232,7 +255,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } private void preparePrecisionPreference() { - final PrecisionPreference preference = (PrecisionPreference) preferenceManager.findPreference(Engine.Preferences.Output.precision.getKey()); + final PrecisionPreference preference = (PrecisionPreference) getPreferenceManager().findPreference(Engine.Preferences.Output.precision.getKey()); preference.setSummary(String.valueOf(Engine.Preferences.Output.precision.getPreference(preferences))); preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override @@ -244,7 +267,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } private & PreferenceEntry> void prepareListPreference(@Nonnull final StringPreference p, @Nonnull Class type) { - final ListPreference preference = (ListPreference) preferenceManager.findPreference(p.getKey()); + final ListPreference preference = (ListPreference) getPreferenceManager().findPreference(p.getKey()); if (preference == null) { return; } @@ -267,7 +290,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } private void prepareMode() { - final ListPreference mode = (ListPreference) preferenceManager.findPreference(Preferences.Gui.mode.getKey()); + final ListPreference mode = (ListPreference) getPreferenceManager().findPreference(Preferences.Gui.mode.getKey()); mode.setSummary(Preferences.Gui.getMode(preferences).name); mode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override @@ -279,7 +302,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } private void prepareAngles() { - final ListPreference angles = (ListPreference) preferenceManager.findPreference(Engine.Preferences.angleUnit.getKey()); + final ListPreference angles = (ListPreference) getPreferenceManager().findPreference(Engine.Preferences.angleUnit.getKey()); angles.setSummary(angleUnitName(Engine.Preferences.angleUnit.getPreference(preferences))); angles.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override @@ -291,7 +314,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc } private void prepareRadix() { - final ListPreference radix = (ListPreference) preferenceManager.findPreference(Engine.Preferences.numeralBase.getKey()); + final ListPreference radix = (ListPreference) getPreferenceManager().findPreference(Engine.Preferences.numeralBase.getKey()); radix.setSummary(numeralBaseName(Engine.Preferences.numeralBase.getPreference(preferences))); radix.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override @@ -306,7 +329,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc if (preference != R.xml.preferences_appearance) { return; } - final ListPreference theme = (ListPreference) preferenceManager.findPreference(Preferences.Gui.theme.getKey()); + final ListPreference theme = (ListPreference) getPreferenceManager().findPreference(Preferences.Gui.theme.getKey()); final FragmentActivity context = getActivity(); populate(theme, Theme.material_theme, @@ -349,7 +372,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc return; } - final ListPreference language = (ListPreference) preferenceManager.findPreference(Preferences.Gui.language.getKey()); + final ListPreference language = (ListPreference) getPreferenceManager().findPreference(Preferences.Gui.language.getKey()); populate(language, languages.getList()); language.setSummary(languages.getCurrent().getName(getActivity())); language.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @@ -417,38 +440,24 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc super.onDestroy(); } - private boolean supportsHeaders() { - return SUPPORT_HEADERS; - } protected void onShowAd(boolean show) { - if (!supportsHeaders()) { - return; - } if (getView() == null) { return; } - final ListView listView = getListView(); + final View root = getView(); + if (!(root instanceof ViewGroup)) return; + + final ViewGroup container = (ViewGroup) root; if (show) { - if (adView != null) { - return; - } + if (adView != null) return; adView = new AdView(getActivity()); adView.show(); - try { - listView.addHeaderView(adView); - } catch (IllegalStateException e) { - // doesn't support header views - SUPPORT_HEADERS = false; - adView.hide(); - adView = null; - } + container.addView(adView); } else { - if (adView == null) { - return; - } - listView.removeHeaderView(adView); + if (adView == null) return; + container.removeView(adView); adView.hide(); adView = null; } diff --git a/app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java b/app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java index 2c9c4781..c4600640 100644 --- a/app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/preferences/PurchaseDialogActivity.java @@ -28,11 +28,11 @@ import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.BaseDialogFragment; import org.solovyev.android.calculator.R; diff --git a/app/src/main/java/org/solovyev/android/calculator/release/ChooseThemeReleaseNoteStep.java b/app/src/main/java/org/solovyev/android/calculator/release/ChooseThemeReleaseNoteStep.java index fca8315f..9dcdfa82 100644 --- a/app/src/main/java/org/solovyev/android/calculator/release/ChooseThemeReleaseNoteStep.java +++ b/app/src/main/java/org/solovyev/android/calculator/release/ChooseThemeReleaseNoteStep.java @@ -1,8 +1,8 @@ package org.solovyev.android.calculator.release; import android.os.Bundle; -import android.support.v4.app.Fragment; +import androidx.fragment.app.Fragment; import javax.annotation.Nonnull; public class ChooseThemeReleaseNoteStep extends ReleaseNoteStep { diff --git a/app/src/main/java/org/solovyev/android/calculator/release/ReleaseNote.java b/app/src/main/java/org/solovyev/android/calculator/release/ReleaseNote.java index aadb626b..5b435991 100644 --- a/app/src/main/java/org/solovyev/android/calculator/release/ReleaseNote.java +++ b/app/src/main/java/org/solovyev/android/calculator/release/ReleaseNote.java @@ -1,7 +1,7 @@ package org.solovyev.android.calculator.release; -import android.support.annotation.NonNull; -import android.support.annotation.StringRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; public class ReleaseNote { @NonNull diff --git a/app/src/main/java/org/solovyev/android/calculator/release/ReleaseNoteStep.java b/app/src/main/java/org/solovyev/android/calculator/release/ReleaseNoteStep.java index a5a41064..9d450ffd 100644 --- a/app/src/main/java/org/solovyev/android/calculator/release/ReleaseNoteStep.java +++ b/app/src/main/java/org/solovyev/android/calculator/release/ReleaseNoteStep.java @@ -1,8 +1,8 @@ package org.solovyev.android.calculator.release; import android.os.Bundle; -import android.support.v4.app.Fragment; +import androidx.fragment.app.Fragment; import org.solovyev.android.wizard.WizardStep; import javax.annotation.Nonnull; diff --git a/app/src/main/java/org/solovyev/android/calculator/variables/CppVariable.java b/app/src/main/java/org/solovyev/android/calculator/variables/CppVariable.java index f8b838a6..2af38caa 100644 --- a/app/src/main/java/org/solovyev/android/calculator/variables/CppVariable.java +++ b/app/src/main/java/org/solovyev/android/calculator/variables/CppVariable.java @@ -2,7 +2,7 @@ package org.solovyev.android.calculator.variables; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import jscl.math.function.IConstant; import org.json.JSONException; diff --git a/app/src/main/java/org/solovyev/android/calculator/variables/EditVariableFragment.java b/app/src/main/java/org/solovyev/android/calculator/variables/EditVariableFragment.java index 43df0b41..793f6eba 100644 --- a/app/src/main/java/org/solovyev/android/calculator/variables/EditVariableFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/variables/EditVariableFragment.java @@ -28,11 +28,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.design.widget.TextInputLayout; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; -import android.support.v7.app.AlertDialog; +import androidx.annotation.NonNull; import android.text.Editable; import android.text.InputFilter; import android.text.SpannableStringBuilder; @@ -45,6 +41,10 @@ import android.widget.Button; import android.widget.EditText; import android.widget.PopupWindow; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import com.google.android.material.textfield.TextInputLayout; import org.solovyev.android.Check; import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.AppComponent; @@ -57,6 +57,7 @@ import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.RemovalConfirmationDialog; import org.solovyev.android.calculator.ToJsclTextProcessor; import org.solovyev.android.calculator.VariablesRegistry; +import org.solovyev.android.calculator.databinding.FragmentVariableEditBinding; import org.solovyev.android.calculator.functions.FunctionsRegistry; import org.solovyev.android.calculator.keyboard.FloatingKeyboard; import org.solovyev.android.calculator.keyboard.FloatingKeyboardWindow; @@ -72,8 +73,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.inject.Inject; -import butterknife.BindView; -import butterknife.ButterKnife; import dagger.Lazy; import jscl.math.function.IConstant; @@ -85,10 +84,13 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF private final static List ACCEPTABLE_CHARACTERS = Arrays.asList(Strings.toObjects(("1234567890abcdefghijklmnopqrstuvwxyzйцукенгшщзхъфывапролджэячсмитьбюё_" + GreekFloatingKeyboard.ALPHABET).toCharArray())); @NonNull private final KeyboardUser keyboardUser = new KeyboardUser(); - @BindView(R.id.variable_name_label) TextInputLayout nameLabel; - @BindView(R.id.variable_name) EditTextCompat nameView; + Button keyboardButton; + TextInputLayout valueLabel; + EditText valueView; + Button exponentButton; + EditText descriptionView; @NonNull private final FloatingKeyboardWindow keyboardWindow = new FloatingKeyboardWindow(new PopupWindow.OnDismissListener() { @Override @@ -96,16 +98,6 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF nameView.setShowSoftInputOnFocusCompat(true); } }); - @BindView(R.id.variable_keyboard_button) - Button keyboardButton; - @BindView(R.id.variable_value_label) - TextInputLayout valueLabel; - @BindView(R.id.variable_value) - EditText valueView; - @BindView(R.id.variable_exponent_button) - Button exponentButton; - @BindView(R.id.variable_description) - EditText descriptionView; @Inject Calculator calculator; @Inject @@ -167,7 +159,7 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF } @Override - public void onCreate(@android.support.annotation.Nullable Bundle savedInstanceState) { + public void onCreate(@androidx.annotation.Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Bundle arguments = getArguments(); if (arguments != null) { @@ -309,9 +301,15 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF @SuppressLint("InflateParams") @NonNull @Override - protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, @android.support.annotation.Nullable Bundle savedInstanceState) { - final View view = inflater.inflate(R.layout.fragment_variable_edit, null); - ButterKnife.bind(this, view); + protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, @androidx.annotation.Nullable Bundle savedInstanceState) { + final FragmentVariableEditBinding binding = FragmentVariableEditBinding.inflate(inflater, null, false); + nameLabel = binding.variableNameLabel; + nameView = binding.variableName; + keyboardButton = binding.variableKeyboardButton; + valueLabel = binding.variableValueLabel; + valueView = binding.variableValue; + exponentButton = binding.variableExponentButton; + descriptionView = binding.variableDescription; if (savedInstanceState == null && variable != null) { nameView.setText(variable.name); @@ -331,26 +329,24 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF descriptionView.setOnFocusChangeListener(this); keyboardButton.setOnClickListener(this); - return view; + return binding.getRoot(); } @Override public void onFocusChange(View v, boolean hasFocus) { - switch (v.getId()) { - case R.id.variable_name: - if (hasFocus) { - clearError(nameLabel); - } else { - keyboardUser.done(); - } - break; - case R.id.variable_value: - if (hasFocus) { - clearError(valueLabel); - } else { - validateValue(); - } - break; + int id = v.getId(); + if (id == R.id.variable_name) { + if (hasFocus) { + clearError(nameLabel); + } else { + keyboardUser.done(); + } + } else if (id == R.id.variable_value) { + if (hasFocus) { + clearError(valueLabel); + } else { + validateValue(); + } } } @@ -368,22 +364,19 @@ public class EditVariableFragment extends BaseDialogFragment implements View.OnF @Override public void onClick(View v) { - switch (v.getId()) { - case R.id.variable_keyboard_button: - if (keyboardWindow.isShown()) { - keyboardUser.showIme(); - } else { - showKeyboard(); - } - break; - case R.id.variable_exponent_button: - final int start = Math.max(valueView.getSelectionStart(), 0); - final int end = Math.max(valueView.getSelectionEnd(), 0); - valueView.getText().replace(Math.min(start, end), Math.max(start, end), "E", 0, 1); - break; - default: - super.onClick(v); - break; + int id = v.getId(); + if (id == R.id.variable_keyboard_button) { + if (keyboardWindow.isShown()) { + keyboardUser.showIme(); + } else { + showKeyboard(); + } + } else if (id == R.id.variable_exponent_button) { + final int start = Math.max(valueView.getSelectionStart(), 0); + final int end = Math.max(valueView.getSelectionEnd(), 0); + valueView.getText().replace(Math.min(start, end), Math.max(start, end), "E", 0, 1); + } else { + super.onClick(v); } } diff --git a/app/src/main/java/org/solovyev/android/calculator/variables/GreekFloatingKeyboard.java b/app/src/main/java/org/solovyev/android/calculator/variables/GreekFloatingKeyboard.java index da9e23f5..b56fcc94 100644 --- a/app/src/main/java/org/solovyev/android/calculator/variables/GreekFloatingKeyboard.java +++ b/app/src/main/java/org/solovyev/android/calculator/variables/GreekFloatingKeyboard.java @@ -2,8 +2,8 @@ package org.solovyev.android.calculator.variables; import android.annotation.TargetApi; import android.os.Build; -import android.support.annotation.IdRes; -import android.support.annotation.NonNull; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; @@ -122,23 +122,18 @@ public class GreekFloatingKeyboard extends BaseFloatingKeyboard implements View. if (user.isVibrateOnKeypress()) { v.performHapticFeedback(KEYBOARD_TAP, FLAG_IGNORE_GLOBAL_SETTING | FLAG_IGNORE_VIEW_SETTING); } - switch (v.getId()) { - case R.id.cpp_kb_button_close: - user.done(); - break; - case R.id.cpp_kb_button_change_case: - changeCase((Button) v); - break; - case R.id.cpp_kb_button_keyboard: - user.showIme(); - break; - case R.id.cpp_kb_button_clear: - user.getEditor().setText(""); - user.getEditor().setSelection(0); - break; - default: - user.getEditor().append(((TextView) v).getText()); - break; + int id = v.getId(); + if (id == R.id.cpp_kb_button_close) { + user.done(); + } else if (id == R.id.cpp_kb_button_change_case) { + changeCase((Button) v); + } else if (id == R.id.cpp_kb_button_keyboard) { + user.showIme(); + } else if (id == R.id.cpp_kb_button_clear) { + user.getEditor().setText(""); + user.getEditor().setSelection(0); + } else { + user.getEditor().append(((TextView) v).getText()); } user.getEditor().requestFocus(); } @@ -165,4 +160,4 @@ public class GreekFloatingKeyboard extends BaseFloatingKeyboard implements View. button.setText("↑"); } } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/calculator/variables/VariableCategory.java b/app/src/main/java/org/solovyev/android/calculator/variables/VariableCategory.java index e40a1097..abd3473e 100644 --- a/app/src/main/java/org/solovyev/android/calculator/variables/VariableCategory.java +++ b/app/src/main/java/org/solovyev/android/calculator/variables/VariableCategory.java @@ -22,7 +22,7 @@ package org.solovyev.android.calculator.variables; -import android.support.annotation.StringRes; +import androidx.annotation.StringRes; import jscl.math.function.IConstant; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.entities.Category; diff --git a/app/src/main/java/org/solovyev/android/calculator/variables/VariablesActivity.java b/app/src/main/java/org/solovyev/android/calculator/variables/VariablesActivity.java index 11043a82..722730b9 100644 --- a/app/src/main/java/org/solovyev/android/calculator/variables/VariablesActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/variables/VariablesActivity.java @@ -24,7 +24,7 @@ package org.solovyev.android.calculator.variables; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; import org.solovyev.android.calculator.App; diff --git a/app/src/main/java/org/solovyev/android/calculator/variables/VariablesFragment.java b/app/src/main/java/org/solovyev/android/calculator/variables/VariablesFragment.java index 0b602ff1..1ce46550 100644 --- a/app/src/main/java/org/solovyev/android/calculator/variables/VariablesFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/variables/VariablesFragment.java @@ -24,10 +24,10 @@ package org.solovyev.android.calculator.variables; import android.content.DialogInterface; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.FragmentActivity; +import androidx.annotation.NonNull; import android.text.TextUtils; import android.view.*; +import androidx.fragment.app.FragmentActivity; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; import jscl.math.function.IConstant; @@ -110,25 +110,25 @@ public class VariablesFragment extends BaseEntitiesFragment { @Override protected boolean onMenuItemClicked(@Nonnull MenuItem item, @Nonnull final IConstant variable) { FragmentActivity activity = getActivity(); - switch (item.getItemId()) { - case R.string.c_use: - onClick(variable); - return true; - case R.string.cpp_edit: - EditVariableFragment.showDialog(CppVariable.builder(variable).build(), activity); - return true; - case R.string.cpp_delete: - RemovalConfirmationDialog.showForVariable(getActivity(), variable.getName(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Check.isTrue(which == DialogInterface.BUTTON_POSITIVE); - registry.remove(variable); - } - }); - return true; - case R.string.cpp_copy: - copyText(variable.getValue()); - return true; + int itemId = item.getItemId(); + if (itemId == R.string.c_use) { + onClick(variable); + return true; + } else if (itemId == R.string.cpp_edit) { + EditVariableFragment.showDialog(CppVariable.builder(variable).build(), activity); + return true; + } else if (itemId == R.string.cpp_delete) { + RemovalConfirmationDialog.showForVariable(getActivity(), variable.getName(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Check.isTrue(which == DialogInterface.BUTTON_POSITIVE); + registry.remove(variable); + } + }); + return true; + } else if (itemId == R.string.cpp_copy) { + copyText(variable.getValue()); + return true; } return false; } diff --git a/app/src/main/java/org/solovyev/android/calculator/view/EditTextCompat.java b/app/src/main/java/org/solovyev/android/calculator/view/EditTextCompat.java index ac7e10c8..4eeb5502 100644 --- a/app/src/main/java/org/solovyev/android/calculator/view/EditTextCompat.java +++ b/app/src/main/java/org/solovyev/android/calculator/view/EditTextCompat.java @@ -2,12 +2,12 @@ package org.solovyev.android.calculator.view; import android.content.Context; import android.os.Build; -import android.support.design.widget.TextInputEditText; import android.text.Editable; import android.text.InputType; import android.util.AttributeSet; import android.util.Log; import android.widget.EditText; +import com.google.android.material.textfield.TextInputEditText; import org.solovyev.android.Check; import javax.annotation.Nullable; diff --git a/app/src/main/java/org/solovyev/android/calculator/view/PagerViewFabBehavior.java b/app/src/main/java/org/solovyev/android/calculator/view/PagerViewFabBehavior.java index d13d0ed9..670944b4 100644 --- a/app/src/main/java/org/solovyev/android/calculator/view/PagerViewFabBehavior.java +++ b/app/src/main/java/org/solovyev/android/calculator/view/PagerViewFabBehavior.java @@ -1,14 +1,14 @@ package org.solovyev.android.calculator.view; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.design.widget.CoordinatorLayout; -import android.support.design.widget.FloatingActionButton; -import android.support.v4.view.ViewCompat; -import android.support.v4.view.ViewPager; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.coordinatorlayout.widget.CoordinatorLayout; +import androidx.core.view.ViewCompat; +import androidx.recyclerview.widget.RecyclerView; import android.util.AttributeSet; import android.view.View; +import androidx.viewpager.widget.ViewPager; +import com.google.android.material.floatingactionbutton.FloatingActionButton; public class PagerViewFabBehavior extends FloatingActionButton.Behavior { @@ -34,7 +34,7 @@ public class PagerViewFabBehavior extends FloatingActionButton.Behavior { @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, - FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) { + FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) { if (!child.isClickable()) { return false; } diff --git a/app/src/main/java/org/solovyev/android/calculator/view/Tabs.java b/app/src/main/java/org/solovyev/android/calculator/view/Tabs.java index c06d18a1..38fc1354 100644 --- a/app/src/main/java/org/solovyev/android/calculator/view/Tabs.java +++ b/app/src/main/java/org/solovyev/android/calculator/view/Tabs.java @@ -3,16 +3,14 @@ package org.solovyev.android.calculator.view; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.design.widget.TabLayout; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentPagerAdapter; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AppCompatActivity; +import androidx.annotation.Nullable; import android.view.View; -import butterknife.BindView; -import butterknife.ButterKnife; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; +import com.google.android.material.tabs.TabLayout; import org.solovyev.android.calculator.AppModule; import org.solovyev.android.calculator.FragmentTab; import org.solovyev.android.calculator.R; @@ -37,10 +35,8 @@ public class Tabs { @Named(AppModule.PREFS_TABS) SharedPreferences preferences; @Nullable - @BindView(R.id.tabs) TabLayout tabLayout; @Nullable - @BindView(R.id.viewPager) ViewPager viewPager; private int defaultSelectedTab = -1; @@ -56,7 +52,8 @@ public class Tabs { public void onCreate() { cast(activity.getApplicationContext()).getComponent().inject(this); - ButterKnife.bind(this, activity); + tabLayout = activity.findViewById(R.id.tabs); + viewPager = activity.findViewById(R.id.viewPager); if (tabLayout == null || viewPager == null) { return; diff --git a/app/src/main/java/org/solovyev/android/calculator/view/TextHighlighter.java b/app/src/main/java/org/solovyev/android/calculator/view/TextHighlighter.java index 5e6f4d55..51f7e157 100644 --- a/app/src/main/java/org/solovyev/android/calculator/view/TextHighlighter.java +++ b/app/src/main/java/org/solovyev/android/calculator/view/TextHighlighter.java @@ -23,7 +23,7 @@ package org.solovyev.android.calculator.view; import android.graphics.Typeface; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; import android.text.style.StyleSpan; diff --git a/app/src/main/java/org/solovyev/android/calculator/view/TouchExpander.java b/app/src/main/java/org/solovyev/android/calculator/view/TouchExpander.java index 0ea80b75..90132cc1 100644 --- a/app/src/main/java/org/solovyev/android/calculator/view/TouchExpander.java +++ b/app/src/main/java/org/solovyev/android/calculator/view/TouchExpander.java @@ -1,10 +1,10 @@ package org.solovyev.android.calculator.view; import android.graphics.Rect; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.annotation.Px; -import android.support.v4.view.ViewCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.Px; +import androidx.core.view.ViewCompat; import android.view.TouchDelegate; import android.view.View; import android.view.ViewTreeObserver; diff --git a/app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidget.java b/app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidget.java index d88eb39b..2eb7705f 100644 --- a/app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidget.java +++ b/app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidget.java @@ -31,8 +31,8 @@ import android.content.Intent; import android.content.res.Resources; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.ColorInt; -import android.support.v4.content.ContextCompat; +import androidx.annotation.ColorInt; +import androidx.core.content.ContextCompat; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.SpannedString; @@ -139,7 +139,7 @@ public class CalculatorWidget extends AppWidgetProvider { if (!partially) { for (CppButton button : CppButton.values()) { - final PendingIntent intent = PendingIntent.getBroadcast(context, button.id, newButtonClickedIntent(context, button), PendingIntent.FLAG_UPDATE_CURRENT); + final PendingIntent intent = PendingIntent.getBroadcast(context, button.id, newButtonClickedIntent(context, button), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); if (intent != null) { final int buttonId; if (button == CppButton.settings_widget) { diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/CalculatorWizardStep.java b/app/src/main/java/org/solovyev/android/calculator/wizard/CalculatorWizardStep.java index 79fbec59..235274cb 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/CalculatorWizardStep.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/CalculatorWizardStep.java @@ -23,8 +23,8 @@ package org.solovyev.android.calculator.wizard; import android.os.Bundle; -import android.support.v4.app.Fragment; +import androidx.fragment.app.Fragment; import org.solovyev.android.calculator.R; import javax.annotation.Nonnull; diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/DragButtonWizardStep.java b/app/src/main/java/org/solovyev/android/calculator/wizard/DragButtonWizardStep.java index 9aae8364..974f77e3 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/DragButtonWizardStep.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/DragButtonWizardStep.java @@ -24,7 +24,7 @@ package org.solovyev.android.calculator.wizard; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.view.View; import android.widget.TextView; diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardActivity.java b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardActivity.java index 4bd3f474..6322b4be 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardActivity.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardActivity.java @@ -3,11 +3,11 @@ package org.solovyev.android.calculator.wizard; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentStatePagerAdapter; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AlertDialog; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; +import androidx.viewpager.widget.ViewPager; import com.viewpagerindicator.PageIndicator; import org.solovyev.android.calculator.*; import org.solovyev.android.calculator.language.Languages; diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardArrayAdapter.java b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardArrayAdapter.java index 65b74207..5c4a5b57 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardArrayAdapter.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardArrayAdapter.java @@ -13,11 +13,11 @@ import java.util.List; final class WizardArrayAdapter extends ArrayAdapter { public WizardArrayAdapter(@Nonnull Context context, @Nonnull T[] items) { - super(context, R.layout.support_simple_spinner_dropdown_item, items); + super(context, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, items); } public WizardArrayAdapter(@Nonnull Context context, @Nonnull List items) { - super(context, R.layout.support_simple_spinner_dropdown_item, items); + super(context, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, items); } @Nonnull diff --git a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardFragment.java b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardFragment.java index 9a810b2a..247745cb 100644 --- a/app/src/main/java/org/solovyev/android/calculator/wizard/WizardFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/wizard/WizardFragment.java @@ -3,13 +3,13 @@ package org.solovyev.android.calculator.wizard; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Bundle; -import android.support.annotation.LayoutRes; -import android.support.v4.app.Fragment; +import androidx.annotation.LayoutRes; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import androidx.fragment.app.Fragment; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.BaseActivity; import org.solovyev.android.calculator.R; @@ -117,7 +117,7 @@ public abstract class WizardFragment extends Fragment implements View.OnClickLis } @Override - public void onViewCreated(View view, @android.support.annotation.Nullable Bundle savedInstanceState) { + public void onViewCreated(View view, @androidx.annotation.Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); BaseActivity.fixFonts(view, typeface); } @@ -141,21 +141,18 @@ public abstract class WizardFragment extends Fragment implements View.OnClickLis public void onClick(View v) { final int id = v.getId(); final WizardActivity activity = getWizardActivity(); - switch (id) { - case R.id.wizard_next: - if (activity.canGoNext()) { - activity.goNext(); - } else { - activity.finishWizard(); - } - break; - case R.id.wizard_prev: - if (activity.canGoPrev()) { - activity.goPrev(); - } else { - activity.finishWizardAbruptly(); - } - break; + if (id == R.id.wizard_next) { + if (activity.canGoNext()) { + activity.goNext(); + } else { + activity.finishWizard(); + } + } else if (id == R.id.wizard_prev) { + if (activity.canGoPrev()) { + activity.goPrev(); + } else { + activity.finishWizardAbruptly(); + } } } diff --git a/app/src/main/java/org/solovyev/android/checkout/CppCheckout.java b/app/src/main/java/org/solovyev/android/checkout/CppCheckout.java index a0945076..d26a4020 100644 --- a/app/src/main/java/org/solovyev/android/checkout/CppCheckout.java +++ b/app/src/main/java/org/solovyev/android/checkout/CppCheckout.java @@ -1,6 +1,6 @@ package org.solovyev.android.checkout; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import javax.inject.Inject; import javax.inject.Singleton; diff --git a/app/src/main/java/org/solovyev/android/io/BaseIoLoader.java b/app/src/main/java/org/solovyev/android/io/BaseIoLoader.java index 63da799a..dfe728fa 100644 --- a/app/src/main/java/org/solovyev/android/io/BaseIoLoader.java +++ b/app/src/main/java/org/solovyev/android/io/BaseIoLoader.java @@ -1,6 +1,6 @@ package org.solovyev.android.io; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import java.io.BufferedReader; import java.io.IOException; diff --git a/app/src/main/java/org/solovyev/android/io/BaseIoSaver.java b/app/src/main/java/org/solovyev/android/io/BaseIoSaver.java index 055b17c3..7860b238 100644 --- a/app/src/main/java/org/solovyev/android/io/BaseIoSaver.java +++ b/app/src/main/java/org/solovyev/android/io/BaseIoSaver.java @@ -1,6 +1,6 @@ package org.solovyev.android.io; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.io.FileNotFoundException; import java.io.FileOutputStream; diff --git a/app/src/main/java/org/solovyev/android/io/FileLoader.java b/app/src/main/java/org/solovyev/android/io/FileLoader.java index ecb9346a..8bbe7dac 100644 --- a/app/src/main/java/org/solovyev/android/io/FileLoader.java +++ b/app/src/main/java/org/solovyev/android/io/FileLoader.java @@ -1,7 +1,7 @@ package org.solovyev.android.io; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import java.io.File; import java.io.FileInputStream; diff --git a/app/src/main/java/org/solovyev/android/io/FileSaver.java b/app/src/main/java/org/solovyev/android/io/FileSaver.java index 0657d8ba..1025bc5f 100644 --- a/app/src/main/java/org/solovyev/android/io/FileSaver.java +++ b/app/src/main/java/org/solovyev/android/io/FileSaver.java @@ -1,6 +1,6 @@ package org.solovyev.android.io; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import java.io.File; import java.io.FileNotFoundException; diff --git a/app/src/main/java/org/solovyev/android/io/FileSystem.java b/app/src/main/java/org/solovyev/android/io/FileSystem.java index 0bfbf225..1918dc02 100644 --- a/app/src/main/java/org/solovyev/android/io/FileSystem.java +++ b/app/src/main/java/org/solovyev/android/io/FileSystem.java @@ -1,7 +1,7 @@ package org.solovyev.android.io; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.solovyev.android.calculator.ErrorReporter; diff --git a/app/src/main/java/org/solovyev/android/prefs/CachingMapper.java b/app/src/main/java/org/solovyev/android/prefs/CachingMapper.java index be360ffc..e5139737 100644 --- a/app/src/main/java/org/solovyev/android/prefs/CachingMapper.java +++ b/app/src/main/java/org/solovyev/android/prefs/CachingMapper.java @@ -1,6 +1,6 @@ package org.solovyev.android.prefs; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; import android.text.TextUtils; import org.solovyev.common.text.Mapper; diff --git a/app/src/main/java/org/solovyev/android/sherlock/FragmentItem.java b/app/src/main/java/org/solovyev/android/sherlock/FragmentItem.java deleted file mode 100644 index 09e17ef8..00000000 --- a/app/src/main/java/org/solovyev/android/sherlock/FragmentItem.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2013 serso aka se.solovyev - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - * Contact details - * - * Email: se.solovyev@gmail.com - * Site: http://se.solovyev.org - */ - -package org.solovyev.android.sherlock; - -import android.support.v4.app.FragmentTransaction; - -import javax.annotation.Nonnull; - -/** - * User: serso - * Date: 8/7/12 - * Time: 11:57 AM - */ -public interface FragmentItem { - - void onSelected(@Nonnull FragmentTransaction ft); - - void onUnselected(@Nonnull FragmentTransaction ft); -} diff --git a/app/src/main/java/org/solovyev/android/sherlock/FragmentItemImpl.java b/app/src/main/java/org/solovyev/android/sherlock/FragmentItemImpl.java deleted file mode 100644 index 3b276c61..00000000 --- a/app/src/main/java/org/solovyev/android/sherlock/FragmentItemImpl.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2013 serso aka se.solovyev - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - * Contact details - * - * Email: se.solovyev@gmail.com - * Site: http://se.solovyev.org - */ - -package org.solovyev.android.sherlock; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.app.AppCompatActivity; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -/** - * User: serso - * Date: 8/7/12 - * Time: 11:55 AM - */ -public class FragmentItemImpl implements FragmentItem { - - @Nonnull - private final AppCompatActivity activity; - - // Fragment - - @Nonnull - private final String tag; - - @Nonnull - private final Class fragmentClass; - @Nullable - private final Integer parentViewId; - @Nullable - private Bundle fragmentArgs; - @Nullable - private Fragment fragment; - - /** - * Constructor used each time a new tab is created. - * - * @param activity The host Activity, used to instantiate the fragment - * @param tag The identifier tag for the fragment - * @param fragmentClass The fragment's Class, used to instantiate the fragment - * @param fragmentArgs arguments to be passed to fragment - * @param parentViewId parent view id - */ - - public FragmentItemImpl(@Nonnull AppCompatActivity activity, - @Nonnull String tag, - @Nonnull Class fragmentClass, - @Nullable Bundle fragmentArgs, - @Nullable Integer parentViewId) { - this.activity = activity; - this.tag = tag; - this.fragmentClass = fragmentClass; - this.fragmentArgs = fragmentArgs; - this.parentViewId = parentViewId; - - final FragmentManager supportFragmentManager = activity.getSupportFragmentManager(); - this.fragment = supportFragmentManager.findFragmentByTag(tag); - } - - - @Override - public void onSelected(@Nonnull FragmentTransaction ft) { - if (fragment == null) { - fragment = activity.getSupportFragmentManager().findFragmentByTag(this.tag); - } - - // Check if the fragment is already initialized - if (fragment == null) { - // If not, instantiate and add it to the activity - fragment = Fragment.instantiate(activity, fragmentClass.getName(), fragmentArgs); - if (parentViewId != null) { - ft.add(parentViewId, fragment, tag); - } else { - ft.add(fragment, tag); - } - } else { - if (fragment.isDetached()) { - // If it exists, simply attach it in order to show it - ft.attach(fragment); - } - } - } - - @Override - public void onUnselected(@Nonnull FragmentTransaction ft) { - if (fragment != null) { - ft.detach(fragment); - } - } -} diff --git a/app/src/main/java/org/solovyev/android/sherlock/tabs/ActionBarFragmentTabListener.java b/app/src/main/java/org/solovyev/android/sherlock/tabs/ActionBarFragmentTabListener.java deleted file mode 100644 index 695726d2..00000000 --- a/app/src/main/java/org/solovyev/android/sherlock/tabs/ActionBarFragmentTabListener.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2013 serso aka se.solovyev - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - * Contact details - * - * Email: se.solovyev@gmail.com - * Site: http://se.solovyev.org - */ - -package org.solovyev.android.sherlock.tabs; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import org.solovyev.android.sherlock.FragmentItem; -import org.solovyev.android.sherlock.FragmentItemImpl; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -/** - * User: serso - * Date: 8/4/12 - * Time: 12:42 PM - */ -public class ActionBarFragmentTabListener implements ActionBar.TabListener { - - private final FragmentItem fragmentItem; - - /** - * Constructor used each time a new tab is created. - * - * @param activity The host Activity, used to instantiate the fragment - * @param tag The identifier tag for the fragment - * @param fragmentClass The fragment's Class, used to instantiate the fragment - * @param fragmentArgs arguments to be passed to fragment - * @param parentViewId parent view id - */ - - public ActionBarFragmentTabListener(@Nonnull AppCompatActivity activity, - @Nonnull String tag, - @Nonnull Class fragmentClass, - @Nullable Bundle fragmentArgs, - @Nullable Integer parentViewId) { - this.fragmentItem = new FragmentItemImpl(activity, tag, fragmentClass, fragmentArgs, parentViewId); - } - - - /* The following are each of the ActionBar.TabListener callbacks */ - - public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { - this.fragmentItem.onSelected(ft); - } - - public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { - this.fragmentItem.onUnselected(ft); - } - - public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { - } -} diff --git a/app/src/main/java/org/solovyev/android/text/method/NumberInputFilter.java b/app/src/main/java/org/solovyev/android/text/method/NumberInputFilter.java index f7114173..35f8cd7d 100644 --- a/app/src/main/java/org/solovyev/android/text/method/NumberInputFilter.java +++ b/app/src/main/java/org/solovyev/android/text/method/NumberInputFilter.java @@ -1,7 +1,7 @@ package org.solovyev.android.text.method; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.text.InputFilter; import android.text.SpannableStringBuilder; import android.text.Spanned; diff --git a/app/src/main/java/org/solovyev/android/views/Adjuster.java b/app/src/main/java/org/solovyev/android/views/Adjuster.java index badc339f..e1387bef 100644 --- a/app/src/main/java/org/solovyev/android/views/Adjuster.java +++ b/app/src/main/java/org/solovyev/android/views/Adjuster.java @@ -3,9 +3,9 @@ package org.solovyev.android.views; import static android.graphics.Matrix.MSCALE_Y; import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.view.ViewCompat; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/org/solovyev/android/views/AutoResizeTextView.java b/app/src/main/java/org/solovyev/android/views/AutoResizeTextView.java index 3825e5bf..6fe1265a 100644 --- a/app/src/main/java/org/solovyev/android/views/AutoResizeTextView.java +++ b/app/src/main/java/org/solovyev/android/views/AutoResizeTextView.java @@ -21,7 +21,6 @@ import static android.util.TypedValue.applyDimension; import android.annotation.SuppressLint; import android.content.Context; -import android.support.v7.widget.AppCompatTextView; import android.text.Layout.Alignment; import android.text.StaticLayout; import android.text.TextPaint; @@ -29,6 +28,7 @@ import android.util.AttributeSet; import android.util.TimingLogger; import android.util.TypedValue; import android.widget.TextView; +import androidx.appcompat.widget.AppCompatTextView; /** * Text view that auto adjusts text size to fit within the view. @@ -343,4 +343,4 @@ public class AutoResizeTextView extends AppCompatTextView { void onTextResize(TextView textView, float oldSize, float newSize); } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/views/DiscreteSeekBar.java b/app/src/main/java/org/solovyev/android/views/DiscreteSeekBar.java index ed96e579..adcc1762 100644 --- a/app/src/main/java/org/solovyev/android/views/DiscreteSeekBar.java +++ b/app/src/main/java/org/solovyev/android/views/DiscreteSeekBar.java @@ -9,11 +9,11 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Build; -import android.support.v7.widget.AppCompatSeekBar; import android.util.AttributeSet; import android.view.animation.DecelerateInterpolator; import android.widget.SeekBar; +import androidx.appcompat.widget.AppCompatSeekBar; import org.solovyev.android.Check; import org.solovyev.android.calculator.R; diff --git a/app/src/main/java/org/solovyev/android/widget/menu/CustomPopupMenu.java b/app/src/main/java/org/solovyev/android/widget/menu/CustomPopupMenu.java index ae47174f..38e260d5 100644 --- a/app/src/main/java/org/solovyev/android/widget/menu/CustomPopupMenu.java +++ b/app/src/main/java/org/solovyev/android/widget/menu/CustomPopupMenu.java @@ -17,20 +17,19 @@ package org.solovyev.android.widget.menu; */ import android.content.Context; -import android.support.annotation.MenuRes; -import android.support.v7.appcompat.R; -import android.support.v7.view.SupportMenuInflater; -import android.support.v7.view.menu.MenuBuilder; -import android.support.v7.view.menu.MenuPresenter; -import android.support.v7.view.menu.SubMenuBuilder; -import android.support.v7.widget.ForwardingListener; -import android.support.v7.widget.ListPopupWindow; -import android.support.v7.widget.PopupMenu; +import androidx.annotation.MenuRes; import android.view.Gravity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import androidx.appcompat.view.SupportMenuInflater; +import androidx.appcompat.view.menu.MenuBuilder; +import androidx.appcompat.view.menu.MenuPresenter; +import androidx.appcompat.view.menu.SubMenuBuilder; +import androidx.appcompat.widget.ForwardingListener; +import androidx.appcompat.widget.ListPopupWindow; +import androidx.appcompat.widget.PopupMenu; /** * Static library support version of the framework's {@link android.widget.PopupMenu}. @@ -72,7 +71,7 @@ public class CustomPopupMenu implements MenuBuilder.Callback, MenuPresenter.Call * anchor. */ public CustomPopupMenu(Context context, View anchor, int gravity) { - this(context, anchor, gravity, R.attr.popupMenuStyle, 0); + this(context, anchor, gravity, androidx.appcompat.R.attr.popupMenuStyle, 0); } /** @@ -281,4 +280,4 @@ public class CustomPopupMenu implements MenuBuilder.Callback, MenuPresenter.Call public void onMenuModeChange(MenuBuilder menu) { } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/solovyev/android/widget/menu/CustomPopupMenuHelper.java b/app/src/main/java/org/solovyev/android/widget/menu/CustomPopupMenuHelper.java index c4d4aa4c..ac0131ba 100644 --- a/app/src/main/java/org/solovyev/android/widget/menu/CustomPopupMenuHelper.java +++ b/app/src/main/java/org/solovyev/android/widget/menu/CustomPopupMenuHelper.java @@ -23,17 +23,6 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Parcelable; -import android.support.v4.graphics.drawable.DrawableCompat; -import android.support.v4.view.ActionProvider; -import android.support.v4.view.MenuItemCompat; -import android.support.v7.appcompat.R; -import android.support.v7.view.menu.ListMenuItemView; -import android.support.v7.view.menu.MenuBuilder; -import android.support.v7.view.menu.MenuItemImpl; -import android.support.v7.view.menu.MenuPresenter; -import android.support.v7.view.menu.MenuView; -import android.support.v7.view.menu.SubMenuBuilder; -import android.support.v7.widget.ListPopupWindow; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -51,6 +40,16 @@ import android.widget.FrameLayout; import android.widget.ListAdapter; import android.widget.PopupWindow; +import androidx.appcompat.view.menu.ListMenuItemView; +import androidx.appcompat.view.menu.MenuBuilder; +import androidx.appcompat.view.menu.MenuItemImpl; +import androidx.appcompat.view.menu.MenuPresenter; +import androidx.appcompat.view.menu.MenuView; +import androidx.appcompat.view.menu.SubMenuBuilder; +import androidx.appcompat.widget.ListPopupWindow; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.core.view.ActionProvider; +import androidx.core.view.MenuItemCompat; import org.solovyev.android.Check; import java.util.ArrayList; @@ -69,7 +68,7 @@ public class CustomPopupMenuHelper implements AdapterView.OnItemClickListener, V MenuPresenter { private static final int DEFAULT_VIEW_TAG_KEY = org.solovyev.android.calculator.R.id.cpm_default_view_tag_key; - private static final int[] COLOR_ATTRS = new int[]{R.attr.colorControlNormal}; + private static final int[] COLOR_ATTRS = new int[]{androidx.appcompat.R.attr.colorControlNormal}; private static final Object DEFAULT_VIEW_TAG = new Object(); private final Context mContext; @@ -101,11 +100,11 @@ public class CustomPopupMenuHelper implements AdapterView.OnItemClickListener, V private int mGravity = Gravity.NO_GRAVITY; public CustomPopupMenuHelper(Context context, MenuBuilder menu) { - this(context, menu, null, false, R.attr.popupMenuStyle); + this(context, menu, null, false, androidx.appcompat.R.attr.popupMenuStyle); } public CustomPopupMenuHelper(Context context, MenuBuilder menu, View anchorView) { - this(context, menu, anchorView, false, R.attr.popupMenuStyle); + this(context, menu, anchorView, false, androidx.appcompat.R.attr.popupMenuStyle); } public CustomPopupMenuHelper(Context context, MenuBuilder menu, View anchorView, @@ -125,7 +124,7 @@ public class CustomPopupMenuHelper implements AdapterView.OnItemClickListener, V final Resources res = context.getResources(); mPopupMaxWidth = Math.max(res.getDisplayMetrics().widthPixels / 2, - res.getDimensionPixelSize(R.dimen.abc_config_prefDialogWidth)); + res.getDimensionPixelSize(androidx.appcompat.R.dimen.abc_config_prefDialogWidth)); mAnchorView = anchorView; @@ -482,7 +481,7 @@ public class CustomPopupMenuHelper implements AdapterView.OnItemClickListener, V @Nonnull private View getDefaultView(MenuItemImpl item, View convertView, ViewGroup parent) { if (convertView == null || convertView.getTag(DEFAULT_VIEW_TAG_KEY) != DEFAULT_VIEW_TAG) { - convertView = mInflater.inflate(R.layout.abc_popup_menu_item_layout, parent, false); + convertView = mInflater.inflate(androidx.appcompat.R.layout.abc_popup_menu_item_layout, parent, false); convertView.setTag(DEFAULT_VIEW_TAG_KEY, DEFAULT_VIEW_TAG); } diff --git a/app/src/main/java/org/solovyev/android/widget/menu/ListMenuItemViewCompat.java b/app/src/main/java/org/solovyev/android/widget/menu/ListMenuItemViewCompat.java index d1e92b9f..95a83c6f 100644 --- a/app/src/main/java/org/solovyev/android/widget/menu/ListMenuItemViewCompat.java +++ b/app/src/main/java/org/solovyev/android/widget/menu/ListMenuItemViewCompat.java @@ -1,10 +1,10 @@ package org.solovyev.android.widget.menu; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.view.menu.ListMenuItemView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.Log; +import androidx.appcompat.view.menu.ListMenuItemView; import java.lang.reflect.Field; final class ListMenuItemViewCompat { diff --git a/app/src/main/java/org/solovyev/android/widget/menu/MenuItemDivider.java b/app/src/main/java/org/solovyev/android/widget/menu/MenuItemDivider.java index d7901673..b8330e34 100644 --- a/app/src/main/java/org/solovyev/android/widget/menu/MenuItemDivider.java +++ b/app/src/main/java/org/solovyev/android/widget/menu/MenuItemDivider.java @@ -5,11 +5,11 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Build; -import android.support.annotation.Nullable; -import android.support.v7.view.menu.MenuItemImpl; -import android.support.v7.view.menu.MenuView; +import androidx.annotation.Nullable; import android.util.AttributeSet; import android.view.View; +import androidx.appcompat.view.menu.MenuItemImpl; +import androidx.appcompat.view.menu.MenuView; @SuppressWarnings("unused") public class MenuItemDivider extends View implements MenuView.ItemView { diff --git a/app/src/main/java/org/solovyev/android/wizard/WizardStep.java b/app/src/main/java/org/solovyev/android/wizard/WizardStep.java index bbfeb3dc..846eab9b 100644 --- a/app/src/main/java/org/solovyev/android/wizard/WizardStep.java +++ b/app/src/main/java/org/solovyev/android/wizard/WizardStep.java @@ -1,8 +1,8 @@ package org.solovyev.android.wizard; import android.os.Bundle; -import android.support.v4.app.Fragment; +import androidx.fragment.app.Fragment; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/app/src/main/java/org/solovyev/android/wizard/WizardUi.java b/app/src/main/java/org/solovyev/android/wizard/WizardUi.java index 34aa8f2f..4763ea4b 100644 --- a/app/src/main/java/org/solovyev/android/wizard/WizardUi.java +++ b/app/src/main/java/org/solovyev/android/wizard/WizardUi.java @@ -3,9 +3,9 @@ package org.solovyev.android.wizard; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/app/src/main/res/color/cpp_wizard_button_selector.xml b/app/src/main/res/color/cpp_wizard_button_selector.xml index 5070e788..68746f53 100644 --- a/app/src/main/res/color/cpp_wizard_button_selector.xml +++ b/app/src/main/res/color/cpp_wizard_button_selector.xml @@ -4,4 +4,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/color/cpp_wizard_button_selector_light.xml b/app/src/main/res/color/cpp_wizard_button_selector_light.xml index 05caf3b1..2f10669c 100644 --- a/app/src/main/res/color/cpp_wizard_button_selector_light.xml +++ b/app/src/main/res/color/cpp_wizard_button_selector_light.xml @@ -4,4 +4,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/drawable-v21/button_no_bg.xml b/app/src/main/res/drawable-v21/button_no_bg.xml index 2f43878c..7fdf82e0 100644 --- a/app/src/main/res/drawable-v21/button_no_bg.xml +++ b/app/src/main/res/drawable-v21/button_no_bg.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable-v21/material_blue_button.xml b/app/src/main/res/drawable-v21/material_blue_button.xml index 6f41bfd6..7c51a268 100644 --- a/app/src/main/res/drawable-v21/material_blue_button.xml +++ b/app/src/main/res/drawable-v21/material_blue_button.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable-v21/material_blue_button_lighter.xml b/app/src/main/res/drawable-v21/material_blue_button_lighter.xml index f3251db0..501eae9b 100644 --- a/app/src/main/res/drawable-v21/material_blue_button_lighter.xml +++ b/app/src/main/res/drawable-v21/material_blue_button_lighter.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable-v21/material_button_black.xml b/app/src/main/res/drawable-v21/material_button_black.xml index 8e356adc..2d1e33c9 100644 --- a/app/src/main/res/drawable-v21/material_button_black.xml +++ b/app/src/main/res/drawable-v21/material_button_black.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/material_button_black_lighter.xml b/app/src/main/res/drawable-v21/material_button_black_lighter.xml index 00a5d097..8e233792 100644 --- a/app/src/main/res/drawable-v21/material_button_black_lighter.xml +++ b/app/src/main/res/drawable-v21/material_button_black_lighter.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/material_button_dark.xml b/app/src/main/res/drawable-v21/material_button_dark.xml index 00a5d097..8e233792 100644 --- a/app/src/main/res/drawable-v21/material_button_dark.xml +++ b/app/src/main/res/drawable-v21/material_button_dark.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/material_button_dark_lighter.xml b/app/src/main/res/drawable-v21/material_button_dark_lighter.xml index 2c820789..333f673a 100644 --- a/app/src/main/res/drawable-v21/material_button_dark_lighter.xml +++ b/app/src/main/res/drawable-v21/material_button_dark_lighter.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/material_button_deep_blue.xml b/app/src/main/res/drawable-v21/material_button_deep_blue.xml index 9725d015..9e075b25 100644 --- a/app/src/main/res/drawable-v21/material_button_deep_blue.xml +++ b/app/src/main/res/drawable-v21/material_button_deep_blue.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable-v21/material_button_deep_blue_lighter.xml b/app/src/main/res/drawable-v21/material_button_deep_blue_lighter.xml index d4702044..3bad269a 100644 --- a/app/src/main/res/drawable-v21/material_button_deep_blue_lighter.xml +++ b/app/src/main/res/drawable-v21/material_button_deep_blue_lighter.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable-v21/material_button_light.xml b/app/src/main/res/drawable-v21/material_button_light.xml index f4941ddb..9201bea1 100644 --- a/app/src/main/res/drawable-v21/material_button_light.xml +++ b/app/src/main/res/drawable-v21/material_button_light.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/material_button_light_darker.xml b/app/src/main/res/drawable-v21/material_button_light_darker.xml index 2c820789..333f673a 100644 --- a/app/src/main/res/drawable-v21/material_button_light_darker.xml +++ b/app/src/main/res/drawable-v21/material_button_light_darker.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/material_button_light_primary.xml b/app/src/main/res/drawable-v21/material_button_light_primary.xml index 0d2ff8c4..8e3d9a9d 100644 --- a/app/src/main/res/drawable-v21/material_button_light_primary.xml +++ b/app/src/main/res/drawable-v21/material_button_light_primary.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/material_button_light_primary_darker.xml b/app/src/main/res/drawable-v21/material_button_light_primary_darker.xml index a9831441..9a4b1b6e 100644 --- a/app/src/main/res/drawable-v21/material_button_light_primary_darker.xml +++ b/app/src/main/res/drawable-v21/material_button_light_primary_darker.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/metro_blue_button.xml b/app/src/main/res/drawable-v21/metro_blue_button.xml index 2dcb5c44..2c289534 100644 --- a/app/src/main/res/drawable-v21/metro_blue_button.xml +++ b/app/src/main/res/drawable-v21/metro_blue_button.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable-v21/metro_button_dark.xml b/app/src/main/res/drawable-v21/metro_button_dark.xml index 2d7d7087..f594e9e4 100644 --- a/app/src/main/res/drawable-v21/metro_button_dark.xml +++ b/app/src/main/res/drawable-v21/metro_button_dark.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/metro_button_green.xml b/app/src/main/res/drawable-v21/metro_button_green.xml index f7a722b3..a2449206 100644 --- a/app/src/main/res/drawable-v21/metro_button_green.xml +++ b/app/src/main/res/drawable-v21/metro_button_green.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/metro_button_light.xml b/app/src/main/res/drawable-v21/metro_button_light.xml index 691e0ba5..c28ebd2c 100644 --- a/app/src/main/res/drawable-v21/metro_button_light.xml +++ b/app/src/main/res/drawable-v21/metro_button_light.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/metro_button_purple.xml b/app/src/main/res/drawable-v21/metro_button_purple.xml index 462a9f73..6c19b3ef 100644 --- a/app/src/main/res/drawable-v21/metro_button_purple.xml +++ b/app/src/main/res/drawable-v21/metro_button_purple.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/metro_widget_button.xml b/app/src/main/res/drawable-v21/metro_widget_button.xml index 2b054b8a..2c289534 100644 --- a/app/src/main/res/drawable-v21/metro_widget_button.xml +++ b/app/src/main/res/drawable-v21/metro_widget_button.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable-v21/metro_widget_button_dark.xml b/app/src/main/res/drawable-v21/metro_widget_button_dark.xml index d0fe7057..f594e9e4 100644 --- a/app/src/main/res/drawable-v21/metro_widget_button_dark.xml +++ b/app/src/main/res/drawable-v21/metro_widget_button_dark.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable-v21/metro_widget_button_light.xml b/app/src/main/res/drawable-v21/metro_widget_button_light.xml index cc00d1ba..c28ebd2c 100644 --- a/app/src/main/res/drawable-v21/metro_widget_button_light.xml +++ b/app/src/main/res/drawable-v21/metro_widget_button_light.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable-v21/widget_button_no_bg.xml b/app/src/main/res/drawable-v21/widget_button_no_bg.xml index 25fea48a..9f2dfc93 100644 --- a/app/src/main/res/drawable-v21/widget_button_no_bg.xml +++ b/app/src/main/res/drawable-v21/widget_button_no_bg.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable-v21/widget_button_no_bg_light.xml b/app/src/main/res/drawable-v21/widget_button_no_bg_light.xml index 75158fa4..b6ce69f9 100644 --- a/app/src/main/res/drawable-v21/widget_button_no_bg_light.xml +++ b/app/src/main/res/drawable-v21/widget_button_no_bg_light.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable/blue_button.xml b/app/src/main/res/drawable/blue_button.xml index 60ccdebd..a6725593 100644 --- a/app/src/main/res/drawable/blue_button.xml +++ b/app/src/main/res/drawable/blue_button.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/blue_button_dark.xml b/app/src/main/res/drawable/blue_button_dark.xml index a32e69f5..c4e14688 100644 --- a/app/src/main/res/drawable/blue_button_dark.xml +++ b/app/src/main/res/drawable/blue_button_dark.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/blue_button_dark_shape.xml b/app/src/main/res/drawable/blue_button_dark_shape.xml index 2fe73a7b..28866ee8 100644 --- a/app/src/main/res/drawable/blue_button_dark_shape.xml +++ b/app/src/main/res/drawable/blue_button_dark_shape.xml @@ -22,16 +22,16 @@ ~ Site: http://se.solovyev.org --> - + - + android:angle="90" + android:endColor="#002255" + android:startColor="#000d1f" /> + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/blue_button_shape.xml b/app/src/main/res/drawable/blue_button_shape.xml index 22461e07..8048b835 100644 --- a/app/src/main/res/drawable/blue_button_shape.xml +++ b/app/src/main/res/drawable/blue_button_shape.xml @@ -22,16 +22,16 @@ ~ Site: http://se.solovyev.org --> - + - + android:angle="90" + android:endColor="#003481" + android:startColor="#001c45" /> + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/button_no_bg.xml b/app/src/main/res/drawable/button_no_bg.xml index ed867670..3b744d14 100644 --- a/app/src/main/res/drawable/button_no_bg.xml +++ b/app/src/main/res/drawable/button_no_bg.xml @@ -22,13 +22,13 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/button_no_bg_pressed.xml b/app/src/main/res/drawable/button_no_bg_pressed.xml index 84bc16fe..7734ff19 100644 --- a/app/src/main/res/drawable/button_no_bg_pressed.xml +++ b/app/src/main/res/drawable/button_no_bg_pressed.xml @@ -20,6 +20,6 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable/gray_button.xml b/app/src/main/res/drawable/gray_button.xml index b2dfcdc6..d6c3267f 100644 --- a/app/src/main/res/drawable/gray_button.xml +++ b/app/src/main/res/drawable/gray_button.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/gray_button_dark.xml b/app/src/main/res/drawable/gray_button_dark.xml index 6fea30d8..da386d0a 100644 --- a/app/src/main/res/drawable/gray_button_dark.xml +++ b/app/src/main/res/drawable/gray_button_dark.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/gray_button_dark_shape.xml b/app/src/main/res/drawable/gray_button_dark_shape.xml index 2957eebf..5f201a1c 100644 --- a/app/src/main/res/drawable/gray_button_dark_shape.xml +++ b/app/src/main/res/drawable/gray_button_dark_shape.xml @@ -22,16 +22,16 @@ ~ Site: http://se.solovyev.org --> - + - + android:angle="90" + android:endColor="#333333" + android:startColor="#000000" /> + diff --git a/app/src/main/res/drawable/gray_button_shape.xml b/app/src/main/res/drawable/gray_button_shape.xml index 48acde4e..2dd3b220 100644 --- a/app/src/main/res/drawable/gray_button_shape.xml +++ b/app/src/main/res/drawable/gray_button_shape.xml @@ -22,16 +22,16 @@ ~ Site: http://se.solovyev.org --> - + - + android:angle="90" + android:endColor="#253541" + android:startColor="#071622" /> + diff --git a/app/src/main/res/drawable/material_blue_button.xml b/app/src/main/res/drawable/material_blue_button.xml index 0846505a..ab494f81 100644 --- a/app/src/main/res/drawable/material_blue_button.xml +++ b/app/src/main/res/drawable/material_blue_button.xml @@ -22,18 +22,18 @@ ~ Site: http://se.solovyev.org --> - + - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_blue_button_lighter.xml b/app/src/main/res/drawable/material_blue_button_lighter.xml index 5f27ae6e..034113ba 100644 --- a/app/src/main/res/drawable/material_blue_button_lighter.xml +++ b/app/src/main/res/drawable/material_blue_button_lighter.xml @@ -22,18 +22,18 @@ ~ Site: http://se.solovyev.org --> - + - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_black.xml b/app/src/main/res/drawable/material_button_black.xml index 5d7dd74b..a867238e 100644 --- a/app/src/main/res/drawable/material_button_black.xml +++ b/app/src/main/res/drawable/material_button_black.xml @@ -22,14 +22,14 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_black_lighter.xml b/app/src/main/res/drawable/material_button_black_lighter.xml index 610a3db0..5d789b71 100644 --- a/app/src/main/res/drawable/material_button_black_lighter.xml +++ b/app/src/main/res/drawable/material_button_black_lighter.xml @@ -22,14 +22,14 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_dark.xml b/app/src/main/res/drawable/material_button_dark.xml index 610a3db0..5d789b71 100644 --- a/app/src/main/res/drawable/material_button_dark.xml +++ b/app/src/main/res/drawable/material_button_dark.xml @@ -22,14 +22,14 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_dark_lighter.xml b/app/src/main/res/drawable/material_button_dark_lighter.xml index ef145a86..99f00e9c 100644 --- a/app/src/main/res/drawable/material_button_dark_lighter.xml +++ b/app/src/main/res/drawable/material_button_dark_lighter.xml @@ -22,14 +22,14 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_deep_blue.xml b/app/src/main/res/drawable/material_button_deep_blue.xml index 5880c0de..5ea0b10b 100644 --- a/app/src/main/res/drawable/material_button_deep_blue.xml +++ b/app/src/main/res/drawable/material_button_deep_blue.xml @@ -22,18 +22,18 @@ ~ Site: http://se.solovyev.org --> - + - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_deep_blue_lighter.xml b/app/src/main/res/drawable/material_button_deep_blue_lighter.xml index 000bc4a6..a1537413 100644 --- a/app/src/main/res/drawable/material_button_deep_blue_lighter.xml +++ b/app/src/main/res/drawable/material_button_deep_blue_lighter.xml @@ -22,18 +22,18 @@ ~ Site: http://se.solovyev.org --> - + - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_light.xml b/app/src/main/res/drawable/material_button_light.xml index 5e858ed1..bf1d9c9c 100644 --- a/app/src/main/res/drawable/material_button_light.xml +++ b/app/src/main/res/drawable/material_button_light.xml @@ -21,14 +21,14 @@ ~ Email: se.solovyev@gmail.com ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_light_darker.xml b/app/src/main/res/drawable/material_button_light_darker.xml index 77dc1816..1aa8a2b4 100644 --- a/app/src/main/res/drawable/material_button_light_darker.xml +++ b/app/src/main/res/drawable/material_button_light_darker.xml @@ -21,14 +21,14 @@ ~ Email: se.solovyev@gmail.com ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_light_primary.xml b/app/src/main/res/drawable/material_button_light_primary.xml index fe12e0cc..11cc2182 100644 --- a/app/src/main/res/drawable/material_button_light_primary.xml +++ b/app/src/main/res/drawable/material_button_light_primary.xml @@ -22,18 +22,18 @@ ~ Site: http://se.solovyev.org --> - + - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_light_primary_darker.xml b/app/src/main/res/drawable/material_button_light_primary_darker.xml index 26459f54..8f728f47 100644 --- a/app/src/main/res/drawable/material_button_light_primary_darker.xml +++ b/app/src/main/res/drawable/material_button_light_primary_darker.xml @@ -22,18 +22,18 @@ ~ Site: http://se.solovyev.org --> - + - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/material_button_pressed.xml b/app/src/main/res/drawable/material_button_pressed.xml index 0be8adff..26bbb05c 100644 --- a/app/src/main/res/drawable/material_button_pressed.xml +++ b/app/src/main/res/drawable/material_button_pressed.xml @@ -20,6 +20,6 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/drawable/metro_blue_button.xml b/app/src/main/res/drawable/metro_blue_button.xml index fda89f8b..26fa4236 100644 --- a/app/src/main/res/drawable/metro_blue_button.xml +++ b/app/src/main/res/drawable/metro_blue_button.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/metro_blue_button_shape.xml b/app/src/main/res/drawable/metro_blue_button_shape.xml index 98ffd8f7..072ca291 100644 --- a/app/src/main/res/drawable/metro_blue_button_shape.xml +++ b/app/src/main/res/drawable/metro_blue_button_shape.xml @@ -19,13 +19,13 @@ ~ Email: se.solovyev@gmail.com ~ Site: http://se.solovyev.org --> - + - - + + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/metro_button_dark.xml b/app/src/main/res/drawable/metro_button_dark.xml index f9b789be..911474a6 100644 --- a/app/src/main/res/drawable/metro_button_dark.xml +++ b/app/src/main/res/drawable/metro_button_dark.xml @@ -22,9 +22,9 @@ ~ Site: http://se.solovyev.org --> - + - + - - \ No newline at end of file + + diff --git a/app/src/main/res/drawable/metro_button_dark_shape.xml b/app/src/main/res/drawable/metro_button_dark_shape.xml index 2f78b88c..aad57063 100644 --- a/app/src/main/res/drawable/metro_button_dark_shape.xml +++ b/app/src/main/res/drawable/metro_button_dark_shape.xml @@ -20,14 +20,14 @@ ~ Site: http://se.solovyev.org --> - + - - + + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/metro_button_green.xml b/app/src/main/res/drawable/metro_button_green.xml index 29cb8939..7e5ee310 100644 --- a/app/src/main/res/drawable/metro_button_green.xml +++ b/app/src/main/res/drawable/metro_button_green.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/metro_button_green_shape.xml b/app/src/main/res/drawable/metro_button_green_shape.xml index 8cd8ac64..bad056f0 100644 --- a/app/src/main/res/drawable/metro_button_green_shape.xml +++ b/app/src/main/res/drawable/metro_button_green_shape.xml @@ -20,13 +20,13 @@ ~ Site: http://se.solovyev.org --> - + - - + + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/metro_button_light.xml b/app/src/main/res/drawable/metro_button_light.xml index e55c0f3e..9e5688e7 100644 --- a/app/src/main/res/drawable/metro_button_light.xml +++ b/app/src/main/res/drawable/metro_button_light.xml @@ -22,8 +22,8 @@ ~ Site: http://se.solovyev.org --> - + - - - \ No newline at end of file + + + diff --git a/app/src/main/res/drawable/metro_button_light_shape.xml b/app/src/main/res/drawable/metro_button_light_shape.xml index d0b6d80a..7210e106 100644 --- a/app/src/main/res/drawable/metro_button_light_shape.xml +++ b/app/src/main/res/drawable/metro_button_light_shape.xml @@ -20,13 +20,13 @@ ~ Site: http://se.solovyev.org --> - + - - + + diff --git a/app/src/main/res/drawable/metro_button_pressed.xml b/app/src/main/res/drawable/metro_button_pressed.xml index e7aa9e6a..2d984ab5 100644 --- a/app/src/main/res/drawable/metro_button_pressed.xml +++ b/app/src/main/res/drawable/metro_button_pressed.xml @@ -20,13 +20,13 @@ ~ Site: http://se.solovyev.org --> - + - - + + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/metro_button_purple.xml b/app/src/main/res/drawable/metro_button_purple.xml index 379d802a..2ed6104c 100644 --- a/app/src/main/res/drawable/metro_button_purple.xml +++ b/app/src/main/res/drawable/metro_button_purple.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/metro_button_purple_shape.xml b/app/src/main/res/drawable/metro_button_purple_shape.xml index a9bdbb48..ea9d8c74 100644 --- a/app/src/main/res/drawable/metro_button_purple_shape.xml +++ b/app/src/main/res/drawable/metro_button_purple_shape.xml @@ -20,13 +20,13 @@ ~ Site: http://se.solovyev.org --> - + - - + + diff --git a/app/src/main/res/drawable/metro_widget_button.xml b/app/src/main/res/drawable/metro_widget_button.xml index fda89f8b..26fa4236 100644 --- a/app/src/main/res/drawable/metro_widget_button.xml +++ b/app/src/main/res/drawable/metro_widget_button.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/metro_widget_button_dark.xml b/app/src/main/res/drawable/metro_widget_button_dark.xml index f9b789be..911474a6 100644 --- a/app/src/main/res/drawable/metro_widget_button_dark.xml +++ b/app/src/main/res/drawable/metro_widget_button_dark.xml @@ -22,9 +22,9 @@ ~ Site: http://se.solovyev.org --> - + - + - - \ No newline at end of file + + diff --git a/app/src/main/res/drawable/metro_widget_button_light.xml b/app/src/main/res/drawable/metro_widget_button_light.xml index b244d178..735f09cc 100644 --- a/app/src/main/res/drawable/metro_widget_button_light.xml +++ b/app/src/main/res/drawable/metro_widget_button_light.xml @@ -22,9 +22,9 @@ ~ Site: http://se.solovyev.org --> - + - + - - \ No newline at end of file + + diff --git a/app/src/main/res/drawable/violet_button.xml b/app/src/main/res/drawable/violet_button.xml index 52d014d8..74bf22e5 100644 --- a/app/src/main/res/drawable/violet_button.xml +++ b/app/src/main/res/drawable/violet_button.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/violet_button_dark.xml b/app/src/main/res/drawable/violet_button_dark.xml index 49a7ceba..3b75dac1 100644 --- a/app/src/main/res/drawable/violet_button_dark.xml +++ b/app/src/main/res/drawable/violet_button_dark.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/violet_button_dark_shape.xml b/app/src/main/res/drawable/violet_button_dark_shape.xml index 2b11013c..bdeea8d5 100644 --- a/app/src/main/res/drawable/violet_button_dark_shape.xml +++ b/app/src/main/res/drawable/violet_button_dark_shape.xml @@ -22,16 +22,16 @@ ~ Site: http://se.solovyev.org --> - + - + android:angle="90" + android:endColor="#4f1c47" + android:startColor="#2b0325" /> + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/violet_button_shape.xml b/app/src/main/res/drawable/violet_button_shape.xml index 495949b1..32ed48fd 100644 --- a/app/src/main/res/drawable/violet_button_shape.xml +++ b/app/src/main/res/drawable/violet_button_shape.xml @@ -22,16 +22,16 @@ ~ Site: http://se.solovyev.org --> - + - + android:angle="90" + android:endColor="#8a307c" + android:startColor="#520546" /> + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/widget_button_no_bg.xml b/app/src/main/res/drawable/widget_button_no_bg.xml index e343e5c7..08fedae8 100644 --- a/app/src/main/res/drawable/widget_button_no_bg.xml +++ b/app/src/main/res/drawable/widget_button_no_bg.xml @@ -22,13 +22,13 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/widget_button_no_bg_light.xml b/app/src/main/res/drawable/widget_button_no_bg_light.xml index e343e5c7..08fedae8 100644 --- a/app/src/main/res/drawable/widget_button_no_bg_light.xml +++ b/app/src/main/res/drawable/widget_button_no_bg_light.xml @@ -22,13 +22,13 @@ ~ Site: http://se.solovyev.org --> - + - + - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/widget_button_no_bg_pressed.xml b/app/src/main/res/drawable/widget_button_no_bg_pressed.xml index 84bc16fe..7734ff19 100644 --- a/app/src/main/res/drawable/widget_button_no_bg_pressed.xml +++ b/app/src/main/res/drawable/widget_button_no_bg_pressed.xml @@ -20,6 +20,6 @@ ~ Site: http://se.solovyev.org --> - - + + diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 0a2d67d9..64703956 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -22,53 +22,53 @@ ~ Site: http://se.solovyev.org --> + xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical"> - + + android:id="@+id/partial_keyboard" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:baselineAligned="false" + android:orientation="horizontal"> + android:id="@+id/display" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="5" + android:orientation="horizontal" /> + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" /> + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="1" /> + android:id="@+id/keyboard" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="3" /> diff --git a/app/src/main/res/layout-land/activity_tabs_tablayout.xml b/app/src/main/res/layout-land/activity_tabs_tablayout.xml index 3038c097..947e39ac 100644 --- a/app/src/main/res/layout-land/activity_tabs_tablayout.xml +++ b/app/src/main/res/layout-land/activity_tabs_tablayout.xml @@ -2,14 +2,15 @@ - - - + - \ No newline at end of file + diff --git a/app/src/main/res/layout-land/cpp_app_keyboard.xml b/app/src/main/res/layout-land/cpp_app_keyboard.xml index e40d246f..416ce020 100644 --- a/app/src/main/res/layout-land/cpp_app_keyboard.xml +++ b/app/src/main/res/layout-land/cpp_app_keyboard.xml @@ -22,17 +22,17 @@ ~ Site: http://se.solovyev.org --> - + + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:baselineAligned="false" + android:orientation="horizontal"> @@ -53,11 +53,11 @@ + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:baselineAligned="false" + android:orientation="horizontal"> @@ -78,11 +78,11 @@ + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:baselineAligned="false" + android:orientation="horizontal"> @@ -102,4 +102,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_empty.xml b/app/src/main/res/layout/activity_empty.xml index 96f472fa..44d6b953 100644 --- a/app/src/main/res/layout/activity_empty.xml +++ b/app/src/main/res/layout/activity_empty.xml @@ -28,9 +28,9 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"> - - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 11e6e204..bba82ca8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -22,42 +22,42 @@ ~ Site: http://se.solovyev.org --> - + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> - + + android:id="@+id/partial_keyboard" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:baselineAligned="false"> + android:id="@+id/display" + android:layout_width="0dp" + android:layout_height="match_parent" + android:layout_weight="4" /> + android:id="@+id/keyboard" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="5" /> diff --git a/app/src/main/res/layout/activity_main_editor_with_overflow_menu.xml b/app/src/main/res/layout/activity_main_editor_with_overflow_menu.xml index 45fb1bf5..731f2e16 100644 --- a/app/src/main/res/layout/activity_main_editor_with_overflow_menu.xml +++ b/app/src/main/res/layout/activity_main_editor_with_overflow_menu.xml @@ -1,36 +1,36 @@ - + android:id="@+id/editor" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + android:layout_width="40dp" + android:layout_height="?attr/actionBarSize" + android:layout_gravity="top|end" + android:background="@null" + android:paddingLeft="0dp" + android:paddingRight="0dp" /> + android:layout_width="20dp" + android:layout_height="36dp" + android:layout_gravity="top|end" + android:tooltipText="@null" + android:clickable="false" + android:focusable="false" + android:focusableInTouchMode="false" + android:paddingLeft="0dp" + android:paddingRight="0dp" /> diff --git a/app/src/main/res/layout/activity_tabs.xml b/app/src/main/res/layout/activity_tabs.xml index 6c1f2b04..d899e78c 100644 --- a/app/src/main/res/layout/activity_tabs.xml +++ b/app/src/main/res/layout/activity_tabs.xml @@ -22,7 +22,7 @@ ~ Site: http://se.solovyev.org --> - - - - + - - \ No newline at end of file + diff --git a/app/src/main/res/layout/activity_tabs_tablayout.xml b/app/src/main/res/layout/activity_tabs_tablayout.xml index b21c8bff..bf31d60d 100644 --- a/app/src/main/res/layout/activity_tabs_tablayout.xml +++ b/app/src/main/res/layout/activity_tabs_tablayout.xml @@ -2,14 +2,14 @@ - - - \ No newline at end of file + diff --git a/app/src/main/res/layout/cpp_activity_wizard.xml b/app/src/main/res/layout/cpp_activity_wizard.xml index 6f9fa7c2..4f9288e7 100644 --- a/app/src/main/res/layout/cpp_activity_wizard.xml +++ b/app/src/main/res/layout/cpp_activity_wizard.xml @@ -1,13 +1,13 @@ - - - \ No newline at end of file + diff --git a/app/src/main/res/layout/cpp_app_button_0.xml b/app/src/main/res/layout/cpp_app_button_0.xml index 070151ea..60e1868d 100644 --- a/app/src/main/res/layout/cpp_app_button_0.xml +++ b/app/src/main/res/layout/cpp_app_button_0.xml @@ -23,12 +23,12 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_1.xml b/app/src/main/res/layout/cpp_app_button_1.xml index a4a9df5e..69cb2ece 100644 --- a/app/src/main/res/layout/cpp_app_button_1.xml +++ b/app/src/main/res/layout/cpp_app_button_1.xml @@ -23,13 +23,13 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_2.xml b/app/src/main/res/layout/cpp_app_button_2.xml index 8d896df2..337a0e0b 100644 --- a/app/src/main/res/layout/cpp_app_button_2.xml +++ b/app/src/main/res/layout/cpp_app_button_2.xml @@ -23,13 +23,13 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_3.xml b/app/src/main/res/layout/cpp_app_button_3.xml index 49092575..aa7cbdd1 100644 --- a/app/src/main/res/layout/cpp_app_button_3.xml +++ b/app/src/main/res/layout/cpp_app_button_3.xml @@ -23,13 +23,13 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_4.xml b/app/src/main/res/layout/cpp_app_button_4.xml index f75f3620..ab1161f2 100644 --- a/app/src/main/res/layout/cpp_app_button_4.xml +++ b/app/src/main/res/layout/cpp_app_button_4.xml @@ -22,13 +22,13 @@ ~ Site: http://se.solovyev.org --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_5.xml b/app/src/main/res/layout/cpp_app_button_5.xml index f762e287..b72f7afc 100644 --- a/app/src/main/res/layout/cpp_app_button_5.xml +++ b/app/src/main/res/layout/cpp_app_button_5.xml @@ -22,13 +22,13 @@ ~ Site: http://se.solovyev.org --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_6.xml b/app/src/main/res/layout/cpp_app_button_6.xml index cb0768a0..1b08f758 100644 --- a/app/src/main/res/layout/cpp_app_button_6.xml +++ b/app/src/main/res/layout/cpp_app_button_6.xml @@ -23,12 +23,12 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_7.xml b/app/src/main/res/layout/cpp_app_button_7.xml index 3da38729..a744a093 100644 --- a/app/src/main/res/layout/cpp_app_button_7.xml +++ b/app/src/main/res/layout/cpp_app_button_7.xml @@ -23,13 +23,13 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_8.xml b/app/src/main/res/layout/cpp_app_button_8.xml index efc4c5ca..5ea18a97 100644 --- a/app/src/main/res/layout/cpp_app_button_8.xml +++ b/app/src/main/res/layout/cpp_app_button_8.xml @@ -23,13 +23,13 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_9.xml b/app/src/main/res/layout/cpp_app_button_9.xml index 5dfa09b1..b0aafec7 100644 --- a/app/src/main/res/layout/cpp_app_button_9.xml +++ b/app/src/main/res/layout/cpp_app_button_9.xml @@ -23,11 +23,11 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_clear.xml b/app/src/main/res/layout/cpp_app_button_clear.xml index 4012f5a1..c9381403 100644 --- a/app/src/main/res/layout/cpp_app_button_clear.xml +++ b/app/src/main/res/layout/cpp_app_button_clear.xml @@ -23,10 +23,10 @@ --> \ No newline at end of file + android:textStyle="bold"/> diff --git a/app/src/main/res/layout/cpp_app_button_division.xml b/app/src/main/res/layout/cpp_app_button_division.xml index 4d42b243..bda618d2 100644 --- a/app/src/main/res/layout/cpp_app_button_division.xml +++ b/app/src/main/res/layout/cpp_app_button_division.xml @@ -23,11 +23,11 @@ --> \ No newline at end of file + android:text="/" + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_dot.xml b/app/src/main/res/layout/cpp_app_button_dot.xml index 426ed501..c8b9fad6 100644 --- a/app/src/main/res/layout/cpp_app_button_dot.xml +++ b/app/src/main/res/layout/cpp_app_button_dot.xml @@ -23,12 +23,12 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_equals_no_bg.xml b/app/src/main/res/layout/cpp_app_button_equals_no_bg.xml index f846d4f9..e103921e 100644 --- a/app/src/main/res/layout/cpp_app_button_equals_no_bg.xml +++ b/app/src/main/res/layout/cpp_app_button_equals_no_bg.xml @@ -22,15 +22,15 @@ ~ Site: http://se.solovyev.org --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_erase.xml b/app/src/main/res/layout/cpp_app_button_erase.xml index 5dd168f1..72e26992 100644 --- a/app/src/main/res/layout/cpp_app_button_erase.xml +++ b/app/src/main/res/layout/cpp_app_button_erase.xml @@ -26,4 +26,4 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/cpp_button_erase" style="?attr/cpp_button_style_operation_highlighted" - android:text="@string/cpp_glyph_backspace"/> \ No newline at end of file + android:text="@string/cpp_glyph_backspace"/> diff --git a/app/src/main/res/layout/cpp_app_button_functions.xml b/app/src/main/res/layout/cpp_app_button_functions.xml index 445d9c16..743e4e57 100644 --- a/app/src/main/res/layout/cpp_app_button_functions.xml +++ b/app/src/main/res/layout/cpp_app_button_functions.xml @@ -23,13 +23,13 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_history.xml b/app/src/main/res/layout/cpp_app_button_history.xml index 3710be8d..4d295c91 100644 --- a/app/src/main/res/layout/cpp_app_button_history.xml +++ b/app/src/main/res/layout/cpp_app_button_history.xml @@ -22,11 +22,11 @@ ~ Site: http://se.solovyev.org --> \ No newline at end of file + app:directionTextUp="@string/cpp_glyph_undo" /> diff --git a/app/src/main/res/layout/cpp_app_button_left.xml b/app/src/main/res/layout/cpp_app_button_left.xml index 21447121..851bd585 100644 --- a/app/src/main/res/layout/cpp_app_button_left.xml +++ b/app/src/main/res/layout/cpp_app_button_left.xml @@ -22,12 +22,12 @@ ~ Site: http://se.solovyev.org --> - \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_like.xml b/app/src/main/res/layout/cpp_app_button_like.xml index 05363467..5827f6dc 100644 --- a/app/src/main/res/layout/cpp_app_button_like.xml +++ b/app/src/main/res/layout/cpp_app_button_like.xml @@ -26,4 +26,4 @@ android:id="@id/cpp_button_like" style="?attr/cpp_button_style_control" xmlns:android="http://schemas.android.com/apk/res/android" - android:text="@string/cpp_glyph_heart"/> \ No newline at end of file + android:text="@string/cpp_glyph_heart"/> diff --git a/app/src/main/res/layout/cpp_app_button_memory.xml b/app/src/main/res/layout/cpp_app_button_memory.xml index 89ec2124..53d120ac 100644 --- a/app/src/main/res/layout/cpp_app_button_memory.xml +++ b/app/src/main/res/layout/cpp_app_button_memory.xml @@ -21,11 +21,11 @@ ~ Email: se.solovyev@gmail.com ~ Site: http://se.solovyev.org --> - \ No newline at end of file + android:textStyle="bold"/> diff --git a/app/src/main/res/layout/cpp_app_button_minus.xml b/app/src/main/res/layout/cpp_app_button_minus.xml index 5672279f..b8589ca0 100644 --- a/app/src/main/res/layout/cpp_app_button_minus.xml +++ b/app/src/main/res/layout/cpp_app_button_minus.xml @@ -22,10 +22,10 @@ ~ Site: http://se.solovyev.org --> \ No newline at end of file + android:text="−" + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_multiplication.xml b/app/src/main/res/layout/cpp_app_button_multiplication.xml index 66623666..af4c571e 100644 --- a/app/src/main/res/layout/cpp_app_button_multiplication.xml +++ b/app/src/main/res/layout/cpp_app_button_multiplication.xml @@ -23,12 +23,12 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_percent.xml b/app/src/main/res/layout/cpp_app_button_percent.xml index 361b5440..bacb9ade 100644 --- a/app/src/main/res/layout/cpp_app_button_percent.xml +++ b/app/src/main/res/layout/cpp_app_button_percent.xml @@ -23,9 +23,9 @@ --> \ No newline at end of file + android:text="%" + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_plus.xml b/app/src/main/res/layout/cpp_app_button_plus.xml index 99fccc8c..a698a5fa 100644 --- a/app/src/main/res/layout/cpp_app_button_plus.xml +++ b/app/src/main/res/layout/cpp_app_button_plus.xml @@ -22,11 +22,11 @@ ~ Site: http://se.solovyev.org --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_right.xml b/app/src/main/res/layout/cpp_app_button_right.xml index 6ddeff76..ea92d5c7 100644 --- a/app/src/main/res/layout/cpp_app_button_right.xml +++ b/app/src/main/res/layout/cpp_app_button_right.xml @@ -30,4 +30,4 @@ android:text="@string/cpp_glyph_right" app:directionTextUp="@string/cpp_glyph_fast_forward" app:directionTextDown="@string/cpp_glyph_paste" - tools:ignore="HardcodedText" /> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_round_brackets.xml b/app/src/main/res/layout/cpp_app_button_round_brackets.xml index 06dac7c6..a1114f19 100644 --- a/app/src/main/res/layout/cpp_app_button_round_brackets.xml +++ b/app/src/main/res/layout/cpp_app_button_round_brackets.xml @@ -23,13 +23,13 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_button_vars.xml b/app/src/main/res/layout/cpp_app_button_vars.xml index bf077783..aab5c483 100644 --- a/app/src/main/res/layout/cpp_app_button_vars.xml +++ b/app/src/main/res/layout/cpp_app_button_vars.xml @@ -23,13 +23,13 @@ --> \ No newline at end of file + tools:ignore="HardcodedText" /> diff --git a/app/src/main/res/layout/cpp_app_display.xml b/app/src/main/res/layout/cpp_app_display.xml index c4608f24..9515221b 100644 --- a/app/src/main/res/layout/cpp_app_display.xml +++ b/app/src/main/res/layout/cpp_app_display.xml @@ -27,4 +27,4 @@ style="@style/CppText.Display" android:paddingLeft="@dimen/cpp_display_padding_side" android:paddingRight="@dimen/cpp_display_padding_side" - xmlns:android="http://schemas.android.com/apk/res/android"/> \ No newline at end of file + xmlns:android="http://schemas.android.com/apk/res/android"/> diff --git a/app/src/main/res/layout/cpp_app_editor.xml b/app/src/main/res/layout/cpp_app_editor.xml index 8f5eaec8..0c779676 100644 --- a/app/src/main/res/layout/cpp_app_editor.xml +++ b/app/src/main/res/layout/cpp_app_editor.xml @@ -22,8 +22,8 @@ ~ Site: http://se.solovyev.org --> \ No newline at end of file + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_marginEnd="16dp" + android:layout_marginRight="16dp" /> diff --git a/app/src/main/res/layout/cpp_app_keyboard.xml b/app/src/main/res/layout/cpp_app_keyboard.xml index 533c6fa3..68b2f783 100644 --- a/app/src/main/res/layout/cpp_app_keyboard.xml +++ b/app/src/main/res/layout/cpp_app_keyboard.xml @@ -22,15 +22,15 @@ ~ Site: http://se.solovyev.org --> - + + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> @@ -45,9 +45,9 @@ + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> @@ -63,9 +63,9 @@ + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> @@ -80,9 +80,9 @@ + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> @@ -98,9 +98,9 @@ + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> @@ -114,4 +114,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/layout/cpp_release_note_step.xml b/app/src/main/res/layout/cpp_release_note_step.xml index 773ea11c..fa891ef3 100644 --- a/app/src/main/res/layout/cpp_release_note_step.xml +++ b/app/src/main/res/layout/cpp_release_note_step.xml @@ -22,24 +22,24 @@ ~ Site: http://se.solovyev.org --> - + + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="@android:style/TextAppearance.Large" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textAppearance="@android:style/TextAppearance.Medium" /> diff --git a/app/src/main/res/layout/cpp_simple_button_0.xml b/app/src/main/res/layout/cpp_simple_button_0.xml index bee37500..e30b3708 100644 --- a/app/src/main/res/layout/cpp_simple_button_0.xml +++ b/app/src/main/res/layout/cpp_simple_button_0.xml @@ -23,9 +23,9 @@ -->

G6Yk#w63Fc_{KE|>5Q1+W3cglC~} zk?)i38=vZ;w2;|}@kiC=iSfsIfL@^;fX*Uqh-QEa=1&Mmf0rQb`YypENh%2rWtxF7 z#EKhj&WbZ`_9=DLh#{#@iz=v2{=W>M7tKK&v5W93#4G+|5$5X=%KR*8=?^hwxv=l4 zNFt1cfjYbpO)mfP0OjNuk1#f1IoyxrhjRE8elItTT)whlE@-ouO-H>JsOgI9GIk76bjOm5Xsi%D>xeL6PPXCm&C6DOphI$1;mYm z3Ccm;;FWPWfjFT!`R{Nr8-18DKn(8aU?P~0H649KpvD^9pOOsB1lv{Mj|tId7SX?C z^Wyv%wwLG_u2;>K+9=ZtuQtsKv9{%z%7|C+sL%kEpz3m?VZJ@!CgI?3vbewvOfRww z7?2**it32IZ2`~&=%=Tyg+GORqdbtEi>=mFgE0udBa;w`Gl=sCKT;K6alZ@xXBx4k zuQ!ArpiGe)2zLTh5%EA;0~0~E@=Ks+L$5)O3fjJ6ML_t%Ji$E2n?g)Ul|m9^RjjhI z*&7zr`bPBMQ^KvJ(b)Wr^5yVG9nwXk%Y&%G5Tt$c;{Tz_-S2dJ)ui>=cOUZtaKCR9eA6Ww{~Nar;&72zklTr`2Djp} zVEy^Art zAD|#|J=rN)76n2t#$ykcc+g`_{w$(k4@X&mX2c(C3+L1g4a92HR*h#Hz7K~D9}TAs zUlS4Igyi`^NdJbhPu}!bKdgq_x|8pdpNp(UwIbJn91#oihiipK%>_tp^!KD#)LC|(^`u2V!kl+(k(JiV`z%xp%pb3l#jtP4aJCwIL z3y?grkLWYPeYi<&4SvvD9?m%-(I>?17*K%$M_QHt;&-qj2aqcg6Vh!`z>f42#I_7T zHM|6MiY)gpc|C?aJuIk%FaoLq=ky5ESVcacsa0802axe4p4PSu?Hq5UC++02Ujo14c83x(^%cMyZx)Iol>4?A0B!6KC@Bs*fd!s&(o`(rK zGbBUgw*O~dcSn>7#`Y+Y)qzQ{m$7D7is6@!3Q6i3u;695C?2hRB4PPSM^deA7yWLRWG zqWrNQf0^$S2AsnWP?<>#wtWH-z6r*n?|d&g7S9yvdW8H0$Aat#zpVkV4X84%bR?RN zPA`6kN{{u3Aio{m;<+9D)5P5Tt%e9B6V+R6gj2a36w=^jS=b}?k8RNz>FY&+1%UmF z$g&s%0kdOp%_fh};2&FwTJVJLn$zFXQQIsI1Dcw^A2^_aNLL?sZd8|_)h$1S#?6pP z84AFTg-OV?rA4VSL=en4rK6Wf;)7AyD8OMuDX7pP#DgnYe;3!~B!!Uf#{wfXldEbP zDsM{Fu`X*`(6MH;P0{&U)l@}!(bnTl0)Dslo;US^eUt5cAux6GmUFPq=YH-y%@Cpx zqK{Ous!cm~k%8fcau0Eeaw;v%o(I+BiueEPsV1lL<^?aN`uVbjHaM>i*?v ze;m`~h73lsa2B#ale=0ddY?lPsCL`HV!`w5d-yPb)Jqg90OpNx&n=16pBq3JC;;n? zWjfiH8`cHFSEYy2wrc23P@ULR9{DK#cMVOw+#sI?yW=`96QFMyQwMXt_FVd7ky( zEQcI4!Jh~+@z>~UJvjbBwa5LTSH85?p6~p5e99U-ck$1s7_SY7xDsP8`0D*W|L>Fo z4|EJp5##?iXwRQU46&ne5zEJiTT?y^73ISCzoKkH`z>hx9|3FrK-a;y`Mcmo;Ij|> z@eO0?RLeh5=(iim6#qxS-)y?rX0tsmY1@90MQx1>n6KzIYR z<2}hF5nw5Z+Z)9adHeJ)q$1w}^KzZvOzd5hTcu&6>01He3HF&*&zIq6iT|4+@LQy5 zKH&?Hu76EXoaPg`fapTM{nvyJ;R~=X_*j3L6{M0)c82G3NeX&YvdR1!%cnibT-*BDgr}* zzYBfwdwu);-eV(w>^RFLt-mJ=29iYyhPPbud+JmakO|`DIceRMMF||sjOnfZEZa^fU zB9IAa2kfeS`JDl7LN?4c#QQ7Ad?4O9_b{iQfu@DzYTD>(7F;miU~Vw?6sNco&kWCh z-T{RA+TBW&S0d9bc@W*N)H3(R((rs<5Gk$Kpc$e+AyLz2!MIWXL${-;1~n%PraKAU z##3Gp3HCL*rB>4xh(_DE1n`yBeyiQiQPa9oq^tCx#?xT3BkN5>W_3+G1lBJ z{WEJVX83!o16j)3=waZ#KR4v!Z#H&ge6)<3zc2gMcWgY!SJq1JBgq$x7@WhgOk3%B zi)dU`SOe1m;YMpiXS08ZY20AcAk{;E%6gl&a~L_(5>h3Stpnr*dI6z;l0ZS_XJcq1 zK~@=r1d7t*^ZMF7!VhK}>rW0v^DyA?)A@kY2fIIKEgbyHD%( zk@h+EVfH}>)kH@T9pJh1P;dZno#=MEuC{h;ck+lnULWc6zvVwqH{~mZc~PZPBPb!{ z06$$_7ahtlE4FibPVUx^4pa5`=)T%2ZQKuGoFpIEBe!*J-(#P{w3%)Z3b=Q=9?bL2 zU95T^T&n$?pD1fnT`BS7s4`mqakMp;ru1=G-P_@HuGrPFd7j$=eXi}H^e(XW&{>gF z=xgvYgK&ay5Iu=|F-5_KJtd!|&EH_R-&Z?oyk-1cJO4>nOB;A!D`%WG(4CFRZT(z% zs2yc#K1G+=Pgb%oqb>Q*8<#)D%!CwxQdm7JB^NnzLWb7tx2 z=dI7MpXCa#3l}79Bb_A9V(=op1dn4%kqZQ)7Q~eza?!g;cp2NNpXWTy)&ZUk`;-&9 zyv+XV%bqDW$NPlYTnAtsSr1kS5x<`&iBwTkaaFPBaGe?U+tQ=zGJ&mH&Zm*U zZ6IUaIWQNf>PRt(yNI%g>&|fA)*9t_F|~m&L@!9{XXWGPWA)nnnEDuWH8s>j;7|MR z^qST#yr!mK#3YkerdxROOJ5E~VVVj+nU1bOfkAB}<3N2&<$;!~C z6yX@L55SBVjL=2Xk6=D-dOmx8K#&}$-Etl94pkalEQ)})V3gLXbrE?FyoVHkUvJ;| zcprSI>FzmrmxG_fYRBqsxtxO@0sn?vB)I8ibogzNxHT0cot?!>Lq&9UwrEcVQs#%u zN+MpOPU0k$Z?X&J(M?eeR+Uzx*UYj+2lko%e9K{%1TiC$0l()}#Y_`XNO%4>pzeOaST-LtM(mAlqSrQOLd%6-Z; zIVNUA{mgEcPv*X3&SmZ;Lq$xAKNT5e*V3Ow@Z{*_R&ty9&fXd;koSac`^9PmZzsiw zi4uBLnPSj#SCSEg6aGFUDwRJJp?Yj|rY zEeJ29R8BQ?kHwBwPY5RZdTLM9SB)EJ30it?T*syPr{1_sO3{O9?pD)iIey(+qo32n zsyx+xQan#y{n3`umgUrP(491V4R*79<8{40fjr8!zqo6t=Q>=zs?NMTYwK+*)_g!5 z>*sMb5QHrBa_Nk0=<_&xoc@cWg1M@@^LbqAl~~4W*QD<@Ffvf{?40At+H1i_D_!}J z>9v5S<drn(Lk%S(Zlm9jWTVaMJV(Auxa)j(M)V6 zw68wC{8s)T6Zbg#DB6w5 zp*{OTElg8WBd_LtSaKrv@O_t&E>rm<|Be5XMO++g-REy#oUN?u`Nnn+guBN>}{oNe(XcBs!-py`sZpq3>bHqxqUDRr`gYI+luayNm`juv1-IeC4yjgyZy|Tj+ETNP)wHejPl69cn zT5gB$+kMr_+KP8e-m;(H3;fE)>U-b)lv^!fl6&yQ^o3SCxxds=tSz68+v%F4+3*eD z`m&?vuqMYlN0PM-hc8D@O`A@Z!Hbu^=$f#v+1nD7^*~h2RSdY2b*{nN?ev`CIm6n~ zYMXC~x8=j+x10m_?&h1d98EU^=a6=b_HF$reXHtU)o_|I)-Be(t_yeNCxnZ`)is$^ zoFQCCS*e_RTvhhV%e!{Rw!FV?o#yxyh`D^X?%kDKrP{IE=hiCLFwf7<*Umv7JRhvj zk=G2_U$~TPV{H__PTCmEo!Z!aIkyvBc-6Z(`FX+NzbvXl)hynurR$`-&|+h2WyJ%$ zwizF1Ow$qk@>Holhquhzz|s9{Idi4G+tu1y?xb(QQrGZn*Zi}{iKT6&t&^@tRySkQ z&jpR;<};zU8<&;y=Go1E39hT>@>p6`t$LGus@d7j6 zboVxEbM*&1Zr0v*FZhJ`e9OGPe2Z>GCq8924b>w|&S_QSOMB;DT_-_y3J=NWk9O`4 z@Kf@B7F%rexn&*}7i=Z>^8LLUtNh_*zb4xc1 zej9HyFLU=bYa0#z9v{{(Lg$F*zwR@=HE(&n-Q)00ERU#t0UOBG#awT1Y^al0Ra0rNYp83ev{BZL z{k(qq@?EIb-^<^{U&Y_+&(0<-_qq2r3ZzoG2Xk6A}Y44W0wi zJfaH{0ltUb=63H(SP7AVqsQIW`9Kx49lCfW3TL zG5XNwPy>EkC)Sr;ti8BvL-?;lsCzA<{ABBIxT6@h(T~Lr{6@{!FUt}aZoGFxA6bV) zcRkF(cbK|g^H7CYb?Ximdt?Q?xVGxsj6)k4?%nZef=R)c)#P(c{Uiv7q4H{C@c$y^KO7wNL4C>nI&GhS3JBm7e^vlHX zvC;9f^t+2!wR6w3H1)sMs68+%KQQ9(Ri+GUa?@4Fj*U0g&9ICKJ$OrmCyEt`$)qe) zyJ{>)5#XPu#C;uKl(lGF9*OC{Ml9YQOQf@m=#r=BCrp_vzpl^90MK0eOY*gTW;7G@@g%3>H6DKk~kWw^NS&3`Rp$io)d`Wa&t+3$p2L zm2!Nm>N3xr;j&%x5g(m_GC^A^6W1%Lb)!+wi1aD})|65&e)t;}of9HsQ6$g4!NM?+5fwLMoL zJmD99o5ZW4)UCifdLaXDMXF#X#G?pR8roWlTt?|VV!6v)q^+%x-@WU5Z8<9kHEK9| zunRvcrI>h;bdjJ+<{eU`V0H{m7FCn5I2t!1aV>TY^%TS{CPZqVNStIJe&djGN@kxV zw_CDJ;3N7j?Us1AO~6k#DO)!3B$Dtn3{bDs6Z^F-Z$t6BPw*&Jy@cMPQatsj2CF<$ zLdghcea@>Y347PTr7p#f$Im zvt=%LIf@qr?sMLysXj9Aik8zE?9r124OZM;X_NU6Gi~gFlCv~;3I{VdcyfM{JBL1a zO0MkRs8j?vrXg?r+T#Ui9n?X76pQv{{w4#n7WEKrbn z6xgh=ein}(I%SG!PN%S^?I-vr){IE)wy@__7jQm*(pMnPhn!bjoEFs)Cv;)dmx{82 z)mI|^@xuk2v2br!w=qyqlHLllP2Nu`XBVcb82@O;1$|AvWt#d>aTj}6;9Bk)^oi#Qv#Ri}@f+uC$&uo5fx^5(mKD714_g=PHHC+1w`CDNE9|r4 zsp&2k;h{yRQM-8_K0&-I` zH@9Gf#T!LaGxjqFM=eM2w|ut}yrPC=FNf|&7SXsVq#hQX-uQp5O0jTC*qzO zK(IyvwLakwivm5c#;9r|Y|yeM>`YaGXQxPR)LCQ2bw{U6Zd@Hqx&W*OGYc~+3kxg@ zb2*?&YQM@-5JQXrU{)Jy+)SGxi_vsk8%eiMqh2p{_WqL~O-RWnIG0s|6jY&G7X=S213w4DB{?d*O`pQIeEj3W%o?>Mv*JNc0Nn_xv zHerP&Vr7EBPd8Rif>%kQ1_I9rH~Q!67mxMsnn^$z3DyH3v36#Z*1K{$n>H%ufctZ z8R&hQcItaie-HY?@e=I?82XKL7}+h`D~ja#BVg?k}?Nq&paH}|*5tLv$qS~6V1 zKD9rUyLZ1wzE`@(e8KJ*lH}P+W}9paeQ_{6AAa)$LEaVNPmkLn_2Ea}Lw^((j8NKd zxuSh_^Mme5Qreq)bn(OP$=Vob@`1`59e89A%nG~lej@NA&KoE9porU^@ga)as^gEH z(mc-K|3*#c%FrFKF@=2%?SW} z0HtfySNzohr5np9T)))3or5Px!HJ&Hyq%5hsT=zn>__*&vU_JGfuMM|@A8KVV~5Xy5)S?^5oyD;yzt#Mw((!H8;yJ zI>(s#9+frP?L!7-v{*x2gW4)OyO)e2J85JG%47%e1(W&WKXoG2bPJll(Q;AstEgy? zK7UtZUVX0fy9`r1+Jss_>LIbu2A7S^8FM)HN!zo_2kHux$bP|O! z=ydEq`X7rc-p$MX+gtoITKwCO4T~+>CJa6s>{T+<(6~9sE%Bby=pLkz-Y7HO#OLql z6Z~wA-af8(y&pS9{Bi&Fpw;Pual=Mk>_<82imup?me4=sWd_x*@@WXh8(Gs7O}sR3 zDQ7P!-Re-sa$N1|Z2b}^H|O~V-KyL*0-lPmJQW148o$2yIMK<;;})p zX)^hBvW|zIUin3R0BG;>mdNrwX0#Ffh~C;AyIn2_}~VUP|gQ z)Ae*d+emTs8fcumB=gFi_N7Laqp{eY-nVe?T_rm$!A}B}3$oc=$%m~SjE10wd0nT2 z(O6!oQjxXr3J0tnv`w&8Z&~S&`=0o})RfjnWjPLHlJR+$ zX8zD@SVa>WwalR8?`U1M)E;d|bn9LXT zz07Ugc`lNxR`PPX`&oUQyji1NC~rkrtQJf=s+Gw&mYf`@#bKM{EbPLdk?vZUWf;A{NbQnS=b0vB*?zQg4!y9C5t*bA3>fU)3 z*Z2prDaNrWw%Io5(?i365l)R}$NC)R6_2H3Gw(I#&&^&-cxG7)x`j3h^&I01WV#j0 zL$ZFAyTkt+#!Ga4vUi7N{QenCrM*5S3K?D>$i4fF<}p9rP#XGu1^hkh-@Q95=hykK zzzKyR^%L*tqD;5qwQFKcl26X=KcJ|k{Q`IY6_E8S*ropGa6)Ow{Ny#dDA#RpeV161 z=F_!%OsUD-<~90DuG+xqF0mp_FK8E!Vv(c`YLr8|TEq!4(K`NyQ@UH^8Zps6-X~}m zpJIdL32Ia+_0{ZO0WR6@&(|@D_Q^hlyZDqFG*6PFf2E#m$=3hO$XqKV+9&!X?PgJI zP&`qMa>;c614{dP&zaUhFm3y1qJ64Q!>*yfK?dap!;{4*mt42@^`F@+$_=t7tkD+f zZi#EgMEeAvs9jx(e?-weX^ghWcB@}kCEBO>RP5?fZu}jk-mNJ3;CkIwlQiX<<8ywp z>ugA!_rm+Mx;T39FAhDg#x<2bi{n=`A3Mu6YHXxDdY!(sE?27c>5PVDb;m`F9rn zr}q4liT^Oc$a7aa8 zJ2pm(mQCXg1;ti0pm0pPzVF-x12Q>{hv0Yn6vx_z)>+aQbrEYhPJ;_*O;}^|Mda1% z0$YyqQPeY^B{Ck3sON+)P36QH1srj@8izD=w2Vzsnzl5RFh6nW>5PVp>dx@(_t1y$ zX)g}Om}-o<3=X^Q*F2gY6eQHsN1HN{#0p_ z`JAQJ4%SGm<})r>tSLDVS=*|L*oKQjbl&l$CVg+H|n$(p1rM9fQwLGkiif)<;;4G~PN&PcuMY zg4=RDei@m-f<;c_J3&jax9`ogw}3-yz@pOWqGfmA@Vdftb=?sC6vO7}FCR->kyy@U z^ZQ1e6i@pRRNe~gPa0bF*bJTsSl=dY)?I1RQTk+3b7a zi14;L?y*!B8MqWCH?KKmq?oG&2vPDO=2C_1>0XxXDQG!s-4yap1^w$UWT_uP$|j8n z%tHY*_tC!qSgtC*o-|Z;WfNadl%g^GoM*= zQLf>Z=>0G{riR7BF9-Nclpe*!x(!HDABI94b8BklVw8eB2v?%tllO?-GK|0tFN*3lI_o0rcZ z@@GGJB12V;>ftGjtIG6@vfjgt?R2K0D``i0>nn(KIDv1)9Q!nJl52&SpaY68UoEh| zFjjx+V8x6dWtYg2;!~K|WPOobd5?)0U zR|9rgyChk*d&@l|L`W7LrU*M1X++kIlb>Ph($*Mwc9p?LJ|T9t_%c`2^VsK>yUB=} zObMBLW?elc?wy&qBLBOS>x_5$X|`$dXIV(KSNy%JC<>yFPdiUnJ8!u8?^J~|MT|5k zMRVN@WMezTWsH~6%+r|=ox-G%{tZq8jqrmO>6Qhi&yBcj03R?ifp=7*kG9Xbz0y@~ z5%=w2eeiSbPEPjg914!GXhyt)=-i89_E8bn5K>=V$t;pBvw=zsICQhjo#In|rb+TV z3et@uPiV+>%kZ})K}WWMcxYw%rTR{Uq)w)bQl3Lnk{jKh#?YVbhxzB#XkwMZ`G1Zi zFD-wG>nRhq9+V)XqTy80t4^-vAi}fo;Y^-gp@Q!hcO0^tql0Eq&gQD~S81dcC&;=r zB*-H0%$y!g;@^?@XqKLWn30c(zFwvDD~4^M-NvAg-G=(?TIBI1Sh|LjSKgmDKoP5C zGj?RIZ=3g$h@PV)+*|TXF{+NzH>V$rlVbt{O?YRGZ2Wp`98+Hqk_vp}x65ginJn)( zw~GS{KE(~0F{7p7axIla_At>bNSZF`8XeO=;!<~trQUm#`p|7ePvGQW8?at4_6t`Pw~S3>=laEQD)MB;g0vm^k5*PbQ?=sxaIgO(2AQAYeeSHC8|7`Ym?XU@}YORWgG34atNXsfFd; zWs5Xp&o%a$1TomR(1@u@h?_4Z{m!45hr+ALR_O#qu=e%cr{9qYSi1-cbeOFg0sEF7<@&u6rG5 zXw|Bv1o?hkKD&+%BUQmBVb^l6E$(c*_+xxnJ98X-;JB&opTB&tG}KT|sZTX_j_;L- ze!J!nUG?Mg5B^;sRjh|IDdEGpC#y)}joH%>pMqB<-7_Kg%bg5$x4iFM-eZ#Jm96CO zYNlEt)bnKLV?2=7DN;W?q%k8cm4wr;qT`q?Q7vBsG5PEYYUdQ8Au^*qr=Wfsr`i;9 z7Z{^*`C+4xet;^=fkVK7fWW|jOnD_sEAOJ1RaAh16yAY>z=ME*nA#XSJDWQ*eKmGU z?o>@?`q|8=)2z=i-W;RdZ0lpbl5M`yY`N5IyVC6X(X`lIb@t-0C`hdL%z%*qW?TwEU19wY1Zxzm$pU>kig}?zNX9Po%cZx786j@lE zMa!h5G~1n|xFl$x0Vf2pM&3BGqNqDHx|EZievYNn_}BP;xyesCi4}_|AwW-qqlK|A zLx;+Q=xDEu2(GNOimwBEY~{H(E0cMj_&b94VTXM5p*2I1q21!wG zZ#I`NZl1jgv4PnAebVm0`h&5&Q}%?*S!TcsM79lklI9wo+RXQ`U}D51fP_;V#uu<< zJ6vb4k~q*WkvK1IixN`e`0+j_Y{m$l>ZG^XtT=K#KN1oZcqPvKQV1b?O>*qu*3Bb* zFaQnAmp#h&d@|i(AJALPAK|QLLIaaC(S4(n%agwb0C&W-F@$Ff(YU8oXW2Ol1h@b_ zo0xY;zSdIB6QB3h2xkg2!ihAW(Dy{mW&upT@KIN(ftJq-4_&RqnTAz?r%!{)= zedv7fL?=T-J$Rxb``6i8s6-U@te$#|I=0*G99`YLfUHXlTdEWEk$Uu5t)Ysv1b&Qv zmMhxS#C)3ouXo9j-tNKomDn+4xUQhZX5q}BwhES2M>HqDVp!)XwCs0C`yew2D4fKi zU0!wqOrU8x^(mbFh;O#af^sfBn;5X5n;kNY4WeI%>F^+`2DvRpUBR29#lseRdO-+% zU^~}TDBY8vPXhFxkMlc8Cg{547zlW;luxjmoeJ0vxR|^KS)1C?reJ$!`L0{u^*?N= z$7$inEkhD2sk4juGsfan!IgD0%DksA{5YSIPi_!H<$`f=9E(V*OgN2xq6xN&}H(#kk!pUboNEerV@ zB^~ZU%zRCbeq#w|M-YvOVQSo?9dl7*r{Vcn#+OhobpHClmd52x;$gLmEuq_V?C4$Q zs2O;ag~g9Kf0LO)-^V_+M@~;Hr^(IgGnAbs3cYL6ZQ=an6npz+9Ur#r1L1J4%Ya5n z=YYHk=+1DAA$4V|@}uny z_alcwRbpo>au%{=uv$FX*IIE}{jV#6c}|cW69xuRe3FYsWct|_$^8|jmFQdgWDO62Z{zXIgVv>N;s-8Cf6qE%58 z+oO}v?b@{kJ9w}dVYLl+j$_;OOaE6cL_)Qbv(C~G#me|&=H0_FLN+JZ26JfU0D8T1 z2AA97HP|N$mN|{W)$kbJg$2$#%LO(I^+|Ny&ui*2;Z$U{nxm9SjbLRwRsB~@95=D$ z3-xhwZTtBT9CSH^&u;812`P6vw+D3##?_<8gDcO&JPh_uMLeP(by>~O?w@N|DW9Xtcp#0#kH|Llrzv3B_G+Tr~9wM*+=YTo= z85uX71TzlXb%8e*+QiUE)e=mD2fTt1^CMxc5fa7|Ne+s3df6v=X_6jL>L0?4;n zk$~M_tlobr2JL9f65Z2t$%c@z-Gx5QvIKQ!Nr72U$GK=iu~`qVfBw#wZ`SJ56&NS$ zE#CQQZc2;C$oB{RJ6i`4*u*7!Z<41Jsj&z_vUxx)clo-u zPAx<3T-5^1@Ip>AAJxgQJ;?y``yBe!r=Utuq#j#ujo=6!52zr%Q2&{6T*!8`YvQk? zB5%}QS08!Pa-)C+AYcZNpoa7NVH74F5-1DQ#{cNawpMAWmBf^KA#yuIxRC8%%XTGz zAl@2N0r@t$I7(gebsPrmG0DVRrr7F&chd?Sv-9Un(+tdpdaPRhwj9l4SS#$FZOCT1 z)LEzA&w8J_fkddc+sVcXCS4Me>1-DZ^0l2Upk>L;;O%?XM=`n^cEL@h;lYKx$f#QF zFkQX~DMR2L(`ZVIEt!pl{wJxZvd!-b2Y7eY^u=Z#KTd3Qi5O-|9|&IVQ=CZ|qMw%= z%TE}eC?qx68_8c(Q2`ZkVA?t+sYcSyER+ zI?+*P5ty6MIwE#$MNvs?;+fXt13L!-S?DfwW~-J`S-2i ztWAk=4v2U1YqwAU7jDM34o>Hoc=$4B;q)@B&9NVt9wWB`V}yS+qj9mzj*%VLUn6Ho zY&QO~409h(4e3QdY=9ryI;civKT8}?7UOI?q6y-Xc75=vw0LQjuI_bOYMiai=+C4p zWljZAqq$0anioXqq*y>IX3_)nZ0g|};6VF{EXB1keS*0?3=y6S`EEc%1{+FD*UWf?bpA&k1%D_K{$ZUYRPNBO{Ke zk&aWNK|!nzuREP0?39hH?tM z#Z2|26;$n#5ZA8c_v3xT=+IxNoFxQhrP(3q*btjK7}zD^b3d6hhT*0Au2)k`cmRN( z>RH)eW^0jNQa>@jWY%u8CiAuqg-Hyiv-4q=zinh8y!3V!b%5*w`SVEtMkcSMhMPc# zhe|C2f4G^RpfLc?00V$WOc8L=l4G3S0%_dcD%}EWT;`5yd~Az+vuu%_9nimsQJ^ zf5_iIzYw0)m%u3REt-&C$GSV&FmgKT@@tB@yAEXhzn(J(IniP zg1n9pBpMH9`+|l~jNU2Y>tTr~dkTV8=9(32;#c@m!3z?MR^5}k*iZYdln-@P&w^&+ zn3H{Ux3P;IF?J%T8$DzvalXcBA2$Pe#vTy>^&uK18vvE_(8Q}7bSM4Ms*V5 zvD|9a5c5qL_lT~MlwJZt=H7n*u>zJbs<*n$F&DO2$y5z%AL=^IoS}<9YIc3ODRtW&T3CUb7xa@+)aqlu?rLyR9Q~@f!(33fu zjTjwY9{)YhbJ-yHhchohFg>){KhgTE%SD-ov&OFMJrEWOgy`+)7OhF1OU5%|j`cOS zoYvi_wI6Z=bG{(hBYV7->okSSL&>Xb^U`hveCX#FIl}oz&fY|8JvHta}PKj_qR5cM+@DCcLA*_+!2taJli}{F>STr+7=U4P#N>K z?YxNThieq}b@F>Axd8AF+@?!d)>?+TaGzkCODoiI+<6K&I?B(;ZD{gNxo-`^4~}^^ zc3jL|^x97A=s)NuP^5($e&|yu=F67;znS5jr-2XAv}Pd~%iV7&N4WoteT}w+9DpjD zv!m|2Nz!_8(Y(+gNwaTSmXev5GY{NILE@&F0KXF+_=OeW(Rpx zht*^Pw=BORAR?<;sR~p;zA!SF5jQy#!f?E+e5dAV&xd7dC(fdx8c_ z`b!?LP6{%yg)DH48%o2(0*5lyDqf%^3HGp$#ApIT?YM1H7-8K2Xq$?`$s_?+wEzHa$bGjIViGICo8o=Mt-PO}kL$U-JQh#8c5py?MI;|;MmWD{eR3~hL zcv+NQ$UgFB*o34+Y7}VW#0XrK8MJ7%f2vtDVoW9kj zpQFTASDBEVUn3?BcyUgl=(u-XCp{PX2cTDOudaM=Xon{o$+^&Z2o3dI=eqk!KqI%Z zA4dPGMDl8}|=`tb+^_3KQQG%{ibCCD=xDYl$*Ti8=lr{Ud&i^@4mO4z!27G(x&(?tsZKj3 zOcVUWKa@X4gEGVxJQ>KP)I;+P?IwvRja8QAk4fx#@>=a83id*7YGOy%#KJ^oYiHt5 zUv1X{)rBB4#!`7EPuo=P8BlG=4qmKn^20Z%vz2u&rAYmCjnx#VN~9QxzaA}=PQF0| z{XUyhmPQ;Ms$$WIBp~0J#fXbL9PVUW8++R`87VoZ|7f&drKt%jn}ow2lmwW8;p@X* zF9W5}uL#drms+={J+O_zfDKPZp|2Q8w)L#fA0edUq3f=e5J$*K@>T9~`P*29)}#6A z4Rx6--T}Fmxns>#yfPi5b>kXX#HCQp8nS}XQ+JR%_l5f?p3^UL2epHF+`PUc$x)l+=XQ{Y z=Bz1cxsSIWT{nF<&6x0^p-z4tsxGo80L1XFrdPLXP~PShG+R{6u9$zf_@O~E33AzQiUREUv?E_E!V z$CXR9MAKH*aks3qXieeK4T#MH)6PO#R7lZKwA`9b?-AF{+~CYASNs`~UC-`eGr zDd0?}&9~}}l6fF;F#OBdw#V5UAz2c)v#R!Mq}roPt!!+SPc?B`mFt~SZHX;1r<}FjrqJh4$g%PZV7cwDdrsC z4{te?=D6eniCz8??0gpK8B?sU$_cQe!^zkZ7QL`X*de=chstNUdNB>TR^^eD$v<_-dKji+(t3oH8 z<)Gal`JFb02LogA)2qbxpT%zQpQIJSz2z`JBv&6w3fiCPjatOtmqY05+p^}y9%p?0 zZ7_NP4OpZ{BObW@sS@Cfu@tu^N`g9the%ZD1hWqSrQ}znOh%y!DUduMS*2J*M1Rsf zCtUvvtl<6r6B?1YP=Z=%@5w3z&);IJET?Sr9UdED~sbOyQ|nX+~tj)87e zp$9xWeYzmFrq~x^mgdH)=Cr1+pwU7)MRPkuq`t9JhWJy4z%P-~w$0bhh&FC_0&Xl6 zKG$~_!@rgAIeY>3!qK;m!uaxMzJvs1Z7gACt6s%p2`sCg(9tLX=p;51S6o2tCj_4Z zwz*C$q+~-p&JVgOku>H=e)e0HZk3B61zx}Gfgm3wyM(z_Q)BNBX!JbnqV7>eF=v>D z=Z9hfBI{3^>d%>`>#^MLRjrU^W4BJ9)kG+<0m;#5Th*ytsM4&@_~(PU_ARXuu5~*5 zp5k*)F~4+UH|JgaYqmiMRcV0A-}Qm+&2YY8f$!Bp4(-53Kfp$tvNQU2{11m|bUh9QA~&iXGur*`@d)?Z4vHyEO+0UMO;kI=`-rI)U zw;(yE2h%BcBz}(hUOq`q8Sp7QPeLX4m7g=`f(IS4IR`9!=TT-%yMPJzW@j7$$4n(WI>cf;xo-dl zxX)YTxqQc;V_%)xw~W+25TsYL$49k|Kg&cibY3I6g8vIZcYUi`cmDnPuj+)a6DRcwFc1*s ze_R6P{lD^SMp%5n2X4dXWK!vJ6fz6Q` zpcIN!$+?ag+q0mWng#lst12j-D^_XMK2RK54gR$`*8xuJ?`dgtn9_Hx&`6c}BO6F*}GexxftrNB307O72I@;+K1;w9(@_Pt~w@@5ahG{#M0BF@iqdh&#hPoX={!;vo+v+Epa zb}n=a4#K{|9$5Zpf*;PyS@u#|w;W)!Sz4AQq06rqWlKmYr#Lv9?EPc0=CJgEYsV7Z zEJH0S6tE%Npx;26wPmQ)b=R2A3>n(k=l*;vFy3f072y_XqS2fzuBGO-B3 z)6Z3`DoW8|5#fP_Tv8EBM5_I8W-c=q;6U-wi2*CmWPLaq=Z3CRw%Qi)=`bZ_lRibP zUWDJ$BLfINaZXR&5c6bAlBToNiE=bH%lO5bx>N+=h_A?$mD4ZHzisNO;Kt6dC`%&5 z*7q^8R#Fw0EZ}f0r1e}&^$o|D&G+&Tk$V!GCGo;fx4oRe?=Hfu3a$B=GxKwfz&KAfdJA^sfI*ZvV zwUs&_;+1P!;^1LlP_yN;Jt>M=NkTVy2rE)#O>XqGqX$TaQvJ-I=ZTqa1br@A#^N>l z$qq}Duo7{sk_@Ae=Nbn_kt9K-q%_OY&`{Otk~-(LYa7)3V%8%SL9Lj(^2sx1C{oUl zb*{$Hdd+7OMzNGj9MBPqWG^e8?{Du%BS7`ZkOWT^4E|FTuG;V7yWMY$OC~>BAgd`i z{+bmeJtAE0z-W-4n6|QbXG$dMrDH}G#4{O{Je%QypDy`51M7}MsS#=lE~_yi&P}wh zAUAx1-WimN&T5z*)aHT42~Oh>6QI^vunX(1I?M#FKbVTvIjpW`6dkZ~X9BL@_Y0;w zqK4{~yIYV*{Z`gny07I<7kfwf*5?$)w>OhuU!2+Z?=FS+z4E6_f8$)Sx2%|(rHo`K zx5PsPt9;cFI*f0O{_SxpjBl|1#A|fG&b}KA{lL-Y+yr!_YkX91Y|GqrT zcT^AMX`ep&XEZ2D1kO&?uL+v4p|$e#y0-4h*Wurt#QCk+CzY~0t)qo7-_xSspg$_L z;6KDeYl(cq=)_;s`Lpzd$Un!H{$iObkyb5`&-RZ&XtWBILhW|1j` zwzAW7E=pvp$BTF8-mu`I?&NRnkyzN)R@$V?6xvm^0UNxp}6)I52sv#thv>q$Zynm0AOC{vp z%qmS*n<{fM*^1X=V-qE49KCQ}bEX}-Sme4|vJc%(H`sDxigiXre?al3ev?J(NItwK z8S}qroeSjVNQ`i#w*#EYhtmB?(KBO$Op%1EtMFj~Ih2PNqaEx0ffr;M0`;w$vd0x7 z_dbJ9c#Dq~L;~kK3xbB%s;nCZ3Pf@b0c-R*65pign{9_at^t*&^G!A$$lM+2){Tu- z*zLBss$83xOAaKVKXzc4h&6fK0w<1$V+)G{FXOsQmOYtWrRxOsvSt>}cefE%7R%#N zRi*oMlSpe+onK{t~=c#E5lKZjD|6aH$F&+MA#cS84TL{GTK&;9m2C$ODUSj7aC9TgurQ| zxmgXU{s0kwMngeQSYQrL$+fUQppZ2e3 znBWt(ggY$KeZnY}ZJV$l8e`x{ly#ScoYf~zlGaYpklkb8hwk_zxy;3_W(XC>fcRiOwT=aAV{$1tUkj z9IQ^1^ycfPTnNfOWvs2O&(aMFc=_KDZ@8+`GA|-%t2Uy?Q8y52EX=TE&y~hqMVV6X zbYw0oFcv%-v*^4}Mr!)whE*ujSoT&32NWcV)q|WqWsl}sHRe`$r&TeLHF8=2=6h82 zOH}m;q(kt|X{*&^vTq^RVEv(gr6+!;Xhka|Xg_Gqb)9gU@Z0r^={1&}qh2dCcfhz$ znG3mD%W|h!Ob)Xb-pNI+#wUeg;3?k8Nq$(?4e1Gk5Y$y!>%o<}xO`<&=6UJkQ^rLV0GvOeLN=(9Fk)Dj9 zPZB3Lpe49g8bEe2ax^)J(2U-~I5D!ag>TpqkEY5ZQt#xQJ^aQk7~+bnC{*oen$n2! zCAogV{K$p*w+!)be=m#CY{U}2*YH#5pg5(y)7heqO8B;e8TS~(L>y1x;WRt7;6{1> zb*~QlB@54aI^NS{&H>8@ZS4UiQG>hz3<#QgL~BYkug^{3_4+s1*a1prL8kWRx=sT} zW}BWu7v)k+xKfmIKAY>`VX{ZZ_B4T>lZfq`#iyhNjyPcsL+%Yxhc;-d)v4~v!ZDW$ zVI52G5vFX~YX@xFIsF&)j+Zed6qlz65uV*&o=i0!+2VARnGZK8$^O79j_ubVtiFN$dcx5B8c zKu1@G^HrZRvlk<_jmY24i0obhgtb8^Wm#fW2_qLmBycb^@)c2-=WsInYtY78zsQXCOUM3*cwM z;yK~L=+N-vSftw6f&jh{sb|hDRQXxHy4+qL6wKPv+IYTb-)Gw9x|6y@yxUi0v7va- z(FfmD$Q$~XwZr*uIze|3d&^5%w6;bDaK0?-RBo#=1$ttvVjkgfzBqS>UBn_>-N2j# zLQ#jR(Pu)4x@b8@9TGW&J&?X6knzGy``^i-tXa7o=HGZC-?0BO&?+Y~tt&76hzF2U+)j?_^Qz@^ps4?ylxVX4c_f4onEg_|;pF^Xvr;tBDzW75b1A9uO zxj~CT+sWmc%k0MKn(HLy=PB238_1sFyTTB0daPEZaW^XheRY4YjPd{*yc!14mtt5! zu`c3fg0sdzRuq$-^3`AJtpUcDlGe9qmn;9XGXOK_Qxu$m%3ZUM21XA(fFN>f1?^L$ z??Trd)Q_`rmKI6C{ zQNB-`VP-ejSyWJrWa7mDiq^tGDQTlDkEpPa-E?F0+xU3F9{p(~23dKQ@@$oIyH&)C z#OgoJ5Da^Q%a-bbE2W{`^slK)$0@fdlXf%i4#(!@V}c^5n?iuKCt_&tAaSF$#&87S z!H2ZvZ_T-;bc^&_XAR~wU8`qb8gz?AxhGqGP_`Mz+%-bb$dhBQ(y-5D#2Ma-tQTO6 z?Xe(;ej&4drNXYOgyZJ*&S&Y-wCX%kse+CNbm}d_MDkRA#GJRj)f(+HkT@`bB*A3? zqrth}@Z&gw$*d+LN79tSSzVtgEuU(`)mt|UKCz8LeJWR-Div?V?04mcCNNzUPnXtFtz)Jx!+R)Nm_Cws~AD zNrqRI-Tp8%9vQp7sxT?ZTx1Apc%6FaaeM9eN$w!o8_KEZ-rtkWIL5xF#g{c~#lKA{ zJo?Yp4yRnVTwHK=Qfe6hl#ZHrvNSwb8W;n_W3x8?wuvo6V#4}=lPkNJlFXUXxo92J zIi#Df)pgFVB*ZWxKzPx2Ol2Yax5=>!Et6zSL9%Slz#L|e@oDT9a3WNjm^Et)1oMxx zBeWS~GKi(v%&)up#RkB-$pN*t`ni177p=^`<$LPx>H}V_qzCmO`Uf13y=!$GSQ1_) zpK1d)x7{HQ#>U=xdqCI8wSEt0%qgtLt|zHk5vsVltYRJ_DT=r*mx_L4Sh|2pCn8U+ zxbLo@yC)S)E=j3s<+@0=z=42;>L)l;C$=F(QFpoqE_lCQ0!<_Uw|LiV!WHRXo0OIi zNX7w{Nsdb}zQKlS5>b>|P#mA7Pg(=90rA(wpuO70%-N_~|Bw<92GXmsSB-((;K1xB zEg7}X$ROZl73O|>iP=adv^8Xt(mnk6J|1>{RcN27p-~4H*rnQ zc0mXGdiK1|O2@Z`xxZ^^I4&$cEsAjyKmocGe)~=~i*SMJLXz z%)g>;=vF66Uw=cax9rIo2dkAu)-2Slnp}zc(knG&=dN9tcSJlJrEd;K3s;4TyLyMk zhsS#%G{P%x#wXMWwFNyl(=fD15%@jbEYq-Bz~_a`^_f91kHIHw4)P&_K;@EiK$0BMTqU2-P)aYMpdok>xs>j zo^of;7g?QtUnXiz@{xk|n}gvH4t@cPTKu_2Sl)yu`i%b#?MQRU9k7X;w|)pwmP)*s zBeE!rgz5lVbSgtb{(_4Rc^R1c0C-haO44D)=ZY%9aIl zf*2<+ZBWNwfx(qX?CFQcK$~>Hnh}d0Au}uvg0J&%PJs>fZA$D13nzi~Y}zf*0%cr) zA#Oz*BVO*Ba1pFUHcNU>rzXxMeWDn}2dv{J4MwrI;Y|&9xJP-ZjC`81cSRs_wvht$ z!D)5Mb2^ZYb%}v1O#f%A-`>e(^*022ZqS`?5K~;(ovxvGESCHh^)Lx1G60t(WYlrT zz6k~bl?Y~$hFMyEM6M*3Yf5BGc%;k!AaSZxXyjK`gk+ORbybKm^jEbLbv9ic>KFx( z-a6E5zE--`iyxSdM8!e=1(t2~0nCNFO9MB?_dnAa4j6-IOUzc^=by5J5e;o3^WWS* zzyTHMm8*Jmfq3D&Gj~5nC(!SPw6(y?uhuFMQF+of2zN~E0%6bQLCf;2WKM+>%$9g^GiiN;$we3DhYQiVpohAq=*P8UjK6R5{Ln-HhS5aTk~$YDq&#RZJVsb zmT+(>oxM@k&^GE!2>tmlm2THYUsr$x0$M=+Pbw|;zp1pWi?y?b6Trsa+C0fP0|MeyUa0dMMf|t6s6RHW8Z}%mYYztZhESLzgc1B5&WTc1<*9%Zz<04u* zFmA||sRd?pNBWj*sf*Z%Aa9iCL9t%h06Yr;?6BbNmun&#mNQD9 z1M}PT&d2YWhwdBGhl{NnJK)v8bTCrf!>N2QZu{0~F>$o0yW~69vNQ$zB>9-TlDJ;V z7#ep`!Fa((nvy;w9&LlT7tI)ST!T0zGgzNebEieROt@^(38vBt*oG1}rQ9Zq;>uH; zb|0x1+TS&F5q+IUETm$(Cjo36C6L^KTK2dLznWZjI4o`?=AMr0yRAARCyou(+{SaP zk{i%B;6WB9BQBrw`I^7&LiKIT>F@L zS7^2O)}$YDE?Rw;vl#3KXS;>qQrHGPMcQ^nsiIDfTK&_*D~KzaYHsa+2pTZiaQ z0Vo)bpniE+_(KIE(W+36!KJF086Y6J662!bh=-T?J0U-qvh zF7o<}RNsh$Ob&gH<4;gNPlqIn0rR|e+E9_!iwdRMZA%t!MkRJ0rh$(eKfq@~4{`6) z3dyH}yP6HEdOen00d7()m8>=^(Rt&!)O%5yXiQs-GCMcZM~+FE(rr!2g5CE{=Xa4m zKUE8>^MrOGVXINvPjF8C`||TwexcrfHq`3yX38WCD)PgZL;XBTY1 zdJ2D}4s!l!LFy^dg!@&l3+ca(9mW~X-WgJA-b}>}53l{lez1z!dvqc8xxF6~$zSbH zGXY^XdB?rfKoPEO7J_W~Tt3cUo2ISOfrg}6?Gz&b8P@_6jFdBs^>259gn=Xvvr8z z^@KYDW?Vn67-Q^LYfz!RP%k8u1kB958DzOs91bGX7*9PmtGCR7-fI3hCYs3Anh ztTYYP`b~g6WG4FKS2%tN;TI&dLg}{rm+iajpe6U>Ql4i;xkDgsi(>8!oV4VbnjXe| zM2Y#m>LZeoi8*IZ)K5TkR&`ob4e=e-p|ST-M1S?x$JOuiOd$|yv_=!h4~RAWepvTP zK^Doy`XpY5>wjiDdFeHCha~i&NHLsyVdTZrx{av(!>-%p`iRPlgOHSBbfr@A(Ug&C zQka}e32~{clDsp8o)^@^?lqF29$YwKCy@6rrIlks$K>k|4zk;E7jGyP7%NGY8WcJd z{`>j@DAoG$hAY=wNHrYBSOPpvsnE|nB6l$Ho~aT&p{cjO5%xiGhs8NVVjZ%kWeyS* za#o<1FofDd4XGER^-!u)E2zcadQ!z4>iHxMA45=5arTq{eOq$%i|br_#)P>M)^@DU zV0A>l5*UX^rg$fr13G@kV2=5y%xj*v{i51OE`RWTM9PeE>p7_mi02!223o4XX0{ui6z!bL6n$X^8OV~f#rio+Ma-8f$L}0{mK$%;;5dHb!@kmf2PP3$9`PBa| zJS1LEi^Z&~SzP5;HB~hmXg6UtKM9fPRH<&PFK@s2v^;m)SvCFGnYunp5JvWVzg~45 zcinvWoqXuIzrQKRA}dyM?uc)k>Dm4soCZ|Dekes6i)uhniz9G?m&>8mxz*mJT^k=IVtaSdcf13saDd_Z^&L2JAHTu@dMj z!*^iHj_h6c5BtK6#~WhQaV+mUDu-XnDFe!vYC#Wl0*{NXY%@iYij*vL1s3CcT|7OV zNrgtr=}mz5vQi7OI(RaLDql7EQc<2nYCLXCNmLM1w>(}fwI{EI`Q52TKcg%g_LhJ5 z%vz_Og08+6N0VZcGQo<{x`L3+g3Ex4%+zdOQyq;HZ!-QbmIU%qli%WAa9tGH5`QFu z(_!UiGtP+MEYDq{J(&Gt81|z2Jk?h4O?1LbWa*HP=sw%@e=Vc4WE=Z8Y;wc6+NR}n zl%EY?fTX^O&8BA21*BjI_6v0${)Gu}MJq%57)M`FF(k3niCZNbMYRiF-ml7TH?@=! z+L$32XE#r?MPubZREoytzD=KVy?)8K$bDi>cxia=>YP`ZexO z)U&RzfGzL-@@tr~eU{#oehAGcwc}6RW1Xn17nMQu2H>@*pHsDg&6dg=R!3OAPwa{$ z;`gLrhXc-2JB8B46>D;DpZU!!KAUN1ApiCCpSlS05GYA(i?9&@e>fxVuXjN$2M4*6 zWFO99NLraAXpXjOU#2lMG|tYn?Z)&G6WTfcJP$Jb8PjK%q1S8DYudi3B5up5N=+qS zG7M$q@?ljvx&V60-=#9`LA+kt^^02Cj^vdd^B;aP>d)wjL_Hy6n7KN;^WVM`!rZLW z*68W-G#aGot_!NnR|TnKi_$#C?MVRhw=cT|RrfMcOV@36`FSjpU zqt!!UvLrTvZ;SXUsAhai*>Y)GQrLLXWut>D<^xwGA@PRHKLtM$k6AJ^3$Q5F zx)n3hELz0doUKhYJq;~pZeBMjRbL8<+d3tr4iXqXl|a=<^|xV4I(zgrOsWKOA}uaY zrHLz)Ovx@3k<3J61zCCwu(`Jr#Du1!hU6uUv7$TjkjCvO&&Uk|an&bhOV-uuyOn8l zL8JloWrvc?xRBplN2?Mb%DgUp&iBB=Z77y#sW z(FP5A^QAWNY8kuI4U;+{5tF(8am}$pRpJQlO3G5&VJ+-x37H|TcPYU+Cn)F+d_>d0 zJX9~V&FFylNce5yiIZftips&KMi*`MoCj%;r=!39s#s(vzjOMTe!o3ukxo z=F+6eV4IC)s}GyZUrWh#2#ab}?~1a>#6+jz!D} z;x%btUe@QrgiI$#?o`9rw7hIAW$|fxtNpnmvAopc6>U;!DL4ZqkyPDti%8i|jn3oB zFPF}MQK?y*hh>=G^!cKEc-nh1t6uoz>{??)sVKm#9mO45BB!|WTqysj5LRA{!$_)g z#!ot?I?XN?c{*r~EcT3OP@_AO&PQ>H8~ww!Y^Hku&Isb~GgE%?F``mEC?$-Crxu@l z=;G3AfXJ3yl+LG`u53}ViDE0}O9ujzk*QT7+*T|_espVPDDC z)btu-31b7-0ICwfATnov$eA1>ue>&0%PBX{L_IRt^1%5P8_#jcCr0d@b!h(zrixpb zP>9jTx$YSz(1>Mh2~?MYVPL|V;n6eK>`3?I{<2fMth}O zLy2J}D8**Lk%WRN%a# z1U4WCn#{;sLsYg`+r>}l?LKFnT7#xt(%l;cTMCjUFJr$)dQLsu4Oaqcq_H4VsDk)m zn;qjOzgz#udoF+b%N|`7=U4nJzcxF zA@-?0XlXeE&^jpFoNy@;eufFPrgPRn)XFKP?8W6BIpb}9=r63MuOtGUW5?Y=*w3Cl zA%n`R#)W7?02Oyi&Wkogr*m2l%28Fsht4e$#iv$LWRPhh86iBX4ou>SPcHq%klGQ0 zR6!!*(+U>$P^>X&1s_+%G=GA0N#-vIbEw6`5xu{LDhHYU#h2BLkgzjJx0 zGX-JZsyw46mtLZnzt1Ln$d=_oA+W}KyV3u|YIbAmbV z4r{*2P8QA4hT}P3H<@>}S8#26UuefEgO}xm)9+$m(mpUMfDsGZ3JXSlN|xUDPNHHG z9r!D23A#P5t7cjcq|BBfoBg zR`%_z>XH4@G_?A*RnWYHEvFlyA@H>8lnc>aeqJ=7JyU+39JtMr(H!-W)8<+epG)!z zpZmU_MbibW%ISq@_c~OV9|)cIR7eY`VG9_YsWlFk9xNEo5ezZzgzH|~`Bn3@mQZmM zT6FzX4A)L~@bnKL60$v|Q+!n0F`$_{60a<;zV;IK0y#ri!rGa31SC?2Fp}1u9SKdk zfkSpY_r{e-=Ukv{N@%ox`?z+xi$-1vJiA}jl{?g>YNCA^kUe3i#?^UDKayD}Cz8Y* zX^m4C*uYGICUs_85glH`q=u#tRud|50jotEd|CMbgqTnY?3_-8_E{|Cn^2I>Z^s1XL zX{g}L_O{evu#E({m)lH^({szoXX5AEe(Da8PJcyop}SRFh%`G)t2JO-jDY^v#0ERY zZH%TKQ-fP*ZCIu0TMl-0`d)kR3mq-fqaVE%voR%`OY4~!_iQ#r{Q=ApOw*3zhJTC^ zc02q*(}Rw9Jyo$0@`siv9LrQ_0ZDhksZZgB#Ss~RQuT6MN@O*m z>X$sFyq`E&xG~mG8bT`#x=HGub?1?Iga0!=c8*UFrA3PimK%lcf+Za^$ao?LQ8Bmh z)z4c;EE7Q8=V)XF%XEToP<0vmJ;f!m6;@V%tjX9*IOGL9*&k3;&WHRra+c#_a@Fh> zD`ftDYgtgs(oB>Jn;w!lg4Bi{Hz#i~In)+lu>>{5o}EaejsqutJ=E{jNWFe`wx|co zF*@P=Du+_4cd_W!-py1+2|EFo`=sQLuW&N&c*k&Inr76xs!SW`BTtb}@vFQ1;MULB zP~>>w8;i>VqL)ro#3 z6PzgMDTI(syBj;cRIC*L`@FLs&0_4!q2fh8DO|F!SK@xq$rvT|)YM8j@QRm`$AjwU zkP3IMl6?JNb(wj2PifCQyUWTc7yaLQypyso*^-a>pTzNsu4n_jB~hsX&nW`gzA&(l zMq^BdIEe2t^A!RYiWvlvj3Ewr8mzY>aAEe4sVggz8`DK8UWf zKX7lQ7RwywjnSwrjH8ea5z7d{%1Cktw3AjiC-p)4iDof5woj0^xdwdZ-+~RFu~@Gd z!F(ILGqu>ye}$X2Zq%(hFnvoIf1#t0o;or49M2bygkybDTI=;P=?$V02qwq60$Q=f zsG4q1((3JV4!_B-62@6-?U-xtD-Gm0RBc{(;EDv~l?zy$*_^r_&KfdLIgw=z(sFyL zd{J1u>m$oHMOh)fIlz_gsDr@8bo}P{QCW7n0%v17@z*Vcc!bTBgIrT)OT2_=0v;WR zggesnk1Ct+YEuJ7GmX*AQRJ^YK50UDpX`YFXk#_c5lY?oqO(Z!<9N9wUH$191GI4b z{r+p$_&j-;RtP8%&@JSDqC4yVdep$b82&GwTiBW@I|H2m`^1cF(%lSY*1T*{BUb+6R*}K=8zG6tQ@Sde{?>>X$U-^%ByX^h7e(b&s&Bskk zvH+Jf1f779IK1=YuV%YY2D2`2*Zy0j0aIy9Mu&=R*GgwpbqxI*Uvu+jjYX;K$kn-X zi?`Vi$m?P*n&^yei|O*%jLfrFGT9wt9t>!l3Z3XGvHFGPn#pA+6ey3re5kEC^mE3S zXw8{}Y{Otwi&&>?rr`26lRu7}vUu;d249wtfbRchGKovti#J*A@qKerG|?&+Ve|f- zXMD>c&`8T6EWgqxZJ*x&wo;$J4=QNiZ~=C5ztHE+MIR@y(N{%}S%g_qdtnmRqP1K2 zlkTN&RWfoPz6~XQc+mTo$tnuJxU2v8(&uJ*BAo6HAZ?up>hB0zv$ef^#Uz8O-IwbEk>g-H#Fn$>snuTwY`v9~p@! z7TbZgW5X>XUE&7)U%D0Us4!Lm0st5S`TwFFh&VVqIyqbaCm=)R-4%Hi^+zOuR2?s{ z5JL+XFfcfNltfSr9ScIQYo7?mqSGZ$`b-T=(olpcf*C1ttJF{E8<5rrTTfGkU zI4fsS_fygL_IF|Nb|%VrbcSJt!{fH+^``Un^X8$*_xBe67vv7ZhLk>cfB^-Wq8LHA z9+gs!k-EqZwngk11)LmE^(5ko>yN3j`ijvxshn&+@GuD$qi*W7aJ&tPy&~GK*g+qQRFXXCwP20nBg|+f z!&L_+vNP!Xc|QZ_`BuO@z0;;$#7B~9bJl_QPJ7?2TapDLXnFd5{CZ^|vSEAtTDseX z^6yDdK#?KVGUa7SIYFjlrEvGjhRtEf`W$SjoO5-6PQCUlQ{_id`m2zAQpu~#3hpdb z=Aq1Bg}P%4#~FK#sT&$1)!32B?aD=RgyyrE<+EC@U3Pef^`e+1jV-6i-d{5MFms&| zqkg0u_x0ZM4r9=6O~Fn9QY&n3+)i4`b@Ume-9>&jgbR@p%qugD(rPz*vdvTm;;B}xXDim&W)Nkl zFGI_U35QGhXfk$|G=7>s{k3(u#{q8As`vJ*blW36)+bc88};5<9IBO^aa&6|Q5PvU zOr-HAxjn9m+G0`M#W#O&Rn*7pPED%=REY@VXERmmkKS?CmBtm_|5ha~C27{4Ov_6i zn1bS3hz)-VQpV)ZhP!#<6(GDRsF2xorIAG&F5` z88UsdnLKU%$RW;M_zJas_EynZ^wTyl1k`lq7VZQhs6aNXW~99Q`7 zDOT`(!1$^(UX9W`923Xv%Vf+4{`?lFbt?NJsz>(GJOA#l~fh(;H4`q*g=fbNO`(!_ws1IR%YNQNLt z>>+jG>W$4bcrLh$Xpw_D0$Sj|esR$Sbo8uN9fP{f(P? zqf^dkXc|G3u@MaZtlcBJ>E_GxDvRAf2H%?lypULyVkk7Y!`d? z>w96s2Zz>cKH)yc;}QL#zs;U{voUd}Yup;tG6{QUY~0X$SqW%fgIO_PQj65DEAh^p zxQUjJ9E+SvzU!GT8_x!nmcIRk07uIrb+QQ0F!bd`z$T@szyA!I*71J9?>VyTuQw^a{bv;Jca4y%R zm`Bh|RlQR8Rr?lhiVe7$33ed_s^(5bj;EtH1V7;oTzZjz8Fhuh405`vRxmgw7Y??2 zhBcm(hvAMd)d77S0_>(B_m?<8uJtdm|I+476r2%O`e5{60v2Uw=N!_SSmh9grd1ng z598__bf&Gu`e-4jPezkW+>5fo`3N9V>c{yoEk;s-4LGl2;7%N_KEDw)@B3Q z0ty+D$fZwUR24xHe8~!Y)~G_etm6r7Z7yn?<$G*z5IKMR^SJzkcHcc{?y|OPbx0rPx#`CH*Q{pViTygmE zZQ%w9U5SvLkrHx*8E=^+t=hZZodR70H+WB!48p9}bF3mdLuM(S9eXBdZ|!02&9IQh z%F>qQM1+HD@*_B4R~c&c0VAnWn5l^e>%L;0FcSb^K%c*S7`Bg8G=1mRP^D8#SnaGm zQkHWyEcUi;#5{X%X<+43Gft*U?6S55lF^Jz$2@HWnC=Dw_=a+n!M z+jWr0giMRyu&!_gLLr#AF0hGXEptCKju5D5*5?02*(Al7@Z!lSfh~?H8sQc1!GJz5 zV&s1?iBY&4B>^=^AQ~5=+}&F$78~-Io@EC;L2YB|MaW1Y~W{@5wI9Ad};{A`d zI;KL1hn~>|5~YGN$p?syfpAR}E{97|4;C&dn ztj1zO(t--?pp|K0rExj)u-2ESg)>5+o?AN?&LEdZ8(PWn?Pp+>HyFJXf^5p1C;?y? zWdrgfaw%~w1M#=C60+^+j`owBv+OGfyzjrpx@|F1{{GL2|YY+GoQp4RPSQr>bqAS2uW_(n&you)KGW$>k~i zbn?~B&3S*^&GiMW16M6v3o49e#)&LIt`&+O5JRaoV2)V5GEE{YHG82R>)PG5KLQ5wfrq~l z<|FebW5=z|XpnG_u}k0I-%UGZJ26OPVn&{i#(Z#rX}H~dJAF@&L+Ed1dSZs*T}Ks+ zV;InE6aq@h{KmYssi9q&4PUTUARFPflM!nJ7|$yKIzAyfw``9n4&|gKnqI081Y%!j5t&9 z&rB7RxMFdsat2*eK2VL6kN6;S6&V7%fCPuBXDZJIOi*VHG9y4fl+)6Psg=~~lu_1( zMeR`9sJKudiBL(WD%<=bp?FGMmC%2vc=}7JX!jc;{;0{>13&{2%NF{8YN)Odao1%; zNGw3%sfkK+#JgU-^KE_)3G3QxKEW_?h;(L{{ ze#u+r)W2jzaiSrgOKY9ZlH@+`>Kl2ZlJ%6(8#SbpId*1^!MF)hJkmkSJrJlRf8;O_HNK?8TUKl07LR0Uq;5bpA658+Ia zr%9B)F9u6~AS5QOZO8l$IA!A!;Iw*=guPcjkK`WjEY#2q$kqh4Rdz_#Ysl57Sb-i? z{D5j^|H#r_P|PrwQ7kQSIM>3mImT6FG5Gsk=M>PB3^AVz$HJJ<8i$ha{%1PjbHhQ~ z@=vRfMs1kWin<62U0$XMKTTt(Ons<& z21i77xMtidLQkmkD}uhOM8PX77Lx0n+GBh8O{mj6HFwh_5vMVv=24gL=u4mMJ6uY@ zl-hw8iHEpNO3}q*;F<cCY_gzTNJ3 z&0Q_GZ(en1>@I(kE21( zq{17_s7%+{EFtf9Ic61z$mFRS)J(U~hfkF!-+mD42X2Uf6*Q