Revive the project

This commit is contained in:
Sergey Solovyev
2023-09-15 10:08:16 +02:00
parent 22448df392
commit 1fc9ffef3a
481 changed files with 3061 additions and 3414 deletions

View File

@@ -42,7 +42,8 @@ public final class Check {
private static boolean isJunit() {
final StackTraceElement[] stackTrace = currentThread().getStackTrace();
for (StackTraceElement element : stackTrace) {
if (element.getClassName().startsWith("org.junit.")) {
String className = element.getClassName();
if (className.startsWith("org.junit.") || className.startsWith("org.robolectric.")) {
return true;
}
}

View File

@@ -27,7 +27,7 @@ import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import dagger.Lazy;
import jscl.math.Generic;

View File

@@ -9,10 +9,12 @@ import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.LoadAdError;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -81,11 +83,6 @@ public class AdView extends FrameLayout {
admobView.setAdListener(admobListener);
final AdRequest.Builder b = new AdRequest.Builder();
b.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
if (BuildConfig.DEBUG) {
// LG Nexus 5
b.addTestDevice("B80E676D60CE6FDBE1B84A55464E3FE1");
}
admobView.loadAd(b.build());
}
@@ -127,7 +124,7 @@ public class AdView extends FrameLayout {
}
@Override
public void onAdFailedToLoad(int errorCode) {
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
if (adView != null) {
adView.hide();
adView = null;

View File

@@ -36,13 +36,8 @@ import android.net.Uri;
import android.os.Build;
import android.os.IBinder;
import android.os.Looper;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.view.ContextThemeWrapper;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
@@ -54,6 +49,11 @@ import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.floating.FloatingCalculatorService;
@@ -312,7 +312,7 @@ public final class App {
@Nonnull
public static <T> ArrayAdapter<T> makeSimpleSpinnerAdapter(@NonNull Context context) {
return new ArrayAdapter<>(context, R.layout.support_simple_spinner_dropdown_item);
return new ArrayAdapter<>(context, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item);
}
public interface ViewProcessor<V> {
@@ -366,4 +366,4 @@ public final class App {
public static int toPixels(@Nonnull View view, float dps) {
return toPixels(view.getContext(), dps);
}
}
}

View File

@@ -7,12 +7,12 @@ import android.graphics.Typeface;
import android.os.Handler;
import android.os.Looper;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.util.Log;
import com.squareup.otto.Bus;
import com.squareup.otto.GeneratedHandlerFinder;
import com.squareup.otto.GeneratedHandlerFinder;
import org.solovyev.android.calculator.language.Languages;
import org.solovyev.android.calculator.wizard.CalculatorWizards;
import org.solovyev.android.checkout.Billing;

View File

@@ -10,14 +10,6 @@ import android.app.Activity;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.DrawableRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.StringRes;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
@@ -25,6 +17,14 @@ import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;
import androidx.annotation.DrawableRes;
import androidx.annotation.LayoutRes;
import androidx.annotation.StringRes;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.ga.Ga;
import org.solovyev.android.calculator.language.Language;
@@ -36,8 +36,6 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import dagger.Lazy;
public abstract class BaseActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@@ -58,13 +56,10 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr
Lazy<Ga> ga;
@Inject
Typeface typeface;
@BindView(R.id.main)
ViewGroup mainView;
@Nullable
@BindView(R.id.toolbar)
Toolbar toolbar;
@Nullable
@BindView(R.id.fab)
FloatingActionButton fab;
@Nonnull
private Preferences.Gui.Theme theme = Preferences.Gui.Theme.material_theme;
@@ -159,12 +154,16 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr
private void createView() {
setContentView(layoutId);
View contentView = findViewById(android.R.id.content);
mainView = contentView.findViewById(R.id.main);
toolbar = contentView.findViewById(R.id.toolbar);
fab = contentView.findViewById(R.id.fab);
bindViews(contentView);
// title must be updated as if a non-system language is used the value from AndroidManifest
// might be cached
if (titleId != 0) {
setTitle(titleId);
}
ButterKnife.bind(this, this);
fixFonts(mainView, typeface);
initToolbar();
@@ -172,6 +171,8 @@ public abstract class BaseActivity extends AppCompatActivity implements SharedPr
tabs.onCreate();
}
protected void bindViews(@Nonnull View contentView) {}
private void initToolbar() {
if (toolbar == null) {
return;

View File

@@ -5,19 +5,19 @@ import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AlertDialog;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentActivity;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
import com.google.android.material.textfield.TextInputLayout;
import org.solovyev.android.calculator.ga.Ga;
import javax.inject.Inject;

View File

@@ -3,11 +3,11 @@ package org.solovyev.android.calculator;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.v4.app.Fragment;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import android.view.*;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import org.solovyev.android.calculator.ads.AdUi;
import org.solovyev.android.plotter.Check;

View File

@@ -23,8 +23,8 @@
package org.solovyev.android.calculator;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;

View File

@@ -25,11 +25,9 @@ package org.solovyev.android.calculator;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.StringRes;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.GravityCompat;
import android.support.v7.widget.PopupMenu;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.PopupMenu;
import androidx.core.view.GravityCompat;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.StyleSpan;
@@ -38,10 +36,12 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout;
import butterknife.BindView;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import jscl.AngleUnit;
import jscl.NumeralBase;
import org.solovyev.android.calculator.converter.ConverterFragment;
import org.solovyev.android.calculator.databinding.ActivityMainBinding;
import org.solovyev.android.calculator.history.History;
import org.solovyev.android.calculator.keyboard.PartialKeyboardUi;
import org.solovyev.android.widget.menu.CustomPopupMenu;
@@ -65,11 +65,8 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList
@Inject
StartupHelper startupHelper;
@Nullable
@BindView(R.id.partial_keyboard)
View partialKeyboard;
@BindView(R.id.editor)
FrameLayout editor;
@BindView(R.id.main_menu)
View mainMenuButton;
private boolean useBackAsPrevious;
@@ -77,6 +74,14 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList
super(R.layout.activity_main, R.string.cpp_app_name);
}
@Override
protected void bindViews(@Nonnull View contentView) {
ActivityMainBinding binding = ActivityMainBinding.bind(contentView.findViewById(R.id.main));
partialKeyboard = binding.partialKeyboard;
editor = binding.editorContainer.editor;
mainMenuButton = binding.editorContainer.mainMenu;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -149,10 +154,8 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.main_menu:
mainMenu.toggle();
break;
if (v.getId() == R.id.main_menu) {
mainMenu.toggle();
}
}
@@ -171,7 +174,7 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList
public void toggle() {
if (popup == null) {
popup = new CustomPopupMenu(CalculatorActivity.this, mainMenuButton, GravityCompat.END, R.attr.actionOverflowMenuStyle, 0);
popup = new CustomPopupMenu(CalculatorActivity.this, mainMenuButton, GravityCompat.END, android.R.attr.actionOverflowMenuStyle, 0);
popup.inflate(R.menu.main);
popup.setOnMenuItemClickListener(this);
popup.setKeepOnSubMenu(true);
@@ -227,45 +230,45 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
launcher.showSettings();
return true;
case R.id.menu_history:
launcher.showHistory();
return true;
case R.id.menu_plotter:
launcher.showPlotter();
return true;
case R.id.menu_conversion_tool:
ConverterFragment.show(CalculatorActivity.this);
return true;
case R.id.menu_about:
launcher.showAbout();
return true;
case R.id.menu_mode_engineer:
Preferences.Gui.mode.putPreference(preferences, Preferences.Gui.Mode.engineer);
restartIfModeChanged();
return true;
case R.id.menu_mode_simple:
Preferences.Gui.mode.putPreference(preferences, Preferences.Gui.Mode.simple);
restartIfModeChanged();
return true;
case R.id.menu_au_deg:
Engine.Preferences.angleUnit.putPreference(preferences, AngleUnit.deg);
return true;
case R.id.menu_au_rad:
Engine.Preferences.angleUnit.putPreference(preferences, AngleUnit.rad);
return true;
case R.id.menu_nb_bin:
Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.bin);
return true;
case R.id.menu_nb_dec:
Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.dec);
return true;
case R.id.menu_nb_hex:
Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.hex);
return true;
int itemId = item.getItemId();
if (itemId == R.id.menu_settings) {
launcher.showSettings();
return true;
} else if (itemId == R.id.menu_history) {
launcher.showHistory();
return true;
} else if (itemId == R.id.menu_plotter) {
launcher.showPlotter();
return true;
} else if (itemId == R.id.menu_conversion_tool) {
ConverterFragment.show(CalculatorActivity.this);
return true;
} else if (itemId == R.id.menu_about) {
launcher.showAbout();
return true;
} else if (itemId == R.id.menu_mode_engineer) {
Preferences.Gui.mode.putPreference(preferences, Preferences.Gui.Mode.engineer);
restartIfModeChanged();
return true;
} else if (itemId == R.id.menu_mode_simple) {
Preferences.Gui.mode.putPreference(preferences, Preferences.Gui.Mode.simple);
restartIfModeChanged();
return true;
} else if (itemId == R.id.menu_au_deg) {
Engine.Preferences.angleUnit.putPreference(preferences, AngleUnit.deg);
return true;
} else if (itemId == R.id.menu_au_rad) {
Engine.Preferences.angleUnit.putPreference(preferences, AngleUnit.rad);
return true;
} else if (itemId == R.id.menu_nb_bin) {
Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.bin);
return true;
} else if (itemId == R.id.menu_nb_dec) {
Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.dec);
return true;
} else if (itemId == R.id.menu_nb_hex) {
Engine.Preferences.numeralBase.putPreference(preferences, NumeralBase.hex);
return true;
}
return false;
}
@@ -280,4 +283,4 @@ public class CalculatorActivity extends BaseActivity implements View.OnClickList
}
}
}
}
}

View File

@@ -26,7 +26,7 @@ import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.util.Log;
import android.util.TimingLogger;

View File

