/* //device/apps/Settings/src/com/android/settings/Keyguard.java ** ** Copyright 2006, The Android Open Source Project ** ** 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. */ package com.android.development; import android.app.Activity; import android.app.ActivityManagerNative; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageManager.NameNotFoundException; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.os.RemoteException; import android.os.Handler; import android.os.Message; import android.os.IBinder; import android.os.Parcel; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.ServiceManager; import android.os.ServiceManagerNative; import android.os.SystemClock; import android.provider.Settings; import android.os.Bundle; import android.util.Log; import android.view.IWindowManager; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemSelectedListener; import com.android.internal.telephony.Phone; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Map; public class Connectivity extends Activity { private static final String TAG = "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; private long mDCOnDuration = 120000; private long mDCOffDuration = 120000; private int mDCCycleCount = 0; private Button mStartScreenCycleButton; private Button mStopScreenCycleButton; private EditText mSCOnDurationEdit; private EditText mSCOffDurationEdit; private TextView mSCCycleCountView; private long mSCOnDuration = 120000; 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; private PowerManager mPm; private ConnectivityManager mCm; private WakeLock mWakeLock = null; private WakeLock mScreenonWakeLock = null; private boolean mScreenOffToggleRunning = false; private boolean mScreenOff = false; private static final String CONNECTIVITY_TEST_ALARM = "com.android.development.CONNECTIVITY_TEST_ALARM"; private static final String TEST_ALARM_EXTRA = "CONNECTIVITY_TEST_EXTRA"; private static final String TEST_ALARM_ON_EXTRA = "CONNECTIVITY_TEST_ON_EXTRA"; private static final String TEST_ALARM_OFF_EXTRA = "CONNECTIVITY_TEST_OFF_EXTRA"; private static final String TEST_ALARM_CYCLE_EXTRA = "CONNECTIVITY_TEST_CYCLE_EXTRA"; private static final String SCREEN_ON = "SCREEN_ON"; private static final String SCREEN_OFF = "SCREEN_OFF"; public BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(CONNECTIVITY_TEST_ALARM)) { String extra = (String)intent.getExtra(TEST_ALARM_EXTRA); PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); Long on = new Long(120000); Long off = new Long(120000); int cycle = 0; try { on = Long.parseLong((String)intent.getExtra(TEST_ALARM_ON_EXTRA)); off = Long.parseLong((String)intent.getExtra(TEST_ALARM_OFF_EXTRA)); cycle = Integer.parseInt((String)intent.getExtra(TEST_ALARM_CYCLE_EXTRA)); } catch (Exception e) {} if (extra.equals(SCREEN_ON)) { mScreenonWakeLock = mPm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "ConnectivityTest"); mScreenonWakeLock.acquire(); mSCCycleCount = cycle+1; mSCOnDuration = on; mSCOffDuration = off; mSCCycleCountView.setText(Integer.toString(mSCCycleCount)); scheduleAlarm(mSCOnDuration, SCREEN_OFF); } else if (extra.equals(SCREEN_OFF)) { mSCCycleCount = cycle; mSCOnDuration = on; mSCOffDuration = off; mScreenonWakeLock.release(); mScreenonWakeLock = null; scheduleAlarm(mSCOffDuration, SCREEN_ON); pm.goToSleep(SystemClock.uptimeMillis()); } } } }; public Handler mHandler2 = new Handler() { public void handleMessage(Message msg) { switch(msg.what) { case EVENT_TOGGLE_WIFI: Log.e(TAG, "EVENT_TOGGLE_WIFI"); if (mDelayedCycleStarted && mWm != null) { long delay; switch (mWm.getWifiState()) { case WifiManager.WIFI_STATE_ENABLED: case WifiManager.WIFI_STATE_ENABLING: mWm.setWifiEnabled(false); delay = mDCOffDuration; break; default: mWm.setWifiEnabled(true); delay = mDCOnDuration; mDCCycleCount++; mDCCycleCountView.setText(Integer.toString(mDCCycleCount)); } sendMessageDelayed(obtainMessage(EVENT_TOGGLE_WIFI), delay); } break; } } }; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.connectivity); mWm = (WifiManager)getSystemService(Context.WIFI_SERVICE); 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); mStartDelayedCycleButton = (Button)findViewById(R.id.startDelayedCycle); mStartDelayedCycleButton.setOnClickListener(mStartDelayedCycleClicked); mStopDelayedCycleButton = (Button)findViewById(R.id.stopDelayedCycle); mStopDelayedCycleButton.setOnClickListener(mStopDelayedCycleClicked); mDCOnDurationEdit = (EditText)findViewById(R.id.dc_wifi_on_duration); mDCOnDurationEdit.setText(Long.toString(mDCOnDuration)); mDCOffDurationEdit = (EditText)findViewById(R.id.dc_wifi_off_duration); mDCOffDurationEdit.setText(Long.toString(mDCOffDuration)); 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); mSCOnDurationEdit = (EditText)findViewById(R.id.sc_wifi_on_duration); mSCOnDurationEdit.setText(Long.toString(mSCOnDuration)); mSCOffDurationEdit = (EditText)findViewById(R.id.sc_wifi_off_duration); mSCOffDurationEdit.setText(Long.toString(mSCOffDuration)); 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); registerReceiver(mReceiver, new IntentFilter(CONNECTIVITY_TEST_ALARM)); } @Override public void onResume() { super.onResume(); } private View.OnClickListener mStartDelayedCycleClicked = 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); } } } }; 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) { 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); Intent i = new Intent(CONNECTIVITY_TEST_ALARM); i.putExtra(TEST_ALARM_EXTRA, eventType); i.putExtra(TEST_ALARM_ON_EXTRA, Long.toString(mSCOnDuration)); i.putExtra(TEST_ALARM_OFF_EXTRA, Long.toString(mSCOffDuration)); i.putExtra(TEST_ALARM_CYCLE_EXTRA, Integer.toString(mSCCycleCount)); PendingIntent p = PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT); am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + delayMs, p); } private View.OnClickListener mStopScreenCycleClicked = new View.OnClickListener() { public void onClick(View v) { } }; private View.OnClickListener mStartMmsClicked = new View.OnClickListener() { public void onClick(View v) { mCm.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 View.OnClickListener mStartHiPriClicked = new View.OnClickListener() { public void onClick(View v) { mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_HIPRI); } }; private View.OnClickListener mStopHiPriClicked = new View.OnClickListener() { public void onClick(View v) { mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_HIPRI); } }; private View.OnClickListener mCrashClicked = new View.OnClickListener() { public void onClick(View v) { ConnectivityManager foo = null; foo.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_MMS); } }; }