forked from extern/Unexpected-Keyboard
997b7be4c0
Replace the short video with an animated vector image that shows the swipe gesture. This is much lighter and reliable than the mp4 video, which failed to play on many devices. Source for the image of the key is in inkscape SVG format in srcs/res and is converted to an android drawable when needed. The swipe animation is hand-written.
127 lines
3.7 KiB
Java
127 lines
3.7 KiB
Java
package juloo.keyboard2;
|
|
|
|
import android.annotation.TargetApi;
|
|
import android.app.Activity;
|
|
import android.content.Intent;
|
|
import android.graphics.drawable.Animatable;
|
|
import android.media.AudioManager;
|
|
import android.media.MediaPlayer;
|
|
import android.net.Uri;
|
|
import android.os.Build.VERSION;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.os.Message;
|
|
import android.provider.Settings;
|
|
import android.view.KeyEvent;
|
|
import android.view.Menu;
|
|
import android.view.MenuItem;
|
|
import android.view.View;
|
|
import android.view.inputmethod.InputMethodManager;
|
|
import android.widget.EditText;
|
|
import android.widget.ImageView;
|
|
import android.widget.TextView;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class LauncherActivity extends Activity implements Handler.Callback
|
|
{
|
|
/** Text is replaced when receiving key events. */
|
|
TextView _tryhere_text;
|
|
EditText _tryhere_area;
|
|
/** Periodically restart the animations. */
|
|
List<Animatable> _animations;
|
|
Handler _handler;
|
|
|
|
@Override
|
|
public void onCreate(Bundle savedInstanceState)
|
|
{
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.launcher_activity);
|
|
_tryhere_text = (TextView)findViewById(R.id.launcher_tryhere_text);
|
|
_tryhere_area = (EditText)findViewById(R.id.launcher_tryhere_area);
|
|
if (VERSION.SDK_INT >= 28)
|
|
_tryhere_area.addOnUnhandledKeyEventListener(
|
|
this.new Tryhere_OnUnhandledKeyEventListener());
|
|
}
|
|
|
|
@Override
|
|
public void onStart()
|
|
{
|
|
super.onStart();
|
|
_animations = new ArrayList<Animatable>();
|
|
_animations.add(find_anim(R.id.launcher_anim_swipe));
|
|
_handler = new Handler(getMainLooper(), this);
|
|
_handler.sendEmptyMessageDelayed(0, 500);
|
|
}
|
|
|
|
@Override
|
|
public boolean handleMessage(Message _msg)
|
|
{
|
|
for (Animatable anim : _animations)
|
|
anim.start();
|
|
_handler.sendEmptyMessageDelayed(0, 3000);
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public final boolean onCreateOptionsMenu(Menu menu)
|
|
{
|
|
getMenuInflater().inflate(R.menu.launcher_menu, menu);
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public final boolean onOptionsItemSelected(MenuItem item)
|
|
{
|
|
if (item.getItemId() == R.id.btnLaunchSettingsActivity)
|
|
{
|
|
Intent intent = new Intent(LauncherActivity.this, SettingsActivity.class);
|
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
startActivity(intent);
|
|
}
|
|
return super.onOptionsItemSelected(item);
|
|
}
|
|
|
|
public void launch_imesettings(View _btn)
|
|
{
|
|
startActivity(new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS));
|
|
}
|
|
|
|
public void launch_imepicker(View v)
|
|
{
|
|
InputMethodManager imm =
|
|
(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
|
|
imm.showInputMethodPicker();
|
|
}
|
|
|
|
Animatable find_anim(int id)
|
|
{
|
|
ImageView img = (ImageView)findViewById(id);
|
|
return (Animatable)img.getDrawable();
|
|
}
|
|
|
|
@TargetApi(28)
|
|
final class Tryhere_OnUnhandledKeyEventListener implements View.OnUnhandledKeyEventListener
|
|
{
|
|
public boolean onUnhandledKeyEvent(View v, KeyEvent ev)
|
|
{
|
|
// Don't handle the back key
|
|
if (ev.getKeyCode() == KeyEvent.KEYCODE_BACK)
|
|
return false;
|
|
// Key release of modifiers would erase interesting data
|
|
if (KeyEvent.isModifierKey(ev.getKeyCode()))
|
|
return false;
|
|
StringBuilder s = new StringBuilder();
|
|
if (ev.isAltPressed()) s.append("Alt+");
|
|
if (ev.isShiftPressed()) s.append("Shift+");
|
|
if (ev.isCtrlPressed()) s.append("Ctrl+");
|
|
if (ev.isMetaPressed()) s.append("Meta+");
|
|
// s.append(ev.getDisplayLabel());
|
|
String kc = KeyEvent.keyCodeToString(ev.getKeyCode());
|
|
s.append(kc.replaceFirst("^KEYCODE_", ""));
|
|
_tryhere_text.setText(s.toString());
|
|
return false;
|
|
}
|
|
}
|
|
}
|