Commit 6fc4c18c by amateur

1

1 parent 14d7e47f
...@@ -36,13 +36,16 @@ ...@@ -36,13 +36,16 @@
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.BROWSABLE" />
<data <data
android:host="app" android:host="jp.app"
android:pathPrefix="/open" android:pathPrefix="/openwith"
android:scheme="nafmii" /> android:scheme="nafmii" />
</intent-filter> </intent-filter>
</activity> </activity>
......
No preview for this file type
...@@ -5,8 +5,8 @@ import com.alibaba.fastjson.annotation.JSONField; ...@@ -5,8 +5,8 @@ import com.alibaba.fastjson.annotation.JSONField;
public class Result { public class Result {
public static final String FAIL = "-1";
public static final String SUCCESS = "0"; public static final String SUCCESS = "0";
public static final String FAIL = "1";
@JSONField(name = "status") @JSONField(name = "status")
protected String status; protected String status;
...@@ -71,4 +71,5 @@ public class Result { ...@@ -71,4 +71,5 @@ public class Result {
public static Result fail(String statusText) { public static Result fail(String statusText) {
return fail(statusText, null); return fail(statusText, null);
} }
} }
...@@ -2,7 +2,7 @@ package com.polysoft.nafmii.constants; ...@@ -2,7 +2,7 @@ package com.polysoft.nafmii.constants;
public class 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_MY = "file:///android_asset/dist/index.html#/user/center";
public static final String MODULE_URL_MEMBER = ""; public static final String MODULE_URL_MEMBER = "";
public static final String MODULE_URL_LEARN = "http://debugtbs.qq.com"; public static final String MODULE_URL_LEARN = "http://debugtbs.qq.com";
......
...@@ -2,10 +2,10 @@ package com.polysoft.nafmii.enums; ...@@ -2,10 +2,10 @@ package com.polysoft.nafmii.enums;
public enum ModulesEnum { public enum ModulesEnum {
HOME("home", "home", "file:///android_asset/dist/index.html#/"), HOME("home", "home", "#/home"),
MEMBER("member", "home","file:///android_asset/dist/index.html#/home"), MEMBER("member", "member", "#/member/login"),
LEARN("learn", "learn", "http://debugtbs.qq.com"), 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 name;
public final String fmtKey; public final String fmtKey;
......
...@@ -60,12 +60,9 @@ public class FingerprintDialogFragment extends DialogFragment { ...@@ -60,12 +60,9 @@ public class FingerprintDialogFragment extends DialogFragment {
View v = inflater.inflate(R.layout.fingerprint_dialog, container, false); View v = inflater.inflate(R.layout.fingerprint_dialog, container, false);
errorMsg = v.findViewById(R.id.error_msg); errorMsg = v.findViewById(R.id.error_msg);
TextView cancel = v.findViewById(R.id.cancel); TextView cancel = v.findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() { cancel.setOnClickListener(v1 -> {
@Override dismiss();
public void onClick(View v) { stopListening();
dismiss();
stopListening();
}
}); });
return v; return v;
} }
......
package com.polysoft.nafmii.fragment.dialog; package com.polysoft.nafmii.fragment.dialog;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.KeyguardManager;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle; import android.os.Bundle;
import android.os.CancellationSignal;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -11,32 +13,147 @@ import android.widget.TextView; ...@@ -11,32 +13,147 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment; 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 com.whaty.nafmii.R;
import java.util.Objects;
@TargetApi(23) @TargetApi(23)
public class FingerprintDialog extends DialogFragment { public class FingerprintDialog extends DialogFragment {
private FingerprintManager mFingerprintMgr; private FingerprintManager mFingerprintMgr;
private CancellationSignal mCancellationSignal;
private TextView errorMsg; 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 @Override
public void onCreate(@Nullable Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
super.setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Material_Light_Dialog); 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 @Nullable
@Override @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); View view = inflater.inflate(R.layout.fingerprint_dialog, container, false);
this.errorMsg = view.findViewById(R.id.error_msg); this.errorMsg = view.findViewById(R.id.error_msg);
view.findViewById(R.id.cancel).setOnClickListener((v) ->{ view.findViewById(R.id.cancel).setOnClickListener((v) -> cancel());
dismiss();
});
return view; 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 { ...@@ -28,6 +28,10 @@ public class CtxUtils {
return getAssetsManager().open(fileName); return getAssetsManager().open(fileName);
} }
public static <T> T getSystemService(Class<T> c) {
return getApplication().getSystemService(c);
}
public static PackageInfo getPackageInfo() { public static PackageInfo getPackageInfo() {
PackageManager manager = getApplication().getPackageManager(); PackageManager manager = getApplication().getPackageManager();
......
...@@ -6,14 +6,14 @@ public class ToastUtils { ...@@ -6,14 +6,14 @@ public class ToastUtils {
public static void showLong(String message) { 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.setText(message);
toast.show(); toast.show();
// Toast.makeText(CtxUtils.getApplication(), message, Toast.LENGTH_LONG).show(); // Toast.makeText(CtxUtils.getApplication(), message, Toast.LENGTH_LONG).show();
} }
public static void showShort(String message) { 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.setText(message);
toast.show(); toast.show();
// Toast.makeText(CtxUtils.getApplication(), message, Toast.LENGTH_SHORT).show(); // Toast.makeText(CtxUtils.getApplication(), message, Toast.LENGTH_SHORT).show();
......
package com.polysoft.nafmii.utils; package com.polysoft.nafmii.utils;
import android.net.Uri; import com.whaty.nafmii.BuildConfig;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
...@@ -14,6 +14,9 @@ import java.util.zip.ZipInputStream; ...@@ -14,6 +14,9 @@ import java.util.zip.ZipInputStream;
public class ZipUtils { public class ZipUtils {
public static void unZipDistAssets() { public static void unZipDistAssets() {
if (BuildConfig.DEBUG) {
FileUtils.deletes(FileUtils.getDistDir());
}
// 已经存在,则不解压 // 已经存在,则不解压
if (FileUtils.getIndex().exists()) { if (FileUtils.getIndex().exists()) {
return; return;
......
...@@ -2,12 +2,10 @@ package com.polysoft.nafmii.webview; ...@@ -2,12 +2,10 @@ package com.polysoft.nafmii.webview;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.text.TextUtils;
import android.webkit.JavascriptInterface; import android.webkit.JavascriptInterface;
import androidx.fragment.app.Fragment;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.util.TypeUtils; import com.alibaba.fastjson.util.TypeUtils;
...@@ -18,13 +16,15 @@ import com.polysoft.nafmii.broadcast.ShareReceiver; ...@@ -18,13 +16,15 @@ import com.polysoft.nafmii.broadcast.ShareReceiver;
import com.polysoft.nafmii.database.ObjectBox; import com.polysoft.nafmii.database.ObjectBox;
import com.polysoft.nafmii.database.entity.DataEntity; import com.polysoft.nafmii.database.entity.DataEntity;
import com.polysoft.nafmii.enums.DatabaseEnum; import com.polysoft.nafmii.enums.DatabaseEnum;
import com.polysoft.nafmii.fragment.dialog.FingerprintDialog;
import com.polysoft.nafmii.utils.CtxUtils; 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.utils.StatusBarUtils;
import com.polysoft.nafmii.wechat.ShareBean; import com.polysoft.nafmii.wechat.ShareBean;
import com.polysoft.nafmii.wechat.WechatApi; import com.polysoft.nafmii.wechat.WechatApi;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -61,7 +61,14 @@ public class NativeApi { ...@@ -61,7 +61,14 @@ public class NativeApi {
@JavascriptInterface @JavascriptInterface
public void nativeLogin(String params) { public void nativeLogin(String params) {
new JsInterfaceHandler(handler).parse(params, (data, js) -> { 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 { ...@@ -97,8 +104,8 @@ public class NativeApi {
@JavascriptInterface @JavascriptInterface
public void nativeBackIntercept(String param) { public void nativeBackIntercept(String param) {
new JsInterfaceHandler(handler).parse(param, (data, js) -> { new JsInterfaceHandler(handler).parse(param, (data, js) -> {
Boolean type = data.getBoolean("type"); Boolean value = data.getBoolean("value");
handler.setBackIntercept(null == type ? false : type); handler.setBackIntercept(null == value ? false : value);
js.success(null); js.success(null);
}); });
} }
...@@ -111,7 +118,7 @@ public class NativeApi { ...@@ -111,7 +118,7 @@ public class NativeApi {
List<DataEntity> list = new ArrayList<>(); List<DataEntity> list = new ArrayList<>();
for (int i = 0; i < datas.size(); i++) { for (int i = 0; i < datas.size(); i++) {
JSONObject item = datas.getJSONObject(i); JSONObject item = datas.getJSONObject(i);
String key = item.getString("key"); String key = item.getString("name");
Object valueObj = item.get("value"); Object valueObj = item.get("value");
list.add(new DataEntity(key, null == valueObj ? null : valueObj.toString())); list.add(new DataEntity(key, null == valueObj ? null : valueObj.toString()));
} }
...@@ -119,7 +126,8 @@ public class NativeApi { ...@@ -119,7 +126,8 @@ public class NativeApi {
if (DatabaseEnum.GET.name.equals(type)) { if (DatabaseEnum.GET.name.equals(type)) {
js.success(ObjectBox.findList(arrays)); js.success(ObjectBox.findList(arrays));
return; return;
} if (DatabaseEnum.SAVE.name.equals(type)) { }
if (DatabaseEnum.SAVE.name.equals(type)) {
ObjectBox.put(arrays); ObjectBox.put(arrays);
} else if (DatabaseEnum.DELETE.name.equals(type)) { } else if (DatabaseEnum.DELETE.name.equals(type)) {
ObjectBox.delete(arrays); ObjectBox.delete(arrays);
...@@ -136,20 +144,15 @@ public class NativeApi { ...@@ -136,20 +144,15 @@ public class NativeApi {
} }
}); });
String permissions[] = { String permissions[] = {Manifest.permission.CAMERA};
Manifest.permission.WRITE_EXTERNAL_STORAGE, if (PermissionUtils.checkAndRequestMorePermissions(this.mActivity, permissions)) {
Manifest.permission.READ_EXTERNAL_STORAGE, Intent intent = IntentUtils.openCamera(this.mActivity);
Manifest.permission.CAMERA, handler.getFragment().startActivityForResult(intent, IntentUtils.ACTIVITY_CODE_CAMERA);
}; }
// if (PermissionUtils.checkPermissions(this.mActivity, permissions)) {
// this.photosReceiverListener(jsMethodName);
// Intent intent = IntentUtils.openCamera(this.mActivity);
// this.mFragment.startActivityForResult(intent, IntentUtils.ACTIVITY_CODE_CAMERA);
// }
} }
//
// @JavascriptInterface @JavascriptInterface
// public void callNativeAlbum(String params) { public void nativeAlbum(String params) {
// final JSONObject json = JSONObject.parseObject(params); // final JSONObject json = JSONObject.parseObject(params);
// final String jsMethodName = json.getString("jsMethodName"); // final String jsMethodName = json.getString("jsMethodName");
// final JSONObject data = json.getJSONObject("data"); // final JSONObject data = json.getJSONObject("data");
...@@ -163,8 +166,8 @@ public class NativeApi { ...@@ -163,8 +166,8 @@ public class NativeApi {
// Intent intent = IntentUtils.openAlbum(this.mActivity); // Intent intent = IntentUtils.openAlbum(this.mActivity);
// this.mFragment.startActivityForResult(intent, IntentUtils.ACTIVITY_CODE_ALBUM); // this.mFragment.startActivityForResult(intent, IntentUtils.ACTIVITY_CODE_ALBUM);
// } // }
// } }
//
// @JavascriptInterface // @JavascriptInterface
// public void callNativeUpdate(String params) { // public void callNativeUpdate(String params) {
// final JSONObject json = JSONObject.parseObject(params); // final JSONObject json = JSONObject.parseObject(params);
...@@ -227,4 +230,6 @@ public class NativeApi { ...@@ -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; ...@@ -9,8 +9,8 @@ import androidx.fragment.app.Fragment;
import com.polysoft.nafmii.bean.MenuBean; import com.polysoft.nafmii.bean.MenuBean;
import com.polysoft.nafmii.enums.ModulesEnum; import com.polysoft.nafmii.enums.ModulesEnum;
import com.whaty.nafmii.R;
import com.polysoft.nafmii.fragment.home.ModulesFragmentMgr; import com.polysoft.nafmii.fragment.home.ModulesFragmentMgr;
import com.whaty.nafmii.R;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
......
...@@ -23,6 +23,7 @@ public class MainActivity extends BaseActivity { ...@@ -23,6 +23,7 @@ public class MainActivity extends BaseActivity {
private AdvertisementViewModel.LiveData mAdvertisementData; private AdvertisementViewModel.LiveData mAdvertisementData;
private final String FIRST_RUN_KEY = getFirstRunKey(); private final String FIRST_RUN_KEY = getFirstRunKey();
private boolean isAdvertisement = false;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
...@@ -90,10 +91,11 @@ public class MainActivity extends BaseActivity { ...@@ -90,10 +91,11 @@ public class MainActivity extends BaseActivity {
} }
private synchronized void showAdvertisement() { private synchronized void showAdvertisement() {
boolean isReturn = null == this.mAdvertisementData || !this.isFirstRun(); if (null == this.mAdvertisementData || !this.isFirstRun() || this.isAdvertisement) {
if (isReturn || super.isFragmentExists(AdvertisementFragment.class)) {
return; return;
} }
this.isAdvertisement = true;
if (this.mAdvertisementData.empty()) { if (this.mAdvertisementData.empty()) {
this.dispatchEvent(IActivityEvent.EVENT_ADVERTISEMENT); this.dispatchEvent(IActivityEvent.EVENT_ADVERTISEMENT);
return; return;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!