@@ -23,8 +23,9 @@
package org.solovyev.android.calculator;
import android.app.Application;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.text.ClipboardManager;
import javax.annotation.Nonnull;
import javax.inject.Inject;
@@ -32,31 +33,30 @@ import javax.inject.Singleton;
@Singleton
public class Clipboard {
@SuppressWarnings("deprecation")
@Nonnull
private final ClipboardManager clipboard;
@SuppressWarnings("deprecation")
@Inject
public Clipboard(@Nonnull Application application) {
clipboard = (ClipboardManager) application.getSystemService(Context.CLIPBOARD_SERVICE);
}
@SuppressWarnings("deprecation")
@Nonnull
public String getText() {
if (clipboard.hasText()) {
return String.valueOf(clipboard.getText());
ClipData primaryClip = clipboard.getPrimaryClip();
if (primaryClip != null && primaryClip.getItemCount() > 0) {
final CharSequence text = primaryClip.getItemAt(0).getText();
return text != null ? text.toString() : "";
}
return "";
}
public void setText(@Nonnull CharSequence text) {
clipboard.setText(text);
clipboard.setPrimaryClip(ClipData.newPlainText("", text));
}
public void setText(@Nonnull String text) {
clipboard.setText(text);
setText((CharSequence) text);
}
}

View File

@@ -24,7 +24,7 @@ package org.solovyev.android.calculator;
import android.app.Application;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;

View File

@@ -25,14 +25,12 @@ package org.solovyev.android.calculator;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.support.v7.app.AlertDialog;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import android.view.*;
import butterknife.BindView;
import butterknife.ButterKnife;
import androidx.appcompat.app.AlertDialog;
import com.squareup.otto.Bus;
import jscl.NumeralBase;
import jscl.math.Generic;
@@ -63,19 +61,17 @@ public class DisplayFragment extends BaseFragment implements View.OnClickListene
@Nullable
public static ConversionMenuItem getByTitle(int title) {
switch (title) {
case R.string.convert_to_bin:
return to_bin;
case R.string.convert_to_dec:
return to_dec;
case R.string.convert_to_hex:
return to_hex;
if (title == R.string.convert_to_bin) {
return to_bin;
} else if (title == R.string.convert_to_dec) {
return to_dec;
} else if (title == R.string.convert_to_hex) {
return to_hex;
}
return null;
}
}
@BindView(R.id.calculator_display)
DisplayView displayView;
@Inject
SharedPreferences preferences;
@@ -106,7 +102,7 @@ public class DisplayFragment extends BaseFragment implements View.OnClickListene
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.bind(this, view);
displayView = view.findViewById(R.id.calculator_display);
display.setView(displayView);
displayView.setOnClickListener(this);
return view;
@@ -181,30 +177,27 @@ public class DisplayFragment extends BaseFragment implements View.OnClickListene
public boolean onMenuItemClick(MenuItem item) {
final DisplayState state = display.getState();
final Generic result = state.getResult();
switch (item.getItemId()) {
case R.string.cpp_copy:
display.copy();
return true;
case R.string.convert_to_bin:
case R.string.convert_to_dec:
case R.string.convert_to_hex:
final ConversionMenuItem menuItem = ConversionMenuItem.getByTitle(item.getItemId());
if (menuItem == null) {
return false;
}
if (result != null) {
calculator.convert(state, menuItem.toNumeralBase);
}
return true;
case R.string.c_convert:
ConverterFragment.show(getActivity(), getValue(result));
return true;
case R.string.c_plot:
launcher.plot(result);
return true;
default:
int itemId = item.getItemId();
if (itemId == R.string.cpp_copy) {
display.copy();
return true;
} else if (itemId == R.string.convert_to_bin || itemId == R.string.convert_to_dec || itemId == R.string.convert_to_hex) {
final ConversionMenuItem menuItem = ConversionMenuItem.getByTitle(item.getItemId());
if (menuItem == null) {
return false;
}
if (result != null) {
calculator.convert(state, menuItem.toNumeralBase);
}
return true;
} else if (itemId == R.string.c_convert) {
ConverterFragment.show(getActivity(), getValue(result));
return true;
} else if (itemId == R.string.c_plot) {
launcher.plot(result);
return true;
}
return false;
}
private static double getValue(@Nullable Generic result) {

View File

@@ -28,8 +28,8 @@ import static android.util.TypedValue.applyDimension;
import android.content.Context;
import android.content.res.Resources;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.util.AttributeSet;

View File

@@ -27,8 +27,8 @@ import static java.lang.Math.min;
import android.app.Application;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import android.text.TextUtils;
import com.squareup.otto.Bus;
@@ -173,12 +173,13 @@ public class Editor {
state = newState;
cancelAsyncHighlightText();
highlighterTask = new AsyncHighlighter(oldState, newState, force, textProcessor);
if (highlighterTask.shouldAsync()) {
highlighterTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
AsyncHighlighter newHighlighterTask = new AsyncHighlighter(oldState, newState, force, textProcessor);
highlighterTask = newHighlighterTask;
if (newHighlighterTask.shouldAsync()) {
newHighlighterTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
return;
}
highlighterTask.onPostExecute(newState);
newHighlighterTask.onPostExecute(newState);
Check.isNull(highlighterTask);
}

View File

@@ -26,17 +26,15 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import butterknife.BindView;
import butterknife.ButterKnife;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import org.solovyev.android.calculator.databinding.CppAppEditorBinding;
public class EditorFragment extends BaseFragment {
@Inject
Editor editor;
@BindView(R.id.calculator_editor)
EditorView editorView;
public EditorFragment() {
@@ -52,7 +50,8 @@ public class EditorFragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.bind(this, view);
CppAppEditorBinding binding = CppAppEditorBinding.bind(view);
editorView = binding.calculatorEditor;
editor.setView(editorView);
return view;
}

View File

@@ -24,9 +24,9 @@ package org.solovyev.android.calculator;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.annotation.VisibleForTesting;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;
import android.text.TextUtils;
import com.squareup.otto.Bus;

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
@@ -174,47 +174,34 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
if (user.isVibrateOnKeypress()) {
v.performHapticFeedback(KEYBOARD_TAP, FLAG_IGNORE_GLOBAL_SETTING | FLAG_IGNORE_VIEW_SETTING);
}
switch (v.getId()) {
case R.id.cpp_kb_button_divide:
user.insertOperator('/');
break;
case R.id.cpp_kb_button_plus:
user.insertOperator('+');
break;
case R.id.cpp_kb_button_minus:
user.insertOperator('-');
break;
case R.id.cpp_kb_button_multiply:
user.insertOperator("×");
break;
case R.id.cpp_kb_button_functions_constants:
user.showFunctionsConstants(v);
break;
case R.id.cpp_kb_button_functions:
user.showFunctions(v);
break;
case R.id.cpp_kb_button_constants:
user.showConstants(v);
break;
case R.id.cpp_kb_button_space:
user.insertText(" ", 0);
break;
case R.id.cpp_kb_button_keyboard:
user.showIme();
break;
case R.id.cpp_kb_button_clear:
user.getEditor().setText("");
user.getEditor().setSelection(0);
break;
case R.id.cpp_kb_button_brackets:
user.insertText("()", -1);
break;
case R.id.cpp_kb_button_close:
user.done();
break;
default:
onDefaultClick(v);
break;
int id = v.getId();
if (id == R.id.cpp_kb_button_divide) {
user.insertOperator('/');
} else if (id == R.id.cpp_kb_button_plus) {
user.insertOperator('+');
} else if (id == R.id.cpp_kb_button_minus) {
user.insertOperator('-');
} else if (id == R.id.cpp_kb_button_multiply) {
user.insertOperator("×");
} else if (id == R.id.cpp_kb_button_functions_constants) {
user.showFunctionsConstants(v);
} else if (id == R.id.cpp_kb_button_functions) {
user.showFunctions(v);
} else if (id == R.id.cpp_kb_button_constants) {
user.showConstants(v);
} else if (id == R.id.cpp_kb_button_space) {
user.insertText(" ", 0);
} else if (id == R.id.cpp_kb_button_keyboard) {
user.showIme();
} else if (id == R.id.cpp_kb_button_clear) {
user.getEditor().setText("");
user.getEditor().setSelection(0);
} else if (id == R.id.cpp_kb_button_brackets) {
user.insertText("()", -1);
} else if (id == R.id.cpp_kb_button_close) {
user.done();
} else {
onDefaultClick(v);
}
user.getEditor().requestFocus();
}
@@ -256,4 +243,4 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
return true;
}
}
}
}

View File

@@ -22,8 +22,8 @@
package org.solovyev.android.calculator;
import android.support.annotation.StringRes;
import android.support.v4.app.Fragment;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import org.solovyev.android.calculator.about.AboutFragment;
import org.solovyev.android.calculator.about.ReleaseNotesFragment;
import org.solovyev.android.calculator.functions.FunctionsFragment;

View File

@@ -25,7 +25,7 @@ package org.solovyev.android.calculator;
import static org.solovyev.android.calculator.Engine.Preferences.numeralBase;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.text.Spannable;
import android.text.TextUtils;
import android.util.Log;
@@ -366,4 +366,4 @@ public class Keyboard implements SharedPreferences.OnSharedPreferenceChangeListe
this.mode = mode;
}
}
}
}

View File

