mirror of
https://gitee.com/willfree/min-vpn-client_v2.git
synced 2026-06-03 15:36:14 +08:00
finished activity: MainActivity
This commit is contained in:
@@ -77,6 +77,7 @@ android {
|
||||
dependencies {
|
||||
implementation files('libs\\gmhelper.jar')
|
||||
implementation files('libs\\BaiduLBS_Android.jar')
|
||||
implementation files('libs\\kotlin-stdlib-1.3.72-sources.jar')
|
||||
|
||||
// testImplementation 'junit:junit:4.+'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
|
||||
|
||||
@@ -8,11 +8,17 @@ package com.pkusz.min_vpn_client.activity.main;
|
||||
*/
|
||||
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.net.VpnService;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.RadioButton;
|
||||
import android.widget.RadioGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.github.ybq.android.spinkit.SpinKitView;
|
||||
import com.github.ybq.android.spinkit.style.DoubleBounce;
|
||||
@@ -21,17 +27,31 @@ import com.pkusz.min_vpn_client.activity.base.MINVpnBaseActivity;
|
||||
import com.pkusz.min_vpn_client.activity.login.LoginActivity;
|
||||
import com.pkusz.min_vpn_client.activity.setting.SettingActivity;
|
||||
import com.pkusz.min_vpn_client.model.MINVpnAPI;
|
||||
import com.pkusz.min_vpn_client.model.event.ConnectEvent;
|
||||
import com.pkusz.min_vpn_client.model.event.TimeoutEvent;
|
||||
import com.pkusz.min_vpn_client.services.MINVpnService;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.qjm253.quick_android_base.extensions.ContextExtensionKt;
|
||||
import cn.qjm253.quick_android_base.extensions.ViewExtensionKt;
|
||||
import cn.qjm253.quick_android_custom_view.tin_view.TinImageView;
|
||||
import cn.qjm253.quick_android_easy_bar.EasyBar;
|
||||
import cn.qjm253.quick_android_easy_bar.EasyBarExtensionsKt;
|
||||
import kotlin.Unit;
|
||||
import kotlin.collections.SetsKt;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
import kotlin.time.Duration;
|
||||
import kotlin.time.DurationKt;
|
||||
|
||||
public class MainActivity extends MINVpnBaseActivity<MainActivityPresenter>
|
||||
implements MainActivityContract.View{
|
||||
@@ -146,14 +166,45 @@ public class MainActivity extends MINVpnBaseActivity<MainActivityPresenter>
|
||||
* 连接VPN服务器
|
||||
*/
|
||||
private void connectVpn(){
|
||||
Set<String> packageNames = new HashSet<>();
|
||||
packageNames.add("com.pkusz.min_vpn_client");
|
||||
if (!checkPackages(packageNames)) {
|
||||
return;
|
||||
}
|
||||
Intent intent = VpnService.prepare(this);
|
||||
if (intent != null) {
|
||||
startActivityForResult(intent, 0);
|
||||
} else {
|
||||
onActivityResult(0, Activity.RESULT_OK, null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 不知道在干嘛,就硬翻 todo
|
||||
* 权限控制相关吧
|
||||
* @param packageNames
|
||||
* @return
|
||||
*/
|
||||
private boolean checkPackages(Set<String> packageNames){
|
||||
boolean hasCorrectPackageNames = packageNames.isEmpty() ||
|
||||
getPackageManager().getInstalledPackages(0).stream()
|
||||
.map(PackageInfo::describeContents)
|
||||
.collect(Collectors.toSet())
|
||||
.containsAll(packageNames);
|
||||
if (!hasCorrectPackageNames) {
|
||||
Toast.makeText(this, R.string.unknown_package_names, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
return hasCorrectPackageNames;
|
||||
}
|
||||
|
||||
/**
|
||||
* 断开VPN服务器
|
||||
*/
|
||||
private void disconnectVpn(){
|
||||
|
||||
startService(getServiceIntent().setAction(MINVpnService.ACTION_DISCONNECT));
|
||||
}
|
||||
private Intent getServiceIntent(){
|
||||
return new Intent(this, MINVpnService.class);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -161,4 +212,67 @@ public class MainActivity extends MINVpnBaseActivity<MainActivityPresenter>
|
||||
public MainActivityPresenter onCreatePresenter() {
|
||||
return new MainActivityPresenter(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @androidx.annotation.Nullable @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if(resultCode==Activity.RESULT_OK){
|
||||
System.out.println("starting min vpn service...");
|
||||
startService(getServiceIntent().setAction(MINVpnService.ACTION_CONNECT));
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
|
||||
public void onConnectFailed(ConnectEvent connectEvent){
|
||||
EventBus.getDefault().removeStickyEvent(connectEvent);
|
||||
// 接收VPN service状态,展示到界面
|
||||
if(connectEvent.getSuccess()){
|
||||
isConnected=connectEvent.getSuccess();
|
||||
if(connectEvent.getConnected()){
|
||||
showSuccess("连接成功");
|
||||
VPNstatus.setText("VPN正在运行中");
|
||||
VPNstatus.setTextColor(getColor(R.color.colorPrimary));
|
||||
}else{
|
||||
showSuccess("断开连接成功");
|
||||
VPNstatus.setText("VPN已经停止运行");
|
||||
VPNstatus.setTextColor(getColor(R.color.colorPrimaryYellow));
|
||||
}
|
||||
}else{
|
||||
if (connectEvent.getConnected()) {
|
||||
showError("断开连接失败");
|
||||
VPNstatus.setText("断开连接失败");
|
||||
VPNstatus.setTextColor(getColor(R.color.colorPrimaryYellow));
|
||||
} else {
|
||||
showError("连接失败");
|
||||
VPNstatus.setText("连接失败");
|
||||
VPNstatus.setTextColor(getColor(R.color.colorPrimaryYellow));
|
||||
}
|
||||
}
|
||||
|
||||
// 修改按钮状态
|
||||
btnConnect.setClickable(true);
|
||||
if (isConnected) {
|
||||
btnConnect.setImageResource(R.drawable.security);
|
||||
} else {
|
||||
btnConnect.setImageResource(R.drawable.launch);
|
||||
}
|
||||
ViewExtensionKt.animer2(btnConnect,ViewExtensionKt.alphaAnimation(btnConnect,
|
||||
0.3f,0.1f));
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
|
||||
public void onTimeOut(TimeoutEvent timeoutEvent){
|
||||
EventBus.getDefault().removeStickyEvent(timeoutEvent);
|
||||
// 接收VPN service状态,展示到界面
|
||||
showError("由于您长时间未发送数据包,连接已关闭");
|
||||
VPNstatus.setText("连接已关闭");
|
||||
VPNstatus.setTextColor(getColor(R.color.colorPrimaryYellow));
|
||||
|
||||
// 修改按钮状态
|
||||
btnConnect.setClickable(true);
|
||||
btnConnect.setImageResource(R.drawable.launch);
|
||||
ViewExtensionKt.animer2(btnConnect,ViewExtensionKt.alphaAnimation(btnConnect,
|
||||
0.3f,0.1f));
|
||||
}
|
||||
}
|
||||
|
||||
+11
@@ -144,6 +144,17 @@ fun View.animer(vararg animations: ObjectAnimator) {
|
||||
animatorSet.start()
|
||||
}
|
||||
|
||||
fun View.animer2(vararg animations: ObjectAnimator) {
|
||||
if (animations.isEmpty())
|
||||
return
|
||||
val animatorSet = AnimatorSet()
|
||||
val builder = animatorSet.setDuration(1000)
|
||||
.play(animations[0])
|
||||
animations.filterIndexed { index, _ -> index != 0 }
|
||||
.forEach { builder.with(it) }
|
||||
animatorSet.start()
|
||||
}
|
||||
|
||||
/**
|
||||
* 平移旋转渐变组合动画
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user