diff --git a/app/build.gradle b/app/build.gradle
index 1b1fc98..e763215 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -18,8 +18,8 @@ android {
minSdkVersion 24
targetSdkVersion 29
- versionCode 219
- versionName "2.1.9"
+ versionCode 220
+ versionName "2.2.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -138,6 +138,7 @@ dependencies {
// Java language implementation
implementation "androidx.fragment:fragment:1.4.1"
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+ implementation 'androidx.browser:browser:1.7.0'
implementation 'androidx.preference:preference:1.1.1'
testImplementation 'junit:junit:4.12'
@@ -190,6 +191,7 @@ dependencies {
// implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.1.8'
//MMKV
implementation 'com.tencent:mmkv-static:1.2.14'
+// implementation 'com.tencent.tbs.tbssdk:sdk:43993'
//bugly
implementation 'com.tencent.bugly:crashreport:4.1.9.2'
/*xCrash */
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 107277e..f9e6262 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -280,6 +280,11 @@
android:name=".activity.service.ServiceActivity"
android:launchMode="singleTask"
android:theme="@style/activity_styles" />
+
{
-
private static final String TAG = "CallWechatActivity";
+ private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
+
private Contact mContact;
// private static final int REQUEST_CODE_SCREEN_CAPTURE = 1874;
@@ -64,7 +67,7 @@ public class CallWechatActivity extends BaseMvvmActivity= Build.VERSION_CODES.O) {
// startForegroundService(intent);
// } else {
- startService(intent);
+ startService(intent);
// }
+ finish();
+ }
+ } else {
+ ApkUtils.openPackage(CallWechatActivity.this, "com.tencent.mm");
finish();
}
}
public void callWechatVoice(View view) {
- if (TextUtils.isEmpty(mContact.getTag())) {
- Toaster.show("没有设置标签,无法拨打微信语音");
- finish();
- return;
- }
- if (checkSettings()) {
- Intent intent = new Intent(CallWechatActivity.this, SelectToSpeakService.class);
- intent.putExtra("WechatInfo", mContact);
- intent.putExtra("call_type", SelectToSpeakService.TYPE_VOICE);
- startService(intent);
+// if (TextUtils.isEmpty(mContact.getTag())) {
+// Toaster.show("没有设置标签,无法拨打微信语音");
+// finish();
+// return;
+// }
+ if (isWeChatAutoCall()) {
+ if (checkSettings()) {
+ Intent intent = new Intent(CallWechatActivity.this, SelectToSpeakService.class);
+ intent.putExtra("WechatInfo", mContact);
+ intent.putExtra("call_type", SelectToSpeakService.TYPE_VOICE);
+ startService(intent);
+ finish();
+ }
+ } else {
+ ApkUtils.openPackage(CallWechatActivity.this, "com.tencent.mm");
finish();
}
}
diff --git a/app/src/main/java/com/vscool/os/activity/privacy/PrivacyActivity.java b/app/src/main/java/com/vscool/os/activity/privacy/PrivacyActivity.java
new file mode 100644
index 0000000..4d2e5b1
--- /dev/null
+++ b/app/src/main/java/com/vscool/os/activity/privacy/PrivacyActivity.java
@@ -0,0 +1,99 @@
+package com.vscool.os.activity.privacy;
+
+import android.content.Intent;
+import android.view.View;
+import android.webkit.WebChromeClient;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+import com.vscool.os.R;
+import com.vscool.os.base.mvvm.BaseMvvmActivity;
+import com.vscool.os.databinding.ActivityPrivacyBinding;
+
+public class PrivacyActivity extends BaseMvvmActivity {
+ private static final String TAG = "PrivacyActivity";
+
+
+ @Override
+ public boolean setNightMode() {
+ return true;
+ }
+
+ @Override
+ public boolean setfitWindow() {
+ return true;
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.activity_privacy;
+ }
+
+ @Override
+ protected void initDataBinding() {
+ mViewModel.setCtx(this);
+ mViewModel.setVDBinding(mViewDataBinding);
+ mViewModel.setLifecycle(getLifecycleSubject());
+ mViewDataBinding.setClick(new BtnClick());
+ }
+
+ @Override
+ protected void initView() {
+ WebSettings settings = mViewDataBinding.webView.getSettings();
+// settings.setUseWideViewPort(true);
+ settings.setJavaScriptEnabled(true);
+ settings.setAllowFileAccess(true);
+ settings.setAllowContentAccess(true);
+ settings.setAllowFileAccessFromFileURLs(true);
+ settings.setAllowUniversalAccessFromFileURLs(true);
+ settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
+
+ mViewDataBinding.webView.setWebViewClient(new WebViewClient());
+ mViewDataBinding.webView.setWebChromeClient(new WebChromeClient() {
+ @Override
+ public void onProgressChanged(WebView view, int newProgress) {
+ super.onProgressChanged(view, newProgress);
+ if (newProgress == 100) {
+ mViewDataBinding.progressBar.setVisibility(View.GONE);
+ } else {
+ mViewDataBinding.progressBar.setVisibility(View.VISIBLE);
+ mViewDataBinding.progressBar.setMax(100);
+ mViewDataBinding.progressBar.setProgress(newProgress);
+ }
+ }
+ });
+ Intent intent = getIntent();
+ int contentType = intent.getIntExtra("ContentType", 1);
+ switch (contentType) {
+ default:
+ case 1:
+ mViewDataBinding.tvTitle.setText("用户协议");
+ mViewDataBinding.webView.loadUrl("https://www.uiuios.com/agreement.html?section=1-1&status=1&projectId=10");
+ break;
+ case 2:
+ mViewDataBinding.tvTitle.setText("隐私政策");
+ mViewDataBinding.webView.loadUrl("https://www.uiuios.com/agreement.html?section=1-2&status=1&projectId=10");
+ break;
+ case 3:
+ mViewDataBinding.tvTitle.setText("SDK共享清单");
+ mViewDataBinding.webView.loadUrl("https://www.uiuios.com/agreement.html?section=1-3&status=1&projectId=10");
+ break;
+ case 4:
+ mViewDataBinding.tvTitle.setText("微信一键视频、语音通话功能用户须知");
+ mViewDataBinding.webView.loadUrl("https://www.uiuios.com/agreement.html?section=3-6&status=1&projectId=10");
+ break;
+ }
+ }
+
+ @Override
+ protected void initData() {
+
+ }
+
+ public class BtnClick {
+ public void exit(View view) {
+ finish();
+ }
+ }
+}
diff --git a/app/src/main/java/com/vscool/os/activity/privacy/PrivacyViewModel.java b/app/src/main/java/com/vscool/os/activity/privacy/PrivacyViewModel.java
new file mode 100644
index 0000000..3d18385
--- /dev/null
+++ b/app/src/main/java/com/vscool/os/activity/privacy/PrivacyViewModel.java
@@ -0,0 +1,19 @@
+package com.vscool.os.activity.privacy;
+
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.vscool.os.base.mvvm.BaseViewModel;
+import com.vscool.os.databinding.ActivityPrivacyBinding;
+
+public class PrivacyViewModel extends BaseViewModel {
+
+ @Override
+ public ActivityPrivacyBinding getVDBinding() {
+ return binding;
+ }
+
+ @Override
+ public void onDestroy() {
+
+ }
+
+}
diff --git a/app/src/main/java/com/vscool/os/activity/setting/SettingActivity.java b/app/src/main/java/com/vscool/os/activity/setting/SettingActivity.java
index 29bbfa1..5c4e704 100644
--- a/app/src/main/java/com/vscool/os/activity/setting/SettingActivity.java
+++ b/app/src/main/java/com/vscool/os/activity/setting/SettingActivity.java
@@ -33,6 +33,7 @@ import com.vscool.os.config.CommonConfig;
import com.vscool.os.databinding.ActivitySettingBinding;
import com.vscool.os.dialog.CustomDialog;
import com.vscool.os.dialog.PermissionsDialog;
+import com.vscool.os.fragment.dialog.PrivacyPolicyFragment;
import com.vscool.os.service.main.MainService;
import com.vscool.os.utils.AccessibilityUtils;
import com.vscool.os.utils.ApkUtils;
@@ -96,12 +97,18 @@ public class SettingActivity extends BaseMvvmActivity factoryClass = Class.forName("android.webkit.WebViewFactory");
+ Field field = factoryClass.getDeclaredField("sProviderInstance");
+ field.setAccessible(true);
+ Object sProviderInstance = field.get(null);
+ if (sProviderInstance != null) {
+ Log.d(TAG, "sProviderInstance isn't null");
+ return;
+ }
+ Method getProviderClassMethod;
+ if (sdkInt > 22) { // above 22
+ getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass");
+ } else if (sdkInt == 22) { // method name is a little different
+ getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass");
+ } else { // no security check below 22
+ Log.i(TAG, "Don't need to Hook WebView");
+ return;
+ }
+ getProviderClassMethod.setAccessible(true);
+ Class> providerClass = (Class>) getProviderClassMethod.invoke(factoryClass);
+ Class> delegateClass = Class.forName("android.webkit.WebViewDelegate");
+ Constructor> declaredConstructor = delegateClass.getDeclaredConstructor();
+ declaredConstructor.setAccessible(true);
+ sProviderInstance = providerClass
+ .getDeclaredMethod("create", delegateClass)
+ .invoke(providerClass, declaredConstructor.newInstance());
+ Log.d("sProviderInstance", sProviderInstance.toString());
+ field.set("sProviderInstance", sProviderInstance);
+ Log.d(TAG, "Hook done!");
+ } catch (Throwable e) {
+ Log.e(TAG, "hook WebView Failed", e);
+ }
+ }
}
diff --git a/app/src/main/java/com/vscool/os/view/ToggleButton.java b/app/src/main/java/com/vscool/os/view/ToggleButton.java
index eb0b052..2cdfbea 100644
--- a/app/src/main/java/com/vscool/os/view/ToggleButton.java
+++ b/app/src/main/java/com/vscool/os/view/ToggleButton.java
@@ -138,7 +138,9 @@ public class ToggleButton extends View {
paint.setStrokeCap(Paint.Cap.ROUND);
springSystem = SpringSystem.create();
spring = springSystem.createSpring();
- spring.setSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(50, 7));
+ //张力(tension),摩擦力(friction)
+ //增大张力会使弹簧更快地向目标值运动,减小摩擦力会减少弹簧运动过程中的阻力,从而使回弹更加迅速和有力。
+ spring.setSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(80, 10));
this.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
@@ -342,7 +344,7 @@ public class ToggleButton extends View {
/**
* @param on = =
*/
- public void onToggle(boolean on);
+ void onToggle(boolean on);
}
public void setOnToggleChanged(OnToggleChanged onToggleChanged) {
diff --git a/app/src/main/res/drawable-hdpi/icon_back_black.png b/app/src/main/res/drawable-hdpi/icon_back_black.png
new file mode 100644
index 0000000..5bd377b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_back_black.png differ
diff --git a/app/src/main/res/drawable/ic_negative.xml b/app/src/main/res/drawable/ic_negative.xml
new file mode 100644
index 0000000..2a3f38c
--- /dev/null
+++ b/app/src/main/res/drawable/ic_negative.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_positive.xml b/app/src/main/res/drawable/ic_positive.xml
new file mode 100644
index 0000000..557dcdf
--- /dev/null
+++ b/app/src/main/res/drawable/ic_positive.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/policy_checkbox_bg.xml b/app/src/main/res/drawable/policy_checkbox_bg.xml
new file mode 100644
index 0000000..ae1863c
--- /dev/null
+++ b/app/src/main/res/drawable/policy_checkbox_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/privacy_policy_card_bg.xml b/app/src/main/res/drawable/privacy_policy_card_bg.xml
new file mode 100644
index 0000000..fa6a0ce
--- /dev/null
+++ b/app/src/main/res/drawable/privacy_policy_card_bg.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/privacy_policy_negative_bg.xml b/app/src/main/res/drawable/privacy_policy_negative_bg.xml
new file mode 100644
index 0000000..a6b2310
--- /dev/null
+++ b/app/src/main/res/drawable/privacy_policy_negative_bg.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/privacy_policy_positive_bg.xml b/app/src/main/res/drawable/privacy_policy_positive_bg.xml
new file mode 100644
index 0000000..da28637
--- /dev/null
+++ b/app/src/main/res/drawable/privacy_policy_positive_bg.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/privacy_policy_positive_selector.xml b/app/src/main/res/drawable/privacy_policy_positive_selector.xml
new file mode 100644
index 0000000..8604090
--- /dev/null
+++ b/app/src/main/res/drawable/privacy_policy_positive_selector.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/progress_background.xml b/app/src/main/res/drawable/progress_background.xml
new file mode 100644
index 0000000..4f3104c
--- /dev/null
+++ b/app/src/main/res/drawable/progress_background.xml
@@ -0,0 +1,26 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_privacy.xml b/app/src/main/res/layout/activity_privacy.xml
new file mode 100644
index 0000000..b7ce74b
--- /dev/null
+++ b/app/src/main/res/layout/activity_privacy.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml
index d6f7234..b483396 100644
--- a/app/src/main/res/layout/activity_setting.xml
+++ b/app/src/main/res/layout/activity_setting.xml
@@ -185,7 +185,40 @@
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+
+
+
+
+
+ android:onClick="@{click::callWechatVideo}">
+ android:onClick="@{click::callWechatVoice}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d05cb90..1e6f053 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -16,6 +16,9 @@
Settings
已清理%d个应用
+ 您当前要开启微信自动拨打视频、语音、自动接听等功能,此功能需要开启系统的无障碍服务才能实现。用户在开启前需要明确知晓其风险,请详细查看协议内容,用户同意后方可使用此功能。
+ 《微信一键视频、语音通话功能用户须知》
+
Messages
Sync