@@ -22,12 +22,10 @@
package org.solovyev.android.calculator;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import butterknife.ButterKnife;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.keyboard.KeyboardUi;
@@ -36,8 +34,6 @@ import javax.inject.Inject;
public class KeyboardFragment extends BaseFragment {
@Inject
SharedPreferences preferences;
@Inject
KeyboardUi keyboardUi;
@@ -54,7 +50,6 @@ public class KeyboardFragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.bind(this, view);
Check.isNotNull(view);
keyboardUi.onCreateView(getActivity(), view);
return view;

View File

@@ -1,8 +1,8 @@
package org.solovyev.android.calculator;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import javax.annotation.Nonnull;

View File

@@ -24,7 +24,7 @@ package org.solovyev.android.calculator;
import android.app.Application;
import android.os.Handler;
import android.support.annotation.StringRes;
import androidx.annotation.StringRes;
import android.widget.Toast;
import org.solovyev.common.msg.Message;

View File

@@ -31,11 +31,11 @@ import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.provider.Settings;
import android.support.annotation.ColorRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.annotation.StyleRes;
import androidx.annotation.ColorRes;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.annotation.StyleRes;
import android.text.TextUtils;
import android.util.SparseArray;
import android.view.ContextThemeWrapper;

View File

@@ -22,7 +22,7 @@
package org.solovyev.android.calculator;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import jscl.math.function.IConstant;
import javax.annotation.Nonnull;

View File

@@ -2,9 +2,9 @@ package org.solovyev.android.calculator;
import android.app.Activity;
import android.content.DialogInterface;
import android.support.annotation.StringRes;
import android.support.v7.app.AlertDialog;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import javax.annotation.Nonnull;
public class RemovalConfirmationDialog {

View File

@@ -1,6 +1,6 @@
package org.solovyev.android.calculator;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.Check;
import java.util.ArrayList;

View File

@@ -6,9 +6,9 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import org.solovyev.android.calculator.wizard.CalculatorWizards;
import org.solovyev.android.wizard.Wizard;
import org.solovyev.android.wizard.Wizards;

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator;
import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import android.util.Log;
import org.solovyev.android.Check;
@@ -118,4 +118,4 @@ class TaskExecutor {
void setSynchronous() {
synchronous = true;
}
}
}

View File

@@ -41,7 +41,7 @@ public class ToJsclTextProcessor implements TextProcessor<PreparedExpression, St
@Nonnull
private static final Integer MAX_DEPTH = 20;
@Inject
Engine engine;
@@ -50,7 +50,17 @@ public class ToJsclTextProcessor implements TextProcessor<PreparedExpression, St
}
private static PreparedExpression processWithDepth(@Nonnull String s, int depth, @Nonnull List<IConstant> undefinedVars, @Nonnull Engine engine) throws ParseException {
return replaceVariables(processExpression(s, engine).toString(), depth, undefinedVars, engine);
return replaceVariables(processExpression(removeWhitespaces(s), engine).toString(), depth, undefinedVars, engine);
}
private static String removeWhitespaces(String s) {
final StringBuilder res = new StringBuilder(s.length());
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isWhitespace(c)) continue;
res.append(c);
}
return res.toString();
}
@Nonnull

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.prefs.BooleanPreference;
import org.solovyev.android.prefs.IntegerPreference;

View File

@@ -22,7 +22,7 @@
package org.solovyev.android.calculator;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import com.google.common.base.Strings;

View File

@@ -4,7 +4,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Vibrator;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import org.solovyev.android.calculator.buttons.CppButton;
@@ -40,7 +40,9 @@ public final class WidgetReceiver extends BroadcastReceiver {
return;
}
cast(context).getComponent().inject(this);
if (keyboard == null || history == null) {
cast(context).getComponent().inject(this);
}
final int buttonId = intent.getIntExtra(ACTION_BUTTON_ID_EXTRA, 0);
final CppButton button = CppButton.getById(buttonId);

View File

@@ -23,7 +23,7 @@
package org.solovyev.android.calculator.about;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.BaseActivity;

View File

