Add testing features to devtools

Fixed manifest with missing permission.
Added some connectivity api-tweakers

Change-Id: I10007938e28e8c0f550ae78a7cd6df4a817a8800
This commit is contained in:
Robert Greenwalt
2010-07-30 16:14:18 -07:00
committed by Robert Greenwalt
parent 6f1718bab5
commit 40f7d44cac
4 changed files with 383 additions and 120 deletions

View File

@@ -18,6 +18,7 @@
package="com.android.development"
android:versionCode="1" android:versionName="1.0">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.DEVICE_POWER" />

View File

@@ -17,12 +17,14 @@
** limitations under the License.
*/
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
@@ -202,5 +204,59 @@
android:layout_height="wrap_content"
android:text="@string/crash" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/add_default_route"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add_default_route" />
<Button android:id="@+id/remove_default_route"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/remove_default_route" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/default_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/default_request" />
<Button android:id="@+id/default_socket"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/default_socket" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/bound_http_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bound_http_request" />
<Button android:id="@+id/bound_socket_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bound_socket_request" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/routed_http_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/routed_http_request" />
<Button android:id="@+id/routed_socket_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/routed_socket_request" />
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@@ -36,6 +36,14 @@
<string name="start_hipri">Start HiPri</string>
<string name="stop_hipri">Stop HiPri</string>
<string name="crash">CRASH</string>
<string name="add_default_route">Add Default Route</string>
<string name="remove_default_route">Remove Default Route</string>
<string name="default_request">Make a http request</string>
<string name="default_socket">Make a raw request</string>
<string name="bound_http_request">Make bound http request</string>
<string name="bound_socket_request">Make bound socket request</string>
<string name="routed_http_request">Make routed http request</string>
<string name="routed_socket_request">Make routed socket request</string>
<string name="device_info_default">unknown</string>

View File

