tip: how to vibrate - Windows Mobile Development and Hacking General

Code:
#include <windows.h>
#include <nled.h>
// from the platform builder <Pwinuser.h>
extern "C" {
BOOL WINAPI NLedGetDeviceInfo( UINT nInfoId, void *pOutput );
BOOL WINAPI NLedSetDevice( UINT nDeviceId, void *pInput );
};
void LedOn(int id)
{
NLED_SETTINGS_INFO settings;
settings.LedNum= id;
settings.OffOnBlink= 1;
NLedSetDevice(NLED_SETTINGS_INFO_ID, &settings);
}
void LedOff(int id)
{
NLED_SETTINGS_INFO settings;
settings.LedNum= id;
settings.OffOnBlink= 0;
NLedSetDevice(NLED_SETTINGS_INFO_ID, &settings);
}
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
for (int i=0 ; i<10 ; i++)
{
LedOn(1);
Sleep(400);
LedOff(1);
Sleep(200);
}
return 0;
}
led '0' is the radio led
led '1' is the vibrator

Thanks for this tip!
I was just looking for a way to make the phone vibrate. We're doing applications for the deaf community so vibration is absolutely necessary!
/Christer

With settings.LedNum=0 i can do the things with the Radio LED.
But my MDA 2 has a third LED for Bluetooth. And when i query Device Info i get a count of two(starting at 0). But i canĀ“t do something with the 3rd LED. Somebody knows why?
I also would like to know hot the let the first LED flash green and not Red?

Ok this thread is ancient, but I am resurrecting it to ask a relevant question. This is the method that I am currently using to vibrate. The problem is that when the cpu is being used for other tasks, this will tend to make it vibrate longer than expected. For instance if I switch screen orientation and they try this the vibration will be longer because other threads are doing some processing. The following:
LedOn(1);
Sleep(400);
LedOff(1);
is not a reliable method because if the CPU is busy more than 400ms may elapse between the two calls. Sometimes a lot more. Is it possible to use the blink mode for the vibrator, as in using 2 for the OffOnBlink value as in this msdn article?
http://msdn.microsoft.com/en-us/library/ms905326.aspx
So far all I can get it to do is vibrating without stopping. Any help would be appreciated. Thanks.

JKingDev said:
Ok this thread is ancient, but I am resurrecting it to ask a relevant question. This is the method that I am currently using to vibrate. The problem is that when the cpu is being used for other tasks, this will tend to make it vibrate longer than expected. For instance if I switch screen orientation and they try this the vibration will be longer because other threads are doing some processing. The following:
LedOn(1);
Sleep(400);
LedOff(1);
is not a reliable method because if the CPU is busy more than 400ms may elapse between the two calls. Sometimes a lot more. Is it possible to use the blink mode for the vibrator, as in using 2 for the OffOnBlink value as in this msdn article?
http://msdn.microsoft.com/en-us/library/ms905326.aspx
So far all I can get it to do is vibrating without stopping. Any help would be appreciated. Thanks.
Click to expand...
Click to collapse
actually putting the thread to sleep is kinda not recommended, i usually create another thread to vibrate and set it to sleep then stop the vibration and exit the thread.
maybe i can create a class for that, but it will be a C# class, not C++

anaadoul said:
actually putting the thread to sleep is kinda not recommended, i usually create another thread to vibrate and set it to sleep then stop the vibration and exit the thread.
maybe i can create a class for that, but it will be a C# class, not C++
Click to expand...
Click to collapse
I am not exactly sure what you mean by this. Do you do the exact same thing but all in another thread? Or do you start the vibration, create a new thread that just sleeps then stop the vibration when the thread returns? I got even worse results when trying it all in another thread.
Is there no other way to do this than start vibration then stop it after sleeping? There is no way to give it the duration you want?

Related

Simulate Button Click

