Call: Add notice when offline (#4425)

* Call: Add notice when offline

Co-authored-by: biörn <r10s@b44t.com>
This commit is contained in:
wchen342
2026-05-13 10:04:03 -04:00
committed by GitHub
parent be07043b47
commit d55ad1f32a
4 changed files with 45 additions and 4 deletions
@@ -633,12 +633,12 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
return true;
} else if (itemId == R.id.menu_start_audio_call) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CallUtil.startAudioCall(context, chatId);
CallUtil.startAudioCall(this, chatId);
}
return true;
} else if (itemId == R.id.menu_start_video_call) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CallUtil.startVideoCall(context, chatId);
CallUtil.startVideoCall(this, chatId);
}
return true;
} else if (itemId == R.id.menu_all_media) {
@@ -5,13 +5,18 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.os.Build;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.core.telecom.CallEndpointCompat;
import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcContext;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.connect.DcHelper;
@@ -52,8 +57,22 @@ public class CallUtil {
return;
}
int accId = DcHelper.getContext(context).getAccountId();
coordinator.initiateOutgoingCall(accId, chatId, startsWithVideo);
Runnable proceedWithCall =
() -> {
int accId = DcHelper.getContext(context).getAccountId();
coordinator.initiateOutgoingCall(accId, chatId, startsWithVideo);
};
if (!isNetworkAvailable(context)) {
new AlertDialog.Builder(context)
.setMessage(context.getString(R.string.call_requires_connection))
.setPositiveButton(R.string.perm_continue, (dialog, which) -> proceedWithCall.run())
.setNegativeButton(android.R.string.cancel, null)
.show();
return;
}
proceedWithCall.run();
}
@Nullable
@@ -138,4 +157,24 @@ public class CallUtil {
}
return iconRes;
}
@RequiresApi(api = Build.VERSION_CODES.M)
private static boolean isNetworkAvailable(Context context) {
ConnectivityManager manager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager == null) return true;
boolean networkAvailable = false;
Network network = manager.getActiveNetwork();
if (network != null) {
NetworkCapabilities caps = manager.getNetworkCapabilities(network);
networkAvailable =
caps != null && caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
}
boolean serverConnected =
DcHelper.getContext(context).getConnectivity() >= DcContext.DC_CONNECTIVITY_WORKING;
return networkAvailable || serverConnected;
}
}