@@ -29,24 +29,19 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.BaseFragment;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.databinding.FragmentAboutBinding;
import static android.view.View.GONE;
import static org.solovyev.common.text.Strings.isEmpty;
public class AboutFragment extends BaseFragment {
@BindView(R.id.about_image)
ImageView imageView;
@BindView(R.id.about_text)
TextView textView;
@BindView(R.id.about_translators_label)
TextView translatorsLabel;
@BindView(R.id.about_translators)
TextView translatorsView;
public AboutFragment() {
@@ -56,7 +51,11 @@ public class AboutFragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.bind(this, view);
final FragmentAboutBinding binding = FragmentAboutBinding.bind(view);
imageView = binding.aboutImage;
textView = binding.aboutText;
translatorsLabel = binding.aboutTranslatorsLabel;
translatorsView = binding.aboutTranslators;
if (App.getTheme().light) {
imageView.setImageResource(R.drawable.logo_wizard_light);
}

View File

@@ -29,15 +29,13 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import org.solovyev.android.calculator.BaseFragment;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.databinding.FragmentReleaseNotesBinding;
import org.solovyev.android.calculator.release.ReleaseNotes;
public class ReleaseNotesFragment extends BaseFragment {
@BindView(R.id.releasenotes_text)
TextView text;
public ReleaseNotesFragment() {
@@ -47,7 +45,8 @@ public class ReleaseNotesFragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.bind(this, view);
final FragmentReleaseNotesBinding binding = FragmentReleaseNotesBinding.bind(view);
text = binding.releasenotesText;
text.setMovementMethod(LinkMovementMethod.getInstance());
text.setText(Html.fromHtml(ReleaseNotes.getReleaseNotes(getActivity())));
return view;

View File

@@ -4,7 +4,7 @@ import static org.solovyev.android.checkout.ProductTypes.IN_APP;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.view.View;
import org.solovyev.android.calculator.AdView;
@@ -16,8 +16,6 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
public class AdUi {
@@ -26,7 +24,6 @@ public class AdUi {
@NonNull
private final Handler handler;
@Nullable
@BindView(R.id.cpp_ad)
AdView adView;
@Nullable
private Boolean adFree = null;
@@ -92,7 +89,7 @@ public class AdUi {
}
public void onCreateView(@NonNull View view) {
ButterKnife.bind(this, view);
adView = view.findViewById(R.id.cpp_ad);
}
public void onPause() {

View File

@@ -1,6 +1,6 @@
package org.solovyev.android.calculator.calculations;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.calculator.DisplayState;

View File

@@ -1,6 +1,6 @@
package org.solovyev.android.calculator.calculations;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.calculator.DisplayState;

View File

@@ -1,6 +1,6 @@
package org.solovyev.android.calculator.calculations;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.calculator.DisplayState;

View File

@@ -1,14 +1,14 @@
package org.solovyev.android.calculator.converter;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.util.Log;
import com.google.common.base.Strings;
import javax.measure.unit.Unit;
import jscl.JsclMathEngine;
import midpcalc.Real;
import org.solovyev.android.calculator.R;
import javax.annotation.Nonnull;
import javax.measure.unit.Unit;
final class Converter {
static int unitName(@Nonnull Unit unit, @Nonnull UnitDimension dimension) {

View File

@@ -6,11 +6,8 @@ import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AlertDialog;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.Editable;
import android.text.InputType;
import android.text.TextUtils;
@@ -29,6 +26,9 @@ import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
import com.google.android.material.textfield.TextInputLayout;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.AppComponent;
import org.solovyev.android.calculator.AppModule;
@@ -38,6 +38,7 @@ import org.solovyev.android.calculator.Editor;
import org.solovyev.android.calculator.Keyboard;
import org.solovyev.android.calculator.Named;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.databinding.CppUnitConverterBinding;
import org.solovyev.android.calculator.keyboard.FloatingKeyboard;
import org.solovyev.android.calculator.keyboard.FloatingKeyboardWindow;
import org.solovyev.android.calculator.keyboard.FloatingNumberKeyboard;
@@ -48,9 +49,6 @@ import org.solovyev.android.calculator.view.EditTextCompat;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import static org.solovyev.android.calculator.UiPreferences.Converter.lastDimension;
import static org.solovyev.android.calculator.UiPreferences.Converter.lastUnitsFrom;
import static org.solovyev.android.calculator.UiPreferences.Converter.lastUnitsTo;
@@ -77,21 +75,13 @@ public class ConverterFragment extends BaseDialogFragment
SharedPreferences uiPreferences;
@Inject
Editor editor;
@BindView(R.id.converter_dimensions_spinner)
Spinner dimensionsSpinner;
@BindView(R.id.converter_spinner_from)
Spinner spinnerFrom;
@BindView(R.id.converter_label_from)
TextInputLayout labelFrom;
@BindView(R.id.converter_edittext_from)
EditTextCompat editTextFrom;
@BindView(R.id.converter_spinner_to)
Spinner spinnerTo;
@BindView(R.id.converter_label_to)
TextInputLayout labelTo;
@BindView(R.id.converter_edittext_to)
EditText editTextTo;
@BindView(R.id.converter_swap_button)
ImageButton swapButton;
private ArrayAdapter<Named<ConvertibleDimension>> dimensionsAdapter;
private ArrayAdapter<Named<Convertible>> adapterFrom;
@@ -139,9 +129,15 @@ public class ConverterFragment extends BaseDialogFragment
@Override
protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater,
@Nullable Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.cpp_unit_converter, null);
ButterKnife.bind(this, view);
final CppUnitConverterBinding binding = CppUnitConverterBinding.inflate(inflater, null, false);
dimensionsSpinner = binding.converterDimensionsSpinner;
spinnerFrom = binding.converterSpinnerFrom;
labelFrom = binding.converterLabelFrom;
editTextFrom = binding.converterEdittextFrom;
spinnerTo = binding.converterSpinnerTo;
labelTo = binding.converterLabelTo;
editTextTo = binding.converterEdittextTo;
swapButton = binding.converterSwapButton;
dimensionsAdapter = App.makeSimpleSpinnerAdapter(context);
for (ConvertibleDimension dimension : UnitDimension.values()) {
dimensionsAdapter.add(dimension.named(context));
@@ -177,7 +173,7 @@ public class ConverterFragment extends BaseDialogFragment
pendingToSelection = savedInstanceState.getInt(STATE_SELECTION_TO, NONE);
}
return view;
return binding.getRoot();
}
@Override
@@ -203,16 +199,13 @@ public class ConverterFragment extends BaseDialogFragment
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()) {
case R.id.converter_dimensions_spinner:
onDimensionChanged(dimensionsAdapter.getItem(position).item);
break;
case R.id.converter_spinner_from:
onUnitFromChanged(adapterFrom.getItem(position).item);
break;
case R.id.converter_spinner_to:
convert();
break;
int parentId = parent.getId();
if (parentId == R.id.converter_dimensions_spinner) {
onDimensionChanged(dimensionsAdapter.getItem(position).item);
} else if (parentId == R.id.converter_spinner_from) {
onUnitFromChanged(adapterFrom.getItem(position).item);
} else if (parentId == R.id.converter_spinner_to) {
convert();
}
}
@@ -299,15 +292,13 @@ public class ConverterFragment extends BaseDialogFragment
@Override
public void onFocusChange(View v, boolean hasFocus) {
switch (v.getId()) {
case R.id.converter_edittext_from:
if (!hasFocus) {
convert();
} else {
clearError(labelFrom);
showKeyboard();
}
break;
if (v.getId() == R.id.converter_edittext_from) {
if (!hasFocus) {
convert();
} else {
clearError(labelFrom);
showKeyboard();
}
}
}
@@ -346,31 +337,26 @@ public class ConverterFragment extends BaseDialogFragment
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (v.getId()) {
case R.id.converter_edittext_from:
if (actionId == EditorInfo.IME_ACTION_DONE) {
App.hideIme(editTextFrom);
convert();
return true;
}
break;
if (v.getId() == R.id.converter_edittext_from) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
App.hideIme(editTextFrom);
convert();
return true;
}
}
return false;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.converter_swap_button:
keyboardWindow.hide();
swap();
break;
case R.id.converter_edittext_from:
showKeyboard();
break;
default:
super.onClick(v);
break;
int id = v.getId();
if (id == R.id.converter_swap_button) {
keyboardWindow.hide();
swap();
} else if (id == R.id.converter_edittext_from) {
showKeyboard();
} else {
super.onClick(v);
}
}

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator.converter;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.calculator.Named;

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator.converter;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.calculator.Named;

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator.converter;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.calculator.Named;

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator.converter;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import jscl.NumeralBase;
import org.solovyev.android.calculator.Named;

View File

@@ -1,15 +1,15 @@
package org.solovyev.android.calculator.converter;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import javax.measure.unit.Unit;
import org.solovyev.android.calculator.Named;
import jscl.JsclMathEngine;
import jscl.NumeralBase;
import javax.annotation.Nonnull;
import javax.measure.unit.Unit;
final class UnitConvertible implements Convertible {
@NonNull

View File

@@ -1,9 +1,9 @@
package org.solovyev.android.calculator.converter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import org.solovyev.android.calculator.Named;
import org.solovyev.android.calculator.R;

View File

@@ -25,11 +25,11 @@ package org.solovyev.android.calculator.entities;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.text.ClipboardManager;
import android.text.TextUtils;
import android.view.ContextMenu;
@@ -45,6 +45,8 @@ import org.solovyev.android.calculator.BaseFragment;
import org.solovyev.android.calculator.CalculatorActivity;
import org.solovyev.android.calculator.Keyboard;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.databinding.FragmentEntitiesBinding;
import org.solovyev.android.calculator.databinding.FragmentEntitiesItemBinding;
import org.solovyev.common.math.MathEntity;
import org.solovyev.common.text.Strings;
@@ -57,8 +59,6 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
public abstract class BaseEntitiesFragment<E extends MathEntity> extends BaseFragment {
@@ -71,7 +71,6 @@ public abstract class BaseEntitiesFragment<E extends MathEntity> extends BaseFra
}
};
@BindView(R.id.entities_recyclerview)
public RecyclerView recyclerView;
@Inject
Keyboard keyboard;
@@ -96,7 +95,8 @@ public abstract class BaseEntitiesFragment<E extends MathEntity> extends BaseFra
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.bind(this, view);
final FragmentEntitiesBinding binding = FragmentEntitiesBinding.bind(view);
recyclerView = binding.entitiesRecyclerview;
final Context context = inflater.getContext();
adapter = new EntitiesAdapter(context, TextUtils.isEmpty(category) ? getEntities() : getEntities(category));
recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
@@ -204,19 +204,18 @@ public abstract class BaseEntitiesFragment<E extends MathEntity> extends BaseFra
protected abstract boolean onMenuItemClicked(@Nonnull MenuItem item, @Nonnull E entity);
public class EntityViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener {
@BindView(R.id.entity_text)
TextView textView;
@BindView(R.id.entity_description)
TextView descriptionView;
@Nullable
private E entity;
public EntityViewHolder(@Nonnull View view) {
super(view);
public EntityViewHolder(@Nonnull FragmentEntitiesItemBinding binding) {
super(binding.getRoot());
BaseActivity.fixFonts(itemView, typeface);
ButterKnife.bind(this, view);
view.setOnClickListener(this);
view.setOnCreateContextMenuListener(this);
textView = binding.entityText;
descriptionView = binding.entityDescription;
itemView.setOnClickListener(this);
itemView.setOnCreateContextMenuListener(this);
}
public void bind(@Nonnull E entity) {
@@ -266,7 +265,7 @@ public abstract class BaseEntitiesFragment<E extends MathEntity> extends BaseFra
@Override
public EntityViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new EntityViewHolder(inflater.inflate(R.layout.fragment_entities_item, parent, false));
return new EntityViewHolder(FragmentEntitiesItemBinding.inflate(inflater, parent, false));
}
@Override

View File

@@ -25,8 +25,8 @@ package org.solovyev.android.calculator.entities;
import android.app.Application;
import android.content.SharedPreferences;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import com.squareup.otto.Bus;

View File

@@ -1,6 +1,6 @@
package org.solovyev.android.calculator.entities;
import android.support.annotation.StringRes;
import androidx.annotation.StringRes;
import org.solovyev.common.math.MathEntity;

View File

@@ -1,6 +1,6 @@
package org.solovyev.android.calculator.entities;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.common.math.MathEntity;

View File

@@ -3,10 +3,10 @@ package org.solovyev.android.calculator.errors;
import android.app.Activity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.*;

View File

@@ -26,8 +26,8 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.UiPreferences;
import org.solovyev.common.msg.Message;

View File

@@ -27,11 +27,11 @@ import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentActivity;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.BaseDialogFragment;

View File

@@ -29,7 +29,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import androidx.core.app.NotificationCompat;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import com.squareup.otto.Bus;
@@ -177,7 +177,7 @@ public class FloatingCalculatorService extends Service implements FloatingViewLi
builder.setOngoing(true);
final Intent intent = createShowWindowIntent(this);
builder.setContentIntent(PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
builder.setContentIntent(PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE));
final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(NOTIFICATION_ID, builder.build());

View File

@@ -32,7 +32,7 @@ import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.util.DisplayMetrics;
import android.view.ContextThemeWrapper;
import android.view.Display;
@@ -209,7 +209,7 @@ public class FloatingCalculatorView {
y = in.readInt();
}
@android.support.annotation.Nullable
@androidx.annotation.Nullable
public static State fromPrefs(@NonNull SharedPreferences prefs) {
if(!prefs.contains("width")) {
return null;

View File

@@ -27,10 +27,8 @@ import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AlertDialog;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import android.text.Editable;
import android.text.TextUtils;
import android.view.ContextMenu;
@@ -44,6 +42,8 @@ import android.view.ViewParent;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import androidx.appcompat.app.AlertDialog;
import com.google.android.material.textfield.TextInputLayout;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.AppComponent;
import org.solovyev.android.calculator.BaseDialogFragment;
@@ -69,8 +69,6 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import jscl.math.function.IConstant;
import static org.solovyev.android.calculator.functions.CppFunction.NO_ID;
@@ -86,20 +84,12 @@ public abstract class BaseFunctionFragment extends BaseDialogFragment implements
private final FloatingKeyboardWindow keyboardWindow = new FloatingKeyboardWindow(null);
@NonNull
private final KeyboardUser keyboardUser = new KeyboardUser();
@BindView(R.id.function_params)
public
FunctionParamsView paramsView;
@BindView(R.id.function_name_label)
TextInputLayout nameLabel;
@BindView(R.id.function_name)
public FunctionParamsView paramsView;
public TextInputLayout nameLabel;
public EditText nameView;
@BindView(R.id.function_body_label)
public TextInputLayout bodyLabel;
@BindView(R.id.function_body)
public EditTextCompat bodyView;
@BindView(R.id.function_description_label)
public TextInputLayout descriptionLabel;
@BindView(R.id.function_description)
public EditText descriptionView;
@Inject
Calculator calculator;
@@ -181,23 +171,20 @@ public abstract class BaseFunctionFragment extends BaseDialogFragment implements
}
final int id = v.getId();
switch (id) {
case R.id.function_name:
if (hasFocus) {
clearError(nameLabel);
} else {
validateName();
}
break;
case R.id.function_body:
if (hasFocus) {
clearError(bodyLabel);
showKeyboard();
} else {
keyboardWindow.hide();
validateBody();
}
break;
if (id == R.id.function_name) {
if (hasFocus) {
clearError(nameLabel);
} else {
validateName();
}
} else if (id == R.id.function_body) {
if (hasFocus) {
clearError(bodyLabel);
showKeyboard();
} else {
keyboardWindow.hide();
validateBody();
}
}
}
@@ -219,13 +206,10 @@ public abstract class BaseFunctionFragment extends BaseDialogFragment implements
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.function_body:
showKeyboard();
break;
default:
super.onClick(v);
break;
if (v.getId() == R.id.function_body) {
showKeyboard();
} else {
super.onClick(v);
}
}
@@ -348,7 +332,13 @@ public abstract class BaseFunctionFragment extends BaseDialogFragment implements
@Override
protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, @Nullable Bundle savedInstanceState) {
final View view = inflater.inflate(layout, null);
ButterKnife.bind(this, view);
paramsView = view.findViewById(R.id.function_params);
nameLabel = view.findViewById(R.id.function_name_label);
nameView = view.findViewById(R.id.function_name);
bodyLabel = view.findViewById(R.id.function_body_label);
bodyView = view.findViewById(R.id.function_body);
descriptionLabel = view.findViewById(R.id.function_description_label);
descriptionView = view.findViewById(R.id.function_description);
if (savedInstanceState == null && function != null) {
paramsView.addParams(function.getParameters());

View File

@@ -2,7 +2,7 @@ package org.solovyev.android.calculator.functions;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import jscl.math.function.CustomFunction;
import jscl.math.function.IFunction;

View File

@@ -4,10 +4,10 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import jscl.math.function.Function;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.App;

View File

@@ -22,7 +22,7 @@
package org.solovyev.android.calculator.functions;
import android.support.annotation.StringRes;
import androidx.annotation.StringRes;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.entities.Category;

View File

@@ -22,6 +22,7 @@
package org.solovyev.android.calculator.functions;
import com.google.android.material.textfield.TextInputLayout;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.Preferences;
@@ -33,8 +34,7 @@ import android.content.res.Resources;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout;
import androidx.annotation.NonNull;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
@@ -132,7 +132,7 @@ public class FunctionParamsView extends LinearLayout {
addButton.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
addButton.setPadding(imageButtonPadding, imageButtonPadding, imageButtonPadding, imageButtonPadding);
final TypedValue value = new TypedValue();
if (getContext().getTheme().resolveAttribute(R.attr.selectableItemBackgroundBorderless, value, true)) {
if (getContext().getTheme().resolveAttribute(androidx.appcompat.R.attr.selectableItemBackgroundBorderless, value, true)) {
addButton.setBackgroundResource(value.resourceId);
}
return addButton;

View File

@@ -24,7 +24,7 @@ package org.solovyev.android.calculator.functions;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.view.View;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.BaseActivity;
@@ -91,4 +91,4 @@ public class FunctionsActivity extends BaseActivity {
public static final class Dialog extends FunctionsActivity {
}
}
}

View File

@@ -24,9 +24,9 @@ package org.solovyev.android.calculator.functions;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import androidx.annotation.NonNull;
import android.view.*;
import androidx.fragment.app.FragmentActivity;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import jscl.math.function.Function;
@@ -79,25 +79,25 @@ public class FunctionsFragment extends BaseEntitiesFragment<Function> {
@Override
protected boolean onMenuItemClicked(@Nonnull MenuItem item, @Nonnull final Function function) {
final FragmentActivity activity = getActivity();
switch (item.getItemId()) {
case R.string.c_use:
onClick(function);
return true;
case R.string.cpp_edit:
if (function instanceof IFunction) {
EditFunctionFragment.show(CppFunction.builder((IFunction) function).build(),
int itemId = item.getItemId();
if (itemId == R.string.c_use) {
onClick(function);
return true;
} else if (itemId == R.string.cpp_edit) {
if (function instanceof IFunction) {
EditFunctionFragment.show(CppFunction.builder((IFunction) function).build(),
activity.getSupportFragmentManager());
}
return true;
} else if (itemId == R.string.cpp_delete) {
RemovalConfirmationDialog.showForFunction(getActivity(), function.getName(), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Check.isTrue(which == DialogInterface.BUTTON_POSITIVE);
registry.remove(function);
}
return true;
case R.string.cpp_delete:
RemovalConfirmationDialog.showForFunction(getActivity(), function.getName(), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Check.isTrue(which == DialogInterface.BUTTON_POSITIVE);
registry.remove(function);
}
});
return true;
});
return true;
}
return false;
}

View File

@@ -24,7 +24,7 @@ package org.solovyev.android.calculator.functions;
import static android.text.TextUtils.isEmpty;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

View File

@@ -29,11 +29,7 @@ import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import androidx.annotation.NonNull;
import android.text.ClipboardManager;
import android.text.format.DateUtils;
import android.view.ContextMenu;
@@ -43,6 +39,10 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
@@ -53,6 +53,8 @@ import org.solovyev.android.calculator.BaseFragment;
import org.solovyev.android.calculator.CalculatorActivity;
import org.solovyev.android.calculator.Editor;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.databinding.FragmentHistoryBinding;
import org.solovyev.android.calculator.databinding.FragmentHistoryItemBinding;
import org.solovyev.android.calculator.jscl.JsclOperation;
import org.solovyev.common.text.Strings;
@@ -62,8 +64,6 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
public abstract class BaseHistoryFragment extends BaseFragment {
private final boolean recentHistory;
@@ -75,7 +75,6 @@ public abstract class BaseHistoryFragment extends BaseFragment {
Bus bus;
@Inject
Typeface typeface;
@BindView(R.id.history_recyclerview)
RecyclerView recyclerView;
private HistoryAdapter adapter;
@@ -111,7 +110,8 @@ public abstract class BaseHistoryFragment extends BaseFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.bind(this, view);
FragmentHistoryBinding binding = FragmentHistoryBinding.bind(view);
recyclerView = binding.historyRecyclerview;
final Context context = inflater.getContext();
adapter = new HistoryAdapter(context);
bus.register(adapter);
@@ -156,21 +156,20 @@ public abstract class BaseHistoryFragment extends BaseFragment {
public class HistoryViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener, View.OnClickListener, MenuItem.OnMenuItemClickListener {
private static final int DATETIME_FORMAT = DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_MONTH | DateUtils.FORMAT_ABBREV_TIME;
@BindView(R.id.history_item_value)
TextView valueView;
@BindView(R.id.history_item_comment)
TextView commentView;
@BindView(R.id.history_item_time)
TextView timeView;
@Nullable
private HistoryState state;
public HistoryViewHolder(View view) {
super(view);
BaseActivity.fixFonts(view, typeface);
ButterKnife.bind(this, view);
view.setOnCreateContextMenuListener(this);
view.setOnClickListener(this);
public HistoryViewHolder(@NonNull FragmentHistoryItemBinding binding) {
super(binding.getRoot());
BaseActivity.fixFonts(binding.getRoot(), typeface);
valueView = binding.historyItemValue;
commentView = binding.historyItemComment;
timeView = binding.historyItemTime;
itemView.setOnCreateContextMenuListener(this);
itemView.setOnClickListener(this);
}
void bind(@Nonnull HistoryState state) {
@@ -217,25 +216,25 @@ public abstract class BaseHistoryFragment extends BaseFragment {
@Override
public boolean onMenuItemClick(MenuItem item) {
Check.isNotNull(state);
switch (item.getItemId()) {
case R.string.c_use:
useState(state);
return true;
case R.string.c_copy_expression:
copyExpression(state);
return true;
case R.string.c_copy_result:
copyResult(state);
return true;
case R.string.cpp_edit:
EditHistoryFragment.show(state, false, getFragmentManager());
return true;
case R.string.c_save:
EditHistoryFragment.show(state, true, getFragmentManager());
return true;
case R.string.cpp_delete:
history.removeSaved(state);
return true;
int itemId = item.getItemId();
if (itemId == R.string.c_use) {
useState(state);
return true;
} else if (itemId == R.string.c_copy_expression) {
copyExpression(state);
return true;
} else if (itemId == R.string.c_copy_result) {
copyResult(state);
return true;
} else if (itemId == R.string.cpp_edit) {
EditHistoryFragment.show(state, false, getParentFragmentManager());
return true;
} else if (itemId == R.string.c_save) {
EditHistoryFragment.show(state, true, getParentFragmentManager());
return true;
} else if (itemId == R.string.cpp_delete) {
history.removeSaved(state);
return true;
}
return false;
}
@@ -262,7 +261,7 @@ public abstract class BaseHistoryFragment extends BaseFragment {
@Override
public HistoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new HistoryViewHolder(inflater.inflate(R.layout.fragment_history_item, parent, false));
return new HistoryViewHolder(FragmentHistoryItemBinding.inflate(inflater, parent, false));
}
@Override

View File

@@ -4,22 +4,21 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
import org.solovyev.android.calculator.AppComponent;
import org.solovyev.android.calculator.BaseDialogFragment;
import org.solovyev.android.calculator.R;
import javax.inject.Inject;
import org.solovyev.android.calculator.databinding.FragmentHistoryEditBinding;
public class EditHistoryFragment extends BaseDialogFragment {
@@ -33,10 +32,7 @@ public class EditHistoryFragment extends BaseDialogFragment {
boolean newState;
@BindView(R.id.history_expression)
TextView expressionView;
@BindView(R.id.history_comment)
EditText commentView;
public static void show(@NonNull HistoryState state, boolean newState, @NonNull FragmentManager fm) {
@@ -95,12 +91,13 @@ public class EditHistoryFragment extends BaseDialogFragment {
@NonNull
@Override
protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, @Nullable Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_history_edit, null);
ButterKnife.bind(this, view);
final FragmentHistoryEditBinding binding = FragmentHistoryEditBinding.inflate(inflater, null, false);
expressionView = binding.historyExpression;
commentView = binding.historyComment;
if (savedInstanceState == null) {
expressionView.setText(BaseHistoryFragment.getHistoryText(state));
commentView.setText(state.getComment());
}
return view;
return binding.getRoot();
}
}

View File

@@ -27,7 +27,7 @@ import static android.text.TextUtils.isEmpty;
import android.app.Application;
import android.content.SharedPreferences;
import android.os.Handler;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import com.google.common.base.Strings;
@@ -466,4 +466,4 @@ public class History {
});
}
}
}
}

View File

@@ -25,11 +25,11 @@ package org.solovyev.android.calculator.history;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import androidx.annotation.NonNull;
import android.view.View;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.AppComponent;
import org.solovyev.android.calculator.BaseActivity;

View File

@@ -2,7 +2,7 @@ package org.solovyev.android.calculator.history;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import org.json.JSONException;

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator.history;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.solovyev.android.Check;
import java.util.Collections;

View File

@@ -23,7 +23,7 @@
package org.solovyev.android.calculator.jscl;
import android.support.annotation.Nullable;
import androidx.annotation.Nullable;
import jscl.MathEngine;
import jscl.math.Generic;
import jscl.text.ParseException;

View File

@@ -2,7 +2,7 @@ package org.solovyev.android.calculator.json;
import static android.text.TextUtils.isEmpty;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.util.Log;
import org.json.JSONArray;

View File

@@ -3,10 +3,10 @@ package org.solovyev.android.calculator.keyboard;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Build;
import android.support.annotation.ColorInt;
import android.support.annotation.DrawableRes;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import android.util.TypedValue;
import android.view.View;

View File

@@ -11,8 +11,8 @@ import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.TypedValue;

View File

@@ -2,7 +2,7 @@ package org.solovyev.android.calculator.keyboard;
import android.content.Context;
import android.graphics.Typeface;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.view.ViewGroup;
import android.widget.EditText;

View File

@@ -4,8 +4,8 @@ import android.app.Dialog;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.Gravity;
import android.view.View;
import android.view.Window;

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator.keyboard;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
@@ -93,13 +93,13 @@ public class FloatingNumberKeyboard extends BaseFloatingKeyboard {
@Override
public void onClick(View v) {
final EditText editor = getUser().getEditor();
switch (v.getId()) {
case R.id.cpp_kb_button_clear:
editor.setText("");
return;
case R.id.cpp_kb_button_close:
getUser().done();
return;
int id = v.getId();
if (id == R.id.cpp_kb_button_clear) {
editor.setText("");
return;
} else if (id == R.id.cpp_kb_button_close) {
getUser().done();
return;
}
if (v instanceof TextView) {
insertText(((TextView) v).getText());

View File

@@ -3,10 +3,8 @@ package org.solovyev.android.calculator.keyboard;
import android.app.Activity;
import android.app.Application;
import android.content.SharedPreferences;
import android.support.annotation.Nullable;
import androidx.annotation.Nullable;
import android.view.View;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import jscl.NumeralBase;
@@ -24,25 +22,15 @@ import static org.solovyev.android.views.dragbutton.DragDirection.*;
public class KeyboardUi extends BaseKeyboardUi {
@BindView(R.id.cpp_button_0)
public DirectionDragButton button0;
@BindView(R.id.cpp_button_1)
public DirectionDragButton button1;
@BindView(R.id.cpp_button_2)
public DirectionDragButton button2;
@BindView(R.id.cpp_button_3)
public DirectionDragButton button3;
@BindView(R.id.cpp_button_4)
public DirectionDragButton button4;
@BindView(R.id.cpp_button_5)
public DirectionDragButton button5;
@BindView(R.id.cpp_button_6)
public DirectionDragButton button6;
@BindView(R.id.cpp_button_7)
public DirectionDragButton button7;
@BindView(R.id.cpp_button_8)
public DirectionDragButton button8;
@BindView(R.id.cpp_button_9)
public DirectionDragButton button9;
@Inject
Engine engine;
@@ -52,35 +40,22 @@ public class KeyboardUi extends BaseKeyboardUi {
Bus bus;
@Inject
PartialKeyboardUi partialUi;
@BindView(R.id.cpp_button_vars)
DirectionDragButton variablesButton;
@Nullable
@BindView(R.id.cpp_button_operators)
DirectionDragButton operatorsButton;
@BindView(R.id.cpp_button_functions)
DirectionDragButton functionsButton;
@BindView(R.id.cpp_button_history)
DirectionDragButton historyButton;
@BindView(R.id.cpp_button_multiplication)
DirectionDragButton multiplicationButton;
@BindView(R.id.cpp_button_plus)
DirectionDragButton plusButton;
@BindView(R.id.cpp_button_subtraction)
DirectionDragButton subtractionButton;
@BindView(R.id.cpp_button_division)
DirectionDragButton divisionButton;
@BindView(R.id.cpp_button_period)
DirectionDragButton periodButton;
@BindView(R.id.cpp_button_round_brackets)
DirectionDragButton bracketsButton;
@Nullable
@BindView(R.id.cpp_button_like)
DirectionDragButton likeButton;
@Nullable
@BindView(R.id.cpp_button_percent)
DirectionDragButton percentButton;
@Nullable
@BindView(R.id.cpp_button_memory)
DirectionDragButton memoryButton;
@Inject
@@ -101,7 +76,30 @@ public class KeyboardUi extends BaseKeyboardUi {
public void onCreateView(@Nonnull Activity activity, @Nonnull View view) {
super.onCreateView(activity, view);
partialUi.onCreateView(activity, view);
ButterKnife.bind(this, view);
button0 = view.findViewById(R.id.cpp_button_0);
button1 = view.findViewById(R.id.cpp_button_1);
button2 = view.findViewById(R.id.cpp_button_2);
button3 = view.findViewById(R.id.cpp_button_3);
button4 = view.findViewById(R.id.cpp_button_4);
button5 = view.findViewById(R.id.cpp_button_5);
button6 = view.findViewById(R.id.cpp_button_6);
button7 = view.findViewById(R.id.cpp_button_7);
button8 = view.findViewById(R.id.cpp_button_8);
button9 = view.findViewById(R.id.cpp_button_9);
variablesButton = view.findViewById(R.id.cpp_button_vars);
operatorsButton = view.findViewById(R.id.cpp_button_operators);
functionsButton = view.findViewById(R.id.cpp_button_functions);
historyButton = view.findViewById(R.id.cpp_button_history);
multiplicationButton = view.findViewById(R.id.cpp_button_multiplication);
plusButton = view.findViewById(R.id.cpp_button_plus);
subtractionButton = view.findViewById(R.id.cpp_button_subtraction);
divisionButton = view.findViewById(R.id.cpp_button_division);
periodButton = view.findViewById(R.id.cpp_button_period);
bracketsButton = view.findViewById(R.id.cpp_button_round_brackets);
likeButton = view.findViewById(R.id.cpp_button_like);
percentButton = view.findViewById(R.id.cpp_button_percent);
memoryButton = view.findViewById(R.id.cpp_button_memory);
prepareButton(variablesButton);
prepareButton(operatorsButton);
@@ -169,4 +167,4 @@ public class KeyboardUi extends BaseKeyboardUi {
public void onNumberModeChanged(@Nonnull Keyboard.NumberModeChangedEvent e) {
updateNumberMode(e.mode);
}
}
}

View File

@@ -3,8 +3,8 @@ package org.solovyev.android.calculator.keyboard;
import android.app.Activity;
import android.app.Application;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.View;
import org.solovyev.android.calculator.R;
@@ -14,28 +14,20 @@ import org.solovyev.android.views.dragbutton.DirectionDragButton;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import static org.solovyev.android.calculator.Preferences.Gui.vibrateOnKeypress;
import static org.solovyev.android.views.dragbutton.DragDirection.down;
public class PartialKeyboardUi extends BaseKeyboardUi {
@Nullable
@BindView(R.id.cpp_button_right)
DirectionDragButton rightButton;
@Nullable
@BindView(R.id.cpp_button_left)
DirectionDragButton leftButton;
@Nullable
@BindView(R.id.cpp_button_clear)
DirectionDragButton clearButton;
@Nullable
@BindView(R.id.cpp_button_erase)
DirectionDragButton eraseButton;
@Nullable
@BindView(R.id.cpp_button_equals)
DirectionDragButton equalsButton;
@Nullable
EditorLongClickEraser longClickEraser;
@@ -48,7 +40,11 @@ public class PartialKeyboardUi extends BaseKeyboardUi {
@Override
public void onCreateView(@Nonnull Activity activity, @Nonnull View view) {
super.onCreateView(activity, view);
ButterKnife.bind(this, view);
rightButton = view.findViewById(R.id.cpp_button_right);
leftButton = view.findViewById(R.id.cpp_button_left);
clearButton = view.findViewById(R.id.cpp_button_clear);
eraseButton = view.findViewById(R.id.cpp_button_erase);
equalsButton = view.findViewById(R.id.cpp_button_equals);
prepareButton(rightButton);
prepareButton(leftButton);
prepareButton(equalsButton);

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator.language;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.preferences.PreferenceEntry;

View File

@@ -22,7 +22,7 @@
package org.solovyev.android.calculator.math;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import jscl.JsclMathEngine;
import jscl.NumeralBase;
import jscl.math.function.Constants;

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator.memory;
import android.os.Handler;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import android.util.Log;

View File

@@ -22,7 +22,7 @@
package org.solovyev.android.calculator.operators;
import android.support.annotation.StringRes;
import androidx.annotation.StringRes;
import jscl.math.operator.*;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.entities.Category;

View File

@@ -23,7 +23,7 @@
package org.solovyev.android.calculator.operators;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.BaseActivity;

View File

@@ -22,7 +22,7 @@
package org.solovyev.android.calculator.operators;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import android.view.ContextMenu;
import android.view.MenuItem;
import jscl.math.operator.Operator;
@@ -78,10 +78,9 @@ public class OperatorsFragment extends BaseEntitiesFragment<Operator> {
@Override
protected boolean onMenuItemClicked(@Nonnull MenuItem item, @Nonnull Operator operator) {
switch (item.getItemId()) {
case R.string.c_use:
onClick(operator);
return true;
if (item.getItemId() == R.string.c_use) {
onClick(operator);
return true;
}
return false;

View File

@@ -22,7 +22,7 @@
package org.solovyev.android.calculator.operators;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import jscl.JsclMathEngine;
import jscl.math.operator.Operator;
import org.solovyev.android.calculator.R;

View File

@@ -22,7 +22,7 @@
package org.solovyev.android.calculator.operators;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
import jscl.JsclMathEngine;
import jscl.math.operator.Operator;
import org.solovyev.android.calculator.R;

View File

@@ -1,18 +1,19 @@
package org.solovyev.android.calculator.plot;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.ContextCompat;
import androidx.core.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import org.solovyev.android.calculator.AppComponent;
import org.solovyev.android.calculator.BaseActivity;
import org.solovyev.android.calculator.BaseFragment;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.databinding.FragmentPlotBinding;
import org.solovyev.android.plotter.Dimensions;
import org.solovyev.android.plotter.PlotData;
import org.solovyev.android.plotter.PlotViewFrame;
@@ -21,8 +22,6 @@ import org.solovyev.android.plotter.Plotter;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
public class PlotActivity extends BaseActivity {
@@ -32,7 +31,6 @@ public class PlotActivity extends BaseActivity {
@Inject
Plotter plotter;
@BindView(R.id.plot_view_frame)
PlotViewFrame plotView;
public MyFragment() {
@@ -49,7 +47,8 @@ public class PlotActivity extends BaseActivity {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.bind(this, view);
final FragmentPlotBinding binding = FragmentPlotBinding.bind(view);
plotView = binding.plotViewFrame;
final PlotData pd = plotter.getPlotData();
pd.axisStyle.backgroundColor = ContextCompat.getColor(getActivity(), R.color.cpp_bg);

View File

@@ -1,14 +1,10 @@
package org.solovyev.android.calculator.plot;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.RectF;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import androidx.annotation.NonNull;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
@@ -19,24 +15,22 @@ import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
import com.google.android.material.textfield.TextInputLayout;
import java.util.Locale;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.AppComponent;
import org.solovyev.android.calculator.BaseDialogFragment;
import org.solovyev.android.calculator.BaseFragment;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.databinding.FragmentPlotDimensionsBinding;
import org.solovyev.android.plotter.Check;
import org.solovyev.android.plotter.Plot;
import org.solovyev.android.plotter.Plotter;
import java.util.Locale;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
public class PlotDimensionsFragment extends BaseDialogFragment
implements TextView.OnEditorActionListener {
private static final String ARG_BOUNDS = "arg-bounds";
@@ -77,23 +71,14 @@ public class PlotDimensionsFragment extends BaseDialogFragment
@Inject
Plotter plotter;
@BindView(R.id.plot_x_min)
EditText xMin;
@BindView(R.id.plot_x_min_label)
TextInputLayout xMinLabel;
@BindView(R.id.plot_x_max)
EditText xMax;
@BindView(R.id.plot_x_max_label)
TextInputLayout xMaxLabel;
@BindView(R.id.plot_y_min)
EditText yMin;
@BindView(R.id.plot_y_min_label)
TextInputLayout yMinLabel;
@BindView(R.id.plot_y_max)
EditText yMax;
@BindView(R.id.plot_y_max_label)
TextInputLayout yMaxLabel;
@BindView(R.id.y_bounds)
View yBounds;
@NonNull
private RectF bounds = new RectF();
@@ -160,9 +145,17 @@ public class PlotDimensionsFragment extends BaseDialogFragment
@Override
protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater,
Bundle savedInstanceState) {
@SuppressLint("InflateParams") final View view =
LayoutInflater.from(context).inflate(R.layout.fragment_plot_dimensions, null);
ButterKnife.bind(this, view);
final FragmentPlotDimensionsBinding binding = FragmentPlotDimensionsBinding.inflate(inflater, null, false);
xMin = binding.plotXMin;
xMinLabel = binding.plotXMinLabel;
xMax = binding.plotXMax;
xMaxLabel = binding.plotXMaxLabel;
yMin = binding.plotYMin;
yMinLabel = binding.plotYMinLabel;
yMax = binding.plotYMax;
yMaxLabel = binding.plotYMaxLabel;
yBounds = binding.yBounds;
setDimension(xMin, bounds.left);
setDimension(xMax, bounds.right);
@@ -175,7 +168,7 @@ public class PlotDimensionsFragment extends BaseDialogFragment
if (d3) {
yBounds.setVisibility(View.GONE);
}
return view;
return binding.getRoot();
}
@Override
@@ -284,4 +277,4 @@ public class PlotDimensionsFragment extends BaseDialogFragment
}
return false;
}
}
}

View File

@@ -3,19 +3,20 @@ package org.solovyev.android.calculator.plot;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.fragment.app.FragmentManager;
import org.solovyev.android.Check;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.AppComponent;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.RemovalConfirmationDialog;
import org.solovyev.android.calculator.databinding.FragmentPlotFunctionEditBinding;
import org.solovyev.android.calculator.functions.BaseFunctionFragment;
import org.solovyev.android.calculator.functions.CppFunction;
import org.solovyev.android.plotter.Color;
@@ -30,7 +31,6 @@ import java.util.List;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import butterknife.BindView;
import jscl.math.function.CustomFunction;
import uz.shift.colorpicker.LineColorPicker;
import uz.shift.colorpicker.OnColorChangedListener;
@@ -39,17 +39,11 @@ public class PlotEditFunctionFragment extends BaseFunctionFragment
implements SeekBar.OnSeekBarChangeListener {
@Inject
Plotter plotter;
@BindView(R.id.fn_meshspec_views)
View meshSpecViews;
@BindView(R.id.fn_color_label)
TextView colorLabel;
@BindView(R.id.fn_color_picker)
LineColorPicker colorPicker;
@BindView(R.id.fn_linewidth_label)
TextView lineWidthLabel;
@BindView(R.id.fn_linewidth_seekbar)
SeekBar lineWidthSeekBar;
@BindView(R.id.fn_iconview)
PlotIconView iconView;
private PlotFunction plotFunction;
@@ -101,6 +95,13 @@ public class PlotEditFunctionFragment extends BaseFunctionFragment
protected View onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater,
@Nullable Bundle savedInstanceState) {
final View view = super.onCreateDialogView(context, inflater, savedInstanceState);
FragmentPlotFunctionEditBinding binding = FragmentPlotFunctionEditBinding.bind(view);
meshSpecViews = binding.fnMeshspecViews;
colorLabel = binding.fnColorLabel;
colorPicker = binding.fnColorPicker;
lineWidthLabel = binding.fnLinewidthLabel;
lineWidthSeekBar = binding.fnLinewidthSeekbar;
iconView = binding.fnIconview;
colorPicker.setOnColorChangedListener(new OnColorChangedListener() {
@Override
public void onColorChanged(int c) {

View File

@@ -1,6 +1,5 @@
package org.solovyev.android.calculator.plot;
import static android.support.v7.widget.LinearLayoutManager.VERTICAL;
import static android.view.Menu.NONE;
import android.annotation.SuppressLint;
@@ -8,13 +7,8 @@ import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
@@ -22,11 +16,17 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.AppComponent;
import org.solovyev.android.calculator.BaseActivity;
import org.solovyev.android.calculator.BaseDialogFragment;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.databinding.FragmentFunctionsFunctionBinding;
import org.solovyev.android.plotter.BasePlotterListener;
import org.solovyev.android.plotter.PlotFunction;
import org.solovyev.android.plotter.PlotIconView;
@@ -37,8 +37,6 @@ import java.util.List;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
public class PlotFunctionsFragment extends BaseDialogFragment {
@@ -75,7 +73,7 @@ public class PlotFunctionsFragment extends BaseDialogFragment {
protected RecyclerView onCreateDialogView(@NonNull Context context, @NonNull LayoutInflater inflater, Bundle savedInstanceState) {
@SuppressLint("InflateParams") final RecyclerView view = (RecyclerView) inflater.inflate(R.layout.fragment_plot_functions, null);
view.setLayoutManager(new LinearLayoutManager(context, VERTICAL, false));
view.setLayoutManager(new LinearLayoutManager(context, RecyclerView.VERTICAL, false));
view.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL));
adapter = new Adapter(plotter.getPlotData().functions);
view.setAdapter(adapter);
@@ -107,17 +105,16 @@ public class PlotFunctionsFragment extends BaseDialogFragment {
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener {
@BindView(R.id.function_icon)
PlotIconView icon;
@BindView(R.id.function_name)
TextView name;
private PlotFunction function;
private ViewHolder(@NonNull View itemView) {
super(itemView);
private ViewHolder(@NonNull FragmentFunctionsFunctionBinding binding) {
super(binding.getRoot());
BaseActivity.fixFonts(itemView, typeface);
ButterKnife.bind(this, itemView);
icon = binding.functionIcon;
name = binding.functionName;
itemView.setOnClickListener(this);
itemView.setOnCreateContextMenuListener(this);
}
@@ -159,7 +156,7 @@ public class PlotFunctionsFragment extends BaseDialogFragment {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
return new ViewHolder(inflater.inflate(R.layout.fragment_functions_function, parent, false));
return new ViewHolder(FragmentFunctionsFunctionBinding.inflate(inflater, parent, false));
}
@Override

View File

@@ -4,10 +4,11 @@ import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
import jscl.JsclMathEngine;
import org.solovyev.android.material.preferences.Preference;
@SuppressWarnings("unused")
public class NumberFormatExamplesPreference extends Preference {
@@ -45,15 +46,14 @@ public class NumberFormatExamplesPreference extends Preference {
}
@Override
protected View onCreateView(ViewGroup parent) {
final View view = super.onCreateView(parent);
final View summary = view.findViewById(android.R.id.summary);
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
final View summary = holder.findViewById(android.R.id.summary);
if (summary instanceof TextView) {
final TextView textView = (TextView) summary;
textView.setMaxLines(12);
textView.setLines(12);
textView.setTypeface(Typeface.MONOSPACE);
}
return view;
}
}

View File

@@ -1,26 +1,83 @@
package org.solovyev.android.calculator.preferences;
import static org.solovyev.common.NumberFormatter.MAX_PRECISION;
import static org.solovyev.common.NumberFormatter.MIN_PRECISION;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.preference.DialogPreference;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
import butterknife.BindView;
import butterknife.ButterKnife;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.DialogPreference;
import androidx.preference.PreferenceDialogFragmentCompat;
import org.solovyev.android.calculator.Engine;
import org.solovyev.android.calculator.R;
import org.solovyev.android.views.DiscreteSeekBar;
import static org.solovyev.common.NumberFormatter.MAX_PRECISION;
import static org.solovyev.common.NumberFormatter.MIN_PRECISION;
@SuppressWarnings("unused")
public class PrecisionPreference extends DialogPreference {
@BindView(R.id.precision_seekbar)
DiscreteSeekBar seekBar;
public static class Dialog extends PreferenceDialogFragmentCompat {
private static final String SAVE_STATE_PRECISION = "PrecisionPreferenceDialog.precision";
private DiscreteSeekBar seekBar;
private int precision;
public Dialog() {
final Bundle args = new Bundle();
args.putString(ARG_KEY, Engine.Preferences.Output.precision.getKey());
setArguments(args);
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if (seekBar != null) {
outState.putInt(SAVE_STATE_PRECISION, seekBar.getCurrentTick() + 1);
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
precision = readPrecision();
} else {
precision = savedInstanceState.getInt(SAVE_STATE_PRECISION, readPrecision());
}
}
@Override
protected void onBindDialogView(@NonNull View view) {
super.onBindDialogView(view);
seekBar = (DiscreteSeekBar) view.findViewById(R.id.precision_seekbar);
seekBar.setMax(MAX_PRECISION - 1);
seekBar.setCurrentTick(precision - 1);
}
private int readPrecision() {
final DialogPreference preference = getPreference();
final SharedPreferences preferences = preference.getSharedPreferences();
return Math.max(MIN_PRECISION, Math.min(MAX_PRECISION, Engine.Preferences.Output.precision.getPreference(preferences)));
}
@Override
public void onDialogClosed(boolean save) {
if (!save) return;
final int precision = seekBar.getCurrentTick() + 1;
final DialogPreference preference = getPreference();
if (preference.callChangeListener(precision)) {
final SharedPreferences preferences = preference.getSharedPreferences();
final SharedPreferences.Editor editor = preferences.edit();
Engine.Preferences.Output.precision.putPreference(editor, precision);
editor.apply();
}
}
}
{
setPersistent(false);
@@ -44,29 +101,4 @@ public class PrecisionPreference extends DialogPreference {
public PrecisionPreference(Context context) {
super(context);
}
@Override
protected void onBindDialogView(View view) {
super.onBindDialogView(view);
ButterKnife.bind(this, view);
final SharedPreferences preferences = getSharedPreferences();
seekBar.setMax(MAX_PRECISION - 1);
final int precision = Math.max(MIN_PRECISION, Math.min(MAX_PRECISION, Engine.Preferences.Output.precision.getPreference(preferences)));
seekBar.setCurrentTick(precision - 1);
}
@Override
protected void onDialogClosed(boolean save) {
super.onDialogClosed(save);
if (!save) {
return;
}
final int precision = seekBar.getCurrentTick() + 1;
if (callChangeListener(precision)) {
final SharedPreferences.Editor editor = getSharedPreferences().edit();
Engine.Preferences.Output.precision.putPreference(editor, precision);
editor.apply();
}
}
}

View File

@@ -1,7 +1,7 @@
package org.solovyev.android.calculator.preferences;
import android.content.Context;
import android.support.annotation.NonNull;
import androidx.annotation.NonNull;
public interface PreferenceEntry {
@NonNull

View File

@@ -4,9 +4,9 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.annotation.XmlRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.annotation.XmlRes;
import android.util.SparseArray;
import org.solovyev.android.calculator.App;
@@ -81,7 +81,7 @@ public class PreferencesActivity extends BaseActivity implements SharedPreferenc
if (savedInstanceState == null) {
final int preference = intent.getIntExtra(EXTRA_PREFERENCE, R.xml.preferences);
getSupportFragmentManager().beginTransaction()
.add(R.id.main, PreferencesFragment.create(preference, R.layout.fragment_preferences))
.add(R.id.main, PreferencesFragment.create(preference))
.commit();
}

View File

@@ -5,22 +5,31 @@ import static org.solovyev.android.calculator.Engine.Preferences.angleUnitName;
import static org.solovyev.android.calculator.Engine.Preferences.numeralBaseName;
import static org.solovyev.android.calculator.wizard.CalculatorWizards.DEFAULT_WIZARD_FLOW;
import static org.solovyev.android.wizard.WizardUi.startWizard;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.support.v4.app.FragmentActivity;
import android.util.SparseArray;
import android.view.View;
import android.widget.ListView;
import android.view.ViewGroup;
import android.view.ViewParent;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceDialogFragmentCompat;
import androidx.preference.PreferenceFragmentCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
import jscl.AngleUnit;
import jscl.JsclMathEngine;
import jscl.NumeralBase;
import org.solovyev.android.calculator.ActivityLauncher;
import org.solovyev.android.calculator.AdView;
import org.solovyev.android.calculator.Engine;
@@ -38,20 +47,11 @@ import org.solovyev.android.prefs.StringPreference;
import org.solovyev.android.wizard.Wizards;
import org.solovyev.common.text.CharacterMapper;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject;
public class PreferencesFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
@Nonnull
private static String ARG_PREFERENCES = "preferences";
import jscl.AngleUnit;
import jscl.JsclMathEngine;
import jscl.NumeralBase;
public class PreferencesFragment extends org.solovyev.android.material.preferences.PreferencesFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private static boolean SUPPORT_HEADERS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
@Nullable
private AdView adView;
@Inject
@@ -70,9 +70,11 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
Bus bus;
@Nonnull
public static PreferencesFragment create(int preferences, int layout) {
public static PreferencesFragment create(int preferences) {
final PreferencesFragment fragment = new PreferencesFragment();
fragment.setArguments(createArguments(preferences, layout, NO_THEME));
final Bundle args = new Bundle();
args.putInt(ARG_PREFERENCES, preferences);
fragment.setArguments(args);
return fragment;
}
@@ -85,6 +87,12 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
bus.register(this);
}
@Override
public void onCreatePreferences(@androidx.annotation.Nullable Bundle savedInstanceState, @androidx.annotation.Nullable String rootKey) {
int preferencesResId = getArguments().getInt(ARG_PREFERENCES);
addPreferencesFromResource(preferencesResId);
}
private void setPreferenceIntent(int xml, @Nonnull PreferencesActivity.PrefDef def) {
final Preference preference = findPreference(def.id);
if (preference != null) {
@@ -96,11 +104,26 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
}
}
/** @noinspection deprecation*/
@Override
public void onDisplayPreferenceDialog(@NonNull Preference preference) {
String fragmentTag = "fragment:" + preference.getKey();
if (getParentFragmentManager().findFragmentByTag(fragmentTag) != null) return;
if (preference instanceof PrecisionPreference) {
final PreferenceDialogFragmentCompat f = new PrecisionPreference.Dialog();
f.setTargetFragment(this, 0);
f.show(getParentFragmentManager(), fragmentTag);
} else {
super.onDisplayPreferenceDialog(preference);
}
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final int preference = getPreferencesResId();
final int preference = getArguments().getInt(ARG_PREFERENCES);
if (preference == R.xml.preferences) {
prepareScreens();
prepareIntroduction();
@@ -200,7 +223,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
}
private void prepareNumberFormatExamplesPreference() {
final NumberFormatExamplesPreference preference = (NumberFormatExamplesPreference) preferenceManager.findPreference("numberFormat.examples");
final NumberFormatExamplesPreference preference = (NumberFormatExamplesPreference) getPreferenceManager().findPreference("numberFormat.examples");
if (preference == null) {
return;
}
@@ -208,7 +231,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
}
private void prepareSeparatorPreference() {
final ListPreference preference = (ListPreference) preferenceManager.findPreference(Engine.Preferences.Output.separator.getKey());
final ListPreference preference = (ListPreference) getPreferenceManager().findPreference(Engine.Preferences.Output.separator.getKey());
preference.setSummary(separatorName(Engine.Preferences.Output.separator.getPreference(preferences)));
preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
@@ -232,7 +255,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
}
private void preparePrecisionPreference() {
final PrecisionPreference preference = (PrecisionPreference) preferenceManager.findPreference(Engine.Preferences.Output.precision.getKey());
final PrecisionPreference preference = (PrecisionPreference) getPreferenceManager().findPreference(Engine.Preferences.Output.precision.getKey());
preference.setSummary(String.valueOf(Engine.Preferences.Output.precision.getPreference(preferences)));
preference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
@@ -244,7 +267,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
}
private <E extends Enum<E> & PreferenceEntry> void prepareListPreference(@Nonnull final StringPreference<E> p, @Nonnull Class<E> type) {
final ListPreference preference = (ListPreference) preferenceManager.findPreference(p.getKey());
final ListPreference preference = (ListPreference) getPreferenceManager().findPreference(p.getKey());
if (preference == null) {
return;
}
@@ -267,7 +290,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
}
private void prepareMode() {
final ListPreference mode = (ListPreference) preferenceManager.findPreference(Preferences.Gui.mode.getKey());
final ListPreference mode = (ListPreference) getPreferenceManager().findPreference(Preferences.Gui.mode.getKey());
mode.setSummary(Preferences.Gui.getMode(preferences).name);
mode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
@@ -279,7 +302,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
}
private void prepareAngles() {
final ListPreference angles = (ListPreference) preferenceManager.findPreference(Engine.Preferences.angleUnit.getKey());
final ListPreference angles = (ListPreference) getPreferenceManager().findPreference(Engine.Preferences.angleUnit.getKey());
angles.setSummary(angleUnitName(Engine.Preferences.angleUnit.getPreference(preferences)));
angles.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
@@ -291,7 +314,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
}
private void prepareRadix() {
final ListPreference radix = (ListPreference) preferenceManager.findPreference(Engine.Preferences.numeralBase.getKey());
final ListPreference radix = (ListPreference) getPreferenceManager().findPreference(Engine.Preferences.numeralBase.getKey());
radix.setSummary(numeralBaseName(Engine.Preferences.numeralBase.getPreference(preferences)));
radix.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
@@ -306,7 +329,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
if (preference != R.xml.preferences_appearance) {
return;
}
final ListPreference theme = (ListPreference) preferenceManager.findPreference(Preferences.Gui.theme.getKey());
final ListPreference theme = (ListPreference) getPreferenceManager().findPreference(Preferences.Gui.theme.getKey());
final FragmentActivity context = getActivity();
populate(theme,
Theme.material_theme,
@@ -349,7 +372,7 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
return;
}
final ListPreference language = (ListPreference) preferenceManager.findPreference(Preferences.Gui.language.getKey());
final ListPreference language = (ListPreference) getPreferenceManager().findPreference(Preferences.Gui.language.getKey());
populate(language, languages.getList());
language.setSummary(languages.getCurrent().getName(getActivity()));
language.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@@ -417,38 +440,24 @@ public class PreferencesFragment extends org.solovyev.android.material.preferenc
super.onDestroy();
}
private boolean supportsHeaders() {
return SUPPORT_HEADERS;
}
protected void onShowAd(boolean show) {
if (!supportsHeaders()) {
return;
}
if (getView() == null) {
return;
}
final ListView listView = getListView();
final View root = getView();
if (!(root instanceof ViewGroup)) return;
final ViewGroup container = (ViewGroup) root;
if (show) {
if (adView != null) {
return;
}
if (adView != null) return;
adView = new AdView(getActivity());
adView.show();
try {
listView.addHeaderView(adView);
} catch (IllegalStateException e) {
// doesn't support header views
SUPPORT_HEADERS = false;
adView.hide();
adView = null;
}
container.addView(adView);
} else {
if (adView == null) {
return;
}
listView.removeHeaderView(adView);
if (adView == null) return;
container.removeView(adView);
adView.hide();
adView = null;
}

View File

@@ -28,11 +28,11 @@ import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.BaseDialogFragment;
import org.solovyev.android.calculator.R;

View File

@@ -1,8 +1,8 @@
package org.solovyev.android.calculator.release;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import androidx.fragment.app.Fragment;
import javax.annotation.Nonnull;
public class ChooseThemeReleaseNoteStep extends ReleaseNoteStep {

Some files were not shown because too many files have changed in this diff Show More