Skip to content

Commit 8539c80

Browse files
libxzrfinish0314
authored andcommitted
SystemUI: Introduce 5G toggle in internet connectivity dialog
Most of time, 5G is still considered too power hungry compared to the improvement of network speed. Provide users with a quick and convenient way to toggle this function so that it can only be used when needed. AngelaCooljx: Port to Android14 QPR1 R15Hi: port to Android14 QPR3 neobuddy89: Layout fixes for 5G toggle, add missing code bits Arman-ATI: Adapted for A16 neobuddy89: Improvised for A16 Change-Id: Ieee71904220e2d472d31045ca926b5c854299eed Signed-off-by: LibXZR <i@xzr.moe> Signed-off-by: Pranav Vashi <neobuddy89@gmail.com> Signed-off-by: Dmitrii <bankersenator@gmail.com>
1 parent c0a544e commit 8539c80

4 files changed

Lines changed: 201 additions & 70 deletions

File tree

packages/SystemUI/res/layout/internet_connectivity_dialog.xml

Lines changed: 119 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -128,67 +128,133 @@
128128

129129
<LinearLayout
130130
android:id="@+id/mobile_network_layout"
131-
style="@style/InternetDialog.Network">
131+
style="@style/InternetDialog.Network"
132+
android:layout_height="wrap_content"
133+
android:orientation="vertical"
134+
android:visibility="gone">
132135

133-
<FrameLayout
134-
android:layout_width="wrap_content"
135-
android:layout_height="24dp"
136-
android:clickable="false"
137-
android:layout_gravity="center_vertical|start">
138-
<ImageView
139-
android:id="@+id/signal_icon"
140-
android:autoMirrored="true"
136+
<LinearLayout
137+
android:id="@+id/mobile_network_sublayout"
138+
android:layout_height="wrap_content"
139+
android:layout_width="match_parent">
140+
<FrameLayout
141+
android:layout_width="wrap_content"
142+
android:layout_height="24dp"
143+
android:clickable="false"
144+
android:layout_gravity="center_vertical|start">
145+
<ImageView
146+
android:id="@+id/signal_icon"
147+
android:autoMirrored="true"
148+
android:layout_width="wrap_content"
149+
android:layout_height="wrap_content"
150+
android:layout_gravity="center"/>
151+
</FrameLayout>
152+
153+
<LinearLayout
154+
android:layout_weight="1"
155+
android:orientation="vertical"
156+
android:clickable="false"
141157
android:layout_width="wrap_content"
142158
android:layout_height="wrap_content"
143-
android:layout_gravity="center"/>
144-
</FrameLayout>
159+
android:minHeight="72dp"
160+
android:gravity="center_vertical">
161+
<TextView
162+
android:id="@+id/mobile_title"
163+
android:maxLines="1"
164+
style="@style/InternetDialog.NetworkTitle"/>
165+
<TextView
166+
android:id="@+id/mobile_summary"
167+
style="@style/InternetDialog.NetworkSummary"/>
168+
<TextView
169+
android:id="@+id/airplane_mode_summary"
170+
android:text="@string/airplane_mode"
171+
android:visibility="gone"
172+
style="@style/InternetDialog.NetworkSummary"/>
173+
</LinearLayout>
174+
175+
<View
176+
android:id="@+id/mobile_toggle_divider"
177+
android:layout_width="1dp"
178+
android:layout_height="28dp"
179+
android:layout_marginStart="7dp"
180+
android:layout_marginEnd="16dp"
181+
android:layout_gravity="center_vertical"/>
182+
183+
<FrameLayout
184+
android:layout_width="@dimen/settingslib_switch_track_width"
185+
android:layout_height="48dp"
186+
android:layout_gravity="end|center_vertical">
187+
<Switch
188+
android:id="@+id/mobile_toggle"
189+
android:contentDescription="@string/mobile_data_settings_title"
190+
android:switchMinWidth="@dimen/settingslib_switch_track_width"
191+
android:layout_gravity="center"
192+
android:layout_width="@dimen/settingslib_switch_track_width"
193+
android:layout_height="match_parent"
194+
android:track="@drawable/settingslib_track_selector"
195+
android:thumb="@drawable/settingslib_thumb_selector"
196+
android:theme="@style/MainSwitch.Settingslib"/>
197+
</FrameLayout>
145198

