diff -urN Original_4.4.4_r1/frameworks/av/.git/HEAD AndroidSource/frameworks/av/.git/HEAD --- Original_4.4.4_r1/frameworks/av/.git/HEAD 2016-01-29 15:12:26.947488000 +0900 +++ AndroidSource/frameworks/av/.git/HEAD 1970-01-01 09:00:00.000000000 +0900 @@ -1 +0,0 @@ -66809dc49bec6cb6345c74d48d319c2a63c17ac6 Binary files Original_4.4.4_r1/frameworks/av/.git/index and AndroidSource/frameworks/av/.git/index differ diff -urN Original_4.4.4_r1/frameworks/base/Android.mk AndroidSource/frameworks/base/Android.mk --- Original_4.4.4_r1/frameworks/base/Android.mk 2016-01-29 15:12:27.311488000 +0900 +++ AndroidSource/frameworks/base/Android.mk 2016-03-04 14:12:40.000000000 +0900 @@ -52,6 +52,9 @@ ## across process boundaries. ## ## READ ME: ######################################################## + + ## ADDED END BY JH at 180th + LOCAL_SRC_FILES += \ core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl \ core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl \ @@ -161,6 +164,7 @@ core/java/android/os/IUpdateLock.aidl \ core/java/android/os/IUserManager.aidl \ core/java/android/os/IVibratorService.aidl \ + core/java/android/service/distribute/IDistributedComputingService.aidl \ core/java/android/service/notification/INotificationListener.aidl \ core/java/android/print/ILayoutResultCallback.aidl \ core/java/android/print/IPrinterDiscoveryObserver.aidl \ @@ -176,6 +180,9 @@ core/java/android/printservice/IPrintServiceClient.aidl \ core/java/android/service/dreams/IDreamManager.aidl \ core/java/android/service/dreams/IDreamService.aidl \ + core/java/android/service/collaboroid/IGeneralMessageListener.aidl \ + core/java/android/service/devicemanager/IDeviceManager.aidl \ + core/java/android/service/remote/IRemoteService.aidl \ core/java/android/service/wallpaper/IWallpaperConnection.aidl \ core/java/android/service/wallpaper/IWallpaperEngine.aidl \ core/java/android/service/wallpaper/IWallpaperService.aidl \ diff -urN Original_4.4.4_r1/frameworks/base/api/current.txt AndroidSource/frameworks/base/api/current.txt --- Original_4.4.4_r1/frameworks/base/api/current.txt 2016-01-29 15:12:27.367488000 +0900 +++ AndroidSource/frameworks/base/api/current.txt 2016-09-26 18:38:20.743663713 +0900 @@ -5978,13 +5978,16 @@ field public static final java.lang.String BLUETOOTH_SERVICE = "bluetooth"; field public static final java.lang.String CAPTIONING_SERVICE = "captioning"; field public static final java.lang.String CLIPBOARD_SERVICE = "clipboard"; + field public static final java.lang.String COLLABOROID = "collaboroid"; field public static final java.lang.String CONNECTIVITY_SERVICE = "connectivity"; field public static final java.lang.String CONSUMER_IR_SERVICE = "consumer_ir"; field public static final int CONTEXT_IGNORE_SECURITY = 2; // 0x2 field public static final int CONTEXT_INCLUDE_CODE = 1; // 0x1 field public static final int CONTEXT_RESTRICTED = 4; // 0x4 + field public static final java.lang.String DEVICE_MANAGEMENT_SERVICE = "devicemanagement"; field public static final java.lang.String DEVICE_POLICY_SERVICE = "device_policy"; field public static final java.lang.String DISPLAY_SERVICE = "display"; + field public static final java.lang.String DISTRIBUTED_COMPUTING_SERVICE = "distribute"; field public static final java.lang.String DOWNLOAD_SERVICE = "download"; field public static final java.lang.String DROPBOX_SERVICE = "dropbox"; field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method"; @@ -6004,6 +6007,7 @@ field public static final java.lang.String NSD_SERVICE = "servicediscovery"; field public static final java.lang.String POWER_SERVICE = "power"; field public static final java.lang.String PRINT_SERVICE = "print"; + field public static final java.lang.String REMOTE_SERVICE = "remote"; field public static final java.lang.String SEARCH_SERVICE = "search"; field public static final java.lang.String SENSOR_SERVICE = "sensor"; field public static final java.lang.String STORAGE_SERVICE = "storage"; @@ -10735,6 +10739,7 @@ field public static final int TYPE_PRESSURE = 6; // 0x6 field public static final int TYPE_PROXIMITY = 8; // 0x8 field public static final int TYPE_RELATIVE_HUMIDITY = 12; // 0xc + field public static final int TYPE_REMOTE_SENSOR = 21; // 0x15 field public static final int TYPE_ROTATION_VECTOR = 11; // 0xb field public static final int TYPE_SIGNIFICANT_MOTION = 17; // 0x11 field public static final int TYPE_STEP_COUNTER = 19; // 0x13 @@ -10745,6 +10750,7 @@ public class SensorEvent { field public int accuracy; field public android.hardware.Sensor sensor; + field public int sourceDevice; field public long timestamp; field public final float[] values; } @@ -11597,6 +11603,7 @@ field public static final java.lang.String NETWORK_PROVIDER = "network"; field public static final java.lang.String PASSIVE_PROVIDER = "passive"; field public static final java.lang.String PROVIDERS_CHANGED_ACTION = "android.location.PROVIDERS_CHANGED"; + field public static final java.lang.String REMOTE_PROVIDER = "remote"; } public class LocationProvider { @@ -12541,6 +12548,7 @@ method public void addTimedTextSource(java.io.FileDescriptor, java.lang.String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void addTimedTextSource(java.io.FileDescriptor, long, long, java.lang.String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void attachAuxEffect(int); + method public void closing_all_serversockets(); method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri); method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri, android.view.SurfaceHolder); method public static android.media.MediaPlayer create(android.content.Context, int); @@ -12564,6 +12572,7 @@ method public void setAudioStreamType(int); method public void setAuxEffectSendLevel(float); method public void setDataSource(android.content.Context, android.net.Uri) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; + method public void setDataSource(android.content.Context, android.net.Uri, boolean) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; method public void setDataSource(android.content.Context, android.net.Uri, java.util.Map) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; method public void setDataSource(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; method public void setDataSource(java.io.FileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; @@ -12606,6 +12615,8 @@ field public static final java.lang.String MEDIA_MIMETYPE_TEXT_SUBRIP = "application/x-subrip"; field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1 field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING = 2; // 0x2 + field public android.content.Context mContext; + field public android.media.MediaExtractor mMediaExtractor; } public static abstract interface MediaPlayer.OnBufferingUpdateListener { @@ -21072,6 +21083,8 @@ field public static final java.lang.String AUTO_TIME = "auto_time"; field public static final java.lang.String AUTO_TIME_ZONE = "auto_time_zone"; field public static final java.lang.String BLUETOOTH_ON = "bluetooth_on"; + field public static final java.lang.String COLLABOROID_DEVICE_NAME = "collaboroid_device_name"; + field public static final java.lang.String COLLABOROID_ON = "collaboroid_on"; field public static final android.net.Uri CONTENT_URI; field public static final java.lang.String DATA_ROAMING = "data_roaming"; field public static final java.lang.String DEBUG_APP = "debug_app"; @@ -21085,9 +21098,13 @@ field public static final java.lang.String RADIO_CELL = "cell"; field public static final java.lang.String RADIO_NFC = "nfc"; field public static final java.lang.String RADIO_WIFI = "wifi"; + field public static final java.lang.String REMOTE_REQUEST_CLIENT_ON = "remote_request_client_on"; + field public static final java.lang.String REMOTE_REQUEST_SERVER_ON = "remote_request_server_on"; field public static final java.lang.String SHOW_PROCESSES = "show_processes"; field public static final java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in"; + field public static final java.lang.String SYSTEM_SERVICE_ON = "system_service_on"; field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_global_version"; + field public static final java.lang.String TASK_EXECUTOR_ON = "task_executor_on"; field public static final java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale"; field public static final java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail"; @@ -21790,7 +21807,7 @@ } public class BaseObj { - method public synchronized void destroy(); + method public void destroy(); method public java.lang.String getName(); method public void setName(java.lang.String); } @@ -22657,6 +22674,140 @@ } +package android.service.collaboroid { + + public class CollaboRoidManager { + ctor public CollaboRoidManager(android.content.Context); + method public void setCollaboRoidEnabled(boolean); + field public static final java.lang.String COLLABOROID_STATE_CHANGED_ACTION = "android.service.collaboroid.COLLABOROID_STATE_CHANGED"; + field public static final int COLLABOROID_STATE_DISABLED = 1; // 0x1 + field public static final int COLLABOROID_STATE_DISABLING = 0; // 0x0 + field public static final int COLLABOROID_STATE_ENABLED = 3; // 0x3 + field public static final int COLLABOROID_STATE_ENABLING = 2; // 0x2 + field public static final int COLLABOROID_STATE_UNKNOWN = 4; // 0x4 + field public static final java.lang.String EXTRA_COLLABOROID_STATE = "collaboroid_state"; + } + + public abstract interface IGeneralMessageListener implements android.os.IInterface { + method public abstract void onMessageReceived(java.lang.String) throws android.os.RemoteException; + } + + public static abstract class IGeneralMessageListener.Stub extends android.os.Binder implements android.service.collaboroid.IGeneralMessageListener { + ctor public IGeneralMessageListener.Stub(); + method public android.os.IBinder asBinder(); + method public static android.service.collaboroid.IGeneralMessageListener asInterface(android.os.IBinder); + method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException; + } + +} + +package android.service.devicemanager { + + public class Device implements android.os.Parcelable { + ctor public Device(java.lang.String, java.lang.String, java.lang.String, int, int); + ctor public Device(); + method public int describeContents(); + method public void initDevice(); + method public void setAllowedResources(int[]); + method public void setAskedResources(int[]); + method public void updateDevice(java.lang.String, java.lang.String, java.lang.String, int, int); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + field public static final int RESOURCE_TYPE_AUDIO = 5; // 0x5 + field public static final int RESOURCE_TYPE_KEY = 1; // 0x1 + field public static final int RESOURCE_TYPE_LOCATION = 3; // 0x3 + field public static final int RESOURCE_TYPE_SENSOR = 2; // 0x2 + field public static final int RESOURCE_TYPE_SIZE = 7; // 0x7 + field public static final int RESOURCE_TYPE_TOUCH = 0; // 0x0 + field public static final int RESOURCE_TYPE_VIBRATOR = 6; // 0x6 + field public static final int RESOURCE_TYPE_VIDEO = 4; // 0x4 + field public static final java.lang.String[] ResourceNames; + field public final int SYSTEM_SERVICE_LIST; + field public final int TASK_EXECUTOR_LIST; + field public int[] allowedResources; + field public int[] askedResources; + field public java.lang.String deviceName; + field public java.lang.String idleCpu; + field public java.lang.String ipaddress; + field public int isSystemServiceOn; + field public int isTaskExecutorOn; + } + + public class DeviceList { + ctor public DeviceList(); + method public static java.util.HashMap getDevices(); + method public static void setDevices(java.util.HashMap); + } + + public class DeviceManager { + ctor public DeviceManager(android.service.devicemanager.IDeviceManager); + ctor public DeviceManager(android.content.Context); + ctor public DeviceManager(); + method public void allowResources(java.lang.String, int[]); + method public void askResources(java.util.List); + method public void constructCluster(java.util.List); + method public android.service.devicemanager.Device getDevice(java.lang.String); + method public java.util.List getDeviceList(int); + method public int getNumofConfiguredDevices(); + method public java.lang.String[] getSystemServiceOnServerList(); + method public java.lang.String[] getTaskExecutorOnServerList(); + method public java.lang.String recommendDevice(java.util.List); + } + + public abstract interface IDeviceManager implements android.os.IInterface { + method public abstract void allowResources(java.lang.String, int[]) throws android.os.RemoteException; + method public abstract void askResources(java.util.List) throws android.os.RemoteException; + method public abstract void constructCluster(java.util.List) throws android.os.RemoteException; + method public abstract android.service.devicemanager.Device getDevice(java.lang.String) throws android.os.RemoteException; + method public abstract java.util.List getDeviceList(int) throws android.os.RemoteException; + method public abstract int getNumofConfiguredDevices() throws android.os.RemoteException; + method public abstract java.lang.String[] getSystemServiceOnServerList() throws android.os.RemoteException; + method public abstract java.lang.String[] getTaskExecutorOnServerList() throws android.os.RemoteException; + method public abstract void initDevices() throws android.os.RemoteException; + method public abstract boolean isAllowedForResource(java.lang.String, int) throws android.os.RemoteException; + method public abstract java.lang.String recommendDevice(java.util.List) throws android.os.RemoteException; + method public abstract void showRequestDialog(java.lang.String, java.lang.String, int[]) throws android.os.RemoteException; + } + + public static abstract class IDeviceManager.Stub extends android.os.Binder implements android.service.devicemanager.IDeviceManager { + ctor public IDeviceManager.Stub(); + method public android.os.IBinder asBinder(); + method public static android.service.devicemanager.IDeviceManager asInterface(android.os.IBinder); + method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException; + } + +} + +package android.service.distribute { + + public class Distributor { + ctor public Distributor(android.service.distribute.IDistributedComputingService); + ctor public Distributor(); + ctor public Distributor(android.content.Context); + method public void startJobManager(java.lang.String); + method public void startTaskExecutor(); + method public int sum(int, int); + method public void testOperation(); + } + + public abstract interface IDistributedComputingService implements android.os.IInterface { + method public abstract void startJobManager(java.lang.String) throws android.os.RemoteException; + method public abstract void startTaskExecutor() throws android.os.RemoteException; + method public abstract void stopJobManager() throws android.os.RemoteException; + method public abstract void stopTaskExecutor() throws android.os.RemoteException; + method public abstract int sum(int, int) throws android.os.RemoteException; + method public abstract void testOperation() throws android.os.RemoteException; + } + + public static abstract class IDistributedComputingService.Stub extends android.os.Binder implements android.service.distribute.IDistributedComputingService { + ctor public IDistributedComputingService.Stub(); + method public android.os.IBinder asBinder(); + method public static android.service.distribute.IDistributedComputingService asInterface(android.os.IBinder); + method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException; + } + +} + package android.service.dreams { public class DreamService extends android.app.Service implements android.view.Window.Callback { @@ -22737,6 +22888,156 @@ } +package android.service.remote { + + public class AppendingObjectOutputStream extends java.io.ObjectOutputStream { + ctor public AppendingObjectOutputStream(java.io.OutputStream) throws java.io.IOException; + } + + public abstract interface IRemoteService implements android.os.IInterface { + method public abstract void addSensorHandle(int, int) throws android.os.RemoteException; + method public abstract boolean connectToServer(java.lang.String) throws android.os.RemoteException; + method public abstract void disconnectToServer() throws android.os.RemoteException; + method public abstract java.util.List getClientIPs() throws android.os.RemoteException; + method public abstract java.util.List getServerIPs() throws android.os.RemoteException; + method public abstract int getVideoPlayers() throws android.os.RemoteException; + method public abstract void initConnections() throws android.os.RemoteException; + method public abstract boolean isAllowedForResource(java.lang.String, java.lang.String, int[]) throws android.os.RemoteException; + method public abstract boolean isServerOn() throws android.os.RemoteException; + method public abstract void launchDummyApp() throws android.os.RemoteException; + method public abstract void playMusic() throws android.os.RemoteException; + method public abstract void printServerIPs() throws android.os.RemoteException; + method public abstract void registerListener(android.service.collaboroid.IGeneralMessageListener) throws android.os.RemoteException; + method public abstract void removeSensorHandle(int) throws android.os.RemoteException; + method public abstract void requestMotionEvents() throws android.os.RemoteException; + method public abstract boolean respondAllowedResources(java.lang.String, int[]) throws android.os.RemoteException; + method public abstract void sendAllMusic(int, byte[], long) throws android.os.RemoteException; + method public abstract void sendAllrequest(android.service.remote.RemoteRequest) throws android.os.RemoteException; + method public abstract void sendAllrequestVib(android.service.remote.RemoteRequest) throws android.os.RemoteException; + method public abstract void sendKeyEvent(android.view.KeyEvent) throws android.os.RemoteException; + method public abstract void sendLocation(android.location.Location) throws android.os.RemoteException; + method public abstract void sendMotionEvent(android.view.MotionEvent) throws android.os.RemoteException; + method public abstract void sendMusicData(int, byte[], long) throws android.os.RemoteException; + method public abstract boolean sendRequest(android.service.remote.RemoteRequest) throws android.os.RemoteException; + method public abstract boolean sendResourceRequests(java.util.List) throws android.os.RemoteException; + method public abstract void sendSensorEvent(int, int, float[], int, long) throws android.os.RemoteException; + method public abstract void sendVideoSignal(int) throws android.os.RemoteException; + method public abstract void setConfiguration() throws android.os.RemoteException; + method public abstract void setEnabled(boolean) throws android.os.RemoteException; + method public abstract boolean startServer() throws android.os.RemoteException; + method public abstract boolean stopServer() throws android.os.RemoteException; + method public abstract void testKey() throws android.os.RemoteException; + method public abstract void testLocation() throws android.os.RemoteException; + method public abstract void testMusic() throws android.os.RemoteException; + method public abstract void testOperation() throws android.os.RemoteException; + method public abstract void testSensor() throws android.os.RemoteException; + method public abstract void testTouch() throws android.os.RemoteException; + method public abstract void testVibrate() throws android.os.RemoteException; + method public abstract void testVideo() throws android.os.RemoteException; + method public abstract void unregisterListener(android.service.collaboroid.IGeneralMessageListener) throws android.os.RemoteException; + } + + public static abstract class IRemoteService.Stub extends android.os.Binder implements android.service.remote.IRemoteService { + ctor public IRemoteService.Stub(); + method public android.os.IBinder asBinder(); + method public static android.service.remote.IRemoteService asInterface(android.os.IBinder); + method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException; + } + + public class RemoteRequest implements android.os.Parcelable java.io.Serializable { + ctor public RemoteRequest(); + ctor public RemoteRequest(java.lang.String, java.lang.String, java.util.ArrayList); + ctor public RemoteRequest(android.os.Parcel); + method public int describeContents(); + method public java.lang.String getMethod(); + method public java.util.ArrayList getPara(); + method public java.lang.String getType(); + method public void set(java.lang.String, java.lang.String, java.util.ArrayList); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public static class RemoteRequest.RemoteKeyEvent implements java.io.Serializable { + ctor public RemoteRequest.RemoteKeyEvent(int, int, int); + ctor public RemoteRequest.RemoteKeyEvent(android.os.Parcel); + method public int getAction(); + method public int getCode(); + method public int getSource(); + } + + public class RemoteRequest2 implements android.os.Parcelable java.io.Serializable { + ctor public RemoteRequest2(); + ctor public RemoteRequest2(java.lang.String, java.lang.String, java.util.ArrayList); + ctor public RemoteRequest2(android.os.Parcel); + method public int describeContents(); + method public java.lang.String getMethod(); + method public java.util.ArrayList getPara(); + method public java.lang.String getType(); + method public void set(java.lang.String, java.lang.String, java.util.ArrayList); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator CREATOR; + } + + public class RemoteServiceManager { + ctor public RemoteServiceManager(android.service.remote.IRemoteService); + ctor public RemoteServiceManager(); + ctor public RemoteServiceManager(android.content.Context); + method public void connectToServer(java.lang.String); + method public void disconnectToServer(); + method public void launchDummyApp(); + method public void printServerIPs(); + method public void requestMotionEvents(); + method public void sendAllMusic(int, byte[], long); + method public void sendAllrequest(android.service.remote.RemoteRequest); + method public void sendMusicData(int, byte[], long); + method public boolean sendRequest(android.service.remote.RemoteRequest); + method public void setConfiguration(); + method public void setEnabled(boolean); + method public void startServer(); + method public void stopServer(); + method public void testKey(); + method public void testLocation(); + method public void testMusic(); + method public void testOperation(); + method public void testSensor(); + method public void testTouch(); + method public void testVibrate(); + method public void testVideo(); + } + + public class SdPackage implements java.io.Serializable { + ctor public SdPackage(int, byte[], long); + ctor public SdPackage(java.lang.String, int, int, int, long, byte[]); + method public int getBitrate(); + method public int getChannels(); + method public long getDuration(); + method public java.lang.String getMime(); + method public long getPresentationTime(); + method public byte[] getSampleData(); + method public int getSampleRate(); + method public int getSampleSize(); + method public byte[] get_csd0(); + } + + public class vData implements java.io.Serializable { + ctor public vData(); + ctor public vData(int, byte[], long); + method public int getHeight(); + method public java.lang.String getMime(); + method public long getPresentationTime(); + method public byte[] getSampleData(); + method public int getSampleSize(); + method public int getWidth(); + method public byte[] get_csd0(); + method public byte[] get_csd1(); + method public void setMediaFormat(java.lang.String, int, int, byte[], byte[]); + field public long presentationTime; + field public byte[] sampleData; + field public int sampleSize; + } + +} + package android.service.textservice { public abstract class SpellCheckerService extends android.app.Service { @@ -27146,6 +27447,7 @@ method public final float getSize(); method public final float getSize(int); method public final int getSource(); + method public final int getSourceDevice(); method public final float getToolMajor(); method public final float getToolMajor(int); method public final float getToolMinor(); @@ -27195,6 +27497,7 @@ field public static final deprecated int ACTION_POINTER_ID_SHIFT = 8; // 0x8 field public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00 field public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8 + field public static final int ACTION_POINTER_MASK = 65535; // 0xffff field public static final int ACTION_POINTER_UP = 6; // 0x6 field public static final int ACTION_SCROLL = 8; // 0x8 field public static final int ACTION_UP = 1; // 0x1 @@ -27252,6 +27555,8 @@ field public static final int EDGE_TOP = 1; // 0x1 field public static final int FLAG_WINDOW_IS_OBSCURED = 1; // 0x1 field public static final int INVALID_POINTER_ID = -1; // 0xffffffff + field public static final int SOURCE_DEVICE_MASK = -16777216; // 0xff000000 + field public static final int SOURCE_DEVICE_SHIFT = 24; // 0x18 field public static final int TOOL_TYPE_ERASER = 4; // 0x4 field public static final int TOOL_TYPE_FINGER = 1; // 0x1 field public static final int TOOL_TYPE_MOUSE = 3; // 0x3 diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/app/Activity.java AndroidSource/frameworks/base/core/java/android/app/Activity.java --- Original_4.4.4_r1/frameworks/base/core/java/android/app/Activity.java 2016-01-29 15:12:27.375488000 +0900 +++ AndroidSource/frameworks/base/core/java/android/app/Activity.java 2016-09-23 16:10:17.181173579 +0900 @@ -18,6 +18,7 @@ import android.util.ArrayMap; import android.util.SuperNotCalledException; + import com.android.internal.app.ActionBarImpl; import com.android.internal.policy.PolicyManager; @@ -49,8 +50,10 @@ import android.os.Looper; import android.os.Parcelable; import android.os.RemoteException; +import android.os.ServiceManager; import android.os.StrictMode; import android.os.UserHandle; +import android.service.remote.IRemoteService; import android.text.Selection; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -699,6 +702,9 @@ private SearchManager mSearchManager; private MenuInflater mMenuInflater; + // ADDED BY JH + private final IRemoteService mRemoteService = IRemoteService.Stub.asInterface(ServiceManager.getService(Context.REMOTE_SERVICE)); + static final class NonConfigurationInstances { Object activity; HashMap children; @@ -2415,6 +2421,24 @@ public boolean dispatchKeyEvent(KeyEvent event) { onUserInteraction(); Window win = getWindow(); + + // ADDED BY DCSLAB + if(android.provider.Settings.Global.getInt(getContentResolver(), "collaboroid_on", 0)>0){ + if(event.getAction()==KeyEvent.ACTION_DOWN){ + Log.d("KeyLatency", "KeyLatency - client" + event.getSource()); + } + try + { + mRemoteService.sendKeyEvent(event); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + // ADDED BY DCSLAB + if (win.superDispatchKeyEvent(event)) { return true; } @@ -2452,6 +2476,26 @@ * @return boolean Return true if this event was consumed. */ public boolean dispatchTouchEvent(MotionEvent ev) { + // ADDED BY JH + try + { + if (ev.getSourceDevice() == 0 + && (android.provider.Settings.Global.getInt(getContentResolver(), + "collaboroid_on", 0) > 0)) + { +// Log.d("TouchLatency", "motion start!"); + mRemoteService.sendMotionEvent(ev); + } + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // ADDED BY JH + + + if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); } diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/app/ContextImpl.java AndroidSource/frameworks/base/core/java/android/app/ContextImpl.java --- Original_4.4.4_r1/frameworks/base/core/java/android/app/ContextImpl.java 2016-01-29 15:12:27.379488000 +0900 +++ AndroidSource/frameworks/base/core/java/android/app/ContextImpl.java 2016-03-02 19:22:11.000000000 +0900 @@ -17,6 +17,7 @@ package android.app; import android.os.Build; + import com.android.internal.policy.PolicyManager; import com.android.internal.util.Preconditions; @@ -94,6 +95,9 @@ import android.os.UserManager; import android.os.storage.IMountService; import android.os.storage.StorageManager; +import android.service.remote.RemoteServiceManager; +import android.service.collaboroid.CollaboRoidManager; +import android.service.devicemanager.DeviceManager; import android.print.IPrintManager; import android.print.PrintManager; import android.telephony.TelephonyManager; @@ -595,6 +599,26 @@ public Object createService(ContextImpl ctx) { return new ConsumerIrManager(ctx); }}); + + // ADDED FOR COLLABOROID + registerService(COLLABOROID, new ServiceFetcher(){ + public Object createService(ContextImpl ctx){ + return new CollaboRoidManager(ctx); + } + }); + + registerService(REMOTE_SERVICE, new ServiceFetcher(){ + public Object createService(ContextImpl ctx){ + return new RemoteServiceManager(ctx); + } + }); + + registerService(DEVICE_MANAGEMENT_SERVICE, new ServiceFetcher(){ + public Object createService(ContextImpl ctx){ + return new DeviceManager(ctx); + } + }); + // ADDED FOR COLLABOROID } static ContextImpl getImpl(Context context) { diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/content/Context.java AndroidSource/frameworks/base/core/java/android/content/Context.java --- Original_4.4.4_r1/frameworks/base/core/java/android/content/Context.java 2016-01-29 15:12:27.395488000 +0900 +++ AndroidSource/frameworks/base/core/java/android/content/Context.java 2016-03-02 19:26:16.000000000 +0900 @@ -2933,4 +2933,11 @@ public boolean isRestricted() { return false; } + + // ADDED FOR COLLABOROID + public static final String COLLABOROID = "collaboroid"; + public static final String REMOTE_SERVICE = "remote"; + public static final String DEVICE_MANAGEMENT_SERVICE = "devicemanagement"; + public static final String DISTRIBUTED_COMPUTING_SERVICE = "distribute"; + // ADDED FOR COLLABOROID } diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/hardware/SensorEvent.java AndroidSource/frameworks/base/core/java/android/hardware/SensorEvent.java --- Original_4.4.4_r1/frameworks/base/core/java/android/hardware/SensorEvent.java 2016-01-29 15:12:27.411488000 +0900 +++ AndroidSource/frameworks/base/core/java/android/hardware/SensorEvent.java 2015-10-19 13:54:46.000000000 +0900 @@ -501,7 +501,22 @@ */ public long timestamp; + /** + * ADDED BY JH + * The source where sensor events comes + */ + public int sourceDevice; + SensorEvent(int valueSize) { values = new float[valueSize]; } + + /*public SensorEvent(float[] v, int acc, long ts, int sd) + { + values = v; + sensor = new Sensor("RemoteSensor", Sensor.TYPE_REMOTE_SENSOR, Sensor.TYPE_REMOTE_SENSOR); + accuracy = acc; + timestamp = ts; + sourceDevice = sd; + }*/ } diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/hardware/Sensor.java AndroidSource/frameworks/base/core/java/android/hardware/Sensor.java --- Original_4.4.4_r1/frameworks/base/core/java/android/hardware/Sensor.java 2016-01-29 15:12:27.411488000 +0900 +++ AndroidSource/frameworks/base/core/java/android/hardware/Sensor.java 2015-09-30 13:32:06.000000000 +0900 @@ -222,6 +222,12 @@ public static final int TYPE_GEOMAGNETIC_ROTATION_VECTOR = 20; /** + * ADDED BY JH + * + */ + public static final int TYPE_REMOTE_SENSOR = 21; + + /** * A constant describing all sensor types. */ public static final int TYPE_ALL = -1; @@ -324,6 +330,14 @@ Sensor() { } + + // ADDED BY JH + Sensor(String name, int handle, int type) + { + mName = name; + mHandle = handle; + mType = type; + } /** * @return name string of the sensor. diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/hardware/SystemSensorManager.java AndroidSource/frameworks/base/core/java/android/hardware/SystemSensorManager.java --- Original_4.4.4_r1/frameworks/base/core/java/android/hardware/SystemSensorManager.java 2016-01-29 15:12:27.411488000 +0900 +++ AndroidSource/frameworks/base/core/java/android/hardware/SystemSensorManager.java 2016-09-23 16:52:20.421092185 +0900 @@ -16,20 +16,23 @@ package android.hardware; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.MessageQueue; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.service.remote.IRemoteService; import android.util.Log; import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.SparseIntArray; import dalvik.system.CloseGuard; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - /** * Sensor manager implementation that communicates with the built-in * system sensors. @@ -53,12 +56,21 @@ // Looper associated with the context in which this instance was created. private final Looper mMainLooper; - private final int mTargetSdkLevel; - + final int mTargetSdkLevel; + private final Context mContext; + + // ADDED BY JH + private static IRemoteService mRemoteService; + private static SensorEventListener mRemoteSensorListener; + /** {@hide} */ public SystemSensorManager(Context context, Looper mainLooper) { - mMainLooper = mainLooper; + mMainLooper = mainLooper; + mContext = context; mTargetSdkLevel = context.getApplicationInfo().targetSdkVersion; + mRemoteService = IRemoteService.Stub.asInterface(ServiceManager + .getService(Context.REMOTE_SERVICE)); + synchronized(sSensorModuleLock) { if (!sSensorModuleInitialized) { sSensorModuleInitialized = true; @@ -76,12 +88,34 @@ // ", handle=" + sensor.getHandle()); fullList.add(sensor); sHandleToSensor.append(sensor.getHandle(), sensor); + + /*try + { + mRemoteService.addSensorHandle(sensor.getType(), sensor.getHandle()); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + }*/ + + Log.d(TAG, "init- type: " + sensor.getType() + "handle: " + sensor.getHandle()); } } while (i>0); + + Sensor sensor = new Sensor("RemoteSensor", Sensor.TYPE_REMOTE_SENSOR, Sensor.TYPE_REMOTE_SENSOR); + fullList.add(sensor); + sHandleToSensor.append(sensor.getHandle(), sensor); + + Log.d(TAG, "init- type: " + sensor.getType() + "handle: " + sensor.getHandle()); } } } + /*SensorEventListener getRemoteListener() + { + return mRemoteSensorListener; + }*/ /** @hide */ @Override @@ -94,41 +128,125 @@ @Override protected boolean registerListenerImpl(SensorEventListener listener, Sensor sensor, int delayUs, Handler handler, int maxBatchReportLatencyUs, int reservedFlags) { - if (listener == null || sensor == null) { + if (listener == null || sensor == null) { Log.e(TAG, "sensor or listener is null"); return false; } - // Trigger Sensors should use the requestTriggerSensor call. + + // Trigger Sensors should use the requestTriggerSensor call. if (Sensor.getReportingMode(sensor) == Sensor.REPORTING_MODE_ONE_SHOT) { Log.e(TAG, "Trigger Sensors should use the requestTriggerSensor."); return false; } + if (maxBatchReportLatencyUs < 0 || delayUs < 0) { Log.e(TAG, "maxBatchReportLatencyUs and delayUs should be non-negative"); return false; } - + // Invariants to preserve: // - one Looper per SensorEventListener // - one Looper per SensorEventQueue // We map SensorEventListener to a SensorEventQueue, which holds the looper synchronized (mSensorListeners) { SensorEventQueue queue = mSensorListeners.get(listener); - if (queue == null) { + + Log.d(TAG, mSensorListeners.toString()); + + //if((queue == null) && (sensor.getType() == Sensor.TYPE_REMOTE_SENSOR)) + + /*if(sensor.getType() == Sensor.TYPE_REMOTE_SENSOR) + { + mRemoteSensorListener = listener; + return true; + }*/ + + try + { + if(mRemoteService == null) + { + Log.d(TAG, "type: " + sensor.getType() + " handle: " + sensor.getHandle()); + return false; + } + mRemoteService.addSensorHandle(sensor.getType(), sensor.getHandle()); + Log.d(TAG, "Hello: " + sensor.getType()); + //RemoteSensorListener = listener; + + /*Looper looper = (handler != null) ? handler.getLooper() : mMainLooper; + queue = new SensorEventQueue(listener, looper, this); + + if (!queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags)) { + queue.dispose(); + return false; + }*/ + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + if (queue == null) + { Looper looper = (handler != null) ? handler.getLooper() : mMainLooper; queue = new SensorEventQueue(listener, looper, this); + if (!queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags)) { - queue.dispose(); - return false; - } - mSensorListeners.put(listener, queue); + queue.dispose(); + return false; + } + + /*Log.d(TAG, "6: " + sensor.getType() + ", " + sensor.getHandle()); + + // add handle in RemoteRequestHandler - ADDED BY JH + try + { + if(mRemoteService == null) + Log.d(TAG, "type: " + sensor.getType() + " handle: " + sensor.getHandle()); + mRemoteService.addSensorHandle(sensor.getType(), sensor.getHandle()); + + if(sensor.getType() == Sensor.TYPE_REMOTE_SENSOR) + { + Log.d(TAG, "7: " + sensor.getType() + ", " + sensor.getHandle()); + mRemoteService.setRemoteSensorOn(true); + RemoteSensorListener = listener; + } + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + }*/ + return true; - } else { + } + else + { + // add handle in RemoteRequestHandler + /*try + { + if(mRemoteService == null) + Log.d(TAG, "type: " + sensor.getType() + " handle: " + sensor.getHandle()); + mRemoteService.addSensorHandle(sensor.getType(), sensor.getHandle()); + + if(sensor.getType() == Sensor.TYPE_REMOTE_SENSOR) + { + Log.d(TAG, "8: " + sensor.getType() + ", " + sensor.getHandle()); + mRemoteService.setRemoteSensorOn(true); + RemoteSensorListener = listener; + } + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + }*/ + return queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags); } } } - + /** @hide */ @Override protected void unregisterListenerImpl(SensorEventListener listener, Sensor sensor) { @@ -136,8 +254,16 @@ if (sensor != null && Sensor.getReportingMode(sensor) == Sensor.REPORTING_MODE_ONE_SHOT) { return; } + + synchronized (mSensorListeners) { + if(sensor != null && sensor.getType() == Sensor.TYPE_REMOTE_SENSOR) + { + mRemoteSensorListener = null; + return; + } + SensorEventQueue queue = mSensorListeners.get(listener); if (queue != null) { boolean result; @@ -150,6 +276,25 @@ mSensorListeners.remove(listener); queue.dispose(); } + + // ADDED BY JH + try + { + if(mRemoteService == null) + Log.d(TAG, "type: " + sensor.getType() + " handle: " + sensor.getHandle()); + mRemoteService.removeSensorHandle(sensor.getType()); + + /*if(sensor.getType() == Sensor.TYPE_REMOTE_SENSOR) + { + //mRemoteService.setRemoteSensorOn(false); + RemoteSensorListener = null; + }*/ + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } } } } @@ -224,6 +369,11 @@ private static abstract class BaseEventQueue { private native int nativeInitBaseEventQueue(BaseEventQueue eventQ, MessageQueue msgQ, float[] scratch); + + // ADDED BY JH + //private native int nativeInitRemoteBaseEventQueue(BaseEventQueue eventQ, MessageQueue msgQ, + // float[] scratch); + private static native int nativeEnableSensor(int eventQ, int handle, int rateUs, int maxBatchReportLatencyUs, int reservedFlags); private static native int nativeDisableSensor(int eventQ, int handle); @@ -242,6 +392,12 @@ mCloseGuard.open("dispose"); mManager = manager; } + + /*BaseEventQueue(Looper looper, SystemSensorManager manager, boolean isRemote) { + nSensorEventQueue = nativeInitRemoteBaseEventQueue(this, looper.getQueue(), mScratch); + mCloseGuard.open("dispose"); + mManager = manager; + }*/ public void dispose() { dispose(false); @@ -256,10 +412,17 @@ // Get ready to receive events before calling enable. mActiveSensors.put(handle, true); addSensorEvent(sensor); + Log.d(TAG, "addSensor: " + sensor.getName()); + + // ADDED BY JH + /*if(sensor.getType() == Sensor.TYPE_REMOTE_SENSOR) + return true;*/ if (enableSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags) != 0) { // Try continuous mode if batching fails. + Log.d(TAG, "addSensor - enableSensor"); if (maxBatchReportLatencyUs == 0 || maxBatchReportLatencyUs > 0 && enableSensor(sensor, delayUs, 0, 0) != 0) { + Log.d(TAG, "addSensor - enableSensor2: " + maxBatchReportLatencyUs); removeSensor(sensor, false); return false; } @@ -290,6 +453,18 @@ if (disable) disableSensor(sensor); mActiveSensors.put(sensor.getHandle(), false); removeSensorEvent(sensor); + + // remove handle in RemoteRequestHandler + try + { + mRemoteService.removeSensorHandle(sensor.getType()); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return true; } return false; @@ -331,6 +506,7 @@ Sensor sensor, int rateUs, int maxBatchReportLatencyUs, int reservedFlags) { if (nSensorEventQueue == 0) throw new NullPointerException(); if (sensor == null) throw new NullPointerException(); + return nativeEnableSensor(nSensorEventQueue, sensor.getHandle(), rateUs, maxBatchReportLatencyUs, reservedFlags); } @@ -338,28 +514,30 @@ private int disableSensor(Sensor sensor) { if (nSensorEventQueue == 0) throw new NullPointerException(); if (sensor == null) throw new NullPointerException(); + return nativeDisableSensor(nSensorEventQueue, sensor.getHandle()); } protected abstract void dispatchSensorEvent(int handle, float[] values, int accuracy, - long timestamp); + long timestamp, int sourceDevice); protected abstract void dispatchFlushCompleteEvent(int handle); protected abstract void addSensorEvent(Sensor sensor); protected abstract void removeSensorEvent(Sensor sensor); } - static final class SensorEventQueue extends BaseEventQueue { + public static final class SensorEventQueue extends BaseEventQueue { private final SensorEventListener mListener; private final SparseArray mSensorsEvents = new SparseArray(); - + public SensorEventQueue(SensorEventListener listener, Looper looper, - SystemSensorManager manager) { - super(looper, manager); + SystemSensorManager systemSensorManager) { + super(looper, systemSensorManager); mListener = listener; } - + @Override public void addSensorEvent(Sensor sensor) { + Log.d(TAG, "addSensorEvent(Sensor): " + sensor.getName()); SensorEvent t = new SensorEvent(Sensor.getMaxLengthValuesArray(sensor, mManager.mTargetSdkLevel)); synchronized (mSensorsEvents) { @@ -378,9 +556,10 @@ @SuppressWarnings("unused") @Override protected void dispatchSensorEvent(int handle, float[] values, int inAccuracy, - long timestamp) { - final Sensor sensor = sHandleToSensor.get(handle); - SensorEvent t = null; + long timestamp, int sourceDevice) { + + final Sensor sensor = sHandleToSensor.get(handle); + SensorEvent t = null; synchronized (mSensorsEvents) { t = mSensorsEvents.get(handle); } @@ -390,34 +569,63 @@ // the queue waiting to be delivered. Ignore. return; } + // Copy from the values array. System.arraycopy(values, 0, t.values, 0, t.values.length); t.timestamp = timestamp; t.accuracy = inAccuracy; t.sensor = sensor; + t.sourceDevice = sourceDevice; + + // ADDED FOR COLLABOROID + try + { + if(sensor.getType() == Sensor.TYPE_ORIENTATION || sensor.getType() == Sensor.TYPE_PROXIMITY) + { + Log.d("SensorStart", "sensor start! "); + mRemoteService.sendSensorEvent(t.sensor.getType(), handle, values, inAccuracy, timestamp); + } + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + switch (t.sensor.getType()) { - // Only report accuracy for sensors that support it. - case Sensor.TYPE_MAGNETIC_FIELD: - case Sensor.TYPE_ORIENTATION: - // call onAccuracyChanged() only if the value changes - final int accuracy = mSensorAccuracies.get(handle); - if ((t.accuracy >= 0) && (accuracy != t.accuracy)) { - mSensorAccuracies.put(handle, t.accuracy); - mListener.onAccuracyChanged(t.sensor, t.accuracy); - } - break; - default: - // For other sensors, just report the accuracy once - if (mFirstEvent.get(handle) == false) { - mFirstEvent.put(handle, true); - mListener.onAccuracyChanged( - t.sensor, SENSOR_STATUS_ACCURACY_HIGH); - } - break; + // Only report accuracy for sensors that support it. + case Sensor.TYPE_MAGNETIC_FIELD: + case Sensor.TYPE_ORIENTATION: + // call onAccuracyChanged() only if the value changes + final int accuracy = mSensorAccuracies.get(handle); + if ((t.accuracy >= 0) && (accuracy != t.accuracy)) { + mSensorAccuracies.put(handle, t.accuracy); + mListener.onAccuracyChanged(t.sensor, t.accuracy); + } + break; + default: + // For other sensors, just report the accuracy once + if (mFirstEvent.get(handle) == false) { + mFirstEvent.put(handle, true); + mListener.onAccuracyChanged( + t.sensor, SENSOR_STATUS_ACCURACY_HIGH); + } + break; + } + // ADDED BY JH + /*if(t.sourceDevice != 0) + { + //t.sensor = sHandleToSensor.get(Sensor.TYPE_REMOTE_SENSOR); + Log.d(TAG, "type::::: "+t.sensor.getType()); + t.sensor = new Sensor("RemoteSensor", handle, Sensor.TYPE_REMOTE_SENSOR); + //SystemSensorManager.mRemoteSensorListener.onSensorChanged(t); + //RemoteSensorListener.onSensorChanged(t); + mListener.onSensorChanged(t); } + else */ mListener.onSensorChanged(t); } - + @SuppressWarnings("unused") protected void dispatchFlushCompleteEvent(int handle) { if (mListener instanceof SensorEventListener2) { @@ -433,13 +641,14 @@ private final SparseArray mTriggerEvents = new SparseArray(); public TriggerEventQueue(TriggerEventListener listener, Looper looper, - SystemSensorManager manager) { - super(looper, manager); + SystemSensorManager systemSensorManager) { + super(looper, systemSensorManager); mListener = listener; } @Override public void addSensorEvent(Sensor sensor) { + Log.d(TAG, "addSensorEvent(Trigger): " + sensor.getName()); TriggerEvent t = new TriggerEvent(Sensor.getMaxLengthValuesArray(sensor, mManager.mTargetSdkLevel)); synchronized (mTriggerEvents) { @@ -458,8 +667,9 @@ @SuppressWarnings("unused") @Override protected void dispatchSensorEvent(int handle, float[] values, int accuracy, - long timestamp) { + long timestamp, int sourceDevice) { final Sensor sensor = sHandleToSensor.get(handle); + Log.d(TAG, "dispatchSensorEvent(Trigger): " + sensor.getName()); TriggerEvent t = null; synchronized (mTriggerEvents) { t = mTriggerEvents.get(handle); @@ -485,4 +695,4 @@ protected void dispatchFlushCompleteEvent(int handle) { } } -} +} \ No newline at end of file diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/os/SystemVibrator.java AndroidSource/frameworks/base/core/java/android/os/SystemVibrator.java --- Original_4.4.4_r1/frameworks/base/core/java/android/os/SystemVibrator.java 2016-01-29 15:12:27.431488000 +0900 +++ AndroidSource/frameworks/base/core/java/android/os/SystemVibrator.java 2016-09-26 17:12:48.515829267 +0900 @@ -18,8 +18,12 @@ import android.app.ActivityThread; import android.content.Context; +import android.service.remote.IRemoteService; +import android.service.remote.RemoteRequest; import android.util.Log; +import java.util.ArrayList; + /** * Vibrator implementation that controls the main system vibrator. * @@ -32,16 +36,24 @@ private final IVibratorService mService; private final Binder mToken = new Binder(); + private IRemoteService mRemoteService; + + public SystemVibrator() { mPackageName = ActivityThread.currentPackageName(); mService = IVibratorService.Stub.asInterface( ServiceManager.getService("vibrator")); + mRemoteService = IRemoteService.Stub.asInterface(ServiceManager + .getService(Context.REMOTE_SERVICE)); + } public SystemVibrator(Context context) { mPackageName = context.getOpPackageName(); mService = IVibratorService.Stub.asInterface( ServiceManager.getService("vibrator")); + mRemoteService = IRemoteService.Stub.asInterface(ServiceManager + .getService(Context.REMOTE_SERVICE)); } @Override @@ -81,6 +93,20 @@ } catch (RemoteException e) { Log.w(TAG, "Failed to vibrate.", e); } + + + + ArrayList para = new ArrayList(); + para.add(milliseconds); + + RemoteRequest request = new RemoteRequest("systemCall", "vibrate", para); + try { + mRemoteService.sendAllrequestVib(request); + } catch (RemoteException e) { + // TODO Auto-generated catch block +// e.printStackTrace(); + } + } /** @@ -104,6 +130,9 @@ } else { throw new ArrayIndexOutOfBoundsException(); } + + + } @Override diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/provider/Settings.java AndroidSource/frameworks/base/core/java/android/provider/Settings.java --- Original_4.4.4_r1/frameworks/base/core/java/android/provider/Settings.java 2016-01-29 15:12:27.439488000 +0900 +++ AndroidSource/frameworks/base/core/java/android/provider/Settings.java 2016-06-20 16:56:35.000000000 +0900 @@ -1101,6 +1101,7 @@ MOVED_TO_GLOBAL.add(Settings.Global.SMS_SHORT_CODES_UPDATE_METADATA_URL); MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_CONTENT_URL); MOVED_TO_GLOBAL.add(Settings.Global.CERT_PIN_UPDATE_METADATA_URL); + } /** @hide */ @@ -2860,6 +2861,15 @@ MOVED_TO_GLOBAL.add(Settings.Global.SET_GLOBAL_HTTP_PROXY); MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_DNS_SERVER); MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_NETWORK_MODE); + + // ADDED FOR COLLABOROID + MOVED_TO_GLOBAL.add(Settings.Global.REMOTE_REQUEST_SERVER_ON); + MOVED_TO_GLOBAL.add(Settings.Global.REMOTE_REQUEST_CLIENT_ON); + MOVED_TO_GLOBAL.add(Settings.Global.COLLABOROID_ON); + MOVED_TO_GLOBAL.add(Settings.Global.SYSTEM_SERVICE_ON); + MOVED_TO_GLOBAL.add(Settings.Global.TASK_EXECUTOR_ON); + MOVED_TO_GLOBAL.add(Settings.Global.COLLABOROID_DEVICE_NAME); + // ADDED FOR COLLABOROID } /** @hide */ @@ -5935,6 +5945,18 @@ */ public static final String LOW_BATTERY_SOUND_TIMEOUT = "low_battery_sound_timeout"; + // ADDED BY DCSLAB + public static final String REMOTE_REQUEST_SERVER_ON = "remote_request_server_on"; + public static final String REMOTE_REQUEST_CLIENT_ON = "remote_request_client_on"; + + public static final String COLLABOROID_ON = "collaboroid_on"; + + public static final String SYSTEM_SERVICE_ON = "system_service_on"; + public static final String TASK_EXECUTOR_ON = "task_executor_on"; + + public static final String COLLABOROID_DEVICE_NAME = "collaboroid_device_name"; + + /** * Settings to backup. This is here so that it's in the same place as the settings * keys and easy to update. diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/collaboroid/CollaboRoidManager.java AndroidSource/frameworks/base/core/java/android/service/collaboroid/CollaboRoidManager.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/collaboroid/CollaboRoidManager.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/collaboroid/CollaboRoidManager.java 2016-06-23 18:41:16.000000000 +0900 @@ -0,0 +1,72 @@ +package android.service.collaboroid; + +import android.content.Context; +import android.content.Intent; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.UserHandle; +import android.provider.Settings; +import android.service.devicemanager.IDeviceManager; +import android.service.remote.IRemoteService; + +public class CollaboRoidManager +{ + public static final String EXTRA_COLLABOROID_STATE = "collaboroid_state"; + + public static final String COLLABOROID_STATE_CHANGED_ACTION = "android.service.collaboroid.COLLABOROID_STATE_CHANGED"; + + public static final int COLLABOROID_STATE_DISABLING = 0; + public static final int COLLABOROID_STATE_DISABLED = 1; + public static final int COLLABOROID_STATE_ENABLING = 2; + public static final int COLLABOROID_STATE_ENABLED = 3; + public static final int COLLABOROID_STATE_UNKNOWN = 4; + + private IDeviceManager mDeviceService; + private IRemoteService mRemoteService; + private Context mContext; + + public CollaboRoidManager(Context context) + { + // TODO Auto-generated constructor stub + mContext = context; + mDeviceService = IDeviceManager.Stub.asInterface(ServiceManager.getService(Context.DEVICE_MANAGEMENT_SERVICE)); + mRemoteService = IRemoteService.Stub.asInterface(ServiceManager.getService(Context.REMOTE_SERVICE)); + } + + public void setCollaboRoidEnabled(boolean enabled) + { + try + { + if(enabled) + { + setCollaboRoidState(COLLABOROID_STATE_ENABLING); + mDeviceService.getDeviceList(0); + mRemoteService.startServer(); + Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.COLLABOROID_ON, 1); + setCollaboRoidState(COLLABOROID_STATE_ENABLED); + } + else + { + // disconnects to all devices + setCollaboRoidState(COLLABOROID_STATE_DISABLING); + mRemoteService.stopServer(); + mRemoteService.initConnections(); + mDeviceService.initDevices(); + Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.COLLABOROID_ON, 0); + setCollaboRoidState(COLLABOROID_STATE_DISABLED); + } + } + catch(RemoteException re) + { + re.printStackTrace(); + } + } + + private void setCollaboRoidState(int state) + { + final Intent intent = new Intent(CollaboRoidManager.COLLABOROID_STATE_CHANGED_ACTION); + intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); + intent.putExtra(CollaboRoidManager.EXTRA_COLLABOROID_STATE, state); + mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL); + } +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/collaboroid/IGeneralMessageListener.aidl AndroidSource/frameworks/base/core/java/android/service/collaboroid/IGeneralMessageListener.aidl --- Original_4.4.4_r1/frameworks/base/core/java/android/service/collaboroid/IGeneralMessageListener.aidl 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/collaboroid/IGeneralMessageListener.aidl 2016-03-04 14:09:26.000000000 +0900 @@ -0,0 +1,6 @@ +package android.service.collaboroid; + +oneway interface IGeneralMessageListener +{ + void onMessageReceived(String message); +} \ No newline at end of file diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/Device.aidl AndroidSource/frameworks/base/core/java/android/service/devicemanager/Device.aidl --- Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/Device.aidl 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/devicemanager/Device.aidl 2016-01-11 19:24:34.000000000 +0900 @@ -0,0 +1,3 @@ +package android.service.devicemanager; + +parcelable Device; \ No newline at end of file diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/Device.java AndroidSource/frameworks/base/core/java/android/service/devicemanager/Device.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/Device.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/devicemanager/Device.java 2016-06-21 17:49:09.000000000 +0900 @@ -0,0 +1,119 @@ +package android.service.devicemanager; + +import android.os.Parcel; +import android.os.Parcelable; + +public class Device implements Parcelable +{ + public static final int RESOURCE_TYPE_TOUCH = 0; + public static final int RESOURCE_TYPE_KEY = 1; + public static final int RESOURCE_TYPE_SENSOR = 2; + public static final int RESOURCE_TYPE_LOCATION = 3; + public static final int RESOURCE_TYPE_VIDEO = 4; + public static final int RESOURCE_TYPE_AUDIO = 5; + public static final int RESOURCE_TYPE_VIBRATOR = 6; + + public static final int RESOURCE_TYPE_SIZE = 7; + + public static final String[] ResourceNames = {"Touch", "Key", "Sensor", "Location", "Video", "Audio", "Vibrator"}; + + public final int SYSTEM_SERVICE_LIST = 1; + public final int TASK_EXECUTOR_LIST = 2; + + public String ipaddress; + public String idleCpu; + public String deviceName; + public int isSystemServiceOn = -1; + public int isTaskExecutorOn = -1; + + public int[] askedResources; + public int[] allowedResources; + + public Device(String ipaddress, String idleCpu, String name, int isSystemServiceOn, int isTaskExecutorOn) { + updateDevice(ipaddress, idleCpu, name, isSystemServiceOn, isTaskExecutorOn); +// this.ipaddress = ipaddress; +// this.idleCpu = idleCpu; +// this.isSystemServiceOn = isSystemServiceOn; +// this.isTaskExecutorOn = isTaskExecutorOn; + } + + public Device() { + // TODO Auto-generated constructor stub + initDevice(); + } + + public void initDevice(){ + this.ipaddress = ""; + this.idleCpu = ""; + this.deviceName = ""; + this.isSystemServiceOn = -1; + this.isTaskExecutorOn = -1; + + this.askedResources = new int[RESOURCE_TYPE_SIZE]; + this.allowedResources = new int[RESOURCE_TYPE_SIZE]; + } + + public String toString() { + String result = "ipAddress: " + this.ipaddress + + "idleCPU: " + this.idleCpu + + "SystemServerOn? " + Integer.toString(isSystemServiceOn) + + "TaskExecutorOn? " + Integer.toString(isTaskExecutorOn) + "\n"; + return result; + } + + public void updateDevice(String ipaddress, String idleCpu, String name, int isSystemServiceOn, int isTaskExecutorOn){ + initDevice(); + this.ipaddress = ipaddress; + this.idleCpu = idleCpu; + this.deviceName = name; + this.isSystemServiceOn = isSystemServiceOn; + this.isTaskExecutorOn = isTaskExecutorOn; + } + + public void setAllowedResources(int[] resources) + { + allowedResources = resources; + } + + public void setAskedResources(int[] resources) + { + askedResources = resources; + } + + @Override + public int describeContents() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + // TODO Auto-generated method stub + dest.writeString(ipaddress); + dest.writeString(idleCpu); + dest.writeString(deviceName); + dest.writeInt(isSystemServiceOn); + dest.writeInt(isTaskExecutorOn); + dest.writeIntArray(askedResources); + dest.writeIntArray(allowedResources); + } + public static final Creator CREATOR = new Creator() { + public Device createFromParcel(Parcel in) { + Device device = new Device(); + device.ipaddress = in.readString(); + device.idleCpu = in.readString(); + device.deviceName = in.readString(); + device.isSystemServiceOn = in.readInt(); + device.isTaskExecutorOn = in.readInt(); + device.askedResources = in.createIntArray(); + device.allowedResources = in.createIntArray(); + + return device; + } + + public Device[] newArray(int size) { + return new Device[size]; + } + }; + +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/DeviceList.java AndroidSource/frameworks/base/core/java/android/service/devicemanager/DeviceList.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/DeviceList.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/devicemanager/DeviceList.java 2016-01-11 19:31:35.000000000 +0900 @@ -0,0 +1,18 @@ +package android.service.devicemanager; + +import java.util.HashMap; + +public class DeviceList +{ + private static HashMap devices = new HashMap(); + + public static HashMap getDevices() { + return devices; + } + + public static void setDevices(HashMap devices) { + DeviceList.devices = devices; + } + + +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/DeviceManager.java AndroidSource/frameworks/base/core/java/android/service/devicemanager/DeviceManager.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/DeviceManager.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/devicemanager/DeviceManager.java 2016-06-22 11:31:03.000000000 +0900 @@ -0,0 +1,125 @@ +package android.service.devicemanager; + +import java.util.List; + +import android.content.Context; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.service.remote.IRemoteService; +import android.util.Log; + +public class DeviceManager { + private final IDeviceManager mService; + + public DeviceManager(IDeviceManager service) { + mService = service; + } + + public DeviceManager(Context ctx) { + mService = IDeviceManager.Stub.asInterface(ServiceManager.getService(Context.DEVICE_MANAGEMENT_SERVICE)); + } + + public DeviceManager() { + mService = IDeviceManager.Stub.asInterface(ServiceManager.getService(Context.DEVICE_MANAGEMENT_SERVICE)); + } + + public String recommendDevice(List peerlist) { + try { + return mService.recommendDevice(peerlist); + } catch (RemoteException e) { + e.printStackTrace(); + } + return null; + + } + + public String[] getSystemServiceOnServerList(){ + try{ + return mService.getSystemServiceOnServerList(); + } catch(RemoteException e){ + e.printStackTrace(); + } + return null; + } + + public String[] getTaskExecutorOnServerList(){ + try{ + return mService.getTaskExecutorOnServerList(); + } catch(RemoteException e){ + e.printStackTrace(); + } + return null; + } + + public List getDeviceList(int kind) { + try { + return mService.getDeviceList(kind); + } catch (RemoteException e) { + e.printStackTrace(); + } + return null; + + } + + public void constructCluster(List devicelist) + { + try + { + Log.d("DeviceManager", "in construct!"); + mService.constructCluster(devicelist); + } + catch(RemoteException e) + { + e.printStackTrace(); + } + } + + public int getNumofConfiguredDevices() + { + try + { + return mService.getNumofConfiguredDevices(); + } + catch(RemoteException e) + { + e.printStackTrace(); + } + return 0; + } + + public Device getDevice(String name) + { + try + { + return mService.getDevice(name); + } + catch(RemoteException e) + { + e.printStackTrace(); + } + return null; + } + + public void askResources(List devicelist) { + try + { + mService.askResources(devicelist); + } + catch(RemoteException e) + { + e.printStackTrace(); + } + } + + public void allowResources(String deviceName, int[] allowedResources) + { + try + { + mService.allowResources(deviceName, allowedResources); + } + catch(RemoteException e) + { + e.printStackTrace(); + } + } +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/IDeviceManager.aidl AndroidSource/frameworks/base/core/java/android/service/devicemanager/IDeviceManager.aidl --- Original_4.4.4_r1/frameworks/base/core/java/android/service/devicemanager/IDeviceManager.aidl 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/devicemanager/IDeviceManager.aidl 2016-06-23 18:38:57.000000000 +0900 @@ -0,0 +1,21 @@ +package android.service.devicemanager; + +import android.service.devicemanager.Device; + +interface IDeviceManager { + void initDevices(); + String recommendDevice(in List devicelist); + List getDeviceList(int kind); + String[] getSystemServiceOnServerList(); + String[] getTaskExecutorOnServerList(); + + int getNumofConfiguredDevices(); + Device getDevice(String name); + void constructCluster(in List devicelist); + + void askResources(in List devicelist); + void allowResources(String deviceName, in int[] allowedResources); + void showRequestDialog(String deviceName, String deviceIP, in int[] askedResources); + + boolean isAllowedForResource(String device, int resource); +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/distribute/Distributor.java AndroidSource/frameworks/base/core/java/android/service/distribute/Distributor.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/distribute/Distributor.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/distribute/Distributor.java 2015-01-27 15:39:24.000000000 +0900 @@ -0,0 +1,69 @@ +package android.service.distribute; + +import android.content.Context; +import android.os.RemoteException; +import android.os.ServiceManager; + +public class Distributor +{ + private final IDistributedComputingService mService; + + public Distributor(IDistributedComputingService service) + { + mService = service; + } + + public Distributor() + { + mService = IDistributedComputingService.Stub.asInterface(ServiceManager.getService("distributedcomputing")); + } + + public Distributor(Context context) + { + // TODO Auto-generated constructor stub + mService = IDistributedComputingService.Stub.asInterface(ServiceManager.getService("distributedcomputing")); + } + + public void startJobManager(String ip) + { + try { + mService.startJobManager(ip); + } catch (RemoteException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void startTaskExecutor() + { + try { + mService.startTaskExecutor(); + } catch (RemoteException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void testOperation() + { + try { + mService.testOperation(); + } catch (RemoteException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public int sum(int start, int end) + { + try + { + return mService.sum(start, end); + } + catch (RemoteException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return 0; + } +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/distribute/IDistributedComputingService.aidl AndroidSource/frameworks/base/core/java/android/service/distribute/IDistributedComputingService.aidl --- Original_4.4.4_r1/frameworks/base/core/java/android/service/distribute/IDistributedComputingService.aidl 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/distribute/IDistributedComputingService.aidl 2015-01-27 21:56:54.000000000 +0900 @@ -0,0 +1,14 @@ +package android.service.distribute; + +interface IDistributedComputingService +{ + void startJobManager(String ip); + void stopJobManager(); + + void startTaskExecutor(); + void stopTaskExecutor(); + + int sum(int start, int end); + + void testOperation(); +} \ No newline at end of file diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/AppendingObjectOutputStream.java AndroidSource/frameworks/base/core/java/android/service/remote/AppendingObjectOutputStream.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/AppendingObjectOutputStream.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/remote/AppendingObjectOutputStream.java 2015-10-27 11:41:12.000000000 +0900 @@ -0,0 +1,22 @@ +package android.service.remote; + +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.OutputStream; + +public class AppendingObjectOutputStream extends ObjectOutputStream { + + public AppendingObjectOutputStream(OutputStream output) throws IOException { + super(output); + // TODO Auto-generated constructor stub + } + + @Override + protected void writeStreamHeader() throws IOException { + // do not write a header, but reset: + // this line added after another question + // showed a problem with the original + reset(); + } + +} \ No newline at end of file diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/IRemoteService.aidl AndroidSource/frameworks/base/core/java/android/service/remote/IRemoteService.aidl --- Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/IRemoteService.aidl 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/remote/IRemoteService.aidl 2016-09-26 17:18:41.927817867 +0900 @@ -0,0 +1,80 @@ +package android.service.remote; + +import android.service.remote.RemoteRequest; + +import android.service.devicemanager.Device; + +import android.service.collaboroid.IGeneralMessageListener; + +import android.view.MotionEvent; +import android.view.KeyEvent; +import android.location.Location; + + +interface IRemoteService +{ + boolean startServer(); + boolean stopServer(); + + void setConfiguration(); + void setEnabled(boolean isEnabled); + + boolean isServerOn(); + +// void connectToServer(); + boolean connectToServer(String ip); + void disconnectToServer(); + void initConnections(); + List getClientIPs(); + List getServerIPs(); + void printServerIPs(); + void sendAllMusic(int sampleSize, in byte[] to_send, long presentationTime); + void sendAllrequest(in RemoteRequest request); + + boolean sendResourceRequests(in List requestDeviceList); + boolean isAllowedForResource(String deviceName, String deviceIP, in int[] resources); + boolean respondAllowedResources(String deviceIP, in int[] resources); + + boolean sendRequest(in RemoteRequest request); +// void sendSensorRequest(in SensorEventQueue2 queue); + void sendAllrequestVib(in RemoteRequest request); + + // for MotionEvent + void sendMotionEvent(in MotionEvent event); + + // for KeyEvent + void sendKeyEvent(in KeyEvent event); + + // for SensorEvent +// boolean setRemoteSensorOn(boolean flag, SensorEventListener listener); + void addSensorHandle(int type, int handle); + void removeSensorHandle(int type); + void sendSensorEvent(int type, int sensor, in float[] values, int accuracy, long timestamp); + + // for API + void playMusic(); + + // for evaluations + void testOperation(); + void testVibrate(); + void testMusic(); + void testVideo(); + void testTouch(); + void testKey(); + void testSensor(); + void testLocation(); + void requestMotionEvents(); + void launchDummyApp(); + + void sendMusicData(int sampleSize, in byte[] to_send, long presentationTime); + + int getVideoPlayers(); + void sendVideoSignal(int vport); + + void sendLocation(in Location location); + +// Object sendRountTripRequest(in RemoteRequest request); + + void registerListener(IGeneralMessageListener listener); + void unregisterListener(IGeneralMessageListener listener); +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/RemoteRequest2.java AndroidSource/frameworks/base/core/java/android/service/remote/RemoteRequest2.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/RemoteRequest2.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/remote/RemoteRequest2.java 2016-02-22 17:17:46.000000000 +0900 @@ -0,0 +1,97 @@ +package android.service.remote; + +import java.io.Serializable; +import java.util.ArrayList; + +import android.os.Parcel; +import android.os.Parcelable; + +public class RemoteRequest2 implements Serializable, Parcelable +{ + private static final long serialVersionUID = 1L; + private String type; + private String method; + private ArrayList parameters; + + public RemoteRequest2() + { + parameters = new ArrayList(); + } + + public RemoteRequest2(String type, String method, ArrayList parameters) + { + this.type = type; + this.method = method; + this.parameters = parameters; + } + + public RemoteRequest2(Parcel in) + { + this.type = in.readString(); + this.method = in.readString(); + //this.parameters = in.readArrayList(null); + //this.parameters = in.readArrayList(Object.class.getClassLoader()); + this.parameters = (ArrayList)in.readSerializable(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() + { + @Override + public RemoteRequest[] newArray(int size) + { + // TODO Auto-generated method stub + return new RemoteRequest[size]; + } + + @Override + public RemoteRequest createFromParcel(Parcel in) + { + // TODO Auto-generated method stub + return new RemoteRequest(in); + } + }; + + @Override + public int describeContents() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) + { + dest.writeString(this.type); + dest.writeString(this.method); + // dest.writeList(parameters); + dest.writeSerializable(this.parameters); + } + + public void set(String type, String method, ArrayList parameters) + { + this.type = type; + this.method = method; + this.parameters = parameters; + } + + public String getType() + { + return type; + } + + public String getMethod() + { + return method; + } + + public ArrayList getPara() + { + return parameters; + } + + public String toString() + { + return "type: " + type + "\nmethod: " + method + "\npara: " + parameters.toString(); + } + +} \ No newline at end of file diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/RemoteRequest.aidl AndroidSource/frameworks/base/core/java/android/service/remote/RemoteRequest.aidl --- Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/RemoteRequest.aidl 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/remote/RemoteRequest.aidl 2014-12-27 02:19:52.000000000 +0900 @@ -0,0 +1,3 @@ +package android.service.remote; + +parcelable RemoteRequest; \ No newline at end of file diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/RemoteRequest.java AndroidSource/frameworks/base/core/java/android/service/remote/RemoteRequest.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/RemoteRequest.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/remote/RemoteRequest.java 2016-02-22 19:54:33.000000000 +0900 @@ -0,0 +1,166 @@ +package android.service.remote; + +import java.io.Serializable; +import java.util.ArrayList; + +import android.os.Parcel; +import android.os.Parcelable; + +public class RemoteRequest implements Serializable, Parcelable +{ + private static final long serialVersionUID = 1L; + private String type; + private String method; + private ArrayList parameters; + + public RemoteRequest() + { + parameters = new ArrayList(); + } + + public RemoteRequest(String type, String method, ArrayList parameters) + { + this.type = type; + this.method = method; + this.parameters = parameters; + } + + public RemoteRequest(Parcel in) + { + this.type = in.readString(); + this.method = in.readString(); + //this.parameters = in.readArrayList(null); + //this.parameters = in.readArrayList(Object.class.getClassLoader()); + this.parameters = (ArrayList)in.readSerializable(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() + { + @Override + public RemoteRequest[] newArray(int size) + { + // TODO Auto-generated method stub + return new RemoteRequest[size]; + } + + @Override + public RemoteRequest createFromParcel(Parcel in) + { + // TODO Auto-generated method stub + return new RemoteRequest(in); + } + }; + + @Override + public int describeContents() + { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) + { + dest.writeString(this.type); + dest.writeString(this.method); + // dest.writeList(parameters); + dest.writeSerializable(this.parameters); + } + + public void set(String type, String method, ArrayList parameters) + { + this.type = type; + this.method = method; + this.parameters = parameters; + } + + public String getType() + { + return type; + } + + public String getMethod() + { + return method; + } + + public ArrayList getPara() + { + return parameters; + } + + public String toString() + { + return "type: " + type + "\nmethod: " + method + "\npara: " + parameters.toString(); + } + + public static class RemoteKeyEvent implements Serializable + { + private static final long serialVersionUID = 1L; + + private int action; + private int code; + private int source; + + public RemoteKeyEvent(int action, int code, int source) + { + this.action = action; + this.code = code; + this.source = source; + } + + public RemoteKeyEvent(Parcel in) + { + this.action = in.readInt(); + this.code = in.readInt(); + this.source = in.readInt(); + } + + /*public static final Parcelable.Creator CREATOR = new Parcelable.Creator() + { + @Override + public RemoteKeyEvent[] newArray(int size) + { + // TODO Auto-generated method stub + return new RemoteKeyEvent[size]; + } + + @Override + public RemoteKeyEvent createFromParcel(Parcel in) + { + // TODO Auto-generated method stub + return new RemoteKeyEvent(in); + } + }; + + @Override + public int describeContents() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + // TODO Auto-generated method stub + dest.writeInt(this.action); + dest.writeInt(this.code); + dest.writeInt(this.source); + }*/ + + public int getAction() + { + return action; + } + + public int getCode() + { + return code; + } + + public int getSource() + { + return source; + } + } + +} \ No newline at end of file diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/RemoteServiceManager.java AndroidSource/frameworks/base/core/java/android/service/remote/RemoteServiceManager.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/RemoteServiceManager.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/remote/RemoteServiceManager.java 2016-03-02 20:34:06.000000000 +0900 @@ -0,0 +1,319 @@ +package android.service.remote; + +import android.content.Context; +import android.location.Location; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.util.Log; + +public class RemoteServiceManager +{ + private final IRemoteService mService; + + public RemoteServiceManager(IRemoteService service) + { + mService = service; + } + + public RemoteServiceManager() + { + mService = IRemoteService.Stub.asInterface(ServiceManager.getService(Context.REMOTE_SERVICE)); + } + + public RemoteServiceManager(Context context) + { + // TODO Auto-generated constructor stub + mService = IRemoteService.Stub.asInterface(ServiceManager.getService(Context.REMOTE_SERVICE)); + } + + /*public RemoteRequestManager() + { + mService + }*/ + + public void startServer() + { + try + { + mService.startServer(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void stopServer() + { + try + { + mService.stopServer(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void setConfiguration() + { + try + { + mService.setConfiguration(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void setEnabled(boolean isEnabled) + { + try + { + mService.setEnabled(isEnabled); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void connectToServer(String ip) + { + try + { + mService.connectToServer(ip); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void disconnectToServer() + { + try + { + mService.disconnectToServer(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public boolean sendRequest(RemoteRequest request) + { + Log.d("RemoteRequestManager", "sendRequest!!!!"); + try + { + return mService.sendRequest(request); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return false; + } + + public void testOperation() + { + try + { + mService.testOperation(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void sendMusicData(int sampleSize, byte[] to_send, long presentationTime){ + try{ + mService.sendMusicData(sampleSize, to_send, presentationTime); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public void sendAllMusic(int sampleSize, byte[] to_send, long presentationTime){ + try{ + mService.sendMusicData(sampleSize, to_send, presentationTime); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public void sendAllrequest(RemoteRequest request){ + try{ + mService.sendAllrequest(request); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + /*public void sendLocation(Location location){ + try{ + mService.sendLocation(location); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + }*/ + + public void testVibrate() + { + // TODO Auto-generated method stub + try + { + mService.testVibrate(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void testMusic() + { + // TODO Auto-generated method stub + try + { + mService.testMusic(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void testVideo() + { + // TODO Auto-generated method stub + try + { + mService.testVideo(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void testTouch() + { + // TODO Auto-generated method stub + try + { + mService.testTouch(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void testKey() + { + // TODO Auto-generated method stub + try + { + mService.testKey(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void testSensor() + { + // TODO Auto-generated method stub + try + { + mService.testSensor(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void testLocation() + { + // TODO Auto-generated method stub + try + { + mService.testLocation(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void requestMotionEvents(){ + // TODO Auto-generated method stub + try + { + mService.requestMotionEvents(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void launchDummyApp(){ + try + { + mService.launchDummyApp(); + } + catch (RemoteException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void printServerIPs(){ + try{ + mService.printServerIPs(); + }catch (RemoteException e){ + e.printStackTrace(); + } + } + +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/SdPackage.java AndroidSource/frameworks/base/core/java/android/service/remote/SdPackage.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/SdPackage.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/remote/SdPackage.java 2015-10-27 11:41:12.000000000 +0900 @@ -0,0 +1,79 @@ +package android.service.remote; + +import java.io.Serializable; + + + +public class SdPackage implements Serializable{ + + private int sampleSize = 0; + private byte[] sampleData; + private long presentationTime = 0; + private String mime = "audio/mpeg"; + private int bitrate = 0; + private int channels = 0; + private int sampleRate = 0; + private long duration = 0; + private byte[] csd0; + /** + * + */ + private static final long serialVersionUID = 1L; + + public SdPackage(int sampleSize, byte[] sampleData, long presentationTime){ + this.sampleSize = sampleSize; + this.sampleData = sampleData; + this.presentationTime = presentationTime; + } + + public SdPackage(String _mime, int _bitrate, int _channels, int _sampleRate, long _duration, byte[] _csd0){ + this.mime = _mime; + this.bitrate = _bitrate; + this.channels = _channels; + this.sampleRate = _sampleRate; + this.duration = _duration; + this.csd0 = _csd0; + } + + public String getMime(){ + return this.mime; + } + + public int getBitrate(){ + return this.bitrate; + } + + public int getChannels(){ + return this.channels; + } + + public int getSampleRate(){ + return this.sampleRate; + } + + public int getSampleSize(){ + return this.sampleSize; + } + + public long getDuration(){ + return this.duration; + } + + public byte[] get_csd0(){ + return this.csd0; + } + + public byte[] getSampleData(){ + return this.sampleData; + } + + public long getPresentationTime(){ + return this.presentationTime; + } + + @Override + public String toString(){ + return this.sampleSize+" is sampleSize, " + this.sampleData + " is sampleData, " + this.presentationTime + " is prest. time"; + } + +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/vData.java AndroidSource/frameworks/base/core/java/android/service/remote/vData.java --- Original_4.4.4_r1/frameworks/base/core/java/android/service/remote/vData.java 1970-01-01 09:00:00.000000000 +0900 +++ AndroidSource/frameworks/base/core/java/android/service/remote/vData.java 2015-10-27 11:41:12.000000000 +0900 @@ -0,0 +1,112 @@ +package android.service.remote; + +import java.io.Serializable; + +import android.os.Parcel; +import android.os.Parcelable; + +public class vData implements Serializable{ + + private String mime = "video/avc"; + private int width = 0; + private int height = 0; + private byte[] csd0 = null; + private byte[] csd1 = null; + + public int sampleSize = 0; + public byte[] sampleData; + public long presentationTime = 0; + + private static final long serialVersionUID = 1L; + + /** + * + */ + public vData(){ + + } + + /** + * + */ + public vData(int _sampleSize, byte[] _sampleData, long _presentationTime){ + sampleSize = _sampleSize; + sampleData = _sampleData; + presentationTime = _presentationTime; + } + + + /** + * + */ + public void setMediaFormat(String _mime, int _width, int _height, byte[] _csd0, byte[] _csd1){ + mime = _mime; + width = _width; + height = _height; + csd0 = _csd0; + csd1 = _csd1; + } + + /** + * + */ + public int getSampleSize(){ + return sampleSize; + } + + /** + * + */ + public byte[] getSampleData(){ + return sampleData; + } + + /** + * + */ + public long getPresentationTime(){ + return presentationTime; + } + /** + * + */ + public String getMime(){ + return mime; + } + + /** + * + */ + public int getWidth(){ + return width; + } + + /** + * + */ + public int getHeight(){ + return height; + } + + /** + * + */ + public byte[] get_csd0(){ + return csd0; + } + + /** + * + */ + public byte[] get_csd1(){ + return csd1; + } + + + @Override + public String toString() { + return sampleSize + " is sampleSize, " + sampleData + + " is sampleData, " + presentationTime + " is prest. time"; + } + +} diff -urN Original_4.4.4_r1/frameworks/base/core/java/android/view/MotionEvent.java AndroidSource/frameworks/base/core/java/android/view/MotionEvent.java --- Original_4.4.4_r1/frameworks/base/core/java/android/view/MotionEvent.java 2016-01-29 15:12:27.459488000 +0900 +++ AndroidSource/frameworks/base/core/java/android/view/MotionEvent.java 2015-12-07 16:52:20.000000000 +0900 @@ -20,6 +20,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.os.SystemClock; +import android.util.Log; import android.util.SparseArray; /** @@ -321,6 +322,14 @@ */ public static final int ACTION_POINTER_INDEX_SHIFT = 8; + // ADDED BY JH + public static final int SOURCE_DEVICE_MASK = 0xff000000; + public static final int SOURCE_DEVICE_SHIFT = 24; + public static final int ACTION_POINTER_MASK = 0xffff; + // ADDED BY JH + + + /** * @deprecated Use {@link #ACTION_POINTER_INDEX_MASK} to retrieve the * data index associated with {@link #ACTION_POINTER_DOWN}. @@ -1314,6 +1323,9 @@ private int mNativePtr; private MotionEvent mNext; + + // ADDED BY JH + private int mTest; private static native int nativeInitialize(int nativePtr, int deviceId, int source, int action, int flags, int edgeFlags, @@ -1321,6 +1333,15 @@ float xOffset, float yOffset, float xPrecision, float yPrecision, long downTimeNanos, long eventTimeNanos, int pointerCount, PointerProperties[] pointerIds, PointerCoords[] pointerCoords); + + // ADDED BY JH + /*private static native int nativeInitialize(int nativePtr, + int deviceId, int source, int sourceDevice, int action, int flags, int edgeFlags, + int metaState, int buttonState, + float xOffset, float yOffset, float xPrecision, float yPrecision, + long downTimeNanos, long eventTimeNanos, + int pointerCount, PointerProperties[] pointerIds, PointerCoords[] pointerCoords);*/ + private static native int nativeCopy(int destNativePtr, int sourceNativePtr, boolean keepHistory); private static native void nativeDispose(int nativePtr); @@ -1368,6 +1389,10 @@ private static native int nativeReadFromParcel(int nativePtr, Parcel parcel); private static native void nativeWriteToParcel(int nativePtr, Parcel parcel); + + // ADDED BY JH + //private static native void nativeSetSourceDevice(int nativePtr, int sourceDevice); + //private static native int nativeGetSourceDevice(int nativePtr); private MotionEvent() { } @@ -1434,7 +1459,9 @@ int edgeFlags, int source, int flags) { MotionEvent ev = obtain(); ev.mNativePtr = nativeInitialize(ev.mNativePtr, - deviceId, source, action, flags, edgeFlags, metaState, buttonState, + deviceId, source, + //0, + action, flags, edgeFlags, metaState, buttonState, 0, 0, xPrecision, yPrecision, downTime * NS_PER_MS, eventTime * NS_PER_MS, pointerCount, pointerProperties, pointerCoords); @@ -1535,14 +1562,16 @@ pc[0].size = size; ev.mNativePtr = nativeInitialize(ev.mNativePtr, - deviceId, InputDevice.SOURCE_UNKNOWN, action, 0, edgeFlags, metaState, 0, + deviceId, InputDevice.SOURCE_UNKNOWN, + //0, + action, 0, edgeFlags, metaState, 0, 0, 0, xPrecision, yPrecision, downTime * NS_PER_MS, eventTime * NS_PER_MS, 1, pp, pc); return ev; } } - + /** * Create a new MotionEvent, filling in all of the basic values that * define the motion. @@ -1604,7 +1633,65 @@ return obtain(downTime, eventTime, action, x, y, 1.0f, 1.0f, metaState, 1.0f, 1.0f, 0, 0); } + + // ADDED BY JH + /*static public MotionEvent obtain(long downTime, long eventTime, int action, + float x, float y, int metaState, int source, int sourceDevice) { + + MotionEvent ev = obtain(); + + synchronized (gSharedTempLock) { + ensureSharedTempPointerCapacity(1); + final PointerProperties[] pp = gSharedTempPointerProperties; + pp[0].clear(); + pp[0].id = 0; + + final PointerCoords pc[] = gSharedTempPointerCoords; + pc[0].clear(); + pc[0].x = x; + pc[0].y = y; + pc[0].pressure = 1.0f; + pc[0].size = 1.0f; + Log.d("MOTIONEVENT", "sourceDevice: " + sourceDevice); + + ev.mNativePtr = nativeInitialize(ev.mNativePtr, + 0, source, sourceDevice, action, 0, 0, metaState, 0, + 0, 0, 1.0f, 1.0f, + downTime * NS_PER_MS, eventTime * NS_PER_MS, + 1, pp, pc); + + return ev; + } + }*/ + + /*static public MotionEvent obtain(long downTime, long eventTime, int action, + float x, float y, int metaState, int source, int test) { + + MotionEvent ev = obtain(); + synchronized (gSharedTempLock) { + ensureSharedTempPointerCapacity(1); + final PointerProperties[] pp = gSharedTempPointerProperties; + pp[0].clear(); + pp[0].id = 0; + + final PointerCoords pc[] = gSharedTempPointerCoords; + pc[0].clear(); + pc[0].x = x; + pc[0].y = y; + pc[0].pressure = 1.0f; + pc[0].size = 1.0f; + + ev.mNativePtr = nativeInitialize(ev.mNativePtr, + 0, action, source, 10, 0, metaState, 0, + 0, 0, 1.0f, 1.0f, + downTime * NS_PER_MS, eventTime * NS_PER_MS, + 1, pp, pc); + return ev; + } + }*/ + // ADDED BY JH + /** * Create a new MotionEvent, copying from an existing one. */ @@ -1689,6 +1776,22 @@ public final void setSource(int source) { nativeSetSource(mNativePtr, source); } + + // ADDED BY JH + /*public final void setSourceDevice(int sourceDevice) { + Log.d("MOTIONEVENT", "JAVAsourceDevice-set:" + sourceDevice); + nativeSetSourceDevice(mNativePtr, sourceDevice); + }*/ + + public final int getSourceDevice() { + //return nativeGetSourceDevice(mNativePtr); + //original +// return (nativeGetAction(mNativePtr) & SOURCE_DEVICE_MASK) >> SOURCE_DEVICE_SHIFT; + //original end + return (nativeGetMetaState(mNativePtr) & SOURCE_DEVICE_MASK) >> SOURCE_DEVICE_SHIFT; + } + + // ADDED BY JH /** * Return the kind of action being performed. @@ -1698,7 +1801,7 @@ * the combination of {@link #ACTION_POINTER_DOWN} with a shifted pointer index. */ public final int getAction() { - return nativeGetAction(mNativePtr); + return nativeGetAction(mNativePtr) & ACTION_POINTER_MASK; } /** @@ -2164,7 +2267,7 @@ * @see KeyEvent#getMetaState() */ public final int getMetaState() { - return nativeGetMetaState(mNativePtr); + return nativeGetMetaState(mNativePtr) & 0x00ffffff; } /** @@ -2866,6 +2969,7 @@ } ev.mNativePtr = nativeInitialize(ev.mNativePtr, nativeGetDeviceId(mNativePtr), nativeGetSource(mNativePtr), + //nativeGetSourceDevice(mNativePtr), nativeGetAction(mNativePtr), nativeGetFlags(mNativePtr), nativeGetEdgeFlags(mNativePtr), nativeGetMetaState(mNativePtr), nativeGetButtonState(mNativePtr), @@ -2959,6 +3063,7 @@ if (h == 0) { ev.mNativePtr = nativeInitialize(ev.mNativePtr, nativeGetDeviceId(mNativePtr), nativeGetSource(mNativePtr), + //nativeGetSourceDevice(mNativePtr), newAction, nativeGetFlags(mNativePtr), nativeGetEdgeFlags(mNativePtr), nativeGetMetaState(mNativePtr), nativeGetButtonState(mNativePtr), diff -urN Original_4.4.4_r1/frameworks/base/core/jni/android_hardware_SensorManager.cpp AndroidSource/frameworks/base/core/jni/android_hardware_SensorManager.cpp --- Original_4.4.4_r1/frameworks/base/core/jni/android_hardware_SensorManager.cpp 2016-01-29 15:12:27.507488000 +0900 +++ AndroidSource/frameworks/base/core/jni/android_hardware_SensorManager.cpp 2015-10-19 13:59:58.000000000 +0900 @@ -105,6 +105,7 @@ return size_t(next) < count ? next : 0; } + //---------------------------------------------------------------------------- class Receiver : public LooperCallback { @@ -170,7 +171,8 @@ buffer[i].sensor, mScratch, buffer[i].vector.status, - buffer[i].timestamp); + buffer[i].timestamp, + buffer[i].reserved0); } if (env->ExceptionCheck()) { @@ -284,11 +286,10 @@ GET_METHOD_ID(gBaseEventQueueClassInfo.dispatchSensorEvent, gBaseEventQueueClassInfo.clazz, - "dispatchSensorEvent", "(I[FIJ)V"); + "dispatchSensorEvent", "(I[FIJI)V"); GET_METHOD_ID(gBaseEventQueueClassInfo.dispatchFlushCompleteEvent, gBaseEventQueueClassInfo.clazz, "dispatchFlushCompleteEvent", "(I)V"); - return 0; } diff -urN Original_4.4.4_r1/frameworks/base/core/jni/android_view_InputEventSender.cpp AndroidSource/frameworks/base/core/jni/android_view_InputEventSender.cpp --- Original_4.4.4_r1/frameworks/base/core/jni/android_view_InputEventSender.cpp 2016-01-29 15:12:27.515488000 +0900 +++ AndroidSource/frameworks/base/core/jni/android_view_InputEventSender.cpp 2015-08-04 09:32:44.000000000 +0900 @@ -134,7 +134,9 @@ for (size_t i = 0; i <= event->getHistorySize(); i++) { publishedSeq = mNextPublishedSeq++; status_t status = mInputPublisher.publishMotionEvent(publishedSeq, - event->getDeviceId(), event->getSource(), event->getAction(), event->getFlags(), + event->getDeviceId(), event->getSource(), + //event->getSourceDevice(), + event->getAction(), event->getFlags(), event->getEdgeFlags(), event->getMetaState(), event->getButtonState(), event->getXOffset(), event->getYOffset(), event->getXPrecision(), event->getYPrecision(), diff -urN Original_4.4.4_r1/frameworks/base/core/jni/android_view_MotionEvent.cpp AndroidSource/frameworks/base/core/jni/android_view_MotionEvent.cpp --- Original_4.4.4_r1/frameworks/base/core/jni/android_view_MotionEvent.cpp 2016-01-29 15:12:27.515488000 +0900 +++ AndroidSource/frameworks/base/core/jni/android_view_MotionEvent.cpp 2015-08-04 09:32:18.000000000 +0900 @@ -386,6 +386,60 @@ return 0; } +// ADDED BY JH +/*static jint android_view_MotionEvent_nativeInitialize(JNIEnv* env, jclass clazz, + jint nativePtr, + jint deviceId, jint source, jint sourceDevice, jint action, jint flags, jint edgeFlags, + jint metaState, jint buttonState, + jfloat xOffset, jfloat yOffset, jfloat xPrecision, jfloat yPrecision, + jlong downTimeNanos, jlong eventTimeNanos, + jint pointerCount, jobjectArray pointerPropertiesObjArray, + jobjectArray pointerCoordsObjArray) { + if (!validatePointerCount(env, pointerCount) + || !validatePointerPropertiesArray(env, pointerPropertiesObjArray, pointerCount) + || !validatePointerCoordsObjArray(env, pointerCoordsObjArray, pointerCount)) { + return 0; + } + + MotionEvent* event = reinterpret_cast(nativePtr); + if (!event) { + event = new MotionEvent(); + } + + PointerProperties pointerProperties[pointerCount]; + PointerCoords rawPointerCoords[pointerCount]; + + for (jint i = 0; i < pointerCount; i++) { + jobject pointerPropertiesObj = env->GetObjectArrayElement(pointerPropertiesObjArray, i); + if (!pointerPropertiesObj) { + goto Error; + } + pointerPropertiesToNative(env, pointerPropertiesObj, &pointerProperties[i]); + env->DeleteLocalRef(pointerPropertiesObj); + + jobject pointerCoordsObj = env->GetObjectArrayElement(pointerCoordsObjArray, i); + if (!pointerCoordsObj) { + jniThrowNullPointerException(env, "pointerCoords"); + goto Error; + } + pointerCoordsToNative(env, pointerCoordsObj, xOffset, yOffset, &rawPointerCoords[i]); + env->DeleteLocalRef(pointerCoordsObj); + } + + ALOGD("JNI-nativeinit: %d", sourceDevice); + event->initialize(deviceId, source, sourceDevice, action, flags, edgeFlags, metaState, buttonState, + xOffset, yOffset, xPrecision, yPrecision, + downTimeNanos, eventTimeNanos, pointerCount, pointerProperties, rawPointerCoords); + + return reinterpret_cast(event); + +Error: + if (!nativePtr) { + delete event; + } + return 0; +}*/ + static jint android_view_MotionEvent_nativeCopy(JNIEnv* env, jclass clazz, jint destNativePtr, jint sourceNativePtr, jboolean keepHistory) { MotionEvent* destEvent = reinterpret_cast(destNativePtr); @@ -453,6 +507,22 @@ return event->getAction(); } +// ADDED BY JH +/*static jint android_view_MotionEvent_nativeGetSourceDevice(JNIEnv* env, jclass clazz, + jint nativePtr) { + MotionEvent* event = reinterpret_cast(nativePtr); + ALOGD("JNIsourceDevice-get: %d", event->getSourceDevice()); + return event->getSourceDevice(); +} + +static void android_view_MotionEvent_nativeSetSourceDevice(JNIEnv* env, jclass clazz, + jint nativePtr, jint sourceDevice) { + MotionEvent* event = reinterpret_cast(nativePtr); + event->setSourceDevice(sourceDevice); + ALOGD("JNIsourceDevice-set: %d", sourceDevice); +}*/ +// ADDED BY JH + static void android_view_MotionEvent_nativeSetAction(JNIEnv* env, jclass clazz, jint nativePtr, jint action) { MotionEvent* event = reinterpret_cast(nativePtr); @@ -732,6 +802,10 @@ "(IIIIIIIIFFFFJJI[Landroid/view/MotionEvent$PointerProperties;" "[Landroid/view/MotionEvent$PointerCoords;)I", (void*)android_view_MotionEvent_nativeInitialize }, + /*{ "nativeInitialize", + "(IIIIIIIIIFFFFJJI[Landroid/view/MotionEvent$PointerProperties;" + "[Landroid/view/MotionEvent$PointerCoords;)I", + (void*)android_view_MotionEvent_nativeInitialize },*/ { "nativeCopy", "(IIZ)I", (void*)android_view_MotionEvent_nativeCopy }, @@ -750,6 +824,12 @@ { "nativeSetSource", "(II)I", (void*)android_view_MotionEvent_nativeSetSource }, +/* { "nativeGetSourceDevice", + "(I)I", + (void*)android_view_MotionEvent_nativeGetSourceDevice }, + { "nativeSetSourceDevice", + "(II)V", + (void*)android_view_MotionEvent_nativeSetSourceDevice },*/ { "nativeGetAction", "(I)I", (void*)android_view_MotionEvent_nativeGetAction }, diff -urN Original_4.4.4_r1/frameworks/base/core/res/res/values/config.xml AndroidSource/frameworks/base/core/res/res/values/config.xml --- Original_4.4.4_r1/frameworks/base/core/res/res/values/config.xml 2016-01-29 15:12:28.427488000 +0900 +++ AndroidSource/frameworks/base/core/res/res/values/config.xml 2015-11-25 17:06:03.000000000 +0900 @@ -655,7 +655,7 @@ - 10 + 1800