Merge "Add functions to enable / disable spell checker"
This commit is contained in:
@@ -3784,6 +3784,13 @@ public final class Settings {
|
|||||||
public static final String SELECTED_SPELL_CHECKER_SUBTYPE =
|
public static final String SELECTED_SPELL_CHECKER_SUBTYPE =
|
||||||
"selected_spell_checker_subtype";
|
"selected_spell_checker_subtype";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@link ComponentName} string whether spell checker is enabled or not.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final String SPELL_CHECKER_ENABLED = "spell_checker_enabled";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* What happens when the user presses the Power button while in-call
|
* What happens when the user presses the Power button while in-call
|
||||||
* and the screen is on.<br/>
|
* and the screen is on.<br/>
|
||||||
|
|||||||
@@ -170,5 +170,26 @@ public final class TextServicesManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public void setSpellCheckerEnabled(boolean enabled) {
|
||||||
|
try {
|
||||||
|
sService.setSpellCheckerEnabled(enabled);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Log.e(TAG, "Error in setSpellCheckerSubtype:" + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public boolean isSpellCheckerEnabled() {
|
||||||
|
try {
|
||||||
|
return sService.isSpellCheckerEnabled();
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
Log.e(TAG, "Error in setSpellCheckerSubtype:" + e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,5 +37,7 @@ interface ITextServicesManager {
|
|||||||
oneway void finishSpellCheckerService(in ISpellCheckerSessionListener listener);
|
oneway void finishSpellCheckerService(in ISpellCheckerSessionListener listener);
|
||||||
oneway void setCurrentSpellChecker(String locale, String sciId);
|
oneway void setCurrentSpellChecker(String locale, String sciId);
|
||||||
oneway void setCurrentSpellCheckerSubtype(String locale, int hashCode);
|
oneway void setCurrentSpellCheckerSubtype(String locale, int hashCode);
|
||||||
|
oneway void setSpellCheckerEnabled(boolean enabled);
|
||||||
|
boolean isSpellCheckerEnabled();
|
||||||
SpellCheckerInfo[] getEnabledSpellCheckers();
|
SpellCheckerInfo[] getEnabledSpellCheckers();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
|||||||
@Override
|
@Override
|
||||||
public SpellCheckerInfo getCurrentSpellChecker(String locale) {
|
public SpellCheckerInfo getCurrentSpellChecker(String locale) {
|
||||||
synchronized (mSpellCheckerMap) {
|
synchronized (mSpellCheckerMap) {
|
||||||
String curSpellCheckerId =
|
final String curSpellCheckerId =
|
||||||
Settings.Secure.getString(mContext.getContentResolver(),
|
Settings.Secure.getString(mContext.getContentResolver(),
|
||||||
Settings.Secure.SELECTED_SPELL_CHECKER);
|
Settings.Secure.SELECTED_SPELL_CHECKER);
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
@@ -197,10 +197,16 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
|||||||
Slog.w(TAG, "getCurrentSpellChecker: " + subtypeHashCodeStr);
|
Slog.w(TAG, "getCurrentSpellChecker: " + subtypeHashCodeStr);
|
||||||
}
|
}
|
||||||
final SpellCheckerInfo sci = getCurrentSpellChecker(null);
|
final SpellCheckerInfo sci = getCurrentSpellChecker(null);
|
||||||
if (sci.getSubtypeCount() == 0) {
|
if (sci == null || sci.getSubtypeCount() == 0) {
|
||||||
|
if (DBG) {
|
||||||
|
Slog.w(TAG, "Subtype not found.");
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (TextUtils.isEmpty(subtypeHashCodeStr)) {
|
if (TextUtils.isEmpty(subtypeHashCodeStr)) {
|
||||||
|
if (DBG) {
|
||||||
|
Slog.w(TAG, "Return first subtype in " + sci.getId());
|
||||||
|
}
|
||||||
// Return the first Subtype if there is no settings for the current subtype.
|
// Return the first Subtype if there is no settings for the current subtype.
|
||||||
return sci.getSubtypeAt(0);
|
return sci.getSubtypeAt(0);
|
||||||
}
|
}
|
||||||
@@ -208,9 +214,15 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
|||||||
for (int i = 0; i < sci.getSubtypeCount(); ++i) {
|
for (int i = 0; i < sci.getSubtypeCount(); ++i) {
|
||||||
final SpellCheckerSubtype scs = sci.getSubtypeAt(i);
|
final SpellCheckerSubtype scs = sci.getSubtypeAt(i);
|
||||||
if (scs.hashCode() == hashCode) {
|
if (scs.hashCode() == hashCode) {
|
||||||
|
if (DBG) {
|
||||||
|
Slog.w(TAG, "Return subtype " + scs.hashCode());
|
||||||
|
}
|
||||||
return scs;
|
return scs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (DBG) {
|
||||||
|
Slog.w(TAG, "Return first subtype in " + sci.getId());
|
||||||
|
}
|
||||||
return sci.getSubtypeAt(0);
|
return sci.getSubtypeAt(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -283,6 +295,13 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSpellCheckerEnabled() {
|
||||||
|
synchronized(mSpellCheckerMap) {
|
||||||
|
return isSpellCheckerEnabledLocked();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void startSpellCheckerServiceInnerLocked(SpellCheckerInfo info, String locale,
|
private void startSpellCheckerServiceInnerLocked(SpellCheckerInfo info, String locale,
|
||||||
ITextServicesSessionListener tsListener, ISpellCheckerSessionListener scListener,
|
ITextServicesSessionListener tsListener, ISpellCheckerSessionListener scListener,
|
||||||
int uid, Bundle bundle) {
|
int uid, Bundle bundle) {
|
||||||
@@ -354,7 +373,21 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
|||||||
"Requires permission "
|
"Requires permission "
|
||||||
+ android.Manifest.permission.WRITE_SECURE_SETTINGS);
|
+ android.Manifest.permission.WRITE_SECURE_SETTINGS);
|
||||||
}
|
}
|
||||||
setCurrentSpellCheckerLocked(hashCode);
|
setCurrentSpellCheckerSubtypeLocked(hashCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSpellCheckerEnabled(boolean enabled) {
|
||||||
|
synchronized(mSpellCheckerMap) {
|
||||||
|
if (mContext.checkCallingOrSelfPermission(
|
||||||
|
android.Manifest.permission.WRITE_SECURE_SETTINGS)
|
||||||
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
|
throw new SecurityException(
|
||||||
|
"Requires permission "
|
||||||
|
+ android.Manifest.permission.WRITE_SECURE_SETTINGS);
|
||||||
|
}
|
||||||
|
setSpellCheckerEnabledLocked(enabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -372,7 +405,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setCurrentSpellCheckerLocked(int hashCode) {
|
private void setCurrentSpellCheckerSubtypeLocked(int hashCode) {
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Slog.w(TAG, "setCurrentSpellCheckerSubtype: " + hashCode);
|
Slog.w(TAG, "setCurrentSpellCheckerSubtype: " + hashCode);
|
||||||
}
|
}
|
||||||
@@ -397,6 +430,33 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setSpellCheckerEnabledLocked(boolean enabled) {
|
||||||
|
if (DBG) {
|
||||||
|
Slog.w(TAG, "setSpellCheckerEnabled: " + enabled);
|
||||||
|
}
|
||||||
|
final long ident = Binder.clearCallingIdentity();
|
||||||
|
try {
|
||||||
|
Settings.Secure.putInt(mContext.getContentResolver(),
|
||||||
|
Settings.Secure.SPELL_CHECKER_ENABLED, enabled ? 1 : 0);
|
||||||
|
} finally {
|
||||||
|
Binder.restoreCallingIdentity(ident);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isSpellCheckerEnabledLocked() {
|
||||||
|
final long ident = Binder.clearCallingIdentity();
|
||||||
|
try {
|
||||||
|
final boolean retval = Settings.Secure.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.Secure.SPELL_CHECKER_ENABLED, 1) == 1;
|
||||||
|
if (DBG) {
|
||||||
|
Slog.w(TAG, "getSpellCheckerEnabled: " + retval);
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
} finally {
|
||||||
|
Binder.restoreCallingIdentity(ident);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SpellCheckerBindGroup contains active text service session listeners.
|
// SpellCheckerBindGroup contains active text service session listeners.
|
||||||
// If there are no listeners anymore, the SpellCheckerBindGroup instance will be removed from
|
// If there are no listeners anymore, the SpellCheckerBindGroup instance will be removed from
|
||||||
// mSpellCheckerBindGroups
|
// mSpellCheckerBindGroups
|
||||||
|
|||||||
Reference in New Issue
Block a user