Commit 6fc4c18c by amateur

1

1 parent 14d7e47f
......@@ -36,13 +36,16 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="app"
android:pathPrefix="/open"
android:host="jp.app"
android:pathPrefix="/openwith"
android:scheme="nafmii" />
</intent-filter>
</activity>
......
No preview for this file type
......@@ -5,8 +5,8 @@ import com.alibaba.fastjson.annotation.JSONField;
public class Result {
public static final String FAIL = "-1";
public static final String SUCCESS = "0";
public static final String FAIL = "1";
@JSONField(name = "status")
protected String status;
......@@ -71,4 +71,5 @@ public class Result {
public static Result fail(String statusText) {
return fail(statusText, null);
}
}
......@@ -2,7 +2,7 @@ package com.polysoft.nafmii.constants;
public class Constants {
public static final String MODULE_URL_HOME = "file:///android_asset/dist/index.html#/";
public static final String MODULE_URL_HOME = "file:///data/user/0/com.whaty.nafmii.dev/files/dist/index.html#/";
public static final String MODULE_URL_MY = "file:///android_asset/dist/index.html#/user/center";
public static final String MODULE_URL_MEMBER = "";
public static final String MODULE_URL_LEARN = "http://debugtbs.qq.com";
......
......@@ -2,10 +2,10 @@ package com.polysoft.nafmii.enums;
public enum ModulesEnum {
HOME("home", "home", "file:///android_asset/dist/index.html#/"),
MEMBER("member", "home","file:///android_asset/dist/index.html#/home"),
HOME("home", "home", "#/home"),
MEMBER("member", "member", "#/member/login"),
LEARN("learn", "learn", "http://debugtbs.qq.com"),
MY("my", "home","file:///android_asset/dist/index.html#/user/center");
MY("my", "my", "#/user/center");
public final String name;
public final String fmtKey;
......
......@@ -60,12 +60,9 @@ public class FingerprintDialogFragment extends DialogFragment {
View v = inflater.inflate(R.layout.fingerprint_dialog, container, false);
errorMsg = v.findViewById(R.id.error_msg);
TextView cancel = v.findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
stopListening();
}
cancel.setOnClickListener(v1 -> {
dismiss();
stopListening();
});
return v;
}
......
package com.polysoft.nafmii.fragment.dialog;
import android.annotation.TargetApi;
import android.app.KeyguardManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -11,32 +13,147 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import com.polysoft.nafmii.bean.Result;
import com.polysoft.nafmii.utils.CtxUtils;
import com.polysoft.nafmii.utils.ToastUtils;
import com.whaty.nafmii.R;
import java.util.Objects;
@TargetApi(23)
public class FingerprintDialog extends DialogFragment {
private FingerprintManager mFingerprintMgr;
private CancellationSignal mCancellationSignal;
private TextView errorMsg;
private AuthBackListener mAuthBackListener;
public static void show(FragmentManager manager, AuthBackListener listener) {
FingerprintDialog dialog = new FingerprintDialog();
dialog.setAuthBackListener(listener);
if (dialog.isSupportFingerprint()) {
dialog.show(manager, "Fingerprint");
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Material_Light_Dialog);
this.mFingerprintMgr = super.getContext().getSystemService(FingerprintManager.class);
super.setCancelable(false);
this.mFingerprintMgr = CtxUtils.getSystemService(FingerprintManager.class);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fingerprint_dialog, container, false);
this.errorMsg = view.findViewById(R.id.error_msg);
view.findViewById(R.id.cancel).setOnClickListener((v) ->{
dismiss();
});
view.findViewById(R.id.cancel).setOnClickListener((v) -> cancel());
return view;
}
@Override
public void onResume() {
super.onResume();
this.start();
}
@Override
public void onPause() {
super.onPause();
this.stop();
}
public void setAuthBackListener(AuthBackListener listener) {
this.mAuthBackListener = listener;
}
private void start() {
this.mCancellationSignal = new CancellationSignal();
mFingerprintMgr.authenticate(null, this.mCancellationSignal, 0, new AuthBackImpl(), null);
}
private void stop() {
if (null != this.mCancellationSignal) {
this.mCancellationSignal.cancel();
this.mCancellationSignal = null;
}
}
private void cancel() {
this.closeBack(Result.success("cancel"));
}
private void success() {
this.closeBack(Result.success("ok"));
}
private void error(String error) {
this.closeBack(Result.fail(error));
}
private void closeBack(Result result) {
super.dismiss();
if (null != this.mAuthBackListener) {
this.mAuthBackListener.onAuthBack(result);
}
}
@Override
public void show(@NonNull FragmentManager manager, @Nullable String tag) {
super.show(manager, tag);
}
private boolean isSupportFingerprint() {
FingerprintManager fingerprintMgr = CtxUtils.getSystemService(FingerprintManager.class);
if (null != fingerprintMgr && !fingerprintMgr.isHardwareDetected()) {
this.error("您的手机不支持指纹功能");
return false;
}
KeyguardManager keyMgr = CtxUtils.getSystemService(KeyguardManager.class);
if (keyMgr != null && !keyMgr.isKeyguardSecure()) {
this.error("您还未设置锁屏,请先设置锁屏并添加一个指纹");
return false;
}
if (null != fingerprintMgr && !fingerprintMgr.hasEnrolledFingerprints()) {
this.error("您至少需要在系统设置中添加一个指纹");
return false;
}
return true;
}
private class AuthBackImpl extends FingerprintManager.AuthenticationCallback {
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
errorMsg.setText(errString);
}
@Override
public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
errorMsg.setText(helpString);
}
@Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
ToastUtils.showLong("认证成功");
success();
}
@Override
public void onAuthenticationFailed() {
errorMsg.setText("指纹认证失败,请再试一次");
}
}
public interface AuthBackListener {
void onAuthBack(Result result);
}
}
......@@ -28,6 +28,10 @@ public class CtxUtils {
return getAssetsManager().open(fileName);
}
public static <T> T getSystemService(Class<T> c) {
return getApplication().getSystemService(c);
}
public static PackageInfo getPackageInfo() {
PackageManager manager = getApplication().getPackageManager();
......
......@@ -6,14 +6,14 @@ public class ToastUtils {
public static void showLong(String message) {
Toast toast = Toast.makeText(CtxUtils.getApplication(), null, Toast.LENGTH_LONG);
Toast toast = Toast.makeText(CtxUtils.getApplication(), "", Toast.LENGTH_LONG);
toast.setText(message);
toast.show();
// Toast.makeText(CtxUtils.getApplication(), message, Toast.LENGTH_LONG).show();
}
public static void showShort(String message) {
Toast toast = Toast.makeText(CtxUtils.getApplication(), null, Toast.LENGTH_SHORT);
Toast toast = Toast.makeText(CtxUtils.getApplication(), "", Toast.LENGTH_SHORT);
toast.setText(message);
toast.show();
// Toast.makeText(CtxUtils.getApplication(), message, Toast.LENGTH_SHORT).show();
......
package com.polysoft.nafmii.utils;
import android.net.Uri;
import com.whaty.nafmii.BuildConfig;
import java.io.File;
import java.io.FileInputStream;
......@@ -14,6 +14,9 @@ import java.util.zip.ZipInputStream;
public class ZipUtils {
public static void unZipDistAssets() {
if (BuildConfig.DEBUG) {
FileUtils.deletes(FileUtils.getDistDir());
}
// 已经存在,则不解压
if (FileUtils.getIndex().exists()) {
return;
......
......@@ -2,12 +2,10 @@ package com.polysoft.nafmii.webview;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.text.TextUtils;
import android.webkit.JavascriptInterface;
import androidx.fragment.app.Fragment;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.util.TypeUtils;
......@@ -18,13 +16,15 @@ import com.polysoft.nafmii.broadcast.ShareReceiver;
import com.polysoft.nafmii.database.ObjectBox;
import com.polysoft.nafmii.database.entity.DataEntity;
import com.polysoft.nafmii.enums.DatabaseEnum;
import com.polysoft.nafmii.fragment.dialog.FingerprintDialog;
import com.polysoft.nafmii.utils.CtxUtils;
import com.polysoft.nafmii.utils.IntentUtils;
import com.polysoft.nafmii.utils.PermissionUtils;
import com.polysoft.nafmii.utils.StatusBarUtils;
import com.polysoft.nafmii.wechat.ShareBean;
import com.polysoft.nafmii.wechat.WechatApi;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -61,7 +61,14 @@ public class NativeApi {
@JavascriptInterface
public void nativeLogin(String params) {
new JsInterfaceHandler(handler).parse(params, (data, js) -> {
String type = data.getString("type");
if ("1".equals(type)) { // 指纹人脸
this.mActivity.runOnUiThread(()-> FingerprintDialog.show(handler.getFragmentManager(), result -> {
js.callJs(result);
}));
} else if ("2".equals(type)) { // 微信
}
});
}
......@@ -97,8 +104,8 @@ public class NativeApi {
@JavascriptInterface
public void nativeBackIntercept(String param) {
new JsInterfaceHandler(handler).parse(param, (data, js) -> {
Boolean type = data.getBoolean("type");
handler.setBackIntercept(null == type ? false : type);
Boolean value = data.getBoolean("value");
handler.setBackIntercept(null == value ? false : value);
js.success(null);
});
}
......@@ -111,7 +118,7 @@ public class NativeApi {
List<DataEntity> list = new ArrayList<>();
for (int i = 0; i < datas.size(); i++) {
JSONObject item = datas.getJSONObject(i);
String key = item.getString("key");
String key = item.getString("name");
Object valueObj = item.get("value");
list.add(new DataEntity(key, null == valueObj ? null : valueObj.toString()));
}
......@@ -119,7 +126,8 @@ public class NativeApi {
if (DatabaseEnum.GET.name.equals(type)) {
js.success(ObjectBox.findList(arrays));
return;
} if (DatabaseEnum.SAVE.name.equals(type)) {
}
if (DatabaseEnum.SAVE.name.equals(type)) {
ObjectBox.put(arrays);
} else if (DatabaseEnum.DELETE.name.equals(type)) {
ObjectBox.delete(arrays);
......@@ -136,20 +144,15 @@ public class NativeApi {
}
});
String permissions[] = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
};
// if (PermissionUtils.checkPermissions(this.mActivity, permissions)) {
// this.photosReceiverListener(jsMethodName);
// Intent intent = IntentUtils.openCamera(this.mActivity);
// this.mFragment.startActivityForResult(intent, IntentUtils.ACTIVITY_CODE_CAMERA);
// }
String permissions[] = {Manifest.permission.CAMERA};
if (PermissionUtils.checkAndRequestMorePermissions(this.mActivity, permissions)) {
Intent intent = IntentUtils.openCamera(this.mActivity);
handler.getFragment().startActivityForResult(intent, IntentUtils.ACTIVITY_CODE_CAMERA);
}
}
//
// @JavascriptInterface
// public void callNativeAlbum(String params) {
@JavascriptInterface
public void nativeAlbum(String params) {
// final JSONObject json = JSONObject.parseObject(params);
// final String jsMethodName = json.getString("jsMethodName");
// final JSONObject data = json.getJSONObject("data");
......@@ -163,8 +166,8 @@ public class NativeApi {
// Intent intent = IntentUtils.openAlbum(this.mActivity);
// this.mFragment.startActivityForResult(intent, IntentUtils.ACTIVITY_CODE_ALBUM);
// }
// }
//
}
// @JavascriptInterface
// public void callNativeUpdate(String params) {
// final JSONObject json = JSONObject.parseObject(params);
......@@ -227,4 +230,6 @@ public class NativeApi {
// });
// }
}
package com.whaty.nafmii.activity;
import android.os.Bundle;
import android.view.KeyEvent;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.polysoft.nafmii.fragment.WebViewFragment;
import com.polysoft.nafmii.utils.IntentUtils;
import com.whaty.nafmii.R;
public class AdvertisementWebviewActvity extends WebviewActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_advertisement);
}
@Override
public void onCoreInitFinished(boolean flag) {
initView();
}
private void initView() {
int containerId = R.id.advertisement_framelayout;
FragmentManager manager = getSupportFragmentManager();
WebViewFragment fragment = WebViewFragment.newInstance("https://m.baidu.com/");
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(containerId, fragment, "advertisement").commitNow();
// manager.beginTransaction().show(fragment).commitNow();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
IntentUtils.startActivity(this, TestHomeActivity.class);
return false;
}
}
......@@ -9,8 +9,8 @@ import androidx.fragment.app.Fragment;
import com.polysoft.nafmii.bean.MenuBean;
import com.polysoft.nafmii.enums.ModulesEnum;
import com.whaty.nafmii.R;
import com.polysoft.nafmii.fragment.home.ModulesFragmentMgr;
import com.whaty.nafmii.R;
import java.util.HashMap;
import java.util.Map;
......
......@@ -23,6 +23,7 @@ public class MainActivity extends BaseActivity {
private AdvertisementViewModel.LiveData mAdvertisementData;
private final String FIRST_RUN_KEY = getFirstRunKey();
private boolean isAdvertisement = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -90,10 +91,11 @@ public class MainActivity extends BaseActivity {
}
private synchronized void showAdvertisement() {
boolean isReturn = null == this.mAdvertisementData || !this.isFirstRun();
if (isReturn || super.isFragmentExists(AdvertisementFragment.class)) {
if (null == this.mAdvertisementData || !this.isFirstRun() || this.isAdvertisement) {
return;
}
this.isAdvertisement = true;
if (this.mAdvertisementData.empty()) {
this.dispatchEvent(IActivityEvent.EVENT_ADVERTISEMENT);
return;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!