146-
<LinearLayout
147-
android:layout_weight="1"
148-
android:orientation="vertical"
149-
android:clickable="false"
150-
android:layout_width="wrap_content"
151-
android:layout_height="wrap_content"
152-
android:minHeight="72dp"
153-
android:gravity="center_vertical">
154-
<TextView
155-
android:id="@+id/mobile_title"
156-
android:maxLines="1"
157-
style="@style/InternetDialog.NetworkTitle"/>
158-
<TextView
159-
android:id="@+id/mobile_summary"
160-
style="@style/InternetDialog.NetworkSummary"/>
161-
<TextView
162-
android:id="@+id/airplane_mode_summary"
163-
android:text="@string/airplane_mode"
164-
android:visibility="gone"
165-
style="@style/InternetDialog.NetworkSummary"/>
166199
</LinearLayout>
167200

168-
<View
169-
android:id="@+id/mobile_toggle_divider"
170-
android:layout_width="1dp"
171-
android:layout_height="28dp"
172-
android:layout_marginStart="7dp"
173-
android:layout_marginEnd="16dp"
174-
android:layout_gravity="center_vertical"/>
175-
176-
<FrameLayout
177-
android:layout_width="@dimen/settingslib_switch_track_width"
178-
android:layout_height="48dp"
179-
android:layout_gravity="end|center_vertical">
180-
<Switch
181-
android:id="@+id/mobile_toggle"
182-
android:contentDescription="@string/mobile_data_settings_title"
183-
android:switchMinWidth="@dimen/settingslib_switch_track_width"
184-
android:layout_gravity="center"
201+
<LinearLayout
202+
android:id="@+id/fiveg_layout"
203+
android:layout_height="wrap_content"
204+
android:layout_width="match_parent">
205+
<FrameLayout
206+
android:layout_width="wrap_content"
207+
android:layout_height="24dp"
208+
android:clickable="false"
209+
android:layout_gravity="center_vertical|start">
210+
<ImageView
211+
android:id="@+id/fiveg_icon"
212+
android:autoMirrored="true"
213+
android:layout_width="wrap_content"
214+
android:layout_height="wrap_content"
215+
android:layout_gravity="center"
216+
android:src="@drawable/ic_5g_mobiledata"/>
217+
</FrameLayout>
218+
219+
<LinearLayout
220+
android:layout_weight="1"
221+
android:orientation="vertical"
222+
android:clickable="false"
223+
android:layout_width="wrap_content"
224+
android:layout_height="wrap_content"
225+
android:minHeight="48dp"
226+
android:gravity="center_vertical">
227+
<TextView
228+
android:id="@+id/fiveg_title"
229+
android:maxLines="1"
230+
style="@style/InternetDialog.NetworkTitle"/>
231+
</LinearLayout>
232+
233+
<View
234+
android:id="@+id/fiveg_toggle_divider"
235+
android:layout_width="1dp"
236+
android:layout_height="28dp"
237+
android:layout_marginStart="7dp"
238+
android:layout_marginEnd="16dp"
239+
android:layout_gravity="center_vertical"/>
240+
241+
<FrameLayout
185242
android:layout_width="@dimen/settingslib_switch_track_width"
186-
android:layout_height="match_parent"
187-
android:track="@drawable/settingslib_track_selector"
188-
android:thumb="@drawable/settingslib_thumb_selector"
189-
android:theme="@style/MainSwitch.Settingslib"/>
190-
</FrameLayout>
243+
android:layout_height="48dp"
244+
android:layout_gravity="end|center_vertical">
245+
<Switch
246+
android:id="@+id/fiveg_toggle"
247+
android:contentDescription="@string/enable_fiveg"
248+
android:switchMinWidth="@dimen/settingslib_switch_track_width"
249+
android:layout_gravity="center"
250+
android:layout_width="@dimen/settingslib_switch_track_width"
251+
android:layout_height="match_parent"
252+
android:track="@drawable/settingslib_track_selector"
253+
android:thumb="@drawable/settingslib_thumb_selector"
254+
android:theme="@style/MainSwitch.Settingslib"/>
255+
</FrameLayout>
191256

257+
</LinearLayout>
192258
</LinearLayout>
193259

194260
<ViewStub android:id="@+id/secondary_mobile_network_stub"

packages/SystemUI/res/values/avium_srting.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,7 @@
6060
<string name="media_blur_clock_title">音乐模糊时钟</string>
6161
<string name="default_song_title">独享时光</string>
6262
<string name="default_song_artist">待你开启</string>
63-
63+
64+
<!-- 5G toggle in Internet Dialog -->
65+
<string name="enable_fiveg">Enable 5G</string>
6466
</resources>

packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDetailsContentController.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import android.os.Handler;
4545
import android.os.UserHandle;
4646
import android.provider.Settings;
47+
import android.sysprop.TelephonyProperties;
4748
import android.telephony.AccessNetworkConstants;
4849
import android.telephony.NetworkRegistrationInfo;
4950
import android.telephony.ServiceState;
@@ -1041,6 +1042,41 @@ void setAutoDataSwitchMobileDataPolicy(int subId, boolean enable) {
10411042
tm.setMobileDataPolicyEnabled(TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH, enable);
10421043
}
10431044

1045+
boolean isFivegSupported() {
1046+
List<Integer> list = TelephonyProperties.default_network();
1047+
for (int type : list) {
1048+
if (type > 22)
1049+
return true;
1050+
}
1051+
return false;
1052+
}
1053+
1054+
boolean isFivegEnabled() {
1055+
if (mTelephonyManager == null
1056+
|| (mTelephonyManager.getAllowedNetworkTypesForReason(
1057+
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER)
1058+
& TelephonyManager.NETWORK_TYPE_BITMASK_NR) == 0) {
1059+
return false;
1060+
}
1061+
return true;
1062+
}
1063+
1064+
void setFivegEnabled(boolean enabled) {
1065+
if (mTelephonyManager == null)
1066+
return;
1067+
1068+
long newType = mTelephonyManager.getAllowedNetworkTypesForReason(
1069+
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER);
1070+
if (enabled)
1071+
newType |= TelephonyManager.NETWORK_TYPE_BITMASK_NR;
1072+
else
1073+
newType &= ~TelephonyManager.NETWORK_TYPE_BITMASK_NR;
1074+
1075+
mTelephonyManager.setAllowedNetworkTypesForReason(
1076+
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER,
1077+
newType);
1078+
}
1079+
10441080
boolean isDataStateInService(int subId) {
10451081
final ServiceState serviceState = mSubIdServiceState.getOrDefault(subId,
10461082
new ServiceState());

packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateLegacy.java

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import android.widget.ProgressBar;
4848
import android.widget.Switch;
4949
import android.widget.TextView;
50+
import com.android.settingslib.Utils;
5051

5152
import androidx.annotation.MainThread;
5253
import androidx.annotation.NonNull;
@@ -146,6 +147,12 @@ public class InternetDialogDelegateLegacy implements
146147
private TextView mAirplaneModeSummaryText;
147148
private Switch mMobileDataToggle;
148149
private View mMobileToggleDivider;
150+
private LinearLayout mFivegLayout;
151+
private ImageView mFivegIcon;
152+
private TextView mFivegTitleText;
153+
private Switch mFivegToggle;
154+
private View mFivegToggleDivider;
155+
private Switch mHotspotToggle;
149156
private Switch mWiFiToggle;
150157
private Button mDoneButton;
151158

@@ -183,6 +190,9 @@ public class InternetDialogDelegateLegacy implements
183190
@VisibleForTesting
184191
MutableLiveData<InternetContent> mDataInternetContent = new MutableLiveData<>();
185192

193+
// 5g toggle
194+
private final boolean mShouldShowFivegToggle;
195+
186196
@AssistedFactory
187197
public interface Factory {
188198
InternetDialogDelegateLegacy create(
@@ -236,6 +246,7 @@ public InternetDialogDelegateLegacy(
236246
mUiEventLogger = uiEventLogger;
237247
mDialogTransitionAnimator = dialogTransitionAnimator;
238248
mAdapter = new InternetAdapter(mInternetDetailsContentController, coroutineScope);
249+
mShouldShowFivegToggle = mInternetDetailsContentController.isFivegSupported();
239250
}
240251

241252
@Override
@@ -309,6 +320,11 @@ public void onCreate(SystemUIDialog dialog, Bundle savedInstanceState) {
309320
mAirplaneModeSummaryText = mDialogView.requireViewById(R.id.airplane_mode_summary);
310321
mMobileToggleDivider = mDialogView.requireViewById(R.id.mobile_toggle_divider);
311322
mMobileDataToggle = mDialogView.requireViewById(R.id.mobile_toggle);
323+
mFivegLayout = mDialogView.requireViewById(R.id.fiveg_layout);
324+
mFivegIcon = mDialogView.requireViewById(R.id.fiveg_icon);
325+
mFivegTitleText = mDialogView.requireViewById(R.id.fiveg_title);
326+
mFivegToggleDivider = mDialogView.requireViewById(R.id.fiveg_toggle_divider);
327+
mFivegToggle = mDialogView.requireViewById(R.id.fiveg_toggle);
312328
mWiFiToggle = mDialogView.requireViewById(R.id.wifi_toggle);
313329
mBackgroundOn = context.getDrawable(R.drawable.settingslib_switch_bar_bg_on);
314330
mInternetDialogTitle.setText(getDialogTitleText());
@@ -357,6 +373,8 @@ public void onStop(SystemUIDialog dialog) {
357373
mLifecycleRegistry.setCurrentState(Lifecycle.State.DESTROYED);
358374
mMobileNetworkLayout.setOnClickListener(null);
359375
mMobileNetworkLayout.setOnLongClickListener(null);
376+
mFivegToggle.setOnCheckedChangeListener(null);
377+
mMobileDataToggle.setOnClickListener(null);
360378
mConnectedWifListLayout.setOnClickListener(null);
361379
if (mSecondaryMobileNetworkLayout != null) {
362380
mSecondaryMobileNetworkLayout.setOnClickListener(null);
@@ -481,6 +499,9 @@ private void setOnClickListener(SystemUIDialog dialog) {
481499
dialog.getContext(), mDefaultDataSubId, isChecked, false);
482500
}
483501
});
502+
mFivegToggle.setOnClickListener(v -> {
503+
mInternetDetailsContentController.setFivegEnabled(mFivegToggle.isChecked());
504+
});
484505
mConnectedWifListLayout.setOnClickListener(this::onClickConnectedWifi);
485506
mSeeAllLayout.setOnClickListener(this::onClickSeeMoreButton);
486507
mWiFiToggle.setOnClickListener(v -> {
@@ -634,22 +655,28 @@ private void setMobileDataLayout(SystemUIDialog dialog, InternetContent internet
634655
mSecondaryMobileSettingsIcon.setVisibility(mCanConfigMobileData ?
635656
View.VISIBLE : View.INVISIBLE);
636657

637-
// set secondary visual for default data sub
638-
mMobileNetworkLayout.setBackground(mBackgroundOff);
639-
mMobileTitleText.setTextAppearance(R.style.TextAppearance_InternetDialog);
640-
mMobileSummaryText.setTextAppearance(
641-
R.style.TextAppearance_InternetDialog_Secondary);
642-
mSignalIcon.setColorFilter(
643-
dialog.getContext().getColor(R.color.connected_network_secondary_color));
644-
} else {
645-
mMobileNetworkLayout.setBackground(
646-
isNetworkConnected ? mBackgroundOn : mBackgroundOff);
647-
mMobileTitleText.setTextAppearance(isNetworkConnected
648-
?
649-
R.style.TextAppearance_InternetDialog_Active
650-
: R.style.TextAppearance_InternetDialog);
651-
mMobileSummaryText.setTextAppearance(secondaryRes);
652-
}
658+
// set secondary visual for default data sub
659+
mMobileNetworkLayout.setBackground(mBackgroundOff);
660+
mMobileTitleText.setTextAppearance(R.style.TextAppearance_InternetDialog);
661+
mMobileSummaryText.setTextAppearance(
662+
R.style.TextAppearance_InternetDialog_Secondary);
663+
mSignalIcon.setColorFilter(
664+
dialog.getContext().getColor(R.color.connected_network_secondary_color));
665+
} else {
666+
mMobileNetworkLayout.setBackground(
667+
isNetworkConnected ? mBackgroundOn : mBackgroundOff);
668+
mMobileTitleText.setTextAppearance(isNetworkConnected
669+
?
670+
R.style.TextAppearance_InternetDialog_Active
671+
: R.style.TextAppearance_InternetDialog);
672+
mMobileSummaryText.setTextAppearance(secondaryRes);
673+
mFivegIcon.getDrawable().setTint(
674+
isNetworkConnected ? dialog.getContext().getColor(R.color.connected_network_primary_color)
675+
: Utils.getColorAttrDefaultColor(dialog.getContext(), android.R.attr.textColorTertiary));
676+
mFivegTitleText.setTextAppearance(isNetworkConnected ?
677+
R.style.TextAppearance_InternetDialog_Active
678+
: R.style.TextAppearance_InternetDialog);
679+
}
653680

654681
if (mSecondaryMobileNetworkLayout != null) {
655682
mSecondaryMobileNetworkLayout.setVisibility(nonDdsVisibility);

0 commit comments

Comments
 (0)