yashsingh1/xdaforums huggingface dataset:
[Android Software/Hacking General [Developers Only]] modchen:
Hi, I'm currently stucked here :

10-02 10:25:52.427 E/AndroidRuntime( 2732): FATAL EXCEPTION: main
10-02 10:25:52.427 E/AndroidRuntime( 2732): java.lang.UnsatisfiedLinkError: Initialize
10-02 10:25:52.427 E/AndroidRuntime( 2732): at com.sec.android.jni.player.DualTVPlayer.Initialize(Native Method)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at com.samsung.smartview.mw.DualViewMWEvent.createPlayerHandler(DualViewMWEvent.java:41)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at com.samsung.smartview.DualViewActivity.createMWInstance(DualViewActivity.java:154)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at com.samsung.smartview.DualViewActivity.onCreate(DualViewActivity.java:87)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at android.app.ActivityThread.access$1500(ActivityThread.java:135)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at android.os.Handler.dispatchMessage(Handler.java:99)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at android.os.Looper.loop(Looper.java:150)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at android.app.ActivityThread.main(ActivityThread.java:4385)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at java.lang.reflect.Method.invokeNative(Native Method)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at java.lang.reflect.Method.invoke(Method.java:507)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
10-02 10:25:52.427 E/AndroidRuntime( 2732): at dalvik.system.NativeStart.main(Native Method)
10-02 10:25:52.437 W/ActivityManager( 1721): Force finishing activity com.samsung.smartview/.DualViewActivity
10-02 10:25:52.437 W/ActivityManager( 1721): Force finishing activity com.samsung.smartview/com.samsung.remoteTV.presentation.Main

It seems, the app is using some native libraries, unfortunately until now, I wasn't able to find out, which implements this native method.

I found also some interesting codelines and the corresponding libs in the samsung firmware, copied them to my phone and rebooted, but it didn't help

static
{
System.loadLibrary("tvout_jni");
}

located in android.hardware.TvOut

libtvoutcec.so
libtvoutddc.so
libtvoutedid.so
libtvoutfimc.so
libtvoutfimg.so
libtvouthdmi.so
libtvout_jni.so
libtvoutservice.so
libtvout.so

