diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 02ac75cb..6364da48 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -247,11 +247,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/menu/menu_compose_send.xml b/res/menu/menu_compose_send.xml new file mode 100644 index 00000000..69aa5ff7 --- /dev/null +++ b/res/menu/menu_compose_send.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/res/menu/menu_mousepad.xml b/res/menu/menu_mousepad.xml index cd484135..2c772640 100644 --- a/res/menu/menu_mousepad.xml +++ b/res/menu/menu_mousepad.xml @@ -8,6 +8,10 @@ android:title="@string/show_keyboard" kdeconnect:showAsAction="ifRoom" /> + Rise Up Rise Down + Tap here to type + Clear + Send + Compose text + Multi-platform app that allows your devices to communicate (e.g., your phone and your computer) + * + * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL + */ + + +package org.kde.kdeconnect.Plugins.MousePadPlugin; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; + +import android.os.Bundle; +import android.util.Log; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; + +import org.kde.kdeconnect.BackgroundService; +import org.kde.kdeconnect.NetworkPacket; +import org.kde.kdeconnect.UserInterface.ThemeUtil; +import org.kde.kdeconnect_tp.R; + +import android.view.inputmethod.EditorInfo; +import android.widget.EditText; +import android.widget.TextView; + +import java.util.Objects; + + +public class ComposeSendActivity extends AppCompatActivity { + + private String deviceId; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ThemeUtil.setUserPreferredTheme(this); + + setContentView(R.layout.activity_compose_send); + + setSupportActionBar(findViewById(R.id.toolbar)); + Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowHomeEnabled(true); + + Intent intent = getIntent(); + + deviceId = intent.getStringExtra("org.kde.kdeconnect.Plugins.MousePadPlugin.deviceId"); + + EditText editText = findViewById(R.id.compose); + + editText.requestFocus(); + editText.setOnEditorActionListener(new EditText.OnEditorActionListener() { + @Override + + // this is almost never used + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_SEND) { + sendComposed(); + return true; + } + if (actionId == EditorInfo.IME_ACTION_DONE) { + clear(); + return true; + } + return false; + } + }); + } + + public void sendChars(CharSequence chars) { + final NetworkPacket np = new NetworkPacket(MousePadPlugin.PACKET_TYPE_MOUSEPAD_REQUEST); + np.set("key", chars.toString()); + sendKeyPressPacket(np); + } + + private void sendKeyPressPacket(final NetworkPacket np) { + try { + Log.d("packed", np.serialize()); + } catch (Exception e) { + Log.e("KDE/ComposeSend", "Exception", e); + } + + BackgroundService.RunWithPlugin(this, deviceId, MousePadPlugin.class, plugin -> plugin.sendKeyboardPacket(np)); + } + + public void sendComposed() { + EditText editText = findViewById(R.id.compose); + + String editTextStr = editText.getText().toString(); + sendChars(editTextStr); + } + + public void clear() { + EditText editText = findViewById(R.id.compose); + editText.setText(""); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_compose_send, menu); + + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_clear_compose: + clear(); + return true; + case R.id.menu_send_compose: + sendComposed(); + default: + return super.onOptionsItemSelected(item); + } + } +} diff --git a/src/org/kde/kdeconnect/Plugins/MousePadPlugin/MousePadActivity.java b/src/org/kde/kdeconnect/Plugins/MousePadPlugin/MousePadActivity.java index 504389a6..7f56afe8 100644 --- a/src/org/kde/kdeconnect/Plugins/MousePadPlugin/MousePadActivity.java +++ b/src/org/kde/kdeconnect/Plugins/MousePadPlugin/MousePadActivity.java @@ -6,6 +6,7 @@ package org.kde.kdeconnect.Plugins.MousePadPlugin; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; @@ -192,6 +193,12 @@ public class MousePadActivity extends AppCompatActivity implements GestureDetect case R.id.menu_show_keyboard: showKeyboard(); return true; + case R.id.menu_open_compose_send: + + Intent intent = new Intent(this, ComposeSendActivity.class); + intent.putExtra("org.kde.kdeconnect.Plugins.MousePadPlugin.deviceId",deviceId); + startActivity(intent); + return true; default: return super.onOptionsItemSelected(item); }