Skip to content

Commit

Permalink
initial check-in
Browse files Browse the repository at this point in the history
  • Loading branch information
simmons committed Aug 30, 2011
0 parents commit 2ca8aa5
Show file tree
Hide file tree
Showing 51 changed files with 6,760 additions and 0 deletions.
10 changes: 10 additions & 0 deletions .classpath
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="src" path="netlib_src"/>
<classpathentry kind="src" path="motelib_src"/>
<classpathentry kind="src" path="xmlfoo_src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
2 changes: 2 additions & 0 deletions .gitignore
@@ -0,0 +1,2 @@
bin/
gen/
50 changes: 50 additions & 0 deletions .project
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>valence</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
<linkedResources>
<link>
<name>motelib_src</name>
<type>2</type>
<locationURI>_android_motelib_4a035a12/src</locationURI>
</link>
<link>
<name>netlib_src</name>
<type>2</type>
<locationURI>_android_netlib_c17ab7c8/src</locationURI>
</link>
<link>
<name>xmlfoo_src</name>
<type>2</type>
<locationURI>_android_xmlfoo_d2f8314f/src</locationURI>
</link>
</linkedResources>
</projectDescription>
33 changes: 33 additions & 0 deletions AndroidManifest.xml
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cafbit.valence"
android:versionCode="3"
android:versionName="1.2">
<uses-sdk android:minSdkVersion="7" />

<application android:name=".ValenceApplication" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".SelectionActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ValenceActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateUnchanged|adjustResize">
>
</activity>
<activity android:name="com.cafbit.motelib.settings.AddDeviceActivity" android:label="Add a new VNC profile...">
</activity>
<activity android:name="com.cafbit.motelib.discovery.DiscoveryActivity" android:label="Discover VNC servers...">
</activity>
<activity android:name="com.cafbit.valence.HelpActivity" android:label="Valence Help">
</activity>


