android server update password
This commit is contained in:
parent
158b128510
commit
299bd11481
@ -40,47 +40,6 @@ fun testVP9Support(): Boolean {
|
|||||||
return res != null
|
return res != null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createNormalNotification(
|
|
||||||
ctx: Context,
|
|
||||||
title: String,
|
|
||||||
text: String,
|
|
||||||
type: String
|
|
||||||
): Notification {
|
|
||||||
val channelId =
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
||||||
val channelId = "RustDeskNormal"
|
|
||||||
val channelName = "RustDesk通知消息"
|
|
||||||
val channel = NotificationChannel(
|
|
||||||
channelId,
|
|
||||||
channelName, NotificationManager.IMPORTANCE_DEFAULT
|
|
||||||
).apply {
|
|
||||||
description = "Share your Android Screen with RustDeskService"
|
|
||||||
}
|
|
||||||
channel.lightColor = Color.BLUE
|
|
||||||
channel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
|
|
||||||
val service = ctx.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
|
||||||
service.createNotificationChannel(channel)
|
|
||||||
channelId
|
|
||||||
} else {
|
|
||||||
""
|
|
||||||
}
|
|
||||||
val intent = Intent(ctx, MainActivity::class.java).apply {
|
|
||||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
|
|
||||||
action = Intent.ACTION_MAIN // 不设置会造成每次都重新启动一个新的Activity
|
|
||||||
addCategory(Intent.CATEGORY_LAUNCHER)
|
|
||||||
putExtra("type", type)
|
|
||||||
}
|
|
||||||
val pendingIntent = PendingIntent.getActivity(ctx, 0, intent, FLAG_UPDATE_CURRENT)
|
|
||||||
return NotificationCompat.Builder(ctx, channelId)
|
|
||||||
.setSmallIcon(R.mipmap.ic_launcher)
|
|
||||||
.setContentTitle(title)
|
|
||||||
.setPriority(NotificationCompat.PRIORITY_HIGH) // 这里如果设置为低则不显示
|
|
||||||
.setContentText(text)
|
|
||||||
.setContentIntent(pendingIntent)
|
|
||||||
.setAutoCancel(true)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun checkPermissions(context: Context) {
|
fun checkPermissions(context: Context) {
|
||||||
XXPermissions.with(context)
|
XXPermissions.with(context)
|
||||||
.permission(Permission.RECORD_AUDIO)
|
.permission(Permission.RECORD_AUDIO)
|
||||||
|
@ -142,8 +142,30 @@ class ServerModel with ChangeNotifier {
|
|||||||
await FFI.invokeMethod("init_input");
|
await FFI.invokeMethod("init_input");
|
||||||
}
|
}
|
||||||
|
|
||||||
getIDPasswd() async {
|
Future<bool> updatePassword(String pw) async {
|
||||||
if (_serverId.text != _emptyIdShow && _serverPasswd.text != "") {
|
final oldPasswd = _serverPasswd.text;
|
||||||
|
FFI.setByName("update_password",pw);
|
||||||
|
await Future.delayed(Duration(milliseconds: 500));
|
||||||
|
await getIDPasswd(force: true);
|
||||||
|
|
||||||
|
// check result
|
||||||
|
if(pw == ""){
|
||||||
|
if(_serverPasswd.text.isNotEmpty && _serverPasswd.text!= oldPasswd){
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(_serverPasswd.text == pw){
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getIDPasswd({bool force = false}) async {
|
||||||
|
if (!force && _serverId.text != _emptyIdShow && _serverPasswd.text != "") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var count = 0;
|
var count = 0;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hbb/models/model.dart';
|
import 'package:flutter_hbb/models/model.dart';
|
||||||
|
import 'package:flutter_hbb/widgets/dialog.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
import '../common.dart';
|
import '../common.dart';
|
||||||
@ -16,8 +17,7 @@ class ServerPage extends StatelessWidget implements PageShape {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
final appBarActions = [
|
final appBarActions = [
|
||||||
PopupMenuButton<String>(
|
PopupMenuButton<String>(itemBuilder: (context) {
|
||||||
itemBuilder: (context) {
|
|
||||||
return [
|
return [
|
||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
child: Text(translate("Change ID")),
|
child: Text(translate("Change ID")),
|
||||||
@ -27,11 +27,31 @@ class ServerPage extends StatelessWidget implements PageShape {
|
|||||||
PopupMenuItem(
|
PopupMenuItem(
|
||||||
child: Text(translate("Set your own password")),
|
child: Text(translate("Set your own password")),
|
||||||
value: "changePW",
|
value: "changePW",
|
||||||
enabled: false,
|
enabled: FFI.serverModel.isStart,
|
||||||
|
),
|
||||||
|
PopupMenuItem(
|
||||||
|
child: Text(translate("Refresh random password")),
|
||||||
|
value: "refreshPW",
|
||||||
|
enabled: FFI.serverModel.isStart,
|
||||||
)
|
)
|
||||||
];
|
];
|
||||||
},
|
}, onSelected: (value) {
|
||||||
onSelected: (value) => debugPrint("PopupMenuItem onSelected:$value"))
|
if (value == "changeID") {
|
||||||
|
// TODO
|
||||||
|
} else if (value == "changePW") {
|
||||||
|
updatePasswordDialog();
|
||||||
|
} else if (value == "refreshPW") {
|
||||||
|
() async {
|
||||||
|
showLoading(translate("Waiting"));
|
||||||
|
if(await FFI.serverModel.updatePassword("")){
|
||||||
|
showSuccess();
|
||||||
|
}else{
|
||||||
|
showError();
|
||||||
|
}
|
||||||
|
debugPrint("end updatePassword");
|
||||||
|
}();
|
||||||
|
}
|
||||||
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
import '../common.dart';
|
import '../common.dart';
|
||||||
import '../models/model.dart';
|
import '../models/model.dart';
|
||||||
|
|
||||||
@ -6,6 +7,103 @@ void clientClose() {
|
|||||||
msgBox('', 'Close', 'Are you sure to close the connection?');
|
msgBox('', 'Close', 'Are you sure to close the connection?');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SEC1 = Duration(seconds: 1);
|
||||||
|
void showSuccess({Duration duration = SEC1}){
|
||||||
|
EasyLoading.dismiss();
|
||||||
|
EasyLoading.showSuccess(translate("Successful"),
|
||||||
|
duration: duration,
|
||||||
|
dismissOnTap: true,
|
||||||
|
maskType: EasyLoadingMaskType.black);
|
||||||
|
}
|
||||||
|
|
||||||
|
void showError({Duration duration = SEC1}){
|
||||||
|
EasyLoading.dismiss();
|
||||||
|
EasyLoading.showError(translate("Error"),
|
||||||
|
duration: duration,
|
||||||
|
dismissOnTap: true,
|
||||||
|
maskType: EasyLoadingMaskType.black);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updatePasswordDialog(){
|
||||||
|
final p0 = TextEditingController();
|
||||||
|
final p1 = TextEditingController();
|
||||||
|
var validateLength = false;
|
||||||
|
var validateSame = false;
|
||||||
|
DialogManager.show((setState, close) {
|
||||||
|
return CustomAlertDialog(
|
||||||
|
title: Text(translate('Set your own password')),
|
||||||
|
content: Form(
|
||||||
|
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||||
|
child: Column(mainAxisSize: MainAxisSize.min, children: [
|
||||||
|
TextFormField(
|
||||||
|
autofocus: true,
|
||||||
|
obscureText: true,
|
||||||
|
keyboardType: TextInputType.visiblePassword,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
labelText: translate('Password'),
|
||||||
|
),
|
||||||
|
controller: p0,
|
||||||
|
validator: (v) {
|
||||||
|
if (v == null) return null;
|
||||||
|
final val = v.trim().length > 5;
|
||||||
|
if (validateLength != val) {
|
||||||
|
// use delay to make setState success
|
||||||
|
Future.delayed(Duration(microseconds: 1),
|
||||||
|
() => setState(() => validateLength = val));
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
? null
|
||||||
|
: translate('Too short, at least 6 characters.');
|
||||||
|
},
|
||||||
|
),
|
||||||
|
TextFormField(
|
||||||
|
obscureText: true,
|
||||||
|
keyboardType: TextInputType.visiblePassword,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
labelText: translate('Confirmation'),
|
||||||
|
),
|
||||||
|
controller: p1,
|
||||||
|
validator: (v) {
|
||||||
|
if (v == null) return null;
|
||||||
|
final val = p0.text == v;
|
||||||
|
if (validateSame != val) {
|
||||||
|
Future.delayed(Duration(microseconds: 1),
|
||||||
|
() => setState(() => validateSame = val));
|
||||||
|
}
|
||||||
|
return val
|
||||||
|
? null
|
||||||
|
: translate('The confirmation is not identical.');
|
||||||
|
},
|
||||||
|
),
|
||||||
|
])),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
style: flatButtonStyle,
|
||||||
|
onPressed: () {
|
||||||
|
close();
|
||||||
|
},
|
||||||
|
child: Text(translate('Cancel')),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
style: flatButtonStyle,
|
||||||
|
onPressed: (validateLength && validateSame)
|
||||||
|
? () async {
|
||||||
|
close();
|
||||||
|
showLoading(translate("Waiting"));
|
||||||
|
if(await FFI.serverModel.updatePassword(p0.text)){
|
||||||
|
showSuccess();
|
||||||
|
}else{
|
||||||
|
showError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
child: Text(translate('OK')),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void enterPasswordDialog(String id) {
|
void enterPasswordDialog(String id) {
|
||||||
final controller = TextEditingController();
|
final controller = TextEditingController();
|
||||||
var remember = FFI.getByName('remember', id) == 'true';
|
var remember = FFI.getByName('remember', id) == 'true';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user