Skip to content

Commit 8fde2c8

Browse files
authored
[feature] apply speed chart toggle on home screen (#353)
1 parent 73ed0e8 commit 8fde2c8

9 files changed

Lines changed: 84 additions & 0 deletions

File tree

app/src/main/java/org/fptn/vpn/utils/SharedPrefUtils.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,4 +274,15 @@ public static void saveShowSpeedInNotification(Context context, boolean show) {
274274
sharedPreferences.edit().putBoolean(Constants.SHOW_SPEED_IN_NOTIFICATION_PREF_KEY, show).apply();
275275
}
276276

277+
/* Traffic chart on home screen */
278+
public static boolean getShowTrafficChart(Context context) {
279+
SharedPreferences sharedPreferences = context.getSharedPreferences(Constants.APPLICATION_SHARED_PREFERENCES, Context.MODE_PRIVATE);
280+
return sharedPreferences.getBoolean(Constants.SHOW_TRAFFIC_CHART_PREF_KEY, true);
281+
}
282+
283+
public static void saveShowTrafficChart(Context context, boolean show) {
284+
SharedPreferences sharedPreferences = context.getSharedPreferences(Constants.APPLICATION_SHARED_PREFERENCES, Context.MODE_PRIVATE);
285+
sharedPreferences.edit().putBoolean(Constants.SHOW_TRAFFIC_CHART_PREF_KEY, show).apply();
286+
}
287+
277288
}

