Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/buildAndTest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ on:
permissions:
contents: read

env:
ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{secrets.ORG_GRADLE_PROJECT_SIGNINGINMEMORYKEYID}}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{secrets.ORG_GRADLE_PROJECT_SIGNINGINMEMORYKEYPASSWORD}}
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{secrets.ORG_GRADLE_PROJECT_SIGNINGINMEMORYKEY}}

jobs:
build:
runs-on: macos-latest
Expand Down
2 changes: 1 addition & 1 deletion demos/demo-android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ dependencies {
implementation 'com.jakewharton.timber:timber:5.0.1'
implementation 'io.coil-kt:coil-compose:2.2.2'
implementation "io.ktor:ktor-client-cio:$ktor_version"
implementation "com.ricoh360.thetaclient:theta-client:1.13.0"
implementation "com.ricoh360.thetaclient:theta-client:1.13.1"

testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0'
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
Expand Down
2 changes: 1 addition & 1 deletion demos/demo-ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ target 'SdkSample' do
use_frameworks!

# Pods for SdkSample
pod 'THETAClient', '1.13.0'
pod 'THETAClient', '1.13.1'
end
2 changes: 1 addition & 1 deletion demos/demo-react-native/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"dependencies": {
"@react-navigation/native": "^6.1.0",
"@react-navigation/native-stack": "^6.9.5",
"theta-client-react-native": "1.13.0",
"theta-client-react-native": "1.13.1",
"react": "18.2.0",
"react-native": "0.71.14",
"react-native-safe-area-context": "^4.4.1",
Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial-android.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

- モジュールの`build.gradle`の`dependencies`に次を追加します。
```
implementation "com.ricoh360.thetaclient:theta-client:1.13.0"
implementation "com.ricoh360.thetaclient:theta-client:1.13.1"
```
- 本 SDK を使用したアプリケーションが動作するスマートフォンと THETA を無線 LAN 接続しておきます。

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorial-android.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
- Add following descriptions to the `dependencies` of your module's `build.gradle`.

```
implementation "com.ricoh360.thetaclient:theta-client:1.13.0"
implementation "com.ricoh360.thetaclient:theta-client:1.13.1"
```

- Connect the wireless LAN between THETA and the smartphone that runs on the application using this SDK.
Expand Down
2 changes: 1 addition & 1 deletion flutter/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ android {
testImplementation("org.mockito:mockito-core:5.0.0")

implementation("com.soywiz.korlibs.krypto:krypto:4.0.10")
implementation("com.ricoh360.thetaclient:theta-client:1.13.0")
implementation("com.ricoh360.thetaclient:theta-client:1.13.1")
}

testOptions {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1253,7 +1253,7 @@ fun toStartedNotifyParam(value: String): Map<String, Any> {
data class SetAccessPointParams(
val ssid: String,
val ssidStealth: Boolean?,
val authMode: AuthModeEnum,
val authMode: AuthModeEnum?,
val password: String?,
val connectionPriority: Int?,
val dns1: String?,
Expand All @@ -1264,9 +1264,7 @@ data class SetAccessPointParams(
fun toSetAccessPointParams(arguments: Map<*, *>): SetAccessPointParams {
val ssid = arguments[KEY_SSID] as? String ?: throw IllegalArgumentException(KEY_SSID)
val ssidStealth = arguments[KEY_SSID_STEALTH] as? Boolean
val authMode = (arguments[KEY_AUTH_MODE] as? String?)?.let {
AuthModeEnum.valueOf(it)
} ?: throw IllegalArgumentException(KEY_AUTH_MODE)
val authMode = (arguments[KEY_AUTH_MODE] as? String?)?.let { AuthModeEnum.valueOf(it) }
val password = arguments[KEY_PASSWORD] as? String
val connectionPriority = arguments[KEY_CONNECTION_PRIORITY] as? Int
val dns1 = arguments[KEY_DNS1] as? String
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,12 @@ class ThetaClientFlutterPlugin : FlutterPlugin, MethodCallHandler {
}
}

"setAccessPointConnectionPriority" -> {
scope.launch {
setAccessPointConnectionPriority(call, result)
}
}

"deleteAccessPoint" -> {
scope.launch {
deleteAccessPoint(call, result)
Expand Down Expand Up @@ -1758,6 +1764,23 @@ class ThetaClientFlutterPlugin : FlutterPlugin, MethodCallHandler {
}
}

suspend fun setAccessPointConnectionPriority(call: MethodCall, result: Result) {
if (thetaRepository == null) {
result.error(errorCode, messageNotInit, null)
return
}
try {
val arguments = call.arguments as Map<*, *>
val ssid = arguments[KEY_SSID] as? String ?: throw IllegalArgumentException(KEY_SSID)
val connectionPriority = arguments[KEY_CONNECTION_PRIORITY] as? Int ?: throw IllegalArgumentException(KEY_CONNECTION_PRIORITY)
val ssidStealth = arguments[KEY_SSID_STEALTH] as? Boolean ?: throw IllegalArgumentException(KEY_SSID_STEALTH)
thetaRepository?.setAccessPointConnectionPriority(ssid, connectionPriority, ssidStealth)
result.success(null)
} catch (e: Exception) {
result.error(e.javaClass.simpleName, e.message, null)
}
}

suspend fun deleteAccessPoint(call: MethodCall, result: Result) {
if (thetaRepository == null) {
result.error(errorCode, messageNotInit, null)
Expand Down
13 changes: 2 additions & 11 deletions flutter/ios/Classes/ConvertUtil.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1456,7 +1456,7 @@ func toStartedNotifyParam(value: String) -> [String: Any] {
struct SetAccessPointParams {
let ssid: String
let ssidStealth: KotlinBoolean?
let authMode: ThetaRepository.AuthModeEnum
let authMode: ThetaRepository.AuthModeEnum?
let password: String?
let connectionPriority: KotlinInt?
let dns1: String?
Expand All @@ -1469,16 +1469,7 @@ func toSetAccessPointParams(params: [String: Any?]) throws -> SetAccessPointPara
throw ThetaClientError.invalidArgument(KEY_SSID)
}
let ssidStealth = toKotlinBoolean(value: params[KEY_SSID_STEALTH] as? Bool)
guard let authMode = params[KEY_AUTH_MODE] as? String else {
throw ThetaClientError.invalidArgument(KEY_AUTH_MODE)
}
guard
let authModeEnum = getEnumValue(
values: ThetaRepository.AuthModeEnum.values(), name: authMode
)
else {
throw ThetaClientError.invalidArgument(KEY_AUTH_MODE)
}
let authModeEnum = getEnumValue(values: ThetaRepository.AuthModeEnum.values(), name: (params[KEY_AUTH_MODE] as? String) ?? "")
let password = params[KEY_PASSWORD] as? String
let connectionPriority = toKotlinInt(value: params[KEY_CONNECTION_PRIORITY] as? Int)
let dns1 = params[KEY_DNS1] as? String
Expand Down
44 changes: 44 additions & 0 deletions flutter/ios/Classes/SwiftThetaClientFlutterPlugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,8 @@ public class SwiftThetaClientFlutterPlugin: NSObject, FlutterPlugin, FlutterStre
setAccessPointDynamically(call: call, result: result)
case "setAccessPointStatically":
setAccessPointStatically(call: call, result: result)
case "setAccessPointConnectionPriority":
setAccessPointConnectionPriority(call: call, result: result)
case "deleteAccessPoint":
deleteAccessPoint(call: call, result: result)
case "getMySetting":
Expand Down Expand Up @@ -1748,6 +1750,48 @@ public class SwiftThetaClientFlutterPlugin: NSObject, FlutterPlugin, FlutterStre
}
}

func setAccessPointConnectionPriority(call: FlutterMethodCall, result: @escaping FlutterResult) {
guard let thetaRepository else {
let flutterError = FlutterError(code: SwiftThetaClientFlutterPlugin.errorCode, message: SwiftThetaClientFlutterPlugin.messageNotInit, details: nil)
result(flutterError)
return
}
guard
let arguments = call.arguments as? [String: Any?]
else {
let flutterError = FlutterError(code: SwiftThetaClientFlutterPlugin.errorCode, message: SwiftThetaClientFlutterPlugin.messageNoArgument, details: nil)
result(flutterError)
return
}
do {
guard let ssid = arguments[KEY_SSID] as? String else {
throw ThetaClientError.invalidArgument(KEY_SSID)
}
guard let connectionPriority = arguments[KEY_CONNECTION_PRIORITY] as? Int32 else {
throw ThetaClientError.invalidArgument(KEY_CONNECTION_PRIORITY)
}
guard let ssidStealth = arguments[KEY_SSID_STEALTH] as? Bool else {
throw ThetaClientError.invalidArgument(KEY_SSID_STEALTH)
}
thetaRepository.setAccessPointConnectionPriority(
ssid: ssid,
connectionPriority: connectionPriority,
ssidStealth: ssidStealth,
completionHandler: { error in
if let thetaError = error {
let flutterError = FlutterError(code: SwiftThetaClientFlutterPlugin.errorCode, message: thetaError.localizedDescription, details: nil)
result(flutterError)
} else {
result(nil)
}
}
)
} catch {
let flutterError = FlutterError(code: SwiftThetaClientFlutterPlugin.errorCode, message: error.localizedDescription, details: nil)
result(flutterError)
}
}

func deleteAccessPoint(call: FlutterMethodCall, result: @escaping FlutterResult) {
guard let thetaRepository else {
let flutterError = FlutterError(code: SwiftThetaClientFlutterPlugin.errorCode, message: SwiftThetaClientFlutterPlugin.messageNotInit, details: nil)
Expand Down
4 changes: 2 additions & 2 deletions flutter/ios/theta_client_flutter.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#
Pod::Spec.new do |s|
s.name = 'theta_client_flutter'
s.version = '1.13.0'
s.version = '1.13.1'
s.summary = 'theta-client plugin project.'
s.description = <<-DESC
theta-client Flutter plugin project.
Expand All @@ -17,7 +17,7 @@ Pod::Spec.new do |s|
s.dependency 'Flutter'
s.platform = :ios, '15.0'

s.dependency 'THETAClient', '1.13.0'
s.dependency 'THETAClient', '1.13.1'

# Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
Expand Down
16 changes: 14 additions & 2 deletions flutter/lib/theta_client_flutter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ class ThetaClientFlutter {
/// - @throws If an error occurs in THETA.
Future<void> setAccessPointDynamically(String ssid,
{bool? ssidStealth,
AuthModeEnum authMode = AuthModeEnum.none,
AuthModeEnum? authMode,
String? password,
int? connectionPriority,
Proxy? proxy}) {
Expand All @@ -354,7 +354,7 @@ class ThetaClientFlutter {
/// - @throws If an error occurs in THETA.
Future<void> setAccessPointStatically(String ssid,
{bool? ssidStealth,
AuthModeEnum authMode = AuthModeEnum.none,
AuthModeEnum? authMode,
String? password,
int? connectionPriority,
required String ipAddress,
Expand All @@ -377,6 +377,18 @@ class ThetaClientFlutter {
proxy);
}

/// Updates the connection priority of the access point.
///
/// - @param ssid SSID of the access point.
/// - @param connectionPriority Connection priority (1 to 5). Default is 1. Theta X fixed to 1 (The access point registered later has a higher priority.)
/// - @param ssidStealth True if SSID stealth is enabled. Default is false.
/// - @throws If an error occurs in THETA.
Future<void> setAccessPointConnectionPriority(
String ssid, int connectionPriority, bool ssidStealth) {
return ThetaClientFlutterPlatform.instance.setAccessPointConnectionPriority(
ssid, connectionPriority, ssidStealth);
}

/// Deletes access point information used in client mode.
/// Only the access points registered with [setAccessPoint] can be deleted.
///
Expand Down
20 changes: 16 additions & 4 deletions flutter/lib/theta_client_flutter_method_channel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1070,14 +1070,14 @@ class MethodChannelThetaClientFlutter extends ThetaClientFlutterPlatform {
Future<void> setAccessPointDynamically(
String ssid,
bool? ssidStealth,
AuthModeEnum authMode,
AuthModeEnum? authMode,
String? password,
int? connectionPriority,
Proxy? proxy) async {
final Map params = <String, dynamic>{
'ssid': ssid,
'ssidStealth': ssidStealth,
'authMode': authMode.rawValue,
'authMode': authMode?.rawValue,
'password': password,
'connectionPriority': connectionPriority,
'proxy': proxy != null ? ConvertUtils.convertProxyParam(proxy) : null
Expand All @@ -1090,7 +1090,7 @@ class MethodChannelThetaClientFlutter extends ThetaClientFlutterPlatform {
Future<void> setAccessPointStatically(
String ssid,
bool? ssidStealth,
AuthModeEnum authMode,
AuthModeEnum? authMode,
String? password,
int? connectionPriority,
String ipAddress,
Expand All @@ -1102,7 +1102,7 @@ class MethodChannelThetaClientFlutter extends ThetaClientFlutterPlatform {
final Map params = <String, dynamic>{
'ssid': ssid,
'ssidStealth': ssidStealth,
'authMode': authMode.rawValue,
'authMode': authMode?.rawValue,
'password': password,
'connectionPriority': connectionPriority,
'ipAddress': ipAddress,
Expand All @@ -1115,6 +1115,18 @@ class MethodChannelThetaClientFlutter extends ThetaClientFlutterPlatform {
return methodChannel.invokeMethod<void>('setAccessPointStatically', params);
}

@override
Future<void> setAccessPointConnectionPriority(
String ssid, int connectionPriority, bool ssidStealth) async {
final Map params = <String, dynamic>{
'ssid': ssid,
'ssidStealth': ssidStealth,
'connectionPriority': connectionPriority,
};
return methodChannel.invokeMethod<void>(
'setAccessPointConnectionPriority', params);
}

@override
Future<void> deleteAccessPoint(String ssid) async {
return methodChannel.invokeMethod<void>('deleteAccessPoint', ssid);
Expand Down
10 changes: 8 additions & 2 deletions flutter/lib/theta_client_flutter_platform_interface.dart
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ abstract class ThetaClientFlutterPlatform extends PlatformInterface {
Future<void> setAccessPointDynamically(
String ssid,
bool? ssidStealth,
AuthModeEnum authMode,
AuthModeEnum? authMode,
String? password,
int? connectionPriority,
Proxy? proxy) {
Expand All @@ -372,7 +372,7 @@ abstract class ThetaClientFlutterPlatform extends PlatformInterface {
Future<void> setAccessPointStatically(
String ssid,
bool? ssidStealth,
AuthModeEnum authMode,
AuthModeEnum? authMode,
String? password,
int? connectionPriority,
String ipAddress,
Expand All @@ -385,6 +385,12 @@ abstract class ThetaClientFlutterPlatform extends PlatformInterface {
'setAccessPointStatically() has not been implemented.');
}

Future<void> setAccessPointConnectionPriority(
String ssid, int connectionPriority, bool ssidStealth) {
throw UnimplementedError(
'setAccessPointConnectionPriority() has not been implemented.');
}

Future<void> deleteAccessPoint(String ssid) {
throw UnimplementedError('deleteAccessPoint() has not been implemented.');
}
Expand Down
2 changes: 1 addition & 1 deletion flutter/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: theta_client_flutter
description: THETA Client Flutter plugin project.
version: 1.13.0
version: 1.13.1
homepage:

environment:
Expand Down
19 changes: 19 additions & 0 deletions flutter/test/theta_client_flutter_method_channel_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1442,6 +1442,25 @@ void main() {
proxy);
});

test('setAccessPointConnectionPriority', () async {
const ssid = 'ssid_test';
const ssidStealth = true;
const connectionPriority = 2;

TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
.setMockMethodCallHandler(channel, (MethodCall methodCall) async {
expect(methodCall.method, 'setAccessPointConnectionPriority');

var arguments = methodCall.arguments as Map<dynamic, dynamic>;
expect(arguments['ssid'], ssid);
expect(arguments['ssidStealth'], ssidStealth);
expect(arguments['connectionPriority'], connectionPriority);
return Future.value();
});
await platform.setAccessPointConnectionPriority(
ssid, connectionPriority, ssidStealth);
});

test('deleteAccessPoint', () async {
const ssid = 'ssid_test';
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
Expand Down
Loading
Loading