Skip to content

Commit

Permalink
BAMControl: Spen options (1/2)
Browse files Browse the repository at this point in the history
  • Loading branch information
iGio90 committed Mar 2, 2013
1 parent 9a8f02e commit c462452
Show file tree
Hide file tree
Showing 3 changed files with 228 additions and 0 deletions.
34 changes: 34 additions & 0 deletions core/java/android/provider/Settings.java
Original file line number Diff line number Diff line change
Expand Up @@ -3366,6 +3366,40 @@ public static void setShowGTalkServiceStatusForUser(ContentResolver cr, boolean
*/
public static final String NAVIGATION_BAR_LEFTY_MODE = "navigation_bar_lefty_mode";

/**
* Custom Spen Actions
*
* @hide
*/
public static final String[] SPEN_ACTIONS = new String[] {
"spen_action_left",
"spen_action_right",
"spen_action_down",
"spen_action_up",
"spen_action_double",
"spen_action_long",
};

/**
* Setting to enable Spen actions.
*
* @hide
*/
public static final String ENABLE_SPEN_ACTIONS = "enable_spen_actions";

/**
* Custom navring icons
*
* @hide
*/
public static final String[] SYSTEMUI_NAVRING_ICON = new String[] {
"navring_icon_0",
"navring_icon_1",
"navring_icon_2",
"navring_icon_3",
"navring_icon_4",
};

/**
*
* @hide
Expand Down
53 changes: 53 additions & 0 deletions core/java/com/android/internal/util/jellybam/AwesomeConstants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.android.internal.util.jellybam;

public class AwesomeConstants {

public static final String ASSIST_ICON_METADATA_NAME = "com.android.systemui.action_assist_icon";

public final static int SWIPE_LEFT = 0;
public final static int SWIPE_RIGHT = 1;
public final static int SWIPE_DOWN = 2;
public final static int SWIPE_UP = 3;
public final static int TAP_DOUBLE = 4;
public final static int PRESS_LONG = 5;
public final static int SPEN_REMOVE = 6;
public final static int SPEN_INSERT = 7;

public static enum AwesomeConstant {
ACTION_HOME { @Override public String value() { return "**home**";}},
ACTION_BACK { @Override public String value() { return "**back**";}},
ACTION_MENU { @Override public String value() { return "**menu**";}},
ACTION_SEARCH { @Override public String value() { return "**search**";}},
ACTION_RECENTS { @Override public String value() { return "**recents**";}},
ACTION_ASSIST { @Override public String value() { return "**assist**";}},
ACTION_POWER { @Override public String value() { return "**power**";}},
ACTION_NOTIFICATIONS { @Override public String value() { return "**notifications**";}},
ACTION_CLOCKOPTIONS { @Override public String value() { return "**clockoptions**";}},
ACTION_VOICEASSIST { @Override public String value() { return "**voiceassist**";}},
ACTION_LAST_APP { @Override public String value() { return "**lastapp**";}},
ACTION_RECENTS_GB { @Override public String value() { return "**recentsgb**";}},
ACTION_TORCH { @Override public String value() { return "**torch**";}},
ACTION_IME { @Override public String value() { return "**ime**";}},
ACTION_KILL { @Override public String value() { return "**kill**";}},
ACTION_SILENT { @Override public String value() { return "**ring_silent**";}},
ACTION_VIB { @Override public String value() { return "**ring_vib**";}},
ACTION_SILENT_VIB { @Override public String value() { return "**ring_vib_silent**";}},
ACTION_EVENT { @Override public String value() { return "**event**";}},
ACTION_TODAY { @Override public String value() { return "**today**";}},
ACTION_ALARM { @Override public String value() { return "**alarm**";}},
ACTION_NULL { @Override public String value() { return "**null**";}},
ACTION_APP { @Override public String value() { return "**app**";}};
public String value() { return this.value(); }
}

public static AwesomeConstant fromString(String string) {
AwesomeConstant[] allTargs = AwesomeConstant.values();
for (int i=0; i < allTargs.length; i++) {
if (string.equals(allTargs[i].value())) {
return allTargs[i];
}
}
// not in ENUM must be custom
return AwesomeConstant.ACTION_APP;
}
}
141 changes: 141 additions & 0 deletions policy/src/com/android/internal/policy/impl/PhoneWindow.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,11 @@
import com.android.internal.widget.ActionBarView;

import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
Expand All @@ -57,6 +61,8 @@
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.database.ContentObserver;
import android.provider.Settings;
import android.util.AndroidRuntimeException;
import android.util.DisplayMetrics;
import android.util.EventLog;
Expand All @@ -66,6 +72,8 @@
import android.view.ActionMode;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.IRotationWatcher;
import android.view.IWindowManager;
import android.view.InputQueue;
Expand Down Expand Up @@ -93,6 +101,8 @@
import android.widget.ProgressBar;
import android.widget.TextView;

import static com.android.internal.util.jellybam.AwesomeConstants.*;

import java.lang.ref.WeakReference;
import java.util.ArrayList;

Expand Down Expand Up @@ -132,6 +142,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {

InputQueue.Callback mTakeInputQueueCallback;

private Context mContext;

private boolean mIsFloating;

private LayoutInflater mLayoutInflater;
Expand Down Expand Up @@ -215,6 +227,7 @@ static class WindowManagerHolder {

public PhoneWindow(Context context) {
super(context);
mContext = context;
mLayoutInflater = LayoutInflater.from(context);
}

Expand Down Expand Up @@ -1812,9 +1825,15 @@ private final class DecorView extends FrameLayout implements RootViewSurfaceTake
private PopupWindow mActionModePopup;
private Runnable mShowActionModePopup;

private Handler mConfigHandler;
private boolean mEnableSpen;
private SettingsObserver settingsObserver;

public DecorView(Context context, int featureId) {
super(context);
mFeatureId = featureId;
mConfigHandler = new Handler();
settingsObserver = new SettingsObserver(mConfigHandler);
}

@Override
Expand Down Expand Up @@ -1895,8 +1914,126 @@ public boolean dispatchKeyShortcutEvent(KeyEvent ev) {
return false;
}

private final StylusGestureFilter mStylusFilter = new StylusGestureFilter();

private class StylusGestureFilter extends SimpleOnGestureListener {
final ContentResolver resolver = mContext.getContentResolver();
private final static int SWIPE_MIN_DISTANCE = 50;
private final static int SWIPE_MIN_VELOCITY = 100;
private GestureDetector mDetector;
private final static String TAG = "StylusGestureFilter";

public StylusGestureFilter() {
mDetector = new GestureDetector(this);
}

public boolean onTouchEvent(MotionEvent event) {
return mDetector.onTouchEvent(event);
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {

final float xDistance = Math.abs(e1.getX() - e2.getX());
final float yDistance = Math.abs(e1.getY() - e2.getY());

velocityX = Math.abs(velocityX);
velocityY = Math.abs(velocityY);
boolean result = false;

if (velocityX > SWIPE_MIN_VELOCITY
&& xDistance > SWIPE_MIN_DISTANCE
&& xDistance > yDistance) {
if (e1.getX() > e2.getX()) { // right to left
// Swipe Left
SendBroadcast(
Settings.System.getString(resolver,
Settings.System.SPEN_ACTIONS[SWIPE_LEFT]));
} else {
// Swipe Right
SendBroadcast(
Settings.System.getString(resolver,
Settings.System.SPEN_ACTIONS[SWIPE_RIGHT]));
}
result = true;
} else if (velocityY > SWIPE_MIN_VELOCITY
&& yDistance > SWIPE_MIN_DISTANCE
&& yDistance > xDistance) {
if (e1.getY() > e2.getY()) { // bottom to up
// Swipe Up
SendBroadcast(
Settings.System.getString(resolver,
Settings.System.SPEN_ACTIONS[SWIPE_UP]));
} else {
// Swipe Down
SendBroadcast(
Settings.System.getString(resolver,
Settings.System.SPEN_ACTIONS[SWIPE_DOWN]));
}
result = true;
}
return result;
}

@Override
public boolean onDoubleTap(MotionEvent arg0) {
SendBroadcast(
Settings.System.getString(resolver,
Settings.System.SPEN_ACTIONS[TAP_DOUBLE]));
return true;
}

public void onLongPress(MotionEvent e) {
SendBroadcast(
Settings.System.getString(resolver,
Settings.System.SPEN_ACTIONS[PRESS_LONG]));
}

}

private void SendBroadcast(String action){
Intent i = new Intent();
i.setAction("com.android.systemui.aokp.LAUNCH_ACTION");
i.putExtra("action", action);
mContext.sendBroadcast(i);
}

private final class SettingsObserver extends ContentObserver {
SettingsObserver(Handler handler) {
super(handler);
}

void observe() {
ContentResolver resolver = mContext.getContentResolver();
resolver.registerContentObserver(Settings.System
.getUriFor(Settings.System.ENABLE_SPEN_ACTIONS), false, this);
updateSettings();
}

void unobserve() {
ContentResolver resolver = mContext.getContentResolver();
resolver.unregisterContentObserver(this);
}

@Override
public void onChange(boolean selfChange) {
updateSettings();
}

void updateSettings() {
mEnableSpen = Settings.System.getBoolean(
mContext.getContentResolver(),
Settings.System.ENABLE_SPEN_ACTIONS, false);
}
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (mEnableSpen && MotionEvent.BUTTON_SECONDARY == ev.getButtonState()) {
mStylusFilter.onTouchEvent(ev);
return false;
}
final Callback cb = getCallback();
return cb != null && !isDestroyed() && mFeatureId < 0 ? cb.dispatchTouchEvent(ev)
: super.dispatchTouchEvent(ev);
Expand Down Expand Up @@ -2464,6 +2601,8 @@ protected void onAttachedToWindow() {

updateWindowResizeState();

settingsObserver.observe();

final Callback cb = getCallback();
if (cb != null && !isDestroyed() && mFeatureId < 0) {
cb.onAttachedToWindow();
Expand All @@ -2485,6 +2624,8 @@ protected void onAttachedToWindow() {
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();

settingsObserver.unobserve();

final Callback cb = getCallback();
if (cb != null && mFeatureId < 0) {
cb.onDetachedFromWindow();
Expand Down

0 comments on commit c462452

Please sign in to comment.