Android Open Source - BluetoothHidEmu Ui Controls






From Project

Back to project page BluetoothHidEmu.

License

The source code is released under:

Apache License

If you think the Android project BluetoothHidEmu listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package andraus.bluetoothhidemu.ui;
// w w  w . ja v a  2 s  . c o m
import andraus.bluetoothhidemu.BluetoothHidEmuActivity;
import andraus.bluetoothhidemu.R;
import andraus.bluetoothhidemu.sock.SocketManager;
import andraus.bluetoothhidemu.spoof.Spoof.SpoofMode;
import andraus.bluetoothhidemu.util.DoLog;
import android.content.Context;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.LinearLayout;

/**
 * Abstract class to represent UI controls for a SpoofMode (emulation mode)
 * 
 * Specializing classes must be implemented for particular controls.
 */
public abstract class UiControls {
    
    private static final String TAG = BluetoothHidEmuActivity.TAG;
    
    private static UiControls mInstance = null;
    
    protected Context mContext = null;
    protected SocketManager mSocketManager = null;
    protected LinearLayout mControlsLayout = null;
    protected SpoofMode mSpoofMode = null;
    
    /**
     * setupInstance()
     * 
     * @param context - application context
     * @param socketManager
     * @param mode - emulation mode
     * @param mainLayout - layout to bind the controls to.
     * @return
     */
    public static UiControls setupInstance(Context context, SocketManager socketManager, SpoofMode mode, ViewGroup mainLayout) {
        
        DoLog.d(TAG, "UiControls: setupInstance()");
        
        if (mInstance != null) {
            mInstance.cleanup(mainLayout);
        }
        mInstance = null;

        switch (mode) {
        case HID_GENERIC:
            mInstance = new GenericUiControls(context, socketManager, mode, mainLayout);
            break;
        case HID_PS3KEYPAD:
            mInstance = new Ps3KeypadUiControls(context, socketManager, mode, mainLayout);
            break;
        default:
            throw new IllegalStateException("Invalid emulation mode");
        }
        
        return mInstance;
    }
    
    /**
     * Constructor. 
     * 
     * Provides basic setup; extending classes must construct the specifics.
     * 
     * @param context
     * @param socketManager
     * @param mode
     * @param mainLayout
     */
    protected UiControls(Context context, SocketManager socketManager, SpoofMode mode, ViewGroup mainLayout) {
        super();
        
        mContext = context;
        mSocketManager = socketManager;
        mSpoofMode = mode;
        
        final LayoutInflater inflaterService = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        
        final int res;
        switch (mode) {
        case HID_GENERIC:
            res = R.layout.generic_controls_layout;
            break;
        case HID_PS3KEYPAD:
            res = R.layout.ps3keypad_controls_layout;
            break;
        default:
            throw new IllegalStateException("Invalid emulation mode");
        }
        mControlsLayout = (LinearLayout) inflaterService.inflate(res, null);
        mControlsLayout.setVisibility(View.INVISIBLE);
        mainLayout.addView(mControlsLayout);
    }

    /**
     * cleanup()
     * 
     * Provides basic cleanup; extending classes should also perform their cleanup 
     * overriding this method.
     * 
     * @param mainLayout
     */
    public void cleanup(ViewGroup mainLayout) {
        
        DoLog.d(TAG, "UiControls: cleanup()");
        
        if (mControlsLayout != null) {
            if (mControlsLayout.getVisibility() == View.VISIBLE) {
                animate(View.INVISIBLE);
            }
            mainLayout.removeView(mControlsLayout);
        }
    }

