| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package info.knacki.pass.input;
- import android.annotation.SuppressLint;
- import android.content.Context;
- import android.content.Intent;
- import android.inputmethodservice.InputMethodService;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.inputmethod.EditorInfo;
- import android.view.inputmethod.InputMethodManager;
- import android.widget.ScrollView;
- import android.widget.Toast;
- import java.io.File;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import info.knacki.pass.R;
- import info.knacki.pass.io.FileInterfaceFactory;
- import info.knacki.pass.io.OnResponseListener;
- import info.knacki.pass.io.PathUtils;
- import info.knacki.pass.ui.MainActivity;
- import info.knacki.pass.ui.passwordList.PasswordClickListener;
- import info.knacki.pass.ui.passwordList.PasswordListView;
- import info.knacki.pass.ui.passwordPicker.PasswordPickerFactory;
- public class InputService extends InputMethodService implements PasswordClickListener {
- protected PasswordListView fPasswordListView;
- private static final Logger log = Logger.getLogger(InputService.class.getName());
- protected View fInputView;
- @Override
- public void onStartInputView(EditorInfo info, boolean restarting) {
- super.onStartInputView(info, restarting);
- if (fPasswordListView != null) {
- fPasswordListView.reset();
- }
- }
- @SuppressLint("InflateParams")
- @Override
- public View onCreateInputView() {
- fInputView = LayoutInflater.from(this).inflate(R.layout.input, null, false);
- fPasswordListView = new PasswordListView<>(this, PathUtils.GetPassDir(this));
- ((ScrollView)fInputView.findViewById(R.id.passwordListContainer)).addView(fPasswordListView);
- fInputView.findViewById(R.id.prevButton).setOnClickListener(view -> {
- InputMethodManager service = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- if (null == service) {
- Toast.makeText(InputService.this, "Android error", Toast.LENGTH_LONG).show();
- log.log(Level.SEVERE, "Cannot get Input method service");
- return;
- }
- service.showInputMethodPicker();
- });
- fInputView.findViewById(R.id.openAppButton).setOnClickListener(view -> startActivity(new Intent(InputService.this, MainActivity.class)));
- return fInputView;
- }
- public void sendPassword(String passwordContent) {
- getCurrentInputConnection().commitText(passwordContent, passwordContent.length());
- onFinishInput();
- }
- @Override
- public void OnPasswordClicked(File f) {
- FileInterfaceFactory.GetFileInterface(this, PasswordPickerFactory.GetPasswordPicker(this, fInputView), f).ReadFile(new OnResponseListener<String>() {
- @Override
- public void OnResponse(String passwordContent) {
- sendPassword(passwordContent);
- }
- @Override
- public void OnError(String msg, Throwable e) {
- Toast.makeText(InputService.this, "Error: " + msg, Toast.LENGTH_LONG).show();
- log.log(Level.SEVERE, msg, e);
- }
- });
- }
- }
|