version:1.8.5

date:2021-12-03 15:42:13
fix:
add:准备移植到老人平板项目
This commit is contained in:
2021-12-03 15:43:25 +08:00
parent d69ed39e22
commit 88f65afb48
21 changed files with 655 additions and 293 deletions

View File

@@ -1,7 +1,7 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
static def appName() { static def appName() {
return "SnInfo" return "UIUISN"
} }
static def releaseTime() { static def releaseTime() {
@@ -9,6 +9,20 @@ static def releaseTime() {
} }
android { android {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
Set<File> fileSet = options.bootstrapClasspath.getFiles()
List<File> newFileList = new ArrayList<>();
//JAVA语法可连续调用输入参数建议为相对路径
newFileList.add(new File("libs/framework.jar"))
//最后将原始参数添加
newFileList.addAll(fileSet)
options.bootstrapClasspath = files(
newFileList.toArray()
)
}
}
compileSdkVersion 29 compileSdkVersion 29
buildToolsVersion "29.0.3" buildToolsVersion "29.0.3"
@@ -46,8 +60,8 @@ android {
productFlavors { productFlavors {
beta { beta {
flavorDimensions "default" flavorDimensions "default"
versionCode 82 versionCode 85
versionName "1.8.2" versionName "1.8.5"
manifestPlaceholders = [ manifestPlaceholders = [
JPUSH_PKGNAME: "com.info.sn", JPUSH_PKGNAME: "com.info.sn",
JPUSH_APPKEY : "edf9cec22731b8b2fed56ee6", //JPush 上注册的包名对应的 Appkey. JPUSH_APPKEY : "edf9cec22731b8b2fed56ee6", //JPush 上注册的包名对应的 Appkey.
@@ -179,7 +193,7 @@ android {
dependencies { dependencies {
// implementation fileTree(dir: 'libs', include: ['*.jar']) // implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0'
compileOnly files('src/main/libs/classes.jar') compileOnly files('libs/framework.jar')
implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'androidx.appcompat:appcompat:1.3.1'
//implementation 'com.android.support:multidex:1.0.3' //implementation 'com.android.support:multidex:1.0.3'

View File

@@ -221,6 +221,7 @@ public class MainActivity extends BaseActivity implements MainContact.MainView,
@Override @Override
public void initData() { public void initData() {
HTTPInterface.setBrowserWhiteList(this);
if (DeviceManager.isDebugMode()) { if (DeviceManager.isDebugMode()) {
Log.e(TAG, "getAllSPUtils: " + JSONObject.toJSONString(SPUtils.getAll(this))); Log.e(TAG, "getAllSPUtils: " + JSONObject.toJSONString(SPUtils.getAll(this)));
// TimeUtils.setSystemTime(1627702095000L); // TimeUtils.setSystemTime(1627702095000L);
@@ -894,13 +895,17 @@ public class MainActivity extends BaseActivity implements MainContact.MainView,
@Override @Override
public void setAppStart() { public void setAppStart() {
Log.e(TAG, "SettingFinished: " + (System.currentTimeMillis() - timeMillis) + " ms");
mPresenter.getTimeControl(); mPresenter.getTimeControl();
} }
@Override @Override
public void setTimeControl() { public void setTimeControl() {
mPresenter.getScreenLock();
}
@Override
public void setScreenLock() {
Log.e(TAG, "SettingFinished: " + (System.currentTimeMillis() - timeMillis) + " ms");
} }

View File

@@ -37,6 +37,7 @@ public class MainContact {
void setBrowserWhiteList(); void setBrowserWhiteList();
void setAppStart(); void setAppStart();
void setTimeControl(); void setTimeControl();
void setScreenLock();
} }
interface Presenter extends BasePresenter<MainView> { interface Presenter extends BasePresenter<MainView> {
@@ -82,5 +83,7 @@ public class MainContact {
void getAppStart(); void getAppStart();
//获取时间管控、 //获取时间管控、
void getTimeControl(); void getTimeControl();
//获取锁屏管控
void getScreenLock();
} }
} }

View File

@@ -26,26 +26,25 @@ import com.info.sn.bean.gankao.PowerUser;
import com.info.sn.bean.zuoye.AppInfo; import com.info.sn.bean.zuoye.AppInfo;
import com.info.sn.bean.zuoye.AppStart; import com.info.sn.bean.zuoye.AppStart;
import com.info.sn.bean.zuoye.BaseResponse; import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.bean.zuoye.BrowserBean; import com.info.sn.bean.zuoye.Label;
import com.info.sn.bean.zuoye.Response; import com.info.sn.bean.zuoye.browser.BrowserApiData;
import com.info.sn.bean.zuoye.SystemSettings; import com.info.sn.bean.zuoye.browser.BrowserBean;
import com.info.sn.bean.zuoye.UserAvatarInfo; import com.info.sn.bean.zuoye.UserAvatarInfo;
import com.info.sn.bean.zuoye.UserInfo; import com.info.sn.bean.zuoye.UserInfo;
import com.info.sn.config.Configs; import com.info.sn.config.Configs;
import com.info.sn.config.Scheme; import com.info.sn.config.Scheme;
import com.info.sn.jpush.TagAliasOperatorHelper;
import com.info.sn.manager.AmapManager; import com.info.sn.manager.AmapManager;
import com.info.sn.manager.ControlManager; import com.info.sn.manager.ControlManager;
import com.info.sn.manager.NetInterfaceManager; import com.info.sn.manager.NetInterfaceManager;
import com.info.sn.network.HTTPInterface; import com.info.sn.network.HTTPInterface;
import com.info.sn.service.MainService; import com.info.sn.network.api.BrowserLabel;
import com.info.sn.service.ManagerService; import com.info.sn.service.ManagerService;
import com.info.sn.service.RemoteService;
import com.info.sn.utils.ApkUtils; import com.info.sn.utils.ApkUtils;
import com.info.sn.utils.CXAESUtil; import com.info.sn.utils.CXAESUtil;
import com.info.sn.utils.JGYUtils; import com.info.sn.utils.JGYUtils;
import com.info.sn.utils.LaunchTools; import com.info.sn.utils.LaunchTools;
import com.info.sn.utils.SPUtils; import com.info.sn.utils.SPUtils;
import com.info.sn.utils.ServiceAliveUtils;
import com.info.sn.utils.TimeUtils; import com.info.sn.utils.TimeUtils;
import com.info.sn.utils.ToastUtil; import com.info.sn.utils.ToastUtil;
import com.info.sn.utils.URLUtils; import com.info.sn.utils.URLUtils;
@@ -60,16 +59,13 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.stream.Collectors;
import io.reactivex.Observer; import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_SET;
import static com.info.sn.jpush.TagAliasOperatorHelper.sequence;
/** /**
* @author jgy02 * @author jgy02
*/ */
@@ -820,35 +816,27 @@ public class MainPresenter implements MainContact.Presenter {
@Override @Override
public void getBrowserLabel() { public void getBrowserLabel() {
NetInterfaceManager.getInstance() NetInterfaceManager.getInstance().getLabelControl()
.getLabelControl()
.compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() { .subscribe(new Observer<BaseResponse<Label>>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
Log.e(TAG + "getBrowserLabel", "onSubscribe: "); Log.e(TAG + "getBrowserLabel", "onSubscribe: ");
} }
@Override @Override
public void onNext(BaseResponse baseResponse) { public void onNext(BaseResponse<Label> labelBaseResponse) {
Log.e(TAG + "getBrowserLabel", "onNext: " + baseResponse); Log.e(TAG + "getBrowserLabel", "onNext: " + labelBaseResponse);
int code = baseResponse.code; if (labelBaseResponse.code == 200) {
if (code == 200) { String home_page = labelBaseResponse.data.getHome_page();
Gson gson = new Gson();
String data = gson.toJson(baseResponse.data);
JsonObject jsonObject = gson.fromJson(data, JsonObject.class);
// JsonElement label = jsonObject.get(0).getAsJsonObject();
String home_page = jsonObject.get("home_page").getAsString();
JGYUtils.putString(mContext.getContentResolver(), "homepagURL", home_page); JGYUtils.putString(mContext.getContentResolver(), "homepagURL", home_page);
String label_page = jsonObject.get("label_page").getAsString();
// Log.e("getBrowserLabel", "onNext: " + home_page);
//主页 //主页
Intent homepag = new Intent("qch_app_brower_homepage"); Intent homepag = new Intent("qch_app_brower_homepage");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
homepag.setPackage("com.android.settings") homepag.setPackage("com.android.settings")
.setPackage("com.android.browser"); .setPackage("com.android.browser");
} }
if (home_page != null && !home_page.equals("")) { if (!TextUtils.isEmpty(home_page)) {
homepag.putExtra("homepage", home_page); homepag.putExtra("homepage", home_page);
} else { } else {
homepag.putExtra("homepage", "Invalid"); homepag.putExtra("homepage", "Invalid");
@@ -856,12 +844,13 @@ public class MainPresenter implements MainContact.Presenter {
mContext.sendBroadcast(homepag); mContext.sendBroadcast(homepag);
//书签 //书签
String label_page = labelBaseResponse.data.getLabel_page();
Intent websiteBookMark = new Intent("qch_app_brower_website"); Intent websiteBookMark = new Intent("qch_app_brower_website");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
websiteBookMark.setPackage("com.android.settings") websiteBookMark.setPackage("com.android.settings")
.setPackage("com.android.browser"); .setPackage("com.android.browser");
} }
if (label_page != null && !label_page.equals("")) { if (!TextUtils.isEmpty(label_page)) {
websiteBookMark.putExtra("websiteBookMark", label_page); websiteBookMark.putExtra("websiteBookMark", label_page);
} else { } else {
websiteBookMark.putExtra("websiteBookMark", "Invalid"); websiteBookMark.putExtra("websiteBookMark", "Invalid");
@@ -904,42 +893,33 @@ public class MainPresenter implements MainContact.Presenter {
*/ */
@Override @Override
public void getBrowserWhiteList() { public void getBrowserWhiteList() {
NetInterfaceManager.getInstance() NetInterfaceManager.getInstance().getBrowserControl()
.getBrowserControl()
.compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY)) .compose(getProvider().bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() { .subscribe(new Observer<BaseResponse<BrowserApiData>>() {
@Override @Override
public void onSubscribe(Disposable d) { public void onSubscribe(Disposable d) {
Log.e(TAG + "getBrowserWhiteList", "onSubscribe: "); Log.e(TAG + "getBrowserWhiteList", "onSubscribe: ");
} }
@Override @Override
public void onNext(BaseResponse baseResponse) { public void onNext(BaseResponse<BrowserApiData> response) {
Log.e(TAG + "getBrowserWhiteList", "onNext: "); Log.e(TAG + "getBrowserWhiteList", "onNext: " + response);
int code = baseResponse.code; if (response.code == 200) {
if (code == 200) {
JSONObject jsonObject = (JSONObject) JSON.toJSON(baseResponse.data);
//白名单 //白名单
List<BrowserBean> white = JSON.parseArray(jsonObject.getString("browser"), BrowserBean.class); List<BrowserBean> white = response.data.getWhiteList();
if (null != white && white.size() != 0) { if (null != white && white.size() != 0) {
StringBuilder s = new StringBuilder(); boolean whiteList = JGYUtils.putString(mContext.getContentResolver(), "DeselectBrowserArray",
for (BrowserBean bean : white) { white.stream().map(BrowserBean::getAddress).collect(Collectors.joining(",")));
s.append(bean.getAddress()).append(","); Log.e("getBrowserWhiteList", "setBrowserList_white:" + white + ":" + whiteList);
}
boolean whiteList = JGYUtils.putString(mContext.getContentResolver(), "DeselectBrowserArray", s.toString());
Log.e(TAG + "getBrowserWhiteList", "setBrowserList_white: ");
} else { } else {
JGYUtils.putString(mContext.getContentResolver(), "DeselectBrowserArray", " "); JGYUtils.putString(mContext.getContentResolver(), "DeselectBrowserArray", " ");
} }
//黑名单 //黑名单
List<BrowserBean> black = JSON.parseArray(jsonObject.getString("browser_black"), BrowserBean.class); List<BrowserBean> black = response.data.getBlackList();
if (null != black && black.size() != 0) { if (null != black && black.size() != 0) {
StringBuilder s = new StringBuilder(); boolean blackList = JGYUtils.putString(mContext.getContentResolver(), "qch_webblack_url",
for (BrowserBean bean : black) { black.stream().map(BrowserBean::getAddress).collect(Collectors.joining(",")));
s.append(bean.getAddress()).append(","); Log.e("getBrowserWhiteList", "setBrowserList_black:" + black + ":" + blackList);
}
boolean blackList = JGYUtils.putString(mContext.getContentResolver(), "qch_webblack_url", s.toString());
Log.e(TAG + "getBrowserWhiteList", "setBrowserList_black:$blackList:$black");
} else { } else {
JGYUtils.putString(mContext.getContentResolver(), "qch_webblack_url", " "); JGYUtils.putString(mContext.getContentResolver(), "qch_webblack_url", " ");
} }
@@ -1060,4 +1040,51 @@ public class MainPresenter implements MainContact.Presenter {
} }
}); });
} }
@Override
public void getScreenLock() {
NetInterfaceManager.getInstance()
.getScreenLockControl()
.getScreenshot(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("getScreenLock", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse baseResponse) {
Log.e("getScreenLock", "onNext: " + baseResponse);
int code = baseResponse.code;
if (code == 200) {
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(baseResponse.data));
int is_screen_lock = jsonObject.getIntValue("is_screen_lock");
if (!ServiceAliveUtils.isServiceAlice(mContext, ManagerService.class.getName())) {
mContext.startService(new Intent(mContext, ManagerService.class));
}
Intent intent = new Intent();
// intent.putExtra("name", name);
if (1 == is_screen_lock) {
intent.setAction(ManagerService.ACTION_LOCK);
} else if (0 == is_screen_lock) {
intent.setAction(ManagerService.ACTION_UNLOCK);
}
mContext.sendBroadcast(intent);
}
}
@Override
public void onError(Throwable e) {
Log.e("getScreenLock", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getScreenLock", "onComplete: ");
}
});
}
} }

View File

@@ -2,7 +2,7 @@ package com.info.sn.bean.zuoye;
import java.io.Serializable; import java.io.Serializable;
public class BrowserLabel implements Serializable { public class Label implements Serializable {
private static final long serialVersionUID = 8836213741844057940L; private static final long serialVersionUID = 8836213741844057940L;
private String home_page; private String home_page;

View File

@@ -0,0 +1,31 @@
package com.info.sn.bean.zuoye.browser;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.List;
public class BrowserApiData implements Serializable {
private static final long serialVersionUID = -4027747617202520823L;
@SerializedName("browser")
List<BrowserBean> whiteList;
@SerializedName("browser_black")
List<BrowserBean> blackList;
public List<BrowserBean> getWhiteList() {
return whiteList;
}
public void setWhiteList(List<BrowserBean> whiteList) {
this.whiteList = whiteList;
}
public List<BrowserBean> getBlackList() {
return blackList;
}
public void setBlackList(List<BrowserBean> blackList) {
this.blackList = blackList;
}
}

View File

@@ -1,4 +1,9 @@
package com.info.sn.bean.zuoye; package com.info.sn.bean.zuoye.browser;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable; import java.io.Serializable;
@@ -22,4 +27,10 @@ public class BrowserBean implements Serializable {
public void setType(int type) { public void setType(int type) {
this.type = type; this.type = type;
} }
@NonNull
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
} }

View File

@@ -7,8 +7,10 @@ import android.util.Log;
import com.info.sn.bean.zuoye.AppInfo; import com.info.sn.bean.zuoye.AppInfo;
import com.info.sn.bean.zuoye.AppStart; import com.info.sn.bean.zuoye.AppStart;
import com.info.sn.bean.zuoye.BaseResponse; import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.bean.zuoye.Label;
import com.info.sn.bean.zuoye.UserAvatarInfo; import com.info.sn.bean.zuoye.UserAvatarInfo;
import com.info.sn.bean.zuoye.UserInfo; import com.info.sn.bean.zuoye.UserInfo;
import com.info.sn.bean.zuoye.browser.BrowserApiData;
import com.info.sn.network.UrlAddress; import com.info.sn.network.UrlAddress;
import com.info.sn.network.api.APPJump; import com.info.sn.network.api.APPJump;
import com.info.sn.network.api.AddAppInstall; import com.info.sn.network.api.AddAppInstall;
@@ -125,6 +127,38 @@ public class NetInterfaceManager {
return originalResponse.newBuilder().build(); return originalResponse.newBuilder().build();
} }
}; };
Interceptor interceptor = new Interceptor() {
@NotNull
@Override
public Response intercept(@NotNull Chain chain) throws IOException {
Request request = chain.request();
//相同的请求
String requestKey = MD5Util.getUpperMD5Str(request.method() + request.url().toString());
long time = System.currentTimeMillis();//请求时间
try {
if (requestIdsMap.size() > 0 && requestIdsMap.containsKey(requestKey)) {
Log.e("REPEAT-REQUEST", "重复请求:" + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url());
chain.call().cancel();
return new Response.Builder()
.protocol(Protocol.get(CUSTOM_REPEAT_REQ_PROTOCOL))
.request(request) //multi thread
.build();
}
requestIdsMap.put(requestKey, time);
Log.e("REPEAT-REQUEST", "注册请求:" + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url());
// Request.Builder builder = request.newBuilder();
// builder.addHeader("header", jsonObject.toString());
return chain.proceed(request);
} catch (IOException e) {
throw e;
} finally {
if (requestIdsMap.containsKey(requestKey) && requestIdsMap.containsValue(time)) {//请求任务完成删除map中的数据
requestIdsMap.remove(requestKey);
Log.e("REPEAT-REQUEST", "移除请求:" + requestKey + " Method @" + request.method() + " --- " + " URL = " + request.url());
}
}
}
};
//如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了 //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了
OkHttpClient.Builder builder = new OkHttpClient.Builder(); OkHttpClient.Builder builder = new OkHttpClient.Builder();
@@ -132,8 +166,9 @@ public class NetInterfaceManager {
builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间 builder.writeTimeout(timeOut, TimeUnit.SECONDS);// 设置写入超时时间
builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间 builder.readTimeout(timeOut, TimeUnit.SECONDS);// 设置读取数据超时时间
builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 builder.retryOnConnectionFailure(true);// 设置进行连接失败重试
builder.addInterceptor(myHttpInterceptor); builder.addInterceptor(interceptor);
builder.addNetworkInterceptor(mRequestInterceptor); // builder.addInterceptor(myHttpInterceptor);
// builder.addNetworkInterceptor(mRequestInterceptor);
// 设置缓存文件路径 // 设置缓存文件路径
String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache"; String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache";
@@ -197,14 +232,14 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread()); .observeOn(AndroidSchedulers.mainThread());
} }
public Observable<BaseResponse> getBrowserControl() { public Observable<BaseResponse<BrowserApiData>> getBrowserControl() {
return mRetrofit.create(Browser.class) return mRetrofit.create(Browser.class)
.getBrowser(Utils.getSerial()) .getBrowser(Utils.getSerial())
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()); .observeOn(AndroidSchedulers.mainThread());
} }
public Observable<BaseResponse> getLabelControl() { public Observable<BaseResponse<Label>> getLabelControl() {
return mRetrofit.create(BrowserLabel.class) return mRetrofit.create(BrowserLabel.class)
.getLabel(Utils.getSerial()) .getLabel(Utils.getSerial())
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())

View File

@@ -24,7 +24,9 @@ import com.info.sn.bean.zuoye.AppInfo;
import com.info.sn.bean.zuoye.AppStart; import com.info.sn.bean.zuoye.AppStart;
import com.info.sn.bean.zuoye.AppUploadInfo; import com.info.sn.bean.zuoye.AppUploadInfo;
import com.info.sn.bean.zuoye.BaseResponse; import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.bean.zuoye.BrowserBean; import com.info.sn.bean.zuoye.Label;
import com.info.sn.bean.zuoye.browser.BrowserApiData;
import com.info.sn.bean.zuoye.browser.BrowserBean;
import com.info.sn.jpush.TagAliasOperatorHelper; import com.info.sn.jpush.TagAliasOperatorHelper;
import com.info.sn.manager.ControlManager; import com.info.sn.manager.ControlManager;
import com.info.sn.manager.NetInterfaceManager; import com.info.sn.manager.NetInterfaceManager;
@@ -44,14 +46,19 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import cn.jpush.android.api.JPushInterface; import cn.jpush.android.api.JPushInterface;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.ObservableOnSubscribe; import io.reactivex.ObservableOnSubscribe;
import io.reactivex.ObservableSource;
import io.reactivex.Observer; import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.functions.BiFunction;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_SET; import static com.info.sn.jpush.TagAliasOperatorHelper.ACTION_SET;
@@ -97,127 +104,161 @@ public class HTTPInterface {
}); });
} }
public static void setBrowserWhiteList(Context context) {
/** Observable.zip(NetInterfaceManager.getInstance().getLabelControl(),
* @param context 获取浏览器黑白名单 NetInterfaceManager.getInstance().getBrowserControl(),
*/ new BiFunction<BaseResponse<Label>, BaseResponse<BrowserApiData>, HashSet<String>>() {
public static void getBrowserWhiteList(final Context context) {
NetInterfaceManager.getInstance().getBrowserControl()
.subscribe(new Observer<BaseResponse>() {
@Override @Override
public void onSubscribe(@NonNull Disposable d) { public HashSet<String> apply(BaseResponse<Label> baseResponse, BaseResponse<BrowserApiData> baseResponse2) throws Exception {
HashSet<String> hashSet = new HashSet<>();
} setLabelResponse(context, baseResponse);
if (baseResponse.code == 200) {
@Override if (!TextUtils.isEmpty(baseResponse.data.getHome_page())) {
public void onNext(@NonNull BaseResponse baseResponse) { hashSet.add(baseResponse.data.getHome_page());
int code = baseResponse.code;
if (code == 200) {
JSONObject jsonObject = (JSONObject) JSON.toJSON(baseResponse.data);
//白名单
List<BrowserBean> white = JSON.parseArray(jsonObject.getString("browser"), BrowserBean.class);
if (null != white && white.size() != 0) {
StringBuilder s = new StringBuilder();
for (BrowserBean bean : white) {
s.append(bean.getAddress()).append(",");
}
boolean whiteList = JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", s.toString());
Log.e("setBrowser", "setBrowserList_white:" + whiteList + ":" + white);
} else {
JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
} }
//黑名单
List<BrowserBean> black = JSON.parseArray(jsonObject.getString("browser_black"), BrowserBean.class);
if (null != black && black.size() != 0) {
StringBuilder s = new StringBuilder();
for (BrowserBean bean : black) {
s.append(bean.getAddress()).append(",");
}
boolean blackList = JGYUtils.putString(context.getContentResolver(), "qch_webblack_url", s.toString());
Log.e("setBrowser", "setBrowserList_black:" + blackList + ":" + black);
} else {
JGYUtils.putString(context.getContentResolver(), "qch_webblack_url", " ");
}
} else {
JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
JGYUtils.putString(context.getContentResolver(), "qch_webblack_url", " ");
} }
setBrowserResponse(context, baseResponse2);
if (baseResponse2.code == 200) {
List<BrowserBean> beanList = baseResponse2.data.getWhiteList();
if (beanList != null && beanList.size() != 0) {
for (BrowserBean browserBean : beanList) {
hashSet.add(browserBean.getAddress());
}
}
}
return hashSet;
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<HashSet<String>>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("setBrowserWhiteList", "onSubscribe: ");
} }
@Override @Override
public void onError(@NonNull Throwable e) { public void onNext(HashSet<String> strings) {
Log.e("setBrowser", "onError: " + e.getMessage()); Log.e("setBrowserWhiteList", "onNext: " + strings);
}
@Override
public void onError(Throwable e) {
Log.e("setBrowserWhiteList", "onError: " + e.getMessage());
onComplete();
} }
@Override @Override
public void onComplete() { public void onComplete() {
Log.e("setBrowser", "onComplete: "); Log.e("setBrowserWhiteList", "onComplete: ");
new URLUtils(context).setBrowserList();
}
});
// NetInterfaceManager.getInstance().getLabelControl().getLabel(Utils.getSerial())
// .flatMap(new Function<BaseResponse, ObservableSource<BaseResponse<BrowserApiData>>>() {
// @Override
// public ObservableSource<BaseResponse<BrowserApiData>> apply(BaseResponse baseResponse) throws Exception {
// return NetInterfaceManager.getInstance().getBrowserControl().getBrowser(Utils.getSerial());
// }
// })
// .map(new Function<BaseResponse, String>() {
// @Override
// public String apply(BaseResponse baseResponse) throws Exception {
// return null;
// }
// })
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe(new Observer<String>() {
// @Override
// public void onSubscribe(Disposable d) {
// Log.e("setBrowserWhiteList", "onSubscribe: ");
// }
//
// @Override
// public void onNext(String s) {
// Log.e("setBrowserWhiteList", "onNext: ");
// }
//
// @Override
// public void onError(Throwable e) {
// Log.e("setBrowserWhiteList", "onError: ");
// }
//
// @Override
// public void onComplete() {
// Log.e("setBrowserWhiteList", "onComplete: ");
// }
// });
}
/**
* @param context 获取浏览器黑白名单
*/
public static void getBrowserWhiteList(Context context) {
NetInterfaceManager.getInstance().getBrowserControl()
.subscribe(new Observer<BaseResponse<BrowserApiData>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getBrowserWhiteList", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<BrowserApiData> response) {
setBrowserResponse(context, response);
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getBrowserWhiteList", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("getBrowserWhiteList", "onComplete: ");
new URLUtils(context).setBrowserList(); new URLUtils(context).setBrowserList();
} }
}); });
} }
private static void setBrowserResponse(Context context, BaseResponse<BrowserApiData> response) {
if (response.code == 200) {
//白名单
List<BrowserBean> white = response.data.getWhiteList();
if (null != white && white.size() != 0) {
boolean whiteList = JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray",
white.stream().map(BrowserBean::getAddress).collect(Collectors.joining(",")));
Log.e("getBrowserWhiteList", "setBrowserList_white:" + white + ":" + whiteList);
} else {
JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
}
//黑名单
List<BrowserBean> black = response.data.getBlackList();
if (null != black && black.size() != 0) {
boolean blackList = JGYUtils.putString(context.getContentResolver(), "qch_webblack_url",
black.stream().map(BrowserBean::getAddress).collect(Collectors.joining(",")));
Log.e("getBrowserWhiteList", "setBrowserList_black:" + black + ":" + blackList);
} else {
JGYUtils.putString(context.getContentResolver(), "qch_webblack_url", " ");
}
} else {
JGYUtils.putString(context.getContentResolver(), "DeselectBrowserArray", " ");
JGYUtils.putString(context.getContentResolver(), "qch_webblack_url", " ");
}
}
public static void getBrowserLabel(final Context context) { public static void getBrowserLabel(final Context context) {
NetInterfaceManager.getInstance().getLabelControl() NetInterfaceManager.getInstance().getLabelControl()
.subscribe(new Observer<BaseResponse>() { .subscribe(new Observer<BaseResponse<Label>>() {
@Override @Override
public void onSubscribe(@NonNull Disposable d) { public void onSubscribe(@NonNull Disposable d) {
Log.e("getBrowserLabel", "onSubscribe: ");
} }
@Override @Override
public void onNext(@NonNull BaseResponse listBaseResponse) { public void onNext(@NonNull BaseResponse<Label> response) {
int code = listBaseResponse.code; setLabelResponse(context, response);
if (code == 200) {
Gson gson = new Gson();
String data = gson.toJson(listBaseResponse.data);
JsonObject jsonObject = gson.fromJson(data, JsonObject.class);
// JsonElement label = jsonObject.get(0).getAsJsonObject();
String home_page = jsonObject.get("home_page").getAsString();
JGYUtils.putString(context.getContentResolver(), "homepagURL", home_page);
String label_page = jsonObject.get("label_page").getAsString();
// Log.e("getBrowserLabel", "onNext: " + home_page);
//主页
Intent homepag = new Intent("qch_app_brower_homepage");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
homepag.setPackage("com.android.settings")
.setPackage("com.android.browser");
}
if (home_page != null && !"".equals(home_page)) {
homepag.putExtra("homepage", home_page);
} else {
homepag.putExtra("homepage", "Invalid");
}
context.sendBroadcast(homepag);
//书签
Intent websiteBookMark = new Intent("qch_app_brower_website");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
websiteBookMark.setPackage("com.android.settings")
.setPackage("com.android.browser");
}
if (label_page != null && !"".equals(label_page)) {
websiteBookMark.putExtra("websiteBookMark", label_page);
} else {
websiteBookMark.putExtra("websiteBookMark", "Invalid");
}
context.sendBroadcast(websiteBookMark);
} else {
Intent intent1 = new Intent("qch_app_brower_homepage");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent1.setPackage("com.android.settings")
.setPackage("com.android.browser");
}
intent1.putExtra("homepage", "Invalid");
context.sendBroadcast(intent1);
Intent intent2 = new Intent("qch_app_brower_website");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent2.setPackage("com.android.settings")
.setPackage("com.android.browser");
}
intent2.putExtra("websiteBookMark", "Invalid");
context.sendBroadcast(intent2);
}
} }
@Override @Override
@@ -228,11 +269,61 @@ public class HTTPInterface {
@Override @Override
public void onComplete() { public void onComplete() {
Log.e("getBrowserLabel", "onComplete: ");
new URLUtils(context).setBrowserList(); new URLUtils(context).setBrowserList();
} }
}); });
} }
private static void setLabelResponse(Context context, BaseResponse<Label> response) {
if (response.code == 200) {
String home_page = response.data.getHome_page();
JGYUtils.putString(context.getContentResolver(), "homepagURL", home_page);
//主页
Intent homepag = new Intent("qch_app_brower_homepage");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
homepag.setPackage("com.android.settings")
.setPackage("com.android.browser");
}
if (!TextUtils.isEmpty(home_page)) {
homepag.putExtra("homepage", home_page);
} else {
homepag.putExtra("homepage", "Invalid");
}
context.sendBroadcast(homepag);
//书签
String label_page = response.data.getLabel_page();
Intent websiteBookMark = new Intent("qch_app_brower_website");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
websiteBookMark.setPackage("com.android.settings")
.setPackage("com.android.browser");
}
if (label_page != null && !"".equals(label_page)) {
websiteBookMark.putExtra("websiteBookMark", label_page);
} else {
websiteBookMark.putExtra("websiteBookMark", "Invalid");
}
context.sendBroadcast(websiteBookMark);
} else {
Intent intent1 = new Intent("qch_app_brower_homepage");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent1.setPackage("com.android.settings")
.setPackage("com.android.browser");
}
intent1.putExtra("homepage", "Invalid");
context.sendBroadcast(intent1);
Intent intent2 = new Intent("qch_app_brower_website");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent2.setPackage("com.android.settings")
.setPackage("com.android.browser");
}
intent2.putExtra("websiteBookMark", "Invalid");
context.sendBroadcast(intent2);
}
}
public static void getAppStart(final Context context, List<AppInfo> appInfoList) { public static void getAppStart(final Context context, List<AppInfo> appInfoList) {
NetInterfaceManager.getInstance().getAppStartControl() NetInterfaceManager.getInstance().getAppStartControl()
.subscribe(new Observer<BaseResponse<List<AppStart>>>() { .subscribe(new Observer<BaseResponse<List<AppStart>>>() {
@@ -797,7 +888,7 @@ public class HTTPInterface {
.subscribe(new Observer<BaseResponse>() { .subscribe(new Observer<BaseResponse>() {
@Override @Override
public void onSubscribe(@NonNull Disposable d) { public void onSubscribe(@NonNull Disposable d) {
Log.e("getSystemSettings", "onSubscribe: ");
} }
@Override @Override
@@ -813,11 +904,12 @@ public class HTTPInterface {
@Override @Override
public void onError(@NonNull Throwable e) { public void onError(@NonNull Throwable e) {
Log.e("getSystemSettings", "onError: " + e.getMessage()); Log.e("getSystemSettings", "onError: " + e.getMessage());
onComplete();
} }
@Override @Override
public void onComplete() { public void onComplete() {
Log.e("getSystemSettings", "onComplete: ");
} }
}); });
} }

View File

@@ -1,6 +1,7 @@
package com.info.sn.network.api; package com.info.sn.network.api;
import com.info.sn.bean.zuoye.BaseResponse; import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.bean.zuoye.browser.BrowserApiData;
import com.info.sn.network.UrlAddress; import com.info.sn.network.UrlAddress;
import io.reactivex.Observable; import io.reactivex.Observable;
@@ -9,7 +10,7 @@ import retrofit2.http.Query;
public interface Browser { public interface Browser {
@GET(UrlAddress.SET_BROWSER_URL) @GET(UrlAddress.SET_BROWSER_URL)
Observable<BaseResponse> getBrowser( Observable<BaseResponse<BrowserApiData>> getBrowser(
@Query("sn") String sn @Query("sn") String sn
); );
} }

View File

@@ -1,6 +1,7 @@
package com.info.sn.network.api; package com.info.sn.network.api;
import com.info.sn.bean.zuoye.BaseResponse; import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.bean.zuoye.Label;
import com.info.sn.network.UrlAddress; import com.info.sn.network.UrlAddress;
import io.reactivex.Observable; import io.reactivex.Observable;
@@ -9,7 +10,7 @@ import retrofit2.http.Query;
public interface BrowserLabel { public interface BrowserLabel {
@GET(UrlAddress.SET_BROWSER_LABEL) @GET(UrlAddress.SET_BROWSER_LABEL)
Observable<BaseResponse> getLabel( Observable<BaseResponse<Label>> getLabel(
@Query("sn") String sn @Query("sn") String sn
); );
} }

View File

@@ -85,6 +85,8 @@ import okhttp3.MediaType;
import okhttp3.MultipartBody; import okhttp3.MultipartBody;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import static com.info.sn.service.ManagerService.LOCK_STATE;
/** /**
* 自定义接收器 * 自定义接收器
* <p> * <p>
@@ -253,8 +255,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
Handler.getMain().postDelayed(new Runnable() { Handler.getMain().postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
HTTPInterface.getBrowserWhiteList(context); HTTPInterface.setBrowserWhiteList(context);
HTTPInterface.getBrowserLabel(context);
} }
}, 2000); }, 2000);
break; break;
@@ -322,6 +323,7 @@ public class MyJPushReceiver extends BroadcastReceiver {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
//延时2秒执行以防收到推送数据库还没有生效
Handler.getMain().postDelayed(new Runnable() { Handler.getMain().postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -764,18 +766,19 @@ public class MyJPushReceiver extends BroadcastReceiver {
} }
private void setLock_screen(Context context, String jsonString) { private void setLock_screen(Context context, String jsonString) {
String type = "0"; int type = 0;
JSONObject jSONObject = JSON.parseObject(jsonString); JSONObject jSONObject = JSON.parseObject(jsonString);
type = jSONObject.getString("type"); type = jSONObject.getInteger("type");
if (!ServiceAliveUtils.isServiceAlice(context, ManagerService.class.getName())) { if (!ServiceAliveUtils.isServiceAlice(context, ManagerService.class.getName())) {
context.startService(new Intent(context, ManagerService.class)); context.startService(new Intent(context, ManagerService.class));
} }
Intent intent = new Intent(); Intent intent = new Intent();
// intent.putExtra("name", name); // intent.putExtra("name", name);
if ("1".equals(type)) { SPUtils.put(context, LOCK_STATE, type);
if (1 == type) {
intent.setAction(ManagerService.ACTION_LOCK); intent.setAction(ManagerService.ACTION_LOCK);
} else if ("0".equals(type)) { } else if (0 == type) {
intent.setAction(ManagerService.ACTION_UNLOCK); intent.setAction(ManagerService.ACTION_UNLOCK);
} }
context.sendBroadcast(intent); context.sendBroadcast(intent);

View File

@@ -404,6 +404,11 @@ public class MainService extends Service implements MainContact.MainView, Networ
@Override @Override
public void setTimeControl() { public void setTimeControl() {
mPresenter.getScreenLock();
}
@Override
public void setScreenLock() {
} }
} }

View File

@@ -23,6 +23,7 @@ import android.widget.TextView;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.NetworkUtils;
import com.info.sn.R; import com.info.sn.R;
import com.info.sn.bean.zuoye.BaseResponse; import com.info.sn.bean.zuoye.BaseResponse;
import com.info.sn.manager.ControlManager; import com.info.sn.manager.ControlManager;
@@ -48,7 +49,7 @@ import io.reactivex.schedulers.Schedulers;
/** /**
* @author jgy02 * @author jgy02
*/ */
public class ManagerService extends Service { public class ManagerService extends Service implements NetworkUtils.OnNetworkStatusChangedListener {
private String TAG = ManagerService.class.getSimpleName(); private String TAG = ManagerService.class.getSimpleName();
public static String ACTION_LOCK = "LockScreenReceiver_lockscreen"; public static String ACTION_LOCK = "LockScreenReceiver_lockscreen";
@@ -59,6 +60,16 @@ public class ManagerService extends Service {
private boolean screenlocked = false; private boolean screenlocked = false;
private boolean timelocked = false; private boolean timelocked = false;
@Override
public void onDisconnected() {
}
@Override
public void onConnected(NetworkUtils.NetworkType networkType) {
getScreenLockState();
}
private interface Start { private interface Start {
void onstar(long time); void onstar(long time);
@@ -111,6 +122,7 @@ public class ManagerService extends Service {
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
NetworkUtils.registerNetworkStatusChangedListener(this);
registLockReceiver(); registLockReceiver();
registerTimeReceiver(); registerTimeReceiver();
registerScreenLockReceiver(); registerScreenLockReceiver();
@@ -148,19 +160,7 @@ public class ManagerService extends Service {
if (code == 200) { if (code == 200) {
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(baseResponse.data)); JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(baseResponse.data));
int is_screen_lock = jsonObject.getIntValue("is_screen_lock"); int is_screen_lock = jsonObject.getIntValue("is_screen_lock");
if (is_screen_lock == 1) { setLockedState(is_screen_lock);
if (!timelocked) {
showFloatingWindow("屏幕已锁定");
}
screenlocked = true;
SPUtils.put(ManagerService.this, LOCK_STATE, 1);
} else {
if (!timelocked) {
hideFloatingWindow();
}
screenlocked = false;
SPUtils.put(ManagerService.this, LOCK_STATE, 0);
}
} else { } else {
if (!timelocked) { if (!timelocked) {
hideFloatingWindow(); hideFloatingWindow();
@@ -182,7 +182,23 @@ public class ManagerService extends Service {
}); });
} }
private static String LOCK_STATE = "SCRENN_LOOCKED_STATE"; private void setLockedState(int lockedState) {
if (lockedState == 1) {
if (!timelocked) {
showFloatingWindow("屏幕已锁定");
}
screenlocked = true;
SPUtils.put(ManagerService.this, LOCK_STATE, 1);
} else {
if (!timelocked) {
hideFloatingWindow();
}
screenlocked = false;
SPUtils.put(ManagerService.this, LOCK_STATE, 0);
}
}
public static String LOCK_STATE = "SCRENN_LOOCKED_STATE";
private void showFloatingWindow(String name) { private void showFloatingWindow(String name) {
if (Settings.canDrawOverlays(this)) { if (Settings.canDrawOverlays(this)) {
@@ -321,7 +337,7 @@ public class ManagerService extends Service {
Log.e(TAG, "TimeChangedReceiver:" + "timezone changed"); Log.e(TAG, "TimeChangedReceiver:" + "timezone changed");
} else if (Intent.ACTION_TIME_TICK.equals(action)) { } else if (Intent.ACTION_TIME_TICK.equals(action)) {
Log.e(TAG, "TimeChangedReceiver:" + "time tick"); Log.e(TAG, "TimeChangedReceiver:" + "time tick");
// setFloatingWindow(); setFloatingWindow();
} else if (ACTION_UPDATE.equals(action)) { } else if (ACTION_UPDATE.equals(action)) {
Log.e(TAG, "TimeChangedReceiver:" + "date update"); Log.e(TAG, "TimeChangedReceiver:" + "date update");
setFloatingWindow(); setFloatingWindow();
@@ -348,7 +364,9 @@ public class ManagerService extends Service {
} }
timelocked = true; timelocked = true;
} else { } else {
getScreenLockState(); // getScreenLockState();
int is_screen_lock = (int) SPUtils.get(ManagerService.this, LOCK_STATE, 0);
setLockedState(is_screen_lock);
if (!screenlocked) { if (!screenlocked) {
hideFloatingWindow(); hideFloatingWindow();
} }
@@ -410,7 +428,7 @@ public class ManagerService extends Service {
private void sendScreenState(int stateCode) { private void sendScreenState(int stateCode) {
Log.e(TAG, "sendScreenState: code:" + stateCode); Log.e(TAG, "sendScreenState: code:" + stateCode);
Log.e(TAG, "sendScreenState: sn: " + Utils.getSerial()); // Log.e(TAG, "sendScreenState: sn: " + Utils.getSerial());
NetInterfaceManager.getInstance().setScreen() NetInterfaceManager.getInstance().setScreen()
.setScreenState(Utils.getSerial(), stateCode) .setScreenState(Utils.getSerial(), stateCode)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
@@ -500,6 +518,7 @@ public class ManagerService extends Service {
@Override @Override
public void onDestroy() { public void onDestroy() {
super.onDestroy(); super.onDestroy();
NetworkUtils.unregisterNetworkStatusChangedListener(this);
if (null != mTimeChangedReceiver) { if (null != mTimeChangedReceiver) {
unregisterReceiver(mTimeChangedReceiver); unregisterReceiver(mTimeChangedReceiver);
} }

View File

@@ -253,7 +253,11 @@ public class StepService extends Service implements NetworkUtils.OnNetworkStatus
jsonObject.put("online", state); jsonObject.put("online", state);
if (null != client) { if (null != client) {
Log.i("JWebSocketClientService", "发送的消息:" + jsonObject.toJSONString()); Log.i("JWebSocketClientService", "发送的消息:" + jsonObject.toJSONString());
client.send(jsonObject.toJSONString()); try {
client.send(jsonObject.toJSONString());
} catch (Exception e) {
Log.i(TAG, "sendMsg :" + e.getLocalizedMessage());
}
} else { } else {
Log.i("JWebSocketClientService", "未连接"); Log.i("JWebSocketClientService", "未连接");
} }

View File

@@ -35,4 +35,12 @@ public class ToastUtil {
} }
} }
public static void showCenter(final String msg) {
ToastUtils.make()
.setBgColor(ColorUtils.getColor(R.color.toast_color))
.setTextColor(Color.WHITE)
.setGravity(Gravity.CENTER, 0, 0)
.setNotUseSystemToast()
.show(msg);
}
} }

View File

@@ -2,18 +2,24 @@ package com.info.sn.utils;
import android.content.Context; import android.content.Context;
import android.os.Build; import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import androidx.annotation.RequiresApi;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.ObservableEmitter; import io.reactivex.ObservableEmitter;
@@ -37,115 +43,180 @@ public class URLUtils {
this.mContext = context; this.mContext = context;
} }
@RequiresApi(api = Build.VERSION_CODES.O)
public void setBrowserList() { public void setBrowserList() {
String whiteList = JGYUtils.getString(mContext.getContentResolver(), "DeselectBrowserArray"); String oldwhiteList = JGYUtils.getString(mContext.getContentResolver(), "DeselectBrowserArray");
String homePage = JGYUtils.getString(mContext.getContentResolver(), "homepagURL"); String oldHomePage = JGYUtils.getString(mContext.getContentResolver(), "homepagURL");
Log.e(TAG, "setBrowserList old: " + whiteList); Log.e(TAG, "setBrowserList old: " + oldwhiteList);
if (TextUtils.isEmpty(oldwhiteList) && TextUtils.isEmpty(oldHomePage)) {
HashSet<String> URLList = new HashSet<>(); Log.e(TAG, "getBrowserWhiteList: " + "oldwhiteList is empty");
if (!TextUtils.isEmpty(whiteList)){ Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", "Invalid");
URLList.addAll(Arrays.asList(whiteList.split(","))); } else {
} HashSet<String> URLList = new HashSet<>();
URLList.add("https://xdf.gankao.com"); if (!TextUtils.isEmpty(oldwhiteList)) {
URLList.add("https://www.gankao.com"); URLList.addAll(Arrays.asList(oldwhiteList.split(",")));
if (!TextUtils.isEmpty(homePage)) {
if (!URLList.contains(homePage)) {
URLList.add(homePage);
} }
} URLList.add("https://xdf.gankao.com");
URLList.removeIf(new Predicate<String>() { URLList.add("https://www.gankao.com");
@Override if (!TextUtils.isEmpty(oldHomePage) && !URLList.contains(oldHomePage)) {
public boolean test(String s) { URLList.add(oldHomePage);
return TextUtils.isEmpty(s.trim());
} }
}); URLList.removeIf(s -> TextUtils.isEmpty(s.trim()));
Log.e(TAG, "setBrowserList: " + URLList); if (URLList.size() == 0) {
Observable.create(new ObservableOnSubscribe<String>() { Log.e(TAG, "setBrowserWhiteList: URLList set is empty , set Invalid");
@Override Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", "Invalid");
public void subscribe(ObservableEmitter<String> emitter) throws Exception { return;
baseURLList.clear(); }
baseURLList.addAll(URLList); Log.e(TAG, "setBrowserList: " + URLList);
for (String url : URLList) { Observable.create(new ObservableOnSubscribe<String>() {
if (TextUtils.isEmpty(url.trim())){ @Override
continue; public void subscribe(ObservableEmitter<String> emitter) throws Exception {
} baseURLList.clear();
if (url.startsWith("http://")) { baseURLList.addAll(URLList);
String noHttp = url.substring(7); for (String url : URLList) {
if (!baseURLList.contains(noHttp)) { Log.e(TAG, "subscribe: " + url);
baseURLList.add(noHttp); if (TextUtils.isEmpty(url.trim())) {
continue;
} }
emitter.onNext(getOkHttpURL(url)); if (haveDomain(url)) {
} else if (url.startsWith("https://")) { nohttpURLList.add("m." + getDomain(url));
String noHttps = url.substring(8); }
if (!baseURLList.contains(noHttps)) { if (!url.startsWith("http")) {
baseURLList.add(noHttps); nohttpURLList.add(url);
String httpsUrl = "https://" + url;
String httpUrl = "http://" + url;
emitter.onNext(getOkHttpURL(httpsUrl));
emitter.onNext(getOkHttpURL(httpUrl));
baseURLList.add(httpsUrl);
String pattern = "(http|https)://(www.)?(\\w+(\\.)?)+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(httpsUrl);
while (m.find()) {
Log.e(TAG, "matcher1: " + m.group());
baseURLList.add(m.group());
}
} else {
if (url.endsWith("/")) {
baseURLList.add(url.substring(0, url.length() - 1));
}
//临时
if (baseURLList.size() != 0) {
Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", String.join(",", baseURLList));
}
Log.e(TAG, "subscribe: baseURLList: " + baseURLList);
Log.e(TAG, "subscribe: DeselectBrowserArray: " + Settings.System.getString(mContext.getContentResolver(), "DeselectBrowserArray"));
String pattern = "[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\\.?";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(url);
if (m.find()) {
nohttpURLList.add(m.group());
Log.e(TAG, "matcher2: " + m.group());
String httpsUrl = "https://" + m.group();
String httpUrl = "http://" + m.group();
emitter.onNext(getOkHttpURL(httpsUrl));
emitter.onNext(getOkHttpURL(httpUrl));
}
} }
emitter.onNext(getOkHttpURL(url));
} else {
baseURLList.add("http://" + url);
emitter.onNext(getOkHttpURL("http://" + url));
baseURLList.add("https://" + url);
emitter.onNext(getOkHttpURL("https://" + url));
} }
Log.e(TAG, "subscribe: " + url); emitter.onComplete();
} }
emitter.onComplete(); }).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.e(TAG, "onNext: " + s);
if (!baseURLList.contains(s) && !TextUtils.isEmpty(s)) {
baseURLList.add(s);
}
if (s.startsWith("http://")) {
String noHttp = s.substring(7);
Log.e(TAG, "onNext: noHttp: " + noHttp);
if (!baseURLList.contains(noHttp)) {
baseURLList.add(noHttp);
}
}
if (s.startsWith("https://")) {
String noHttps = s.substring(8);
Log.e(TAG, "onNext: noHttps: " + noHttps);
if (!baseURLList.contains(noHttps)) {
baseURLList.add(noHttps);
}
}
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: ");
baseURLList.addAll(nohttpURLList);
baseURLList.removeIf(TextUtils::isEmpty);
String DeselectBrowserArray = String.join(",", baseURLList);
boolean write = Settings.System.putString(mContext.getContentResolver(), "DeselectBrowserArray", DeselectBrowserArray);
Log.e(TAG, "onComplete: " + "white list: " + DeselectBrowserArray);
Log.e(TAG, "onComplete: " + "write :" + write);
}
});
}
}
private HashSet<String> blackList = new HashSet<>();
private HashSet<String> blackIPList = new HashSet<>();
public void setBrowserBlackList() {
String qch_webblack_url = Settings.System.getString(mContext.getContentResolver(), "qch_webblack_url");
Log.e(TAG, "setBrowserBlackList: qch_webblack_url = " + qch_webblack_url);
if (TextUtils.isEmpty(qch_webblack_url)) {
Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", "Invalid");
} else {
String black_ip = (String) SPUtils.get(mContext, "black_ip", "");
if (!TextUtils.isEmpty(black_ip)) {
blackIPList = new HashSet<>(Arrays.asList(black_ip.split(",")));
} }
}).subscribeOn(Schedulers.io()) blackIPList.removeIf(TextUtils::isEmpty);
.observeOn(AndroidSchedulers.mainThread()) HashSet<String> URLList = new HashSet<>(Arrays.asList(qch_webblack_url.trim().split(",")));
.subscribe(new Observer<String>() { for (String url : URLList) {
@Override if (TextUtils.isEmpty(url)) {
public void onSubscribe(Disposable d) { continue;
}
} Log.e(TAG, "setBrowserBlackList: url: " + url);
if (qch_webblack_url.startsWith("http://")) {
@Override blackList.add(url);
public void onNext(String s) { blackList.add(url.replace("http://", "https://"));
Log.e(TAG, "onNext: " + s); } else if (qch_webblack_url.startsWith("https://")) {
if (!baseURLList.contains(s)) { blackList.add(url);
baseURLList.add(s); blackList.add(url.replace("https://", "http://"));
} } else {
if (s.startsWith("http://")) { blackList.add("http://" + url);
String noHttp = s.substring(7); blackList.add("https://" + url);
Log.e(TAG, "onNext: noHttp: " + noHttp); }
if (!baseURLList.contains(noHttp)) { }
baseURLList.add(noHttp); blackList.addAll(blackIPList);
} blackList.removeIf(TextUtils::isEmpty);
} Log.e(TAG, "setBrowserBlackList: blackList: " + blackList);
if (s.startsWith("https://")) { boolean write = Settings.System.putString(mContext.getContentResolver(), "qch_webblack_url", String.join(",", blackList));
String noHttps = s.substring(8); Log.e(TAG, "setBrowserBlackList: write: " + write);
Log.e(TAG, "onNext: noHttps: " + noHttps); }
if (!baseURLList.contains(noHttps)) {
baseURLList.add(noHttps);
}
}
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: ");
StringBuilder stringBuilder = new StringBuilder();
for (String s : baseURLList) {
if (stringBuilder.length() > 0) {
stringBuilder.append(",");
}
stringBuilder.append(s);
}
String DeselectBrowserArray = stringBuilder.toString();
boolean write = JGYUtils.putString(mContext.getContentResolver(), "DeselectBrowserArray", DeselectBrowserArray);
Log.e(TAG, "onComplete: " + "white list: " + DeselectBrowserArray);
Log.e(TAG, "onComplete: " + "write :" + write);
}
});
} }
private String getOkHttpURL(String URL) { private String getOkHttpURL(String URL) {
OkHttpClient okHttpClient = new OkHttpClient(); if (!URL.startsWith("http")) {
return "";
}
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.SECONDS)
.writeTimeout(1, TimeUnit.SECONDS)
.readTimeout(1, TimeUnit.SECONDS)
.build();
final Request request = new Request.Builder() final Request request = new Request.Builder()
.url(URL) .url(URL)
.removeHeader("User-Agent") .removeHeader("User-Agent")
@@ -179,6 +250,36 @@ public class URLUtils {
} }
} }
//https://blog.csdn.net/yong472727322/article/details/73321935
//https://blog.csdn.net/liehuo123/article/details/81509486?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-1&spm=1001.2101.3001.4242
//https://www.cnblogs.com/breakdown/archive/2012/09/17/2689101.html
/**
* 获取主机名
*
* @param url 网址
* @return
*/
//https://blog.csdn.net/smallnetvisitor/article/details/84516347
public String getDomain(String url) {
String regexStr = "(?<=//|)((\\w)+(\\.cn|\\.com.cn|\\.org.cn|\\.com|\\.net|\\.org|\\.cc|\\.biz|\\.uk|\\.info|\\.in|\\.eu))+";
Pattern p = Pattern.compile(regexStr);
Matcher m = p.matcher(url);
String domainVal = "";
if (m.find()) {
domainVal = m.group();
}
return domainVal;
}
public boolean haveDomain(String url) {
String regexStr = "(?<=//|)((\\w)+(\\.cn|\\.com.cn|\\.org.cn|\\.com|\\.net|\\.org|\\.cc|\\.biz|\\.uk|\\.info|\\.in|\\.eu))+";
Pattern p = Pattern.compile(regexStr);
Matcher m = p.matcher(url);
return m.find();
}
/** /**
* Gets ip. * Gets ip.
* 通过url获取到域名 * 通过url获取到域名

View File

@@ -74,7 +74,7 @@
android:text="@string/hello" android:text="@string/hello"
android:textColor="@color/activation_color" android:textColor="@color/activation_color"
android:textSize="16sp" android:textSize="16sp"
android:visibility="gone" android:visibility="visible"
app:layout_constraintStart_toStartOf="@+id/textView3" app:layout_constraintStart_toStartOf="@+id/textView3"
app:layout_constraintTop_toBottomOf="@+id/textView3" /> app:layout_constraintTop_toBottomOf="@+id/textView3" />
@@ -82,14 +82,15 @@
android:id="@+id/tv_pripolicy" android:id="@+id/tv_pripolicy"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="4dp" android:layout_marginStart="8dp"
android:autoLink="all" android:autoLink="all"
android:text="@string/privacy_policy" android:text="@string/privacy_policy"
android:textColor="@color/activation_color" android:textColor="@color/activation_color"
android:textSize="16sp" android:textSize="16sp"
android:visibility="visible" android:visibility="visible"
app:layout_constraintBottom_toBottomOf="@+id/tv_guide"
app:layout_constraintStart_toEndOf="@+id/tv_guide" app:layout_constraintStart_toEndOf="@+id/tv_guide"
app:layout_constraintTop_toBottomOf="@+id/textView3" /> app:layout_constraintTop_toTopOf="@+id/tv_guide" />
<TextView <TextView
android:id="@+id/tv_useragreement" android:id="@+id/tv_useragreement"

View File

@@ -76,7 +76,7 @@
android:text="@string/hello" android:text="@string/hello"
android:textColor="@color/activation_color" android:textColor="@color/activation_color"
android:textSize="16sp" android:textSize="16sp"
android:visibility="gone" android:visibility="visible"
app:layout_constraintStart_toStartOf="@+id/textView3" app:layout_constraintStart_toStartOf="@+id/textView3"
app:layout_constraintTop_toBottomOf="@+id/textView3" /> app:layout_constraintTop_toBottomOf="@+id/textView3" />
@@ -84,14 +84,15 @@
android:id="@+id/tv_pripolicy" android:id="@+id/tv_pripolicy"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="4dp" android:layout_marginStart="8dp"
android:autoLink="all" android:autoLink="all"
android:text="@string/privacy_policy" android:text="@string/privacy_policy"
android:textColor="@color/activation_color" android:textColor="@color/activation_color"
android:textSize="16sp" android:textSize="16sp"
android:visibility="visible" android:visibility="visible"
app:layout_constraintBottom_toBottomOf="@+id/tv_guide"
app:layout_constraintStart_toEndOf="@+id/tv_guide" app:layout_constraintStart_toEndOf="@+id/tv_guide"
app:layout_constraintTop_toBottomOf="@+id/textView3" /> app:layout_constraintTop_toTopOf="@+id/tv_guide" />
<TextView <TextView
android:id="@+id/tv_useragreement" android:id="@+id/tv_useragreement"

View File

@@ -26,7 +26,7 @@ allprojects {
gradle.projectsEvaluated { gradle.projectsEvaluated {
tasks.withType(JavaCompile) { tasks.withType(JavaCompile) {
//设置jar相对包路径或绝对路径 //设置jar相对包路径或绝对路径
options.compilerArgs.add('-Xbootclasspath/p:app/src/main/libs/classes.jar') options.compilerArgs.add('-Xbootclasspath/p:libs/framework.jar')
} }
} }
} }