Loading packages/SystemUI/res/drawable/qs_hotspot_icon_off.xml 0 → 100644 +99 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (C) 2022 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. --> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> <target android:name="_R_G_L_0_G_D_1_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="133" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="1" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="_R_G_L_0_G_D_2_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="133" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="1" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="time_group"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="150" android:propertyName="translateX" android:startOffset="0" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" /> </set> </aapt:attr> </target> <aapt:attr name="android:drawable"> <vector android:width="24dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24"> <group android:name="_R_G"> <group android:name="_R_G_L_0_G" android:translateX="12" android:translateY="12"> <path android:name="_R_G_L_0_G_D_0_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -1 C-1.1,-1 -2,-0.1 -2,1 C-2,1.55 -1.77,2.05 -1.41,2.41 C-1.05,2.77 -0.55,3 0,3 C0.55,3 1.05,2.77 1.41,2.41 C1.77,2.05 2,1.55 2,1 C2,-0.1 1.1,-1 0,-1c " /> <path android:name="_R_G_L_0_G_D_1_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -5 C-3.31,-5 -6,-2.31 -6,1 C-6,2.66 -5.32,4.15 -4.24,5.24 C-4.24,5.24 -2.82,3.82 -2.82,3.82 C-3.55,3.1 -4,2.11 -4,1 C-4,-1.21 -2.21,-3 0,-3 C2.21,-3 4,-1.21 4,1 C4,2.11 3.55,3.1 2.82,3.82 C2.82,3.82 4.24,5.24 4.24,5.24 C5.32,4.15 6,2.66 6,1 C6,-2.31 3.31,-5 0,-5c " /> <path android:name="_R_G_L_0_G_D_2_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -9 C-5.52,-9 -10,-4.52 -10,1 C-10,3.76 -8.88,6.26 -7.07,8.07 C-7.07,8.07 -5.66,6.66 -5.66,6.66 C-7.1,5.21 -8,3.21 -8,1 C-8,-3.42 -4.42,-7 0,-7 C4.42,-7 8,-3.42 8,1 C8,3.21 7.1,5.2 5.65,6.65 C5.65,6.65 7.06,8.06 7.06,8.06 C8.88,6.26 10,3.76 10,1 C10,-4.52 5.52,-9 0,-9c " /> </group> </group> <group android:name="time_group" /> </vector> </aapt:attr> </animated-vector> packages/SystemUI/res/drawable/qs_hotspot_icon_on.xml 0 → 100644 +110 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (C) 2022 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. --> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> <target android:name="_R_G_L_0_G_D_1_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="0.3" android:valueTo="1" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="_R_G_L_0_G_D_2_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="167" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="0.3" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="167" android:valueFrom="0.3" android:valueTo="1" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="time_group"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="433" android:propertyName="translateX" android:startOffset="0" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" /> </set> </aapt:attr> </target> <aapt:attr name="android:drawable"> <vector android:width="24dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24"> <group android:name="_R_G"> <group android:name="_R_G_L_0_G" android:translateX="12" android:translateY="12"> <path android:name="_R_G_L_0_G_D_0_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -1 C-1.1,-1 -2,-0.1 -2,1 C-2,1.55 -1.77,2.05 -1.41,2.41 C-1.05,2.77 -0.55,3 0,3 C0.55,3 1.05,2.77 1.41,2.41 C1.77,2.05 2,1.55 2,1 C2,-0.1 1.1,-1 0,-1c " /> <path android:name="_R_G_L_0_G_D_1_P_0" android:fillAlpha="0.3" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -5 C-3.31,-5 -6,-2.31 -6,1 C-6,2.66 -5.32,4.15 -4.24,5.24 C-4.24,5.24 -2.82,3.82 -2.82,3.82 C-3.55,3.1 -4,2.11 -4,1 C-4,-1.21 -2.21,-3 0,-3 C2.21,-3 4,-1.21 4,1 C4,2.11 3.55,3.1 2.82,3.82 C2.82,3.82 4.24,5.24 4.24,5.24 C5.32,4.15 6,2.66 6,1 C6,-2.31 3.31,-5 0,-5c " /> <path android:name="_R_G_L_0_G_D_2_P_0" android:fillAlpha="0.3" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -9 C-5.52,-9 -10,-4.52 -10,1 C-10,3.76 -8.88,6.26 -7.07,8.07 C-7.07,8.07 -5.66,6.66 -5.66,6.66 C-7.1,5.21 -8,3.21 -8,1 C-8,-3.42 -4.42,-7 0,-7 C4.42,-7 8,-3.42 8,1 C8,3.21 7.1,5.2 5.65,6.65 C5.65,6.65 7.06,8.06 7.06,8.06 C8.88,6.26 10,3.76 10,1 C10,-4.52 5.52,-9 0,-9c " /> </group> </group> <group android:name="time_group" /> </vector> </aapt:attr> </animated-vector> packages/SystemUI/res/drawable/qs_hotspot_icon_search.xml 0 → 100644 +132 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (C) 2022 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. --> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> <target android:name="_R_G_L_0_G_D_1_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="0.3" android:valueTo="1" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="250" android:valueFrom="1" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="_R_G_L_0_G_D_2_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="167" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="0.3" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="167" android:valueFrom="0.3" android:valueTo="1" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="417" android:valueFrom="1" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="time_group"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="850" android:propertyName="translateX" android:startOffset="0" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" /> </set> </aapt:attr> </target> <aapt:attr name="android:drawable"> <vector android:width="24dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24"> <group android:name="_R_G"> <group android:name="_R_G_L_0_G" android:translateX="12" android:translateY="12"> <path android:name="_R_G_L_0_G_D_0_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -1 C-1.1,-1 -2,-0.1 -2,1 C-2,1.55 -1.77,2.05 -1.41,2.41 C-1.05,2.77 -0.55,3 0,3 C0.55,3 1.05,2.77 1.41,2.41 C1.77,2.05 2,1.55 2,1 C2,-0.1 1.1,-1 0,-1c " /> <path android:name="_R_G_L_0_G_D_1_P_0" android:fillAlpha="0.3" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -5 C-3.31,-5 -6,-2.31 -6,1 C-6,2.66 -5.32,4.15 -4.24,5.24 C-4.24,5.24 -2.82,3.82 -2.82,3.82 C-3.55,3.1 -4,2.11 -4,1 C-4,-1.21 -2.21,-3 0,-3 C2.21,-3 4,-1.21 4,1 C4,2.11 3.55,3.1 2.82,3.82 C2.82,3.82 4.24,5.24 4.24,5.24 C5.32,4.15 6,2.66 6,1 C6,-2.31 3.31,-5 0,-5c " /> <path android:name="_R_G_L_0_G_D_2_P_0" android:fillAlpha="0.3" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -9 C-5.52,-9 -10,-4.52 -10,1 C-10,3.76 -8.88,6.26 -7.07,8.07 C-7.07,8.07 -5.66,6.66 -5.66,6.66 C-7.1,5.21 -8,3.21 -8,1 C-8,-3.42 -4.42,-7 0,-7 C4.42,-7 8,-3.42 8,1 C8,3.21 7.1,5.2 5.65,6.65 C5.65,6.65 7.06,8.06 7.06,8.06 C8.88,6.26 10,3.76 10,1 C10,-4.52 5.52,-9 0,-9c " /> </group> </group> <group android:name="time_group" /> </vector> </aapt:attr> </animated-vector> packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java +4 −8 Original line number Diff line number Diff line Loading @@ -51,8 +51,6 @@ import javax.inject.Inject; /** Quick settings tile: Hotspot **/ public class HotspotTile extends QSTileImpl<BooleanState> { private final Icon mEnabledStatic = ResourceIcon.get(R.drawable.ic_hotspot); private final HotspotController mHotspotController; private final DataSaverController mDataSaverController; Loading Loading @@ -129,9 +127,6 @@ public class HotspotTile extends QSTileImpl<BooleanState> { @Override protected void handleUpdateState(BooleanState state, Object arg) { final boolean transientEnabling = arg == ARG_SHOW_TRANSIENT_ENABLING; if (state.slash == null) { state.slash = new SlashState(); } final int numConnectedDevices; final boolean isTransient = transientEnabling || mHotspotController.isHotspotTransient(); Loading @@ -150,13 +145,14 @@ public class HotspotTile extends QSTileImpl<BooleanState> { isDataSaverEnabled = mDataSaverController.isDataSaverEnabled(); } state.icon = mEnabledStatic; state.label = mContext.getString(R.string.quick_settings_hotspot_label); state.isTransient = isTransient; state.slash.isSlashed = !state.value && !state.isTransient; if (state.isTransient) { state.icon = ResourceIcon.get( com.android.internal.R.drawable.ic_hotspot_transient_animation); R.drawable.qs_hotspot_icon_search); } else { state.icon = ResourceIcon.get(state.value ? R.drawable.qs_hotspot_icon_on : R.drawable.qs_hotspot_icon_off); } state.expandedAccessibilityClassName = Switch.class.getName(); state.contentDescription = state.label; Loading packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.DataSaverController; import com.android.systemui.statusbar.policy.HotspotController; Loading Loading @@ -122,4 +123,40 @@ public class HotspotTileTest extends SysuiTestCase { .isEqualTo(mContext.getString(R.string.wifitrackerlib_admin_restricted_network)); mockitoSession.finishMocking(); } @Test public void testIcon_whenDisabled_isOffState() { QSTile.BooleanState state = new QSTile.BooleanState(); when(mHotspotController.isHotspotTransient()).thenReturn(false); when(mHotspotController.isHotspotEnabled()).thenReturn(false); mTile.handleUpdateState(state, /* arg= */ null); assertThat(state.icon) .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_hotspot_icon_off)); } @Test public void testIcon_whenTransient_isSearchState() { QSTile.BooleanState state = new QSTile.BooleanState(); when(mHotspotController.isHotspotTransient()).thenReturn(true); when(mHotspotController.isHotspotEnabled()).thenReturn(true); mTile.handleUpdateState(state, /* arg= */ null); assertThat(state.icon) .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_hotspot_icon_search)); } @Test public void testIcon_whenEnabled_isOnState() { QSTile.BooleanState state = new QSTile.BooleanState(); when(mHotspotController.isHotspotTransient()).thenReturn(false); when(mHotspotController.isHotspotEnabled()).thenReturn(true); mTile.handleUpdateState(state, /* arg= */ null); assertThat(state.icon) .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_hotspot_icon_on)); } } Loading
packages/SystemUI/res/drawable/qs_hotspot_icon_off.xml 0 → 100644 +99 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (C) 2022 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. --> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> <target android:name="_R_G_L_0_G_D_1_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="133" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="1" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="_R_G_L_0_G_D_2_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="133" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="1" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="time_group"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="150" android:propertyName="translateX" android:startOffset="0" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" /> </set> </aapt:attr> </target> <aapt:attr name="android:drawable"> <vector android:width="24dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24"> <group android:name="_R_G"> <group android:name="_R_G_L_0_G" android:translateX="12" android:translateY="12"> <path android:name="_R_G_L_0_G_D_0_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -1 C-1.1,-1 -2,-0.1 -2,1 C-2,1.55 -1.77,2.05 -1.41,2.41 C-1.05,2.77 -0.55,3 0,3 C0.55,3 1.05,2.77 1.41,2.41 C1.77,2.05 2,1.55 2,1 C2,-0.1 1.1,-1 0,-1c " /> <path android:name="_R_G_L_0_G_D_1_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -5 C-3.31,-5 -6,-2.31 -6,1 C-6,2.66 -5.32,4.15 -4.24,5.24 C-4.24,5.24 -2.82,3.82 -2.82,3.82 C-3.55,3.1 -4,2.11 -4,1 C-4,-1.21 -2.21,-3 0,-3 C2.21,-3 4,-1.21 4,1 C4,2.11 3.55,3.1 2.82,3.82 C2.82,3.82 4.24,5.24 4.24,5.24 C5.32,4.15 6,2.66 6,1 C6,-2.31 3.31,-5 0,-5c " /> <path android:name="_R_G_L_0_G_D_2_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -9 C-5.52,-9 -10,-4.52 -10,1 C-10,3.76 -8.88,6.26 -7.07,8.07 C-7.07,8.07 -5.66,6.66 -5.66,6.66 C-7.1,5.21 -8,3.21 -8,1 C-8,-3.42 -4.42,-7 0,-7 C4.42,-7 8,-3.42 8,1 C8,3.21 7.1,5.2 5.65,6.65 C5.65,6.65 7.06,8.06 7.06,8.06 C8.88,6.26 10,3.76 10,1 C10,-4.52 5.52,-9 0,-9c " /> </group> </group> <group android:name="time_group" /> </vector> </aapt:attr> </animated-vector>
packages/SystemUI/res/drawable/qs_hotspot_icon_on.xml 0 → 100644 +110 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (C) 2022 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. --> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> <target android:name="_R_G_L_0_G_D_1_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="0.3" android:valueTo="1" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="_R_G_L_0_G_D_2_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="167" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="0.3" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="167" android:valueFrom="0.3" android:valueTo="1" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="time_group"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="433" android:propertyName="translateX" android:startOffset="0" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" /> </set> </aapt:attr> </target> <aapt:attr name="android:drawable"> <vector android:width="24dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24"> <group android:name="_R_G"> <group android:name="_R_G_L_0_G" android:translateX="12" android:translateY="12"> <path android:name="_R_G_L_0_G_D_0_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -1 C-1.1,-1 -2,-0.1 -2,1 C-2,1.55 -1.77,2.05 -1.41,2.41 C-1.05,2.77 -0.55,3 0,3 C0.55,3 1.05,2.77 1.41,2.41 C1.77,2.05 2,1.55 2,1 C2,-0.1 1.1,-1 0,-1c " /> <path android:name="_R_G_L_0_G_D_1_P_0" android:fillAlpha="0.3" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -5 C-3.31,-5 -6,-2.31 -6,1 C-6,2.66 -5.32,4.15 -4.24,5.24 C-4.24,5.24 -2.82,3.82 -2.82,3.82 C-3.55,3.1 -4,2.11 -4,1 C-4,-1.21 -2.21,-3 0,-3 C2.21,-3 4,-1.21 4,1 C4,2.11 3.55,3.1 2.82,3.82 C2.82,3.82 4.24,5.24 4.24,5.24 C5.32,4.15 6,2.66 6,1 C6,-2.31 3.31,-5 0,-5c " /> <path android:name="_R_G_L_0_G_D_2_P_0" android:fillAlpha="0.3" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -9 C-5.52,-9 -10,-4.52 -10,1 C-10,3.76 -8.88,6.26 -7.07,8.07 C-7.07,8.07 -5.66,6.66 -5.66,6.66 C-7.1,5.21 -8,3.21 -8,1 C-8,-3.42 -4.42,-7 0,-7 C4.42,-7 8,-3.42 8,1 C8,3.21 7.1,5.2 5.65,6.65 C5.65,6.65 7.06,8.06 7.06,8.06 C8.88,6.26 10,3.76 10,1 C10,-4.52 5.52,-9 0,-9c " /> </group> </group> <group android:name="time_group" /> </vector> </aapt:attr> </animated-vector>
packages/SystemUI/res/drawable/qs_hotspot_icon_search.xml 0 → 100644 +132 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?><!-- ~ Copyright (C) 2022 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. --> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> <target android:name="_R_G_L_0_G_D_1_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="0.3" android:valueTo="1" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="250" android:valueFrom="1" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="_R_G_L_0_G_D_2_P_0"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="167" android:propertyName="fillAlpha" android:startOffset="0" android:valueFrom="0.3" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="167" android:valueFrom="0.3" android:valueTo="1" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> <objectAnimator android:duration="250" android:propertyName="fillAlpha" android:startOffset="417" android:valueFrom="1" android:valueTo="0.3" android:valueType="floatType"> <aapt:attr name="android:interpolator"> <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> </aapt:attr> </objectAnimator> </set> </aapt:attr> </target> <target android:name="time_group"> <aapt:attr name="android:animation"> <set android:ordering="together"> <objectAnimator android:duration="850" android:propertyName="translateX" android:startOffset="0" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" /> </set> </aapt:attr> </target> <aapt:attr name="android:drawable"> <vector android:width="24dp" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24"> <group android:name="_R_G"> <group android:name="_R_G_L_0_G" android:translateX="12" android:translateY="12"> <path android:name="_R_G_L_0_G_D_0_P_0" android:fillAlpha="1" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -1 C-1.1,-1 -2,-0.1 -2,1 C-2,1.55 -1.77,2.05 -1.41,2.41 C-1.05,2.77 -0.55,3 0,3 C0.55,3 1.05,2.77 1.41,2.41 C1.77,2.05 2,1.55 2,1 C2,-0.1 1.1,-1 0,-1c " /> <path android:name="_R_G_L_0_G_D_1_P_0" android:fillAlpha="0.3" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -5 C-3.31,-5 -6,-2.31 -6,1 C-6,2.66 -5.32,4.15 -4.24,5.24 C-4.24,5.24 -2.82,3.82 -2.82,3.82 C-3.55,3.1 -4,2.11 -4,1 C-4,-1.21 -2.21,-3 0,-3 C2.21,-3 4,-1.21 4,1 C4,2.11 3.55,3.1 2.82,3.82 C2.82,3.82 4.24,5.24 4.24,5.24 C5.32,4.15 6,2.66 6,1 C6,-2.31 3.31,-5 0,-5c " /> <path android:name="_R_G_L_0_G_D_2_P_0" android:fillAlpha="0.3" android:fillColor="#ffffff" android:fillType="nonZero" android:pathData=" M0 -9 C-5.52,-9 -10,-4.52 -10,1 C-10,3.76 -8.88,6.26 -7.07,8.07 C-7.07,8.07 -5.66,6.66 -5.66,6.66 C-7.1,5.21 -8,3.21 -8,1 C-8,-3.42 -4.42,-7 0,-7 C4.42,-7 8,-3.42 8,1 C8,3.21 7.1,5.2 5.65,6.65 C5.65,6.65 7.06,8.06 7.06,8.06 C8.88,6.26 10,3.76 10,1 C10,-4.52 5.52,-9 0,-9c " /> </group> </group> <group android:name="time_group" /> </vector> </aapt:attr> </animated-vector>
packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java +4 −8 Original line number Diff line number Diff line Loading @@ -51,8 +51,6 @@ import javax.inject.Inject; /** Quick settings tile: Hotspot **/ public class HotspotTile extends QSTileImpl<BooleanState> { private final Icon mEnabledStatic = ResourceIcon.get(R.drawable.ic_hotspot); private final HotspotController mHotspotController; private final DataSaverController mDataSaverController; Loading Loading @@ -129,9 +127,6 @@ public class HotspotTile extends QSTileImpl<BooleanState> { @Override protected void handleUpdateState(BooleanState state, Object arg) { final boolean transientEnabling = arg == ARG_SHOW_TRANSIENT_ENABLING; if (state.slash == null) { state.slash = new SlashState(); } final int numConnectedDevices; final boolean isTransient = transientEnabling || mHotspotController.isHotspotTransient(); Loading @@ -150,13 +145,14 @@ public class HotspotTile extends QSTileImpl<BooleanState> { isDataSaverEnabled = mDataSaverController.isDataSaverEnabled(); } state.icon = mEnabledStatic; state.label = mContext.getString(R.string.quick_settings_hotspot_label); state.isTransient = isTransient; state.slash.isSlashed = !state.value && !state.isTransient; if (state.isTransient) { state.icon = ResourceIcon.get( com.android.internal.R.drawable.ic_hotspot_transient_animation); R.drawable.qs_hotspot_icon_search); } else { state.icon = ResourceIcon.get(state.value ? R.drawable.qs_hotspot_icon_on : R.drawable.qs_hotspot_icon_off); } state.expandedAccessibilityClassName = Switch.class.getName(); state.contentDescription = state.label; Loading
packages/SystemUI/tests/src/com/android/systemui/qs/tiles/HotspotTileTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.DataSaverController; import com.android.systemui.statusbar.policy.HotspotController; Loading Loading @@ -122,4 +123,40 @@ public class HotspotTileTest extends SysuiTestCase { .isEqualTo(mContext.getString(R.string.wifitrackerlib_admin_restricted_network)); mockitoSession.finishMocking(); } @Test public void testIcon_whenDisabled_isOffState() { QSTile.BooleanState state = new QSTile.BooleanState(); when(mHotspotController.isHotspotTransient()).thenReturn(false); when(mHotspotController.isHotspotEnabled()).thenReturn(false); mTile.handleUpdateState(state, /* arg= */ null); assertThat(state.icon) .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_hotspot_icon_off)); } @Test public void testIcon_whenTransient_isSearchState() { QSTile.BooleanState state = new QSTile.BooleanState(); when(mHotspotController.isHotspotTransient()).thenReturn(true); when(mHotspotController.isHotspotEnabled()).thenReturn(true); mTile.handleUpdateState(state, /* arg= */ null); assertThat(state.icon) .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_hotspot_icon_search)); } @Test public void testIcon_whenEnabled_isOnState() { QSTile.BooleanState state = new QSTile.BooleanState(); when(mHotspotController.isHotspotTransient()).thenReturn(false); when(mHotspotController.isHotspotEnabled()).thenReturn(true); mTile.handleUpdateState(state, /* arg= */ null); assertThat(state.icon) .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_hotspot_icon_on)); } }