From afac6b86ffea9390fb859bd5bc71f3287cd70e54 Mon Sep 17 00:00:00 2001 From: Dhilan007 Date: Mon, 30 Jun 2014 18:41:47 +0800 Subject: [PATCH 1/3] move controller support to 'libcontrollerdeleate' project. --- .../libs/android-async-http-1.4.5.jar | Bin 0 -> 92276 bytes .../android/ControllerDelegate/lint.xml | 6 + .../cocos2dx/lib/GameControllerActivity.java | 220 ++++++++++++++++++ .../cocos2dx/lib/GameControllerAdapter.java | 0 .../cocos2dx/lib/GameControllerHelper.java | 89 +++---- .../org/cocos2dx/lib/GameControllerUtils.java | 0 .../InputManagerCompat.java | 0 .../inputmanagercompat/InputManagerV16.java | 0 .../inputmanagercompat/InputManagerV9.java | 0 .../platform/android/java/project.properties | 3 +- .../org/cocos2dx/lib/Cocos2dxActivity.java | 146 +----------- 11 files changed, 277 insertions(+), 187 deletions(-) create mode 100644 cocos/platform/android/ControllerDelegate/libs/android-async-http-1.4.5.jar create mode 100644 cocos/platform/android/ControllerDelegate/lint.xml create mode 100644 cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerActivity.java rename cocos/platform/android/{java => ControllerDelegate}/src/org/cocos2dx/lib/GameControllerAdapter.java (100%) rename cocos/platform/android/{java => ControllerDelegate}/src/org/cocos2dx/lib/GameControllerHelper.java (92%) rename cocos/platform/android/{java => ControllerDelegate}/src/org/cocos2dx/lib/GameControllerUtils.java (100%) rename cocos/platform/android/{java => ControllerDelegate}/src/org/cocos2dx/lib/inputmanagercompat/InputManagerCompat.java (100%) rename cocos/platform/android/{java => ControllerDelegate}/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV16.java (100%) rename cocos/platform/android/{java => ControllerDelegate}/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV9.java (100%) diff --git a/cocos/platform/android/ControllerDelegate/libs/android-async-http-1.4.5.jar b/cocos/platform/android/ControllerDelegate/libs/android-async-http-1.4.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..d383f60e8706cdeac6523a889b8a64cccdf85447 GIT binary patch literal 92276 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

