Skip to content

Commit 8847c2d

Browse files
committed
Fixes
1 parent d02b543 commit 8847c2d

12 files changed

Lines changed: 221 additions & 80 deletions

File tree

.dart_tool/build/fcd1995bc647fb959e82ea360c6c2c9a/asset_graph.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

android/app/src/main/kotlin/com/bluebubbles/messaging/services/rustpush/APNService.kt

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,9 @@ class APNService : Service(), MsgReceiver {
160160
Log.i("here", "hjeal")
161161

162162
start(applicationContext.filesDir.path, AndroidFilePackager(this), object : HandleWifiNetworksCallback {
163-
override fun handleWifiNetworks(networks: Map<String, String>) {
164-
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) return
163+
@RequiresApi(Build.VERSION_CODES.Q)
164+
fun addWifiNetworks(networks: Map<String, String>) {
165+
val manager = getSystemService(WIFI_SERVICE) as WifiManager
165166
val suggestions = networks.entries.flatMap {
166167
if (it.value.length > 63 || it.key.length > 32 || it.value.length < 8) {
167168
Log.i("NETWORK", "Bad password or ssid ${it.key}")
@@ -178,14 +179,36 @@ class APNService : Service(), MsgReceiver {
178179
.build()
179180
)
180181
}.toList()
181-
val manager = getSystemService(WIFI_SERVICE) as WifiManager
182182
val status = manager.addNetworkSuggestions(suggestions)
183183
if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
184184
Log.e("NETWORK", "Adding suggestions failed! $status")
185185
} else {
186186
Log.i("NETWORK", "Adding suggestions success!")
187187
}
188188
}
189+
190+
override fun handleWifiNetworks(networks: Map<String, String>, userApprove: Boolean) {
191+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return
192+
193+
if (userApprove) {
194+
addWifiNetworks(networks)
195+
return
196+
}
197+
198+
val manager = getSystemService(WIFI_SERVICE) as WifiManager
199+
200+
val listener = object : WifiManager.SuggestionUserApprovalStatusListener {
201+
override fun onUserApprovalStatusChange(status: Int) {
202+
Log.i("NETWORK", "User approval status retrived: $status")
203+
if (status == WifiManager.STATUS_SUGGESTION_APPROVAL_APPROVED_BY_USER) {
204+
addWifiNetworks(networks)
205+
}
206+
manager.removeSuggestionUserApprovalStatusListener(this)
207+
}
208+
}
209+
210+
manager.addSuggestionUserApprovalStatusListener(mainExecutor, listener)
211+
}
189212
})
190213
setupKeystore(applicationContext.filesDir.path, keystore)
191214
keystore.checkMaster()

android/app/src/main/kotlin/uniffi/rust_lib_bluebubbles/rust_lib_bluebubbles.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,7 @@ internal interface UniffiCallbackInterfaceCarrierHandlerMethod0 : com.sun.jna.Ca
661661
fun callback(`uniffiHandle`: Long,`gateway`: RustBuffer.ByValue,`error`: RustBuffer.ByValue,`uniffiOutReturn`: Pointer,uniffiCallStatus: UniffiRustCallStatus,)
662662
}
663663
internal interface UniffiCallbackInterfaceHandleWifiNetworksCallbackMethod0 : com.sun.jna.Callback {
664-
fun callback(`uniffiHandle`: Long,`networks`: RustBuffer.ByValue,`uniffiOutReturn`: Pointer,uniffiCallStatus: UniffiRustCallStatus,)
664+
fun callback(`uniffiHandle`: Long,`networks`: RustBuffer.ByValue,`userApprove`: Byte,`uniffiOutReturn`: Pointer,uniffiCallStatus: UniffiRustCallStatus,)
665665
}
666666
internal interface UniffiCallbackInterfaceInsertKeychainCallbackMethod0 : com.sun.jna.Callback {
667667
fun callback(`uniffiHandle`: Long,`error`: RustBuffer.ByValue,`uniffiOutReturn`: Pointer,uniffiCallStatus: UniffiRustCallStatus,)
@@ -1279,7 +1279,7 @@ fun uniffi_rust_lib_bluebubbles_fn_free_handlewifinetworkscallback(`ptr`: Pointe
12791279
): Unit
12801280
fun uniffi_rust_lib_bluebubbles_fn_init_callback_vtable_handlewifinetworkscallback(`vtable`: UniffiVTableCallbackInterfaceHandleWifiNetworksCallback,
12811281
): Unit
1282-
fun uniffi_rust_lib_bluebubbles_fn_method_handlewifinetworkscallback_handle_wifi_networks(`ptr`: Pointer,`networks`: RustBuffer.ByValue,uniffi_out_err: UniffiRustCallStatus,
1282+
fun uniffi_rust_lib_bluebubbles_fn_method_handlewifinetworkscallback_handle_wifi_networks(`ptr`: Pointer,`networks`: RustBuffer.ByValue,`userApprove`: Byte,uniffi_out_err: UniffiRustCallStatus,
12831283
): Unit
12841284
fun uniffi_rust_lib_bluebubbles_fn_clone_insertkeychaincallback(`ptr`: Pointer,uniffi_out_err: UniffiRustCallStatus,
12851285
): Pointer
@@ -1560,7 +1560,7 @@ private fun uniffiCheckApiChecksums(lib: IntegrityCheckingUniffiLib) {
15601560
if (lib.uniffi_rust_lib_bluebubbles_checksum_method_carrierhandler_got_gateway() != 11467.toShort()) {
15611561
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
15621562
}
1563-
if (lib.uniffi_rust_lib_bluebubbles_checksum_method_handlewifinetworkscallback_handle_wifi_networks() != 20800.toShort()) {
1563+
if (lib.uniffi_rust_lib_bluebubbles_checksum_method_handlewifinetworkscallback_handle_wifi_networks() != 42968.toShort()) {
15641564
throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
15651565
}
15661566
if (lib.uniffi_rust_lib_bluebubbles_checksum_method_insertkeychaincallback_done() != 26973.toShort()) {
@@ -2643,7 +2643,7 @@ public object FfiConverterTypeCarrierHandler: FfiConverter<CarrierHandler, Point
26432643

26442644
public interface HandleWifiNetworksCallback {
26452645

2646-
fun `handleWifiNetworks`(`networks`: Map<kotlin.String, kotlin.String>)
2646+
fun `handleWifiNetworks`(`networks`: Map<kotlin.String, kotlin.String>, `userApprove`: kotlin.Boolean)
26472647

26482648
companion object
26492649
}
@@ -2730,12 +2730,12 @@ open class HandleWifiNetworksCallbackImpl: Disposable, AutoCloseable, HandleWifi
27302730
}
27312731
}
27322732

2733-
override fun `handleWifiNetworks`(`networks`: Map<kotlin.String, kotlin.String>)
2733+
override fun `handleWifiNetworks`(`networks`: Map<kotlin.String, kotlin.String>, `userApprove`: kotlin.Boolean)
27342734
=
27352735
callWithPointer {
27362736
uniffiRustCall() { _status ->
27372737
UniffiLib.INSTANCE.uniffi_rust_lib_bluebubbles_fn_method_handlewifinetworkscallback_handle_wifi_networks(
2738-
it, FfiConverterMapStringString.lower(`networks`),_status)
2738+
it, FfiConverterMapStringString.lower(`networks`),FfiConverterBoolean.lower(`userApprove`),_status)
27392739
}
27402740
}
27412741

@@ -2753,11 +2753,12 @@ open class HandleWifiNetworksCallbackImpl: Disposable, AutoCloseable, HandleWifi
27532753
// Put the implementation in an object so we don't pollute the top-level namespace
27542754
internal object uniffiCallbackInterfaceHandleWifiNetworksCallback {
27552755
internal object `handleWifiNetworks`: UniffiCallbackInterfaceHandleWifiNetworksCallbackMethod0 {
2756-
override fun callback(`uniffiHandle`: Long,`networks`: RustBuffer.ByValue,`uniffiOutReturn`: Pointer,uniffiCallStatus: UniffiRustCallStatus,) {
2756+
override fun callback(`uniffiHandle`: Long,`networks`: RustBuffer.ByValue,`userApprove`: Byte,`uniffiOutReturn`: Pointer,uniffiCallStatus: UniffiRustCallStatus,) {
27572757
val uniffiObj = FfiConverterTypeHandleWifiNetworksCallback.handleMap.get(uniffiHandle)
27582758
val makeCall = { ->
27592759
uniffiObj.`handleWifiNetworks`(
27602760
FfiConverterMapStringString.lift(`networks`),
2761+
FfiConverterBoolean.lift(`userApprove`),
27612762
)
27622763
}
27632764
val writeReturn = { _: Unit -> Unit }

lib/app/layouts/settings/pages/passwords/passwords_panel.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ class _PasswordsPanelState extends OptimizedState<PasswordsPanel> {
6161
await _loadCredentialCaches();
6262
await _loadGroups();
6363
}
64-
pushService.checkClique();
64+
pushService.checkClique().then((inclique) {
65+
if (!inclique) return;
66+
api.syncWifiPasswords(manager: manager!, userApprove: true);
67+
});
6568
if (!mounted) return;
6669
setState(() {
6770
_isInClique = inClique;
@@ -73,6 +76,7 @@ class _PasswordsPanelState extends OptimizedState<PasswordsPanel> {
7376
if (manager == null) return;
7477
try {
7578
final groups = await api.getGroups(passwords: manager!);
79+
print("groups ${groups.$2.length} ${groups.$3.length}");
7680
if (!mounted) return;
7781
setState(() {
7882
_groupsUserId = groups.$1;
@@ -166,7 +170,9 @@ class _PasswordsPanelState extends OptimizedState<PasswordsPanel> {
166170

167171
setState(() => _isJoiningClique = true);
168172
try {
169-
await pushService.joinClique();
173+
if (await pushService.joinClique()) {
174+
await api.syncPasswords(passwords: pushService.state!.icloudServices!.passwords!, conn: pushService.state!.conn);
175+
}
170176
await _refreshCliqueStatus();
171177
} finally {
172178
if (mounted) {
@@ -459,13 +465,7 @@ class _PasswordsPanelState extends OptimizedState<PasswordsPanel> {
459465

460466
List<Widget> _buildGroupsListTiles() {
461467
if (_groupsById.isEmpty) {
462-
return [
463-
SettingsTile(
464-
backgroundColor: tileColor,
465-
title: "(unknown group)",
466-
subtitle: "No group details available",
467-
),
468-
];
468+
return [];
469469
}
470470

471471
final entries = _groupsById.entries.toList()

lib/helpers/types/helpers/carddav_sync.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,14 @@ class CardDavClient {
143143
requestEncoder: gzipEncoder
144144
),
145145
) {
146-
final adapter = _dio.httpClientAdapter;
147-
if (adapter is DefaultHttpClientAdapter) {
148-
adapter.onHttpClientCreate = (client) {
149-
client.findProxy = (uri) => 'PROXY 192.168.99.71:8080';
150-
client.badCertificateCallback = (cert, host, port) => true;
151-
return client;
152-
};
153-
}
146+
// final adapter = _dio.httpClientAdapter;
147+
// if (adapter is DefaultHttpClientAdapter) {
148+
// adapter.onHttpClientCreate = (client) {
149+
// client.findProxy = (uri) => 'PROXY 192.168.99.71:8080';
150+
// client.badCertificateCallback = (cert, host, port) => true;
151+
// return client;
152+
// };
153+
// }
154154
}
155155

156156
Future<Map<String, String>> _authHeaders() async {

lib/services/rustpush/rustpush_service.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4795,6 +4795,7 @@ class RustPushService extends GetxService {
47954795
@override
47964796
Future<void> onInit() async {
47974797
super.onInit();
4798+
api.doFirstTimeInit(path: fs.appDocDir.path);
47984799
initFuture = (() async {
47994800
statePath = (await getApplicationSupportDirectory()).path;
48004801
final vpnDetector = VpnConnectionDetector();

lib/src/rust/api/api.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,12 @@ Future<ArcPasswordManagerDefaultAnisetteProvider> makePasswords(
193193
client: client,
194194
conn: conn);
195195

196+
Future<void> syncWifiPasswords(
197+
{required ArcPasswordManagerDefaultAnisetteProvider manager,
198+
required bool userApprove}) =>
199+
RustLib.instance.api.crateApiApiSyncWifiPasswords(
200+
manager: manager, userApprove: userApprove);
201+
196202
Future<ArcFtClient> makeFacetime(
197203
{required String path,
198204
required ApsConnection conn,

0 commit comments

Comments
 (0)