app/src/main/java/org/fptn/vpn/views/experimentalsettings/ExperimentalSettingsActivity.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public class ExperimentalSettingsActivity extends AppCompatActivity {
6464
private View autoFallbackThresholdLayout;
6565
private SeekBar seekBarFallbackThreshold;
6666
private SwitchCompat showSpeedInNotificationSwitch;
67+
private SwitchCompat showTrafficChartSwitch;
6768
private SwitchCompat adBlockSwitch;
6869

6970
@Override
@@ -87,6 +88,9 @@ private void initializeVariable() {
8788
showSpeedInNotificationSwitch = findViewById(R.id.show_speed_in_notification_switch);
8889
showSpeedInNotificationSwitch.setChecked(SharedPrefUtils.getShowSpeedInNotification(this));
8990

91+
showTrafficChartSwitch = findViewById(R.id.show_traffic_chart_switch);
92+
showTrafficChartSwitch.setChecked(SharedPrefUtils.getShowTrafficChart(this));
93+
9094
adBlockSwitch = findViewById(R.id.ad_block_switch);
9195
adBlockSwitch.setChecked(SharedPrefUtils.getAdBlockEnabled(this));
9296

@@ -215,6 +219,7 @@ private void resetToDefault() {
215219
customDnsSwitch.setChecked(false);
216220
customDnsInput.setText("");
217221
showSpeedInNotificationSwitch.setChecked(false);
222+
showTrafficChartSwitch.setChecked(true);
218223
adBlockSwitch.setChecked(true);
219224
switchNetworkType.setChecked(true);
220225
switchIPAddress.setChecked(true);
@@ -228,6 +233,7 @@ private void resetToDefault() {
228233
SharedPrefUtils.saveCustomDnsEnabled(this, false);
229234
SharedPrefUtils.saveCustomDnsIpv4(this, "");
230235
SharedPrefUtils.saveShowSpeedInNotification(this, false);
236+
SharedPrefUtils.saveShowTrafficChart(this, true);
231237
SharedPrefUtils.saveAdBlockEnabled(this, true);
232238
SharedPrefUtils.saveReconnectOnChangeNetworkTypeEnabled(this, true);
233239
SharedPrefUtils.saveReconnectOnChangeIPEnabled(this, true);
@@ -328,6 +334,7 @@ private void saveAndFinish() {
328334
XLog.tag(TAG).i("Experimental settings saved [watchNetwork=%b, watchIP=%b, attempts=%d, delay=%ds]", switchNetworkType.isChecked(), switchIPAddress.isChecked(), seekBarAttemptsCount.getProgress(), seekBarDelayBetween.getProgress() + 1);
329335

330336
SharedPrefUtils.saveShowSpeedInNotification(this, showSpeedInNotificationSwitch.isChecked());
337+
SharedPrefUtils.saveShowTrafficChart(this, showTrafficChartSwitch.isChecked());
331338
SharedPrefUtils.saveAdBlockEnabled(this, adBlockSwitch.isChecked());
332339
SharedPrefUtils.saveReconnectOnChangeNetworkTypeEnabled(this, switchNetworkType.isChecked());
333340
SharedPrefUtils.saveReconnectOnChangeIPEnabled(this, switchIPAddress.isChecked());

app/src/main/java/org/fptn/vpn/views/home/HomeActivity.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ public class HomeActivity extends AppCompatActivity {
9696
private View homeTrafficFrame;
9797
private View permissionWarningFrame;
9898
private TrafficSpeedChart trafficSpeedChart;
99+
private View trafficChartDivider;
100+
private int trafficFrameMinHeight;
99101

100102
private CustomSpinner spinnerServers;
101103

@@ -177,6 +179,9 @@ private void initializeVariable() {
177179
/*View containers to hide*/
178180
homeTrafficFrame = findViewById(R.id.home_traffic_frame);
179181
trafficSpeedChart = findViewById(R.id.home_traffic_chart);
182+
trafficChartDivider = findViewById(R.id.home_traffic_chart_divider);
183+
trafficFrameMinHeight = ((ConstraintLayout.LayoutParams) homeTrafficFrame.getLayoutParams()).matchConstraintMinHeight;
184+
applyTrafficChartVisibility();
180185
connectionTimeFrame = findViewById(R.id.home_connection_timer_frame);
181186
serverInfoFrame = findViewById(R.id.home_server_info_frame);
182187

@@ -336,6 +341,9 @@ protected void onResume() {
336341
refreshBackgroundSetupStates();
337342
}
338343

344+
// The setting may have changed while this activity was paused (advanced settings screen).
345+
applyTrafficChartVisibility();
346+
339347
Optional.ofNullable(viewModel.getServiceStateMutableLiveData())
340348
.map(LiveData::getValue)
341349
.map(FptnServiceState::getConnectionState)
@@ -346,6 +354,21 @@ protected void onResume() {
346354
});
347355
}
348356

357+
// Toggles only the speed chart (advanced setting); speed and traffic rows stay visible,
358+
// and the traffic card shrinks to its remaining content instead of keeping the chart's space.
359+
private void applyTrafficChartVisibility() {
360+
boolean showChart = SharedPrefUtils.getShowTrafficChart(this);
361+
trafficSpeedChart.setVisibility(showChart ? View.VISIBLE : View.GONE);
362+
trafficChartDivider.setVisibility(showChart ? View.VISIBLE : View.GONE);
363+
364+
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) homeTrafficFrame.getLayoutParams();
365+
params.height = showChart ? ConstraintLayout.LayoutParams.MATCH_CONSTRAINT : ConstraintLayout.LayoutParams.WRAP_CONTENT;
366+
params.verticalBias = showChart ? 0.5f : 0f;
367+
// The XML min height (140dp) keeps padding the card even in wrap mode — drop it with the chart.
368+
params.matchConstraintMinHeight = showChart ? trafficFrameMinHeight : 0;
369+
homeTrafficFrame.setLayoutParams(params);
370+
}
371+
349372
private void disconnectedStateUiItems() {
350373
ViewUtils.hideView(connectionTimeFrame);
351374
ViewUtils.hideView(serverInfoFrame);

app/src/main/res/layout/experimental_settings_layout.xml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,38 @@
167167

168168
</LinearLayout>
169169

170+
<!--Home screen-->
171+
<LinearLayout
172+
android:layout_width="match_parent"
173+
android:layout_height="wrap_content"
174+
android:layout_marginStart="16dp"
175+
android:layout_marginTop="8dp"
176+
android:layout_marginEnd="16dp"
177+
android:background="@drawable/round_settings_back_white10_20"
178+
android:orientation="vertical"
179+
android:padding="16dp">
180+
181+
<TextView
182+
android:layout_width="match_parent"
183+
android:layout_height="wrap_content"
184+
android:layout_marginBottom="4dp"
185+
android:text="@string/home_screen_settings_title"
186+
android:textColor="@color/white"
187+
android:textSize="16sp"
188+
android:textStyle="bold" />
189+
190+
<androidx.appcompat.widget.SwitchCompat
191+
android:id="@+id/show_traffic_chart_switch"
192+
android:layout_width="match_parent"
193+
android:layout_height="wrap_content"
194+
android:checked="true"
195+
android:paddingStart="12dp"
196+
android:paddingEnd="12dp"
197+
android:text="@string/show_traffic_chart_label"
198+
android:textSize="14sp" />
199+
200+
</LinearLayout>
201+
170202
<!--Auto-fallback to all servers-->
171203
<LinearLayout
172204
android:layout_width="match_parent"

app/src/main/res/layout/home_layout.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@
258258
android:layout_weight="1" />
259259

260260
<View
261+
android:id="@+id/home_traffic_chart_divider"
261262
android:layout_width="match_parent"
262263
android:layout_height="1dp"
263264
android:background="#26FFFFFF" />

app/src/main/res/values-fa-rIR/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ https://play.google.com/store/apps/details?id=org.fptn.vpn
184184
<string name="speed_notification_title">اعلان:</string>
185185
<string name="speed_notification_enable">سرعت اتصال در نوار وضعیت</string>
186186

187+
<string name="home_screen_settings_title">صفحه اصلی:</string>
188+
<string name="show_traffic_chart_label">نمایش نمودار سرعت</string>
189+
187190
<string name="auto_fallback_title">تغییر خودکار به سرورهای موجود:</string>
188191
<string name="auto_fallback_enable">تغییر سرور در صورت قطع ارتباط</string>
189192
<string name="auto_fallback_threshold_label">تلاش‌ها قبل از تغییر سرور:</string>

app/src/main/res/values-ru-rRU/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ https://play.google.com/store/apps/details?id=org.fptn.vpn
182182
<string name="speed_notification_title">Уведомления:</string>
183183
<string name="speed_notification_enable">Скорость подключения в статус-баре</string>
184184

185+
<string name="home_screen_settings_title">Главный экран:</string>
186+
<string name="show_traffic_chart_label">Показывать график скорости</string>
187+
185188
<string name="auto_fallback_title">Авто-переключение на доступные серверы:</string>
186189
<string name="auto_fallback_enable">Менять сервер при потере связи</string>
187190
<string name="auto_fallback_threshold_label">Попыток до смены сервера:</string>

app/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,9 @@ https://play.google.com/store/apps/details?id=org.fptn.vpn
263263
<string name="speed_notification_title">Notification:</string>
264264
<string name="speed_notification_enable">Connection speed in status bar</string>
265265

266+
<string name="home_screen_settings_title">Home screen:</string>
267+
<string name="show_traffic_chart_label">Show speed chart</string>
268+
266269
<string name="auto_fallback_title">Auto-fallback to available servers:</string>
267270
<string name="auto_fallback_enable">Switch server on connection loss</string>
268271
<string name="auto_fallback_threshold_label">Attempts before switching server:</string>

core/common/src/main/kotlin/org/fptn/vpn/core/common/Constants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,5 @@ object Constants {
6969
const val CUSTOM_DNS_ENABLED_PREF_KEY: String = "CUSTOM_DNS_ENABLED_V1"
7070
const val CUSTOM_DNS_IPV4_PREF_KEY: String = "CUSTOM_DNS_IPV4_V1"
7171
const val SHOW_SPEED_IN_NOTIFICATION_PREF_KEY: String = "SHOW_SPEED_IN_NOTIFICATION_V1"
72+
const val SHOW_TRAFFIC_CHART_PREF_KEY: String = "SHOW_TRAFFIC_CHART_V1"
7273
}

0 commit comments

Comments
 (0)