diff options
Diffstat (limited to 'src/com/android/settings/wifi/AccessPointPreference.java')
-rw-r--r-- | src/com/android/settings/wifi/AccessPointPreference.java | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/com/android/settings/wifi/AccessPointPreference.java b/src/com/android/settings/wifi/AccessPointPreference.java new file mode 100644 index 0000000..10e0947 --- /dev/null +++ b/src/com/android/settings/wifi/AccessPointPreference.java @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2007 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.settings.wifi; + +import com.android.settings.R; + +import android.net.wifi.WifiManager; +import android.preference.Preference; +import android.view.View; +import android.widget.ImageView; + +public class AccessPointPreference extends Preference implements + AccessPointState.AccessPointStateCallback { + + // UI states + private static final int[] STATE_ENCRYPTED = { R.attr.state_encrypted }; + private static final int[] STATE_EMPTY = { }; + + // Signal strength indicator + private static final int UI_SIGNAL_LEVELS = 4; + + private WifiSettings mWifiSettings; + + private AccessPointState mState; + + public AccessPointPreference(WifiSettings wifiSettings, AccessPointState state) { + super(wifiSettings, null); + + mWifiSettings = wifiSettings; + mState = state; + + setWidgetLayoutResource(R.layout.preference_widget_wifi_signal); + + state.setCallback(this); + + refresh(); + } + + public void refresh() { + setTitle(mState.getHumanReadableSsid()); + setSummary(mState.getSummarizedStatus()); + + notifyChanged(); + } + + public void refreshAccessPointState() { + refresh(); + + // The ordering of access points could have changed due to the state change, so + // re-evaluate ordering + notifyHierarchyChanged(); + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + + ImageView signal = (ImageView) view.findViewById(R.id.signal); + if (mState.seen) { + signal.setImageResource(R.drawable.wifi_signal); + signal.setImageState(mState.hasSecurity() ? STATE_ENCRYPTED : STATE_EMPTY, true); + signal.setImageLevel(getUiSignalLevel()); + } else { + signal.setImageDrawable(null); + } + } + + private int getUiSignalLevel() { + return mState != null ? WifiManager.calculateSignalLevel(mState.signal, UI_SIGNAL_LEVELS) + : 0; + } + + /** + * Returns the {@link AccessPointState} associated with this preference. + * @return The {@link AccessPointState}. + */ + public AccessPointState getAccessPointState() { + return mState; + } + + @Override + public int compareTo(Preference another) { + if (!(another instanceof AccessPointPreference)) { + // Let normal preferences go before us. + // NOTE: we should only be compared to Preference in our + // category. + return 1; + } + + return mState.compareTo(((AccessPointPreference) another).mState); + } + +} + |