</application>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
16 changes: 16 additions & 0 deletions LICENSE
@@ -0,0 +1,16 @@
/*
* Copyright 2011 David Simmons
* http://cafbit.com/entry/testing_multicast_support_on_android
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
186 changes: 186 additions & 0 deletions assets/help.html
@@ -0,0 +1,186 @@
<html>
<head>
<title>Valence</title>
</head>
<body>
<img src="file:///android_res/drawable/icon.png"></img>
<h1>Valence</h1>

<p>Version 1.1, released August 27, 2011</p>
<p>© 2011 David Simmons</p>
<p><tt><a href="http://cafbit.com/">http://cafbit.com/</a></tt></p>

<ul>
<li><a href="#introduction">Introduction</a></li>
<li><a href="#installing">Installing a VNC server on your computer</a></li>
<li><a href="#configuring">Configuring <em>Valence</em></a></li>
<li><a href="#using">Using <em>Valence</em></a></li>
<li><a href="#security">Security considerations</a></li>
<li><a href="#misc">Miscellaneous comments</a></li>
</ul>

<a name="introduction"></a>
<h2>Introduction</h2>

<p>
<em>Valence</em> turns your Android phone or tablet into a remote
keyboard and mouse for any computer. The inspiration for <em>Valence</em>
was a need to control a home theater PC from the couch, but it can be
useful in any situation where a computer doesn't have a keyboard and
mouse handy. Your computer must be reachable over the network from
your Android device, and be running a VNC server.
</p>

<p>
Most computer remote control apps require that the controlled computer
be running special software, unique to the app, that relays mouse and
keyboard events to the operating system. Not only does this add yet
another single-purpose ever-running program to your computer, but the
author may not have support for your operating system yet. To solve
this problem, <em>Valence</em> uses the industry standard
<a href="http://en.wikipedia.org/wiki/Virtual_Network_Computing">VNC</a>
system and its <a href="http://en.wikipedia.org/wiki/RFB_protocol">RFB</a>
(remote framebuffer) protocol. Many operating systems come with VNC
built-in, and many people may already have VNC installed and enabled.
Instead of using VNC to see the screen of a remote computer, <em>Valence</em>
uses VNC in a strictly one-way fashion&mdash;input events are
transmitted from the Android handset to the VNC server, but video
frames are never sent from the server to the handset.
</p>

<a name="installing"></a>
<h2>Installing a VNC server on your computer</h2>

<p>
To use <em>Valence</em>, make sure you have VNC server software installed on
your computer, and configured to allow connections:
</p>

<ul>
<li>
<em>Mac OS</em>. Macs have built-in VNC software, so no additional
software needs to be installed. In "System Preferences," go to the
"Sharing" tab and make sure "Remote Management" is selected. Then click
"Computer Settings..." and make sure "VNC viewers may control screen
with password" is selected, and provide a password.
NOTE: Apple has been fiddling with their VNC support lately.
An update pushed to Snow Leopard in July 2011 breaks right-click support,
and Valence is likely to not work with Lion at all. I'll try to work around
these problems in future releases.
</li>
<li>
<em>Ubuntu Linux</em>. Ubuntu Linux has built-in VNC software, so no
additional software needs to be installed. In the System menu, select
Preferences then Remote Desktop. Check "Allow other users to view your
desktop" and "Allow other users to control your desktop," uncheck "You
must confirm each access to this machine," and check "Require the user
to enter this password." Assign a password.
</li>
<li>
<em>Windows</em>. Windows does not have a built-in VNC server, so
you'll need to install one. I recommend downloading the latest version
of <a href="http://www.tightvnc.com/">TightVNC</a>. On TightVNC's
<a href="http://www.tightvnc.com/download.php">download page</a>,
click the "download" link next to "Self-installing package for Windows."
Open the downloaded package, click "Run," and proceed through the setup
wizard. (Just keep hitting "Next" and "I agree".)
Enter a password when prompted in the "Service Configuration" dialog,
click "Install," and complete the installation.
</li>
</ul>

<a name="configuring"></a>
<h2>Configuring <em>Valence</em></h2>

<p>
Before using <em>Valence</em>, you must configure the app with information
about the computer you wish to control. There are two ways to do this.
When you first launch <em>Valence</em>, you will be presented with a list
of configured VNC servers, the option to manually add a new server, and the
option to automatically discover VNC servers.
</p>

<ul>
<li>
<em>Manually add a VNC server</em>. Select "Add a new VNC server...". Enter
the IP address or hostname of your VNC server and the password, then click
"Connect." The server will then be configured in <em>Valence</em>.
</li>
<li>
<em>Discover a VNC server</em>. Select "Discover VNC servers...". VNC servers
that are capable of advertising themselves on the network will appear in a
list. (Note: Not all VNC servers support this feature&mdash;in particular,
TightVNC does not. Also, some Android handsets such as the HTC EVO 4G have
trouble performing discovery.) Select the desired server from the list, and
you will be presented with a server configuration screen. Enter your password,
click "Connect," and the server will be configured in <em>Valence</em>.
</li>
</ul>

<a name="using"></a>
<h2>Using <em>Valence</em></h2>

<p>
To control a computer, select its name from the list which appears when you
launch <em>Valence</em>. After connecting, you will see a large touchpad
area on the screen. You can use this touchpad to move the mouse pointer of
the computer in much the same way you use a touchpad on a laptop&mdash;swipe
your finger in the direction you want the pointer to move. To click the
mouse, quickly tap your finger anywhere in the touchpad area. To perform
a right-click, tap on the touchpad with two fingers at the same time. To
scroll, swipe two fingers up and down.
</p>

<p>
If your Android device has a physical keyboard, you can use it to type on
the remote computer. Otherwise, pressing the keyboard icon will present the
soft keyboard which can be used for typing.
</p>

<p>
When finished, press your device's back key.
</p>

<a name="security"></a>
<h2>Security considerations</h2>

The VNC protocol (RFB) performs authentication using a DES-based
challenge-response system, so your VNC password is never transmitted in
the clear. However, security-conscious users should note the following:
<ul>
<li>
Keys and mouse movements <em>are</em> transmitted in the clear.
Therefore, if you type a password on your computer via a VNC session,
that password will be sent in the clear. If you only use <em>Valence</em>
on your home network with a WPA-secured wireless access point, this
is probably acceptable since everything is being encrypted by your
wireless network.
</li>
<li>
<em>Valence</em> stores your VNC passwords on your Android device in
an encrypted format. However, since it is necessary for <em>Valence</em>
itself to possess the means to decrypt these passwords, this
is only a deterrent to the most casual snooping. A determined and
skilled criminal with physical access to your phone could still
uncover your stored VNC passwords.
</li>
</ul>

<a name="misc"></a>
<h2>Miscellaneous comments</h2>

<p>What does the name <em>Valence</em> mean?</p>

<p>
The name <em>Valence</em> has the letters V, N, and C, so it seemed like
an appropriate name for a VNC client. In chemistry,
"<a href="http://en.wikipedia.org/wiki/Valence_(chemistry)">valence</a>"
refers to an atom's capacity for joining with other atoms to form
compounds by sharing electrons. This connection of atoms using their
<em>valence electrons</em> is called a <em>covalent bond</em>.
In much the same way that valence helps hold the universe together,
I hope that <em>Valence</em> helps bring your home electronics together.
</p>

</body>
</html>
14 changes: 14 additions & 0 deletions default.properties
@@ -0,0 +1,14 @@
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.

# Project target.
target=android-7
android.library.reference.1=../xmlfoo
android.library.reference.2=../netlib
android.library.reference.3=../motelib
Binary file added icon512.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/drawable-hdpi/icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/drawable-hdpi/keyboard.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/drawable-ldpi/icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/drawable-ldpi/keyboard.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/drawable-mdpi/icon.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/drawable-mdpi/keyboard.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
76 changes: 76 additions & 0 deletions res/layout/about.xml
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="0dp"
>
<ScrollView
android:id="@+id/about_scroll_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
>
<TextView android:id="@+id/about_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:text="@string/app_name"
android:layout_gravity="center_horizontal"
android:textSize="24sp"
android:paddingBottom="5sp"
/>
<TextView android:id="@+id/about_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:typeface="monospace"
android:textSize="12sp"
android:text="@string/about_version"
android:layout_gravity="center_horizontal"
android:paddingBottom="5sp"
/>
<TextView android:id="@+id/about_build"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:typeface="monospace"
android:textSize="12sp"
android:text="@string/about_build_date"
android:layout_gravity="center_horizontal"
android:paddingBottom="5sp"
/>
<TextView android:id="@+id/about_copyright"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:text="@string/about_copyright"
android:layout_gravity="center_horizontal"
android:textSize="16sp"
android:paddingBottom="5sp"
/>
<TextView android:id="@+id/about_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:text="@string/about_url"
android:layout_gravity="center_horizontal"
android:textSize="16sp"
android:paddingBottom="10sp"
/>
<TextView android:id="@+id/about_description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FFF"
android:text="@string/about_description"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
</ScrollView>
</LinearLayout>

0 comments on commit 2ca8aa5

Please sign in to comment.