finished activity: MainActivity

This commit is contained in:
free will
2021-07-16 10:10:16 +08:00
parent 86aa515da6
commit b587210488
3 changed files with 127 additions and 1 deletions
+1
View File
@@ -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));
}
}
@@ -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()
}
/**
* 平移旋转渐变组合动画
*/