Добрый день.
Несколько месяцев назад команда
cyanogenmod стала понемногу выкладывать билды 12 версии своего одноименного детища, основанного на коде Android 5 Lollipop. В начале года, наконец-то, дошла очередь и до Nexus 4. Не откладывая в долгий ящик я прошил одним из первых ночников. Конечно все еще сыровато, то и дело там и сям наблюдаются непереведенные строки, далеко не все цианогеновские фишки присутствуют, но мы то
упоротые фанаты цианогена знаем, что все это мелочи и с каждым новым билдом ситуация будет все улучшаться.
В принципе, текущий ночник, а на момент написания статьи это
билд от 18-го числа, вполне юзабелен. Все заявленные функции Nexus 4 работают штатно, стохастических ребутов и бутлупов не наблюдается. Но… «не было печали — купила баба поросят»
Елозим пальцем...
Как всем известно, Android5 имеет замечательный плоский дизайн, именуемый корпорацией добра Material Design и многим, как и мне он чертовски нравится и возникает непреодолимое желание чтобы все сторонние приложения выглядели так же. К сожалению не все разработчики поспевают за прогрессом, исключением не явилась и клавиатура Swype, которую я использую уже несколько лет, начиная с самых первых бетаверсий.
Если кто-то не в курсе, поясню: команда Swype Inc. несколько лет назад предложила революционный способ ввода текста для мобильных устройств, который позволяет набирать слова практически не отрывая палец от экрана и выпустила одноименное приложение Swype, реализующее этот метод.
Позже появилось еще несколько реализаций:
Slide IT,
SwiftKey, а в Android 4.2 и штатная клавиатура получила искомый функционал. Но все это, на мой взгляд, было не то, хоть и некоторые из подражателей снискали себя немалую армию фанатов.
А не сменить ли мне клавиатуру...
Некоторое время назад мне на глаза попался обзор клавиатуры из пятого андроида, и отзывы оказались на удивление положительными, а принимая во внимание, что она оформлена в духе Material Design, и что Swype пока не озаботился новой темой (да и тяжелый он, откровенно говоря), было принято решение перейти на клавиатуру Google и потестить-посмотреть.
Итак, на телефоне был установлен билд от 15-го января (
cm-12-20150115-NIGHTLY-mako.zip), я отключаю Swype и включаю клавиатуру AOSP. В настройках включен «Непрерывный ввод». Пробуем… и облом :( Непрерывный ввод не работает. Ну что ж, видимо сырость прошивки всему виной (а если бы сразу загуглил, то и статьи, наверняка, не было бы :) ) Я не стал отчаиваться и установил из маркета
клавиатуру Google как отдельное приложение. И возрадовался. Она действительно оказалась неплоха. Огорчал только тот факт, что установлены, по сути, две одинаковых клавиатуры, они жрут место и вообще… Не ТРУЪ короче, но делать нечего, ждем свежий билд CM12. Да, нужно сказать, что все остальные способы ввода, кроме голосового я отключил, чтобы не маячили.
О! а вот и билд!
cm-12-20150118-NIGHTLY-mako.zip. Установил конечно, порадовался появившейся возможности кастомизации плиток в панели уведомлений, но при попытке включить клавиатуру AOSP получил странную ошибку:
«Это точно какой-то конфликт» — подумал Штирлиц, и удалил клавиатуру Google, установленную из маркета. Оглядываясь сейчас назад я не могу сказать точно, что мной двигало, возможно, всему виной поздний вечер, и уже плохо соображающая голова. Не знаю. Но факт есть факт: Я остался с одним голосовым вводом
Я снова и снова пытался вызвать диалог смена раскладки, но безжалостный CM покрывал меня матюками на Java:
Ознакомиться с матюкамиjava.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.Settings$InputMethodAndLanguageSettingsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.preference.PreferenceCategory.removePreference(android.preference.Preference)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
at android.app.ActivityThread.access$800(ActivityThread.java:147)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5255)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.preference.PreferenceCategory.removePreference(android.preference.Preference)' on a null object reference
at com.android.settings.inputmethod.InputMethodAndLanguageSettings.onCreate(InputMethodAndLanguageSettings.java:179)
at android.app.Fragment.performCreate(Fragment.java:2031)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:863)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.app.BackStackRecord.run(BackStackRecord.java:833)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1452)
at android.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:483)
at com.android.settings.SettingsActivity.switchToFragment(SettingsActivity.java:956)
at com.android.settings.SettingsActivity.onCreate(SettingsActivity.java:582)
at android.app.Activity.performCreate(Activity.java:5933)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2264)
... 10 more
И тебя вылечим, и меня вылечим
Гугление показало, что от этого недуга пострадал не только я. Еще пара человек так же не смогли сменить способ ввода штатными средствами, причем и на Nexus 5 тоже. Значит дело все таки в новом билде CM, поломали таки цианогеновцы что-то в коде. Пофиксят конечно, но до этого момента еще дожить надо, как-то еще вконтактик и воцапчик писать все это время нужно. Значит будем чинить.
Починение, кстати, не сложное, если знать куда бить. А бить вот куда:
Таким образом, кстати, можно включить любую другую, только предварительно нужно просмотреть список возможных способов ввода:
# ime list -a
Дык а с непрерывным вводом-то что?
Уффф… Возможность вводить текст восстановлена, но проблема свайпа в родной клавиатуре так и не решена. И гугление таки дало решение:
Если непрерывный ввод не работает, то нужно любым файловым менеджером с root-доступом зайти в /system/lib/ и переименовать там библиотеку
libjni_latinime.so на
libjni_latinimegoogle.so и перезагрузить телефон.
… И морды эти еще противные
Ну и раз пошла такая пьянка, решил до кучи еще «разобраться» со смайлами, ибо штатные кроме рвотного рефлекса ничего не выражают:

Мрак, адъ и Израиль.
Здесь в общем-то все просто, нужно установить
Emoji Switcher и изменить иконки смайлов на набор IOS. Теперь смайлы выглядят так:
За сим все, надеюсь кому-то был полезен.
ТЫДЫЩ!!!

PS: Только что установил билд от 19-го числа. Проблема с выбором способа ввода до сих пор не решена.
комментарии (15)