Skip to content

Commit

Permalink
增加X5内核的支持
Browse files Browse the repository at this point in the history
  • Loading branch information
taoweiji committed Sep 10, 2021
1 parent 3775eaf commit 9c10548
Show file tree
Hide file tree
Showing 18 changed files with 183 additions and 143 deletions.
6 changes: 2 additions & 4 deletions example/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ android {

buildTypes {
release {
signingConfig signingConfigs.debug
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
Expand All @@ -29,7 +30,6 @@ android {
}

dependencies {

implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.5.0'
implementation 'androidx.appcompat:appcompat:1.3.0'
Expand All @@ -41,7 +41,5 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation project(path: ':webviewx')
implementation project(path: ':x5')
// api project(path: ':navigation')
implementation 'io.github.taoweiji.single-activity-navigation:navigation:0.1.3'

implementation 'io.github.taoweiji.single-activity-navigation:navigation:+'
}
4 changes: 2 additions & 2 deletions example/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
android:name=".WebViewXBridgeActivity"
android:configChanges="orientation|screenSize|keyboardHidden" />
<activity
android:name=".X5WebViewXActivity"
android:name=".WebViewX5Activity"
android:configChanges="orientation|screenSize|keyboardHidden" />
<activity
android:name=".OfflineWebViewActivity"
Expand All @@ -33,7 +33,7 @@
</intent-filter>
</activity>
<activity
android:name=".program.CopyMiniProgram"
android:name=".program.MiniProgramActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar" />
</application>
Expand Down
24 changes: 15 additions & 9 deletions example/src/main/assets/taoweiji.com/index.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<html>
<body>
<script src="webviewx/webviewx.js"></script>
<script>
<script src="webviewx/webviewx.js"></script>
<script>
function request(){
webViewX.invoke('getData',{
id: 101,
Expand All @@ -10,8 +10,12 @@
}
})
}
function finish(){
webViewX.invoke('finish')
function navigateBack(){
webViewX.invoke('navigateBack',{
fail(err) {
alert(err)
}
})
}
function error(){
webViewX.invoke('testError',{
Expand Down Expand Up @@ -41,10 +45,12 @@
})
}

</script>
<button onclick="request()">点击</button>
<button onclick="finish()">关闭页面</button>
<button onclick="error()">错误</button>
<button onclick="navigateTo()">跳转页面</button>


</script>
<button onclick="request()">获取数据</button>
<button onclick="navigateBack()">关闭页面</button>
<button onclick="error()">错误</button>
<button onclick="navigateTo()">跳转页面</button>
</body>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import androidx.appcompat.app.AppCompatActivity;

import com.taoweiji.navigation.ViewUtils;
import com.taoweiji.webviewx.example.program.CopyMiniProgram;
import com.taoweiji.webviewx.example.program.MiniProgramActivity;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -27,16 +27,16 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(list);

ListAdapter adapter = new ListAdapter();
adapter.add("异步回调API", new Runnable() {
adapter.add("WebView", new Runnable() {
@Override
public void run() {
startActivity(new Intent(MainActivity.this, WebViewXBridgeActivity.class));
}
});
adapter.add("X5", new Runnable() {
adapter.add("X5WebView", new Runnable() {
@Override
public void run() {
startActivity(new Intent(MainActivity.this, X5WebViewXActivity.class));
startActivity(new Intent(MainActivity.this, WebViewX5Activity.class));
}
});

Expand Down Expand Up @@ -65,7 +65,7 @@ public void run() {
adapter.add("模拟小程序架构", new Runnable() {
@Override
public void run() {
CopyMiniProgram.start(MainActivity.this
MiniProgramActivity.start(MainActivity.this
, "file:///android_asset/taoweiji.com/"
, "http://taoweiji.com/"
, "http://taoweiji.com/index.html?userId=1");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import com.taoweiji.webviewx.WebViewXApiManager;
import com.taoweiji.webviewx.example.api.GetUserApi;
import com.taoweiji.webviewx.example.api.MiniProgramNavigateBackApi;
import com.taoweiji.webviewx.example.api.NavigateToApi;
import com.taoweiji.webviewx.example.api.NavigateToMiniProgramApi;
import com.taoweiji.webviewx.example.api.GetLoginInfoApi;
Expand All @@ -16,5 +17,6 @@ public void onCreate() {
WebViewXApiManager.getInstance().register(new NavigateToApi());
WebViewXApiManager.getInstance().register(new GetLoginInfoApi());
WebViewXApiManager.getInstance().register(new GetUserApi());
WebViewXApiManager.getInstance().register(new MiniProgramNavigateBackApi());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.taoweiji.webviewx.example;

import static android.view.MenuItem.SHOW_AS_ACTION_ALWAYS;
import static android.view.MenuItem.SHOW_AS_ACTION_NEVER;

import android.Manifest;
Expand All @@ -17,31 +16,28 @@
import com.taoweiji.webviewx.Api;
import com.taoweiji.webviewx.ApiCaller;
import com.taoweiji.webviewx.WebViewXBridge;
import com.taoweiji.webviewx.x5.X5WebViewX;
import com.taoweiji.webviewx.example.api.FinishApi;
import com.taoweiji.webviewx.x5.WebViewX5;
import com.tencent.smtt.sdk.WebChromeClient;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Collections;

public class X5WebViewXActivity extends AppCompatActivity {
X5WebViewX webView;
public class WebViewX5Activity extends AppCompatActivity {
WebViewX5 webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = new X5WebViewX(this);
webView = new WebViewX5(this);
setContentView(webView);
webView.setWebChromeClient(new WebChromeClient());
webView.addInterceptor(new WebViewXBridge.Interceptor() {
@Override
public boolean invoke(@NonNull ApiCaller caller) {
switch (caller.getApiName()) {
case "close":
finish();
caller.success();
return true;
case "getTestData":
caller.successData("Hello World");
return true;
Expand Down Expand Up @@ -128,27 +124,5 @@ public void finish() {
super.finish();
}

public static class FinishApi extends Api {
Activity activity;

public FinishApi(Activity activity) {
this.activity = activity;
}

@Override
public String name() {
return "finish";
}

@Override
public boolean allowInvokeSync() {
return true;
}

@Override
protected void invoke(@NonNull ApiCaller caller) throws Exception {
activity.finish();
caller.success();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.taoweiji.webviewx.ApiCaller;
import com.taoweiji.webviewx.WebViewX;
import com.taoweiji.webviewx.WebViewXBridge;
import com.taoweiji.webviewx.example.api.FinishApi;

import org.json.JSONException;
import org.json.JSONObject;
Expand Down Expand Up @@ -124,28 +125,4 @@ protected void onDestroy() {
public void finish() {
super.finish();
}

public static class FinishApi extends Api {
Activity activity;

public FinishApi(Activity activity) {
this.activity = activity;
}

@Override
public String name() {
return "finish";
}

@Override
public boolean allowInvokeSync() {
return true;
}

@Override
protected void invoke(@NonNull ApiCaller caller) throws Exception {
activity.finish();
caller.success();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.taoweiji.webviewx.example.api;

import android.app.Activity;

import androidx.annotation.NonNull;

import com.taoweiji.webviewx.Api;
import com.taoweiji.webviewx.ApiCaller;

public class FinishApi extends Api {
Activity activity;

public FinishApi(Activity activity) {
this.activity = activity;
}

@Override
public String name() {
return "finish";
}

@Override
public boolean allowInvokeSync() {
return true;
}

@Override
protected void invoke(@NonNull ApiCaller caller) throws Exception {
activity.finish();
caller.success();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.taoweiji.webviewx.example.api;

import androidx.annotation.NonNull;

import com.taoweiji.webviewx.Api;
import com.taoweiji.webviewx.ApiCaller;
import com.taoweiji.webviewx.example.program.MiniProgramActivity;

public class MiniProgramNavigateBackApi extends Api {
@Override
public String name() {
return "navigateBack";
}

@Override
public void invoke(@NonNull ApiCaller caller) throws Exception {
MiniProgramActivity.WebViewAbility ability = (MiniProgramActivity.WebViewAbility) caller.getExtras().get("ability");
if (ability.findNavController().canBack()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
ability.findNavController().pop();
caller.success();
}
});
} else {
caller.fail(new Exception("最后一个页面,无法关闭"));
}

}

@Override
public boolean allowInvokeSync() {
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.taoweiji.navigation.BundleBuilder;
import com.taoweiji.webviewx.Api;
import com.taoweiji.webviewx.ApiCaller;
import com.taoweiji.webviewx.example.program.CopyMiniProgram;
import com.taoweiji.webviewx.example.program.MiniProgramActivity;

public class NavigateToApi extends Api {
@Override
Expand All @@ -18,9 +18,13 @@ public String name() {
@Override
public void invoke(@NonNull ApiCaller caller) throws Exception {
String url = caller.getParams().getString("url");
CopyMiniProgram.WebViewAbility ability = (CopyMiniProgram.WebViewAbility) caller.getExtras().get("ability");
MiniProgramActivity.WebViewAbility ability = (MiniProgramActivity.WebViewAbility) caller.getExtras().get("ability");
Bundle bundle = new BundleBuilder().putAll(ability.getArguments()).put("url", url).build();
runOnUiThread(() -> ability.findNavController().navigate(new CopyMiniProgram.WebViewAbility(), bundle));
if (ability.findNavController().getStackCount() >= 9) {
caller.fail(new Exception("最多可以打开9个页面"));
return;
}
runOnUiThread(() -> ability.findNavController().navigate(new MiniProgramActivity.WebViewAbility(), bundle));
caller.success();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import com.taoweiji.webviewx.Api;
import com.taoweiji.webviewx.ApiCaller;
import com.taoweiji.webviewx.example.program.CopyMiniProgram;
import com.taoweiji.webviewx.example.program.MiniProgramActivity;

public class NavigateToMiniProgramApi extends Api {
@Override
Expand All @@ -17,7 +17,7 @@ public void invoke(@NonNull ApiCaller caller) throws Exception {
String baseUrl = caller.getParams().getString("baseUrl");
String url = caller.getParams().getString("url");
String path = caller.getParams().getString("path");
CopyMiniProgram.start(caller.getContext(), path, baseUrl, url);
MiniProgramActivity.start(caller.getContext(), path, baseUrl, url);
caller.success();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
Expand All @@ -32,10 +31,10 @@
import com.taoweiji.webviewx.WebViewXBridge;
import com.taoweiji.webviewx.example.R;

public class CopyMiniProgram extends AppCompatActivity {
public class MiniProgramActivity extends AppCompatActivity {

public static void start(Context context, String path, String baseUrl, String url) {
Intent intent = new Intent(context, CopyMiniProgram.class);
Intent intent = new Intent(context, MiniProgramActivity.class);
intent.putExtra("path", path);
intent.putExtra("baseUrl", baseUrl);
intent.putExtra("url", url);
Expand Down Expand Up @@ -128,6 +127,11 @@ protected View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGrou
@Override
public boolean invoke(@NonNull ApiCaller caller) {
caller.getExtras().put("ability", WebViewAbility.this);
switch (caller.getApiName()) {
case "getData":
caller.successData("Hello");
return true;
}
return false;
}

Expand Down
Loading

0 comments on commit 9c10548

Please sign in to comment.