lc`cOPSB znFXo+jiv1uPCyJhaTJFuCny^&p=Ag=XCz%ddxm}|IS-|UTvLy4QIY54YV4bZ0O2lw zToDmVMu{#L$6mgb;V#=RcMBXX9(QpRPR{Ss);YW(*WtqnXC(_B7L%AOA~fGvTy7q= zD{SUNjd{z@9jNI|_3gRQQt@9!340Nn%*!Kuq3un3Qp!TP+OL3Y)273pKLl@87zVwX zKOohyO^P|cgM2BV&5qXsl{&80PunOPFLtmaEmF2wyOht7MNP3D4I!kEoPfL~Qb6^v zI0cizr*A#xV}MpTlr|(sVXb3av3zoine6;odjI}AR%ta=Fk^p2`oRR8D@FYfh8k_4FkX@;f zw1J4@w(1=;QqR^Y1U(iV#WZOS^+D1{$u0E{Ob4bQbiq%DSXE~Jg`T9L0E!@0yzwIBU}vAoQ=1gT7T z8Y_03T$#aP=4;Nonx7`;T6vTZMU_47b|ktnaBEtX_Kfl{uXICv0Ev9Lf5t|J%h26WEm)QCH-oHDB{SVndxxrh-FAeewi3+?iX(N^Q-NM7i(=)lKRF(%kYhurkbK(2lc0J)X4mU_Q3E z*|H@B+Y4DjsWUtSbx$#^oLs$3N!o-+K}dIoB@B#7k&Xmphd9$d7Ar8dF@SlA*y#`u zaHzQMaIrkEO=@BIV03QEX_b5Ij`GxARwO^SeqF_i|FQ_5TX5DC6jE*%k(_&f1Ilee zo-QbIje;g;F#3sUr%~hylzx*px?qRcB-5Ol1)c71UG&vApxUMv*$N1AketC}5vuJsb)^VWMk&2xhGP-epWl4acYVj54{ zkbVrfi?A4!e2PSs!KT^dOfm()r_o8VMTf%Od$1<;6#8D@1R6)&F+oJ z<|3vQPoPrx@JbsI!!#blUF^+C;v1e!D9IYATXpsgqkJFR9kbM$uv|}EeDb0ndrY*CVprer8dWHN~JO4)SO6Sps=H_P2N3!1`ncCuv4>W z5*t;1>88NvP@+e=LJGzFt zc~U+LZXAi*MyiE`CKnF|ZJNvw2x{;cK|xN*xxCpaLRR;uQwUu0Qd@%hCrd)6b;v_; znI=y+Ly069_w+Ts!}jns+FrFAkdIH>*>rBzXXG)crT;_K1D*aMvFc(whsLCwH!qph zbE@zpsLuekCRY&jqukD-H5B?%_N;8ql^4nxPX;Kd0+%0MyzES#lbAh{3vx?P%q!$Z zicDkar}QV}!c<-vX@Yr5&z0?*g>{M`GGwED*HoUn1Z(2hE7O%&jd}1GF>MAv#qF}z zGghkJJ+aKIP{$BARDso3B)PM;jQXLALB&uzKrI%FFKH&Mb zqM{E|BMQ9`oNipxOAOde#qw6DwBKqjbh!}EP8>;B5l%QodRvV zOq~krxN9_xvk__bw!T7|VO0wtpUGfwmB}rM(GHbPcE9yLss>Wze5+S<>7{ws^XGa+ z*f3KR_+QqU8*TvvSTkp2qo|-=!tDCg8bg*E+GkBH)BcYe4Onr58e1fExg0MjY%+(@ zk4W7<$Z!9)5lUsmSX1g)G-de_)H)C#i{Hkgm6@209XDB-7EEa7B!E4UcLU9EWzF!k zHYfE=k}%yT7*=R1XHkC|C*qSMlX~nzN0PDvcq`*>A%83_f2@vyj2aU12M>zgarWe- z9Z+pk9$0njWN8Dd-~AlaHu~j_9l4(t6)F0jy`5#R6xQdqDW@7q^{)KjIT9%r+@V2+ zHT*Tb$q-9p2JO0Nb=2fUCE*w~gHSh*jg)3TwtIh5+-v&KaFbX9-IZ+%0A)%PT<^xT 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 + + + + + \ No newline at end of file diff --git a/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerActivity.java b/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerActivity.java new file mode 100644 index 0000000000..5e19777aa9 --- /dev/null +++ b/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerActivity.java @@ -0,0 +1,220 @@ +/**************************************************************************** +Copyright (c) 2010-2013 cocos2d-x.org + +http://www.cocos2d-x.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + ****************************************************************************/ +package org.cocos2dx.lib; + +import org.cocos2dx.lib.GameControllerDelegate.ControllerEventListener; +import org.cocos2dx.lib.inputmanagercompat.InputManagerCompat; +import org.cocos2dx.lib.inputmanagercompat.InputManagerCompat.InputDeviceListener; + +import org.cocos2dx.lib.Cocos2dxActivity; + +import android.os.Bundle; +import android.view.InputDevice; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.util.Log; + +public abstract class GameControllerActivity extends Cocos2dxActivity implements InputDeviceListener { + // =========================================================== + // Constants + // =========================================================== + + private final static String TAG = Cocos2dxActivity.class.getSimpleName(); + + // =========================================================== + // Fields + // =========================================================== + + private InputManagerCompat mInputManager = null; + + protected GameControllerHelper mControllerHelper = null; + protected GameControllerDelegate mControllerDelegate = null; + + public void setGameControllerInstance(GameControllerDelegate controllerDelegate) { + if (mControllerDelegate != null) { + mControllerDelegate.onDestroy(); + mControllerDelegate = null; + } + mControllerDelegate = controllerDelegate; + mControllerDelegate.setControllerEventListener(mControllerEventListener); + mControllerDelegate.onCreate(this); + } + + public GameControllerDelegate getGameControllerInstance(){ + return mControllerDelegate; + } + + ControllerEventListener mControllerEventListener = new ControllerEventListener() { + + @Override + public void onButtonEvent(String vendorName, int controller, int button, + boolean isPressed, float value, boolean isAnalog) { + GameControllerAdapter.onButtonEvent(vendorName, controller, button, isPressed, value, isAnalog); + } + + @Override + public void onAxisEvent(String vendorName, int controller, int axisID, + float value, boolean isAnalog) { + GameControllerAdapter.onAxisEvent(vendorName, controller, axisID, value, isAnalog); + } + + @Override + public void onConnected(String vendorName, int controller) { + GameControllerAdapter.onConnected(vendorName, controller); + } + + @Override + public void onDisconnected(String vendorName, int controller) { + GameControllerAdapter.onDisconnected(vendorName, controller); + } + }; + + // =========================================================== + // Constructors + // =========================================================== + + @Override + protected void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mInputManager = InputManagerCompat.Factory.getInputManager(this); + mInputManager.registerInputDeviceListener(this, null); + + if (mControllerDelegate != null) { + mControllerDelegate.onCreate(this); + } + if (mControllerHelper == null) { + mControllerHelper = new GameControllerHelper(this); + } + } + + // =========================================================== + // Getter & Setter + // =========================================================== + + // =========================================================== + // Methods for/from SuperClass/Interfaces + // =========================================================== + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + boolean handled = false; + if (mControllerDelegate != null) { + handled = mControllerDelegate.dispatchKeyEvent(event); + } + else { + handled = mControllerHelper.dispatchKeyEvent(event); + } + return handled || super.dispatchKeyEvent(event); + } + + @Override + public boolean dispatchGenericMotionEvent(MotionEvent event) { + boolean handled = false; + if (mControllerDelegate != null) { + handled = mControllerDelegate.dispatchGenericMotionEvent(event); + }else { + handled = mControllerHelper.dispatchGenericMotionEvent(event); + } + return handled || super.dispatchGenericMotionEvent(event); + } + + @Override + public void onInputDeviceAdded(int deviceId) { + + Log.d(TAG,"onInputDeviceAdded:" + deviceId); + + InputDevice device = InputDevice.getDevice(deviceId); + int deviceSource = device.getSources(); + + if ( ((deviceSource & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) + || ((deviceSource & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK) ) + { + GameControllerAdapter.onConnected("Standard", deviceId); + } + } + /* + * This is an unusual case. Input devices don't typically change, but they + * certainly can --- for example a device may have different modes. We use + * this to make sure that the ship has an up-to-date InputDevice. + * + * @see + * com.example.inputmanagercompat.InputManagerCompat.InputDeviceListener + * #onInputDeviceChanged(int) + */ + @Override + public void onInputDeviceChanged(int deviceId) { + Log.d(TAG,"onInputDeviceChanged:" + deviceId); + } + + /* + * Remove any ship associated with the ID. + * + * @see + * com.example.inputmanagercompat.InputManagerCompat.InputDeviceListener + * #onInputDeviceRemoved(int) + */ + @Override + public void onInputDeviceRemoved(int deviceId) { + Log.d(TAG,"onInputDeviceRemoved:" + deviceId); + + InputDevice device = InputDevice.getDevice(deviceId); + int deviceSource = device.getSources(); + + if ( ((deviceSource & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) + || ((deviceSource & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK) ) + { + GameControllerAdapter.onDisconnected("Standard", deviceId); + } + } + + @Override + protected void onResume() { + super.onResume(); + + if (mControllerDelegate != null) { + mControllerDelegate.onResume(); + } + } + + @Override + protected void onPause() { + if (mControllerDelegate != null) { + mControllerDelegate.onPause(); + } + + super.onPause(); + } + + @Override + protected void onDestroy() { + if (mControllerDelegate != null) { + mControllerDelegate.onDestroy(); + } + mControllerHelper.destrory(); + + super.onDestroy(); + } + +} \ No newline at end of file diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerAdapter.java b/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerAdapter.java similarity index 100% rename from cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerAdapter.java rename to cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerAdapter.java diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerHelper.java b/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerHelper.java similarity index 92% rename from cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerHelper.java rename to cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerHelper.java index 8c143c63a1..e18ba5578e 100644 --- a/cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerHelper.java +++ b/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerHelper.java @@ -58,7 +58,7 @@ public class GameControllerHelper { private static final String NIBIRU_DEP_PACKAGE = "com.nibiru"; private static final String MOGA__DEP_PACKAGE = "com.bda.pivot.mogapgp"; - private static Cocos2dxActivity sCocos2dxActivity; + private static GameControllerActivity sGameControllerActivity; private static GameControllerHelper sControllerHelper; private List mNibiruSupportedDrives; @@ -111,8 +111,17 @@ public class GameControllerHelper { mControllerListener = listener; } - public GameControllerHelper(Cocos2dxActivity activity){ - sCocos2dxActivity = activity; + private static final int AXIS_X = 0; + private static final int AXIS_Y = 1; + private static final int AXIS_Z = 11; + private static final int AXIS_RZ = 14; + public static final int AXIS_LTRIGGER = 17; + public static final int AXIS_RTRIGGER = 18; + public static final int AXIS_BRAKE = 23; + public static final int AXIS_THROTTLE = 19; + + public GameControllerHelper(GameControllerActivity activity){ + sGameControllerActivity = activity; sControllerHelper = this; ControllerKeyMap = new SparseIntArray(25); @@ -137,10 +146,10 @@ public class GameControllerHelper { ControllerKeyMap.put(KeyEvent.KEYCODE_BUTTON_L2, GameControllerDelegate.BUTTON_LEFT_TRIGGER); ControllerKeyMap.put(KeyEvent.KEYCODE_BUTTON_R2, GameControllerDelegate.BUTTON_RIGHT_TRIGGER); - ControllerKeyMap.put(MotionEvent.AXIS_X, GameControllerDelegate.THUMBSTICK_LEFT_X); - ControllerKeyMap.put(MotionEvent.AXIS_Y, GameControllerDelegate.THUMBSTICK_LEFT_Y); - ControllerKeyMap.put(MotionEvent.AXIS_Z, GameControllerDelegate.THUMBSTICK_RIGHT_X); - ControllerKeyMap.put(MotionEvent.AXIS_RZ, GameControllerDelegate.THUMBSTICK_RIGHT_Y); + ControllerKeyMap.put(AXIS_X, GameControllerDelegate.THUMBSTICK_LEFT_X); + ControllerKeyMap.put(AXIS_Y, GameControllerDelegate.THUMBSTICK_LEFT_Y); + ControllerKeyMap.put(AXIS_Z, GameControllerDelegate.THUMBSTICK_RIGHT_X); + ControllerKeyMap.put(AXIS_RZ, GameControllerDelegate.THUMBSTICK_RIGHT_Y); ControllerKeyMap.put(KeyEvent.KEYCODE_BUTTON_START, GameControllerDelegate.BUTTON_START); ControllerKeyMap.put(KeyEvent.KEYCODE_BUTTON_SELECT, GameControllerDelegate.BUTTON_SELECT); @@ -155,7 +164,7 @@ public class GameControllerHelper { mOuyaSupportedDrives = new ArrayList(5); mLocalSavePath = Environment.getExternalStorageDirectory() + File.separator + "CocosGameController" + File.separator; - mConfigFilePath = sCocos2dxActivity.getFilesDir().getAbsolutePath() + File.separator + COCOS_CONTROLLER_CONFIG; + mConfigFilePath = sGameControllerActivity.getFilesDir().getAbsolutePath() + File.separator + COCOS_CONTROLLER_CONFIG; mDownDepsHttpClient = new AsyncHttpClient(); mDownDepsHttpClient.setTimeout(360 * 1000); } @@ -165,7 +174,7 @@ public class GameControllerHelper { } if (mLazyConfigInit) { if (mDownDepsHttpClient != null) { - mDownDepsHttpClient.cancelRequests(sCocos2dxActivity, true); + mDownDepsHttpClient.cancelRequests(sGameControllerActivity, true); } requestControllerConfig(); } @@ -187,7 +196,7 @@ public class GameControllerHelper { public void destrory(){ if (mDownDepsHttpClient != null) { - mDownDepsHttpClient.cancelRequests(sCocos2dxActivity, true); + mDownDepsHttpClient.cancelRequests(sGameControllerActivity, true); } } @@ -213,12 +222,12 @@ public class GameControllerHelper { //filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); - sCocos2dxActivity.registerReceiver(mBluetoothReceiver, filter); + sGameControllerActivity.registerReceiver(mBluetoothReceiver, filter); IntentFilter appFilter = new IntentFilter(); appFilter.addAction("android.intent.action.PACKAGE_ADDED"); appFilter.addDataScheme("package"); - sCocos2dxActivity.registerReceiver(mAppReceiver, appFilter); + sGameControllerActivity.registerReceiver(mAppReceiver, appFilter); } if (!mBluetoothAdapter.isEnabled()) { @@ -254,18 +263,18 @@ public class GameControllerHelper { } public static void installApplication(String filePath){ - if (sCocos2dxActivity != null) { + if (sGameControllerActivity != null) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - sCocos2dxActivity.startActivity(intent); + sGameControllerActivity.startActivity(intent); } } public static boolean checkApplication(String packName){ try { - ApplicationInfo applicationInfo = sCocos2dxActivity.getPackageManager().getApplicationInfo(packName, PackageManager.GET_UNINSTALLED_PACKAGES); + ApplicationInfo applicationInfo = sGameControllerActivity.getPackageManager().getApplicationInfo(packName, PackageManager.GET_UNINSTALLED_PACKAGES); Log.d(TAG, applicationInfo.toString()); return true; } catch (NameNotFoundException e) { @@ -484,19 +493,6 @@ public class GameControllerHelper { Log.e(TAG,"Failed to download:" + file.getName()); } - @Override - public void onSuccess(File file) { - Log.d(TAG, "Down file success:" + file.getName()); - - depsCount -= 1; - if (depsCount == 0) { - if (mControllerListener != null) { - mControllerListener.onDownloadDepsFinished(true); - } - sControllerHelper.onDepsReady(); - } - } - @Override public void onProgress(int bytesWritten, int totalSize) { if (mFileType == FILETYPE_JAR) { @@ -510,6 +506,19 @@ public class GameControllerHelper { } Log.d(TAG, "totalSize:" + totalSize + ", bytesWritten:" + bytesWritten); } + + @Override + public void onSuccess(int arg0, Header[] arg1, File file) { + Log.d(TAG, "Down file success:" + file.getName()); + + depsCount -= 1; + if (depsCount == 0) { + if (mControllerListener != null) { + mControllerListener.onDownloadDepsFinished(true); + } + sControllerHelper.onDepsReady(); + } + } } private void onDepsReady(){ @@ -685,7 +694,7 @@ public class GameControllerHelper { } private static void showToast(String message){ - Toast.makeText(sCocos2dxActivity, message, Toast.LENGTH_SHORT).show(); + Toast.makeText(sGameControllerActivity, message, Toast.LENGTH_SHORT).show(); } private static void createControllerInstance(String libFilePath,int sdkType) { @@ -698,10 +707,10 @@ public class GameControllerHelper { DexClassLoader classLoader = null; try { - File dexOutputDir = sCocos2dxActivity.getDir("dex", Context.MODE_PRIVATE); + File dexOutputDir = sGameControllerActivity.getDir("dex", Context.MODE_PRIVATE); classLoader = new DexClassLoader(libFile.getCanonicalPath(), dexOutputDir.getCanonicalPath(), - null, sCocos2dxActivity.getClassLoader()); + null, sGameControllerActivity.getClassLoader()); } catch (Exception e1) { e1.printStackTrace(); } @@ -721,7 +730,7 @@ public class GameControllerHelper { if (mControllerListener != null) { mControllerListener.onConnectController(); } - sCocos2dxActivity.setGameControllerInstance(instance); + sGameControllerActivity.setGameControllerInstance(instance); if (sdkType == DRIVERTYPE_NIBIRU) { Method method = controllerDelegate.getDeclaredMethod("onResume"); method.invoke(instance); @@ -768,35 +777,35 @@ public class GameControllerHelper { if (event.getAction() == MotionEvent.ACTION_MOVE) { int devicedId = event.getDeviceId(); - float newAXIS_LX = event.getAxisValue(MotionEvent.AXIS_X); + float newAXIS_LX = event.getAxisValue(AXIS_X); if (Float.compare(newAXIS_LX , mOldLeftThumbstickX) != 0) { GameControllerAdapter.onAxisEvent(StandardControllerName, devicedId, GameControllerDelegate.THUMBSTICK_LEFT_X, newAXIS_LX, true); mOldLeftThumbstickX = newAXIS_LX; handled = true; } - float newAXIS_LY = event.getAxisValue(MotionEvent.AXIS_Y); + float newAXIS_LY = event.getAxisValue(AXIS_Y); if (Float.compare(newAXIS_LY , mOldLeftThumbstickY) != 0) { GameControllerAdapter.onAxisEvent(StandardControllerName, devicedId, GameControllerDelegate.THUMBSTICK_LEFT_Y, newAXIS_LY, true); mOldLeftThumbstickY = newAXIS_LY; handled = true; } - float newAXIS_RX = event.getAxisValue(MotionEvent.AXIS_Z); + float newAXIS_RX = event.getAxisValue(AXIS_Z); if (Float.compare(newAXIS_RX , mOldRightThumbstickX) != 0) { GameControllerAdapter.onAxisEvent(StandardControllerName, devicedId, GameControllerDelegate.THUMBSTICK_RIGHT_X, newAXIS_RX, true); mOldRightThumbstickX = newAXIS_RX; handled = true; } - float newAXIS_RY = event.getAxisValue(MotionEvent.AXIS_RZ); + float newAXIS_RY = event.getAxisValue(AXIS_RZ); if (Float.compare(newAXIS_RY , mOldRightThumbstickY) != 0) { GameControllerAdapter.onAxisEvent(StandardControllerName, devicedId, GameControllerDelegate.THUMBSTICK_RIGHT_Y, newAXIS_RY, true); mOldRightThumbstickY = newAXIS_RY; handled = true; } - float newAXIS_LTRIGGER = event.getAxisValue(MotionEvent.AXIS_LTRIGGER); + float newAXIS_LTRIGGER = event.getAxisValue(AXIS_LTRIGGER); if (Float.compare(newAXIS_LTRIGGER , mOldLeftTrigger) != 0) { if (Float.compare(newAXIS_LTRIGGER, 0.0f) == 0) { GameControllerAdapter.onButtonEvent(StandardControllerName, devicedId, GameControllerDelegate.BUTTON_LEFT_TRIGGER, false, 0.0f, true); @@ -807,7 +816,7 @@ public class GameControllerHelper { handled = true; } - float newAXIS_RTRIGGER = event.getAxisValue(MotionEvent.AXIS_RTRIGGER); + float newAXIS_RTRIGGER = event.getAxisValue(AXIS_RTRIGGER); if (Float.compare(newAXIS_RTRIGGER , mOldRightTrigger) != 0) { if (Float.compare(newAXIS_RTRIGGER, 0.0f) == 0) { GameControllerAdapter.onButtonEvent(StandardControllerName, devicedId, GameControllerDelegate.BUTTON_RIGHT_TRIGGER, false, 0.0f, true); @@ -818,7 +827,7 @@ public class GameControllerHelper { handled = true; } - float newAXIS_BRAKE = event.getAxisValue(MotionEvent.AXIS_BRAKE); + float newAXIS_BRAKE = event.getAxisValue(AXIS_BRAKE); if (Float.compare(newAXIS_BRAKE , mOldBrake) != 0) { if (Float.compare(newAXIS_BRAKE, 0.0f) == 0) { GameControllerAdapter.onButtonEvent(StandardControllerName, devicedId, GameControllerDelegate.BUTTON_LEFT_TRIGGER, false, 0.0f, true); @@ -829,7 +838,7 @@ public class GameControllerHelper { handled = true; } - float newAXIS_THROTTLE = event.getAxisValue(MotionEvent.AXIS_THROTTLE); + float newAXIS_THROTTLE = event.getAxisValue(AXIS_THROTTLE); if (Float.compare(newAXIS_THROTTLE , mOldThrottle) != 0) { if (Float.compare(newAXIS_THROTTLE, 0.0f) == 0) { GameControllerAdapter.onButtonEvent(StandardControllerName, devicedId, GameControllerDelegate.BUTTON_RIGHT_TRIGGER, false, 0.0f, true); diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerUtils.java b/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerUtils.java similarity index 100% rename from cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerUtils.java rename to cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerUtils.java diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/inputmanagercompat/InputManagerCompat.java b/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/inputmanagercompat/InputManagerCompat.java similarity index 100% rename from cocos/platform/android/java/src/org/cocos2dx/lib/inputmanagercompat/InputManagerCompat.java rename to cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/inputmanagercompat/InputManagerCompat.java diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV16.java b/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV16.java similarity index 100% rename from cocos/platform/android/java/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV16.java rename to cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV16.java diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV9.java b/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV9.java similarity index 100% rename from cocos/platform/android/java/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV9.java rename to cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV9.java diff --git a/cocos/platform/android/java/project.properties b/cocos/platform/android/java/project.properties index 732c58e368..88ca83f9d0 100644 --- a/cocos/platform/android/java/project.properties +++ b/cocos/platform/android/java/project.properties @@ -12,5 +12,4 @@ android.library=true # Project target. -target=android-16 -android.library.reference.1=../ControllerDelegate +target=android-10 diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java index 265387c29e..78929fb300 100644 --- a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java +++ b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java @@ -24,9 +24,6 @@ THE SOFTWARE. package org.cocos2dx.lib; import org.cocos2dx.lib.Cocos2dxHelper.Cocos2dxHelperListener; -import org.cocos2dx.lib.GameControllerDelegate.ControllerEventListener; -import org.cocos2dx.lib.inputmanagercompat.InputManagerCompat; -import org.cocos2dx.lib.inputmanagercompat.InputManagerCompat.InputDeviceListener; import android.app.Activity; import android.content.Context; @@ -36,15 +33,12 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Message; -import android.view.InputDevice; -import android.view.KeyEvent; -import android.view.MotionEvent; import android.view.ViewGroup; import android.util.Log; import android.widget.FrameLayout; import android.preference.PreferenceManager.OnActivityResultListener; -public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelperListener, InputDeviceListener { +public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelperListener { // =========================================================== // Constants // =========================================================== @@ -59,10 +53,6 @@ public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelpe private Cocos2dxHandler mHandler; private static Cocos2dxActivity sContext = null; private Cocos2dxVideoHelper mVideoHelper = null; - private InputManagerCompat mInputManager = null; - - protected GameControllerHelper mControllerHelper = null; - protected GameControllerDelegate mControllerDelegate = null; public static Context getContext() { return sContext; @@ -79,45 +69,6 @@ public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelpe } } - public void setGameControllerInstance(GameControllerDelegate controllerDelegate) { - if (mControllerDelegate != null) { - mControllerDelegate.onDestroy(); - mControllerDelegate = null; - } - mControllerDelegate = controllerDelegate; - mControllerDelegate.setControllerEventListener(mControllerEventListener); - mControllerDelegate.onCreate(this); - } - - public GameControllerDelegate getGameControllerInstance(){ - return mControllerDelegate; - } - - ControllerEventListener mControllerEventListener = new ControllerEventListener() { - - @Override - public void onButtonEvent(String vendorName, int controller, int button, - boolean isPressed, float value, boolean isAnalog) { - GameControllerAdapter.onButtonEvent(vendorName, controller, button, isPressed, value, isAnalog); - } - - @Override - public void onAxisEvent(String vendorName, int controller, int axisID, - float value, boolean isAnalog) { - GameControllerAdapter.onAxisEvent(vendorName, controller, axisID, value, isAnalog); - } - - @Override - public void onConnected(String vendorName, int controller) { - GameControllerAdapter.onConnected(vendorName, controller); - } - - @Override - public void onDisconnected(String vendorName, int controller) { - GameControllerAdapter.onDisconnected(vendorName, controller); - } - }; - // =========================================================== // Constructors // =========================================================== @@ -137,16 +88,6 @@ public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelpe if (mVideoHelper == null) { mVideoHelper = new Cocos2dxVideoHelper(this, mFrameLayout); } - - mInputManager = InputManagerCompat.Factory.getInputManager(this); - mInputManager.registerInputDeviceListener(this, null); - - if (mControllerDelegate != null) { - mControllerDelegate.onCreate(this); - } - if (mControllerHelper == null) { - mControllerHelper = new GameControllerHelper(this); - } } // =========================================================== @@ -157,96 +98,16 @@ public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelpe // Methods for/from SuperClass/Interfaces // =========================================================== - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - boolean handled = false; - if (mControllerDelegate != null) { - handled = mControllerDelegate.dispatchKeyEvent(event); - } - else { - handled = mControllerHelper.dispatchKeyEvent(event); - } - return handled || super.dispatchKeyEvent(event); - } - - @Override - public boolean dispatchGenericMotionEvent(MotionEvent event) { - boolean handled = false; - if (mControllerDelegate != null) { - handled = mControllerDelegate.dispatchGenericMotionEvent(event); - }else { - handled = mControllerHelper.dispatchGenericMotionEvent(event); - } - return handled || super.dispatchGenericMotionEvent(event); - } - - @Override - public void onInputDeviceAdded(int deviceId) { - - Log.d(TAG,"onInputDeviceAdded:" + deviceId); - - InputDevice device = InputDevice.getDevice(deviceId); - int deviceSource = device.getSources(); - - if ( ((deviceSource & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) - || ((deviceSource & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK) ) - { - GameControllerAdapter.onConnected("Standard", deviceId); - } - } - /* - * This is an unusual case. Input devices don't typically change, but they - * certainly can --- for example a device may have different modes. We use - * this to make sure that the ship has an up-to-date InputDevice. - * - * @see - * com.example.inputmanagercompat.InputManagerCompat.InputDeviceListener - * #onInputDeviceChanged(int) - */ - @Override - public void onInputDeviceChanged(int deviceId) { - Log.d(TAG,"onInputDeviceChanged:" + deviceId); - } - - /* - * Remove any ship associated with the ID. - * - * @see - * com.example.inputmanagercompat.InputManagerCompat.InputDeviceListener - * #onInputDeviceRemoved(int) - */ - @Override - public void onInputDeviceRemoved(int deviceId) { - Log.d(TAG,"onInputDeviceRemoved:" + deviceId); - - InputDevice device = InputDevice.getDevice(deviceId); - int deviceSource = device.getSources(); - - if ( ((deviceSource & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) - || ((deviceSource & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK) ) - { - GameControllerAdapter.onDisconnected("Standard", deviceId); - } - } - @Override protected void onResume() { super.onResume(); Cocos2dxHelper.onResume(); this.mGLSurfaceView.onResume(); - - if (mControllerDelegate != null) { - mControllerDelegate.onResume(); - } } @Override protected void onPause() { - if (mControllerDelegate != null) { - mControllerDelegate.onPause(); - } - super.onPause(); Cocos2dxHelper.onPause(); @@ -255,11 +116,6 @@ public abstract class Cocos2dxActivity extends Activity implements Cocos2dxHelpe @Override protected void onDestroy() { - if (mControllerDelegate != null) { - mControllerDelegate.onDestroy(); - } - mControllerHelper.destrory(); - super.onDestroy(); } From 9bf36a104557d6a4ed28bb76e52b7cdbb4591c1b Mon Sep 17 00:00:00 2001 From: Dhilan007 Date: Mon, 30 Jun 2014 18:43:09 +0800 Subject: [PATCH 2/3] update test case. --- .../proj.android/project.properties | 13 +++++++++++++ .../cocos2dx/game_controller_test/AppActivity.java | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 tests/game-controller-test/proj.android/project.properties diff --git a/tests/game-controller-test/proj.android/project.properties b/tests/game-controller-test/proj.android/project.properties new file mode 100644 index 0000000000..c851eff541 --- /dev/null +++ b/tests/game-controller-test/proj.android/project.properties @@ -0,0 +1,13 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-10 + +android.library.reference.1=../../../cocos/platform/android/ControllerDelegate diff --git a/tests/game-controller-test/proj.android/src/org/cocos2dx/game_controller_test/AppActivity.java b/tests/game-controller-test/proj.android/src/org/cocos2dx/game_controller_test/AppActivity.java index 2675ce468b..570608bada 100644 --- a/tests/game-controller-test/proj.android/src/org/cocos2dx/game_controller_test/AppActivity.java +++ b/tests/game-controller-test/proj.android/src/org/cocos2dx/game_controller_test/AppActivity.java @@ -25,14 +25,14 @@ package org.cocos2dx.game_controller_test; import java.util.ArrayList; -import org.cocos2dx.lib.Cocos2dxActivity; +import org.cocos2dx.lib.GameControllerActivity; import org.cocos2dx.lib.GameControllerHelper.ControllerListener; import android.bluetooth.BluetoothDevice; import android.os.Bundle; import android.util.Log; -public class AppActivity extends Cocos2dxActivity { +public class AppActivity extends GameControllerActivity { @Override protected void onCreate(Bundle savedInstanceState) { From 66673d88fa3b6ec5868be7faed92a01d156bd3d1 Mon Sep 17 00:00:00 2001 From: Dhilan007 Date: Tue, 1 Jul 2014 15:08:51 +0800 Subject: [PATCH 3/3] split controller adapter[android] --- .../.classpath | 0 .../.project | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 0 .../AndroidManifest.xml | 0 .../ant.properties | 0 .../build.xml | 2 +- .../lint.xml | 0 .../proguard-project.txt | 0 .../ControllerAutoAdapter/project.properties | 16 + .../res/.gitignore | 0 .../cocos2dx/lib/GameControllerActivity.java | 124 +++++-- .../cocos2dx/lib/GameControllerHelper.java | 197 +++++------ .../InputManagerCompat.java | 0 .../inputmanagercompat/InputManagerV16.java | 0 .../inputmanagercompat/InputManagerV9.java | 0 .../libs/android-async-http-1.4.5.jar | Bin 92276 -> 0 bytes .../.classpath | 0 .../.project | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 0 .../AndroidManifest.xml | 0 .../ant.properties | 0 .../build.xml | 2 +- .../libs/com.bda.controller.jar | Bin .../libs/nibiru_lib_2_1_7.jar | Bin .../libs/ouya-sdk.jar | Bin .../android/ControllerManualAdapter/lint.xml | 6 + .../proguard-project.txt | 0 .../res/.gitignore | 0 .../cocos2dx/lib/GameControllerActivity.java | 316 ++++++++++++++++++ .../cocos2dx/lib/GameControllerHelper.java | 177 ++++++++++ .../org/cocos2dx/lib/GameControllerMoga.java | 0 .../cocos2dx/lib/GameControllerNibiru.java | 0 .../org/cocos2dx/lib/GameControllerOuya.java | 0 .../InputManagerCompat.java | 140 ++++++++ .../inputmanagercompat/InputManagerV16.java | 107 ++++++ .../inputmanagercompat/InputManagerV9.java | 211 ++++++++++++ .../android/ControllerNibiru/.classpath | 9 - .../android/ControllerNibiru/.project | 33 -- .../.settings/org.eclipse.jdt.core.prefs | 4 - .../ControllerNibiru/AndroidManifest.xml | 9 - .../android/ControllerNibiru/ant.properties | 17 - .../android/ControllerNibiru/build.xml | 83 ----- .../ControllerNibiru/proguard-project.txt | 20 -- .../android/ControllerNibiru/res/.gitignore | 0 .../android/ControllerOuya/.classpath | 9 - .../platform/android/ControllerOuya/.project | 33 -- .../.settings/org.eclipse.jdt.core.prefs | 4 - .../ControllerOuya/AndroidManifest.xml | 9 - .../android/ControllerOuya/ant.properties | 17 - .../platform/android/ControllerOuya/build.xml | 83 ----- .../ControllerOuya/proguard-project.txt | 20 -- .../android/ControllerOuya/res/.gitignore | 0 .../cocos2dx/lib/GameControllerAdapter.java | 0 .../cocos2dx/lib/GameControllerDelegate.java | 0 .../org/cocos2dx/lib/GameControllerUtils.java | 0 55 files changed, 1158 insertions(+), 494 deletions(-) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/.classpath (100%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/.project (95%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/.settings/org.eclipse.jdt.core.prefs (100%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/AndroidManifest.xml (100%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/ant.properties (100%) rename cocos/platform/android/{ControllerMoga => ControllerAutoAdapter}/build.xml (98%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/lint.xml (100%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/proguard-project.txt (100%) create mode 100644 cocos/platform/android/ControllerAutoAdapter/project.properties rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/res/.gitignore (100%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/src/org/cocos2dx/lib/GameControllerActivity.java (66%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/src/org/cocos2dx/lib/GameControllerHelper.java (85%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/src/org/cocos2dx/lib/inputmanagercompat/InputManagerCompat.java (100%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV16.java (100%) rename cocos/platform/android/{ControllerDelegate => ControllerAutoAdapter}/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV9.java (100%) delete mode 100644 cocos/platform/android/ControllerDelegate/libs/android-async-http-1.4.5.jar rename cocos/platform/android/{ControllerMoga => ControllerManualAdapter}/.classpath (100%) rename cocos/platform/android/{ControllerMoga => ControllerManualAdapter}/.project (95%) rename cocos/platform/android/{ControllerMoga => ControllerManualAdapter}/.settings/org.eclipse.jdt.core.prefs (100%) rename cocos/platform/android/{ControllerMoga => ControllerManualAdapter}/AndroidManifest.xml (100%) rename cocos/platform/android/{ControllerMoga => ControllerManualAdapter}/ant.properties (100%) rename cocos/platform/android/{ControllerDelegate => ControllerManualAdapter}/build.xml (98%) rename cocos/platform/android/{ControllerMoga => ControllerManualAdapter}/libs/com.bda.controller.jar (100%) rename cocos/platform/android/{ControllerNibiru => ControllerManualAdapter}/libs/nibiru_lib_2_1_7.jar (100%) rename cocos/platform/android/{ControllerOuya => ControllerManualAdapter}/libs/ouya-sdk.jar (100%) create mode 100644 cocos/platform/android/ControllerManualAdapter/lint.xml rename cocos/platform/android/{ControllerMoga => ControllerManualAdapter}/proguard-project.txt (100%) rename cocos/platform/android/{ControllerMoga => ControllerManualAdapter}/res/.gitignore (100%) create mode 100644 cocos/platform/android/ControllerManualAdapter/src/org/cocos2dx/lib/GameControllerActivity.java create mode 100644 cocos/platform/android/ControllerManualAdapter/src/org/cocos2dx/lib/GameControllerHelper.java rename cocos/platform/android/{ControllerMoga => ControllerManualAdapter}/src/org/cocos2dx/lib/GameControllerMoga.java (100%) rename cocos/platform/android/{ControllerNibiru => ControllerManualAdapter}/src/org/cocos2dx/lib/GameControllerNibiru.java (100%) rename cocos/platform/android/{ControllerOuya => ControllerManualAdapter}/src/org/cocos2dx/lib/GameControllerOuya.java (100%) create mode 100644 cocos/platform/android/ControllerManualAdapter/src/org/cocos2dx/lib/inputmanagercompat/InputManagerCompat.java create mode 100644 cocos/platform/android/ControllerManualAdapter/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV16.java create mode 100644 cocos/platform/android/ControllerManualAdapter/src/org/cocos2dx/lib/inputmanagercompat/InputManagerV9.java delete mode 100644 cocos/platform/android/ControllerNibiru/.classpath delete mode 100644 cocos/platform/android/ControllerNibiru/.project delete mode 100644 cocos/platform/android/ControllerNibiru/.settings/org.eclipse.jdt.core.prefs delete mode 100644 cocos/platform/android/ControllerNibiru/AndroidManifest.xml delete mode 100644 cocos/platform/android/ControllerNibiru/ant.properties delete mode 100644 cocos/platform/android/ControllerNibiru/build.xml delete mode 100644 cocos/platform/android/ControllerNibiru/proguard-project.txt delete mode 100644 cocos/platform/android/ControllerNibiru/res/.gitignore delete mode 100644 cocos/platform/android/ControllerOuya/.classpath delete mode 100644 cocos/platform/android/ControllerOuya/.project delete mode 100644 cocos/platform/android/ControllerOuya/.settings/org.eclipse.jdt.core.prefs delete mode 100644 cocos/platform/android/ControllerOuya/AndroidManifest.xml delete mode 100644 cocos/platform/android/ControllerOuya/ant.properties delete mode 100644 cocos/platform/android/ControllerOuya/build.xml delete mode 100644 cocos/platform/android/ControllerOuya/proguard-project.txt delete mode 100644 cocos/platform/android/ControllerOuya/res/.gitignore rename cocos/platform/android/{ControllerDelegate => java}/src/org/cocos2dx/lib/GameControllerAdapter.java (100%) rename cocos/platform/android/{ControllerDelegate => java}/src/org/cocos2dx/lib/GameControllerDelegate.java (100%) rename cocos/platform/android/{ControllerDelegate => java}/src/org/cocos2dx/lib/GameControllerUtils.java (100%) diff --git a/cocos/platform/android/ControllerDelegate/.classpath b/cocos/platform/android/ControllerAutoAdapter/.classpath similarity index 100% rename from cocos/platform/android/ControllerDelegate/.classpath rename to cocos/platform/android/ControllerAutoAdapter/.classpath diff --git a/cocos/platform/android/ControllerDelegate/.project b/cocos/platform/android/ControllerAutoAdapter/.project similarity index 95% rename from cocos/platform/android/ControllerDelegate/.project rename to cocos/platform/android/ControllerAutoAdapter/.project index 6711d455fd..c49a037939 100644 --- a/cocos/platform/android/ControllerDelegate/.project +++ b/cocos/platform/android/ControllerAutoAdapter/.project @@ -1,6 +1,6 @@ - libcontrollerdelegate + libControllerAutoAdapter diff --git a/cocos/platform/android/ControllerDelegate/.settings/org.eclipse.jdt.core.prefs b/cocos/platform/android/ControllerAutoAdapter/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from cocos/platform/android/ControllerDelegate/.settings/org.eclipse.jdt.core.prefs rename to cocos/platform/android/ControllerAutoAdapter/.settings/org.eclipse.jdt.core.prefs diff --git a/cocos/platform/android/ControllerDelegate/AndroidManifest.xml b/cocos/platform/android/ControllerAutoAdapter/AndroidManifest.xml similarity index 100% rename from cocos/platform/android/ControllerDelegate/AndroidManifest.xml rename to cocos/platform/android/ControllerAutoAdapter/AndroidManifest.xml diff --git a/cocos/platform/android/ControllerDelegate/ant.properties b/cocos/platform/android/ControllerAutoAdapter/ant.properties similarity index 100% rename from cocos/platform/android/ControllerDelegate/ant.properties rename to cocos/platform/android/ControllerAutoAdapter/ant.properties diff --git a/cocos/platform/android/ControllerMoga/build.xml b/cocos/platform/android/ControllerAutoAdapter/build.xml similarity index 98% rename from cocos/platform/android/ControllerMoga/build.xml rename to cocos/platform/android/ControllerAutoAdapter/build.xml index 83af41e723..413effd90c 100644 --- a/cocos/platform/android/ControllerMoga/build.xml +++ b/cocos/platform/android/ControllerAutoAdapter/build.xml @@ -1,5 +1,5 @@ - + - - - - - - - - - - - - - - - - - - - diff --git a/cocos/platform/android/ControllerNibiru/proguard-project.txt b/cocos/platform/android/ControllerNibiru/proguard-project.txt deleted file mode 100644 index f2fe1559a2..0000000000 --- a/cocos/platform/android/ControllerNibiru/proguard-project.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/cocos/platform/android/ControllerNibiru/res/.gitignore b/cocos/platform/android/ControllerNibiru/res/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/cocos/platform/android/ControllerOuya/.classpath b/cocos/platform/android/ControllerOuya/.classpath deleted file mode 100644 index 51769745b2..0000000000 --- a/cocos/platform/android/ControllerOuya/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/cocos/platform/android/ControllerOuya/.project b/cocos/platform/android/ControllerOuya/.project deleted file mode 100644 index 51255ee3c0..0000000000 --- a/cocos/platform/android/ControllerOuya/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - libcontrollerouya - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/cocos/platform/android/ControllerOuya/.settings/org.eclipse.jdt.core.prefs b/cocos/platform/android/ControllerOuya/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b080d2ddc8..0000000000 --- a/cocos/platform/android/ControllerOuya/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.source=1.6 diff --git a/cocos/platform/android/ControllerOuya/AndroidManifest.xml b/cocos/platform/android/ControllerOuya/AndroidManifest.xml deleted file mode 100644 index d1f4a837d8..0000000000 --- a/cocos/platform/android/ControllerOuya/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/cocos/platform/android/ControllerOuya/ant.properties b/cocos/platform/android/ControllerOuya/ant.properties deleted file mode 100644 index b0971e891e..0000000000 --- a/cocos/platform/android/ControllerOuya/ant.properties +++ /dev/null @@ -1,17 +0,0 @@ -# This file is used to override default values used by the Ant build system. -# -# This file must be checked into Version Control Systems, as it is -# integral to the build system of your project. - -# This file is only used by the Ant script. - -# You can use this to override default values such as -# 'source.dir' for the location of your java source folder and -# 'out.dir' for the location of your output folder. - -# You can also use it define how the release builds are signed by declaring -# the following properties: -# 'key.store' for the location of your keystore and -# 'key.alias' for the name of the key to use. -# The password will be asked during the build when you use the 'release' target. - diff --git a/cocos/platform/android/ControllerOuya/build.xml b/cocos/platform/android/ControllerOuya/build.xml deleted file mode 100644 index 7fc3634914..0000000000 --- a/cocos/platform/android/ControllerOuya/build.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cocos/platform/android/ControllerOuya/proguard-project.txt b/cocos/platform/android/ControllerOuya/proguard-project.txt deleted file mode 100644 index f2fe1559a2..0000000000 --- a/cocos/platform/android/ControllerOuya/proguard-project.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/cocos/platform/android/ControllerOuya/res/.gitignore b/cocos/platform/android/ControllerOuya/res/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerAdapter.java b/cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerAdapter.java similarity index 100% rename from cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerAdapter.java rename to cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerAdapter.java diff --git a/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerDelegate.java b/cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerDelegate.java similarity index 100% rename from cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerDelegate.java rename to cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerDelegate.java diff --git a/cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerUtils.java b/cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerUtils.java similarity index 100% rename from cocos/platform/android/ControllerDelegate/src/org/cocos2dx/lib/GameControllerUtils.java rename to cocos/platform/android/java/src/org/cocos2dx/lib/GameControllerUtils.java