@@ -28,6 +28,7 @@ import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.NetworkUtils;
import android.net.wifi.WifiManager;
import android.os.RemoteException;
import android.os.Handler;
@@ -58,19 +59,27 @@ import com.android.internal.telephony.Phone;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Map;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRouteParams;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.HttpResponse;
import org.apache.http.impl.client.DefaultHttpClient;
public class Connectivity extends Activity {
private static final String TAG = "Connectivity";
private static final String TAG = "DevTools - Connectivity";
private static final int EVENT_TOGGLE_WIFI = 1;
private static final int EVENT_TOGGLE_SCREEN = 2;
private Button mEnableWifiButton;
private Button mDisableWifiButton;
private Button mStartDelayedCycleButton;
private Button mStopDelayedCycleButton;
private EditText mDCOnDurationEdit;
private EditText mDCOffDurationEdit;
private TextView mDCCycleCountView;
@@ -78,8 +87,6 @@ public class Connectivity extends Activity {
private long mDCOffDuration = 120000;
private int mDCCycleCount = 0;
private Button mStartScreenCycleButton;
private Button mStopScreenCycleButton;
private EditText mSCOnDurationEdit;
private EditText mSCOffDurationEdit;
private TextView mSCCycleCountView;
@@ -87,12 +94,6 @@ public class Connectivity extends Activity {
private long mSCOffDuration = 12000;
private int mSCCycleCount = 0;
private Button mStartMmsButton;
private Button mStopMmsButton;
private Button mStartHiPriButton;
private Button mStopHiPriButton;
private Button mCrashButton;
private boolean mDelayedCycleStarted = false;
private WifiManager mWm;
@@ -191,15 +192,11 @@ public class Connectivity extends Activity {
mPm = (PowerManager)getSystemService(Context.POWER_SERVICE);
mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
mEnableWifiButton = (Button)findViewById(R.id.enableWifi);
mEnableWifiButton.setOnClickListener(mEnableWifiClicked);
mDisableWifiButton = (Button)findViewById(R.id.disableWifi);
mDisableWifiButton.setOnClickListener(mDisableWifiClicked);
findViewById(R.id.enableWifi).setOnClickListener(mClickListener);
findViewById(R.id.disableWifi).setOnClickListener(mClickListener);
mStartDelayedCycleButton = (Button)findViewById(R.id.startDelayedCycle);
mStartDelayedCycleButton.setOnClickListener(mStartDelayedCycleClicked);
mStopDelayedCycleButton = (Button)findViewById(R.id.stopDelayedCycle);
mStopDelayedCycleButton.setOnClickListener(mStopDelayedCycleClicked);
findViewById(R.id.startDelayedCycle).setOnClickListener(mClickListener);
findViewById(R.id.stopDelayedCycle).setOnClickListener(mClickListener);
mDCOnDurationEdit = (EditText)findViewById(R.id.dc_wifi_on_duration);
mDCOnDurationEdit.setText(Long.toString(mDCOnDuration));
mDCOffDurationEdit = (EditText)findViewById(R.id.dc_wifi_off_duration);
@@ -207,10 +204,8 @@ public class Connectivity extends Activity {
mDCCycleCountView = (TextView)findViewById(R.id.dc_wifi_cycles_done);
mDCCycleCountView.setText(Integer.toString(mDCCycleCount));
mStartScreenCycleButton = (Button)findViewById(R.id.startScreenCycle);
mStartScreenCycleButton.setOnClickListener(mStartScreenCycleClicked);
mStopScreenCycleButton = (Button)findViewById(R.id.stopScreenCycle);
mStopScreenCycleButton.setOnClickListener(mStopScreenCycleClicked);
findViewById(R.id.startScreenCycle).setOnClickListener(mClickListener);
findViewById(R.id.stopScreenCycle).setOnClickListener(mClickListener);
mSCOnDurationEdit = (EditText)findViewById(R.id.sc_wifi_on_duration);
mSCOnDurationEdit.setText(Long.toString(mSCOnDuration));
mSCOffDurationEdit = (EditText)findViewById(R.id.sc_wifi_off_duration);
@@ -218,16 +213,20 @@ public class Connectivity extends Activity {
mSCCycleCountView = (TextView)findViewById(R.id.sc_wifi_cycles_done);
mSCCycleCountView.setText(Integer.toString(mSCCycleCount));
mStartMmsButton = (Button)findViewById(R.id.start_mms);
mStartMmsButton.setOnClickListener(mStartMmsClicked);
mStopMmsButton = (Button)findViewById(R.id.stop_mms);
mStopMmsButton.setOnClickListener(mStopMmsClicked);
mStartHiPriButton = (Button)findViewById(R.id.start_hipri);
mStartHiPriButton.setOnClickListener(mStartHiPriClicked);
mStopHiPriButton = (Button)findViewById(R.id.stop_hipri);
mStopHiPriButton.setOnClickListener(mStopHiPriClicked);
mCrashButton = (Button)findViewById(R.id.crash);
mCrashButton.setOnClickListener(mCrashClicked);
findViewById(R.id.start_mms).setOnClickListener(mClickListener);
findViewById(R.id.stop_mms).setOnClickListener(mClickListener);
findViewById(R.id.start_hipri).setOnClickListener(mClickListener);
findViewById(R.id.stop_hipri).setOnClickListener(mClickListener);
findViewById(R.id.crash).setOnClickListener(mClickListener);
findViewById(R.id.add_default_route).setOnClickListener(mClickListener);
findViewById(R.id.remove_default_route).setOnClickListener(mClickListener);
findViewById(R.id.bound_http_request).setOnClickListener(mClickListener);
findViewById(R.id.bound_socket_request).setOnClickListener(mClickListener);
findViewById(R.id.routed_http_request).setOnClickListener(mClickListener);
findViewById(R.id.routed_socket_request).setOnClickListener(mClickListener);
findViewById(R.id.default_request).setOnClickListener(mClickListener);
findViewById(R.id.default_socket).setOnClickListener(mClickListener);
registerReceiver(mReceiver, new IntentFilter(CONNECTIVITY_TEST_ALARM));
}
@@ -239,62 +238,114 @@ public class Connectivity extends Activity {
super.onResume();
}
private View.OnClickListener mStartDelayedCycleClicked = new View.OnClickListener() {
private View.OnClickListener mClickListener = new View.OnClickListener() {
public void onClick(View v) {
if (!mDelayedCycleStarted) {
mDelayedCycleStarted = true;
try {
mDCOnDuration = Long.parseLong(mDCOnDurationEdit.getText().toString());
mDCOffDuration = Long.parseLong(mDCOffDurationEdit.getText().toString());
} catch (Exception e) { };
mDCCycleCount = 0;
mWakeLock = mPm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "ConnectivityTest");
mWakeLock.acquire();
mHandler2.sendMessage(mHandler2.obtainMessage(EVENT_TOGGLE_WIFI));
}
}
};
private View.OnClickListener mStopDelayedCycleClicked = new View.OnClickListener() {
public void onClick(View v) {
if (mDelayedCycleStarted) {
mDelayedCycleStarted = false;
mWakeLock.release();
mWakeLock = null;
if(mHandler2.hasMessages(EVENT_TOGGLE_WIFI)) {
mHandler2.removeMessages(EVENT_TOGGLE_WIFI);
}
switch (v.getId()) {
case R.id.enableWifi:
mWm.setWifiEnabled(true);
break;
case R.id.disableWifi:
mWm.setWifiEnabled(false);
break;
case R.id.startDelayedCycle:
onStartDelayedCycle();
break;
case R.id.stopDelayedCycle:
onStopDelayedCycle();
break;
case R.id.startScreenCycle:
onStartScreenCycle();
break;
case R.id.stopScreenCycle:
onStopScreenCycle();
break;
case R.id.start_mms:
mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_MMS);
break;
case R.id.stop_mms:
mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_MMS);
break;
case R.id.default_socket:
onDefaultSocket();
break;
case R.id.default_request:
onDefaultRequest();
break;
case R.id.routed_socket_request:
onRoutedSocketRequest();
break;
case R.id.routed_http_request:
onRoutedHttpRequest();
break;
case R.id.bound_socket_request:
onBoundSocketRequest();
break;
case R.id.bound_http_request:
onBoundHttpRequest();
break;
case R.id.remove_default_route:
onRemoveDefaultRoute();
break;
case R.id.add_default_route:
onAddDefaultRoute();
break;
case R.id.crash:
onCrash();
break;
case R.id.start_hipri:
mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_HIPRI);
break;
case R.id.stop_hipri:
mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_HIPRI);
break;
}
}
};
private View.OnClickListener mEnableWifiClicked = new View.OnClickListener() {
public void onClick(View v) {
mWm.setWifiEnabled(true);
}
};
private View.OnClickListener mDisableWifiClicked = new View.OnClickListener() {
public void onClick(View v) {
mWm.setWifiEnabled(false);
}
};
private View.OnClickListener mStartScreenCycleClicked = new View.OnClickListener() {
public void onClick(View v) {
private void onStartDelayedCycle() {
if (!mDelayedCycleStarted) {
mDelayedCycleStarted = true;
try {
mSCOnDuration = Long.parseLong(mSCOnDurationEdit.getText().toString());
mSCOffDuration = Long.parseLong(mSCOffDurationEdit.getText().toString());
mDCOnDuration = Long.parseLong(mDCOnDurationEdit.getText().toString());
mDCOffDuration = Long.parseLong(mDCOffDurationEdit.getText().toString());
} catch (Exception e) { };
mSCCycleCount = 0;
mDCCycleCount = 0;
mScreenonWakeLock = mPm.newWakeLock(PowerManager.FULL_WAKE_LOCK,
"ConnectivityTest");
mScreenonWakeLock.acquire();
scheduleAlarm(10, SCREEN_OFF);
mWakeLock = mPm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "ConnectivityTest");
mWakeLock.acquire();
mHandler2.sendMessage(mHandler2.obtainMessage(EVENT_TOGGLE_WIFI));
}
};
}
private void onStopDelayedCycle() {
if (mDelayedCycleStarted) {
mDelayedCycleStarted = false;
mWakeLock.release();
mWakeLock = null;
if(mHandler2.hasMessages(EVENT_TOGGLE_WIFI)) {
mHandler2.removeMessages(EVENT_TOGGLE_WIFI);
}
}
}
private void onStartScreenCycle() {
try {
mSCOnDuration = Long.parseLong(mSCOnDurationEdit.getText().toString());
mSCOffDuration = Long.parseLong(mSCOffDurationEdit.getText().toString());
} catch (Exception e) { };
mSCCycleCount = 0;
mScreenonWakeLock = mPm.newWakeLock(PowerManager.FULL_WAKE_LOCK,
"ConnectivityTest");
mScreenonWakeLock.acquire();
scheduleAlarm(10, SCREEN_OFF);
}
private void scheduleAlarm(long delayMs, String eventType) {
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
@@ -310,42 +361,189 @@ public class Connectivity extends Activity {
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + delayMs, p);
}
private View.OnClickListener mStopScreenCycleClicked = new View.OnClickListener() {
public void onClick(View v) {
}
};
private void onStopScreenCycle() {
}
private View.OnClickListener mStartMmsClicked = new View.OnClickListener() {
public void onClick(View v) {
mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_MMS);
}
};
private void onCrash() {
ConnectivityManager foo = null;
foo.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_MMS);
}
private View.OnClickListener mStopMmsClicked = new View.OnClickListener() {
public void onClick(View v) {
mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_MMS);
}
};
private void onAddDefaultRoute() {
try {
NetworkUtils.addRoute("eth0", "0.0.0.0", 0, "8.8.8.8");
} catch (Exception e) { }
}
private View.OnClickListener mStartHiPriClicked = new View.OnClickListener() {
public void onClick(View v) {
mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_HIPRI);
}
};
private void onRemoveDefaultRoute() {
Log.e(TAG, "removeDefaultRoute returned "+NetworkUtils.removeDefaultRoute("eth0"));
}
private View.OnClickListener mStopHiPriClicked = new View.OnClickListener() {
public void onClick(View v) {
mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_HIPRI);
}
};
private void onRoutedHttpRequest() {
onRoutedRequest(HTTP);
}
private View.OnClickListener mCrashClicked = new View.OnClickListener() {
public void onClick(View v) {
ConnectivityManager foo = null;
foo.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
Phone.FEATURE_ENABLE_MMS);
private void onRoutedSocketRequest() {
onRoutedRequest(SOCKET);
}
private final static int SOCKET = 1;
private final static int HTTP = 2;
private void onRoutedRequest(int type) {
String url = "www.google.com";
InetAddress inetAddress = null;
try {
inetAddress = InetAddress.getByName(url);
} catch (Exception e) {
Log.e(TAG, "error fetching address for " + url);
return;
}
};
mCm.requestRouteToHostAddress(ConnectivityManager.TYPE_MOBILE_HIPRI, inetAddress);
switch (type) {
case SOCKET:
onBoundSocketRequest();
break;
case HTTP:
HttpGet get = new HttpGet("http://" + url);
HttpClient client = new DefaultHttpClient();
try {
HttpResponse httpResponse = client.execute(get);
Log.d(TAG, "routed http request gives " + httpResponse.getStatusLine());
} catch (Exception e) {
Log.e(TAG, "routed http request exception = " + e);
}
}
}
private void onBoundHttpRequest() {
NetworkInterface networkInterface = null;
try {
networkInterface = NetworkInterface.getByName("rmnet0");
Log.d(TAG, "networkInterface is " + networkInterface);
} catch (Exception e) {
Log.e(TAG, " exception getByName: " + e);
return;
}
if (networkInterface != null) {
Enumeration inetAddressess = networkInterface.getInetAddresses();
while(inetAddressess.hasMoreElements()) {
Log.d(TAG, " inetAddress:" + ((InetAddress)inetAddressess.nextElement()));
}
}
HttpParams httpParams = new BasicHttpParams();
if (networkInterface != null) {
ConnRouteParams.setLocalAddress(httpParams,
networkInterface.getInetAddresses().nextElement());
}
HttpGet get = new HttpGet("http://www.bbc.com");
HttpClient client = new DefaultHttpClient(httpParams);
try {
HttpResponse response = client.execute(get);
Log.d(TAG, "response code = " + response.getStatusLine());
} catch (Exception e) {
Log.e(TAG, "Exception = "+ e );
}
}
private void onBoundSocketRequest() {
NetworkInterface networkInterface = null;
try {
networkInterface = NetworkInterface.getByName("rmnet0");
} catch (Exception e) {
Log.e(TAG, "exception getByName: " + e);
return;
}
if (networkInterface == null) {
try {
Log.d(TAG, "getting any networkInterface");
networkInterface = NetworkInterface.getNetworkInterfaces().nextElement();
} catch (Exception e) {
Log.e(TAG, "exception getting any networkInterface: " + e);
return;
}
}
if (networkInterface == null) {
Log.e(TAG, "couldn't find a local interface");
return;
}
Enumeration inetAddressess = networkInterface.getInetAddresses();
while(inetAddressess.hasMoreElements()) {
Log.d(TAG, " addr:" + ((InetAddress)inetAddressess.nextElement()));
}
InetAddress local = null;
InetAddress remote = null;
try {
local = networkInterface.getInetAddresses().nextElement();
} catch (Exception e) {
Log.e(TAG, "exception getting local InetAddress: " + e);
return;
}
try {
remote = InetAddress.getByName("www.flickr.com");
} catch (Exception e) {
Log.e(TAG, "exception getting remote InetAddress: " + e);
return;
}
Log.d(TAG, "remote addr ="+remote);
Log.d(TAG, "local addr ="+local);
Socket socket = null;
try {
socket = new Socket(remote, 80, local, 6000);
} catch (Exception e) {
Log.e(TAG, "Exception creating socket: " + e);
return;
}
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hi flickr");
} catch (Exception e) {
Log.e(TAG, "Exception writing to socket: " + e);
return;
}
}
private void onDefaultRequest() {
HttpParams params = new BasicHttpParams();
HttpGet get = new HttpGet("http://www.cnn.com");
HttpClient client = new DefaultHttpClient(params);
try {
HttpResponse response = client.execute(get);
Log.e(TAG, "response code = " + response.getStatusLine());
} catch (Exception e) {
Log.e(TAG, "Exception = " + e);
}
}
private void onDefaultSocket() {
InetAddress remote = null;
try {
remote = InetAddress.getByName("www.flickr.com");
} catch (Exception e) {
Log.e(TAG, "exception getting remote InetAddress: " + e);
return;
}
Log.e(TAG, "remote addr =" + remote);
Socket socket = null;
try {
socket = new Socket(remote, 80);
} catch (Exception e) {
Log.e(TAG, "Exception creating socket: " + e);
return;
}
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hi flickr");
Log.e(TAG, "written");
} catch (Exception e) {
Log.e(TAG, "Exception writing to socket: " + e);
return;
}
}
}