Hi,
I am trying to simulate a PictureBox.Click event. I have searched these forums and the ones on MSDN with many different combinations of search terms.
However I cannot find anything!
Basically what I am trying to achieve is to fire the picturebox's click event from within my code. What I have read so far seems to indicate that I need to make a call to SendMessage (COM interop?) to actually make windows perform the click.
This is for the compact framework version 1.0.
Any help you can give would be great because this is all very new to me, I'm a web application developer by trade so i'm a fish out of water on this one!
OK, the other method that I am investigating is the use of the mouse_event as demonstrated in this article by Daniel Moth.
However I am struggling to find the namespace Win32Api anywhere in the framework so I'm struggling with that also.
*Update*
I have been able to simulate a click using mouse_event in a call to the coredll using the following code:
Code:
[DllImport("coredll")]
static extern bool SetCursorPos(int X, int Y);
[DllImport("coredll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);
[Flags]
public enum MouseEventFlags
{
LEFTDOWN = 0x00000002,
LEFTUP = 0x00000004,
MIDDLEDOWN = 0x00000020,
MIDDLEUP = 0x00000040,
MOVE = 0x00000001,
ABSOLUTE = 0x00008000,
RIGHTDOWN = 0x00000008,
RIGHTUP = 0x00000010
}
bool tempVal = SetCursorPos(x, y);
mouse_event((uint)MouseEventFlags.LEFTDOWN, 0, 0, 0, 0);
mouse_event((uint)MouseEventFlags.LEFTUP, 0, 0, 0, 0);
however I have one outstanding problem (that I know of!).
I am struggling to capture the corrext X and Y co-ordinates of the control. I have tried many different methods and they all return values of 0 for both axis.
How do you guys do it?
Many Thanks
I haven't answered till now since I don't know .NET
But since you found your way to using native APIs I think I can help you.
This is how I would do it in C/C++:
Code:
RECT wndRect; //this is a structure that contains window top, left, bottom and right coordinates.
GetWindowRect(FindWind(L"[I]window class[/I]", L"[I]window name[/I]"), &wndRect);
x = wndRect.left + 1; //add 1 to window position to make sure the click is inside
y = wndRect.top + 1;
GetWindowRect returns the window position in screen coordinates for top left and bottom right corners.
For FindWindow to work you need to know the class and name of the window you want to find. You can find them using a utility called SPY++ which comes with any Microsoft C++ compiler.
The class is window type (so it will probably be something like 'PictureBox' or 'Image') and window name is most likely blank.
Hope this helps.
Thanks fo your help
I don't know if your code would have done the trick or not but I managed to work my way through the different class definitions to find what i needed.
Code:
int x = selectedButton.PointToScreen(selectedButton.Bounds.Location).X + 2;
int y = selectedButton.PointToScreen(selectedButton.Bounds.Location).Y + 2;
This still doesn't work but I really don't have time to work out why, all I know is that the call to SetCursorPos() returns false. I know the mouse_event code works because if I position the cursor over the Start button it opens the menu.
Time is of an essence so for now I'm just going to have to drop this and pray that I have time to finish this when towards the end of my project.
/me thinks writing my first Mobile 5.0 application in 4 days (I'm a web application developer by trade) was bad planning on the management's fault anyway
Thanks for your input though
use this method signature:
[DllImport("coredll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
int instead of uint or long.
For me it worked.

[REQ]Remapping Camera shot key to volume button?

Hi there,
First of all I tried searching on google and also in this forum itself but I cant find anything related and so i decided to create a new thread on this.
If there anyway via tweaking the registry that i can make use of the volume key on the blackstone to take pictures instead of using the touchscreen? I believe this is possible
I find taking picture using a touchscreen is really difficult.
I read from http://wiki.xda-developers.com/index.php?pagename=HTC_Blackstone_Overview that this is possible by remapping the volume rocker.
Does any know how?
Will anyone be able to help?
I'm requesting this also. HTC should have made an option for us to choose for this from the beginning.
Request also here!
Sorry, I added this "remap volume rocker Solution" because I thought it was possible, but I actually didn't try it. So let's keep this thread to find a way to do it.
Remapping keys is through AE Button Plus or MobileMagic.
Right now we only have the choice of "touch" or "touch and hold" the virtual on-screen button to "auto-focus + shot".
We need to find out if there is any keyboard shortcut associated to that function.
I tried to use the "enter key" fonction remaped to Volume Up with AE Button Plus, but it didn't work.
Does the HTC Touch Pro have HTC's Camera application? maybe they know a keyboard shortcut? Let's ask.
I guess it will be possible.... just that we need the experts here to show us how to...
[APP] CameraButton
To solve this problem. I thought of a very simple solution:
Instead of us clicking the on-screen camera button, we need an application "CameraButton", which will click on the screen for us, then we just need to map a hardware button to that application.
Simple isn't it?
So here is the C# code for the CameraButton application:
Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace CameraButton
{
class Program
{
[System.Runtime.InteropServices.DllImport("coredll.DLL", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[System.Runtime.InteropServices.DllImport("coredll.DLL", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
static extern bool SetForegroundWindow(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("coredll.dll")]
static extern bool SetCursorPos(int X, int Y);
[System.Runtime.InteropServices.DllImport("coredll.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);
[Flags]
public enum MouseEventFlags
{
LEFTDOWN = 0x00000002,
LEFTUP = 0x00000004,
MIDDLEDOWN = 0x00000020,
MIDDLEUP = 0x00000040,
MOVE = 0x00000001,
ABSOLUTE = 0x00008000,
RIGHTDOWN = 0x00000008,
RIGHTUP = 0x00000010
}
static void Main(string[] args)
{
IntPtr cameraHandle;
cameraHandle = FindWindow(null, "Camera");//search camera app
if (cameraHandle == IntPtr.Zero)// cannot find it then launch it
{
Process cam = Process.Start(new ProcessStartInfo("Camera.exe", ""));
//cameraHandle = cam.MainWindowHandle;
}
else // can find it then set position then click
{
//SetForegroundWindow(cameraHandle);// we assume we already have the focus on the camera app
SetCursorPos(240, 750 );//set position to the on-screen camera button
mouse_event((uint)MouseEventFlags.LEFTDOWN, 0, 0, 0, 0);
mouse_event((uint)MouseEventFlags.LEFTUP, 0, 0, 0, 0);
}
}
}
}
Why do I give the code rather than the binary?
Because unfortunately this code doesn't work (yet).
Let me explain a bit more:
This application doesn't need to keep running in the background, it just can do 2 things. Start the camera app if it's not already started, or just click at a specifically chosen position.
If I set the position to (0,0), my program will click at the upper-left corner of the screen, and hit the start button, therefore the start menu appears.
However if I try to click on the camera application, it doesn't have any effect!
Actually if I click somewhere else than the on-screen camera button, it should still react to the click: the little cross should move to the clicked place as part of the Touch Focus feature of HTC's camera app.
But here again, nothing happen.
Since it's my first app on WiMo, I might have done a mistake somewhere, but I can't see where.
Any XDA-developer can spot what's wrong with my code?
please see http://forum.xda-developers.com/showthread.php?t=471321
The Problem is the HTC Application, it blocks any keydown event
I did it Application released soon!
http://www.scilor.com/leocameraanykey.html

WM Tactile/Haptic feedback API

Does anyone know how to invoke the tactile feedback from an app. Specifically, I am writing my own keyboard but i would like to generate the little pulses when my virtual keys are pressed. I cant find anything on how to actually do this. presumably it's just one system call.
I have a HTC touch pro 2, so i want to get it working on this at first.
thanks for any help,
You just have to vibrate the phone for a very small time, around 20-50ms.
I don't think there's an API for "haptic feedback", it's just a vibration.
It is just touch-vibrate like you said
Just a tip:
The vibration motor is like the led on your device to handle.
Also the vibration/led id is different on different devices!
Hi,
That's what i was thinking too. I'm going to try the WM Vibrate/VibrateGetDeviceCaps/VibrateStop functions to see if they will do it.
If anyone knows if there's more too it than this, please advise.
thanks,
Unfortunately the Vibrate API does not work. These smartphones are actually pocketPC which doesnt support the API.
Intead i use the NLED interface with led=1. This seems to work to create a basic pulse, but i dont know of any way to adjust the strength of the pulse or even if that's possible.
this is what im doing:
Code:
static void LedOn(int id)
{
NLED_SETTINGS_INFO settings;
settings.LedNum= id;
settings.OffOnBlink= 1;
NLedSetDevice(NLED_SETTINGS_INFO_ID, &settings);
}
static void LedOff(int id)
{
NLED_SETTINGS_INFO settings;
settings.LedNum= id;
settings.OffOnBlink= 0;
NLedSetDevice(NLED_SETTINGS_INFO_ID, &settings);
}
static void key_hepatic_feedback()
{
LedOn(1);
Sleep(20);
LedOff(1);
}
No, the strength isn't adjustable. You can only control the duration.

[SOLVED] How do I restart manila in C# or C++?

Hi.
Can someone tell me how to restart manila programatically? I'm writing an app that requires it to restart in order to show some changes and am struggling with this.
I thought it would be a simple case of getting a handle, closing the process and then running manila.exe again, but this doesn't want to work.
Any advice would be appreciated.
Solved!
See this post...
http://forum.xda-developers.com/showpost.php?p=5627550&postcount=13
Hi
You can try TFDetacher :
http://www.codeplex.com/TFDetacher
Sorry if I don't understand your question, I'm french
Good Luck
You could use MichaRefresh too.
http://forum.xda-developers.com/showthread.php?t=583034
simply mortscript
Code:
regWriteDword HKLM, Software\Microsoft\Today\Items\HTC Sense, Enabled, 0
RedrawToday
whatever
regWriteDword HKLM, Software\Microsoft\Today\Items\HTC Sense, Enabled, 1
RedrawToday
Thanks for the answers guys, but I'm trying to do this in an app that I'm writing, so the suggestions for apps are unfortunately no good for me.
bgumble - the registry entry changes are fine, but I don't know what MortScript actually does when you use the "RedrawToday" command. I won't be using MortScript (my app is being developed in C#), so I'm 1/2 way there now, thanks
Can anyone point me in the right direction with this?
johncmolyneux said:
Thanks for the answers guys, but I'm trying to do this in an app that I'm writing, so the suggestions for apps are unfortunately no good for me.
bgumble - the registry entry changes are fine, but I don't know what MortScript actually does when you use the "RedrawToday" command. I won't be using MortScript (my app is being developed in C#), so I'm 1/2 way there now, thanks
Can anyone point me in the right direction with this?
Click to expand...
Click to collapse
..how about kill manila.exe?
cyron_at said:
..how about kill manila.exe?
Click to expand...
Click to collapse
That was my first thought, and it seemed like the most likely thing, but it doesn't work. First off, I couldn't terminate the process in C#, so I tried it with dotfred's task manager. It doesn't seem to want to terminate at all. It still appears to be running, but then the desktop is screwed, as if it's not being redrawn. Running manila.exe afterwards just doesn't help and you need to restart the device.
Any advice?
Might be some goodies here, don't have time to test I'm afraid : http://msdn.microsoft.com/en-us/library/bb416484.aspx
Dave
if you have mortscript use this
DaveShaw said:
Might be some goodies here, don't have time to test I'm afraid : http://msdn.microsoft.com/en-us/library/bb416484.aspx
Dave
Click to expand...
Click to collapse
Thanks Dave. It doesn't help, but it's an interesting read nonetheless
bnm7bnm said:
if you have mortscript use this
Click to expand...
Click to collapse
Thanks, but I'm doing this in C# and don't want to require the end user to have any extra software installed.
bgumble said:
simply mortscript
Code:
regWriteDword HKLM, Software\Microsoft\Today\Items\HTC Sense, Enabled, 0
RedrawToday
whatever
regWriteDword HKLM, Software\Microsoft\Today\Items\HTC Sense, Enabled, 1
RedrawToday
Click to expand...
Click to collapse
I haven't tested this with Manila but instead of RedrawToday the following call might be good:
PostMessage:GetDesktopWindow(), WM_WININICHANGE, 0xF2, 0);
RAMMANN said:
I haven't tested this with Manila but instead of RedrawToday the following call might be good:
PostMessage:GetDesktopWindow(), WM_WININICHANGE, 0xF2, 0);
Click to expand...
Click to collapse
Thanks RAMMANN - I'll give that a try and let you know.
BIG THANKS to bgumble, RAMMANN and MichelDiamond. I'm putting the code here for both my future reference and for anyone who stumbles across this whilst looking for the same solution...
Code:
using Microsoft.Win32;
using System.Runtime.InteropServices;
public const int HWND_BROADCAST = 0xffff;
public const int WM_WININICHANGE = 0x001A;
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("coredll.dll", SetLastError = true)]
static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private static void RestartManila()
{
RegistryKey key = Registry.LocalMachine.OpenSubKey
("Software\\Microsoft\\Today\\Items\\HTC Sense", true);
key.SetValue("Enabled", 0);
PostMessage((IntPtr)HWND_BROADCAST, WM_WININICHANGE, (IntPtr)0xF2, (IntPtr)0);
// This is required or manila is enabled before it's fully disabled,
// so doesn't restart
System.Threading.Thread.Sleep(1000);
key.SetValue("Enabled", 1);
PostMessage((IntPtr)HWND_BROADCAST, WM_WININICHANGE, (IntPtr)0xF2, (IntPtr)0);
}
johncmolyneux said:
BIG THANKS to bgumble, RAMMANN and MichelDiamond. I'm putting the code here for both my future reference and for anyone who stumbles across this whilst looking for the same solution...
Code:
using Microsoft.Win32;
using System.Runtime.InteropServices;
public const int HWND_BROADCAST = 0xffff;
public const int WM_WININICHANGE = 0x001A;
[DllImport("coredll.dll")]
private static extern int SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam);
private static void RestartManila()
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(
"Software\\Microsoft\\Today\\Items\\HTC Sense", true);
key.SetValue("Enabled", 0);
SendMessage((IntPtr)HWND_BROADCAST, WM_WININICHANGE, 0xF2, 0);
// This is required or manila is enabled before it's fully disabled,
// so doesn't restart
System.Threading.Thread.Sleep(1000);
key.SetValue("Enabled", 1);
SendMessage((IntPtr)HWND_BROADCAST, WM_WININICHANGE, 0xF2, 0);
}
Click to expand...
Click to collapse
I'd reccommend using PostMessage instead of SendMessage.
I wrote the WeatherCityEditor that is used for Sense 2.1 and Sense 2.5.
Joe Wilcox sent me code very similar to this to Stop and Start Touch Flo 3D. He wrote the app that was used with Manila 2.0 and earlier.
When Sense came along, I tried just changing the TouchFLO 3D part to HTC Sense like what is posted.
Sometimes, it workded great, but some users reported hangs on start. I did not reproduce immediately, but eventually it started happening for me too. Very rarely right after a soft reset, but after leaving the phone alone for hours.
When it would hang, it might hang for up to 5 minutes.
Switching to Post message, and adding a 1 or 2 second delay took care of it.
SendMessage waits for things to be processed. PostMessage does not wait.
JVH3 said:
Sometimes, it workded great, but some users reported hangs on start. I did not reproduce immediately, but eventually it started happening for me too. Very rarely right after a soft reset, but after leaving the phone alone for hours.
When it would hang, it might hang for up to 5 minutes.
Switching to Post message, and adding a 1 or 2 second delay took care of it.
SendMessage waits for things to be processed. PostMessage does not wait.
Click to expand...
Click to collapse
Thanks for the advice mate. I was aware of the difference between the 2 methods but didn't realise that it could cause a problem. I chose to use SendMessage because it waits for a response, thinking that it may negate the need for the sleep inbetween the 2 calls, but if you've experienced it causing problems as you described then I'll definitely use PostMessage instead!
Thanks mate

MotionEvent.ACTION_CANCEL is blocking subsequent ACTION_UP on my button

Hey guys,
I am not getting any response on Stack Overflow so I thought I would try here.
At this point I am suspicious that it is a Samsung device specific problem. A very basic app with just a single button produces the same issue on my S4 development device.
Here is me SO question:
I have a button on one of my fragments, that sits inside a relative layout.
It's a rather large button, and when I fat finger it I get a ACTION_CANCEL motion event rather than ACTION_DOWN (it works perfectly fine with finger tips). This prevents it from registering the subsequent ACTION_UP (I assume the view's parent is taking over). I tried using the requestDisallowInterceptTouchEvent() method on the parent, to no avail.
Here is my onTouch implementation:
Code:
@Override
public boolean onTouch(View view, MotionEvent event) {
//debugging
Log.v("TOUCH EVENT", event.toString());
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
mButton.getParent().requestDisallowInterceptTouchEvent(true);
//Do stuff...
return true;
} else if (action == MotionEvent.ACTION_UP) {
//Do other stuff...
return true;
} else if (action == MotionEvent.ACTION_CANCEL){
return false;
//Toast.makeText(context, "Your thumb is too fat.", Toast.LENGTH_SHORT).show();
}
return false;
}
Note that the button also uses custom background resources. I start an AsyncTask when the button is pressed and the background changes based on the progress of that task. I'm not sure if that has anything to do with the problem or not.
EDIT: I walked all the way up the View hierarchy to ViewRootImpl, and still no luck in calling requestDisallowInterceptTouchEvent() on it. Weird thing is this shows in the log when my button sticks:
Code:
08-26 11:06:15.287: D/ViewRootImpl(5428): [ViewRootImpl] action cancel - 1, s:31 s(atmel):-1.0 eccen:1.3333334
So obviously it seems that the action is either being cancelled before it even gets inside the ViewRootImpl or right after. How is this even possible?
Update: Still no progress on this... anyone?
masterjeff said:
Hey guys,
I am not getting any response on Stack Overflow so I thought I would try here.
At this point I am suspicious that it is a Samsung device specific problem. A very basic app with just a single button produces the same issue on my S4 development device.
Here is me SO question:
I have a button on one of my fragments, that sits inside a relative layout.
It's a rather large button, and when I fat finger it I get a ACTION_CANCEL motion event rather than ACTION_DOWN (it works perfectly fine with finger tips). This prevents it from registering the subsequent ACTION_UP (I assume the view's parent is taking over). I tried using the requestDisallowInterceptTouchEvent() method on the parent, to no avail.
Here is my onTouch implementation:
Code:
@Override
public boolean onTouch(View view, MotionEvent event) {
//debugging
Log.v("TOUCH EVENT", event.toString());
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
mButton.getParent().requestDisallowInterceptTouchEvent(true);
//Do stuff...
return true;
} else if (action == MotionEvent.ACTION_UP) {
//Do other stuff...
return true;
} else if (action == MotionEvent.ACTION_CANCEL){
return false;
//Toast.makeText(context, "Your thumb is too fat.", Toast.LENGTH_SHORT).show();
}
return false;
}
Note that the button also uses custom background resources. I start an AsyncTask when the button is pressed and the background changes based on the progress of that task. I'm not sure if that has anything to do with the problem or not.
EDIT: I walked all the way up the View hierarchy to ViewRootImpl, and still no luck in calling requestDisallowInterceptTouchEvent() on it. Weird thing is this shows in the log when my button sticks:
Code:
08-26 11:06:15.287: D/ViewRootImpl(5428): [ViewRootImpl] action cancel - 1, s:31 s(atmel):-1.0 eccen:1.3333334
So obviously it seems that the action is either being cancelled before it even gets inside the ViewRootImpl or right after. How is this even possible?
Update: Still no progress on this... anyone?
Click to expand...
Click to collapse
Mmmh strange problem you've got there... Just an idea, maybe try to always return true in your onTouchEvent() method since you may be losing the event when an ACTION_MOVE event comes up and you return false. Other than that, could you show us your layout file? I doubt the change in background color has any effect on this, but it could be that some part of your layout is causing this.
SimplicityApks said:
Mmmh strange problem you've got there... Just an idea, maybe try to always return true in your onTouchEvent() method since you may be losing the event when an ACTION_MOVE event comes up and you return false. Other than that, could you show us your layout file? I doubt the change in background color has any effect on this, but it could be that some part of your layout is causing this.
Click to expand...
Click to collapse
Does anyone have a solution to this yet? More specifically, I think it's the Samsung's own implementation of ViewRootImpl that is causing this problem. I've been trying to figure out for a long time how to either pre-empt ViewRootImpl to intercept MotionEvents, or completely override ViewRootImpl. I found no success in either of these.
I also thought about reading from /dev/input/eventX directly, but this isn't feasible since it requires the phone to be rooted first. For myself it's ok, but if I'm writing an app for other devices that's not a solution.
Can someone from Samsung help?

Categories

Resources