I also fear, even if I'm able to find the right library, it won't run on my HTC, as its native code :(
[Android Software/Hacking General [Developers Only]] mooooooa:
A little feedback:

I have flashed the zip file, and then installed the 2.3.6.apk. Nothing different than the usual Remote App. Neither Dual View or the Channel tab was visible.

Today i installed the new v2.4.0 of Smart View, and the Channel tab is now visible, although it's empty. But i have attached the apk here, in case it's usefull.
[Android Software/Hacking General [Developers Only]] Dblfstr:
isSuport2ndTV() called; result is false

D/TvRemoconApiWrapper==(30635): isConnect() called true
D/RemoteController==(30623): isConnect() called true
D/enableTestingModels(30623): current model is: TV_US_1060_BBY_Model
D/RemoteController==(30623): trying to send MSG_IS_SUPPORT_2NDTV
D/MessengerService==(30635): MSG_IS_SUPPORT_2NDTV, size:
I/native (30635): Java_com_sec_android_app_qwertyremocon_rccore_TvRemoconApi_Ge
tSavedServerInfo
D/TvRemoconApiWrapper==(30635): isSuport2ndTV() called; result is false
I/native (30635): Java_com_sec_android_app_qwertyremocon_rccore_TvRemoconApi_Ge
tSavedServerInfo
D/TvRemoconApiWrapper==(30635): isSuport2ndTV() called; result is false
D/SSEO_2NDTV(30623): current model is without 2ndTV !!!
I/native (30635): CNative2JavaCallbackHdr::PostMessage : MsgID = 17
D/RemoteController==(30623): trying to send MSG_IS_CONNECT
D/MessengerService==(30635): MSG_IS_CONNECT, size:
I/native (30635): Java_com_sec_android_app_qwertyremocon_rccore_TvRemoconApi_Is
Connect
D/TvRemoconApiWrapper==(30635): isConnect() called true
D/RemoteController==(30623): isConnect() called true
D/RemoteController==(30623): trying to send MSG_IS_SUPPORT_2NDTV
D/MessengerService==(30635): MSG_IS_SUPPORT_2NDTV, size:
I/native (30635): Java_com_sec_android_app_qwertyremocon_rccore_TvRemoconApi_Ge
tSavedServerInfo
D/TvRemoconApiWrapper==(30635): isSuport2ndTV() called; result is false

And some weird text:

I/DEBUG ( 6777): debuggerd committing suicide to free the zombie!
[Android Software/Hacking General [Developers Only]] cabron1980:
dual view mode work with non-samsung devices?
[Android Software/Hacking General [Developers Only]] Dblfstr:
I cannot recreate any of these errors.
[Android Software/Hacking General [Developers Only]] mooooooa:
No, not yet...
[Android Software/Hacking General [Developers Only]] modchen:
To get there, I've done the following modifications :

% git diff buildApkOut/smali/com/samsung/remoteTV/model/RemoteController.smali bthinnes@imac-bthinnes
diff --git a/buildApkOut/smali/com/samsung/remoteTV/model/RemoteController.smali b/buildApkOut/smali/com/samsung/remoteTV/model/RemoteController.smali
index 99fa9fb..a7624e0 100644
--- a/buildApkOut/smali/com/samsung/remoteTV/model/RemoteController.smali
+++ b/buildApkOut/smali/com/samsung/remoteTV/model/RemoteController.smali
@@ -2090,6 +2090,8 @@
invoke-virtual {v0}, Lcom/sec/android/app/qwertyremocon/rccore/ApiStateData;->isIs2ndTVSupport()Z

move-result v0
+
+ const/4 v0, 0x1

return v0
.end method

git diff buildApkOut/smali/com/samsung/remoteTV/model/TvRemoconApiWrapper.smali bthinnes@imac-bthinnes
diff --git a/buildApkOut/smali/com/samsung/remoteTV/model/TvRemoconApiWrapper.smali b/buildApkOut/smali/com/samsung/remoteTV/model/TvRemoconApiWrapper.smali
index 8e4a18d..34bd120 100644
--- a/buildApkOut/smali/com/samsung/remoteTV/model/TvRemoconApiWrapper.smali
+++ b/buildApkOut/smali/com/samsung/remoteTV/model/TvRemoconApiWrapper.smali
@@ -1281,6 +1281,8 @@
invoke-virtual {v2}, Lcom/sec/android/app/qwertyremocon/rccore/ApiStateData;->isIs2ndTVSupport()Z

move-result v2
+
+ const/4 v2, 0x1

invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;

@@ -1305,6 +1307,8 @@
:cond_0
iget-object v0, p0, Lcom/samsung/remoteTV/model/TvRemoconApiWrapper;->stateData:Lcom/sec/android/app/qwertyremocon/rccore/ApiStateData;

+ const/4 v3, 0x1
+
invoke-virtual {v0, v3}, Lcom/sec/android/app/qwertyremocon/rccore/ApiStateData;->setIs2ndTVSupport(Z)V

goto :goto_0

This ensures, that the method "isIs2ndTVSupport" will always return true, even if your tv doesn't support it.

Afterwards, the Dual View Button should appear. When you then click on it, your app will crash, as it misses some classes from jars located in the samsung rom.

After adding these classes, you will come to my error, where the app tries to load the native method "Initialize" located in "libTMI_stagefright_jni.so"

If you look at the log, you'll see, the app wasn't able to load these native libraries

E/JNI ( 2991): TMI_stagefright_jni loadLibrary Fail

I think, this is because the library was compiled for the samsung exynos 4210 cpu

which the samsung galaxy s2 has.

I'm currently asking under the hacking section of the forum, how to port such a library to another device. I have fear, that this is not possible if the native library uses operation codes, which are not supported by our cpus
[Android Software/Hacking General [Developers Only]] Dblfstr:
Pushed all the libs to my phone and a sec_feature.xml

keep getting this:

I/dalvikvm( 1605): Could not find method android.os.ITvOutService$Stub.asInterface, referenced from method com.sec.android.app.atp.hdmi.TVOutRestriction.isTVOutSupport

and this, do you have this file?

W/System.err( 1605): Caused by: java.lang.ClassNotFoundException: com.sec.android.app.SecFeature in loader dalvik.system.PathClassLoader[/system/framework/com.samsung.device.jar:/system/framework/sec_feature.jar:/data/app/com.samsung.smartview-1.apk]

sec_feature.jar

EDIT: Got the file, no change yet...
[Android Software/Hacking General [Developers Only]] Dblfstr:
Working as hard as we can to get it working. :D

Thanks
[Android Software/Hacking General [Developers Only]] modchen:
Decompile sec_feature.jar and "framework.jar" (I'm not sure if it was framework.jar) from samsung rom

Locate ITvOutService.smali and put (create folder if required) to buildApkOut/smali/android/os

Locate SecFeature.smali and put (create folder if required) to buildApkOut/smali/com/sec/android/app/
[Android Software/Hacking General [Developers Only]] Dblfstr:
added sec_feature.jar to /system/framework/ on my phone

That error goes away, but I still get many more and force close.

Also:

E/[2ndTVApp](24795): [SmartViewManager] :: startDualTV :: bHdcpKey [false] bInitialize [false]

E/[2ndTVApp](24795): [SmartViewManager] :: InitializeIvyMW :: bHdcpKey [false] bInitialize [false]

****Galaxy tab users note the Forceclose when clicking the DualView tab.
[Android Software/Hacking General [Developers Only]] Dblfstr:
I edited WLog to accept my HTC HD2. I had to hard code it this way, so it is only good for me.

I read that you patched WLog to output more information and to think that your device is a Galaxy S2.

When I try to get the WLog output to return 'true' nothing happens.
[Android Software/Hacking General [Developers Only]] Dblfstr:
So you are new to smali / apktool / but not JAVA. Yu seem to know more than you let on at first.
[Android Software/Hacking General [Developers Only]] Dblfstr:
Thread moved.

Thread moved to Android Software and Hacking General. Maybe we can gain some momentum in here.
[Android Software/Hacking General [Developers Only]] Dblfstr:
Yes, I was able to create the patchedbuild.smali and replace all the calls to android.os.build (the build.prop file in the root directory). This is easier than editing the build.prop and will come in handy for other applications. I did not know it was that easy to bypass the build.prop. Thanks for that.

I have pushed many of the Samsung file to my phone, but I still have the same errors, eventually down to the stagefright error.

Our devices to have the same Snapdragon CPU.

I feel like our errors have something to do with the bHdcpKey error from earlier in the log.

Edit:

this error:

E/[2ndTVApp](24795): [SmartViewManager] :: startDualTV :: bHdcpKey [false] bInitialize [false]

E/[2ndTVApp](24795): [SmartViewManager] :: InitializeIvyMW :: bHdcpKey [false] bInitialize [false]
[Android Software/Hacking General [Developers Only]] modchen:
Hi,

I don't have a clue, if your error also occurs one mine, I'll try at home where I have the tv to connect to. I suppose this is, when you are hitting the Dual View Button?

I gathered further information why, the app, isn't able to load "hatp" and "TMI_stagefright_jni"

10-06 17:00:34.069 D/dalvikvm( 3678): Trying to load lib /data/data/com.samsung.smartview/lib/libhatp.so 0x4051db48
10-06 17:00:34.069 E/JNI ( 3678): Cannot load library: link_image[1963]: 1492 could not load needed library 'libINVOKER.so' for 'libhatp.so' (load_library[1105]: Library 'libINVOKER.so' not found)

I'll look at home, if this libINVOKER.so is somewhere in the Samsung ROM, as I don't have it here. It seems hatp is dependent on INVOKER and TMI... is dependent on hatp.

To get this detailed error message, I did the following

diff --git a/buildApkOut/smali/com/sec/android/app/qwertyremocon/rccore/TvRemoconApi.smali b/buildApkOut/smali/com/sec/android/app/qwertyremocon/rccore/TvRemoconApi.smali
index 0e1cf85..16c73c4 100644
--- a/buildApkOut/smali/com/sec/android/app/qwertyremocon/rccore/TvRemoconApi.smali
+++ b/buildApkOut/smali/com/sec/android/app/qwertyremocon/rccore/TvRemoconApi.smali
@@ -216,7 +216,9 @@
.restart local v1 #e:Ljava/lang/UnsatisfiedLinkError;
const-string v2, "JNI"

- const-string v3, "hatp loadLibrary Fail"
+ invoke-virtual {v1}, Ljava/lang/UnsatisfiedLinkError;->getMessage()Ljava/lang/String;
+
+ move-result-object v3

invoke-static {v2, v3}, Lcom/samsung/remoteTV/WLog;->e(Ljava/lang/String;Ljava/lang/String;)V

@@ -233,7 +235,9 @@
.restart local v1 #e:Ljava/lang/UnsatisfiedLinkError;
const-string v2, "JNI"

- const-string v3, "TMI_stagefright_jni loadLibrary Fail"
+ invoke-virtual {v1}, Ljava/lang/UnsatisfiedLinkError;->getMessage()Ljava/lang/String;
+
+ move-result-object v3

invoke-static {v2, v3}, Lcom/samsung/remoteTV/WLog;->e(Ljava/lang/String;Ljava/lang/String;)V

This replaces their uninteresting string, with the output of getMessage() from the UnsatisfiedLinkError Exception.
[Android Software/Hacking General [Developers Only]] Dblfstr:
Will test at lunch. About an hour from now.
[Android Software/Hacking General [Developers Only]] modchen:
Pushing libINVOKER.so to my phone changed again A LOT! the app did NO LONGER CRASH! It enters to a new activity where it tries to get the content from the tv! It says (this may be different in reality as I've tranlated it to english) "Multidisplay is starting" and after some timeout it says "TV cannot be started due to decoder error!"

Now I dont know if this is related to the app or my tv which maybe doesnt support dual tv?

I'll post the logs done during this activity tomorrow, as I have to abort here because of time
[Android Software/Hacking General [Developers Only]] Dblfstr:
I did not see this in my log.
[Android Software/Hacking General [Developers Only]] genab.de:
@modchen

this sounds great that your phone is conecting to yut TV :-)
[Android Software/Hacking General [Developers Only]] Dblfstr:
HAVE FUN!

***************************************

I am using the 2.4.0

After pushing the INVOKE lib to my phone, nothing changed. I believe you and I have the same modifications to the app, and have pushed the same files to our phones. Yet, we have different results.

I will consider the fact that we have different phones and TV may play a part in this.

I will try all of this with 2.3.6 to see if I get any further.

I have pushed so many files to my phone, I can't remember all of them. Every time I started to see a lib that was not present I would push it. I may have gotten ahead of myself. Time to restart
[Android Software/Hacking General [Developers Only]] modchen:
Good luck !

I've also modified and tried a lot by pushing/removing classes/libs to my apk/phone, so maybe I missed something important to mention here.

Nevertheless, I'll redo everything in the next time with 2.4.0 and a fresh HTC DHD rom.

Also, some modifications like debug output are not really required, and I still don't know, why my isSuport2ndTV method does only return true, if I patch it. Maybe my TV simply doesn't support it. So there is still a lot of work to do.

A friend of mine, with an SGS2 will also come to me in the next time. Then I can try, if dual tv does really work on my TV and also get a log from his device.

PS: My "decoder error" is also maybe related to some HDCP ****! "HdcpUtil" for example compares some certificates and gathers the phone device id.
[Android Software/Hacking General [Developers Only]] Dblfstr:
I wonder where it could be pulling the device id information from. I looked at every smali file and the only one that reads the build.prop (android.os.build) was in the file that you mentioned where we replaced the calls to android.os.build with the patched build file.

Maybe I missed something? Anyway, I will try again with only the important edits; one by one, and I will try to keep a changelog this time!

P.S. There are some files related to HDCP in the samsung ROM I believe. (which ROM are you pulling files from. I am using:ROM XXKI3][No wipe,No Bugs!][Boh! AntoniomistrettA LITE]Deodexed 2.3.5 http://xdaforums.com/showthread.php?t=1284732

Edit:

I just thought of something. We edited WLog to read from the patched_build.smali for device info. This now outputs that we have a Samsung GT I900 or whatever, and that Bluetooth Power On is Supported; however, the button is not visible in the app.

When I edited my Build.prop, I was getting the same output, only the Bluetooth Power On Button WAS visible in the app.

So I am going to try this with my edited build.prop (with all other mods) to see if the button shows up. Maybe the log can show what, if anything, is different.

I also got your socket error: From my first log

I/native ( 1435): ClientSocket.Connect errno = 115, m_socket = 41, result=-1

I/native ( 1435): ---------------------------

I/native ( 1435): ClientSocket.Connect return Success 2

I/native ( 1435): ClientSocket.Connect errno = 115, m_socket = 40, result=-1

I/native ( 1435): ---------------------------

I/native ( 1435): ClientSocket.Connect return Success 2

I/native ( 1435): Alive : connect success 192.168.1.115, socket=40

I/native ( 1435): ClientSocket.Close 40

I/native ( 1435): ClientSocket.Close() Exit ~~

here is a good one:

D/skia ( 2879): --- SkImageDecoder::Factory returned null

D/skia ( 2879): --- SkImageDecoder::Factory returned null
[Android Software/Hacking General [Developers Only]] mrmrmrmr:
Hi,

I don't want to interrupt developers discussion but I need to ask this small question:

I understand this is not yet successfull for non-samsung devices, but is it possible to achieve dual view on Samsung Galaxy S ?

btw, is there a quick and easy way of faking the Market in terms of phone model ? (I'd like to introduce my Dell Streak to the Market as a Samsung phone.)
[Android Software/Hacking General [Developers Only]] bhf1973:
Thanks for the work you guys are putting into this - appreciated!
[Android Software/Hacking General [Developers Only]] Dblfstr:
You can try on a Galaxy S, but I do not think it will work yet.

And, although it is off topic, you need to edit your build.prop to fool the market.

You need root access and a file explorer that can mount as r/w. i use EStrongs file explorer.

'system/build.prop'

Make a backup copy of your original build.prop, so you have build.prop and build.prop.bak, and edit the following lines

ro.product.model=GT-I9100
ro.product.brand=samsung
ro.product.name=GT-I9100
ro.product.device=GT-I9100
ro.product.board=GT-I9100

You may notice some things stop working when you do this. They can be fixed, but it is easier to switch back to your original build.prop when you are done in the market.

This was my 999th post :D
[Android Software/Hacking General [Developers Only]] sputnik99:
I read that (at the moment) Dual view doesn't work with TVs older than 2011. The strange thing is, that my TV Samsung le46C750 from 2010 has a menu entry "dual view" but I can't change anything.

So I guess it is possible somehow. Don't know how and don't have developer skills.
[Android Software/Hacking General [Developers Only]] Dblfstr:
That may or may not be referring to the Samsung DualView cameras.

Where is this menu entry?
[Android Software/Hacking General [Developers Only]] sputnik99:
I will check and tell you.
[Android Software/Hacking General [Developers Only]] chunting81:
Dear Developers,

Just want to update that I have downloaded the 2.4.0 apk in the first page and installed on my I9000, just want to let you guys know that no dual view button or option was shown when connected.

It just works like the remote as usual. FYI, my tv is 46D7000, which should be able to work with dualview.

Anyway if there is any requirement on testing etc please let me know, and thanks to you all.
[Android Software/Hacking General [Developers Only]] Dblfstr:
The I9000 is the original Galaxy S correct?
[Android Software/Hacking General [Developers Only]] sputnik99:
I have to correct myself: it's screen share not dual view but it is related to sharing a screen with my galaxy Tab 10.1...

here are the pictures from allshare menu of my LE46C750...

http://www.bilderhoster24.de/viewer.php?file=a75gwz08ruir56c4b70.jpg

http://www.bilderhoster24.de/viewer.php?file=ord7o4c1hu9mh96jhm1.jpg

http://www.bilderhoster24.de/viewer.php?file=a926dgsihrbeil5fyxo5.jpg

the menu is german, so I can just guess about the english menu entry

menu settings - apps / tools ? - show content - screenshare

hope this helps.
[Android Software/Hacking General [Developers Only]] Dblfstr:
That might just put a stop to me getting it working with my TV. As I do not have those options available. :(

That does not mean that we cannot get this working on other phones for people that DO have supported TVs
[Android Software/Hacking General [Developers Only]] chunting81:
Yes on hardware and no on ROM, flashed with custom rom.

Please let me know if it differ, if so can flash a original rom from Samsung to test out.
[Android Software/Hacking General [Developers Only]] mrmrmrmr:
Hi,

is there any new progress on this ?

thanks...
[Android Software/Hacking General [Developers Only]] nunyabiziz:
There is also a tablet version of this app maybe someone can look into this.
[Android Software/Hacking General [Developers Only]] Dblfstr:
still trying over here... I do not think I can go any farther if my TV is not actually a supported TV. :(
[Android Software/Hacking General [Developers Only]] modchen:
Hi, I'm back from holiday, I'll try to look further into in the next days.
[Android Software/Hacking General [Developers Only]] mrmrmrmr:
if any of you need a beta tester with 55D7000 TV and a few Android devices, I'm here to help...
[Android Software/Hacking General [Developers Only]] Justin Buser:
DualView Menu visible

This should display the DualView menu option regardless of the device you're using. This doesn't mean it will work, I only modified the SmartViewManager class to always return true for isHdcpKey, but it's a start.
[Android Software/Hacking General [Developers Only]] nunyabiziz:
Thank you, first time I see the dual view feature. I am using with D8000 abd get decoder error.
[Android Software/Hacking General [Developers Only]] rand0m:
nearly same results here - starts - switches to dual view - black screen, crash on Galaxy S i9000 (stock 2.3.4 rom) and D7000 series
[Android Software/Hacking General [Developers Only]] jbirney:
Folks,

I have a AT&T Galaxy S II (SGH-I777) that I just purchased from AT&T as well as a 2 month old Sammy PN64D7000. I should be able to help. However the app does not show up for me in the Market as It says its not compatible with my device???

Anyways I can try to help if needed. But still really do thank you for all your efforts!
[Android Software/Hacking General [Developers Only]] modchen:
Hi, it seems, you are also analysing the code. Have you already read, what I've found out until now so far ?

In very short summary :

-I did your modification, by patching "isSuport2ndTV" to show up the button -> app crashes after pushing it

-added some missing classes, app still crashed after pushing the button

-added libINVOKER.so, native libraries were loaded, app did no longer crash, but got "decoder error"

(The classes and libs can be found in SGS2 Rom)

The attachment contains the classes represented as java source files, this was done by unzipping the apk, using dex2jar for the classes.dex file, and then jd-gui to get the source.

NOTE : This source cannot be compiled back, I just use it, to easier understand the code from the app, it will help you a lot to find the specific locations in your smali files.
[Android Software/Hacking General [Developers Only]] mrmrmrmr:
It's very nice that there is some progress.

I have also the same output. "decoder error"
[Android Software/Hacking General [Developers Only]] Dblfstr:
Still have not received this error. I only get FC.
[Android Software/Hacking General [Developers Only]] Ruszek83:
I read all threads about smart view, but i jsut cant figure it out... Can i make it work with my Galaxy Tav 7" ???

I Insalled it on my device but i still cant see Dual view tab... What do ?!
[Android Software/Hacking General [Developers Only]] j1621c:
I can beta test if anyone needs help. I have a 7000 series and a droid X