Merge "Add activity indicator icons to quick settings tiles." into klp-dev
BIN
packages/SystemUI/res/drawable-hdpi/ic_qs_signal_in.png
Normal file
After Width: | Height: | Size: 492 B |
BIN
packages/SystemUI/res/drawable-hdpi/ic_qs_signal_inout.png
Normal file
After Width: | Height: | Size: 615 B |
BIN
packages/SystemUI/res/drawable-hdpi/ic_qs_signal_out.png
Normal file
After Width: | Height: | Size: 471 B |
BIN
packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_in.png
Normal file
After Width: | Height: | Size: 492 B |
BIN
packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_inout.png
Normal file
After Width: | Height: | Size: 615 B |
BIN
packages/SystemUI/res/drawable-hdpi/ic_qs_wifi_out.png
Normal file
After Width: | Height: | Size: 471 B |
BIN
packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png
Normal file
After Width: | Height: | Size: 571 B |
BIN
packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png
Normal file
After Width: | Height: | Size: 719 B |
BIN
packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png
Normal file
After Width: | Height: | Size: 538 B |
BIN
packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png
Normal file
After Width: | Height: | Size: 503 B |
BIN
packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png
Normal file
After Width: | Height: | Size: 552 B |
BIN
packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png
Normal file
After Width: | Height: | Size: 501 B |
BIN
packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png
Normal file
After Width: | Height: | Size: 689 B |
After Width: | Height: | Size: 835 B |
BIN
packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png
Normal file
After Width: | Height: | Size: 675 B |
BIN
packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_in.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
BIN
packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_qs_signal_out.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
packages/SystemUI/res/drawable-mdpi/ic_qs_signal_in.png
Normal file
After Width: | Height: | Size: 425 B |
BIN
packages/SystemUI/res/drawable-mdpi/ic_qs_signal_inout.png
Normal file
After Width: | Height: | Size: 486 B |
BIN
packages/SystemUI/res/drawable-mdpi/ic_qs_signal_out.png
Normal file
After Width: | Height: | Size: 424 B |
BIN
packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_in.png
Normal file
After Width: | Height: | Size: 425 B |
BIN
packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_inout.png
Normal file
After Width: | Height: | Size: 486 B |
BIN
packages/SystemUI/res/drawable-mdpi/ic_qs_wifi_out.png
Normal file
After Width: | Height: | Size: 424 B |
BIN
packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_in.png
Normal file
After Width: | Height: | Size: 550 B |
BIN
packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_inout.png
Normal file
After Width: | Height: | Size: 721 B |
BIN
packages/SystemUI/res/drawable-xhdpi/ic_qs_signal_out.png
Normal file
After Width: | Height: | Size: 539 B |
BIN
packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_in.png
Normal file
After Width: | Height: | Size: 550 B |
BIN
packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_inout.png
Normal file
After Width: | Height: | Size: 721 B |
BIN
packages/SystemUI/res/drawable-xhdpi/ic_qs_wifi_out.png
Normal file
After Width: | Height: | Size: 539 B |
BIN
packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_in.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_inout.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
packages/SystemUI/res/drawable-xxhdpi/ic_qs_signal_out.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_in.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_inout.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
packages/SystemUI/res/drawable-xxhdpi/ic_qs_wifi_out.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
@ -13,32 +13,49 @@
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<LinearLayout
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="top"
|
||||
android:orientation="vertical">
|
||||
android:layout_gravity="top">
|
||||
<FrameLayout
|
||||
android:id="@+id/rssi_images"
|
||||
android:layout_marginTop="@dimen/qs_tile_margin_above_icon"
|
||||
android:layout_marginBottom="@dimen/qs_tile_margin_below_icon"
|
||||
android:layout_width="@dimen/qs_tile_icon_size"
|
||||
android:layout_height="@dimen/qs_tile_icon_size"
|
||||
android:layout_gravity="top|center_horizontal"
|
||||
android:layout_centerHorizontal="true"
|
||||
>
|
||||
<ImageView
|
||||
android:id="@+id/rssi_image"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_centerInParent="true"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/rssi_overlay_image"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_centerInParent="true"
|
||||
/>
|
||||
</FrameLayout>
|
||||
<ImageView
|
||||
android:id="@+id/activity_in"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_qs_signal_in"
|
||||
android:layout_toRightOf="@id/rssi_images"
|
||||
android:layout_alignBottom="@id/rssi_images"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/activity_out"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_qs_signal_out"
|
||||
android:layout_toRightOf="@id/rssi_images"
|
||||
android:layout_alignBottom="@id/rssi_images"
|
||||
/>
|
||||
<TextView
|
||||
style="@style/TextAppearance.QuickSettings.TileView"
|
||||
android:id="@+id/rssi_textview"
|
||||
@ -47,5 +64,7 @@
|
||||
android:layout_gravity="top|center_horizontal"
|
||||
android:gravity="top|center_horizontal"
|
||||
android:text="@string/quick_settings_rssi_label"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_below="@id/rssi_images"
|
||||
/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
57
packages/SystemUI/res/layout/quick_settings_tile_wifi.xml
Normal file
@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2013 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.
|
||||
-->
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="top">
|
||||
<ImageView
|
||||
android:id="@+id/image"
|
||||
android:layout_marginTop="@dimen/qs_tile_margin_above_icon"
|
||||
android:layout_marginBottom="@dimen/qs_tile_margin_below_icon"
|
||||
android:layout_width="@dimen/qs_tile_icon_size"
|
||||
android:layout_height="@dimen/qs_tile_icon_size"
|
||||
android:layout_gravity="top|center_horizontal"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:scaleType="centerInside"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/activity_in"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_qs_wifi_in"
|
||||
android:layout_toRightOf="@id/image"
|
||||
android:layout_alignBottom="@id/image"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/activity_out"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_qs_wifi_out"
|
||||
android:layout_toRightOf="@id/image"
|
||||
android:layout_alignBottom="@id/image"
|
||||
/>
|
||||
<TextView
|
||||
style="@style/TextAppearance.QuickSettings.TileView"
|
||||
android:id="@+id/text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="top|center_horizontal"
|
||||
android:gravity="top|center_horizontal"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_below="@id/image"
|
||||
/>
|
||||
</RelativeLayout>
|
@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import android.animation.ValueAnimator;
|
||||
import android.app.ActivityManagerNative;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
@ -62,6 +63,7 @@ import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.phone.QuickSettingsModel.ActivityState;
|
||||
import com.android.systemui.statusbar.phone.QuickSettingsModel.BluetoothState;
|
||||
import com.android.systemui.statusbar.phone.QuickSettingsModel.RSSIState;
|
||||
import com.android.systemui.statusbar.phone.QuickSettingsModel.State;
|
||||
@ -401,8 +403,9 @@ class QuickSettings {
|
||||
|
||||
private void addSystemTiles(ViewGroup parent, LayoutInflater inflater) {
|
||||
// Wi-fi
|
||||
final QuickSettingsBasicTile wifiTile
|
||||
= new QuickSettingsBasicTile(mContext);
|
||||
final QuickSettingsTileView wifiTile = (QuickSettingsTileView)
|
||||
inflater.inflate(R.layout.quick_settings_tile, parent, false);
|
||||
wifiTile.setContent(R.layout.quick_settings_tile_wifi, inflater);
|
||||
wifiTile.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@ -433,12 +436,15 @@ class QuickSettings {
|
||||
return true;
|
||||
}} );
|
||||
}
|
||||
mModel.addWifiTile(wifiTile, new QuickSettingsModel.RefreshCallback() {
|
||||
mModel.addWifiTile(wifiTile, new NetworkActivityCallback() {
|
||||
@Override
|
||||
public void refreshView(QuickSettingsTileView unused, State state) {
|
||||
public void refreshView(QuickSettingsTileView view, State state) {
|
||||
WifiState wifiState = (WifiState) state;
|
||||
wifiTile.setImageResource(wifiState.iconId);
|
||||
wifiTile.setText(wifiState.label);
|
||||
ImageView iv = (ImageView) view.findViewById(R.id.image);
|
||||
iv.setImageResource(wifiState.iconId);
|
||||
setActivity(view, wifiState);
|
||||
TextView tv = (TextView) view.findViewById(R.id.text);
|
||||
tv.setText(wifiState.label);
|
||||
wifiTile.setContentDescription(mContext.getString(
|
||||
R.string.accessibility_quick_settings_wifi,
|
||||
wifiState.signalContentDescription,
|
||||
@ -462,7 +468,7 @@ class QuickSettings {
|
||||
startSettingsActivity(intent);
|
||||
}
|
||||
});
|
||||
mModel.addRSSITile(rssiTile, new QuickSettingsModel.RefreshCallback() {
|
||||
mModel.addRSSITile(rssiTile, new NetworkActivityCallback() {
|
||||
@Override
|
||||
public void refreshView(QuickSettingsTileView view, State state) {
|
||||
RSSIState rssiState = (RSSIState) state;
|
||||
@ -478,6 +484,8 @@ class QuickSettings {
|
||||
} else {
|
||||
iov.setImageDrawable(null);
|
||||
}
|
||||
setActivity(view, rssiState);
|
||||
|
||||
tv.setText(state.label);
|
||||
view.setContentDescription(mContext.getResources().getString(
|
||||
R.string.accessibility_quick_settings_mobile,
|
||||
@ -942,4 +950,25 @@ class QuickSettings {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
private abstract static class NetworkActivityCallback
|
||||
implements QuickSettingsModel.RefreshCallback {
|
||||
private final long mDefaultDuration = new ValueAnimator().getDuration();
|
||||
private final long mShortDuration = mDefaultDuration / 3;
|
||||
|
||||
public void setActivity(View view, ActivityState state) {
|
||||
setVisibility(view.findViewById(R.id.activity_in), state.activityIn);
|
||||
setVisibility(view.findViewById(R.id.activity_out), state.activityOut);
|
||||
}
|
||||
|
||||
private void setVisibility(View view, boolean visible) {
|
||||
final float newAlpha = visible ? 1 : 0;
|
||||
if (view.getAlpha() != newAlpha) {
|
||||
view.animate()
|
||||
.setDuration(visible ? mShortDuration : mDefaultDuration)
|
||||
.alpha(newAlpha)
|
||||
.start();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -70,13 +70,17 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
|
||||
int batteryLevel;
|
||||
boolean pluggedIn;
|
||||
}
|
||||
static class RSSIState extends State {
|
||||
static class ActivityState extends State {
|
||||
boolean activityIn;
|
||||
boolean activityOut;
|
||||
}
|
||||
static class RSSIState extends ActivityState {
|
||||
int signalIconId;
|
||||
String signalContentDescription;
|
||||
int dataTypeIconId;
|
||||
String dataContentDescription;
|
||||
}
|
||||
static class WifiState extends State {
|
||||
static class WifiState extends ActivityState {
|
||||
String signalContentDescription;
|
||||
boolean connected;
|
||||
}
|
||||
@ -430,6 +434,7 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
|
||||
// NetworkSignalChanged callback
|
||||
@Override
|
||||
public void onWifiSignalChanged(boolean enabled, int wifiSignalIconId,
|
||||
boolean activityIn, boolean activityOut,
|
||||
String wifiSignalContentDescription, String enabledDesc) {
|
||||
// TODO: If view is in awaiting state, disable
|
||||
Resources r = mContext.getResources();
|
||||
@ -438,6 +443,8 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
|
||||
boolean wifiNotConnected = (wifiSignalIconId > 0) && (enabledDesc == null);
|
||||
mWifiState.enabled = enabled;
|
||||
mWifiState.connected = wifiConnected;
|
||||
mWifiState.activityIn = enabled && activityIn;
|
||||
mWifiState.activityOut = enabled && activityOut;
|
||||
if (wifiConnected) {
|
||||
mWifiState.iconId = wifiSignalIconId;
|
||||
mWifiState.label = removeDoubleQuotes(enabledDesc);
|
||||
@ -468,7 +475,8 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
|
||||
@Override
|
||||
public void onMobileDataSignalChanged(
|
||||
boolean enabled, int mobileSignalIconId, String signalContentDescription,
|
||||
int dataTypeIconId, String dataContentDescription, String enabledDesc) {
|
||||
int dataTypeIconId, boolean activityIn, boolean activityOut,
|
||||
String dataContentDescription,String enabledDesc) {
|
||||
if (deviceHasMobileData()) {
|
||||
// TODO: If view is in awaiting state, disable
|
||||
Resources r = mContext.getResources();
|
||||
@ -481,6 +489,8 @@ class QuickSettingsModel implements BluetoothStateChangeCallback,
|
||||
mRSSIState.dataTypeIconId = enabled && (dataTypeIconId > 0) && !mWifiState.enabled
|
||||
? dataTypeIconId
|
||||
: 0;
|
||||
mRSSIState.activityIn = enabled && activityIn;
|
||||
mRSSIState.activityOut = enabled && activityOut;
|
||||
mRSSIState.dataContentDescription = enabled && (dataTypeIconId > 0) && !mWifiState.enabled
|
||||
? dataContentDescription
|
||||
: r.getString(R.string.accessibility_no_data);
|
||||
|
@ -165,9 +165,11 @@ public class NetworkController extends BroadcastReceiver implements DemoMode {
|
||||
|
||||
public interface NetworkSignalChangedCallback {
|
||||
void onWifiSignalChanged(boolean enabled, int wifiSignalIconId,
|
||||
String wifitSignalContentDescriptionId, String description);
|
||||
boolean activityIn, boolean activityOut,
|
||||
String wifiSignalContentDescriptionId, String description);
|
||||
void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId,
|
||||
String mobileSignalContentDescriptionId, int dataTypeIconId,
|
||||
boolean activityIn, boolean activityOut,
|
||||
String dataTypeContentDescriptionId, String description);
|
||||
void onAirplaneModeChanged(boolean enabled);
|
||||
}
|
||||
@ -313,22 +315,33 @@ public class NetworkController extends BroadcastReceiver implements DemoMode {
|
||||
boolean wifiEnabled = mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature);
|
||||
String wifiDesc = wifiEnabled ?
|
||||
mWifiSsid : null;
|
||||
cb.onWifiSignalChanged(wifiEnabled, mQSWifiIconId, mContentDescriptionWifi, wifiDesc);
|
||||
boolean wifiIn = wifiEnabled && mWifiSsid != null
|
||||
&& (mWifiActivity == WifiManager.DATA_ACTIVITY_INOUT
|
||||
|| mWifiActivity == WifiManager.DATA_ACTIVITY_IN);
|
||||
boolean wifiOut = wifiEnabled && mWifiSsid != null
|
||||
&& (mWifiActivity == WifiManager.DATA_ACTIVITY_INOUT
|
||||
|| mWifiActivity == WifiManager.DATA_ACTIVITY_OUT);
|
||||
cb.onWifiSignalChanged(wifiEnabled, mQSWifiIconId, wifiIn, wifiOut,
|
||||
mContentDescriptionWifi, wifiDesc);
|
||||
|
||||
boolean mobileIn = mDataConnected && (mDataActivity == TelephonyManager.DATA_ACTIVITY_INOUT
|
||||
|| mDataActivity == TelephonyManager.DATA_ACTIVITY_IN);
|
||||
boolean mobileOut = mDataConnected && (mDataActivity == TelephonyManager.DATA_ACTIVITY_INOUT
|
||||
|| mDataActivity == TelephonyManager.DATA_ACTIVITY_OUT);
|
||||
if (isEmergencyOnly()) {
|
||||
cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId,
|
||||
mContentDescriptionPhoneSignal, mQSDataTypeIconId, mContentDescriptionDataType,
|
||||
null);
|
||||
mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut,
|
||||
mContentDescriptionDataType, null);
|
||||
} else {
|
||||
if (mIsWimaxEnabled && mWimaxConnected) {
|
||||
// Wimax is special
|
||||
cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId,
|
||||
mContentDescriptionPhoneSignal, mQSDataTypeIconId,
|
||||
mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut,
|
||||
mContentDescriptionDataType, mNetworkName);
|
||||
} else {
|
||||
// Normal mobile data
|
||||
cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId,
|
||||
mContentDescriptionPhoneSignal, mQSDataTypeIconId,
|
||||
mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut,
|
||||
mContentDescriptionDataType, mNetworkName);
|
||||
}
|
||||
}
|
||||
@ -1125,6 +1138,11 @@ public class NetworkController extends BroadcastReceiver implements DemoMode {
|
||||
+ " mBluetoothTetherIconId=0x" + Integer.toHexString(mBluetoothTetherIconId));
|
||||
}
|
||||
|
||||
// update QS
|
||||
for (NetworkSignalChangedCallback cb : mSignalsChangedCallbacks) {
|
||||
notifySignalsChangedCallbacks(cb);
|
||||
}
|
||||
|
||||
if (mLastPhoneSignalIconId != mPhoneSignalIconId
|
||||
|| mLastWifiIconId != mWifiIconId
|
||||
|| mLastWimaxIconId != mWimaxIconId
|
||||
@ -1136,9 +1154,6 @@ public class NetworkController extends BroadcastReceiver implements DemoMode {
|
||||
for (SignalCluster cluster : mSignalClusters) {
|
||||
refreshSignalCluster(cluster);
|
||||
}
|
||||
for (NetworkSignalChangedCallback cb : mSignalsChangedCallbacks) {
|
||||
notifySignalsChangedCallbacks(cb);
|
||||
}
|
||||
}
|
||||
|
||||
if (mLastAirplaneMode != mAirplaneMode) {
|
||||
|