    /**
     * animate()
     * 
     * @param visibility
     */
    public void animate(int visibility) {
        final int duration = 250;
        
        if (mControlsLayout.getVisibility() == visibility) {
            return;
        }
        
        mControlsLayout.clearAnimation();
        if (visibility == View.VISIBLE) {
            mControlsLayout.setVisibility(visibility);
            //Animation animation = new AlphaAnimation(0f, 1f);
            Animation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,
                                                        0f, 
                                                        Animation.RELATIVE_TO_SELF,
                                                        0f,
                                                        Animation.RELATIVE_TO_PARENT,
                                                        1f,
                                                        Animation.RELATIVE_TO_PARENT,
                                                        0f);
            animation.setDuration(duration);
            animation.setInterpolator(new DecelerateInterpolator(1f));
            
            mControlsLayout.startAnimation(animation);
            
        } else {
            //Animation animation = new AlphaAnimation(1f, 0f);
            Animation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,
                                    0f,
                                    Animation.RELATIVE_TO_SELF,
                                    0f,
                                    Animation.RELATIVE_TO_PARENT,
                                    0f,
                                    Animation.RELATIVE_TO_PARENT,
                                    1f);

            animation.setDuration(duration);
            animation.setInterpolator(new AccelerateInterpolator(1f));
            
            mControlsLayout.startAnimation(animation);
            mControlsLayout.setVisibility(visibility);
        }
        
    }
    
    /**
     * Override to process key down events
     * 
     * @param keyCode
     * @param event
     * @return
     */
    public abstract boolean processKeyDown(int keyCode, KeyEvent event);
    
    /**
     * Override to process key up events
     * 
     * @param keyCode
     * @param event
     * @return
     */
    public abstract boolean processKeyUp(int keyCode, KeyEvent event);
    
    /**
     * Override to setup (enable/disable) the control listeners
     * 
     * @param enable
     */
    public abstract void setControlsListeners(boolean enable);

}




Java Source Code List

andraus.bluetoothhidemu.BluetoothHidEmuActivity.java
andraus.bluetoothhidemu.ButtonClickListener.java
andraus.bluetoothhidemu.Constants.java
andraus.bluetoothhidemu.KeyboardKeyListener.java
andraus.bluetoothhidemu.KeyboardTextWatcher.java
andraus.bluetoothhidemu.SpecialKeyListener.java
andraus.bluetoothhidemu.TouchpadListener.java
andraus.bluetoothhidemu.settings.BluetoothAdapterStateReceiver.java
andraus.bluetoothhidemu.settings.BluetoothDeviceStateReceiver.java
andraus.bluetoothhidemu.settings.Settings.java
andraus.bluetoothhidemu.sock.BluetoothSocketThread.java
andraus.bluetoothhidemu.sock.SocketManager.java
andraus.bluetoothhidemu.sock.payload.HidConsumerPayload.java
andraus.bluetoothhidemu.sock.payload.HidKeyPair.java
andraus.bluetoothhidemu.sock.payload.HidKeyboardPayload.java
andraus.bluetoothhidemu.sock.payload.HidPayload.java
andraus.bluetoothhidemu.sock.payload.HidPointerPayload.java
andraus.bluetoothhidemu.sock.payload.HidSixaxisPayload.java
andraus.bluetoothhidemu.spoof.BluetoothAdapterSpooferFactory.java
andraus.bluetoothhidemu.spoof.BluetoothAdapterSpooferGeneric.java
andraus.bluetoothhidemu.spoof.BluetoothAdapterSpooferMotoReflect.java
andraus.bluetoothhidemu.spoof.BluetoothAdapterSpooferMoto.java
andraus.bluetoothhidemu.spoof.BluetoothAdapterSpoofer.java
andraus.bluetoothhidemu.spoof.CleanupExceptionHandler.java
andraus.bluetoothhidemu.spoof.Spoof.java
andraus.bluetoothhidemu.spoof.jni.BluetoothSocketJni.java
andraus.bluetoothhidemu.ui.GenericUiControls.java
andraus.bluetoothhidemu.ui.Ps3KeypadUiControls.java
andraus.bluetoothhidemu.ui.UiControls.java
andraus.bluetoothhidemu.util.DoLog.java
andraus.bluetoothhidemu.view.ArrowButton.java
andraus.bluetoothhidemu.view.BluetoothDeviceArrayAdapter.java
andraus.bluetoothhidemu.view.BluetoothDeviceView.java
andraus.bluetoothhidemu.view.EchoEditText.java
andraus.bluetoothhidemu.view.ViewUtils.java