Android 2.3 fixes
This commit is contained in:
parent
f05d050b6c
commit
c9b39068ae
@ -41,7 +41,7 @@ android {
|
|||||||
zipAlignEnabled true
|
zipAlignEnabled true
|
||||||
}
|
}
|
||||||
debug {
|
debug {
|
||||||
minifyEnabled false
|
minifyEnabled true
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-debug.cfg'
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-debug.cfg'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ public class EditorView extends EditTextCompat {
|
|||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
addTextChangedListener(new MyTextWatcher());
|
addTextChangedListener(new MyTextWatcher());
|
||||||
setShowSoftInputOnFocusCompat(false);
|
dontShowSoftInputOnFocusCompat();
|
||||||
// changes should only be reported after the view has been set up completely, i.e. now
|
// changes should only be reported after the view has been set up completely, i.e. now
|
||||||
reportChanges = true;
|
reportChanges = true;
|
||||||
}
|
}
|
||||||
|
@ -36,25 +36,50 @@ import android.support.v7.app.AlertDialog;
|
|||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.*;
|
import android.view.ContextMenu;
|
||||||
|
import android.view.KeyEvent;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.view.ViewParent;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import butterknife.Bind;
|
|
||||||
import butterknife.ButterKnife;
|
|
||||||
import jscl.math.function.CustomFunction;
|
|
||||||
import jscl.math.function.Function;
|
|
||||||
import org.solovyev.android.Check;
|
import org.solovyev.android.Check;
|
||||||
import org.solovyev.android.calculator.*;
|
import org.solovyev.android.calculator.App;
|
||||||
|
import org.solovyev.android.calculator.AppComponent;
|
||||||
|
import org.solovyev.android.calculator.BaseDialogFragment;
|
||||||
|
import org.solovyev.android.calculator.Calculator;
|
||||||
|
import org.solovyev.android.calculator.CalculatorEventType;
|
||||||
|
import org.solovyev.android.calculator.FunctionsRegistry;
|
||||||
|
import org.solovyev.android.calculator.KeyboardUi;
|
||||||
|
import org.solovyev.android.calculator.KeyboardWindow;
|
||||||
|
import org.solovyev.android.calculator.Locator;
|
||||||
|
import org.solovyev.android.calculator.ParseException;
|
||||||
|
import org.solovyev.android.calculator.R;
|
||||||
|
import org.solovyev.android.calculator.VarsRegistry;
|
||||||
import org.solovyev.android.calculator.math.edit.FunctionsActivity;
|
import org.solovyev.android.calculator.math.edit.FunctionsActivity;
|
||||||
import org.solovyev.android.calculator.math.edit.VarEditorSaver;
|
import org.solovyev.android.calculator.math.edit.VarEditorSaver;
|
||||||
import org.solovyev.android.calculator.view.EditTextCompat;
|
import org.solovyev.android.calculator.view.EditTextCompat;
|
||||||
import org.solovyev.common.math.MathRegistry;
|
import org.solovyev.common.math.MathRegistry;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.*;
|
|
||||||
|
import butterknife.Bind;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import jscl.math.function.CustomFunction;
|
||||||
|
import jscl.math.function.Function;
|
||||||
|
|
||||||
import static org.solovyev.android.calculator.function.CppFunction.NO_ID;
|
import static org.solovyev.android.calculator.function.CppFunction.NO_ID;
|
||||||
|
|
||||||
@ -390,7 +415,7 @@ public class EditFunctionFragment extends BaseDialogFragment implements View.OnC
|
|||||||
bodyView.setOnClickListener(this);
|
bodyView.setOnClickListener(this);
|
||||||
bodyView.setOnFocusChangeListener(this);
|
bodyView.setOnFocusChangeListener(this);
|
||||||
bodyView.setOnKeyListener(this);
|
bodyView.setOnKeyListener(this);
|
||||||
bodyView.setShowSoftInputOnFocusCompat(false);
|
bodyView.dontShowSoftInputOnFocusCompat();
|
||||||
descriptionView.setOnFocusChangeListener(this);
|
descriptionView.setOnFocusChangeListener(this);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
@ -468,6 +493,7 @@ public class EditFunctionFragment extends BaseDialogFragment implements View.OnC
|
|||||||
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
||||||
final int id = v.getId();
|
final int id = v.getId();
|
||||||
if (id == R.id.function_body) {
|
if (id == R.id.function_body) {
|
||||||
|
menu.clear();
|
||||||
addEntities(menu, getNamesSorted(constantsRegistry), MENU_CONSTANT);
|
addEntities(menu, getNamesSorted(constantsRegistry), MENU_CONSTANT);
|
||||||
unregisterForContextMenu(bodyView);
|
unregisterForContextMenu(bodyView);
|
||||||
}
|
}
|
||||||
@ -490,6 +516,7 @@ public class EditFunctionFragment extends BaseDialogFragment implements View.OnC
|
|||||||
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
||||||
final int id = v.getId();
|
final int id = v.getId();
|
||||||
if (id == R.id.function_body) {
|
if (id == R.id.function_body) {
|
||||||
|
menu.clear();
|
||||||
addEntities(menu, getNamesSorted(functionsRegistry), MENU_FUNCTION);
|
addEntities(menu, getNamesSorted(functionsRegistry), MENU_FUNCTION);
|
||||||
unregisterForContextMenu(bodyView);
|
unregisterForContextMenu(bodyView);
|
||||||
}
|
}
|
||||||
@ -511,6 +538,7 @@ public class EditFunctionFragment extends BaseDialogFragment implements View.OnC
|
|||||||
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
|
||||||
final int id = v.getId();
|
final int id = v.getId();
|
||||||
if (id == R.id.function_body) {
|
if (id == R.id.function_body) {
|
||||||
|
menu.clear();
|
||||||
// can't use sub-menus as AlertDialog doesn't support them
|
// can't use sub-menus as AlertDialog doesn't support them
|
||||||
menu.add(MENU_CATEGORY, MENU_CONSTANT, Menu.NONE, R.string.c_vars_and_constants).setOnMenuItemClickListener(KeyboardUser.this);
|
menu.add(MENU_CATEGORY, MENU_CONSTANT, Menu.NONE, R.string.c_vars_and_constants).setOnMenuItemClickListener(KeyboardUser.this);
|
||||||
menu.add(MENU_CATEGORY, MENU_FUNCTION, Menu.NONE, R.string.c_functions).setOnMenuItemClickListener(KeyboardUser.this);
|
menu.add(MENU_CATEGORY, MENU_FUNCTION, Menu.NONE, R.string.c_functions).setOnMenuItemClickListener(KeyboardUser.this);
|
||||||
|
@ -3,18 +3,22 @@ package org.solovyev.android.calculator.view;
|
|||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.text.InputType;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
|
||||||
import org.solovyev.android.Check;
|
import org.solovyev.android.Check;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class EditTextCompat extends EditText {
|
public class EditTextCompat extends EditText {
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private Method setShowSoftInputOnFocusMethod;
|
private static Method setShowSoftInputOnFocusMethod;
|
||||||
|
private static boolean setShowSoftInputOnFocusMethodChecked;
|
||||||
|
|
||||||
public EditTextCompat(Context context) {
|
public EditTextCompat(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
@ -33,25 +37,51 @@ public class EditTextCompat extends EditText {
|
|||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setShowSoftInputOnFocusCompat(boolean show) {
|
public void dontShowSoftInputOnFocusCompat() {
|
||||||
Check.isMainThread();
|
Check.isMainThread();
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
setShowSoftInputOnFocus(show);
|
setShowSoftInputOnFocus(false);
|
||||||
} else {
|
} else {
|
||||||
setShowSoftInputOnFocusPreLollipop(show);
|
dontShowSoftInputOnFocusPreLollipop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setShowSoftInputOnFocusPreLollipop(boolean show) {
|
private void dontShowSoftInputOnFocusPreLollipop() {
|
||||||
try {
|
final Method method = getSetShowSoftInputOnFocusMethod();
|
||||||
if (setShowSoftInputOnFocusMethod == null) {
|
if (method == null) {
|
||||||
setShowSoftInputOnFocusMethod = EditText.class.getMethod("setShowSoftInputOnFocus", boolean.class);
|
disableSoftInputFromAppearing();
|
||||||
setShowSoftInputOnFocusMethod.setAccessible(true);
|
return;
|
||||||
}
|
}
|
||||||
setShowSoftInputOnFocusMethod.invoke(this, show);
|
try {
|
||||||
|
method.invoke(this, false);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.w("EditTextCompat", e.getMessage(), e);
|
Log.w("EditTextCompat", e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private Method getSetShowSoftInputOnFocusMethod() {
|
||||||
|
if (setShowSoftInputOnFocusMethodChecked) {
|
||||||
|
return setShowSoftInputOnFocusMethod;
|
||||||
|
}
|
||||||
|
setShowSoftInputOnFocusMethodChecked = true;
|
||||||
|
try {
|
||||||
|
setShowSoftInputOnFocusMethod = EditText.class.getMethod("setShowSoftInputOnFocus", boolean.class);
|
||||||
|
setShowSoftInputOnFocusMethod.setAccessible(true);
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
Log.w("EditTextCompat", e.getMessage(), e);
|
||||||
|
}
|
||||||
|
return setShowSoftInputOnFocusMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disableSoftInputFromAppearing() {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
||||||
|
setRawInputType(InputType.TYPE_CLASS_TEXT);
|
||||||
|
setTextIsSelectable(true);
|
||||||
|
} else {
|
||||||
|
setRawInputType(InputType.TYPE_NULL);
|
||||||
|
setFocusable(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,7 +269,7 @@
|
|||||||
<item name="android:layout_height">wrap_content</item>
|
<item name="android:layout_height">wrap_content</item>
|
||||||
<item name="android:layout_width">match_parent</item>
|
<item name="android:layout_width">match_parent</item>
|
||||||
<item name="android:gravity">center_vertical|left</item>
|
<item name="android:gravity">center_vertical|left</item>
|
||||||
<item name="android:background">?android:attr/selectableItemBackground</item>
|
<item name="android:background">?attr/selectableItemBackground</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="CppFab">
|
<style name="CppFab">
|
||||||
|
Loading…
Reference in New Issue
Block a user