From 24f18b8aae29a7fe0d52fbd78852a832d357eb46 Mon Sep 17 00:00:00 2001 From: serso Date: Mon, 26 Jan 2015 10:41:52 +0100 Subject: [PATCH] Project restructure We don't need to separate widget/onscreen from the main module, let's merge them together. --- .idea/encodings.xml | 2 - .idea/gradle.xml | 4 - .idea/modules.xml | 4 - .../android-app-core-tests.iml | 110 ---- android-app-core-tests/build.gradle | 49 -- .../calculator/CalculatorTestUtils.java | 78 --- android-app-core/android-app-core.iml | 109 ---- android-app-core/build.gradle | 150 ------ android-app-core/src/main/AndroidManifest.xml | 15 - .../src/main/assets/fonts/Roboto-Regular.ttf | Bin 101264 -> 0 bytes .../src/main/res/values/arrays.xml | 58 --- android-app-onscreen/android-app-onscreen.iml | 108 ---- android-app-onscreen/build.gradle | 148 ------ android-app-onscreen/pom.xml | 54 -- .../src/main/AndroidManifest.xml | 11 - .../src/main/res/values/colors.xml | 4 - .../src/main/res/values/styles.xml | 9 - android-app-tests/android-app-tests.iml | 40 +- android-app-tests/build.gradle | 2 + .../calculator/CalculatorBroadcasterTest.java | 0 .../calculator/CalculatorReceiverTest.java | 0 .../calculator/view/AngleUnitsButtonTest.java | 0 .../view/NumeralBasesButtonTest.java | 0 android-app-widget/android-app-widget.iml | 108 ---- android-app-widget/build.gradle | 148 ------ .../src/main/AndroidManifest.xml | 11 - .../src/main/res/values/colors.xml | 4 - .../src/main/res/values/dimens.xml | 9 - .../src/main/res/values/styles.xml | 18 - android-app/android-app.iml | 29 +- android-app/build.gradle | 17 +- .../AndroidCalculatorDisplayView.java | 5 +- .../AndroidCalculatorEditorView.java | 0 .../org/solovyev/android/calculator/App.java | 0 .../calculator/CalculatorApplication.java | 3 + .../calculator/CalculatorBroadcaster.java | 0 .../android/calculator/CalculatorButton.java | 2 +- .../android/calculator/CalculatorButtons.java | 2 +- .../calculator/CalculatorDisplayMenuItem.java | 2 +- .../CalculatorDisplayOnClickListener.java | 154 +++--- .../calculator/CalculatorPreferences.java | 2 +- .../calculator/CalculatorReceiver.java | 2 - .../calculator/ConversionMenuItem.java | 152 +++--- .../calculator/DigitButtonDragProcessor.java | 112 ++-- .../android/calculator/FixableMessage.java | 0 .../calculator/FixableMessagesDialog.java | 2 +- .../calculator/ParcelableDialogData.java | 0 .../android/calculator/ServiceLocator.java | 0 .../ExternalCalculatorIntentHandler.java | 0 .../model/AndroidCalculatorEngine.java | 2 +- .../model/AndroidMathEntityDao.java | 242 ++++----- .../CalculatorOnscreenBroadcastReceiver.java | 0 .../onscreen/CalculatorOnscreenService.java | 0 .../CalculatorOnscreenStartActivity.java | 76 +-- .../onscreen/CalculatorOnscreenView.java | 0 .../onscreen/CalculatorOnscreenViewState.java | 0 .../onscreen/OnscreenViewListener.java | 0 .../plot/AndroidCalculatorPlotter.java | 0 .../calculator/plot/AndroidPlotLineStyle.java | 0 .../calculator/view/AngleUnitsButton.java | 2 +- .../calculator/view/EditorTextProcessor.java | 0 .../view/NumeralBaseConverterDialog.java | 242 +++++---- .../calculator/view/NumeralBasesButton.java | 2 +- .../calculator/view/TextHighlighter.java | 0 .../view/UnitConverterViewBuilder.java | 486 +++++++++--------- .../AbstractCalculatorWidgetProvider.java | 0 ...CalculatorWidgetConfigurationActivity.java | 66 +-- .../widget/CalculatorWidgetProvider.java | 0 .../widget/CalculatorWidgetProvider3x4.java | 0 .../widget/CalculatorWidgetProvider4x4.java | 0 .../widget/CalculatorWidgetProvider4x5.java | 0 .../src/main/res/drawable-hdpi/ab_clock.png | Bin .../src/main/res/drawable-hdpi/ab_disk.png | Bin .../src/main/res/drawable-hdpi/ab_expand.png | Bin .../src/main/res/drawable-hdpi/ab_icon.png | Bin .../src/main/res/drawable-hdpi/ab_menu.png | Bin .../src/main/res/drawable-hdpi/ab_plus.png | Bin .../src/main/res/drawable-hdpi/ab_range.png | Bin .../src/main/res/drawable-hdpi/ab_remove.png | Bin .../main/res/drawable-hdpi/ab_settings.png | Bin .../src/main/res/drawable-hdpi/ab_stats.png | Bin .../main/res/drawable-hdpi/ab_stats_3d.png | Bin .../src/main/res/drawable-hdpi/icon.png | Bin .../main/res/drawable-hdpi/icon_onscreen.png | Bin .../src/main/res/drawable-hdpi/kb_copy.png | Bin .../src/main/res/drawable-hdpi/kb_erase.png | Bin .../src/main/res/drawable-hdpi/kb_logo.png | Bin .../src/main/res/drawable-hdpi/kb_paste.png | Bin .../main/res/drawable-hdpi/kb_settings.png | Bin .../src/main/res/drawable-hdpi/kb_share.png | Bin .../src/main/res/drawable-hdpi/logo.png | Bin .../src/main/res/drawable-ldpi/ab_icon.png | Bin .../src/main/res/drawable-ldpi/kb_logo.png | Bin .../src/main/res/drawable-ldpi/logo.png | Bin .../src/main/res/drawable-mdpi/ab_clock.png | Bin .../src/main/res/drawable-mdpi/ab_disk.png | Bin .../src/main/res/drawable-mdpi/ab_expand.png | Bin .../src/main/res/drawable-mdpi/ab_icon.png | Bin .../src/main/res/drawable-mdpi/ab_menu.png | Bin .../src/main/res/drawable-mdpi/ab_plus.png | Bin .../src/main/res/drawable-mdpi/ab_range.png | Bin .../src/main/res/drawable-mdpi/ab_remove.png | Bin .../main/res/drawable-mdpi/ab_settings.png | Bin .../src/main/res/drawable-mdpi/ab_stats.png | Bin .../main/res/drawable-mdpi/ab_stats_3d.png | Bin .../src/main/res/drawable-mdpi/icon.png | Bin .../main/res/drawable-mdpi/icon_onscreen.png | Bin .../src/main/res/drawable-mdpi/kb_copy.png | Bin .../src/main/res/drawable-mdpi/kb_erase.png | Bin .../src/main/res/drawable-mdpi/kb_logo.png | Bin .../src/main/res/drawable-mdpi/kb_paste.png | Bin .../main/res/drawable-mdpi/kb_settings.png | Bin .../src/main/res/drawable-mdpi/kb_share.png | Bin .../src/main/res/drawable-mdpi/logo.png | Bin .../cpp_onscreen_button_close.png | Bin .../cpp_onscreen_button_fold.png | Bin .../cpp_onscreen_button_minimize.png | Bin .../cpp_onscreen_header_logo.png | Bin ...efault_abs__ab_transparent_dark_holo.9.png | Bin ..._abs__btn_cab_done_default_holo_dark.9.png | Bin ..._abs__btn_cab_done_focused_holo_dark.9.png | Bin ..._abs__btn_cab_done_pressed_holo_dark.9.png | Bin .../default_abs__list_focused_holo.9.png | Bin .../default_abs__list_longpressed_holo.9.png | Bin .../default_abs__list_pressed_holo_dark.9.png | Bin ...lt_abs__spinner_ab_focused_holo_dark.9.png | Bin ...lt_abs__spinner_ab_pressed_holo_dark.9.png | Bin ...fault_abs__tab_selected_focused_holo.9.png | Bin .../default_abs__tab_selected_holo.9.png | Bin ...fault_abs__tab_selected_pressed_holo.9.png | Bin ...ult_abs__tab_unselected_pressed_holo.9.png | Bin ...o_blue_abs__ab_transparent_dark_holo.9.png | Bin .../metro_blue_abs__list_focused_holo.9.png | Bin ...tro_blue_abs__list_pressed_holo_dark.9.png | Bin ..._blue_abs__tab_selected_focused_holo.9.png | Bin .../metro_blue_abs__tab_selected_holo.9.png | Bin ..._blue_abs__tab_selected_pressed_holo.9.png | Bin ...lue_abs__tab_unselected_pressed_holo.9.png | Bin .../res/drawable-nodpi/tablet_big_buttons.png | Bin .../res/drawable-nodpi/tablet_optimized.png | Bin .../res/drawable-nodpi/widget_preview.png | Bin .../src/main/res/drawable-xhdpi/ab_clock.png | Bin .../src/main/res/drawable-xhdpi/ab_disk.png | Bin .../src/main/res/drawable-xhdpi/ab_expand.png | Bin .../src/main/res/drawable-xhdpi/ab_icon.png | Bin .../src/main/res/drawable-xhdpi/ab_menu.png | Bin .../src/main/res/drawable-xhdpi/ab_plus.png | Bin .../src/main/res/drawable-xhdpi/ab_range.png | Bin .../src/main/res/drawable-xhdpi/ab_remove.png | Bin .../main/res/drawable-xhdpi/ab_settings.png | Bin .../src/main/res/drawable-xhdpi/ab_stats.png | Bin .../main/res/drawable-xhdpi/ab_stats_3d.png | Bin .../src/main/res/drawable-xhdpi/icon.png | Bin .../main/res/drawable-xhdpi/icon_onscreen.png | Bin .../src/main/res/drawable-xhdpi/kb_copy.png | Bin .../src/main/res/drawable-xhdpi/kb_erase.png | Bin .../src/main/res/drawable-xhdpi/kb_logo.png | Bin .../src/main/res/drawable-xhdpi/kb_paste.png | Bin .../main/res/drawable-xhdpi/kb_settings.png | Bin .../src/main/res/drawable-xhdpi/kb_share.png | Bin .../src/main/res/drawable-xhdpi/logo.png | Bin .../main/res/drawable-xlarge-hdpi/kb_logo.png | Bin .../src/main/res/drawable-xxhdpi/icon.png | Bin .../res/drawable-xxhdpi/icon_onscreen.png | Bin .../src/main/res/drawable/blue_button.xml | 0 .../main/res/drawable/blue_button_dark.xml | 0 .../res/drawable/blue_button_dark_shape.xml | 0 .../main/res/drawable/blue_button_shape.xml | 0 .../default_abs__btn_cab_done_holo_dark.xml | 0 ...default_abs__item_background_holo_dark.xml | 0 ...lector_background_transition_holo_dark.xml | 0 .../default_abs__list_selector_holo_dark.xml | 0 .../default_abs__spinner_ab_holo_dark.xml | 0 .../default_abs__tab_indicator_ab_holo.xml | 0 .../src/main/res/drawable/gray_button.xml | 0 .../main/res/drawable/gray_button_dark.xml | 0 .../res/drawable/gray_button_dark_shape.xml | 0 .../main/res/drawable/gray_button_shape.xml | 0 .../metro_blue_abs__tab_indicator_ab_holo.xml | 0 .../main/res/drawable/metro_blue_button.xml | 0 .../res/drawable/metro_blue_button_shape.xml | 0 .../res/drawable/metro_blue_list_item.xml | 0 .../main/res/drawable/metro_button_dark.xml | 0 .../res/drawable/metro_button_dark_shape.xml | 0 .../main/res/drawable/metro_button_green.xml | 0 .../res/drawable/metro_button_green_shape.xml | 0 .../main/res/drawable/metro_button_light.xml | 0 .../res/drawable/metro_button_light_shape.xml | 0 .../res/drawable/metro_button_pressed.xml | 0 .../main/res/drawable/metro_button_purple.xml | 0 .../drawable/metro_button_purple_shape.xml | 0 .../res/drawable/metro_green_list_item.xml | 0 .../res/drawable/metro_purple_list_item.xml | 0 .../src/main/res/drawable/pane_background.xml | 0 .../src/main/res/drawable/violet_button.xml | 0 .../main/res/drawable/violet_button_dark.xml | 0 .../res/drawable/violet_button_dark_shape.xml | 0 .../main/res/drawable/violet_button_shape.xml | 0 .../layout/cpp_fixable_messages_dialog.xml | 0 .../cpp_fixable_messages_dialog_message.xml | 0 .../main/res/layout/cpp_simple_button_0.xml | 0 .../main/res/layout/cpp_simple_button_1.xml | 0 .../main/res/layout/cpp_simple_button_2.xml | 0 .../main/res/layout/cpp_simple_button_3.xml | 0 .../main/res/layout/cpp_simple_button_4.xml | 0 .../main/res/layout/cpp_simple_button_5.xml | 0 .../main/res/layout/cpp_simple_button_6.xml | 0 .../main/res/layout/cpp_simple_button_7.xml | 0 .../main/res/layout/cpp_simple_button_8.xml | 0 .../main/res/layout/cpp_simple_button_9.xml | 0 .../main/res/layout/cpp_simple_button_app.xml | 0 .../res/layout/cpp_simple_button_clear.xml | 0 .../res/layout/cpp_simple_button_copy.xml | 0 .../res/layout/cpp_simple_button_division.xml | 0 .../main/res/layout/cpp_simple_button_dot.xml | 0 .../res/layout/cpp_simple_button_equals.xml | 0 .../res/layout/cpp_simple_button_erase.xml | 0 .../layout/cpp_simple_button_functions.xml | 0 .../res/layout/cpp_simple_button_history.xml | 0 .../res/layout/cpp_simple_button_left.xml | 0 .../res/layout/cpp_simple_button_like.xml | 0 .../cpp_simple_button_multiplication.xml | 0 .../layout/cpp_simple_button_operators.xml | 0 .../res/layout/cpp_simple_button_paste.xml | 0 .../res/layout/cpp_simple_button_percent.xml | 0 .../res/layout/cpp_simple_button_plus.xml | 0 .../res/layout/cpp_simple_button_power.xml | 0 .../res/layout/cpp_simple_button_right.xml | 0 .../cpp_simple_button_round_brackets.xml | 0 .../res/layout/cpp_simple_button_settings.xml | 0 .../layout/cpp_simple_button_subtraction.xml | 0 .../res/layout/cpp_simple_button_vars.xml | 0 .../main/res/layout/cpp_simple_keyboard.xml | 0 .../layout/cpp_simple_keyboard_lockscreen.xml | 0 ...p_simple_keyboard_lockscreen_collapsed.xml | 0 .../main/res/layout/cpp_unit_converter.xml | 0 .../src/main/res/layout/onscreen_display.xml | 0 .../src/main/res/layout/onscreen_editor.xml | 0 .../src/main/res/layout/onscreen_footer.xml | 0 .../src/main/res/layout/onscreen_header.xml | 0 .../src/main/res/layout/onscreen_keyboard.xml | 0 .../src/main/res/layout/onscreen_layout.xml | 0 .../src/main/res/layout/widget_display.xml | 0 .../src/main/res/layout/widget_editor.xml | 0 .../src/main/res/layout/widget_layout.xml | 0 .../res/layout/widget_layout_lockscreen.xml | 0 .../widget_layout_lockscreen_collapsed.xml | 0 .../src/main/res/values-ar/text_about.xml | 0 .../src/main/res/values-ar/text_functions.xml | 0 .../src/main/res/values-ar/text_operators.xml | 0 .../main/res/values-ar/text_preferences.xml | 0 .../src/main/res/values-ar/text_strings.xml | 0 .../src/main/res/values-ar/text_vars.xml | 0 .../src/main/res/values-ar/text_wizard.xml | 0 .../src/main/res/values-cs/text_about.xml | 0 .../src/main/res/values-cs/text_functions.xml | 0 .../src/main/res/values-cs/text_operators.xml | 0 .../main/res/values-cs/text_preferences.xml | 0 .../src/main/res/values-cs/text_strings.xml | 0 .../src/main/res/values-cs/text_vars.xml | 0 .../src/main/res/values-cs/text_wizard.xml | 0 .../src/main/res/values-de/text_about.xml | 0 .../src/main/res/values-de/text_functions.xml | 0 .../src/main/res/values-de/text_operators.xml | 0 .../main/res/values-de/text_preferences.xml | 0 .../src/main/res/values-de/text_strings.xml | 0 .../src/main/res/values-de/text_vars.xml | 0 .../src/main/res/values-de/text_wizard.xml | 0 .../src/main/res/values-el/text_about.xml | 0 .../src/main/res/values-el/text_functions.xml | 0 .../src/main/res/values-el/text_operators.xml | 0 .../main/res/values-el/text_preferences.xml | 0 .../src/main/res/values-el/text_strings.xml | 0 .../src/main/res/values-el/text_vars.xml | 0 .../src/main/res/values-el/text_wizard.xml | 0 .../src/main/res/values-es/text_about.xml | 0 .../src/main/res/values-es/text_functions.xml | 0 .../src/main/res/values-es/text_operators.xml | 0 .../main/res/values-es/text_preferences.xml | 0 .../src/main/res/values-es/text_strings.xml | 0 .../src/main/res/values-es/text_vars.xml | 0 .../src/main/res/values-es/text_wizard.xml | 0 .../src/main/res/values-fi/text_about.xml | 0 .../src/main/res/values-fi/text_functions.xml | 0 .../src/main/res/values-fi/text_operators.xml | 0 .../main/res/values-fi/text_preferences.xml | 0 .../src/main/res/values-fi/text_strings.xml | 0 .../src/main/res/values-fi/text_vars.xml | 0 .../src/main/res/values-fi/text_wizard.xml | 0 .../src/main/res/values-fr/text_about.xml | 0 .../src/main/res/values-fr/text_functions.xml | 0 .../src/main/res/values-fr/text_operators.xml | 0 .../main/res/values-fr/text_preferences.xml | 0 .../src/main/res/values-fr/text_strings.xml | 0 .../src/main/res/values-fr/text_vars.xml | 0 .../src/main/res/values-fr/text_wizard.xml | 0 .../src/main/res/values-it/text_about.xml | 0 .../src/main/res/values-it/text_functions.xml | 0 .../src/main/res/values-it/text_operators.xml | 0 .../main/res/values-it/text_preferences.xml | 0 .../src/main/res/values-it/text_strings.xml | 0 .../src/main/res/values-it/text_vars.xml | 0 .../src/main/res/values-it/text_wizard.xml | 0 .../src/main/res/values-ja/text_about.xml | 0 .../src/main/res/values-ja/text_functions.xml | 0 .../src/main/res/values-ja/text_operators.xml | 0 .../main/res/values-ja/text_preferences.xml | 0 .../src/main/res/values-ja/text_strings.xml | 0 .../src/main/res/values-ja/text_vars.xml | 0 .../src/main/res/values-ja/text_wizard.xml | 0 .../src/main/res/values-nl/text_about.xml | 0 .../src/main/res/values-nl/text_functions.xml | 0 .../src/main/res/values-nl/text_operators.xml | 0 .../main/res/values-nl/text_preferences.xml | 0 .../src/main/res/values-nl/text_strings.xml | 0 .../src/main/res/values-nl/text_vars.xml | 0 .../src/main/res/values-nl/text_wizard.xml | 0 .../src/main/res/values-pl/text_about.xml | 0 .../src/main/res/values-pl/text_functions.xml | 0 .../src/main/res/values-pl/text_operators.xml | 0 .../main/res/values-pl/text_preferences.xml | 0 .../src/main/res/values-pl/text_strings.xml | 0 .../src/main/res/values-pl/text_vars.xml | 0 .../src/main/res/values-pl/text_wizard.xml | 0 .../src/main/res/values-pt-rbr/text_about.xml | 0 .../main/res/values-pt-rbr/text_functions.xml | 0 .../main/res/values-pt-rbr/text_operators.xml | 0 .../res/values-pt-rbr/text_preferences.xml | 0 .../main/res/values-pt-rbr/text_strings.xml | 0 .../src/main/res/values-pt-rbr/text_vars.xml | 0 .../main/res/values-pt-rbr/text_wizard.xml | 0 .../src/main/res/values-ru/text_about.xml | 0 .../src/main/res/values-ru/text_functions.xml | 0 .../src/main/res/values-ru/text_operators.xml | 0 .../main/res/values-ru/text_preferences.xml | 0 .../main/res/values-ru/text_release_notes.xml | 0 .../src/main/res/values-ru/text_strings.xml | 0 .../src/main/res/values-ru/text_vars.xml | 0 .../src/main/res/values-ru/text_wizard.xml | 0 .../src/main/res/values-uk/text_about.xml | 0 .../src/main/res/values-uk/text_functions.xml | 0 .../src/main/res/values-uk/text_operators.xml | 0 .../main/res/values-uk/text_preferences.xml | 0 .../src/main/res/values-uk/text_strings.xml | 0 .../src/main/res/values-uk/text_vars.xml | 0 .../src/main/res/values-uk/text_wizard.xml | 0 .../src/main/res/values-vi/text_about.xml | 0 .../src/main/res/values-vi/text_functions.xml | 0 .../src/main/res/values-vi/text_operators.xml | 0 .../main/res/values-vi/text_preferences.xml | 0 .../src/main/res/values-vi/text_strings.xml | 0 .../src/main/res/values-vi/text_vars.xml | 0 .../src/main/res/values-vi/text_wizard.xml | 0 .../src/main/res/values-zh-rcn/text_about.xml | 0 .../main/res/values-zh-rcn/text_functions.xml | 0 .../main/res/values-zh-rcn/text_operators.xml | 0 .../res/values-zh-rcn/text_preferences.xml | 0 .../main/res/values-zh-rcn/text_strings.xml | 0 .../src/main/res/values-zh-rcn/text_vars.xml | 0 .../main/res/values-zh-rcn/text_wizard.xml | 0 .../src/main/res/values-zh-rtw/text_about.xml | 0 .../main/res/values-zh-rtw/text_functions.xml | 0 .../main/res/values-zh-rtw/text_operators.xml | 0 .../res/values-zh-rtw/text_preferences.xml | 0 .../main/res/values-zh-rtw/text_strings.xml | 0 .../src/main/res/values-zh-rtw/text_vars.xml | 0 .../main/res/values-zh-rtw/text_wizard.xml | 0 .../src/main/res/values/admob.xml | 0 android-app/src/main/res/values/arrays.xml | 32 ++ .../src/main/res/values/attributes.xml | 0 .../src/main/res/values/colors.xml | 1 + .../src/main/res/values/dimens.xml | 29 +- .../src/main/res/values/ids.xml | 3 - .../src/main/res/values/styles.xml | 19 + .../src/main/res/values/text_about.xml | 0 .../src/main/res/values/text_functions.xml | 0 .../src/main/res/values/text_operators.xml | 0 .../src/main/res/values/text_preferences.xml | 0 .../main/res/values/text_release_notes.xml | 0 .../src/main/res/values/text_strings.xml | 0 .../src/main/res/values/text_vars.xml | 0 .../src/main/res/values/text_wizard.xml | 0 .../src/main/res/values/theme_gray.xml | 0 .../src/main/res/values/theme_light_blue.xml | 0 .../src/main/res/values/theme_metro_blue.xml | 0 .../src/main/res/values/theme_metro_green.xml | 0 .../main/res/values/theme_metro_purple.xml | 0 .../src/main/res/values/theme_violet.xml | 0 settings.gradle | 4 +- 389 files changed, 885 insertions(+), 2058 deletions(-) delete mode 100644 android-app-core-tests/android-app-core-tests.iml delete mode 100644 android-app-core-tests/build.gradle delete mode 100644 android-app-core-tests/src/test/java/org/solovyev/android/calculator/CalculatorTestUtils.java delete mode 100644 android-app-core/android-app-core.iml delete mode 100644 android-app-core/build.gradle delete mode 100644 android-app-core/src/main/AndroidManifest.xml delete mode 100644 android-app-core/src/main/assets/fonts/Roboto-Regular.ttf delete mode 100644 android-app-core/src/main/res/values/arrays.xml delete mode 100644 android-app-onscreen/android-app-onscreen.iml delete mode 100644 android-app-onscreen/build.gradle delete mode 100644 android-app-onscreen/pom.xml delete mode 100644 android-app-onscreen/src/main/AndroidManifest.xml delete mode 100644 android-app-onscreen/src/main/res/values/colors.xml delete mode 100644 android-app-onscreen/src/main/res/values/styles.xml rename {android-app-core-tests => android-app-tests}/src/test/java/org/solovyev/android/calculator/CalculatorBroadcasterTest.java (100%) rename {android-app-core-tests => android-app-tests}/src/test/java/org/solovyev/android/calculator/CalculatorReceiverTest.java (100%) rename {android-app-core-tests => android-app-tests}/src/test/java/org/solovyev/android/calculator/view/AngleUnitsButtonTest.java (100%) rename {android-app-core-tests => android-app-tests}/src/test/java/org/solovyev/android/calculator/view/NumeralBasesButtonTest.java (100%) delete mode 100644 android-app-widget/android-app-widget.iml delete mode 100644 android-app-widget/build.gradle delete mode 100644 android-app-widget/src/main/AndroidManifest.xml delete mode 100644 android-app-widget/src/main/res/values/colors.xml delete mode 100644 android-app-widget/src/main/res/values/dimens.xml delete mode 100644 android-app-widget/src/main/res/values/styles.xml rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/AndroidCalculatorDisplayView.java (99%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/AndroidCalculatorEditorView.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/App.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/CalculatorBroadcaster.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/CalculatorButton.java (99%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java (99%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/CalculatorDisplayMenuItem.java (98%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/CalculatorDisplayOnClickListener.java (96%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java (99%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java (95%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/ConversionMenuItem.java (96%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/DigitButtonDragProcessor.java (97%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/FixableMessage.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/FixableMessagesDialog.java (99%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/ParcelableDialogData.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/ServiceLocator.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/external/ExternalCalculatorIntentHandler.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java (99%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/model/AndroidMathEntityDao.java (96%) rename {android-app-onscreen => android-app}/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenBroadcastReceiver.java (100%) rename {android-app-onscreen => android-app}/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenService.java (100%) rename {android-app-onscreen => android-app}/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenStartActivity.java (96%) rename {android-app-onscreen => android-app}/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenView.java (100%) rename {android-app-onscreen => android-app}/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenViewState.java (100%) rename {android-app-onscreen => android-app}/src/main/java/org/solovyev/android/calculator/onscreen/OnscreenViewListener.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/plot/AndroidCalculatorPlotter.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/plot/AndroidPlotLineStyle.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/view/AngleUnitsButton.java (98%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/view/EditorTextProcessor.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/view/NumeralBaseConverterDialog.java (96%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/view/NumeralBasesButton.java (98%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/view/TextHighlighter.java (100%) rename {android-app-core => android-app}/src/main/java/org/solovyev/android/calculator/view/UnitConverterViewBuilder.java (96%) rename {android-app-widget => android-app}/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java (100%) rename {android-app-widget => android-app}/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetConfigurationActivity.java (96%) rename {android-app-widget => android-app}/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider.java (100%) rename {android-app-widget => android-app}/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider3x4.java (100%) rename {android-app-widget => android-app}/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x4.java (100%) rename {android-app-widget => android-app}/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x5.java (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_clock.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_disk.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_expand.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_icon.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_menu.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_plus.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_range.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_remove.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_settings.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_stats.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/ab_stats_3d.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/icon.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/icon_onscreen.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/kb_copy.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/kb_erase.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/kb_logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/kb_paste.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/kb_settings.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/kb_share.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-hdpi/logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-ldpi/ab_icon.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-ldpi/kb_logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-ldpi/logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_clock.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_disk.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_expand.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_icon.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_menu.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_plus.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_range.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_remove.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_settings.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_stats.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/ab_stats_3d.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/icon.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/icon_onscreen.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/kb_copy.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/kb_erase.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/kb_logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/kb_paste.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/kb_settings.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/kb_share.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-mdpi/logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/cpp_onscreen_button_close.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/cpp_onscreen_button_fold.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/cpp_onscreen_button_minimize.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/cpp_onscreen_header_logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__ab_transparent_dark_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__btn_cab_done_default_holo_dark.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__btn_cab_done_focused_holo_dark.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__btn_cab_done_pressed_holo_dark.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__list_focused_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__list_longpressed_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__list_pressed_holo_dark.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__spinner_ab_focused_holo_dark.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__spinner_ab_pressed_holo_dark.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__tab_selected_focused_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__tab_selected_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__tab_selected_pressed_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/default_abs__tab_unselected_pressed_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/metro_blue_abs__ab_transparent_dark_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/metro_blue_abs__list_focused_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/metro_blue_abs__list_pressed_holo_dark.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_focused_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_pressed_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/metro_blue_abs__tab_unselected_pressed_holo.9.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/tablet_big_buttons.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/tablet_optimized.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-nodpi/widget_preview.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_clock.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_disk.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_expand.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_icon.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_menu.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_plus.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_range.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_remove.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_settings.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_stats.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/ab_stats_3d.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/icon.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/icon_onscreen.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/kb_copy.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/kb_erase.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/kb_logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/kb_paste.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/kb_settings.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/kb_share.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xhdpi/logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xlarge-hdpi/kb_logo.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xxhdpi/icon.png (100%) rename {android-app-core => android-app}/src/main/res/drawable-xxhdpi/icon_onscreen.png (100%) rename {android-app-core => android-app}/src/main/res/drawable/blue_button.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/blue_button_dark.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/blue_button_dark_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/blue_button_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/default_abs__btn_cab_done_holo_dark.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/default_abs__item_background_holo_dark.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/default_abs__list_selector_background_transition_holo_dark.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/default_abs__list_selector_holo_dark.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/default_abs__spinner_ab_holo_dark.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/default_abs__tab_indicator_ab_holo.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/gray_button.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/gray_button_dark.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/gray_button_dark_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/gray_button_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_blue_abs__tab_indicator_ab_holo.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_blue_button.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_blue_button_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_blue_list_item.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_button_dark.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_button_dark_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_button_green.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_button_green_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_button_light.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_button_light_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_button_pressed.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_button_purple.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_button_purple_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_green_list_item.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/metro_purple_list_item.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/pane_background.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/violet_button.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/violet_button_dark.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/violet_button_dark_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/drawable/violet_button_shape.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_fixable_messages_dialog.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_fixable_messages_dialog_message.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_0.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_1.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_2.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_3.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_4.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_5.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_6.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_7.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_8.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_9.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_app.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_clear.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_copy.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_division.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_dot.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_equals.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_erase.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_history.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_left.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_like.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_multiplication.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_paste.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_percent.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_plus.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_power.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_right.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_round_brackets.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_settings.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_subtraction.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_button_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_keyboard.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_keyboard_lockscreen.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_simple_keyboard_lockscreen_collapsed.xml (100%) rename {android-app-core => android-app}/src/main/res/layout/cpp_unit_converter.xml (100%) rename {android-app-onscreen => android-app}/src/main/res/layout/onscreen_display.xml (100%) rename {android-app-onscreen => android-app}/src/main/res/layout/onscreen_editor.xml (100%) rename {android-app-onscreen => android-app}/src/main/res/layout/onscreen_footer.xml (100%) rename {android-app-onscreen => android-app}/src/main/res/layout/onscreen_header.xml (100%) rename {android-app-onscreen => android-app}/src/main/res/layout/onscreen_keyboard.xml (100%) rename {android-app-onscreen => android-app}/src/main/res/layout/onscreen_layout.xml (100%) rename {android-app-widget => android-app}/src/main/res/layout/widget_display.xml (100%) rename {android-app-widget => android-app}/src/main/res/layout/widget_editor.xml (100%) rename {android-app-widget => android-app}/src/main/res/layout/widget_layout.xml (100%) rename {android-app-widget => android-app}/src/main/res/layout/widget_layout_lockscreen.xml (100%) rename {android-app-widget => android-app}/src/main/res/layout/widget_layout_lockscreen_collapsed.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ar/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ar/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ar/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ar/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ar/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ar/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ar/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-cs/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-cs/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-cs/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-cs/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-cs/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-cs/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-cs/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-de/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-de/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-de/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-de/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-de/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-de/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-de/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-el/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-el/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-el/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-el/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-el/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-el/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-el/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-es/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-es/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-es/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-es/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-es/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-es/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-es/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fi/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fi/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fi/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fi/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fi/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fi/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fi/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fr/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fr/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fr/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fr/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fr/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fr/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-fr/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-it/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-it/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-it/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-it/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-it/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-it/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-it/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ja/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ja/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ja/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ja/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ja/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ja/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ja/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-nl/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-nl/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-nl/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-nl/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-nl/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-nl/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-nl/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pl/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pl/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pl/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pl/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pl/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pl/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pl/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pt-rbr/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pt-rbr/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pt-rbr/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pt-rbr/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pt-rbr/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pt-rbr/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-pt-rbr/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ru/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ru/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ru/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ru/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ru/text_release_notes.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ru/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ru/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-ru/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-uk/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-uk/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-uk/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-uk/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-uk/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-uk/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-uk/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-vi/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-vi/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-vi/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-vi/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-vi/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-vi/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-vi/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rcn/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rcn/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rcn/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rcn/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rcn/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rcn/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rcn/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rtw/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rtw/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rtw/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rtw/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rtw/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rtw/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values-zh-rtw/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values/admob.xml (100%) rename {android-app-core => android-app}/src/main/res/values/attributes.xml (100%) rename {android-app-core => android-app}/src/main/res/values/colors.xml (96%) rename {android-app-core => android-app}/src/main/res/values/dimens.xml (60%) rename {android-app-core => android-app}/src/main/res/values/ids.xml (95%) rename {android-app-core => android-app}/src/main/res/values/styles.xml (86%) rename {android-app-core => android-app}/src/main/res/values/text_about.xml (100%) rename {android-app-core => android-app}/src/main/res/values/text_functions.xml (100%) rename {android-app-core => android-app}/src/main/res/values/text_operators.xml (100%) rename {android-app-core => android-app}/src/main/res/values/text_preferences.xml (100%) rename {android-app-core => android-app}/src/main/res/values/text_release_notes.xml (100%) rename {android-app-core => android-app}/src/main/res/values/text_strings.xml (100%) rename {android-app-core => android-app}/src/main/res/values/text_vars.xml (100%) rename {android-app-core => android-app}/src/main/res/values/text_wizard.xml (100%) rename {android-app-core => android-app}/src/main/res/values/theme_gray.xml (100%) rename {android-app-core => android-app}/src/main/res/values/theme_light_blue.xml (100%) rename {android-app-core => android-app}/src/main/res/values/theme_metro_blue.xml (100%) rename {android-app-core => android-app}/src/main/res/values/theme_metro_green.xml (100%) rename {android-app-core => android-app}/src/main/res/values/theme_metro_purple.xml (100%) rename {android-app-core => android-app}/src/main/res/values/theme_violet.xml (100%) diff --git a/.idea/encodings.xml b/.idea/encodings.xml index bb0b1d76..1ccfa6c8 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -6,7 +6,5 @@ - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index a6784935..35db5fb0 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -11,11 +11,7 @@ diff --git a/.idea/modules.xml b/.idea/modules.xml index 10ca2031..b44e84c8 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,11 +3,7 @@ - - - - diff --git a/android-app-core-tests/android-app-core-tests.iml b/android-app-core-tests/android-app-core-tests.iml deleted file mode 100644 index 1197dc73..00000000 --- a/android-app-core-tests/android-app-core-tests.iml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android-app-core-tests/build.gradle b/android-app-core-tests/build.gradle deleted file mode 100644 index 0cfd9e49..00000000 --- a/android-app-core-tests/build.gradle +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2014 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 - */ - -apply plugin: 'java' - -dependencies { - def androidModule = project(':android-app') - compile androidModule - - testCompile androidModule.android.applicationVariants.toList().first().javaCompile.classpath - testCompile androidModule.android.applicationVariants.toList().first().javaCompile.outputs.files - testCompile files(androidModule.plugins.findPlugin("com.android.application").getBootClasspath()) - - testCompile 'junit:junit:4.+' - testCompile 'org.robolectric:robolectric:2.3' - testCompile "org.mockito:mockito-all:1.9.5" - testCompile "org.skyscreamer:jsonassert:1.2.3" -} - -tasks.withType(Test) { - scanForTestClasses = false - include "**/*Test.class" - exclude "**/*AngleUnitsButtonTest*" - exclude "**/*NumeralBasesButtonTest*" -} - -test { - maxParallelForks = 15 - forkEvery = 1 -} \ No newline at end of file diff --git a/android-app-core-tests/src/test/java/org/solovyev/android/calculator/CalculatorTestUtils.java b/android-app-core-tests/src/test/java/org/solovyev/android/calculator/CalculatorTestUtils.java deleted file mode 100644 index 6730aa1b..00000000 --- a/android-app-core-tests/src/test/java/org/solovyev/android/calculator/CalculatorTestUtils.java +++ /dev/null @@ -1,78 +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.calculator; - -import android.content.Context; -import jscl.JsclMathEngine; -import org.mockito.Mockito; -import org.solovyev.android.calculator.history.CalculatorHistory; -import org.solovyev.android.calculator.plot.CalculatorPlotter; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -/** - * User: serso - * Date: 10/7/12 - * Time: 8:56 PM - */ -public class CalculatorTestUtils { - - public static void staticSetUp(@Nullable Context context) throws Exception { - Locator.getInstance().init(new CalculatorImpl(), newCalculatorEngine(), Mockito.mock(CalculatorClipboard.class), Mockito.mock(CalculatorNotifier.class), Mockito.mock(CalculatorHistory.class), new SystemOutCalculatorLogger(), Mockito.mock(CalculatorPreferenceService.class), Mockito.mock(CalculatorKeyboard.class), Mockito.mock(CalculatorPlotter.class), null); - Locator.getInstance().getEngine().init(); - - if (context != null) { - initViews(context); - } - } - - public static void initViews(@Nonnull Context context) { - final AndroidCalculatorEditorView editor = new AndroidCalculatorEditorView(context); - editor.init(); - Locator.getInstance().getEditor().setView(editor); - - final AndroidCalculatorDisplayView display = new AndroidCalculatorDisplayView(context); - display.init(context); - Locator.getInstance().getDisplay().setView(display); - } - - public static void staticSetUp() throws Exception { - staticSetUp(null); - } - - - @Nonnull - static CalculatorEngineImpl newCalculatorEngine() { - final MathEntityDao mathEntityDao = Mockito.mock(MathEntityDao.class); - - final JsclMathEngine jsclEngine = JsclMathEngine.getInstance(); - - final CalculatorVarsRegistry varsRegistry = new CalculatorVarsRegistry(jsclEngine.getConstantsRegistry(), mathEntityDao); - final CalculatorFunctionsMathRegistry functionsRegistry = new CalculatorFunctionsMathRegistry(jsclEngine.getFunctionsRegistry(), mathEntityDao); - final CalculatorOperatorsMathRegistry operatorsRegistry = new CalculatorOperatorsMathRegistry(jsclEngine.getOperatorsRegistry(), mathEntityDao); - final CalculatorPostfixFunctionsRegistry postfixFunctionsRegistry = new CalculatorPostfixFunctionsRegistry(jsclEngine.getPostfixFunctionsRegistry(), mathEntityDao); - - return new CalculatorEngineImpl(jsclEngine, varsRegistry, functionsRegistry, operatorsRegistry, postfixFunctionsRegistry, null); - } -} diff --git a/android-app-core/android-app-core.iml b/android-app-core/android-app-core.iml deleted file mode 100644 index e6ac0687..00000000 --- a/android-app-core/android-app-core.iml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android-app-core/build.gradle b/android-app-core/build.gradle deleted file mode 100644 index f1986fc9..00000000 --- a/android-app-core/build.gradle +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2014 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 - */ - -apply plugin: 'com.android.library' -apply plugin: 'maven' -apply plugin: 'signing' - -android { - compileSdkVersion android_sdk_version() - buildToolsVersion android_build_tools_version() - - defaultConfig { - minSdkVersion android_min_sdk_version() - targetSdkVersion android_sdk_version() - versionCode version_code() - versionName version_name() - } - lintOptions { - abortOnError false - } -} - -dependencies { - compile project(':core') - compile 'org.solovyev:common-core:1.0.7' - compile 'org.solovyev:common-text:1.0.7' - compile 'org.solovyev:common-security:1.0.7' - compile 'org.solovyev.android:android-common-views:1.1.18@aar' - compile 'org.solovyev.android:android-common-menus:1.1.18@aar' - compile 'org.solovyev.android:android-common-core:1.1.18@aar' - compile 'org.solovyev.android:android-common-preferences:1.1.18@aar' - compile('org.solovyev:jscl:1.0.8') { - exclude(module: 'xercesImpl') - } - compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' - compile 'com.android.support:support-v4:21.0.3' - compile 'org.solovyev.android:checkout:0.6.0@aar' - compile 'com.google.android.gms:play-services:6.5.87@aar' - //testCompile group: 'org.robolectric', name: 'robolectric', version: '2.1.1' -} - - -task androidJavadocs(type: Javadoc) { - source = android.sourceSets.main.java.srcDirs - classpath += project.files(android.plugin.getBootClasspath().join(File.pathSeparator)) - configurations.compile.each { File file -> classpath += project.files(file.path) } -} - -task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { - classifier = 'javadoc' - from androidJavadocs.destinationDir -} - -task androidSourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.srcDirs -} - -task apklib(type: Zip) { - appendix = extension = 'apklib' - - from 'src/main/AndroidManifest.xml' - into('res') { - from android.sourceSets.main.res.srcDirs - } - into('src') { - from android.sourceSets.main.java.srcDirs - } - into('src') { - from android.sourceSets.main.aidl.srcDirs - } -} - - -artifacts { - archives androidSourcesJar - archives androidJavadocsJar - archives apklib -} - -signing { - sign configurations.archives -} - -group = "org.solovyev.android" -archivesBaseName = "calculatorpp-android-app-core" -version = version_name() - -uploadArchives { - repositories { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - - repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { - authentication(userName: ossrhUsername, password: ossrhPassword) - } - - snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") { - authentication(userName: ossrhUsername, password: ossrhPassword) - } - - pom.project { - name 'Calculator++ Application Core' - packaging 'aar' - url 'https://github.com/serso/android-calculatorpp' - - scm { - url 'https://github.com/serso/android-calculatorpp' - connection 'scm:https://serso@github.com/serso/android-calculatorpp.git' - developerConnection 'scm:git://github.com/serso/android-calculatorpp.git' - } - - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - - developers { - developer { - id 'se.solovyev' - name 'Sergey Solovyev' - email 'se.solovyev@gmail.com' - } - } - } - } - } -} diff --git a/android-app-core/src/main/AndroidManifest.xml b/android-app-core/src/main/AndroidManifest.xml deleted file mode 100644 index 7ee835bb..00000000 --- a/android-app-core/src/main/AndroidManifest.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/android-app-core/src/main/assets/fonts/Roboto-Regular.ttf b/android-app-core/src/main/assets/fonts/Roboto-Regular.ttf deleted file mode 100644 index 73b23abb9a228d1b3f705b4207ad3604789b4a56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101264 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

3N^-aq^gZic~g<|!TMgs*~{IZ=(+ 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�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 bSpe(Cy0advC+mfr#(i)GSRi6ipgH|N=N?!_ diff --git a/android-app-core/src/main/res/values/arrays.xml b/android-app-core/src/main/res/values/arrays.xml deleted file mode 100644 index d5a7c2ae..00000000 --- a/android-app-core/src/main/res/values/arrays.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - @string/cpp_solid_line_style - @string/cpp_dashed_line_style - @string/cpp_dotted_line_style - @string/cpp_dash_dotted_line_style - - - - @string/cpp_monochrome_line_color_type - @string/cpp_color_map_line_color_type - - - - @string/p_white_line_color - @string/p_blue_line_color - @string/p_red_line_color - @string/p_green_line_color - @string/p_grey_line_color - - - white - blue - red - green - grey - - - \ No newline at end of file diff --git a/android-app-onscreen/android-app-onscreen.iml b/android-app-onscreen/android-app-onscreen.iml deleted file mode 100644 index 08921145..00000000 --- a/android-app-onscreen/android-app-onscreen.iml +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android-app-onscreen/build.gradle b/android-app-onscreen/build.gradle deleted file mode 100644 index db911552..00000000 --- a/android-app-onscreen/build.gradle +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2014 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 - */ - -apply plugin: 'com.android.library' -apply plugin: 'maven' -apply plugin: 'signing' - -android { - compileSdkVersion android_sdk_version() - buildToolsVersion android_build_tools_version() - - defaultConfig { - minSdkVersion android_min_sdk_version() - targetSdkVersion android_sdk_version() - versionCode version_code() - versionName version_name() - } - lintOptions { - abortOnError false - } -} - -dependencies { - compile project(':core') - compile project(':android-app-core') - compile 'org.solovyev:common-core:1.0.7' - compile 'org.solovyev:common-text:1.0.7' - compile 'org.solovyev.android:android-common-views:1.1.18@aar' - compile 'org.solovyev.android:android-common-menus:1.1.18@aar' - compile 'org.solovyev.android:android-common-core:1.1.18@aar' - compile 'org.solovyev.android:android-common-preferences:1.1.18@aar' - compile('org.solovyev:jscl:1.0.8') { - exclude(module: 'xercesImpl') - } - compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' - compile 'com.android.support:support-v4:21.0.3' - //testCompile group: 'org.robolectric', name: 'robolectric', version: '2.1.1' -} - - -task androidJavadocs(type: Javadoc) { - source = android.sourceSets.main.java.srcDirs - classpath += project.files(android.plugin.getBootClasspath().join(File.pathSeparator)) - configurations.compile.each { File file -> classpath += project.files(file.path) } -} - -task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { - classifier = 'javadoc' - from androidJavadocs.destinationDir -} - -task androidSourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.srcDirs -} - -task apklib(type: Zip) { - appendix = extension = 'apklib' - - from 'src/main/AndroidManifest.xml' - into('res') { - from android.sourceSets.main.res.srcDirs - } - into('src') { - from android.sourceSets.main.java.srcDirs - } - into('src') { - from android.sourceSets.main.aidl.srcDirs - } -} - - -artifacts { - archives androidSourcesJar - archives androidJavadocsJar - archives apklib -} - -signing { - sign configurations.archives -} - -group = "org.solovyev.android" -archivesBaseName = "calculatorpp-android-app-onscreen" -version = version_name() - -uploadArchives { - repositories { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - - repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { - authentication(userName: ossrhUsername, password: ossrhPassword) - } - - snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") { - authentication(userName: ossrhUsername, password: ossrhPassword) - } - - pom.project { - name 'Calculator++ Application Onscreen' - packaging 'aar' - url 'https://github.com/serso/android-calculatorpp' - - scm { - url 'https://github.com/serso/android-calculatorpp' - connection 'scm:https://serso@github.com/serso/android-calculatorpp.git' - developerConnection 'scm:git://github.com/serso/android-calculatorpp.git' - } - - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - - developers { - developer { - id 'se.solovyev' - name 'Sergey Solovyev' - email 'se.solovyev@gmail.com' - } - } - } - } - } -} diff --git a/android-app-onscreen/pom.xml b/android-app-onscreen/pom.xml deleted file mode 100644 index 52cafcf6..00000000 --- a/android-app-onscreen/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - - org.solovyev.android - calculatorpp-parent - 2.0.7-SNAPSHOT - - - org.solovyev.android - calculatorpp-android-app-onscreen - 2.0.7-SNAPSHOT - Calculator++ Application Onscreen - apklib - - - - - org.solovyev.android - calculatorpp-core - - - - org.solovyev.android - calculatorpp-android-app-core - apklib - - - - com.google.android - android - provided - - - - com.google.android - support-v4 - - - - - - - - - com.simpligility.maven.plugins - android-maven-plugin - - - - - - diff --git a/android-app-onscreen/src/main/AndroidManifest.xml b/android-app-onscreen/src/main/AndroidManifest.xml deleted file mode 100644 index 3e72674d..00000000 --- a/android-app-onscreen/src/main/AndroidManifest.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android-app-onscreen/src/main/res/values/colors.xml b/android-app-onscreen/src/main/res/values/colors.xml deleted file mode 100644 index 941d7007..00000000 --- a/android-app-onscreen/src/main/res/values/colors.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #ff707070 - \ No newline at end of file diff --git a/android-app-onscreen/src/main/res/values/styles.xml b/android-app-onscreen/src/main/res/values/styles.xml deleted file mode 100644 index eabbdca9..00000000 --- a/android-app-onscreen/src/main/res/values/styles.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android-app-tests/android-app-tests.iml b/android-app-tests/android-app-tests.iml index 45a3417a..3fb9b10e 100644 --- a/android-app-tests/android-app-tests.iml +++ b/android-app-tests/android-app-tests.iml @@ -71,40 +71,36 @@ + - - + - - - - - - - + + - - - + + + + + - - - + + + + - + - - - - - - + + + + \ No newline at end of file diff --git a/android-app-tests/build.gradle b/android-app-tests/build.gradle index 2108f5c0..a9321ff4 100644 --- a/android-app-tests/build.gradle +++ b/android-app-tests/build.gradle @@ -44,6 +44,8 @@ tasks.withType(Test) { exclude "**/*OnScreenCalculatorWizardStepTest*" exclude "**/*CalculatorWizardTest*" exclude "**/*WizardStepTest*" + exclude "**/*AngleUnitsButtonTest*" + exclude "**/*NumeralBasesButtonTest*" } test { diff --git a/android-app-core-tests/src/test/java/org/solovyev/android/calculator/CalculatorBroadcasterTest.java b/android-app-tests/src/test/java/org/solovyev/android/calculator/CalculatorBroadcasterTest.java similarity index 100% rename from android-app-core-tests/src/test/java/org/solovyev/android/calculator/CalculatorBroadcasterTest.java rename to android-app-tests/src/test/java/org/solovyev/android/calculator/CalculatorBroadcasterTest.java diff --git a/android-app-core-tests/src/test/java/org/solovyev/android/calculator/CalculatorReceiverTest.java b/android-app-tests/src/test/java/org/solovyev/android/calculator/CalculatorReceiverTest.java similarity index 100% rename from android-app-core-tests/src/test/java/org/solovyev/android/calculator/CalculatorReceiverTest.java rename to android-app-tests/src/test/java/org/solovyev/android/calculator/CalculatorReceiverTest.java diff --git a/android-app-core-tests/src/test/java/org/solovyev/android/calculator/view/AngleUnitsButtonTest.java b/android-app-tests/src/test/java/org/solovyev/android/calculator/view/AngleUnitsButtonTest.java similarity index 100% rename from android-app-core-tests/src/test/java/org/solovyev/android/calculator/view/AngleUnitsButtonTest.java rename to android-app-tests/src/test/java/org/solovyev/android/calculator/view/AngleUnitsButtonTest.java diff --git a/android-app-core-tests/src/test/java/org/solovyev/android/calculator/view/NumeralBasesButtonTest.java b/android-app-tests/src/test/java/org/solovyev/android/calculator/view/NumeralBasesButtonTest.java similarity index 100% rename from android-app-core-tests/src/test/java/org/solovyev/android/calculator/view/NumeralBasesButtonTest.java rename to android-app-tests/src/test/java/org/solovyev/android/calculator/view/NumeralBasesButtonTest.java diff --git a/android-app-widget/android-app-widget.iml b/android-app-widget/android-app-widget.iml deleted file mode 100644 index e5ff8511..00000000 --- a/android-app-widget/android-app-widget.iml +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android-app-widget/build.gradle b/android-app-widget/build.gradle deleted file mode 100644 index 0700ca52..00000000 --- a/android-app-widget/build.gradle +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2014 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 - */ - -apply plugin: 'com.android.library' -apply plugin: 'maven' -apply plugin: 'signing' - -android { - compileSdkVersion android_sdk_version() - buildToolsVersion android_build_tools_version() - - defaultConfig { - minSdkVersion android_min_sdk_version() - targetSdkVersion android_sdk_version() - versionCode version_code() - versionName version_name() - } - lintOptions { - abortOnError false - } -} - -dependencies { - compile project(':core') - compile project(':android-app-core') - compile 'org.solovyev:common-core:1.0.7' - compile 'org.solovyev:common-text:1.0.7' - compile 'org.solovyev.android:android-common-views:1.1.18@aar' - compile 'org.solovyev.android:android-common-menus:1.1.18@aar' - compile 'org.solovyev.android:android-common-core:1.1.18@aar' - compile 'org.solovyev.android:android-common-preferences:1.1.18@aar' - compile('org.solovyev:jscl:1.0.8') { - exclude(module: 'xercesImpl') - } - compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' - compile 'com.android.support:support-v4:21.0.3' - //testCompile group: 'org.robolectric', name: 'robolectric', version: '2.1.1' -} - - -task androidJavadocs(type: Javadoc) { - source = android.sourceSets.main.java.srcDirs - classpath += project.files(android.plugin.getBootClasspath().join(File.pathSeparator)) - configurations.compile.each { File file -> classpath += project.files(file.path) } -} - -task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { - classifier = 'javadoc' - from androidJavadocs.destinationDir -} - -task androidSourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.srcDirs -} - -task apklib(type: Zip) { - appendix = extension = 'apklib' - - from 'src/main/AndroidManifest.xml' - into('res') { - from android.sourceSets.main.res.srcDirs - } - into('src') { - from android.sourceSets.main.java.srcDirs - } - into('src') { - from android.sourceSets.main.aidl.srcDirs - } -} - - -artifacts { - archives androidSourcesJar - archives androidJavadocsJar - archives apklib -} - -signing { - sign configurations.archives -} - -group = "org.solovyev.android" -archivesBaseName = "calculatorpp-android-app-widget" -version = version_name() - -uploadArchives { - repositories { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - - repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { - authentication(userName: ossrhUsername, password: ossrhPassword) - } - - snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") { - authentication(userName: ossrhUsername, password: ossrhPassword) - } - - pom.project { - name 'Calculator++ Application Widget' - packaging 'aar' - url 'https://github.com/serso/android-calculatorpp' - - scm { - url 'https://github.com/serso/android-calculatorpp' - connection 'scm:https://serso@github.com/serso/android-calculatorpp.git' - developerConnection 'scm:git://github.com/serso/android-calculatorpp.git' - } - - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'http://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - - developers { - developer { - id 'se.solovyev' - name 'Sergey Solovyev' - email 'se.solovyev@gmail.com' - } - } - } - } - } -} diff --git a/android-app-widget/src/main/AndroidManifest.xml b/android-app-widget/src/main/AndroidManifest.xml deleted file mode 100644 index dedbe451..00000000 --- a/android-app-widget/src/main/AndroidManifest.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/android-app-widget/src/main/res/values/colors.xml b/android-app-widget/src/main/res/values/colors.xml deleted file mode 100644 index 75232d5d..00000000 --- a/android-app-widget/src/main/res/values/colors.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #ff707070 - \ No newline at end of file diff --git a/android-app-widget/src/main/res/values/dimens.xml b/android-app-widget/src/main/res/values/dimens.xml deleted file mode 100644 index 3f631a5a..00000000 --- a/android-app-widget/src/main/res/values/dimens.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - 16sp - 25sp - 16sp - 25sp - 6dp - 300dp - \ No newline at end of file diff --git a/android-app-widget/src/main/res/values/styles.xml b/android-app-widget/src/main/res/values/styles.xml deleted file mode 100644 index 691dbfb0..00000000 --- a/android-app-widget/src/main/res/values/styles.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/android-app/android-app.iml b/android-app/android-app.iml index b8850e67..f582febd 100644 --- a/android-app/android-app.iml +++ b/android-app/android-app.iml @@ -1,5 +1,5 @@ - + @@ -79,35 +79,36 @@ - - + - + - - - + - - + - + - + + + + + + + + + - - - \ No newline at end of file diff --git a/android-app/build.gradle b/android-app/build.gradle index 7225c2a9..00892a91 100644 --- a/android-app/build.gradle +++ b/android-app/build.gradle @@ -47,6 +47,10 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) + compile project(':core') + compile 'org.solovyev:common-core:1.0.7' + compile 'org.solovyev:common-text:1.0.7' + compile 'org.solovyev:common-security:1.0.7' compile 'com.android.support:support-v4:21.0.3' compile ('ch.acra:acra:4.5.0') { exclude group: 'org.json' @@ -58,11 +62,16 @@ dependencies { compile 'org.solovyev.android:android-common-other:1.1.18@aar' compile 'org.solovyev.android:android-common-db:1.1.18@aar' compile 'org.solovyev.android:android-common-security:1.1.18@aar' + compile 'org.solovyev.android:android-common-views:1.1.18@aar' + compile 'org.solovyev.android:android-common-menus:1.1.18@aar' + compile 'org.solovyev.android:android-common-preferences:1.1.18@aar' + compile('org.solovyev:jscl:1.0.8') { + exclude(module: 'xercesImpl') + } compile 'org.solovyev.android:checkout:0.6.0@aar' - compile project(':android-app-core') - compile project(':android-app-widget') - compile project(':android-app-onscreen') - compile project(':core') + compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' + compile 'com.google.android.gms:play-services:6.5.87@aar' + } task androidJavadocs(type: Javadoc) { diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/AndroidCalculatorDisplayView.java b/android-app/src/main/java/org/solovyev/android/calculator/AndroidCalculatorDisplayView.java similarity index 99% rename from android-app-core/src/main/java/org/solovyev/android/calculator/AndroidCalculatorDisplayView.java rename to android-app/src/main/java/org/solovyev/android/calculator/AndroidCalculatorDisplayView.java index b70643e6..7290cd52 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/AndroidCalculatorDisplayView.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/AndroidCalculatorDisplayView.java @@ -31,16 +31,13 @@ import android.support.v4.app.FragmentActivity; import android.text.Html; import android.util.AttributeSet; import android.util.TypedValue; - -import org.solovyev.android.calculator.core.R; import org.solovyev.android.calculator.text.TextProcessor; -import org.solovyev.android.calculator.view.TextHighlighter; import org.solovyev.android.calculator.text.TextProcessorEditorResult; +import org.solovyev.android.calculator.view.TextHighlighter; import org.solovyev.android.view.AutoResizeTextView; import javax.annotation.Nonnull; import javax.annotation.Nullable; - import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/AndroidCalculatorEditorView.java b/android-app/src/main/java/org/solovyev/android/calculator/AndroidCalculatorEditorView.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/AndroidCalculatorEditorView.java rename to android-app/src/main/java/org/solovyev/android/calculator/AndroidCalculatorEditorView.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/App.java b/android-app/src/main/java/org/solovyev/android/calculator/App.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/App.java rename to android-app/src/main/java/org/solovyev/android/calculator/App.java diff --git a/android-app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java index bbf55b23..158ed592 100644 --- a/android-app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java @@ -215,6 +215,9 @@ public class CalculatorApplication extends android.app.Application implements Sh Locator.getInstance().getNotifier().showDebugMessage(TAG, "Application started!"); typeFace = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Regular.ttf"); + + // we must update the widget when app starts + App.getBroadcaster().sendEditorStateChangedIntent(); } private void setTheme(@Nonnull SharedPreferences preferences) { diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorBroadcaster.java b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorBroadcaster.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorBroadcaster.java rename to android-app/src/main/java/org/solovyev/android/calculator/CalculatorBroadcaster.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorButton.java b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorButton.java similarity index 99% rename from android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorButton.java rename to android-app/src/main/java/org/solovyev/android/calculator/CalculatorButton.java index a1d84bb2..833deff1 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorButton.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorButton.java @@ -27,7 +27,7 @@ import android.content.Context; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.solovyev.android.calculator.core.R; +import org.solovyev.android.calculator.R; import java.util.HashMap; import java.util.Map; diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java similarity index 99% rename from android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java rename to android-app/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java index aa3aeec1..bb555c7a 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorButtons.java @@ -37,7 +37,7 @@ import jscl.AngleUnit; import jscl.NumeralBase; import org.solovyev.android.Views; -import org.solovyev.android.calculator.core.R; +import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.model.AndroidCalculatorEngine; import org.solovyev.android.calculator.view.AngleUnitsButton; import org.solovyev.android.calculator.view.NumeralBasesButton; diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorDisplayMenuItem.java b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorDisplayMenuItem.java similarity index 98% rename from android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorDisplayMenuItem.java rename to android-app/src/main/java/org/solovyev/android/calculator/CalculatorDisplayMenuItem.java index 095483c8..cf3f1108 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorDisplayMenuItem.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorDisplayMenuItem.java @@ -27,7 +27,7 @@ import jscl.math.Generic; import javax.annotation.Nonnull; -import org.solovyev.android.calculator.core.R; +import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.jscl.JsclOperation; import org.solovyev.android.calculator.plot.CalculatorPlotter; import org.solovyev.android.calculator.view.NumeralBaseConverterDialog; diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorDisplayOnClickListener.java b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorDisplayOnClickListener.java similarity index 96% rename from android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorDisplayOnClickListener.java rename to android-app/src/main/java/org/solovyev/android/calculator/CalculatorDisplayOnClickListener.java index 4b3994b2..b15c5e85 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorDisplayOnClickListener.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorDisplayOnClickListener.java @@ -1,77 +1,77 @@ -/* - * 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.calculator; - -import android.support.v4.app.FragmentActivity; -import android.view.View; - -import javax.annotation.Nonnull; - -import org.solovyev.android.menu.ContextMenuBuilder; -import org.solovyev.android.menu.ListContextMenu; - -import java.util.ArrayList; -import java.util.List; - -/** - * User: Solovyev_S - * Date: 21.09.12 - * Time: 10:58 - */ -public class CalculatorDisplayOnClickListener implements View.OnClickListener { - - @Nonnull - private final FragmentActivity activity; - - public CalculatorDisplayOnClickListener(@Nonnull FragmentActivity activity) { - this.activity = activity; - } - - @Override - public void onClick(View v) { - if (v instanceof CalculatorDisplayView) { - final CalculatorDisplay cd = Locator.getInstance().getDisplay(); - - final CalculatorDisplayViewState displayViewState = cd.getViewState(); - - if (displayViewState.isValid()) { - final List filteredMenuItems = new ArrayList(CalculatorDisplayMenuItem.values().length); - for (CalculatorDisplayMenuItem menuItem : CalculatorDisplayMenuItem.values()) { - if (menuItem.isItemVisible(displayViewState)) { - filteredMenuItems.add(menuItem); - } - } - - if (!filteredMenuItems.isEmpty()) { - ContextMenuBuilder.newInstance(activity, "display-menu", ListContextMenu.newInstance(filteredMenuItems)).build(displayViewState).show(); - } - - } else { - final String errorMessage = displayViewState.getErrorMessage(); - if (errorMessage != null) { - Locator.getInstance().getCalculator().fireCalculatorEvent(CalculatorEventType.show_evaluation_error, errorMessage, activity); - } - } - } - } -} +/* + * 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.calculator; + +import android.support.v4.app.FragmentActivity; +import android.view.View; + +import javax.annotation.Nonnull; + +import org.solovyev.android.menu.ContextMenuBuilder; +import org.solovyev.android.menu.ListContextMenu; + +import java.util.ArrayList; +import java.util.List; + +/** + * User: Solovyev_S + * Date: 21.09.12 + * Time: 10:58 + */ +public class CalculatorDisplayOnClickListener implements View.OnClickListener { + + @Nonnull + private final FragmentActivity activity; + + public CalculatorDisplayOnClickListener(@Nonnull FragmentActivity activity) { + this.activity = activity; + } + + @Override + public void onClick(View v) { + if (v instanceof CalculatorDisplayView) { + final CalculatorDisplay cd = Locator.getInstance().getDisplay(); + + final CalculatorDisplayViewState displayViewState = cd.getViewState(); + + if (displayViewState.isValid()) { + final List filteredMenuItems = new ArrayList(CalculatorDisplayMenuItem.values().length); + for (CalculatorDisplayMenuItem menuItem : CalculatorDisplayMenuItem.values()) { + if (menuItem.isItemVisible(displayViewState)) { + filteredMenuItems.add(menuItem); + } + } + + if (!filteredMenuItems.isEmpty()) { + ContextMenuBuilder.newInstance(activity, "display-menu", ListContextMenu.newInstance(filteredMenuItems)).build(displayViewState).show(); + } + + } else { + final String errorMessage = displayViewState.getErrorMessage(); + if (errorMessage != null) { + Locator.getInstance().getCalculator().fireCalculatorEvent(CalculatorEventType.show_evaluation_error, errorMessage, activity); + } + } + } + } +} diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java similarity index 99% rename from android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java rename to android-app/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java index 1ced9d0d..4c4f4c01 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorPreferences.java @@ -26,7 +26,7 @@ import android.content.SharedPreferences; import jscl.AngleUnit; import jscl.NumeralBase; -import org.solovyev.android.calculator.core.R; +import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.math.MathType; import org.solovyev.android.calculator.model.AndroidCalculatorEngine; import org.solovyev.android.prefs.*; diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java similarity index 95% rename from android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java rename to android-app/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java index 16dfe7ef..17c019c8 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/CalculatorReceiver.java @@ -22,8 +22,6 @@ public final class CalculatorReceiver extends BroadcastReceiver { if (button != null) { button.onClick(context); } - - App.getBroadcaster().sendEditorStateChangedIntent(); } } diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/ConversionMenuItem.java b/android-app/src/main/java/org/solovyev/android/calculator/ConversionMenuItem.java similarity index 96% rename from android-app-core/src/main/java/org/solovyev/android/calculator/ConversionMenuItem.java rename to android-app/src/main/java/org/solovyev/android/calculator/ConversionMenuItem.java index ed44264c..8a048941 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/ConversionMenuItem.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/ConversionMenuItem.java @@ -1,76 +1,76 @@ -/* - * 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.calculator; - -import android.content.Context; -import jscl.NumeralBase; -import jscl.math.Generic; - -import javax.annotation.Nonnull; - -import org.solovyev.android.calculator.jscl.JsclOperation; -import org.solovyev.android.menu.AMenuItem; - -/** - * User: serso - * Date: 9/21/12 - * Time: 12:11 AM - */ -enum ConversionMenuItem implements AMenuItem { - - convert_to_bin(NumeralBase.bin), - convert_to_dec(NumeralBase.dec), - convert_to_hex(NumeralBase.hex); - - @Nonnull - private final NumeralBase toNumeralBase; - - ConversionMenuItem(@Nonnull NumeralBase toNumeralBase) { - this.toNumeralBase = toNumeralBase; - } - - protected boolean isItemVisibleFor(@Nonnull Generic generic, @Nonnull JsclOperation operation) { - boolean result = false; - - if (operation == JsclOperation.numeric) { - if (generic.getConstants().isEmpty()) { - // conversion possible => return true - final NumeralBase fromNumeralBase = Locator.getInstance().getEngine().getNumeralBase(); - if (fromNumeralBase != toNumeralBase) { - result = Locator.getInstance().getCalculator().isConversionPossible(generic, fromNumeralBase, this.toNumeralBase); - } - } - } - - return result; - } - - @Override - public void onClick(@Nonnull CalculatorDisplayViewState data, @Nonnull Context context) { - final Generic result = data.getResult(); - - if (result != null) { - Locator.getInstance().getCalculator().convert(result, this.toNumeralBase); - } - } -} +/* + * 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.calculator; + +import android.content.Context; +import jscl.NumeralBase; +import jscl.math.Generic; + +import javax.annotation.Nonnull; + +import org.solovyev.android.calculator.jscl.JsclOperation; +import org.solovyev.android.menu.AMenuItem; + +/** + * User: serso + * Date: 9/21/12 + * Time: 12:11 AM + */ +enum ConversionMenuItem implements AMenuItem { + + convert_to_bin(NumeralBase.bin), + convert_to_dec(NumeralBase.dec), + convert_to_hex(NumeralBase.hex); + + @Nonnull + private final NumeralBase toNumeralBase; + + ConversionMenuItem(@Nonnull NumeralBase toNumeralBase) { + this.toNumeralBase = toNumeralBase; + } + + protected boolean isItemVisibleFor(@Nonnull Generic generic, @Nonnull JsclOperation operation) { + boolean result = false; + + if (operation == JsclOperation.numeric) { + if (generic.getConstants().isEmpty()) { + // conversion possible => return true + final NumeralBase fromNumeralBase = Locator.getInstance().getEngine().getNumeralBase(); + if (fromNumeralBase != toNumeralBase) { + result = Locator.getInstance().getCalculator().isConversionPossible(generic, fromNumeralBase, this.toNumeralBase); + } + } + } + + return result; + } + + @Override + public void onClick(@Nonnull CalculatorDisplayViewState data, @Nonnull Context context) { + final Generic result = data.getResult(); + + if (result != null) { + Locator.getInstance().getCalculator().convert(result, this.toNumeralBase); + } + } +} diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/DigitButtonDragProcessor.java b/android-app/src/main/java/org/solovyev/android/calculator/DigitButtonDragProcessor.java similarity index 97% rename from android-app-core/src/main/java/org/solovyev/android/calculator/DigitButtonDragProcessor.java rename to android-app/src/main/java/org/solovyev/android/calculator/DigitButtonDragProcessor.java index ef99e295..43579581 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/DigitButtonDragProcessor.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/DigitButtonDragProcessor.java @@ -1,56 +1,56 @@ -/* - * 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.calculator; - -import android.view.MotionEvent; - -import javax.annotation.Nonnull; - -import org.solovyev.android.view.drag.DirectionDragButton; -import org.solovyev.android.view.drag.DragButton; -import org.solovyev.android.view.drag.DragDirection; -import org.solovyev.android.view.drag.SimpleOnDragListener; -import org.solovyev.common.math.Point2d; - -/** - * User: serso - * Date: 9/16/11 - * Time: 11:48 PM - */ -public class DigitButtonDragProcessor implements SimpleOnDragListener.DragProcessor { - - @Nonnull - private CalculatorKeyboard calculatorKeyboard; - - public DigitButtonDragProcessor(@Nonnull CalculatorKeyboard calculatorKeyboard) { - this.calculatorKeyboard = calculatorKeyboard; - } - - @Override - public boolean processDragEvent(@Nonnull DragDirection dragDirection, @Nonnull DragButton dragButton, @Nonnull Point2d startPoint2d, @Nonnull MotionEvent motionEvent) { - assert dragButton instanceof DirectionDragButton; - calculatorKeyboard.buttonPressed(((DirectionDragButton) dragButton).getText(dragDirection)); - return true; - } - -} +/* + * 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.calculator; + +import android.view.MotionEvent; + +import javax.annotation.Nonnull; + +import org.solovyev.android.view.drag.DirectionDragButton; +import org.solovyev.android.view.drag.DragButton; +import org.solovyev.android.view.drag.DragDirection; +import org.solovyev.android.view.drag.SimpleOnDragListener; +import org.solovyev.common.math.Point2d; + +/** + * User: serso + * Date: 9/16/11 + * Time: 11:48 PM + */ +public class DigitButtonDragProcessor implements SimpleOnDragListener.DragProcessor { + + @Nonnull + private CalculatorKeyboard calculatorKeyboard; + + public DigitButtonDragProcessor(@Nonnull CalculatorKeyboard calculatorKeyboard) { + this.calculatorKeyboard = calculatorKeyboard; + } + + @Override + public boolean processDragEvent(@Nonnull DragDirection dragDirection, @Nonnull DragButton dragButton, @Nonnull Point2d startPoint2d, @Nonnull MotionEvent motionEvent) { + assert dragButton instanceof DirectionDragButton; + calculatorKeyboard.buttonPressed(((DirectionDragButton) dragButton).getText(dragDirection)); + return true; + } + +} diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/FixableMessage.java b/android-app/src/main/java/org/solovyev/android/calculator/FixableMessage.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/FixableMessage.java rename to android-app/src/main/java/org/solovyev/android/calculator/FixableMessage.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/FixableMessagesDialog.java b/android-app/src/main/java/org/solovyev/android/calculator/FixableMessagesDialog.java similarity index 99% rename from android-app-core/src/main/java/org/solovyev/android/calculator/FixableMessagesDialog.java rename to android-app/src/main/java/org/solovyev/android/calculator/FixableMessagesDialog.java index e08453ed..d6c6bfaf 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/FixableMessagesDialog.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/FixableMessagesDialog.java @@ -40,7 +40,7 @@ import com.actionbarsherlock.app.SherlockActivity; import javax.annotation.Nonnull; -import org.solovyev.android.calculator.core.R; +import org.solovyev.android.calculator.R; import org.solovyev.common.msg.Message; import org.solovyev.common.text.Strings; diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/ParcelableDialogData.java b/android-app/src/main/java/org/solovyev/android/calculator/ParcelableDialogData.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/ParcelableDialogData.java rename to android-app/src/main/java/org/solovyev/android/calculator/ParcelableDialogData.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/ServiceLocator.java b/android-app/src/main/java/org/solovyev/android/calculator/ServiceLocator.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/ServiceLocator.java rename to android-app/src/main/java/org/solovyev/android/calculator/ServiceLocator.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/external/ExternalCalculatorIntentHandler.java b/android-app/src/main/java/org/solovyev/android/calculator/external/ExternalCalculatorIntentHandler.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/external/ExternalCalculatorIntentHandler.java rename to android-app/src/main/java/org/solovyev/android/calculator/external/ExternalCalculatorIntentHandler.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java b/android-app/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java similarity index 99% rename from android-app-core/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java rename to android-app/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java index d55e3b5a..97ff0751 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/model/AndroidCalculatorEngine.java @@ -37,7 +37,7 @@ import jscl.math.operator.Operator; import javax.annotation.Nonnull; import org.solovyev.android.calculator.*; -import org.solovyev.android.calculator.core.R; +import org.solovyev.android.calculator.R; import org.solovyev.android.prefs.BooleanPreference; import org.solovyev.android.prefs.Preference; import org.solovyev.android.prefs.StringPreference; diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/model/AndroidMathEntityDao.java b/android-app/src/main/java/org/solovyev/android/calculator/model/AndroidMathEntityDao.java similarity index 96% rename from android-app-core/src/main/java/org/solovyev/android/calculator/model/AndroidMathEntityDao.java rename to android-app/src/main/java/org/solovyev/android/calculator/model/AndroidMathEntityDao.java index a34a72a8..041e8f9b 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/model/AndroidMathEntityDao.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/model/AndroidMathEntityDao.java @@ -1,121 +1,121 @@ -/* - * 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.calculator.model; - -import android.app.Application; -import android.content.Context; -import android.content.SharedPreferences; -import android.content.res.Resources; -import android.preference.PreferenceManager; -import org.simpleframework.xml.Serializer; -import org.simpleframework.xml.core.Persister; -import org.solovyev.android.calculator.App; -import org.solovyev.android.calculator.MathEntityDao; -import org.solovyev.android.calculator.MathEntityPersistenceContainer; -import org.solovyev.android.calculator.MathPersistenceEntity; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.io.StringWriter; - -/** - * User: serso - * Date: 10/7/12 - * Time: 6:46 PM - */ -public class AndroidMathEntityDao implements MathEntityDao { - - @Nonnull - private static final String TAG = AndroidMathEntityDao.class.getSimpleName(); - - @Nullable - private final String preferenceString; - - @Nonnull - private final Context context; - - @Nullable - private final Class> persistenceContainerClass; - - public AndroidMathEntityDao(@Nullable String preferenceString, - @Nonnull Application application, - @Nullable Class> persistenceContainerClass) { - this.preferenceString = preferenceString; - this.context = application; - this.persistenceContainerClass = persistenceContainerClass; - } - - @Override - public void save(@Nonnull MathEntityPersistenceContainer container) { - if (preferenceString != null) { - final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); - final SharedPreferences.Editor editor = settings.edit(); - - final StringWriter sw = new StringWriter(); - final Serializer serializer = new Persister(); - try { - serializer.write(container, sw); - } catch (Exception e) { - throw new RuntimeException(e); - } - - editor.putString(preferenceString, sw.toString()); - - editor.commit(); - } - } - - @Nullable - @Override - public MathEntityPersistenceContainer load() { - if (persistenceContainerClass != null && preferenceString != null) { - final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - - if (preferences != null) { - final String value = preferences.getString(preferenceString, null); - if (value != null) { - final Serializer serializer = new Persister(); - try { - return serializer.read(persistenceContainerClass, value); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - } - } - - return null; - } - - @Nullable - public String getDescription(@Nonnull String descriptionId) { - final Resources resources = context.getResources(); - - final int stringId = resources.getIdentifier(descriptionId, "string", App.getApplication().getClass().getPackage().getName()); - try { - return resources.getString(stringId); - } catch (Resources.NotFoundException e) { - return null; - } - } -} +/* + * 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.calculator.model; + +import android.app.Application; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.preference.PreferenceManager; +import org.simpleframework.xml.Serializer; +import org.simpleframework.xml.core.Persister; +import org.solovyev.android.calculator.App; +import org.solovyev.android.calculator.MathEntityDao; +import org.solovyev.android.calculator.MathEntityPersistenceContainer; +import org.solovyev.android.calculator.MathPersistenceEntity; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.io.StringWriter; + +/** + * User: serso + * Date: 10/7/12 + * Time: 6:46 PM + */ +public class AndroidMathEntityDao implements MathEntityDao { + + @Nonnull + private static final String TAG = AndroidMathEntityDao.class.getSimpleName(); + + @Nullable + private final String preferenceString; + + @Nonnull + private final Context context; + + @Nullable + private final Class> persistenceContainerClass; + + public AndroidMathEntityDao(@Nullable String preferenceString, + @Nonnull Application application, + @Nullable Class> persistenceContainerClass) { + this.preferenceString = preferenceString; + this.context = application; + this.persistenceContainerClass = persistenceContainerClass; + } + + @Override + public void save(@Nonnull MathEntityPersistenceContainer container) { + if (preferenceString != null) { + final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); + final SharedPreferences.Editor editor = settings.edit(); + + final StringWriter sw = new StringWriter(); + final Serializer serializer = new Persister(); + try { + serializer.write(container, sw); + } catch (Exception e) { + throw new RuntimeException(e); + } + + editor.putString(preferenceString, sw.toString()); + + editor.commit(); + } + } + + @Nullable + @Override + public MathEntityPersistenceContainer load() { + if (persistenceContainerClass != null && preferenceString != null) { + final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + + if (preferences != null) { + final String value = preferences.getString(preferenceString, null); + if (value != null) { + final Serializer serializer = new Persister(); + try { + return serializer.read(persistenceContainerClass, value); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + } + + return null; + } + + @Nullable + public String getDescription(@Nonnull String descriptionId) { + final Resources resources = context.getResources(); + + final int stringId = resources.getIdentifier(descriptionId, "string", App.getApplication().getClass().getPackage().getName()); + try { + return resources.getString(stringId); + } catch (Resources.NotFoundException e) { + return null; + } + } +} diff --git a/android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenBroadcastReceiver.java b/android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenBroadcastReceiver.java similarity index 100% rename from android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenBroadcastReceiver.java rename to android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenBroadcastReceiver.java diff --git a/android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenService.java b/android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenService.java similarity index 100% rename from android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenService.java rename to android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenService.java diff --git a/android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenStartActivity.java b/android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenStartActivity.java similarity index 96% rename from android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenStartActivity.java rename to android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenStartActivity.java index 3b032723..a4c74347 100644 --- a/android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenStartActivity.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenStartActivity.java @@ -1,38 +1,38 @@ -/* - * 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.calculator.onscreen; - -import android.app.Activity; -import android.os.Bundle; - -public class CalculatorOnscreenStartActivity extends Activity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - CalculatorOnscreenService.showOnscreenView(this); - - this.finish(); - } -} +/* + * 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.calculator.onscreen; + +import android.app.Activity; +import android.os.Bundle; + +public class CalculatorOnscreenStartActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + CalculatorOnscreenService.showOnscreenView(this); + + this.finish(); + } +} diff --git a/android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenView.java b/android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenView.java similarity index 100% rename from android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenView.java rename to android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenView.java diff --git a/android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenViewState.java b/android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenViewState.java similarity index 100% rename from android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenViewState.java rename to android-app/src/main/java/org/solovyev/android/calculator/onscreen/CalculatorOnscreenViewState.java diff --git a/android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/OnscreenViewListener.java b/android-app/src/main/java/org/solovyev/android/calculator/onscreen/OnscreenViewListener.java similarity index 100% rename from android-app-onscreen/src/main/java/org/solovyev/android/calculator/onscreen/OnscreenViewListener.java rename to android-app/src/main/java/org/solovyev/android/calculator/onscreen/OnscreenViewListener.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/plot/AndroidCalculatorPlotter.java b/android-app/src/main/java/org/solovyev/android/calculator/plot/AndroidCalculatorPlotter.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/plot/AndroidCalculatorPlotter.java rename to android-app/src/main/java/org/solovyev/android/calculator/plot/AndroidCalculatorPlotter.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/plot/AndroidPlotLineStyle.java b/android-app/src/main/java/org/solovyev/android/calculator/plot/AndroidPlotLineStyle.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/plot/AndroidPlotLineStyle.java rename to android-app/src/main/java/org/solovyev/android/calculator/plot/AndroidPlotLineStyle.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/view/AngleUnitsButton.java b/android-app/src/main/java/org/solovyev/android/calculator/view/AngleUnitsButton.java similarity index 98% rename from android-app-core/src/main/java/org/solovyev/android/calculator/view/AngleUnitsButton.java rename to android-app/src/main/java/org/solovyev/android/calculator/view/AngleUnitsButton.java index bd7de550..80244601 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/view/AngleUnitsButton.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/view/AngleUnitsButton.java @@ -29,7 +29,7 @@ import android.text.TextPaint; import android.util.AttributeSet; import jscl.AngleUnit; import org.solovyev.android.calculator.Locator; -import org.solovyev.android.calculator.core.R; +import org.solovyev.android.calculator.R; import org.solovyev.android.view.drag.DirectionDragButton; import javax.annotation.Nonnull; diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/view/EditorTextProcessor.java b/android-app/src/main/java/org/solovyev/android/calculator/view/EditorTextProcessor.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/view/EditorTextProcessor.java rename to android-app/src/main/java/org/solovyev/android/calculator/view/EditorTextProcessor.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/view/NumeralBaseConverterDialog.java b/android-app/src/main/java/org/solovyev/android/calculator/view/NumeralBaseConverterDialog.java similarity index 96% rename from android-app-core/src/main/java/org/solovyev/android/calculator/view/NumeralBaseConverterDialog.java rename to android-app/src/main/java/org/solovyev/android/calculator/view/NumeralBaseConverterDialog.java index 81c88097..e696ab9f 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/view/NumeralBaseConverterDialog.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/view/NumeralBaseConverterDialog.java @@ -1,122 +1,120 @@ -/* - * 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.calculator.view; - -import android.app.AlertDialog; -import android.content.Context; -import android.view.View; -import android.view.WindowManager; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import org.solovyev.android.calculator.CalculatorParseException; -import org.solovyev.android.calculator.Locator; -import org.solovyev.android.calculator.ToJsclTextProcessor; -import org.solovyev.android.calculator.core.R; -import org.solovyev.android.calculator.units.CalculatorNumeralBase; -import org.solovyev.common.MutableObject; -import org.solovyev.common.text.Strings; -import org.solovyev.common.units.Unit; -import org.solovyev.common.units.UnitImpl; - -import java.util.Arrays; - -/** - * User: serso - * Date: 4/22/12 - * Time: 12:20 AM - */ -public class NumeralBaseConverterDialog { - - @Nullable - private String initialFromValue; - - public NumeralBaseConverterDialog(@Nullable String initialFromValue) { - this.initialFromValue = initialFromValue; - } - - public void show(@Nonnull Context context) { - final UnitConverterViewBuilder b = new UnitConverterViewBuilder(); - b.setFromUnitTypes(Arrays.asList(CalculatorNumeralBase.values())); - b.setToUnitTypes(Arrays.asList(CalculatorNumeralBase.values())); - - if (!Strings.isEmpty(initialFromValue)) { - String value = initialFromValue; - try { - value = ToJsclTextProcessor.getInstance().process(value).getExpression(); - b.setFromValue(UnitImpl.newInstance(value, CalculatorNumeralBase.valueOf(Locator.getInstance().getEngine().getNumeralBase()))); - } catch (CalculatorParseException e) { - b.setFromValue(UnitImpl.newInstance(value, CalculatorNumeralBase.valueOf(Locator.getInstance().getEngine().getNumeralBase()))); - } - } else { - b.setFromValue(UnitImpl.newInstance("", CalculatorNumeralBase.valueOf(Locator.getInstance().getEngine().getNumeralBase()))); - } - - b.setConverter(CalculatorNumeralBase.getConverter()); - - final MutableObject alertDialogHolder = new MutableObject(); - b.setOkButtonOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - final AlertDialog alertDialog = alertDialogHolder.getObject(); - if (alertDialog != null) { - alertDialog.dismiss(); - } - } - }); - - b.setCustomButtonData(new UnitConverterViewBuilder.CustomButtonData(context.getString(R.string.c_use_short), new UnitConverterViewBuilder.CustomButtonOnClickListener() { - @Override - public void onClick(@Nonnull Unit fromUnits, @Nonnull Unit toUnits) { - String toUnitsValue = toUnits.getValue(); - - if (!toUnits.getUnitType().equals(CalculatorNumeralBase.valueOf(Locator.getInstance().getEngine().getNumeralBase()))) { - toUnitsValue = ((CalculatorNumeralBase) toUnits.getUnitType()).getNumeralBase().getJsclPrefix() + toUnitsValue; - } - - Locator.getInstance().getKeyboard().buttonPressed(toUnitsValue); - final AlertDialog alertDialog = alertDialogHolder.getObject(); - if (alertDialog != null) { - alertDialog.dismiss(); - } - } - })); - - final AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); - alertBuilder.setView(b.build(context)); - alertBuilder.setTitle(R.string.c_conversion_tool); - - final AlertDialog alertDialog = alertBuilder.create(); - - final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); - lp.copyFrom(alertDialog.getWindow().getAttributes()); - - lp.width = WindowManager.LayoutParams.FILL_PARENT; - lp.height = WindowManager.LayoutParams.WRAP_CONTENT; - - alertDialogHolder.setObject(alertDialog); - alertDialog.show(); - alertDialog.getWindow().setAttributes(lp); - } -} +/* + * 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.calculator.view; + +import android.app.AlertDialog; +import android.content.Context; +import android.view.View; +import android.view.WindowManager; +import org.solovyev.android.calculator.CalculatorParseException; +import org.solovyev.android.calculator.Locator; +import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.ToJsclTextProcessor; +import org.solovyev.android.calculator.units.CalculatorNumeralBase; +import org.solovyev.common.MutableObject; +import org.solovyev.common.text.Strings; +import org.solovyev.common.units.Unit; +import org.solovyev.common.units.UnitImpl; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Arrays; + +/** + * User: serso + * Date: 4/22/12 + * Time: 12:20 AM + */ +public class NumeralBaseConverterDialog { + + @Nullable + private String initialFromValue; + + public NumeralBaseConverterDialog(@Nullable String initialFromValue) { + this.initialFromValue = initialFromValue; + } + + public void show(@Nonnull Context context) { + final UnitConverterViewBuilder b = new UnitConverterViewBuilder(); + b.setFromUnitTypes(Arrays.asList(CalculatorNumeralBase.values())); + b.setToUnitTypes(Arrays.asList(CalculatorNumeralBase.values())); + + if (!Strings.isEmpty(initialFromValue)) { + String value = initialFromValue; + try { + value = ToJsclTextProcessor.getInstance().process(value).getExpression(); + b.setFromValue(UnitImpl.newInstance(value, CalculatorNumeralBase.valueOf(Locator.getInstance().getEngine().getNumeralBase()))); + } catch (CalculatorParseException e) { + b.setFromValue(UnitImpl.newInstance(value, CalculatorNumeralBase.valueOf(Locator.getInstance().getEngine().getNumeralBase()))); + } + } else { + b.setFromValue(UnitImpl.newInstance("", CalculatorNumeralBase.valueOf(Locator.getInstance().getEngine().getNumeralBase()))); + } + + b.setConverter(CalculatorNumeralBase.getConverter()); + + final MutableObject alertDialogHolder = new MutableObject(); + b.setOkButtonOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + final AlertDialog alertDialog = alertDialogHolder.getObject(); + if (alertDialog != null) { + alertDialog.dismiss(); + } + } + }); + + b.setCustomButtonData(new UnitConverterViewBuilder.CustomButtonData(context.getString(R.string.c_use_short), new UnitConverterViewBuilder.CustomButtonOnClickListener() { + @Override + public void onClick(@Nonnull Unit fromUnits, @Nonnull Unit toUnits) { + String toUnitsValue = toUnits.getValue(); + + if (!toUnits.getUnitType().equals(CalculatorNumeralBase.valueOf(Locator.getInstance().getEngine().getNumeralBase()))) { + toUnitsValue = ((CalculatorNumeralBase) toUnits.getUnitType()).getNumeralBase().getJsclPrefix() + toUnitsValue; + } + + Locator.getInstance().getKeyboard().buttonPressed(toUnitsValue); + final AlertDialog alertDialog = alertDialogHolder.getObject(); + if (alertDialog != null) { + alertDialog.dismiss(); + } + } + })); + + final AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); + alertBuilder.setView(b.build(context)); + alertBuilder.setTitle(R.string.c_conversion_tool); + + final AlertDialog alertDialog = alertBuilder.create(); + + final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); + lp.copyFrom(alertDialog.getWindow().getAttributes()); + + lp.width = WindowManager.LayoutParams.FILL_PARENT; + lp.height = WindowManager.LayoutParams.WRAP_CONTENT; + + alertDialogHolder.setObject(alertDialog); + alertDialog.show(); + alertDialog.getWindow().setAttributes(lp); + } +} diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/view/NumeralBasesButton.java b/android-app/src/main/java/org/solovyev/android/calculator/view/NumeralBasesButton.java similarity index 98% rename from android-app-core/src/main/java/org/solovyev/android/calculator/view/NumeralBasesButton.java rename to android-app/src/main/java/org/solovyev/android/calculator/view/NumeralBasesButton.java index 11be30c8..0ae944b2 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/view/NumeralBasesButton.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/view/NumeralBasesButton.java @@ -28,7 +28,7 @@ import android.text.TextPaint; import android.util.AttributeSet; import jscl.NumeralBase; import org.solovyev.android.calculator.Locator; -import org.solovyev.android.calculator.core.R; +import org.solovyev.android.calculator.R; import org.solovyev.android.view.drag.DirectionDragButton; import javax.annotation.Nonnull; diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/view/TextHighlighter.java b/android-app/src/main/java/org/solovyev/android/calculator/view/TextHighlighter.java similarity index 100% rename from android-app-core/src/main/java/org/solovyev/android/calculator/view/TextHighlighter.java rename to android-app/src/main/java/org/solovyev/android/calculator/view/TextHighlighter.java diff --git a/android-app-core/src/main/java/org/solovyev/android/calculator/view/UnitConverterViewBuilder.java b/android-app/src/main/java/org/solovyev/android/calculator/view/UnitConverterViewBuilder.java similarity index 96% rename from android-app-core/src/main/java/org/solovyev/android/calculator/view/UnitConverterViewBuilder.java rename to android-app/src/main/java/org/solovyev/android/calculator/view/UnitConverterViewBuilder.java index b33b8aa0..afbd4509 100644 --- a/android-app-core/src/main/java/org/solovyev/android/calculator/view/UnitConverterViewBuilder.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/view/UnitConverterViewBuilder.java @@ -1,243 +1,243 @@ -/* - * 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.calculator.view; - -import android.app.Activity; -import android.content.Context; -import android.text.ClipboardManager; -import android.text.Editable; -import android.text.TextWatcher; -import android.view.View; -import android.view.ViewGroup; -import android.widget.*; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import org.solovyev.android.calculator.core.R; -import org.solovyev.android.view.ViewBuilder; -import org.solovyev.android.view.ViewFromLayoutBuilder; -import org.solovyev.common.units.*; - -import java.util.Collections; -import java.util.List; - -/** - * User: serso - * Date: 4/20/12 - * Time: 4:50 PM - */ -public class UnitConverterViewBuilder implements ViewBuilder { - - @Nonnull - private List> fromUnitTypes = Collections.emptyList(); - - @Nonnull - private List> toUnitTypes = Collections.emptyList(); - - @Nullable - private Unit fromValue; - - @Nonnull - private UnitConverter converter = UnitConverter.Dummy.getInstance(); - - @Nullable - private View.OnClickListener okButtonOnClickListener; - - @Nullable - private CustomButtonData customButtonData; - - public void setFromUnitTypes(@Nonnull List> fromUnitTypes) { - this.fromUnitTypes = fromUnitTypes; - } - - public void setToUnitTypes(@Nonnull List> toUnitTypes) { - this.toUnitTypes = toUnitTypes; - } - - public void setFromValue(@Nullable Unit fromValue) { - this.fromValue = fromValue; - } - - public void setConverter(@Nonnull UnitConverter converter) { - this.converter = converter; - } - - public void setOkButtonOnClickListener(@Nullable View.OnClickListener okButtonOnClickListener) { - this.okButtonOnClickListener = okButtonOnClickListener; - } - - public void setCustomButtonData(@Nullable CustomButtonData customButtonData) { - this.customButtonData = customButtonData; - } - - @Nonnull - @Override - public View build(@Nonnull final Context context) { - final View main = ViewFromLayoutBuilder.newInstance(R.layout.cpp_unit_converter).build(context); - - final Spinner fromSpinner = (Spinner) main.findViewById(R.id.unit_types_from); - final EditText fromEditText = (EditText) main.findViewById(R.id.units_from); - fromEditText.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - } - - @Override - public void afterTextChanged(Editable s) { - doConversion(main, context, UnitConverterViewBuilder.this.converter); - } - }); - - fillSpinner(main, context, R.id.unit_types_from, fromUnitTypes); - fillSpinner(main, context, R.id.unit_types_to, toUnitTypes); - - if (fromValue != null) { - fromEditText.setText(fromValue.getValue()); - - int i = fromUnitTypes.indexOf(fromValue.getUnitType()); - if (i >= 0) { - fromSpinner.setSelection(i); - } - } - - final Button copyButton = (Button) main.findViewById(R.id.unit_converter_copy_button); - copyButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - final EditText toEditText = (EditText) main.findViewById(R.id.units_to); - - final ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Activity.CLIPBOARD_SERVICE); - clipboard.setText(toEditText.getText().toString()); - Toast.makeText(context, context.getText(R.string.c_result_copied), Toast.LENGTH_SHORT).show(); - } - }); - - final Button okButton = (Button) main.findViewById(R.id.unit_converter_ok_button); - if (okButtonOnClickListener == null) { - ((ViewGroup) okButton.getParent()).removeView(okButton); - } else { - okButton.setOnClickListener(this.okButtonOnClickListener); - } - - final Button customButton = (Button) main.findViewById(R.id.unit_converter_custom_button); - if (customButtonData == null) { - ((ViewGroup) customButton.getParent()).removeView(customButton); - } else { - customButton.setText(customButtonData.text); - customButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - customButtonData.clickListener.onClick(getFromUnit(main), getToUnit(main)); - } - }); - } - - - return main; - } - - private void fillSpinner(@Nonnull final View main, - @Nonnull final Context context, - final int spinnerId, - @Nonnull List> unitTypes) { - final Spinner spinner = (Spinner) main.findViewById(spinnerId); - - final ArrayAdapter> adapter = new ArrayAdapter>(context, android.R.layout.simple_spinner_item); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - for (UnitType fromUnitType : unitTypes) { - adapter.add(fromUnitType); - } - spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - doConversion(main, context, UnitConverterViewBuilder.this.converter); - } - - @Override - public void onNothingSelected(AdapterView parent) { - } - }); - spinner.setAdapter(adapter); - } - - private static void doConversion(@Nonnull View main, @Nonnull Context context, @Nonnull UnitConverter converter) { - final EditText fromEditText = (EditText) main.findViewById(R.id.units_from); - - final EditText toEditText = (EditText) main.findViewById(R.id.units_to); - - final String from = fromEditText.getText().toString(); - try { - toEditText.setText(Conversions.doConversion(converter, from, getFromUnitType(main), getToUnitType(main))); - } catch (ConversionException e) { - toEditText.setText(context.getString(R.string.c_error)); - } - } - - @Nonnull - private static Unit getToUnit(@Nonnull View main) { - final EditText toUnits = (EditText) main.findViewById(R.id.units_to); - return UnitImpl.newInstance(toUnits.getText().toString(), getToUnitType(main)); - } - - @Nonnull - private static UnitType getToUnitType(@Nonnull View main) { - final Spinner toSpinner = (Spinner) main.findViewById(R.id.unit_types_to); - return (UnitType) toSpinner.getSelectedItem(); - } - - @Nonnull - private static Unit getFromUnit(@Nonnull View main) { - final EditText fromUnits = (EditText) main.findViewById(R.id.units_from); - return UnitImpl.newInstance(fromUnits.getText().toString(), getFromUnitType(main)); - } - - @Nonnull - private static UnitType getFromUnitType(@Nonnull View main) { - final Spinner fromSpinner = (Spinner) main.findViewById(R.id.unit_types_from); - return (UnitType) fromSpinner.getSelectedItem(); - } - - public static class CustomButtonData { - - @Nonnull - private String text; - - @Nonnull - private CustomButtonOnClickListener clickListener; - - - public CustomButtonData(@Nonnull String text, @Nonnull CustomButtonOnClickListener clickListener) { - this.text = text; - this.clickListener = clickListener; - } - } - - public static interface CustomButtonOnClickListener { - void onClick(@Nonnull Unit fromUnits, @Nonnull Unit toUnits); - } -} +/* + * 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.calculator.view; + +import android.app.Activity; +import android.content.Context; +import android.text.ClipboardManager; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.View; +import android.view.ViewGroup; +import android.widget.*; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.solovyev.android.calculator.R; +import org.solovyev.android.view.ViewBuilder; +import org.solovyev.android.view.ViewFromLayoutBuilder; +import org.solovyev.common.units.*; + +import java.util.Collections; +import java.util.List; + +/** + * User: serso + * Date: 4/20/12 + * Time: 4:50 PM + */ +public class UnitConverterViewBuilder implements ViewBuilder { + + @Nonnull + private List> fromUnitTypes = Collections.emptyList(); + + @Nonnull + private List> toUnitTypes = Collections.emptyList(); + + @Nullable + private Unit fromValue; + + @Nonnull + private UnitConverter converter = UnitConverter.Dummy.getInstance(); + + @Nullable + private View.OnClickListener okButtonOnClickListener; + + @Nullable + private CustomButtonData customButtonData; + + public void setFromUnitTypes(@Nonnull List> fromUnitTypes) { + this.fromUnitTypes = fromUnitTypes; + } + + public void setToUnitTypes(@Nonnull List> toUnitTypes) { + this.toUnitTypes = toUnitTypes; + } + + public void setFromValue(@Nullable Unit fromValue) { + this.fromValue = fromValue; + } + + public void setConverter(@Nonnull UnitConverter converter) { + this.converter = converter; + } + + public void setOkButtonOnClickListener(@Nullable View.OnClickListener okButtonOnClickListener) { + this.okButtonOnClickListener = okButtonOnClickListener; + } + + public void setCustomButtonData(@Nullable CustomButtonData customButtonData) { + this.customButtonData = customButtonData; + } + + @Nonnull + @Override + public View build(@Nonnull final Context context) { + final View main = ViewFromLayoutBuilder.newInstance(R.layout.cpp_unit_converter).build(context); + + final Spinner fromSpinner = (Spinner) main.findViewById(R.id.unit_types_from); + final EditText fromEditText = (EditText) main.findViewById(R.id.units_from); + fromEditText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + doConversion(main, context, UnitConverterViewBuilder.this.converter); + } + }); + + fillSpinner(main, context, R.id.unit_types_from, fromUnitTypes); + fillSpinner(main, context, R.id.unit_types_to, toUnitTypes); + + if (fromValue != null) { + fromEditText.setText(fromValue.getValue()); + + int i = fromUnitTypes.indexOf(fromValue.getUnitType()); + if (i >= 0) { + fromSpinner.setSelection(i); + } + } + + final Button copyButton = (Button) main.findViewById(R.id.unit_converter_copy_button); + copyButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + final EditText toEditText = (EditText) main.findViewById(R.id.units_to); + + final ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Activity.CLIPBOARD_SERVICE); + clipboard.setText(toEditText.getText().toString()); + Toast.makeText(context, context.getText(R.string.c_result_copied), Toast.LENGTH_SHORT).show(); + } + }); + + final Button okButton = (Button) main.findViewById(R.id.unit_converter_ok_button); + if (okButtonOnClickListener == null) { + ((ViewGroup) okButton.getParent()).removeView(okButton); + } else { + okButton.setOnClickListener(this.okButtonOnClickListener); + } + + final Button customButton = (Button) main.findViewById(R.id.unit_converter_custom_button); + if (customButtonData == null) { + ((ViewGroup) customButton.getParent()).removeView(customButton); + } else { + customButton.setText(customButtonData.text); + customButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + customButtonData.clickListener.onClick(getFromUnit(main), getToUnit(main)); + } + }); + } + + + return main; + } + + private void fillSpinner(@Nonnull final View main, + @Nonnull final Context context, + final int spinnerId, + @Nonnull List> unitTypes) { + final Spinner spinner = (Spinner) main.findViewById(spinnerId); + + final ArrayAdapter> adapter = new ArrayAdapter>(context, android.R.layout.simple_spinner_item); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + for (UnitType fromUnitType : unitTypes) { + adapter.add(fromUnitType); + } + spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + doConversion(main, context, UnitConverterViewBuilder.this.converter); + } + + @Override + public void onNothingSelected(AdapterView parent) { + } + }); + spinner.setAdapter(adapter); + } + + private static void doConversion(@Nonnull View main, @Nonnull Context context, @Nonnull UnitConverter converter) { + final EditText fromEditText = (EditText) main.findViewById(R.id.units_from); + + final EditText toEditText = (EditText) main.findViewById(R.id.units_to); + + final String from = fromEditText.getText().toString(); + try { + toEditText.setText(Conversions.doConversion(converter, from, getFromUnitType(main), getToUnitType(main))); + } catch (ConversionException e) { + toEditText.setText(context.getString(R.string.c_error)); + } + } + + @Nonnull + private static Unit getToUnit(@Nonnull View main) { + final EditText toUnits = (EditText) main.findViewById(R.id.units_to); + return UnitImpl.newInstance(toUnits.getText().toString(), getToUnitType(main)); + } + + @Nonnull + private static UnitType getToUnitType(@Nonnull View main) { + final Spinner toSpinner = (Spinner) main.findViewById(R.id.unit_types_to); + return (UnitType) toSpinner.getSelectedItem(); + } + + @Nonnull + private static Unit getFromUnit(@Nonnull View main) { + final EditText fromUnits = (EditText) main.findViewById(R.id.units_from); + return UnitImpl.newInstance(fromUnits.getText().toString(), getFromUnitType(main)); + } + + @Nonnull + private static UnitType getFromUnitType(@Nonnull View main) { + final Spinner fromSpinner = (Spinner) main.findViewById(R.id.unit_types_from); + return (UnitType) fromSpinner.getSelectedItem(); + } + + public static class CustomButtonData { + + @Nonnull + private String text; + + @Nonnull + private CustomButtonOnClickListener clickListener; + + + public CustomButtonData(@Nonnull String text, @Nonnull CustomButtonOnClickListener clickListener) { + this.text = text; + this.clickListener = clickListener; + } + } + + public static interface CustomButtonOnClickListener { + void onClick(@Nonnull Unit fromUnits, @Nonnull Unit toUnits); + } +} diff --git a/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java similarity index 100% rename from android-app-widget/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java rename to android-app/src/main/java/org/solovyev/android/calculator/widget/AbstractCalculatorWidgetProvider.java diff --git a/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetConfigurationActivity.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetConfigurationActivity.java similarity index 96% rename from android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetConfigurationActivity.java rename to android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetConfigurationActivity.java index a0564b39..2fff1205 100644 --- a/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetConfigurationActivity.java +++ b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetConfigurationActivity.java @@ -1,33 +1,33 @@ -/* - * 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.calculator.widget; - -import android.app.Activity; - -/** - * User: Solovyev_S - * Date: 19.10.12 - * Time: 16:20 - */ -public class CalculatorWidgetConfigurationActivity extends Activity { -} +/* + * 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.calculator.widget; + +import android.app.Activity; + +/** + * User: Solovyev_S + * Date: 19.10.12 + * Time: 16:20 + */ +public class CalculatorWidgetConfigurationActivity extends Activity { +} diff --git a/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider.java similarity index 100% rename from android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider.java rename to android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider.java diff --git a/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider3x4.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider3x4.java similarity index 100% rename from android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider3x4.java rename to android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider3x4.java diff --git a/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x4.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x4.java similarity index 100% rename from android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x4.java rename to android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x4.java diff --git a/android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x5.java b/android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x5.java similarity index 100% rename from android-app-widget/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x5.java rename to android-app/src/main/java/org/solovyev/android/calculator/widget/CalculatorWidgetProvider4x5.java diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_clock.png b/android-app/src/main/res/drawable-hdpi/ab_clock.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_clock.png rename to android-app/src/main/res/drawable-hdpi/ab_clock.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_disk.png b/android-app/src/main/res/drawable-hdpi/ab_disk.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_disk.png rename to android-app/src/main/res/drawable-hdpi/ab_disk.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_expand.png b/android-app/src/main/res/drawable-hdpi/ab_expand.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_expand.png rename to android-app/src/main/res/drawable-hdpi/ab_expand.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_icon.png b/android-app/src/main/res/drawable-hdpi/ab_icon.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_icon.png rename to android-app/src/main/res/drawable-hdpi/ab_icon.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_menu.png b/android-app/src/main/res/drawable-hdpi/ab_menu.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_menu.png rename to android-app/src/main/res/drawable-hdpi/ab_menu.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_plus.png b/android-app/src/main/res/drawable-hdpi/ab_plus.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_plus.png rename to android-app/src/main/res/drawable-hdpi/ab_plus.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_range.png b/android-app/src/main/res/drawable-hdpi/ab_range.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_range.png rename to android-app/src/main/res/drawable-hdpi/ab_range.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_remove.png b/android-app/src/main/res/drawable-hdpi/ab_remove.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_remove.png rename to android-app/src/main/res/drawable-hdpi/ab_remove.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_settings.png b/android-app/src/main/res/drawable-hdpi/ab_settings.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_settings.png rename to android-app/src/main/res/drawable-hdpi/ab_settings.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_stats.png b/android-app/src/main/res/drawable-hdpi/ab_stats.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_stats.png rename to android-app/src/main/res/drawable-hdpi/ab_stats.png diff --git a/android-app-core/src/main/res/drawable-hdpi/ab_stats_3d.png b/android-app/src/main/res/drawable-hdpi/ab_stats_3d.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/ab_stats_3d.png rename to android-app/src/main/res/drawable-hdpi/ab_stats_3d.png diff --git a/android-app-core/src/main/res/drawable-hdpi/icon.png b/android-app/src/main/res/drawable-hdpi/icon.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/icon.png rename to android-app/src/main/res/drawable-hdpi/icon.png diff --git a/android-app-core/src/main/res/drawable-hdpi/icon_onscreen.png b/android-app/src/main/res/drawable-hdpi/icon_onscreen.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/icon_onscreen.png rename to android-app/src/main/res/drawable-hdpi/icon_onscreen.png diff --git a/android-app-core/src/main/res/drawable-hdpi/kb_copy.png b/android-app/src/main/res/drawable-hdpi/kb_copy.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/kb_copy.png rename to android-app/src/main/res/drawable-hdpi/kb_copy.png diff --git a/android-app-core/src/main/res/drawable-hdpi/kb_erase.png b/android-app/src/main/res/drawable-hdpi/kb_erase.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/kb_erase.png rename to android-app/src/main/res/drawable-hdpi/kb_erase.png diff --git a/android-app-core/src/main/res/drawable-hdpi/kb_logo.png b/android-app/src/main/res/drawable-hdpi/kb_logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/kb_logo.png rename to android-app/src/main/res/drawable-hdpi/kb_logo.png diff --git a/android-app-core/src/main/res/drawable-hdpi/kb_paste.png b/android-app/src/main/res/drawable-hdpi/kb_paste.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/kb_paste.png rename to android-app/src/main/res/drawable-hdpi/kb_paste.png diff --git a/android-app-core/src/main/res/drawable-hdpi/kb_settings.png b/android-app/src/main/res/drawable-hdpi/kb_settings.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/kb_settings.png rename to android-app/src/main/res/drawable-hdpi/kb_settings.png diff --git a/android-app-core/src/main/res/drawable-hdpi/kb_share.png b/android-app/src/main/res/drawable-hdpi/kb_share.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/kb_share.png rename to android-app/src/main/res/drawable-hdpi/kb_share.png diff --git a/android-app-core/src/main/res/drawable-hdpi/logo.png b/android-app/src/main/res/drawable-hdpi/logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-hdpi/logo.png rename to android-app/src/main/res/drawable-hdpi/logo.png diff --git a/android-app-core/src/main/res/drawable-ldpi/ab_icon.png b/android-app/src/main/res/drawable-ldpi/ab_icon.png similarity index 100% rename from android-app-core/src/main/res/drawable-ldpi/ab_icon.png rename to android-app/src/main/res/drawable-ldpi/ab_icon.png diff --git a/android-app-core/src/main/res/drawable-ldpi/kb_logo.png b/android-app/src/main/res/drawable-ldpi/kb_logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-ldpi/kb_logo.png rename to android-app/src/main/res/drawable-ldpi/kb_logo.png diff --git a/android-app-core/src/main/res/drawable-ldpi/logo.png b/android-app/src/main/res/drawable-ldpi/logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-ldpi/logo.png rename to android-app/src/main/res/drawable-ldpi/logo.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_clock.png b/android-app/src/main/res/drawable-mdpi/ab_clock.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_clock.png rename to android-app/src/main/res/drawable-mdpi/ab_clock.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_disk.png b/android-app/src/main/res/drawable-mdpi/ab_disk.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_disk.png rename to android-app/src/main/res/drawable-mdpi/ab_disk.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_expand.png b/android-app/src/main/res/drawable-mdpi/ab_expand.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_expand.png rename to android-app/src/main/res/drawable-mdpi/ab_expand.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_icon.png b/android-app/src/main/res/drawable-mdpi/ab_icon.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_icon.png rename to android-app/src/main/res/drawable-mdpi/ab_icon.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_menu.png b/android-app/src/main/res/drawable-mdpi/ab_menu.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_menu.png rename to android-app/src/main/res/drawable-mdpi/ab_menu.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_plus.png b/android-app/src/main/res/drawable-mdpi/ab_plus.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_plus.png rename to android-app/src/main/res/drawable-mdpi/ab_plus.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_range.png b/android-app/src/main/res/drawable-mdpi/ab_range.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_range.png rename to android-app/src/main/res/drawable-mdpi/ab_range.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_remove.png b/android-app/src/main/res/drawable-mdpi/ab_remove.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_remove.png rename to android-app/src/main/res/drawable-mdpi/ab_remove.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_settings.png b/android-app/src/main/res/drawable-mdpi/ab_settings.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_settings.png rename to android-app/src/main/res/drawable-mdpi/ab_settings.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_stats.png b/android-app/src/main/res/drawable-mdpi/ab_stats.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_stats.png rename to android-app/src/main/res/drawable-mdpi/ab_stats.png diff --git a/android-app-core/src/main/res/drawable-mdpi/ab_stats_3d.png b/android-app/src/main/res/drawable-mdpi/ab_stats_3d.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/ab_stats_3d.png rename to android-app/src/main/res/drawable-mdpi/ab_stats_3d.png diff --git a/android-app-core/src/main/res/drawable-mdpi/icon.png b/android-app/src/main/res/drawable-mdpi/icon.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/icon.png rename to android-app/src/main/res/drawable-mdpi/icon.png diff --git a/android-app-core/src/main/res/drawable-mdpi/icon_onscreen.png b/android-app/src/main/res/drawable-mdpi/icon_onscreen.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/icon_onscreen.png rename to android-app/src/main/res/drawable-mdpi/icon_onscreen.png diff --git a/android-app-core/src/main/res/drawable-mdpi/kb_copy.png b/android-app/src/main/res/drawable-mdpi/kb_copy.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/kb_copy.png rename to android-app/src/main/res/drawable-mdpi/kb_copy.png diff --git a/android-app-core/src/main/res/drawable-mdpi/kb_erase.png b/android-app/src/main/res/drawable-mdpi/kb_erase.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/kb_erase.png rename to android-app/src/main/res/drawable-mdpi/kb_erase.png diff --git a/android-app-core/src/main/res/drawable-mdpi/kb_logo.png b/android-app/src/main/res/drawable-mdpi/kb_logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/kb_logo.png rename to android-app/src/main/res/drawable-mdpi/kb_logo.png diff --git a/android-app-core/src/main/res/drawable-mdpi/kb_paste.png b/android-app/src/main/res/drawable-mdpi/kb_paste.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/kb_paste.png rename to android-app/src/main/res/drawable-mdpi/kb_paste.png diff --git a/android-app-core/src/main/res/drawable-mdpi/kb_settings.png b/android-app/src/main/res/drawable-mdpi/kb_settings.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/kb_settings.png rename to android-app/src/main/res/drawable-mdpi/kb_settings.png diff --git a/android-app-core/src/main/res/drawable-mdpi/kb_share.png b/android-app/src/main/res/drawable-mdpi/kb_share.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/kb_share.png rename to android-app/src/main/res/drawable-mdpi/kb_share.png diff --git a/android-app-core/src/main/res/drawable-mdpi/logo.png b/android-app/src/main/res/drawable-mdpi/logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-mdpi/logo.png rename to android-app/src/main/res/drawable-mdpi/logo.png diff --git a/android-app-core/src/main/res/drawable-nodpi/cpp_onscreen_button_close.png b/android-app/src/main/res/drawable-nodpi/cpp_onscreen_button_close.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/cpp_onscreen_button_close.png rename to android-app/src/main/res/drawable-nodpi/cpp_onscreen_button_close.png diff --git a/android-app-core/src/main/res/drawable-nodpi/cpp_onscreen_button_fold.png b/android-app/src/main/res/drawable-nodpi/cpp_onscreen_button_fold.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/cpp_onscreen_button_fold.png rename to android-app/src/main/res/drawable-nodpi/cpp_onscreen_button_fold.png diff --git a/android-app-core/src/main/res/drawable-nodpi/cpp_onscreen_button_minimize.png b/android-app/src/main/res/drawable-nodpi/cpp_onscreen_button_minimize.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/cpp_onscreen_button_minimize.png rename to android-app/src/main/res/drawable-nodpi/cpp_onscreen_button_minimize.png diff --git a/android-app-core/src/main/res/drawable-nodpi/cpp_onscreen_header_logo.png b/android-app/src/main/res/drawable-nodpi/cpp_onscreen_header_logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/cpp_onscreen_header_logo.png rename to android-app/src/main/res/drawable-nodpi/cpp_onscreen_header_logo.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__ab_transparent_dark_holo.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__ab_transparent_dark_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__ab_transparent_dark_holo.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__ab_transparent_dark_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__btn_cab_done_default_holo_dark.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__btn_cab_done_default_holo_dark.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__btn_cab_done_default_holo_dark.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__btn_cab_done_default_holo_dark.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__btn_cab_done_focused_holo_dark.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__btn_cab_done_focused_holo_dark.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__btn_cab_done_focused_holo_dark.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__btn_cab_done_focused_holo_dark.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__btn_cab_done_pressed_holo_dark.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__btn_cab_done_pressed_holo_dark.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__btn_cab_done_pressed_holo_dark.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__btn_cab_done_pressed_holo_dark.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__list_focused_holo.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__list_focused_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__list_focused_holo.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__list_focused_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__list_longpressed_holo.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__list_longpressed_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__list_longpressed_holo.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__list_longpressed_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__list_pressed_holo_dark.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__list_pressed_holo_dark.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__list_pressed_holo_dark.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__list_pressed_holo_dark.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__spinner_ab_focused_holo_dark.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__spinner_ab_focused_holo_dark.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__spinner_ab_focused_holo_dark.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__spinner_ab_focused_holo_dark.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__spinner_ab_pressed_holo_dark.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__spinner_ab_pressed_holo_dark.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__spinner_ab_pressed_holo_dark.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__spinner_ab_pressed_holo_dark.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__tab_selected_focused_holo.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__tab_selected_focused_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__tab_selected_focused_holo.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__tab_selected_focused_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__tab_selected_holo.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__tab_selected_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__tab_selected_holo.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__tab_selected_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__tab_selected_pressed_holo.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__tab_selected_pressed_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__tab_selected_pressed_holo.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__tab_selected_pressed_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/default_abs__tab_unselected_pressed_holo.9.png b/android-app/src/main/res/drawable-nodpi/default_abs__tab_unselected_pressed_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/default_abs__tab_unselected_pressed_holo.9.png rename to android-app/src/main/res/drawable-nodpi/default_abs__tab_unselected_pressed_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__ab_transparent_dark_holo.9.png b/android-app/src/main/res/drawable-nodpi/metro_blue_abs__ab_transparent_dark_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__ab_transparent_dark_holo.9.png rename to android-app/src/main/res/drawable-nodpi/metro_blue_abs__ab_transparent_dark_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__list_focused_holo.9.png b/android-app/src/main/res/drawable-nodpi/metro_blue_abs__list_focused_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__list_focused_holo.9.png rename to android-app/src/main/res/drawable-nodpi/metro_blue_abs__list_focused_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__list_pressed_holo_dark.9.png b/android-app/src/main/res/drawable-nodpi/metro_blue_abs__list_pressed_holo_dark.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__list_pressed_holo_dark.9.png rename to android-app/src/main/res/drawable-nodpi/metro_blue_abs__list_pressed_holo_dark.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_focused_holo.9.png b/android-app/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_focused_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_focused_holo.9.png rename to android-app/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_focused_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_holo.9.png b/android-app/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_holo.9.png rename to android-app/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_pressed_holo.9.png b/android-app/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_pressed_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_pressed_holo.9.png rename to android-app/src/main/res/drawable-nodpi/metro_blue_abs__tab_selected_pressed_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__tab_unselected_pressed_holo.9.png b/android-app/src/main/res/drawable-nodpi/metro_blue_abs__tab_unselected_pressed_holo.9.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/metro_blue_abs__tab_unselected_pressed_holo.9.png rename to android-app/src/main/res/drawable-nodpi/metro_blue_abs__tab_unselected_pressed_holo.9.png diff --git a/android-app-core/src/main/res/drawable-nodpi/tablet_big_buttons.png b/android-app/src/main/res/drawable-nodpi/tablet_big_buttons.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/tablet_big_buttons.png rename to android-app/src/main/res/drawable-nodpi/tablet_big_buttons.png diff --git a/android-app-core/src/main/res/drawable-nodpi/tablet_optimized.png b/android-app/src/main/res/drawable-nodpi/tablet_optimized.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/tablet_optimized.png rename to android-app/src/main/res/drawable-nodpi/tablet_optimized.png diff --git a/android-app-core/src/main/res/drawable-nodpi/widget_preview.png b/android-app/src/main/res/drawable-nodpi/widget_preview.png similarity index 100% rename from android-app-core/src/main/res/drawable-nodpi/widget_preview.png rename to android-app/src/main/res/drawable-nodpi/widget_preview.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_clock.png b/android-app/src/main/res/drawable-xhdpi/ab_clock.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_clock.png rename to android-app/src/main/res/drawable-xhdpi/ab_clock.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_disk.png b/android-app/src/main/res/drawable-xhdpi/ab_disk.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_disk.png rename to android-app/src/main/res/drawable-xhdpi/ab_disk.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_expand.png b/android-app/src/main/res/drawable-xhdpi/ab_expand.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_expand.png rename to android-app/src/main/res/drawable-xhdpi/ab_expand.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_icon.png b/android-app/src/main/res/drawable-xhdpi/ab_icon.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_icon.png rename to android-app/src/main/res/drawable-xhdpi/ab_icon.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_menu.png b/android-app/src/main/res/drawable-xhdpi/ab_menu.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_menu.png rename to android-app/src/main/res/drawable-xhdpi/ab_menu.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_plus.png b/android-app/src/main/res/drawable-xhdpi/ab_plus.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_plus.png rename to android-app/src/main/res/drawable-xhdpi/ab_plus.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_range.png b/android-app/src/main/res/drawable-xhdpi/ab_range.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_range.png rename to android-app/src/main/res/drawable-xhdpi/ab_range.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_remove.png b/android-app/src/main/res/drawable-xhdpi/ab_remove.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_remove.png rename to android-app/src/main/res/drawable-xhdpi/ab_remove.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_settings.png b/android-app/src/main/res/drawable-xhdpi/ab_settings.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_settings.png rename to android-app/src/main/res/drawable-xhdpi/ab_settings.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_stats.png b/android-app/src/main/res/drawable-xhdpi/ab_stats.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_stats.png rename to android-app/src/main/res/drawable-xhdpi/ab_stats.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/ab_stats_3d.png b/android-app/src/main/res/drawable-xhdpi/ab_stats_3d.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/ab_stats_3d.png rename to android-app/src/main/res/drawable-xhdpi/ab_stats_3d.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/icon.png b/android-app/src/main/res/drawable-xhdpi/icon.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/icon.png rename to android-app/src/main/res/drawable-xhdpi/icon.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/icon_onscreen.png b/android-app/src/main/res/drawable-xhdpi/icon_onscreen.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/icon_onscreen.png rename to android-app/src/main/res/drawable-xhdpi/icon_onscreen.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/kb_copy.png b/android-app/src/main/res/drawable-xhdpi/kb_copy.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/kb_copy.png rename to android-app/src/main/res/drawable-xhdpi/kb_copy.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/kb_erase.png b/android-app/src/main/res/drawable-xhdpi/kb_erase.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/kb_erase.png rename to android-app/src/main/res/drawable-xhdpi/kb_erase.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/kb_logo.png b/android-app/src/main/res/drawable-xhdpi/kb_logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/kb_logo.png rename to android-app/src/main/res/drawable-xhdpi/kb_logo.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/kb_paste.png b/android-app/src/main/res/drawable-xhdpi/kb_paste.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/kb_paste.png rename to android-app/src/main/res/drawable-xhdpi/kb_paste.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/kb_settings.png b/android-app/src/main/res/drawable-xhdpi/kb_settings.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/kb_settings.png rename to android-app/src/main/res/drawable-xhdpi/kb_settings.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/kb_share.png b/android-app/src/main/res/drawable-xhdpi/kb_share.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/kb_share.png rename to android-app/src/main/res/drawable-xhdpi/kb_share.png diff --git a/android-app-core/src/main/res/drawable-xhdpi/logo.png b/android-app/src/main/res/drawable-xhdpi/logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-xhdpi/logo.png rename to android-app/src/main/res/drawable-xhdpi/logo.png diff --git a/android-app-core/src/main/res/drawable-xlarge-hdpi/kb_logo.png b/android-app/src/main/res/drawable-xlarge-hdpi/kb_logo.png similarity index 100% rename from android-app-core/src/main/res/drawable-xlarge-hdpi/kb_logo.png rename to android-app/src/main/res/drawable-xlarge-hdpi/kb_logo.png diff --git a/android-app-core/src/main/res/drawable-xxhdpi/icon.png b/android-app/src/main/res/drawable-xxhdpi/icon.png similarity index 100% rename from android-app-core/src/main/res/drawable-xxhdpi/icon.png rename to android-app/src/main/res/drawable-xxhdpi/icon.png diff --git a/android-app-core/src/main/res/drawable-xxhdpi/icon_onscreen.png b/android-app/src/main/res/drawable-xxhdpi/icon_onscreen.png similarity index 100% rename from android-app-core/src/main/res/drawable-xxhdpi/icon_onscreen.png rename to android-app/src/main/res/drawable-xxhdpi/icon_onscreen.png diff --git a/android-app-core/src/main/res/drawable/blue_button.xml b/android-app/src/main/res/drawable/blue_button.xml similarity index 100% rename from android-app-core/src/main/res/drawable/blue_button.xml rename to android-app/src/main/res/drawable/blue_button.xml diff --git a/android-app-core/src/main/res/drawable/blue_button_dark.xml b/android-app/src/main/res/drawable/blue_button_dark.xml similarity index 100% rename from android-app-core/src/main/res/drawable/blue_button_dark.xml rename to android-app/src/main/res/drawable/blue_button_dark.xml diff --git a/android-app-core/src/main/res/drawable/blue_button_dark_shape.xml b/android-app/src/main/res/drawable/blue_button_dark_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/blue_button_dark_shape.xml rename to android-app/src/main/res/drawable/blue_button_dark_shape.xml diff --git a/android-app-core/src/main/res/drawable/blue_button_shape.xml b/android-app/src/main/res/drawable/blue_button_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/blue_button_shape.xml rename to android-app/src/main/res/drawable/blue_button_shape.xml diff --git a/android-app-core/src/main/res/drawable/default_abs__btn_cab_done_holo_dark.xml b/android-app/src/main/res/drawable/default_abs__btn_cab_done_holo_dark.xml similarity index 100% rename from android-app-core/src/main/res/drawable/default_abs__btn_cab_done_holo_dark.xml rename to android-app/src/main/res/drawable/default_abs__btn_cab_done_holo_dark.xml diff --git a/android-app-core/src/main/res/drawable/default_abs__item_background_holo_dark.xml b/android-app/src/main/res/drawable/default_abs__item_background_holo_dark.xml similarity index 100% rename from android-app-core/src/main/res/drawable/default_abs__item_background_holo_dark.xml rename to android-app/src/main/res/drawable/default_abs__item_background_holo_dark.xml diff --git a/android-app-core/src/main/res/drawable/default_abs__list_selector_background_transition_holo_dark.xml b/android-app/src/main/res/drawable/default_abs__list_selector_background_transition_holo_dark.xml similarity index 100% rename from android-app-core/src/main/res/drawable/default_abs__list_selector_background_transition_holo_dark.xml rename to android-app/src/main/res/drawable/default_abs__list_selector_background_transition_holo_dark.xml diff --git a/android-app-core/src/main/res/drawable/default_abs__list_selector_holo_dark.xml b/android-app/src/main/res/drawable/default_abs__list_selector_holo_dark.xml similarity index 100% rename from android-app-core/src/main/res/drawable/default_abs__list_selector_holo_dark.xml rename to android-app/src/main/res/drawable/default_abs__list_selector_holo_dark.xml diff --git a/android-app-core/src/main/res/drawable/default_abs__spinner_ab_holo_dark.xml b/android-app/src/main/res/drawable/default_abs__spinner_ab_holo_dark.xml similarity index 100% rename from android-app-core/src/main/res/drawable/default_abs__spinner_ab_holo_dark.xml rename to android-app/src/main/res/drawable/default_abs__spinner_ab_holo_dark.xml diff --git a/android-app-core/src/main/res/drawable/default_abs__tab_indicator_ab_holo.xml b/android-app/src/main/res/drawable/default_abs__tab_indicator_ab_holo.xml similarity index 100% rename from android-app-core/src/main/res/drawable/default_abs__tab_indicator_ab_holo.xml rename to android-app/src/main/res/drawable/default_abs__tab_indicator_ab_holo.xml diff --git a/android-app-core/src/main/res/drawable/gray_button.xml b/android-app/src/main/res/drawable/gray_button.xml similarity index 100% rename from android-app-core/src/main/res/drawable/gray_button.xml rename to android-app/src/main/res/drawable/gray_button.xml diff --git a/android-app-core/src/main/res/drawable/gray_button_dark.xml b/android-app/src/main/res/drawable/gray_button_dark.xml similarity index 100% rename from android-app-core/src/main/res/drawable/gray_button_dark.xml rename to android-app/src/main/res/drawable/gray_button_dark.xml diff --git a/android-app-core/src/main/res/drawable/gray_button_dark_shape.xml b/android-app/src/main/res/drawable/gray_button_dark_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/gray_button_dark_shape.xml rename to android-app/src/main/res/drawable/gray_button_dark_shape.xml diff --git a/android-app-core/src/main/res/drawable/gray_button_shape.xml b/android-app/src/main/res/drawable/gray_button_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/gray_button_shape.xml rename to android-app/src/main/res/drawable/gray_button_shape.xml diff --git a/android-app-core/src/main/res/drawable/metro_blue_abs__tab_indicator_ab_holo.xml b/android-app/src/main/res/drawable/metro_blue_abs__tab_indicator_ab_holo.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_blue_abs__tab_indicator_ab_holo.xml rename to android-app/src/main/res/drawable/metro_blue_abs__tab_indicator_ab_holo.xml diff --git a/android-app-core/src/main/res/drawable/metro_blue_button.xml b/android-app/src/main/res/drawable/metro_blue_button.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_blue_button.xml rename to android-app/src/main/res/drawable/metro_blue_button.xml diff --git a/android-app-core/src/main/res/drawable/metro_blue_button_shape.xml b/android-app/src/main/res/drawable/metro_blue_button_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_blue_button_shape.xml rename to android-app/src/main/res/drawable/metro_blue_button_shape.xml diff --git a/android-app-core/src/main/res/drawable/metro_blue_list_item.xml b/android-app/src/main/res/drawable/metro_blue_list_item.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_blue_list_item.xml rename to android-app/src/main/res/drawable/metro_blue_list_item.xml diff --git a/android-app-core/src/main/res/drawable/metro_button_dark.xml b/android-app/src/main/res/drawable/metro_button_dark.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_button_dark.xml rename to android-app/src/main/res/drawable/metro_button_dark.xml diff --git a/android-app-core/src/main/res/drawable/metro_button_dark_shape.xml b/android-app/src/main/res/drawable/metro_button_dark_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_button_dark_shape.xml rename to android-app/src/main/res/drawable/metro_button_dark_shape.xml diff --git a/android-app-core/src/main/res/drawable/metro_button_green.xml b/android-app/src/main/res/drawable/metro_button_green.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_button_green.xml rename to android-app/src/main/res/drawable/metro_button_green.xml diff --git a/android-app-core/src/main/res/drawable/metro_button_green_shape.xml b/android-app/src/main/res/drawable/metro_button_green_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_button_green_shape.xml rename to android-app/src/main/res/drawable/metro_button_green_shape.xml diff --git a/android-app-core/src/main/res/drawable/metro_button_light.xml b/android-app/src/main/res/drawable/metro_button_light.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_button_light.xml rename to android-app/src/main/res/drawable/metro_button_light.xml diff --git a/android-app-core/src/main/res/drawable/metro_button_light_shape.xml b/android-app/src/main/res/drawable/metro_button_light_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_button_light_shape.xml rename to android-app/src/main/res/drawable/metro_button_light_shape.xml diff --git a/android-app-core/src/main/res/drawable/metro_button_pressed.xml b/android-app/src/main/res/drawable/metro_button_pressed.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_button_pressed.xml rename to android-app/src/main/res/drawable/metro_button_pressed.xml diff --git a/android-app-core/src/main/res/drawable/metro_button_purple.xml b/android-app/src/main/res/drawable/metro_button_purple.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_button_purple.xml rename to android-app/src/main/res/drawable/metro_button_purple.xml diff --git a/android-app-core/src/main/res/drawable/metro_button_purple_shape.xml b/android-app/src/main/res/drawable/metro_button_purple_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_button_purple_shape.xml rename to android-app/src/main/res/drawable/metro_button_purple_shape.xml diff --git a/android-app-core/src/main/res/drawable/metro_green_list_item.xml b/android-app/src/main/res/drawable/metro_green_list_item.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_green_list_item.xml rename to android-app/src/main/res/drawable/metro_green_list_item.xml diff --git a/android-app-core/src/main/res/drawable/metro_purple_list_item.xml b/android-app/src/main/res/drawable/metro_purple_list_item.xml similarity index 100% rename from android-app-core/src/main/res/drawable/metro_purple_list_item.xml rename to android-app/src/main/res/drawable/metro_purple_list_item.xml diff --git a/android-app-core/src/main/res/drawable/pane_background.xml b/android-app/src/main/res/drawable/pane_background.xml similarity index 100% rename from android-app-core/src/main/res/drawable/pane_background.xml rename to android-app/src/main/res/drawable/pane_background.xml diff --git a/android-app-core/src/main/res/drawable/violet_button.xml b/android-app/src/main/res/drawable/violet_button.xml similarity index 100% rename from android-app-core/src/main/res/drawable/violet_button.xml rename to android-app/src/main/res/drawable/violet_button.xml diff --git a/android-app-core/src/main/res/drawable/violet_button_dark.xml b/android-app/src/main/res/drawable/violet_button_dark.xml similarity index 100% rename from android-app-core/src/main/res/drawable/violet_button_dark.xml rename to android-app/src/main/res/drawable/violet_button_dark.xml diff --git a/android-app-core/src/main/res/drawable/violet_button_dark_shape.xml b/android-app/src/main/res/drawable/violet_button_dark_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/violet_button_dark_shape.xml rename to android-app/src/main/res/drawable/violet_button_dark_shape.xml diff --git a/android-app-core/src/main/res/drawable/violet_button_shape.xml b/android-app/src/main/res/drawable/violet_button_shape.xml similarity index 100% rename from android-app-core/src/main/res/drawable/violet_button_shape.xml rename to android-app/src/main/res/drawable/violet_button_shape.xml diff --git a/android-app-core/src/main/res/layout/cpp_fixable_messages_dialog.xml b/android-app/src/main/res/layout/cpp_fixable_messages_dialog.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_fixable_messages_dialog.xml rename to android-app/src/main/res/layout/cpp_fixable_messages_dialog.xml diff --git a/android-app-core/src/main/res/layout/cpp_fixable_messages_dialog_message.xml b/android-app/src/main/res/layout/cpp_fixable_messages_dialog_message.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_fixable_messages_dialog_message.xml rename to android-app/src/main/res/layout/cpp_fixable_messages_dialog_message.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_0.xml b/android-app/src/main/res/layout/cpp_simple_button_0.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_0.xml rename to android-app/src/main/res/layout/cpp_simple_button_0.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_1.xml b/android-app/src/main/res/layout/cpp_simple_button_1.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_1.xml rename to android-app/src/main/res/layout/cpp_simple_button_1.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_2.xml b/android-app/src/main/res/layout/cpp_simple_button_2.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_2.xml rename to android-app/src/main/res/layout/cpp_simple_button_2.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_3.xml b/android-app/src/main/res/layout/cpp_simple_button_3.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_3.xml rename to android-app/src/main/res/layout/cpp_simple_button_3.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_4.xml b/android-app/src/main/res/layout/cpp_simple_button_4.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_4.xml rename to android-app/src/main/res/layout/cpp_simple_button_4.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_5.xml b/android-app/src/main/res/layout/cpp_simple_button_5.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_5.xml rename to android-app/src/main/res/layout/cpp_simple_button_5.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_6.xml b/android-app/src/main/res/layout/cpp_simple_button_6.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_6.xml rename to android-app/src/main/res/layout/cpp_simple_button_6.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_7.xml b/android-app/src/main/res/layout/cpp_simple_button_7.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_7.xml rename to android-app/src/main/res/layout/cpp_simple_button_7.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_8.xml b/android-app/src/main/res/layout/cpp_simple_button_8.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_8.xml rename to android-app/src/main/res/layout/cpp_simple_button_8.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_9.xml b/android-app/src/main/res/layout/cpp_simple_button_9.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_9.xml rename to android-app/src/main/res/layout/cpp_simple_button_9.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_app.xml b/android-app/src/main/res/layout/cpp_simple_button_app.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_app.xml rename to android-app/src/main/res/layout/cpp_simple_button_app.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_clear.xml b/android-app/src/main/res/layout/cpp_simple_button_clear.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_clear.xml rename to android-app/src/main/res/layout/cpp_simple_button_clear.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_copy.xml b/android-app/src/main/res/layout/cpp_simple_button_copy.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_copy.xml rename to android-app/src/main/res/layout/cpp_simple_button_copy.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_division.xml b/android-app/src/main/res/layout/cpp_simple_button_division.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_division.xml rename to android-app/src/main/res/layout/cpp_simple_button_division.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_dot.xml b/android-app/src/main/res/layout/cpp_simple_button_dot.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_dot.xml rename to android-app/src/main/res/layout/cpp_simple_button_dot.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_equals.xml b/android-app/src/main/res/layout/cpp_simple_button_equals.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_equals.xml rename to android-app/src/main/res/layout/cpp_simple_button_equals.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_erase.xml b/android-app/src/main/res/layout/cpp_simple_button_erase.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_erase.xml rename to android-app/src/main/res/layout/cpp_simple_button_erase.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_functions.xml b/android-app/src/main/res/layout/cpp_simple_button_functions.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_functions.xml rename to android-app/src/main/res/layout/cpp_simple_button_functions.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_history.xml b/android-app/src/main/res/layout/cpp_simple_button_history.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_history.xml rename to android-app/src/main/res/layout/cpp_simple_button_history.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_left.xml b/android-app/src/main/res/layout/cpp_simple_button_left.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_left.xml rename to android-app/src/main/res/layout/cpp_simple_button_left.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_like.xml b/android-app/src/main/res/layout/cpp_simple_button_like.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_like.xml rename to android-app/src/main/res/layout/cpp_simple_button_like.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_multiplication.xml b/android-app/src/main/res/layout/cpp_simple_button_multiplication.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_multiplication.xml rename to android-app/src/main/res/layout/cpp_simple_button_multiplication.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_operators.xml b/android-app/src/main/res/layout/cpp_simple_button_operators.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_operators.xml rename to android-app/src/main/res/layout/cpp_simple_button_operators.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_paste.xml b/android-app/src/main/res/layout/cpp_simple_button_paste.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_paste.xml rename to android-app/src/main/res/layout/cpp_simple_button_paste.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_percent.xml b/android-app/src/main/res/layout/cpp_simple_button_percent.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_percent.xml rename to android-app/src/main/res/layout/cpp_simple_button_percent.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_plus.xml b/android-app/src/main/res/layout/cpp_simple_button_plus.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_plus.xml rename to android-app/src/main/res/layout/cpp_simple_button_plus.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_power.xml b/android-app/src/main/res/layout/cpp_simple_button_power.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_power.xml rename to android-app/src/main/res/layout/cpp_simple_button_power.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_right.xml b/android-app/src/main/res/layout/cpp_simple_button_right.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_right.xml rename to android-app/src/main/res/layout/cpp_simple_button_right.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_round_brackets.xml b/android-app/src/main/res/layout/cpp_simple_button_round_brackets.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_round_brackets.xml rename to android-app/src/main/res/layout/cpp_simple_button_round_brackets.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_settings.xml b/android-app/src/main/res/layout/cpp_simple_button_settings.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_settings.xml rename to android-app/src/main/res/layout/cpp_simple_button_settings.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_subtraction.xml b/android-app/src/main/res/layout/cpp_simple_button_subtraction.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_subtraction.xml rename to android-app/src/main/res/layout/cpp_simple_button_subtraction.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_button_vars.xml b/android-app/src/main/res/layout/cpp_simple_button_vars.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_button_vars.xml rename to android-app/src/main/res/layout/cpp_simple_button_vars.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_keyboard.xml b/android-app/src/main/res/layout/cpp_simple_keyboard.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_keyboard.xml rename to android-app/src/main/res/layout/cpp_simple_keyboard.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_keyboard_lockscreen.xml b/android-app/src/main/res/layout/cpp_simple_keyboard_lockscreen.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_keyboard_lockscreen.xml rename to android-app/src/main/res/layout/cpp_simple_keyboard_lockscreen.xml diff --git a/android-app-core/src/main/res/layout/cpp_simple_keyboard_lockscreen_collapsed.xml b/android-app/src/main/res/layout/cpp_simple_keyboard_lockscreen_collapsed.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_simple_keyboard_lockscreen_collapsed.xml rename to android-app/src/main/res/layout/cpp_simple_keyboard_lockscreen_collapsed.xml diff --git a/android-app-core/src/main/res/layout/cpp_unit_converter.xml b/android-app/src/main/res/layout/cpp_unit_converter.xml similarity index 100% rename from android-app-core/src/main/res/layout/cpp_unit_converter.xml rename to android-app/src/main/res/layout/cpp_unit_converter.xml diff --git a/android-app-onscreen/src/main/res/layout/onscreen_display.xml b/android-app/src/main/res/layout/onscreen_display.xml similarity index 100% rename from android-app-onscreen/src/main/res/layout/onscreen_display.xml rename to android-app/src/main/res/layout/onscreen_display.xml diff --git a/android-app-onscreen/src/main/res/layout/onscreen_editor.xml b/android-app/src/main/res/layout/onscreen_editor.xml similarity index 100% rename from android-app-onscreen/src/main/res/layout/onscreen_editor.xml rename to android-app/src/main/res/layout/onscreen_editor.xml diff --git a/android-app-onscreen/src/main/res/layout/onscreen_footer.xml b/android-app/src/main/res/layout/onscreen_footer.xml similarity index 100% rename from android-app-onscreen/src/main/res/layout/onscreen_footer.xml rename to android-app/src/main/res/layout/onscreen_footer.xml diff --git a/android-app-onscreen/src/main/res/layout/onscreen_header.xml b/android-app/src/main/res/layout/onscreen_header.xml similarity index 100% rename from android-app-onscreen/src/main/res/layout/onscreen_header.xml rename to android-app/src/main/res/layout/onscreen_header.xml diff --git a/android-app-onscreen/src/main/res/layout/onscreen_keyboard.xml b/android-app/src/main/res/layout/onscreen_keyboard.xml similarity index 100% rename from android-app-onscreen/src/main/res/layout/onscreen_keyboard.xml rename to android-app/src/main/res/layout/onscreen_keyboard.xml diff --git a/android-app-onscreen/src/main/res/layout/onscreen_layout.xml b/android-app/src/main/res/layout/onscreen_layout.xml similarity index 100% rename from android-app-onscreen/src/main/res/layout/onscreen_layout.xml rename to android-app/src/main/res/layout/onscreen_layout.xml diff --git a/android-app-widget/src/main/res/layout/widget_display.xml b/android-app/src/main/res/layout/widget_display.xml similarity index 100% rename from android-app-widget/src/main/res/layout/widget_display.xml rename to android-app/src/main/res/layout/widget_display.xml diff --git a/android-app-widget/src/main/res/layout/widget_editor.xml b/android-app/src/main/res/layout/widget_editor.xml similarity index 100% rename from android-app-widget/src/main/res/layout/widget_editor.xml rename to android-app/src/main/res/layout/widget_editor.xml diff --git a/android-app-widget/src/main/res/layout/widget_layout.xml b/android-app/src/main/res/layout/widget_layout.xml similarity index 100% rename from android-app-widget/src/main/res/layout/widget_layout.xml rename to android-app/src/main/res/layout/widget_layout.xml diff --git a/android-app-widget/src/main/res/layout/widget_layout_lockscreen.xml b/android-app/src/main/res/layout/widget_layout_lockscreen.xml similarity index 100% rename from android-app-widget/src/main/res/layout/widget_layout_lockscreen.xml rename to android-app/src/main/res/layout/widget_layout_lockscreen.xml diff --git a/android-app-widget/src/main/res/layout/widget_layout_lockscreen_collapsed.xml b/android-app/src/main/res/layout/widget_layout_lockscreen_collapsed.xml similarity index 100% rename from android-app-widget/src/main/res/layout/widget_layout_lockscreen_collapsed.xml rename to android-app/src/main/res/layout/widget_layout_lockscreen_collapsed.xml diff --git a/android-app-core/src/main/res/values-ar/text_about.xml b/android-app/src/main/res/values-ar/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-ar/text_about.xml rename to android-app/src/main/res/values-ar/text_about.xml diff --git a/android-app-core/src/main/res/values-ar/text_functions.xml b/android-app/src/main/res/values-ar/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-ar/text_functions.xml rename to android-app/src/main/res/values-ar/text_functions.xml diff --git a/android-app-core/src/main/res/values-ar/text_operators.xml b/android-app/src/main/res/values-ar/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-ar/text_operators.xml rename to android-app/src/main/res/values-ar/text_operators.xml diff --git a/android-app-core/src/main/res/values-ar/text_preferences.xml b/android-app/src/main/res/values-ar/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-ar/text_preferences.xml rename to android-app/src/main/res/values-ar/text_preferences.xml diff --git a/android-app-core/src/main/res/values-ar/text_strings.xml b/android-app/src/main/res/values-ar/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-ar/text_strings.xml rename to android-app/src/main/res/values-ar/text_strings.xml diff --git a/android-app-core/src/main/res/values-ar/text_vars.xml b/android-app/src/main/res/values-ar/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-ar/text_vars.xml rename to android-app/src/main/res/values-ar/text_vars.xml diff --git a/android-app-core/src/main/res/values-ar/text_wizard.xml b/android-app/src/main/res/values-ar/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-ar/text_wizard.xml rename to android-app/src/main/res/values-ar/text_wizard.xml diff --git a/android-app-core/src/main/res/values-cs/text_about.xml b/android-app/src/main/res/values-cs/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-cs/text_about.xml rename to android-app/src/main/res/values-cs/text_about.xml diff --git a/android-app-core/src/main/res/values-cs/text_functions.xml b/android-app/src/main/res/values-cs/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-cs/text_functions.xml rename to android-app/src/main/res/values-cs/text_functions.xml diff --git a/android-app-core/src/main/res/values-cs/text_operators.xml b/android-app/src/main/res/values-cs/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-cs/text_operators.xml rename to android-app/src/main/res/values-cs/text_operators.xml diff --git a/android-app-core/src/main/res/values-cs/text_preferences.xml b/android-app/src/main/res/values-cs/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-cs/text_preferences.xml rename to android-app/src/main/res/values-cs/text_preferences.xml diff --git a/android-app-core/src/main/res/values-cs/text_strings.xml b/android-app/src/main/res/values-cs/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-cs/text_strings.xml rename to android-app/src/main/res/values-cs/text_strings.xml diff --git a/android-app-core/src/main/res/values-cs/text_vars.xml b/android-app/src/main/res/values-cs/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-cs/text_vars.xml rename to android-app/src/main/res/values-cs/text_vars.xml diff --git a/android-app-core/src/main/res/values-cs/text_wizard.xml b/android-app/src/main/res/values-cs/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-cs/text_wizard.xml rename to android-app/src/main/res/values-cs/text_wizard.xml diff --git a/android-app-core/src/main/res/values-de/text_about.xml b/android-app/src/main/res/values-de/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-de/text_about.xml rename to android-app/src/main/res/values-de/text_about.xml diff --git a/android-app-core/src/main/res/values-de/text_functions.xml b/android-app/src/main/res/values-de/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-de/text_functions.xml rename to android-app/src/main/res/values-de/text_functions.xml diff --git a/android-app-core/src/main/res/values-de/text_operators.xml b/android-app/src/main/res/values-de/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-de/text_operators.xml rename to android-app/src/main/res/values-de/text_operators.xml diff --git a/android-app-core/src/main/res/values-de/text_preferences.xml b/android-app/src/main/res/values-de/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-de/text_preferences.xml rename to android-app/src/main/res/values-de/text_preferences.xml diff --git a/android-app-core/src/main/res/values-de/text_strings.xml b/android-app/src/main/res/values-de/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-de/text_strings.xml rename to android-app/src/main/res/values-de/text_strings.xml diff --git a/android-app-core/src/main/res/values-de/text_vars.xml b/android-app/src/main/res/values-de/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-de/text_vars.xml rename to android-app/src/main/res/values-de/text_vars.xml diff --git a/android-app-core/src/main/res/values-de/text_wizard.xml b/android-app/src/main/res/values-de/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-de/text_wizard.xml rename to android-app/src/main/res/values-de/text_wizard.xml diff --git a/android-app-core/src/main/res/values-el/text_about.xml b/android-app/src/main/res/values-el/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-el/text_about.xml rename to android-app/src/main/res/values-el/text_about.xml diff --git a/android-app-core/src/main/res/values-el/text_functions.xml b/android-app/src/main/res/values-el/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-el/text_functions.xml rename to android-app/src/main/res/values-el/text_functions.xml diff --git a/android-app-core/src/main/res/values-el/text_operators.xml b/android-app/src/main/res/values-el/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-el/text_operators.xml rename to android-app/src/main/res/values-el/text_operators.xml diff --git a/android-app-core/src/main/res/values-el/text_preferences.xml b/android-app/src/main/res/values-el/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-el/text_preferences.xml rename to android-app/src/main/res/values-el/text_preferences.xml diff --git a/android-app-core/src/main/res/values-el/text_strings.xml b/android-app/src/main/res/values-el/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-el/text_strings.xml rename to android-app/src/main/res/values-el/text_strings.xml diff --git a/android-app-core/src/main/res/values-el/text_vars.xml b/android-app/src/main/res/values-el/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-el/text_vars.xml rename to android-app/src/main/res/values-el/text_vars.xml diff --git a/android-app-core/src/main/res/values-el/text_wizard.xml b/android-app/src/main/res/values-el/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-el/text_wizard.xml rename to android-app/src/main/res/values-el/text_wizard.xml diff --git a/android-app-core/src/main/res/values-es/text_about.xml b/android-app/src/main/res/values-es/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-es/text_about.xml rename to android-app/src/main/res/values-es/text_about.xml diff --git a/android-app-core/src/main/res/values-es/text_functions.xml b/android-app/src/main/res/values-es/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-es/text_functions.xml rename to android-app/src/main/res/values-es/text_functions.xml diff --git a/android-app-core/src/main/res/values-es/text_operators.xml b/android-app/src/main/res/values-es/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-es/text_operators.xml rename to android-app/src/main/res/values-es/text_operators.xml diff --git a/android-app-core/src/main/res/values-es/text_preferences.xml b/android-app/src/main/res/values-es/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-es/text_preferences.xml rename to android-app/src/main/res/values-es/text_preferences.xml diff --git a/android-app-core/src/main/res/values-es/text_strings.xml b/android-app/src/main/res/values-es/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-es/text_strings.xml rename to android-app/src/main/res/values-es/text_strings.xml diff --git a/android-app-core/src/main/res/values-es/text_vars.xml b/android-app/src/main/res/values-es/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-es/text_vars.xml rename to android-app/src/main/res/values-es/text_vars.xml diff --git a/android-app-core/src/main/res/values-es/text_wizard.xml b/android-app/src/main/res/values-es/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-es/text_wizard.xml rename to android-app/src/main/res/values-es/text_wizard.xml diff --git a/android-app-core/src/main/res/values-fi/text_about.xml b/android-app/src/main/res/values-fi/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-fi/text_about.xml rename to android-app/src/main/res/values-fi/text_about.xml diff --git a/android-app-core/src/main/res/values-fi/text_functions.xml b/android-app/src/main/res/values-fi/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-fi/text_functions.xml rename to android-app/src/main/res/values-fi/text_functions.xml diff --git a/android-app-core/src/main/res/values-fi/text_operators.xml b/android-app/src/main/res/values-fi/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-fi/text_operators.xml rename to android-app/src/main/res/values-fi/text_operators.xml diff --git a/android-app-core/src/main/res/values-fi/text_preferences.xml b/android-app/src/main/res/values-fi/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-fi/text_preferences.xml rename to android-app/src/main/res/values-fi/text_preferences.xml diff --git a/android-app-core/src/main/res/values-fi/text_strings.xml b/android-app/src/main/res/values-fi/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-fi/text_strings.xml rename to android-app/src/main/res/values-fi/text_strings.xml diff --git a/android-app-core/src/main/res/values-fi/text_vars.xml b/android-app/src/main/res/values-fi/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-fi/text_vars.xml rename to android-app/src/main/res/values-fi/text_vars.xml diff --git a/android-app-core/src/main/res/values-fi/text_wizard.xml b/android-app/src/main/res/values-fi/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-fi/text_wizard.xml rename to android-app/src/main/res/values-fi/text_wizard.xml diff --git a/android-app-core/src/main/res/values-fr/text_about.xml b/android-app/src/main/res/values-fr/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-fr/text_about.xml rename to android-app/src/main/res/values-fr/text_about.xml diff --git a/android-app-core/src/main/res/values-fr/text_functions.xml b/android-app/src/main/res/values-fr/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-fr/text_functions.xml rename to android-app/src/main/res/values-fr/text_functions.xml diff --git a/android-app-core/src/main/res/values-fr/text_operators.xml b/android-app/src/main/res/values-fr/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-fr/text_operators.xml rename to android-app/src/main/res/values-fr/text_operators.xml diff --git a/android-app-core/src/main/res/values-fr/text_preferences.xml b/android-app/src/main/res/values-fr/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-fr/text_preferences.xml rename to android-app/src/main/res/values-fr/text_preferences.xml diff --git a/android-app-core/src/main/res/values-fr/text_strings.xml b/android-app/src/main/res/values-fr/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-fr/text_strings.xml rename to android-app/src/main/res/values-fr/text_strings.xml diff --git a/android-app-core/src/main/res/values-fr/text_vars.xml b/android-app/src/main/res/values-fr/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-fr/text_vars.xml rename to android-app/src/main/res/values-fr/text_vars.xml diff --git a/android-app-core/src/main/res/values-fr/text_wizard.xml b/android-app/src/main/res/values-fr/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-fr/text_wizard.xml rename to android-app/src/main/res/values-fr/text_wizard.xml diff --git a/android-app-core/src/main/res/values-it/text_about.xml b/android-app/src/main/res/values-it/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-it/text_about.xml rename to android-app/src/main/res/values-it/text_about.xml diff --git a/android-app-core/src/main/res/values-it/text_functions.xml b/android-app/src/main/res/values-it/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-it/text_functions.xml rename to android-app/src/main/res/values-it/text_functions.xml diff --git a/android-app-core/src/main/res/values-it/text_operators.xml b/android-app/src/main/res/values-it/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-it/text_operators.xml rename to android-app/src/main/res/values-it/text_operators.xml diff --git a/android-app-core/src/main/res/values-it/text_preferences.xml b/android-app/src/main/res/values-it/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-it/text_preferences.xml rename to android-app/src/main/res/values-it/text_preferences.xml diff --git a/android-app-core/src/main/res/values-it/text_strings.xml b/android-app/src/main/res/values-it/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-it/text_strings.xml rename to android-app/src/main/res/values-it/text_strings.xml diff --git a/android-app-core/src/main/res/values-it/text_vars.xml b/android-app/src/main/res/values-it/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-it/text_vars.xml rename to android-app/src/main/res/values-it/text_vars.xml diff --git a/android-app-core/src/main/res/values-it/text_wizard.xml b/android-app/src/main/res/values-it/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-it/text_wizard.xml rename to android-app/src/main/res/values-it/text_wizard.xml diff --git a/android-app-core/src/main/res/values-ja/text_about.xml b/android-app/src/main/res/values-ja/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-ja/text_about.xml rename to android-app/src/main/res/values-ja/text_about.xml diff --git a/android-app-core/src/main/res/values-ja/text_functions.xml b/android-app/src/main/res/values-ja/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-ja/text_functions.xml rename to android-app/src/main/res/values-ja/text_functions.xml diff --git a/android-app-core/src/main/res/values-ja/text_operators.xml b/android-app/src/main/res/values-ja/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-ja/text_operators.xml rename to android-app/src/main/res/values-ja/text_operators.xml diff --git a/android-app-core/src/main/res/values-ja/text_preferences.xml b/android-app/src/main/res/values-ja/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-ja/text_preferences.xml rename to android-app/src/main/res/values-ja/text_preferences.xml diff --git a/android-app-core/src/main/res/values-ja/text_strings.xml b/android-app/src/main/res/values-ja/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-ja/text_strings.xml rename to android-app/src/main/res/values-ja/text_strings.xml diff --git a/android-app-core/src/main/res/values-ja/text_vars.xml b/android-app/src/main/res/values-ja/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-ja/text_vars.xml rename to android-app/src/main/res/values-ja/text_vars.xml diff --git a/android-app-core/src/main/res/values-ja/text_wizard.xml b/android-app/src/main/res/values-ja/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-ja/text_wizard.xml rename to android-app/src/main/res/values-ja/text_wizard.xml diff --git a/android-app-core/src/main/res/values-nl/text_about.xml b/android-app/src/main/res/values-nl/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-nl/text_about.xml rename to android-app/src/main/res/values-nl/text_about.xml diff --git a/android-app-core/src/main/res/values-nl/text_functions.xml b/android-app/src/main/res/values-nl/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-nl/text_functions.xml rename to android-app/src/main/res/values-nl/text_functions.xml diff --git a/android-app-core/src/main/res/values-nl/text_operators.xml b/android-app/src/main/res/values-nl/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-nl/text_operators.xml rename to android-app/src/main/res/values-nl/text_operators.xml diff --git a/android-app-core/src/main/res/values-nl/text_preferences.xml b/android-app/src/main/res/values-nl/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-nl/text_preferences.xml rename to android-app/src/main/res/values-nl/text_preferences.xml diff --git a/android-app-core/src/main/res/values-nl/text_strings.xml b/android-app/src/main/res/values-nl/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-nl/text_strings.xml rename to android-app/src/main/res/values-nl/text_strings.xml diff --git a/android-app-core/src/main/res/values-nl/text_vars.xml b/android-app/src/main/res/values-nl/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-nl/text_vars.xml rename to android-app/src/main/res/values-nl/text_vars.xml diff --git a/android-app-core/src/main/res/values-nl/text_wizard.xml b/android-app/src/main/res/values-nl/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-nl/text_wizard.xml rename to android-app/src/main/res/values-nl/text_wizard.xml diff --git a/android-app-core/src/main/res/values-pl/text_about.xml b/android-app/src/main/res/values-pl/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-pl/text_about.xml rename to android-app/src/main/res/values-pl/text_about.xml diff --git a/android-app-core/src/main/res/values-pl/text_functions.xml b/android-app/src/main/res/values-pl/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-pl/text_functions.xml rename to android-app/src/main/res/values-pl/text_functions.xml diff --git a/android-app-core/src/main/res/values-pl/text_operators.xml b/android-app/src/main/res/values-pl/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-pl/text_operators.xml rename to android-app/src/main/res/values-pl/text_operators.xml diff --git a/android-app-core/src/main/res/values-pl/text_preferences.xml b/android-app/src/main/res/values-pl/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-pl/text_preferences.xml rename to android-app/src/main/res/values-pl/text_preferences.xml diff --git a/android-app-core/src/main/res/values-pl/text_strings.xml b/android-app/src/main/res/values-pl/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-pl/text_strings.xml rename to android-app/src/main/res/values-pl/text_strings.xml diff --git a/android-app-core/src/main/res/values-pl/text_vars.xml b/android-app/src/main/res/values-pl/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-pl/text_vars.xml rename to android-app/src/main/res/values-pl/text_vars.xml diff --git a/android-app-core/src/main/res/values-pl/text_wizard.xml b/android-app/src/main/res/values-pl/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-pl/text_wizard.xml rename to android-app/src/main/res/values-pl/text_wizard.xml diff --git a/android-app-core/src/main/res/values-pt-rbr/text_about.xml b/android-app/src/main/res/values-pt-rbr/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-pt-rbr/text_about.xml rename to android-app/src/main/res/values-pt-rbr/text_about.xml diff --git a/android-app-core/src/main/res/values-pt-rbr/text_functions.xml b/android-app/src/main/res/values-pt-rbr/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-pt-rbr/text_functions.xml rename to android-app/src/main/res/values-pt-rbr/text_functions.xml diff --git a/android-app-core/src/main/res/values-pt-rbr/text_operators.xml b/android-app/src/main/res/values-pt-rbr/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-pt-rbr/text_operators.xml rename to android-app/src/main/res/values-pt-rbr/text_operators.xml diff --git a/android-app-core/src/main/res/values-pt-rbr/text_preferences.xml b/android-app/src/main/res/values-pt-rbr/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-pt-rbr/text_preferences.xml rename to android-app/src/main/res/values-pt-rbr/text_preferences.xml diff --git a/android-app-core/src/main/res/values-pt-rbr/text_strings.xml b/android-app/src/main/res/values-pt-rbr/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-pt-rbr/text_strings.xml rename to android-app/src/main/res/values-pt-rbr/text_strings.xml diff --git a/android-app-core/src/main/res/values-pt-rbr/text_vars.xml b/android-app/src/main/res/values-pt-rbr/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-pt-rbr/text_vars.xml rename to android-app/src/main/res/values-pt-rbr/text_vars.xml diff --git a/android-app-core/src/main/res/values-pt-rbr/text_wizard.xml b/android-app/src/main/res/values-pt-rbr/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-pt-rbr/text_wizard.xml rename to android-app/src/main/res/values-pt-rbr/text_wizard.xml diff --git a/android-app-core/src/main/res/values-ru/text_about.xml b/android-app/src/main/res/values-ru/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-ru/text_about.xml rename to android-app/src/main/res/values-ru/text_about.xml diff --git a/android-app-core/src/main/res/values-ru/text_functions.xml b/android-app/src/main/res/values-ru/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-ru/text_functions.xml rename to android-app/src/main/res/values-ru/text_functions.xml diff --git a/android-app-core/src/main/res/values-ru/text_operators.xml b/android-app/src/main/res/values-ru/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-ru/text_operators.xml rename to android-app/src/main/res/values-ru/text_operators.xml diff --git a/android-app-core/src/main/res/values-ru/text_preferences.xml b/android-app/src/main/res/values-ru/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-ru/text_preferences.xml rename to android-app/src/main/res/values-ru/text_preferences.xml diff --git a/android-app-core/src/main/res/values-ru/text_release_notes.xml b/android-app/src/main/res/values-ru/text_release_notes.xml similarity index 100% rename from android-app-core/src/main/res/values-ru/text_release_notes.xml rename to android-app/src/main/res/values-ru/text_release_notes.xml diff --git a/android-app-core/src/main/res/values-ru/text_strings.xml b/android-app/src/main/res/values-ru/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-ru/text_strings.xml rename to android-app/src/main/res/values-ru/text_strings.xml diff --git a/android-app-core/src/main/res/values-ru/text_vars.xml b/android-app/src/main/res/values-ru/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-ru/text_vars.xml rename to android-app/src/main/res/values-ru/text_vars.xml diff --git a/android-app-core/src/main/res/values-ru/text_wizard.xml b/android-app/src/main/res/values-ru/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-ru/text_wizard.xml rename to android-app/src/main/res/values-ru/text_wizard.xml diff --git a/android-app-core/src/main/res/values-uk/text_about.xml b/android-app/src/main/res/values-uk/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-uk/text_about.xml rename to android-app/src/main/res/values-uk/text_about.xml diff --git a/android-app-core/src/main/res/values-uk/text_functions.xml b/android-app/src/main/res/values-uk/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-uk/text_functions.xml rename to android-app/src/main/res/values-uk/text_functions.xml diff --git a/android-app-core/src/main/res/values-uk/text_operators.xml b/android-app/src/main/res/values-uk/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-uk/text_operators.xml rename to android-app/src/main/res/values-uk/text_operators.xml diff --git a/android-app-core/src/main/res/values-uk/text_preferences.xml b/android-app/src/main/res/values-uk/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-uk/text_preferences.xml rename to android-app/src/main/res/values-uk/text_preferences.xml diff --git a/android-app-core/src/main/res/values-uk/text_strings.xml b/android-app/src/main/res/values-uk/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-uk/text_strings.xml rename to android-app/src/main/res/values-uk/text_strings.xml diff --git a/android-app-core/src/main/res/values-uk/text_vars.xml b/android-app/src/main/res/values-uk/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-uk/text_vars.xml rename to android-app/src/main/res/values-uk/text_vars.xml diff --git a/android-app-core/src/main/res/values-uk/text_wizard.xml b/android-app/src/main/res/values-uk/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-uk/text_wizard.xml rename to android-app/src/main/res/values-uk/text_wizard.xml diff --git a/android-app-core/src/main/res/values-vi/text_about.xml b/android-app/src/main/res/values-vi/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-vi/text_about.xml rename to android-app/src/main/res/values-vi/text_about.xml diff --git a/android-app-core/src/main/res/values-vi/text_functions.xml b/android-app/src/main/res/values-vi/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-vi/text_functions.xml rename to android-app/src/main/res/values-vi/text_functions.xml diff --git a/android-app-core/src/main/res/values-vi/text_operators.xml b/android-app/src/main/res/values-vi/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-vi/text_operators.xml rename to android-app/src/main/res/values-vi/text_operators.xml diff --git a/android-app-core/src/main/res/values-vi/text_preferences.xml b/android-app/src/main/res/values-vi/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-vi/text_preferences.xml rename to android-app/src/main/res/values-vi/text_preferences.xml diff --git a/android-app-core/src/main/res/values-vi/text_strings.xml b/android-app/src/main/res/values-vi/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-vi/text_strings.xml rename to android-app/src/main/res/values-vi/text_strings.xml diff --git a/android-app-core/src/main/res/values-vi/text_vars.xml b/android-app/src/main/res/values-vi/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-vi/text_vars.xml rename to android-app/src/main/res/values-vi/text_vars.xml diff --git a/android-app-core/src/main/res/values-vi/text_wizard.xml b/android-app/src/main/res/values-vi/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-vi/text_wizard.xml rename to android-app/src/main/res/values-vi/text_wizard.xml diff --git a/android-app-core/src/main/res/values-zh-rcn/text_about.xml b/android-app/src/main/res/values-zh-rcn/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rcn/text_about.xml rename to android-app/src/main/res/values-zh-rcn/text_about.xml diff --git a/android-app-core/src/main/res/values-zh-rcn/text_functions.xml b/android-app/src/main/res/values-zh-rcn/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rcn/text_functions.xml rename to android-app/src/main/res/values-zh-rcn/text_functions.xml diff --git a/android-app-core/src/main/res/values-zh-rcn/text_operators.xml b/android-app/src/main/res/values-zh-rcn/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rcn/text_operators.xml rename to android-app/src/main/res/values-zh-rcn/text_operators.xml diff --git a/android-app-core/src/main/res/values-zh-rcn/text_preferences.xml b/android-app/src/main/res/values-zh-rcn/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rcn/text_preferences.xml rename to android-app/src/main/res/values-zh-rcn/text_preferences.xml diff --git a/android-app-core/src/main/res/values-zh-rcn/text_strings.xml b/android-app/src/main/res/values-zh-rcn/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rcn/text_strings.xml rename to android-app/src/main/res/values-zh-rcn/text_strings.xml diff --git a/android-app-core/src/main/res/values-zh-rcn/text_vars.xml b/android-app/src/main/res/values-zh-rcn/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rcn/text_vars.xml rename to android-app/src/main/res/values-zh-rcn/text_vars.xml diff --git a/android-app-core/src/main/res/values-zh-rcn/text_wizard.xml b/android-app/src/main/res/values-zh-rcn/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rcn/text_wizard.xml rename to android-app/src/main/res/values-zh-rcn/text_wizard.xml diff --git a/android-app-core/src/main/res/values-zh-rtw/text_about.xml b/android-app/src/main/res/values-zh-rtw/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rtw/text_about.xml rename to android-app/src/main/res/values-zh-rtw/text_about.xml diff --git a/android-app-core/src/main/res/values-zh-rtw/text_functions.xml b/android-app/src/main/res/values-zh-rtw/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rtw/text_functions.xml rename to android-app/src/main/res/values-zh-rtw/text_functions.xml diff --git a/android-app-core/src/main/res/values-zh-rtw/text_operators.xml b/android-app/src/main/res/values-zh-rtw/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rtw/text_operators.xml rename to android-app/src/main/res/values-zh-rtw/text_operators.xml diff --git a/android-app-core/src/main/res/values-zh-rtw/text_preferences.xml b/android-app/src/main/res/values-zh-rtw/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rtw/text_preferences.xml rename to android-app/src/main/res/values-zh-rtw/text_preferences.xml diff --git a/android-app-core/src/main/res/values-zh-rtw/text_strings.xml b/android-app/src/main/res/values-zh-rtw/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rtw/text_strings.xml rename to android-app/src/main/res/values-zh-rtw/text_strings.xml diff --git a/android-app-core/src/main/res/values-zh-rtw/text_vars.xml b/android-app/src/main/res/values-zh-rtw/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rtw/text_vars.xml rename to android-app/src/main/res/values-zh-rtw/text_vars.xml diff --git a/android-app-core/src/main/res/values-zh-rtw/text_wizard.xml b/android-app/src/main/res/values-zh-rtw/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values-zh-rtw/text_wizard.xml rename to android-app/src/main/res/values-zh-rtw/text_wizard.xml diff --git a/android-app-core/src/main/res/values/admob.xml b/android-app/src/main/res/values/admob.xml similarity index 100% rename from android-app-core/src/main/res/values/admob.xml rename to android-app/src/main/res/values/admob.xml diff --git a/android-app/src/main/res/values/arrays.xml b/android-app/src/main/res/values/arrays.xml index 23de9ed4..ee30e48f 100644 --- a/android-app/src/main/res/values/arrays.xml +++ b/android-app/src/main/res/values/arrays.xml @@ -101,4 +101,36 @@ bin + + + @string/cpp_solid_line_style + @string/cpp_dashed_line_style + @string/cpp_dotted_line_style + @string/cpp_dash_dotted_line_style + + + + @string/cpp_monochrome_line_color_type + @string/cpp_color_map_line_color_type + + + + @string/p_white_line_color + @string/p_blue_line_color + @string/p_red_line_color + @string/p_green_line_color + @string/p_grey_line_color + + + white + blue + red + green + grey + \ No newline at end of file diff --git a/android-app-core/src/main/res/values/attributes.xml b/android-app/src/main/res/values/attributes.xml similarity index 100% rename from android-app-core/src/main/res/values/attributes.xml rename to android-app/src/main/res/values/attributes.xml diff --git a/android-app-core/src/main/res/values/colors.xml b/android-app/src/main/res/values/colors.xml similarity index 96% rename from android-app-core/src/main/res/values/colors.xml rename to android-app/src/main/res/values/colors.xml index e7fed57d..1917354d 100644 --- a/android-app-core/src/main/res/values/colors.xml +++ b/android-app/src/main/res/values/colors.xml @@ -36,4 +36,5 @@ #088e3a #651456 #393939 + #ff707070 \ No newline at end of file diff --git a/android-app-core/src/main/res/values/dimens.xml b/android-app/src/main/res/values/dimens.xml similarity index 60% rename from android-app-core/src/main/res/values/dimens.xml rename to android-app/src/main/res/values/dimens.xml index 96f59461..9390fec6 100644 --- a/android-app-core/src/main/res/values/dimens.xml +++ b/android-app/src/main/res/values/dimens.xml @@ -1,26 +1,11 @@ - - + + 16sp + 25sp + 16sp + 25sp + 6dp + 300dp 20sp 0.5dp 2.5dp diff --git a/android-app-core/src/main/res/values/ids.xml b/android-app/src/main/res/values/ids.xml similarity index 95% rename from android-app-core/src/main/res/values/ids.xml rename to android-app/src/main/res/values/ids.xml index aa8c5264..e21a5ace 100644 --- a/android-app-core/src/main/res/values/ids.xml +++ b/android-app/src/main/res/values/ids.xml @@ -60,7 +60,4 @@ - - - \ No newline at end of file diff --git a/android-app-core/src/main/res/values/styles.xml b/android-app/src/main/res/values/styles.xml similarity index 86% rename from android-app-core/src/main/res/values/styles.xml rename to android-app/src/main/res/values/styles.xml index 25a17c9b..5822e305 100644 --- a/android-app-core/src/main/res/values/styles.xml +++ b/android-app/src/main/res/values/styles.xml @@ -122,4 +122,23 @@ + + + + + + + + \ No newline at end of file diff --git a/android-app-core/src/main/res/values/text_about.xml b/android-app/src/main/res/values/text_about.xml similarity index 100% rename from android-app-core/src/main/res/values/text_about.xml rename to android-app/src/main/res/values/text_about.xml diff --git a/android-app-core/src/main/res/values/text_functions.xml b/android-app/src/main/res/values/text_functions.xml similarity index 100% rename from android-app-core/src/main/res/values/text_functions.xml rename to android-app/src/main/res/values/text_functions.xml diff --git a/android-app-core/src/main/res/values/text_operators.xml b/android-app/src/main/res/values/text_operators.xml similarity index 100% rename from android-app-core/src/main/res/values/text_operators.xml rename to android-app/src/main/res/values/text_operators.xml diff --git a/android-app-core/src/main/res/values/text_preferences.xml b/android-app/src/main/res/values/text_preferences.xml similarity index 100% rename from android-app-core/src/main/res/values/text_preferences.xml rename to android-app/src/main/res/values/text_preferences.xml diff --git a/android-app-core/src/main/res/values/text_release_notes.xml b/android-app/src/main/res/values/text_release_notes.xml similarity index 100% rename from android-app-core/src/main/res/values/text_release_notes.xml rename to android-app/src/main/res/values/text_release_notes.xml diff --git a/android-app-core/src/main/res/values/text_strings.xml b/android-app/src/main/res/values/text_strings.xml similarity index 100% rename from android-app-core/src/main/res/values/text_strings.xml rename to android-app/src/main/res/values/text_strings.xml diff --git a/android-app-core/src/main/res/values/text_vars.xml b/android-app/src/main/res/values/text_vars.xml similarity index 100% rename from android-app-core/src/main/res/values/text_vars.xml rename to android-app/src/main/res/values/text_vars.xml diff --git a/android-app-core/src/main/res/values/text_wizard.xml b/android-app/src/main/res/values/text_wizard.xml similarity index 100% rename from android-app-core/src/main/res/values/text_wizard.xml rename to android-app/src/main/res/values/text_wizard.xml diff --git a/android-app-core/src/main/res/values/theme_gray.xml b/android-app/src/main/res/values/theme_gray.xml similarity index 100% rename from android-app-core/src/main/res/values/theme_gray.xml rename to android-app/src/main/res/values/theme_gray.xml diff --git a/android-app-core/src/main/res/values/theme_light_blue.xml b/android-app/src/main/res/values/theme_light_blue.xml similarity index 100% rename from android-app-core/src/main/res/values/theme_light_blue.xml rename to android-app/src/main/res/values/theme_light_blue.xml diff --git a/android-app-core/src/main/res/values/theme_metro_blue.xml b/android-app/src/main/res/values/theme_metro_blue.xml similarity index 100% rename from android-app-core/src/main/res/values/theme_metro_blue.xml rename to android-app/src/main/res/values/theme_metro_blue.xml diff --git a/android-app-core/src/main/res/values/theme_metro_green.xml b/android-app/src/main/res/values/theme_metro_green.xml similarity index 100% rename from android-app-core/src/main/res/values/theme_metro_green.xml rename to android-app/src/main/res/values/theme_metro_green.xml diff --git a/android-app-core/src/main/res/values/theme_metro_purple.xml b/android-app/src/main/res/values/theme_metro_purple.xml similarity index 100% rename from android-app-core/src/main/res/values/theme_metro_purple.xml rename to android-app/src/main/res/values/theme_metro_purple.xml diff --git a/android-app-core/src/main/res/values/theme_violet.xml b/android-app/src/main/res/values/theme_violet.xml similarity index 100% rename from android-app-core/src/main/res/values/theme_violet.xml rename to android-app/src/main/res/values/theme_violet.xml diff --git a/settings.gradle b/settings.gradle index 14f05a24..a957f493 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ -include ':core', ':android-app-core', ':android-app-widget', ':android-app-onscreen', ':android-app' -include ':android-app-core-tests', ':android-app-tests' +include ':core', ':android-app' +include ':android-app-tests'