Skip to content

Commit

Permalink
routeconf success!
Browse files Browse the repository at this point in the history
todo: route conf page faster
  • Loading branch information
happycbbboy committed Feb 5, 2024
1 parent c4f84af commit 542de3f
Show file tree
Hide file tree
Showing 13 changed files with 306 additions and 122 deletions.
1 change: 0 additions & 1 deletion app/src/main/java/com/happycbbboy/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ public void onReceive(Context context, Intent intent) {
}
};*/


@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
@Override
protected void onCreate(Bundle savedInstanceState) {
Expand Down
29 changes: 18 additions & 11 deletions app/src/main/java/com/happycbbboy/domain/RouteConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,20 @@ public class RouteConfig {
Integer id;
@ColumnInfo(name = "name")
String name;

public final static int CURRENT_ROUTE_POLICY_NORMAL = 0;
public final static int CURRENT_ROUTE_POLICY_FREEE = 1;
public final static int CURRENT_ROUTE_POLICY_TUNNEL = 2;

@ColumnInfo(name = "current_route_policy")
Integer currentRoutePolicy;

@ColumnInfo(name = "route")
List<String> route;

@ColumnInfo(name = "include_package")
List<String> includePackage;
@ColumnInfo(name = "exclude_package")
List<String> excludePackage;
List<String> checkPackages;



public Integer getId() {
Expand All @@ -51,20 +58,20 @@ public void setRoute(List<String> route) {
this.route = route;
}

public List<String> getIncludePackage() {
return includePackage;
public Integer getCurrentRoutePolicy() {
return currentRoutePolicy;
}

public void setIncludePackage(List<String> includePackage) {
this.includePackage = includePackage;
public void setCurrentRoutePolicy(Integer currentRoutePolicy) {
this.currentRoutePolicy = currentRoutePolicy;
}

public List<String> getExcludePackage() {
return excludePackage;
public List<String> getCheckPackages() {
return checkPackages;
}

public void setExcludePackage(List<String> excludePackage) {
this.excludePackage = excludePackage;
public void setCheckPackages(List<String> checkPackages) {
this.checkPackages = checkPackages;
}

@NonNull
Expand Down
89 changes: 46 additions & 43 deletions app/src/main/java/com/happycbbboy/ui/base/AppItermAdapter.java
Original file line number Diff line number Diff line change
@@ -1,41 +1,31 @@
package com.happycbbboy.ui.base;

import android.util.Log;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CompoundButton;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.happycbbboy.R;
import com.happycbbboy.databinding.AppItermBinding;
import com.happycbbboy.ui.selector.SpinnerImageTextAdapter;
import com.happycbbboy.utils.AppUtils;

import java.util.ArrayList;
import java.util.List;

public class AppItermAdapter extends RecyclerView.Adapter<AppItermAdapter.ViewHolder> {

List<AppUtils.AppInfo> allApps;
private static LayoutInflater inflater;

/* List<String> includePackageName;
List<String> excludePackageName;
public List<String> getIncludePackageName() {
return includePackageName;
}
public List<String> getExcludePackageName() {
return excludePackageName;
}*/
public List<AppUtils.AppInfo> getAllApps() {
return allApps;
}

public AppItermAdapter(List<AppUtils.AppInfo> allApps) {
public AppItermAdapter(Context context,List<AppUtils.AppInfo> allApps) {
if (inflater==null) {
inflater = LayoutInflater.from(context);
}
this.allApps = allApps;
// this.includePackageName = includePackageName;
// this.excludePackageName = excludePackageName;
Expand All @@ -44,34 +34,29 @@ public AppItermAdapter(List<AppUtils.AppInfo> allApps) {
@NonNull
@Override
public AppItermAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new AppItermAdapter.ViewHolder(AppItermBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
return new ViewHolder(AppItermBinding.inflate(inflater, parent, false));
}

@Override
public void onBindViewHolder(@NonNull AppItermAdapter.ViewHolder holder, int position) {
Log.i("AppItermAdapter","onBindViewHolder accept");

// Log.i("AppItermAdapter", "onBindViewHolder accept:"+holder);
AppUtils.AppInfo appInfo = allApps.get(position);
holder.binding.appItermIcon.setImageDrawable(appInfo.getAppIcon());
holder.bind(appInfo);
/* holder.binding.appItermIcon.setImageDrawable(appInfo.getAppIcon());
holder.binding.appNameTextView.setText(appInfo.getAppName());
holder.binding.packageNameTextView.setText(appInfo.getPackageName());
// 使用 ArrayAdapter 设置 Spinner 的选项
SpinnerImageTextAdapter spinnerImageTextAdapter = new SpinnerImageTextAdapter(holder.itemView.getContext(), R.layout.selector_image_text_iterm, selectorImageTextIterms);
spinnerImageTextAdapter.setDropDownViewResource(R.layout.selector_image_text_iterm);
holder.binding.routeAppItermSpinner.setAdapter(spinnerImageTextAdapter);
holder.binding.routeAppItermSpinner.setSelection(appInfo.getPolicy());
holder.binding.routeAppItermSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// Get the selected item from the spinner
SpinnerImageTextAdapter.SelectorImageTextIterm selectedIterm = selectorImageTextIterms.get(position);
appInfo.setPolicy(selectedIterm.getPolicy());
}

holder.binding.appItermCheckbox.setChecked(appInfo.getCheck());
// 设置CheckBox状态变化的监听器
holder.binding.appItermCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onNothingSelected(AdapterView<?> parentView) {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
appInfo.setCheck(true);
} else {
appInfo.setCheck(false);
}
}
});
});*/
}


Expand All @@ -87,13 +72,31 @@ public ViewHolder(AppItermBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}

static List<SpinnerImageTextAdapter.SelectorImageTextIterm> selectorImageTextIterms = new ArrayList<>();

static {
selectorImageTextIterms.add(new SpinnerImageTextAdapter.SelectorImageTextIterm("默认", R.drawable.grey_dot, AppUtils.AppInfo.NORMAL));
selectorImageTextIterms.add(new SpinnerImageTextAdapter.SelectorImageTextIterm("放行", R.drawable.red_dot, AppUtils.AppInfo.FREEE));
selectorImageTextIterms.add(new SpinnerImageTextAdapter.SelectorImageTextIterm("拦截", R.drawable.gree_dot, AppUtils.AppInfo.TUNNEL));
public void bind(@NonNull AppUtils.AppInfo appInfo) {
// if (appInfo.getIniTial()) {
// binding.appItermCheckbox.setChecked(appInfo.getCheck());
// return;
// }
// 在这里将数据绑定到视图上
binding.appItermIcon.setImageDrawable(appInfo.getAppIcon());
binding.appNameTextView.setText(appInfo.getAppName());
binding.packageNameTextView.setText(appInfo.getPackageName());
binding.appItermCheckbox.setChecked(appInfo.getCheck());

// 设置CheckBox状态变化的监听器
binding.appItermCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
appInfo.setCheck(true);
} else {
appInfo.setCheck(false);
}
}
});
// appInfo.setIniTial(true);
}
}

}
17 changes: 15 additions & 2 deletions app/src/main/java/com/happycbbboy/ui/home/ProxyConfListFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,15 @@ public void onClick(View view) {
}

vpnOptionsImp.setRoute(routeConfig.getRoute());
vpnOptionsImp.setExcludePackage(routeConfig.getExcludePackage());
vpnOptionsImp.setIncludePackage(routeConfig.getIncludePackage());
if (routeConfig.getCurrentRoutePolicy() == RouteConfig.CURRENT_ROUTE_POLICY_NORMAL) {

}else if (routeConfig.getCurrentRoutePolicy() == RouteConfig.CURRENT_ROUTE_POLICY_FREEE) {
vpnOptionsImp.setIncludePackage(routeConfig.getCheckPackages());
}else if (routeConfig.getCurrentRoutePolicy() == RouteConfig.CURRENT_ROUTE_POLICY_TUNNEL) {
vpnOptionsImp.setExcludePackage(routeConfig.getCheckPackages());
}
// vpnOptionsImp.setExcludePackage(routeConfig.getExcludePackage());
// vpnOptionsImp.setIncludePackage(routeConfig.getIncludePackage());
VPNInterface.Start(getActivity().getApplication(), vpnOptionsImp);
// ((FloatingActionButton) binding.fab).setImageDrawable(AppCompatResources.getDrawable(requireContext(), android.R.drawable.ic_media_pause));
},
Expand All @@ -129,4 +136,10 @@ public void onDestroyView() {
super.onDestroyView();
binding = null;
}

@Override
public void onDestroy() {
super.onDestroy();
mDisposable.dispose();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ public void onPause() {
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
mDisposable.dispose();
}

@Subscribe(threadMode = ThreadMode.MAIN)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,5 @@ static class ItermView {
public Button edit;
public Button delete;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@
import com.happycbbboy.databases.RouteConfigDatabase;
import com.happycbbboy.databases.dao.RouteConfigDao;
import com.happycbbboy.databinding.FragmentRouteConfListBinding;
import com.happycbbboy.utils.AppUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;

import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
Expand All @@ -30,13 +35,30 @@ public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RouteConfigDatabase instance = RouteConfigDatabase.getInstance(getActivity().getApplication());
routeConfigDao = instance.proxyConfigDao();
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
Log.i("async AppUtils", "start load all app");
for (int i = 0; i < 10; i++) {
List<AppUtils.AppInfo> allInstalledApps = AppUtils.getAllInstalledApps(requireContext(), "", new ArrayList<>(0));
if (allInstalledApps != null && allInstalledApps.size() > 0) {
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Log.e("getAllInstalledApps", "getAllInstalledApps sleep err:" + e.getMessage());
}
}
}
});
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentRouteConfListBinding.inflate(inflater, container, false);
RecyclerView root = (RecyclerView)binding.getRoot();
RecyclerView root = (RecyclerView) binding.getRoot();

mDisposable.add(routeConfigDao.getAll()
.subscribeOn(Schedulers.io())
Expand All @@ -48,4 +70,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,

return root;
}

@Override
public void onDestroy() {
super.onDestroy();
mDisposable.dispose();
}
}
Loading

0 comments on commit 542de3f

Please sign in to comment.