Improve device transfer reliability.

This commit is contained in:
Cody Henthorne
2026-03-27 16:51:27 -04:00
committed by Alex Hart
parent 0c4c280a50
commit 3e9146a6f5
3 changed files with 25 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ import android.os.Bundle;
import android.provider.Settings; import android.provider.Settings;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.view.View; import android.view.View;
import android.view.WindowManager;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
@@ -70,6 +71,8 @@ public abstract class DeviceTransferSetupFragment extends LoggingFragment {
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Group progressGroup = view.findViewById(R.id.device_transfer_setup_fragment_progress_group); Group progressGroup = view.findViewById(R.id.device_transfer_setup_fragment_progress_group);
Group errorGroup = view.findViewById(R.id.device_transfer_setup_fragment_error_group); Group errorGroup = view.findViewById(R.id.device_transfer_setup_fragment_error_group);
View verifyGroup = view.findViewById(R.id.device_transfer_setup_fragment_verify); View verifyGroup = view.findViewById(R.id.device_transfer_setup_fragment_verify);
@@ -274,6 +277,7 @@ public abstract class DeviceTransferSetupFragment extends LoggingFragment {
@Override @Override
public void onDestroyView() { public void onDestroyView() {
requireActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
cancelTakingTooLong(); cancelTakingTooLong();
EventBus.getDefault().unregister(this); EventBus.getDefault().unregister(this);
super.onDestroyView(); super.onDestroyView();

View File

@@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.restore.devicetransfer
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.WindowManager
import android.widget.TextView import android.widget.TextView
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.annotation.StringRes import androidx.annotation.StringRes
@@ -62,6 +63,8 @@ abstract class DeviceTransferFragment : LoggingFragment(R.layout.fragment_device
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
binding.deviceTransferFragmentCancel.setOnClickListener { binding.deviceTransferFragmentCancel.setOnClickListener {
cancelActiveTransfer() cancelActiveTransfer()
} }
@@ -80,6 +83,7 @@ abstract class DeviceTransferFragment : LoggingFragment(R.layout.fragment_device
} }
override fun onDestroyView() { override fun onDestroyView() {
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
EventBus.getDefault().unregister(transferModeListener) EventBus.getDefault().unregister(transferModeListener)
super.onDestroyView() super.onDestroyView()
} }

View File

@@ -5,6 +5,7 @@ import android.app.PendingIntent;
import android.app.Service; import android.app.Service;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.wifi.WifiManager;
import android.os.IBinder; import android.os.IBinder;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -47,6 +48,7 @@ public class DeviceToDeviceTransferService extends Service implements ShutdownCa
private DeviceTransferServer server; private DeviceTransferServer server;
private DeviceTransferClient client; private DeviceTransferClient client;
private PowerManager.WakeLock wakeLock; private PowerManager.WakeLock wakeLock;
private WifiManager.WifiLock wifiLock;
public static void startServer(@NonNull Context context, public static void startServer(@NonNull Context context,
@NonNull ServerTask serverTask, @NonNull ServerTask serverTask,
@@ -121,6 +123,10 @@ public class DeviceToDeviceTransferService extends Service implements ShutdownCa
wakeLock.release(); wakeLock.release();
} }
if (wifiLock != null && wifiLock.isHeld()) {
wifiLock.release();
}
super.onDestroy(); super.onDestroy();
} }
@@ -207,6 +213,17 @@ public class DeviceToDeviceTransferService extends Service implements ShutdownCa
if (!wakeLock.isHeld()) { if (!wakeLock.isHeld()) {
wakeLock.acquire(TimeUnit.HOURS.toMillis(2)); wakeLock.acquire(TimeUnit.HOURS.toMillis(2));
} }
if (wifiLock == null) {
WifiManager wifiManager = ContextCompat.getSystemService(this, WifiManager.class);
if (wifiManager != null) {
wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "signal:d2dwifi");
}
}
if (wifiLock != null && !wifiLock.isHeld()) {
wifiLock.acquire();
}
} }
private void updateNotification(@NonNull TransferStatus transferStatus) { private void updateNotification(@NonNull TransferStatus transferStatus) {