master
lijie 2023-07-27 18:11:12 +08:00
parent 865de07c12
commit 504d58d636
17 changed files with 802 additions and 1095 deletions

View File

@ -1,75 +1,63 @@
package com.cmx.wanhui.activity; package com.cmx.wanhui.activity
import android.os.Bundle; import android.os.Bundle
import android.webkit.WebResourceError; import android.webkit.WebResourceError
import android.webkit.WebResourceRequest; import android.webkit.WebResourceRequest
import android.webkit.WebView; import android.webkit.WebView
import android.webkit.WebViewClient; import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import com.cmx.wanhui.view.BaseLoadingDialog
import com.lsxiao.apollo.core.Apollo
import com.lsxiao.apollo.core.contract.ApolloBinder
import androidx.appcompat.app.AppCompatActivity; open class BaseActivity : AppCompatActivity() {
private var mBaseLoadingDialog: BaseLoadingDialog? = null
import com.cmx.wanhui.view.BaseLoadingDialog; private var mApolloBinder: ApolloBinder? = null
import com.lsxiao.apollo.core.Apollo; override fun onCreate(savedInstanceState: Bundle?) {
import com.lsxiao.apollo.core.contract.ApolloBinder; super.onCreate(savedInstanceState)
mBaseLoadingDialog = BaseLoadingDialog(this)
public class BaseActivity extends AppCompatActivity { mApolloBinder = Apollo.bind(this)
private static final String TAG = "BaseActivity";
private BaseLoadingDialog mBaseLoadingDialog;
private ApolloBinder mApolloBinder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBaseLoadingDialog = new BaseLoadingDialog(this);
mApolloBinder = Apollo.bind(this);
} }
fun showDialog() {
public void showDialog() { if (!mBaseLoadingDialog!!.isShowing) {
if (!mBaseLoadingDialog.isShowing()) { mBaseLoadingDialog!!.show()
mBaseLoadingDialog.show();
} }
} }
fun disDialog() {
public void disDialog() { if (mBaseLoadingDialog!!.isShowing) {
if (mBaseLoadingDialog.isShowing()) { mBaseLoadingDialog!!.dismiss()
mBaseLoadingDialog.dismiss();
} }
} }
public void setWeb(WebView mWebView) { fun setWeb(mWebView: WebView) {
mWebView.setWebViewClient(new WebViewClient() { mWebView.webViewClient = object : WebViewClient() {
@Override override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
public boolean shouldOverrideUrlLoading(WebView view, String url) { //使用WebView加载显示url
//使用WebView加载显示url view.loadUrl(url)
view.loadUrl(url); //返回true
//返回true return true
return true; }
}
@Override override fun onPageFinished(view: WebView, url: String) {
public void onPageFinished(WebView view, String url) { disDialog()
disDialog(); }
}
@Override override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) {
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { disDialog()
disDialog(); }
} }
}
);
} }
override fun onDestroy() {
@Override super.onDestroy()
protected void onDestroy() {
super.onDestroy();
if (mApolloBinder != null) { if (mApolloBinder != null) {
mApolloBinder.unbind(); mApolloBinder!!.unbind()
} }
} }
companion object {
private const val TAG = "BaseActivity"
}
} }

View File

@ -64,7 +64,7 @@ public class LoginActivity extends BaseActivity {
disDialog(); disDialog();
if (response.isSuccessful() && response.body().getCode() == 0) { if (response.isSuccessful() && response.body().getCode() == 0) {
SpUtils.putString(LoginActivity.this, "token", response.body().getAccess_token()); SpUtils.putString(LoginActivity.this, "token", response.body().getAccess_token());
SpUtils.putString(LoginActivity.this, "admin", response.body().getIs_admin()); SpUtils.putString(LoginActivity.this, "admin", response.body().is_admin());
Intent intent = new Intent(LoginActivity.this, MainActivity.class); Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent); startActivity(intent);
finish(); finish();
@ -75,8 +75,12 @@ public class LoginActivity extends BaseActivity {
@Override @Override
public void onFailure(Call<LoginRes> call, Throwable t) { public void onFailure(Call<LoginRes> call, Throwable t) {
disDialog(); disDialog();
Toasty.info(LoginActivity.this, "登录失败").show(); Toasty.info(LoginActivity.this, "登录失败").show();
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
finish();
} }
}); });
} }

View File

@ -1,142 +1,123 @@
package com.cmx.wanhui.activity; package com.cmx.wanhui.activity
import android.content.Intent; import android.content.Intent
import android.os.Build; import android.os.Build
import android.os.Bundle; import android.os.Bundle
import android.view.Menu; import android.view.View
import android.view.MenuItem; import android.widget.Toast
import android.view.View; import androidx.annotation.RequiresApi
import android.widget.Toast; import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.annotation.RequiresApi; import androidx.navigation.ui.NavigationUI
import androidx.navigation.NavController; import com.cmx.wanhui.R
import androidx.navigation.Navigation; import com.cmx.wanhui.constant.Events
import androidx.navigation.ui.AppBarConfiguration; import com.google.zxing.integration.android.IntentIntegrator
import androidx.navigation.ui.NavigationUI; import com.lsxiao.apollo.core.Apollo
import com.lsxiao.apollo.core.annotations.Receive
import com.cmx.wanhui.R; import kotlinx.android.synthetic.main.activity_main.nav_view
import com.cmx.wanhui.constant.Events;
import com.cmx.wanhui.databinding.ActivityMainBinding;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import com.lsxiao.apollo.core.Apollo;
import com.lsxiao.apollo.core.annotations.Receive;
public class MainActivity extends BaseActivity {
private ActivityMainBinding binding;
private BottomNavigationView navView;
private NavController navController;
class MainActivity : BaseActivity() {
private var navController: NavController? = null
@RequiresApi(api = Build.VERSION_CODES.M) @RequiresApi(api = Build.VERSION_CODES.M)
@Override override fun onCreate(savedInstanceState: Bundle?) {
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(getLayoutInflater()); navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main)
setContentView(binding.getRoot()); NavigationUI.setupWithNavController(nav_view, navController!!)
navView = findViewById(R.id.nav_view);
navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
NavigationUI.setupWithNavController(binding.navView, navController);
} }
/** /**
* 显示tabbar * 显示tabbar
*/ */
@Receive(Events.JS_OPEN_TABBAR_SHOW) @Receive(Events.JS_OPEN_TABBAR_SHOW)
public void showTab() { fun showTab() {
binding.navView.setVisibility(View.VISIBLE); nav_view.visibility = View.VISIBLE
} }
/** /**
* 隐藏tabbar * 隐藏tabbar
*/ */
@Receive(Events.JS_OPEN_TABBAR_HIDE) @Receive(Events.JS_OPEN_TABBAR_HIDE)
public void hideTab() { fun hideTab() {
binding.navView.setVisibility(View.GONE); nav_view.visibility = View.GONE
} }
/** /**
* 打开新的web * 打开新的web
*/ */
@Receive(Events.JS_OPEN_OPEN_WEB) @Receive(Events.JS_OPEN_OPEN_WEB)
public void openWeb(String url) { fun openWeb(url: String?) {
Intent intent = new Intent(this, WebActivity.class); val intent = Intent(this, WebActivity::class.java)
intent.putExtra("url", url); intent.putExtra("url", url)
startActivity(intent); startActivity(intent)
} }
/** /**
* 选择tab * 选择tab
*/ */
@Receive(Events.JS_OPEN_TAB) @Receive(Events.JS_OPEN_TAB)
public void ckTab(String mode) { fun ckTab(mode: String?) {
Apollo.emit(Events.JS_OPEN_CLOSE_WEB); Apollo.emit(Events.JS_OPEN_CLOSE_WEB)
switch (mode) { when (mode) {
case "1": "1" -> {
Menu menu = navView.getMenu(); val menu = nav_view!!.menu
MenuItem menuItem = menu.getItem(0); // 将index替换为您想要点击的项目的索引 val menuItem = menu.getItem(0) // 将index替换为您想要点击的项目的索引
menuItem.setChecked(true); menuItem.isChecked = true
navController.navigate(R.id.navigation_home); navController!!.navigate(R.id.navigation_home)
break; }
case "2":
Menu menu2 = navView.getMenu(); "2" -> {
MenuItem menuItem2 = menu2.getItem(1); // 将index替换为您想要点击的项目的索引 val menu2 = nav_view!!.menu
menuItem2.setChecked(true); val menuItem2 = menu2.getItem(1) // 将index替换为您想要点击的项目的索引
navController.navigate(R.id.navigation_dashboard); menuItem2.isChecked = true
break; navController!!.navigate(R.id.navigation_dashboard)
case "3": }
Menu menu3 = navView.getMenu();
MenuItem menuItem3 = menu3.getItem(2); // 将index替换为您想要点击的项目的索引 "3" -> {
menuItem3.setChecked(true); val menu3 = nav_view!!.menu
navController.navigate(R.id.navigation_notifications); val menuItem3 = menu3.getItem(2) // 将index替换为您想要点击的项目的索引
break; menuItem3.isChecked = true
navController!!.navigate(R.id.navigation_notifications)
}
} }
} }
/** /**
* 退出登录 * 退出登录
*/ */
@Receive(Events.JS_OPEN_LOGOUT) @Receive(Events.JS_OPEN_LOGOUT)
public void exit() { fun exit() {
Apollo.emit(Events.JS_OPEN_CLOSE_WEB); Apollo.emit(Events.JS_OPEN_CLOSE_WEB)
finish(); finish()
Intent intent = new Intent(this, LoginActivity.class); val intent = Intent(this, LoginActivity::class.java)
startActivity(intent); startActivity(intent)
} }
/** /**
* 二维码扫描 * 二维码扫描
*/ */
@Receive(Events.JS_OPEN_SCANQR) @Receive(Events.JS_OPEN_SCANQR)
public void scanQR() { fun scanQR() {
IntentIntegrator integrator = new IntentIntegrator(this); val integrator = IntentIntegrator(this)
integrator.setOrientationLocked(true); // 设置扫描方向是否锁定 integrator.setOrientationLocked(true) // 设置扫描方向是否锁定
integrator.setCaptureActivity(CustomCaptureActivity.class); integrator.captureActivity = CustomCaptureActivity::class.java
integrator.setPrompt("请对准二维码");// 设置提示语 integrator.setPrompt("请对准二维码") // 设置提示语
integrator.initiateScan(); integrator.initiateScan()
} }
// 处理扫描结果 // 处理扫描结果
@Override override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
protected void onActivityResult(int requestCode, int resultCode, Intent data) { val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) { if (result != null) {
if (result.getContents() == null) { // 扫描取消 if (result.contents == null) { // 扫描取消
} else { // 扫描成功,处理结果 } else { // 扫描成功,处理结果
String scannedData = result.getContents(); val scannedData = result.contents
Apollo.emit(Events.JS_OPEN_SCANQR_BACK, scannedData); Apollo.emit(Events.JS_OPEN_SCANQR_BACK, scannedData)
Toast.makeText(this, "扫描结果: " + scannedData, Toast.LENGTH_LONG).show(); Toast.makeText(this, "扫描结果: $scannedData", Toast.LENGTH_LONG).show()
} }
} else { } else {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data)
} }
} }
} }

View File

@ -1,40 +1,35 @@
package com.cmx.wanhui.activity; package com.cmx.wanhui.activity
import android.app.Application; import android.app.Application
import android.content.Context; import android.content.Context
import com.lsxiao.apollo.core.Apollo
import io.reactivex.android.schedulers.AndroidSchedulers
import com.lsxiao.apollo.core.Apollo; class MyApplication : Application() {
override fun onCreate() {
import io.reactivex.android.schedulers.AndroidSchedulers; super.onCreate()
mInstance = this
public class MyApplication extends Application { Apollo.init(AndroidSchedulers.mainThread(), this)
private static MyApplication mInstance;
private static String mToken;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
Apollo.init(AndroidSchedulers.mainThread(), this);
} }
override fun attachBaseContext(base: Context) {
@Override super.attachBaseContext(base)
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
} }
companion object {
private var mInstance: Context? = null
private var mToken: String? = null
@JvmStatic
fun getmInstance(): Context? {
return mInstance
}
public static MyApplication getmInstance() { fun getmToken(): String? {
return mInstance; return mToken
} }
public static String getmToken() { fun setmToken(mToken: String?) {
return mToken; Companion.mToken = mToken
} }
public static void setmToken(String mToken) {
MyApplication.mToken = mToken;
} }
} }

View File

@ -1,22 +1,6 @@
package com.cmx.wanhui.model; package com.cmx.wanhui.model
public class LoginBean { class LoginBean {
String username; var username: String? = null
String password; var password: String? = null
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
} }

View File

@ -1,51 +1,14 @@
package com.cmx.wanhui.model; package com.cmx.wanhui.model
public class LoginRes {
class LoginRes {
/** /**
* code : 0 * code : 0
* message : 登录成功 * message : 登录成功
* access_token : 1914936f8c87fddd11836ebebb65317bb7f57506 * access_token : 1914936f8c87fddd11836ebebb65317bb7f57506
* is_admin : 1 * is_admin : 1
*/ */
var code = 0
var message: String? = null
private int code; var access_token: String? = null
private String message; var is_admin: String? = null
private String access_token;
private String is_admin;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getAccess_token() {
return access_token;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public String getIs_admin() {
return is_admin;
}
public void setIs_admin(String is_admin) {
this.is_admin = is_admin;
}
} }

View File

@ -17,21 +17,21 @@ public class ApiRequtest<T> {
private TypeToken<T> mResultType; private TypeToken<T> mResultType;
public ApiRequtest (Call<ResponseBody> call, TypeToken<T> resultType, final ApiResponse.Listener<ApiResult<T>> listener, final ApiResponse.ErrorListener errorListener){ public ApiRequtest(Call<ResponseBody> call, TypeToken<T> resultType, final ApiResponse.Listener<ApiResult<T>> listener, final ApiResponse.ErrorListener errorListener) {
mResultType = resultType; mResultType = resultType;
call.enqueue(new Callback<ResponseBody>() { call.enqueue(new Callback<ResponseBody>() {
@Override @Override
public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) { public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
try { try {
ResponseBody responseBody = response.body(); ResponseBody responseBody = response.body();
if(responseBody != null){ if (responseBody != null) {
String jsonString = response.body().string(); String jsonString = response.body().string();
final ApiResult<T> result = new ApiResult<>(new JSONObject(jsonString), mResultType); final ApiResult<T> result = new ApiResult<>(new JSONObject(jsonString), mResultType);
listener.onResponse(result); listener.onResponse(result);
} }
}catch (IOException e){ } catch (IOException e) {
}catch (JSONException e) { } catch (JSONException e) {
} }
} }
@ -43,5 +43,4 @@ public class ApiRequtest<T> {
} }
} }

View File

@ -0,0 +1,87 @@
package com.cmx.wanhui.ui
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.fragment.app.Fragment
import com.cmx.wanhui.utils.AndroidtoJs
import com.cmx.wanhui.utils.MyUtils
import com.cmx.wanhui.view.BaseLoadingDialog
import com.lsxiao.apollo.core.Apollo
import com.lsxiao.apollo.core.contract.ApolloBinder
open class BaseFragment : Fragment() {
var mBaseLoadingDialog: BaseLoadingDialog? = null
var mApolloBinder: ApolloBinder? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(null, container, false)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBaseLoadingDialog = BaseLoadingDialog(activity)
MyUtils.setFullscreen(requireActivity(), false, false)
MyUtils.setAndroidNativeLightStatusBar(requireActivity(), true)
mApolloBinder = Apollo.bind(this)
}
/**
* 相关属性设置
*/
fun setVebView(webView: WebView) {
val webSettings = webView!!.settings
webSettings.javaScriptEnabled = true
webSettings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
webSettings.domStorageEnabled = true
webSettings.allowFileAccess = true //文件访问
webSettings.allowFileAccessFromFileURLs = true
webView!!.addJavascriptInterface(AndroidtoJs(), "AndroidtoJs")
webView!!.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
//使用WebView加载显示url
view.loadUrl(url)
//返回true
return true
}
override fun onPageFinished(view: WebView, url: String) {
disDialog()
}
override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) {
disDialog()
}
}
}
override fun onDestroyView() {
super.onDestroyView()
if (mApolloBinder != null) {
mApolloBinder!!.unbind()
}
}
fun showDialog() {
mBaseLoadingDialog = BaseLoadingDialog(activity)
if (!mBaseLoadingDialog!!.isShowing) {
mBaseLoadingDialog!!.show()
}
}
fun disDialog() {
if (mBaseLoadingDialog!!.isShowing) {
mBaseLoadingDialog!!.dismiss()
}
}
}

View File

@ -1,239 +1,161 @@
package com.cmx.wanhui.ui; package com.cmx.wanhui.ui
import static com.cmx.wanhui.constant.Events.SERVER_URL; import android.app.Activity
import android.content.ClipData
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.provider.MediaStore
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.ValueCallback
import android.webkit.WebChromeClient
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.fragment.app.Fragment
import com.cmx.wanhui.R
import com.cmx.wanhui.constant.Events
import com.cmx.wanhui.utils.AndroidtoJs
import com.cmx.wanhui.utils.L
import com.cmx.wanhui.utils.MyUtils
import com.cmx.wanhui.view.BaseLoadingDialog
import com.lsxiao.apollo.core.Apollo
import com.lsxiao.apollo.core.annotations.Receive
import kotlinx.android.synthetic.main.fragment_home.tv_te
import kotlinx.android.synthetic.main.fragment_home.wv_home
import java.io.File
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.Date
import android.app.Activity; class HomeFragment : BaseFragment() {
import android.content.ClipData;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.annotation.NonNull; private var mUploadMessage: ValueCallback<Array<Uri>>? = null
import androidx.fragment.app.Fragment; private var mCameraPhotoPath: String? = null
import androidx.lifecycle.ViewModelProvider; private var size: Long = 0
import com.cmx.wanhui.activity.LoginActivity;
import com.cmx.wanhui.constant.Events;
import com.cmx.wanhui.databinding.FragmentHomeBinding;
import com.cmx.wanhui.utils.AndroidtoJs;
import com.cmx.wanhui.utils.L;
import com.cmx.wanhui.utils.MyUtils;
import com.cmx.wanhui.view.BaseLoadingDialog;
import com.lsxiao.apollo.core.Apollo;
import com.lsxiao.apollo.core.annotations.Receive;
import com.lsxiao.apollo.core.contract.ApolloBinder;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class HomeFragment extends Fragment {
private FragmentHomeBinding binding;
private BaseLoadingDialog mBaseLoadingDialog;
private WebView mWebView;
private ApolloBinder mApolloBinder;
private ValueCallback<Uri[]> mUploadMessage;
private String mCameraPhotoPath = null;
private long size = 0;
private static final int INPUT_FILE_REQUEST_CODE = 1;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = FragmentHomeBinding.inflate(inflater, container, false); return inflater.inflate(R.layout.fragment_home, container, false)
mBaseLoadingDialog = new BaseLoadingDialog(getActivity());
View root = binding.getRoot();
MyUtils.setFullscreen(requireActivity(), false, false);
MyUtils.setAndroidNativeLightStatusBar(requireActivity(), true);
mWebView = binding.wvHome;
mApolloBinder = Apollo.bind(this);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true);//文件访问
webSettings.setAllowFileAccessFromFileURLs(true);
mWebView.addJavascriptInterface(new AndroidtoJs(), "AndroidtoJs");
// mWebView.loadUrl(SERVER_URL + "/nigeria/?lang=English#/index");
mWebView.loadUrl("https://www.baidu.com/");
showDialog();
mWebView.setWebChromeClient(new PQChromeClient());
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//使用WebView加载显示url
view.loadUrl(url);
//返回true
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
disDialog();
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
disDialog();
}
}
);
binding.tvTe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Apollo.emit(Events.JS_OPEN_SCANQR);
}
});
return root;
} }
@Override override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
public void onDestroyView() { super.onViewCreated(view, savedInstanceState)
super.onDestroyView(); setVebView(wv_home!!)
binding = null; wv_home!!.loadUrl("https://www.baidu.com/")//SERVER_URL
if (mApolloBinder != null) { showDialog()
mApolloBinder.unbind(); wv_home!!.webChromeClient = PQChromeClient()
} tv_te.setOnClickListener { Apollo.emit(Events.JS_OPEN_SCANQR) }
}
public void showDialog() {
mBaseLoadingDialog = new BaseLoadingDialog(getActivity());
if (!mBaseLoadingDialog.isShowing()) {
mBaseLoadingDialog.show();
}
}
public void disDialog() {
if (mBaseLoadingDialog.isShowing()) {
mBaseLoadingDialog.dismiss();
}
} }
public class PQChromeClient extends WebChromeClient { inner class PQChromeClient : WebChromeClient() {
// For Android 5.0+ // For Android 5.0+
public boolean onShowFileChooser(WebView view, ValueCallback<Uri[]> filePath, WebChromeClient.FileChooserParams fileChooserParams) { override fun onShowFileChooser(
view: WebView, filePath: ValueCallback<Array<Uri>>, fileChooserParams: FileChooserParams
): Boolean {
// Double check that we don't have any existing callbacks // Double check that we don't have any existing callbacks
if (mUploadMessage != null) { if (mUploadMessage != null) {
mUploadMessage.onReceiveValue(null); mUploadMessage!!.onReceiveValue(null)
} }
mUploadMessage = filePath; mUploadMessage = filePath
Log.e("FileCooserParams => ", filePath.toString()); Log.e("FileCooserParams => ", filePath.toString())
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); var takePictureIntent: Intent? = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { if (takePictureIntent!!.resolveActivity(activity!!.packageManager) != null) {
// Create the File where the photo should go // Create the File where the photo should go
File photoFile = null; var photoFile: File? = null
try { try {
photoFile = createImageFile(); photoFile = createImageFile()
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath); takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath)
} catch (IOException ex) { } catch (ex: IOException) {
// Error occurred while creating the File // Error occurred while creating the File
Log.e("test", "Unable to create Image File", ex); Log.e("test", "Unable to create Image File", ex)
} }
// Continue only if the File was successfully created // Continue only if the File was successfully created
if (photoFile != null) { if (photoFile != null) {
mCameraPhotoPath = "file:" + photoFile.getAbsolutePath(); mCameraPhotoPath = "file:" + photoFile.absolutePath
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile))
} else { } else {
takePictureIntent = null; takePictureIntent = null
} }
} }
val contentSelectionIntent = Intent(Intent.ACTION_GET_CONTENT)
Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE)
contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); contentSelectionIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
contentSelectionIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); contentSelectionIntent.type = "image/*"
contentSelectionIntent.setType("image/*"); val intentArray: Array<Intent?>
Intent[] intentArray; intentArray = takePictureIntent?.let { arrayOf(it) } ?: arrayOfNulls(2)
if (takePictureIntent != null) { val chooserIntent = Intent(Intent.ACTION_CHOOSER)
intentArray = new Intent[]{takePictureIntent}; chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent)
} else { chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser")
intentArray = new Intent[2]; chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray)
} startActivityForResult(Intent.createChooser(chooserIntent, "Select images"), 1)
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER); return true
chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
startActivityForResult(Intent.createChooser(chooserIntent, "Select images"), 1);
return true;
} }
} }
@Throws(IOException::class)
private File createImageFile() throws IOException { private fun createImageFile(): File {
// Create an image file name // Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
String imageFileName = "JPEG_" + timeStamp + "_"; val imageFileName = "JPEG_" + timeStamp + "_"
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); val storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
File imageFile = File.createTempFile(imageFileName, /* prefix */ return File.createTempFile(
".jpg", /* suffix */ imageFileName, /* prefix */
storageDir /* directory */); ".jpg", /* suffix */
return imageFile; storageDir /* directory */
)
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode != INPUT_FILE_REQUEST_CODE || mUploadMessage == null) { if (requestCode != INPUT_FILE_REQUEST_CODE || mUploadMessage == null) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data)
return; return
} }
try { try {
String file_path = mCameraPhotoPath.replace("file:", ""); val file_path = mCameraPhotoPath!!.replace("file:", "")
File file = new File(file_path); val file = File(file_path)
size = file.length(); size = file.length()
if (data != null || mCameraPhotoPath != null) { if (data != null || mCameraPhotoPath != null) {
Integer count = 1; var count = 1
ClipData images = null; var images: ClipData? = null
try { try {
images = data.getClipData(); images = data!!.clipData
} catch (Exception e) { } catch (e: Exception) {
Log.e("Error!", e.getLocalizedMessage()); Log.e("Error!", e.localizedMessage)
} }
if (images == null && data != null && data.dataString != null) {
if (images == null && data != null && data.getDataString() != null) { count = data.dataString!!.length
count = data.getDataString().length();
} else if (images != null) { } else if (images != null) {
count = images.getItemCount(); count = images.itemCount
} }
Uri[] results = new Uri[count]; var results = arrayOfNulls<Uri>(count)
// Check that the response is a good one
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
if (size != 0) { if (size != 0L) {
// If there is not data, then we may have taken a photo // If there is not data, then we may have taken a photo
if (mCameraPhotoPath != null) { if (mCameraPhotoPath != null) {
results = new Uri[]{Uri.parse(mCameraPhotoPath)}; results = arrayOf(Uri.parse(mCameraPhotoPath))
} }
} else if (data.getClipData() == null) { } else if (data!!.clipData == null) {
results = new Uri[]{Uri.parse(data.getDataString())}; results = arrayOf(Uri.parse(data.dataString))
} else { } else {
for (i in 0 until images!!.itemCount) {
for (int i = 0; i < images.getItemCount(); i++) { results[i] = images.getItemAt(i).uri
results[i] = images.getItemAt(i).getUri();
} }
} }
} }
mUploadMessage.onReceiveValue(results); //mUploadMessage!!.onReceiveValue(results)
mUploadMessage = null; mUploadMessage = null
} }
} catch (Exception e) { } catch (e: Exception) {
Log.e("Error!", "Error while opening image file" + e.getLocalizedMessage()); Log.e("Error!", "Error while opening image file" + e.localizedMessage)
} }
} }
@ -241,13 +163,13 @@ public class HomeFragment extends Fragment {
* 二维码扫描返回 * 二维码扫描返回
*/ */
@Receive(Events.JS_OPEN_SCANQR_BACK) @Receive(Events.JS_OPEN_SCANQR_BACK)
public void onQRBack(String msg) { fun onQRBack(msg: String) {
String jsString = "javascript:onQRBack(" + msg + ")"; val jsString = "javascript:onQRBack($msg)"
L.e("JS二维码扫描返回>>>>", jsString); L.e("JS二维码扫描返回>>>>", jsString)
mWebView.evaluateJavascript(jsString, new ValueCallback<String>() { wv_home!!.evaluateJavascript(jsString) { }
@Override }
public void onReceiveValue(String s) {
} companion object {
}); private const val INPUT_FILE_REQUEST_CODE = 1
} }
} }

View File

@ -1,236 +1,155 @@
package com.cmx.wanhui.ui; package com.cmx.wanhui.ui
import static com.cmx.wanhui.constant.Events.SERVER_URL; import android.app.Activity
import android.content.ClipData
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.provider.MediaStore
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.ValueCallback
import android.webkit.WebChromeClient
import android.webkit.WebView
import com.cmx.wanhui.R
import com.cmx.wanhui.constant.Events
import com.cmx.wanhui.utils.L
import com.lsxiao.apollo.core.Apollo
import com.lsxiao.apollo.core.annotations.Receive
import kotlinx.android.synthetic.main.fragment_dashboard.wv_loan
import kotlinx.android.synthetic.main.fragment_home.tv_te
import java.io.File
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.Date
import android.app.Activity; class ModeFragment : BaseFragment() {
import android.content.ClipData; private var mUploadMessage: ValueCallback<Array<Uri>>? = null
import android.content.Intent; private var mCameraPhotoPath: String? = null
import android.net.Uri; private var size: Long = 0
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.cmx.wanhui.constant.Events;
import com.cmx.wanhui.databinding.FragmentDashboardBinding;
import com.cmx.wanhui.utils.AndroidtoJs;
import com.cmx.wanhui.utils.L;
import com.cmx.wanhui.utils.MyUtils;
import com.cmx.wanhui.view.BaseLoadingDialog;
import com.lsxiao.apollo.core.Apollo;
import com.lsxiao.apollo.core.annotations.Receive;
import com.lsxiao.apollo.core.contract.ApolloBinder;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ModeFragment extends Fragment {
private FragmentDashboardBinding binding;
private BaseLoadingDialog mBaseLoadingDialog;
private WebView mWebView;
private ApolloBinder mApolloBinder;
private ValueCallback<Uri[]> mUploadMessage;
private String mCameraPhotoPath = null;
private long size = 0;
private static final int INPUT_FILE_REQUEST_CODE = 1;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = FragmentDashboardBinding.inflate(inflater, container, false); return inflater.inflate(R.layout.fragment_dashboard, container, false)
mBaseLoadingDialog = new BaseLoadingDialog(getActivity()); }
View root = binding.getRoot();
MyUtils.setFullscreen(requireActivity(), false, false);
MyUtils.setAndroidNativeLightStatusBar(requireActivity(), true);
mWebView = binding.wvLoan;
mApolloBinder = Apollo.bind(this);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true);//文件访问
webSettings.setAllowFileAccessFromFileURLs(true);
mWebView.addJavascriptInterface(new AndroidtoJs(), "AndroidtoJs");
// mWebView.loadUrl(SERVER_URL + "/nigeria/?lang=English#/loans");
mWebView.loadUrl("https://www.baidu.com/");
showDialog();
mWebView.setWebChromeClient(new PQChromeClient());
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//使用WebView加载显示url
view.loadUrl(url);
//返回true
return true;
}
@Override override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
public void onPageFinished(WebView view, String url) { super.onViewCreated(view, savedInstanceState)
disDialog(); setVebView(wv_loan!!)
} wv_loan!!.loadUrl("https://www.baidu.com/")//SERVER_URL
showDialog()
@Override wv_loan!!.webChromeClient = PQChromeClient()
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
disDialog();
}
}
);
return root;
} }
@Override inner class PQChromeClient : WebChromeClient() {
public void onDestroyView() {
super.onDestroyView();
binding = null;
if (mApolloBinder != null) {
mApolloBinder.unbind();
}
}
public void showDialog() {
mBaseLoadingDialog = new BaseLoadingDialog(getActivity());
if (!mBaseLoadingDialog.isShowing()) {
mBaseLoadingDialog.show();
}
}
public void disDialog() {
if (mBaseLoadingDialog.isShowing()) {
mBaseLoadingDialog.dismiss();
}
}
public class PQChromeClient extends WebChromeClient {
// For Android 5.0+ // For Android 5.0+
public boolean onShowFileChooser(WebView view, ValueCallback<Uri[]> filePath, WebChromeClient.FileChooserParams fileChooserParams) { override fun onShowFileChooser(
view: WebView,
filePath: ValueCallback<Array<Uri>>,
fileChooserParams: FileChooserParams
): Boolean {
// Double check that we don't have any existing callbacks // Double check that we don't have any existing callbacks
if (mUploadMessage != null) { if (mUploadMessage != null) {
mUploadMessage.onReceiveValue(null); mUploadMessage!!.onReceiveValue(null)
} }
mUploadMessage = filePath; mUploadMessage = filePath
Log.e("FileCooserParams => ", filePath.toString()); Log.e("FileCooserParams => ", filePath.toString())
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); var takePictureIntent: Intent? = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { if (takePictureIntent!!.resolveActivity(activity!!.packageManager) != null) {
// Create the File where the photo should go // Create the File where the photo should go
File photoFile = null; var photoFile: File? = null
try { try {
photoFile = createImageFile(); photoFile = createImageFile()
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath); takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath)
} catch (IOException ex) { } catch (ex: IOException) {
// Error occurred while creating the File // Error occurred while creating the File
Log.e("test", "Unable to create Image File", ex); Log.e("test", "Unable to create Image File", ex)
} }
// Continue only if the File was successfully created // Continue only if the File was successfully created
if (photoFile != null) { if (photoFile != null) {
mCameraPhotoPath = "file:" + photoFile.getAbsolutePath(); mCameraPhotoPath = "file:" + photoFile.absolutePath
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile))
} else { } else {
takePictureIntent = null; takePictureIntent = null
} }
} }
val contentSelectionIntent = Intent(Intent.ACTION_GET_CONTENT)
Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT); contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE)
contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE); contentSelectionIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
contentSelectionIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); contentSelectionIntent.type = "image/*"
contentSelectionIntent.setType("image/*"); val intentArray: Array<Intent?>
intentArray = takePictureIntent?.let { arrayOf(it) } ?: arrayOfNulls(2)
Intent[] intentArray; val chooserIntent = Intent(Intent.ACTION_CHOOSER)
if (takePictureIntent != null) { chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent)
intentArray = new Intent[]{takePictureIntent}; chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser")
} else { chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray)
intentArray = new Intent[2]; startActivityForResult(Intent.createChooser(chooserIntent, "Select images"), 1)
} return true
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
startActivityForResult(Intent.createChooser(chooserIntent, "Select images"), 1);
return true;
} }
} }
@Throws(IOException::class)
private File createImageFile() throws IOException { private fun createImageFile(): File {
// Create an image file name // Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
String imageFileName = "JPEG_" + timeStamp + "_"; val imageFileName = "JPEG_" + timeStamp + "_"
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); val storageDir =
File imageFile = File.createTempFile(imageFileName, /* prefix */ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
".jpg", /* suffix */ return File.createTempFile(
storageDir /* directory */); imageFileName, /* prefix */
return imageFile; ".jpg", /* suffix */
storageDir /* directory */
)
} }
@Override override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode != INPUT_FILE_REQUEST_CODE || mUploadMessage == null) { if (requestCode != INPUT_FILE_REQUEST_CODE || mUploadMessage == null) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data)
return; return
} }
try { try {
String file_path = mCameraPhotoPath.replace("file:", ""); val file_path = mCameraPhotoPath!!.replace("file:", "")
File file = new File(file_path); val file = File(file_path)
size = file.length(); size = file.length()
} catch (e: Exception) {
} catch (Exception e) { Log.e("Error!", "Error while opening image file" + e.localizedMessage)
Log.e("Error!", "Error while opening image file" + e.getLocalizedMessage());
} }
if (data != null || mCameraPhotoPath != null) { if (data != null || mCameraPhotoPath != null) {
Integer count = 1; var count = 1
ClipData images = null; var images: ClipData? = null
try { try {
images = data.getClipData(); images = data!!.clipData
} catch (Exception e) { } catch (e: Exception) {
Log.e("Error!", e.getLocalizedMessage()); Log.e("Error!", e.localizedMessage)
} }
if (images == null && data != null && data.dataString != null) {
if (images == null && data != null && data.getDataString() != null) { count = data.dataString!!.length
count = data.getDataString().length();
} else if (images != null) { } else if (images != null) {
count = images.getItemCount(); count = images.itemCount
} }
Uri[] results = new Uri[count]; var results = arrayOfNulls<Uri>(count)
// Check that the response is a good one // Check that the response is a good one
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
if (size != 0) { if (size != 0L) {
// If there is not data, then we may have taken a photo // If there is not data, then we may have taken a photo
if (mCameraPhotoPath != null) { if (mCameraPhotoPath != null) {
results = new Uri[]{Uri.parse(mCameraPhotoPath)}; results = arrayOf(Uri.parse(mCameraPhotoPath))
} }
} else if (data.getClipData() == null) { } else if (data!!.clipData == null) {
results = new Uri[]{Uri.parse(data.getDataString())}; results = arrayOf(Uri.parse(data.dataString))
} else { } else {
for (i in 0 until images!!.itemCount) {
for (int i = 0; i < images.getItemCount(); i++) { results[i] = images.getItemAt(i).uri
results[i] = images.getItemAt(i).getUri();
} }
} }
} }
mUploadMessage.onReceiveValue(results); //mUploadMessage!!.onReceiveValue(results)
mUploadMessage = null; mUploadMessage = null
} }
} }
@ -238,13 +157,13 @@ public class ModeFragment extends Fragment {
* 二维码扫描返回 * 二维码扫描返回
*/ */
@Receive(Events.JS_OPEN_SCANQR_BACK) @Receive(Events.JS_OPEN_SCANQR_BACK)
public void onQRBack(String msg) { fun onQRBack(msg: String) {
String jsString = "javascript:onQRBack(" + msg + ")"; val jsString = "javascript:onQRBack($msg)"
L.e("JS二维码扫描返回>>>>", jsString); L.e("JS二维码扫描返回>>>>", jsString)
mWebView.evaluateJavascript(jsString, new ValueCallback<String>() { wv_loan!!.evaluateJavascript(jsString) { }
@Override }
public void onReceiveValue(String s) {
} companion object {
}); private const val INPUT_FILE_REQUEST_CODE = 1
} }
} }

View File

@ -1,116 +1,40 @@
package com.cmx.wanhui.ui; package com.cmx.wanhui.ui
import static com.cmx.wanhui.constant.Events.SERVER_URL; import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.cmx.wanhui.R
import com.cmx.wanhui.constant.Events
import com.cmx.wanhui.utils.L
import com.lsxiao.apollo.core.Apollo
import com.lsxiao.apollo.core.annotations.Receive
import kotlinx.android.synthetic.main.fragment_home.tv_te
import kotlinx.android.synthetic.main.fragment_notifications.wv_mine
import android.os.Bundle; class PersonalFragment : BaseFragment() {
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.ValueCallback;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.cmx.wanhui.constant.Events;
import com.cmx.wanhui.databinding.FragmentNotificationsBinding;
import com.cmx.wanhui.utils.AndroidtoJs;
import com.cmx.wanhui.utils.L;
import com.cmx.wanhui.utils.MyUtils;
import com.cmx.wanhui.view.BaseLoadingDialog;
import com.lsxiao.apollo.core.Apollo;
import com.lsxiao.apollo.core.annotations.Receive;
import com.lsxiao.apollo.core.contract.ApolloBinder;
public class PersonalFragment extends Fragment {
private FragmentNotificationsBinding binding;
private BaseLoadingDialog mBaseLoadingDialog;
private WebView mWebView;
private ApolloBinder mApolloBinder;
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_notifications, container, false)
binding = FragmentNotificationsBinding.inflate(inflater, container, false);
mBaseLoadingDialog = new BaseLoadingDialog(getActivity());
View root = binding.getRoot();
mApolloBinder = Apollo.bind(this);
MyUtils.setFullscreen(requireActivity(), false, false);
MyUtils.setAndroidNativeLightStatusBar(requireActivity(), true);
mWebView = binding.wvMine;
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webSettings.setDomStorageEnabled(true);
mWebView.addJavascriptInterface(new AndroidtoJs(), "AndroidtoJs");
// mWebView.loadUrl(SERVER_URL + "/nigeria/?lang=English#/my");
mWebView.loadUrl("https://www.baidu.com/");
showDialog();
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//使用WebView加载显示url
view.loadUrl(url);
//返回true
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
disDialog();
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
disDialog();
}
}
);
return root;
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@Override super.onViewCreated(view, savedInstanceState)
public void onDestroyView() { setVebView(wv_mine!!)
super.onDestroyView(); wv_mine!!.loadUrl("https://www.baidu.com/")//SERVER_URL
binding = null; showDialog()
if (mApolloBinder != null) { //wv_mine!!.webChromeClient = PQChromeClient()
mApolloBinder.unbind();
}
} }
public void showDialog() {
mBaseLoadingDialog = new BaseLoadingDialog(getActivity());
if (!mBaseLoadingDialog.isShowing()) {
mBaseLoadingDialog.show();
}
}
public void disDialog() {
if (mBaseLoadingDialog.isShowing()) {
mBaseLoadingDialog.dismiss();
}
}
/** /**
* 二维码扫描返回 * 二维码扫描返回
*/ */
@Receive(Events.JS_OPEN_SCANQR_BACK) @Receive(Events.JS_OPEN_SCANQR_BACK)
public void onQRBack(String msg) { fun onQRBack(msg: String) {
String jsString = "javascript:onQRBack(" + msg + ")"; val jsString = "javascript:onQRBack($msg)"
L.e("JS二维码扫描返回>>>>", jsString); L.e("JS二维码扫描返回>>>>", jsString)
mWebView.evaluateJavascript(jsString, new ValueCallback<String>() { wv_mine!!.evaluateJavascript(jsString) { }
@Override
public void onReceiveValue(String s) {
}
});
} }
} }

View File

@ -1,95 +1,94 @@
package com.cmx.wanhui.utils; package com.cmx.wanhui.utils
import android.content.pm.PackageInfo; import android.content.pm.PackageManager
import android.content.pm.PackageManager; import android.util.Log
import android.util.Log; import android.webkit.JavascriptInterface
import android.webkit.JavascriptInterface; import com.cmx.wanhui.activity.MyApplication.Companion.getmInstance
import com.cmx.wanhui.constant.Events
import com.cmx.wanhui.constant.Events; import com.lsxiao.apollo.core.Apollo
import com.cmx.wanhui.activity.MyApplication;
import com.lsxiao.apollo.core.Apollo;
public class AndroidtoJs {
private static final String TAG = "cmx_AndroidtoJs";
class AndroidtoJs {
// 定义JS需要调用的方法 // 定义JS需要调用的方法
// 被JS调用的方法必须加入@JavascriptInterface注解 // 被JS调用的方法必须加入@JavascriptInterface注解
@JavascriptInterface @get:JavascriptInterface
public String getAppToken() { val appToken: String?
L.e("JS--", "getAppToken()"); get() {
return SpUtils.getString(MyApplication.getmInstance(), "token"); L.e("JS--", "getAppToken()")
} return SpUtils.getString(getmInstance()!!, "token")
}
/** /**
* 用户角色类型 * 用户角色类型
* *
* @return * @return
*/ */
@JavascriptInterface @get:JavascriptInterface
public String getUser() { val user: String?
L.e("JS--", "getUser()"); get() {
return SpUtils.getString(MyApplication.getmInstance(), "admin"); L.e("JS--", "getUser()")
} return SpUtils.getString(getmInstance()!!, "admin")
@JavascriptInterface
public String getAppVersion() {
L.e("JS--", "getAppVersion()");
String versionname;//版本号
try {
PackageManager pm = MyApplication.getmInstance().getApplicationContext().getPackageManager();
PackageInfo pi = pm.getPackageInfo(MyApplication.getmInstance().getApplicationContext().getPackageName(), 0);
versionname = "V" + pi.versionName;
} catch (PackageManager.NameNotFoundException e) {
versionname = "未知";
} }
Log.e(TAG, "getAppVersion=" + versionname);
return versionname; //版本号
@get:JavascriptInterface
val appVersion: String
get() {
L.e("JS--", "getAppVersion()")
val versionname: String //版本号
versionname = try {
val pm = getmInstance()!!.applicationContext.packageManager
val pi = pm.getPackageInfo(getmInstance()!!.applicationContext.packageName, 0)
"V" + pi.versionName
} catch (e: PackageManager.NameNotFoundException) {
"未知"
}
Log.e(TAG, "getAppVersion=$versionname")
return versionname
}
@JavascriptInterface
fun existApp() {
L.e("JS--", "existApp()")
Apollo.emit(Events.JS_OPEN_LOGOUT)
} }
@JavascriptInterface @JavascriptInterface
public void existApp() { fun showTab() { //tabbar显示
L.e("JS--", "existApp()"); L.e("JS--", "showTab()")
Apollo.emit(Events.JS_OPEN_LOGOUT); Apollo.emit(Events.JS_OPEN_TABBAR_SHOW)
} }
@JavascriptInterface @JavascriptInterface
public void showTab() {//tabbar显示 fun hideTab() { //tabbar隐藏
L.e("JS--", "showTab()"); L.e("JS--", "hideTab()")
Apollo.emit(Events.JS_OPEN_TABBAR_SHOW); Apollo.emit(Events.JS_OPEN_TABBAR_HIDE)
} }
@JavascriptInterface @JavascriptInterface
public void hideTab() {//tabbar隐藏 fun openWeb(url: String) { //打开一个新的web界面
L.e("JS--", "hideTab()"); L.e("JS--", "openWeb()$url")
Apollo.emit(Events.JS_OPEN_TABBAR_HIDE); Apollo.emit(Events.JS_OPEN_OPEN_WEB, url)
}
@JavascriptInterface
public void openWeb(String url) {//打开一个新的web界面
L.e("JS--", "openWeb()" + url);
Apollo.emit(Events.JS_OPEN_OPEN_WEB, url);
}
@JavascriptInterface
public void closeWeb() {//关闭那个新的web界面
L.e("JS--", "closeWeb()");
Apollo.emit(Events.JS_OPEN_CLOSE_WEB);
}
@JavascriptInterface
public void checkTab(String mode) {//关闭注册/忘记密码
L.e("JS--", "checkTab()");
Apollo.emit(Events.JS_OPEN_TAB, mode);
} }
@JavascriptInterface @JavascriptInterface
public void scanQR() {//扫描二维码 fun closeWeb() { //关闭那个新的web界面
L.e("JS--", "scanQR()"); L.e("JS--", "closeWeb()")
Apollo.emit(Events.JS_OPEN_SCANQR); Apollo.emit(Events.JS_OPEN_CLOSE_WEB)
} }
@JavascriptInterface
fun checkTab(mode: String?) { //关闭注册/忘记密码
L.e("JS--", "checkTab()")
Apollo.emit(Events.JS_OPEN_TAB, mode!!)
}
@JavascriptInterface
fun scanQR() { //扫描二维码
L.e("JS--", "scanQR()")
Apollo.emit(Events.JS_OPEN_SCANQR)
}
companion object {
private const val TAG = "cmx_AndroidtoJs"
}
} }

View File

@ -1,92 +1,50 @@
package com.cmx.wanhui.utils; package com.cmx.wanhui.utils
import android.content.ContentResolver; import android.util.Log
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;
import java.io.File; class L private constructor() {
import java.lang.reflect.Method; init {
import java.text.DateFormat; throw UnsupportedOperationException("cannot be instantiated")
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class L {
private L() {
throw new UnsupportedOperationException("cannot be instantiated");
} }
public static boolean isDebug = true; companion object {
private static String TAG = "LjTestLog"; var isDebug = true
var tAG = "LjTestLog"
fun setDebugMode(debug: Boolean) {
isDebug = debug
}
public static String getTAG() { fun i(msg: String?) {
return TAG; if (isDebug) Log.i(tAG, msg!!)
}
fun d(msg: String?) {
if (isDebug) Log.d(tAG, msg!!)
}
fun e(msg: String?) {
if (isDebug) Log.e(tAG, msg!!)
}
fun v(msg: String?) {
if (isDebug) Log.v(tAG, msg!!)
}
fun i(tag: String?, msg: String?) {
if (isDebug) Log.i(tag, msg!!)
}
fun d(tag: String?, msg: String?) {
if (isDebug) Log.d(tag, msg!!)
}
@JvmStatic
fun e(tag: String?, msg: String?) {
if (isDebug) Log.e(tag, msg!!)
}
fun v(tag: String?, msg: String?) {
if (isDebug) Log.v(tag, msg!!)
}
} }
public static void setTAG(String TAG) {
L.TAG = TAG;
}
public static void setDebugMode(boolean debug) {
isDebug = debug;
}
public static void i(String msg) {
if (isDebug)
Log.i(TAG, msg);
}
public static void d(String msg) {
if (isDebug)
Log.d(TAG, msg);
}
public static void e(String msg) {
if (isDebug)
Log.e(TAG, msg);
}
public static void v(String msg) {
if (isDebug)
Log.v(TAG, msg);
}
public static void i(String tag, String msg) {
if (isDebug)
Log.i(tag, msg);
}
public static void d(String tag, String msg) {
if (isDebug)
Log.d(tag, msg);
}
public static void e(String tag, String msg) {
if (isDebug)
Log.e(tag, msg);
}
public static void v(String tag, String msg) {
if (isDebug)
Log.v(tag, msg);
}
} }

View File

@ -1,180 +1,169 @@
package com.cmx.wanhui.utils; package com.cmx.wanhui.utils
import android.app.Activity; import android.app.Activity
import android.content.ContentResolver; import android.content.Context
import android.content.ContentValues; import android.graphics.Color
import android.content.Context; import android.os.Build
import android.content.pm.PackageInfo; import android.os.Environment
import android.content.pm.PackageManager; import android.os.StatFs
import android.database.Cursor; import android.util.Log
import android.graphics.Color; import android.view.View
import android.net.Uri; import android.view.WindowManager
import android.os.Build; import java.io.BufferedReader
import android.os.Environment; import java.io.File
import android.os.StatFs; import java.io.FileReader
import android.provider.MediaStore; import java.io.IOException
import android.util.Log; import java.nio.charset.StandardCharsets
import android.view.View; import java.security.MessageDigest
import android.view.WindowManager; import java.security.NoSuchAlgorithmException
import java.util.Locale
import java.io.BufferedReader; object MyUtils {
import java.io.File; private val TAG = "cmx_" + MyUtils::class.java.simpleName
import java.io.FileReader; fun setNavigationStatusColor(activity: Activity, color: Int) {
import java.io.IOException; activity.window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
import java.lang.reflect.Method; activity.window.navigationBarColor = color
import java.nio.charset.StandardCharsets; activity.window.statusBarColor = color
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Locale;
public class MyUtils {
private static final String TAG = "cmx_" + MyUtils.class.getSimpleName();
public static void setNavigationStatusColor(Activity activity, int color) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().setNavigationBarColor(color);
activity.getWindow().setStatusBarColor(color);
} }
public static void setFullscreen(Activity activity, boolean isShowStatusBar, boolean isShowNavigationBar) { @JvmStatic
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; fun setFullscreen(activity: Activity, isShowStatusBar: Boolean, isShowNavigationBar: Boolean) {
var uiOptions =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
if (!isShowStatusBar) { if (!isShowStatusBar) {
uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; uiOptions = uiOptions or View.SYSTEM_UI_FLAG_FULLSCREEN
} }
if (!isShowNavigationBar) { if (!isShowNavigationBar) {
uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; uiOptions = uiOptions or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
} }
activity.getWindow().getDecorView().setSystemUiVisibility(uiOptions); activity.window.decorView.systemUiVisibility = uiOptions
setNavigationStatusColor(activity, Color.TRANSPARENT); setNavigationStatusColor(activity, Color.TRANSPARENT)
} }
public static void setAndroidNativeLightStatusBar(Activity activity, boolean dark) { @JvmStatic
View decor = activity.getWindow().getDecorView(); fun setAndroidNativeLightStatusBar(activity: Activity, dark: Boolean) {
val decor = activity.window.decorView
if (dark) { if (dark) {
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); decor.systemUiVisibility =
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
} else { } else {
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); decor.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
} }
} }
@Throws(Exception::class)
private static String getVersionName(Activity activity) throws Exception { private fun getVersionName(activity: Activity): String {
PackageManager packageManager = activity.getPackageManager(); val packageManager = activity.packageManager
// getPackageName()是你当前类的包名0代表是获取版本信息 // getPackageName()是你当前类的包名0代表是获取版本信息
PackageInfo packInfo = packageManager.getPackageInfo(activity.getPackageName(), 0); val packInfo = packageManager.getPackageInfo(activity.packageName, 0)
String version = packInfo.versionName; return packInfo.versionName
return version;
} }
public static void getDeviceInfo(Activity activity) throws Exception { @Throws(Exception::class)
String model = android.os.Build.MODEL; fun getDeviceInfo(activity: Activity) {
String carrier = android.os.Build.MANUFACTURER; val model = Build.MODEL
String version = getVersionName(activity); val carrier = Build.MANUFACTURER
String lang = getSystemLanguage(); val version = getVersionName(activity)
String brand = getPhoneBrand(); val lang = systemLanguage
String releaseVersion = getVersionRelease(); val brand = phoneBrand
int sdkVersion = getSdkVersion(); val releaseVersion = versionRelease
Log.e(TAG, "model=" + model + ", carrier=" + carrier + ", version=" + version + ", lang=" + lang + ", brand=" + brand + ", releaseVersion=" + releaseVersion + ",sdk version=" + sdkVersion); val sdkVersion = sdkVersion
Log.e(
TAG,
"model=$model, carrier=$carrier, version=$version, lang=$lang, brand=$brand, releaseVersion=$releaseVersion,sdk version=$sdkVersion"
)
} }
public static String getSystemLanguage() { val systemLanguage: String
return Locale.getDefault().getLanguage(); get() = Locale.getDefault().language
} val systemLanguageList: Array<Locale>
get() = Locale.getAvailableLocales()
val phoneBrand: String
get() = Build.BRAND
val versionRelease: String
get() = Build.VERSION.RELEASE
val sdkVersion: Int
get() = Build.VERSION.SDK_INT//8.0-//8.0+
public static Locale[] getSystemLanguageList() { //9.0+
return Locale.getAvailableLocales(); val serialNum: String?
} get() {
var serial: String? = "unknown"
public static String getPhoneBrand() { try {
return Build.BRAND; serial = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { //9.0+
} Build.getSerial()
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) { //8.0+
public static String getVersionRelease() { Build.SERIAL
return Build.VERSION.RELEASE; } else { //8.0-
} val c = Class.forName("android.os.SystemProperties")
val get = c.getMethod("get", String::class.java)
public static int getSdkVersion() { get.invoke(c, "ro.serialno") as String
return Build.VERSION.SDK_INT; }
} } catch (e: Exception) {
Log.e("序列号》》", e.toString())
e.printStackTrace()
public static String getSerialNum() {
String serial = "unknown";
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {//9.0+
serial = Build.getSerial();
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {//8.0+
serial = Build.SERIAL;
} else {//8.0-
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
serial = (String) get.invoke(c, "ro.serialno");
} }
} catch (Exception e) { Log.e("序列号》》", serial!!)
Log.e("序列号》》", e.toString()); return serial
e.printStackTrace();
} }
Log.e("序列号》》", serial); fun createTempImageFile(context: Context?): File? {
return serial; val destFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
destFolder.mkdirs()
val dateTimeString = System.currentTimeMillis().toString() + ""
var imageFile: File? = null
imageFile = try {
File.createTempFile("$dateTimeString-", ".jpg", destFolder)
} catch (e: IOException) {
Log.e("文件失败>>>", e.toString())
throw RuntimeException(e)
}
return imageFile
} }
public static File createTempImageFile(Context context) { val totalRam: String
File destFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); get() {
destFolder.mkdirs(); val path = "/proc/meminfo"
String dateTimeString = System.currentTimeMillis() + ""; var ramMemorySize: String? = null
File imageFile = null; var totalRam = 0
try { try {
imageFile = File.createTempFile(dateTimeString + "-", ".jpg", destFolder); val fileReader = FileReader(path)
} catch (IOException e) { val br = BufferedReader(fileReader, 4096)
Log.e("文件失败>>>", e.toString()); ramMemorySize = br.readLine().split("\\s+".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[1]
throw new RuntimeException(e); br.close()
} } catch (e: Exception) {
e.printStackTrace()
return imageFile;
}
public static String getTotalRam() {
String path = "/proc/meminfo";
String ramMemorySize = null;
int totalRam = 0;
try {
FileReader fileReader = new FileReader(path);
BufferedReader br = new BufferedReader(fileReader, 4096);
ramMemorySize = br.readLine().split("\\s+")[1];
br.close();
} catch (Exception e) {
e.printStackTrace();
}
if (ramMemorySize != null) {
totalRam = (int) Math.ceil((Float.valueOf(Float.parseFloat(ramMemorySize) / (1024 * 1024)).doubleValue()));
}
return totalRam + "";
}
public static String getTotalRom() {
File dataDir = Environment.getDataDirectory();
StatFs stat = new StatFs(dataDir.getPath());
long blockSize = stat.getBlockSizeLong();
long totalBlocks = stat.getBlockCountLong();
long size = totalBlocks * blockSize;
long GB = 1024 * 1024 * 1024;
final long[] deviceRomMemoryMap = {2 * GB, 4 * GB, 8 * GB, 16 * GB, 32 * GB, 64 * GB, 128 * GB, 256 * GB, 512 * GB, 1024 * GB, 2048 * GB};
String[] displayRomSize = {"2GB", "4GB", "8GB", "16GB", "32GB", "64GB", "128GB", "256GB", "512GB", "1024GB", "2048GB"};
int i;
for (i = 0; i < deviceRomMemoryMap.length; i++) {
if (size <= deviceRomMemoryMap[i]) {
break;
} }
if (i == deviceRomMemoryMap.length) { if (ramMemorySize != null) {
i--; totalRam = Math.ceil(java.lang.Float.valueOf(ramMemorySize.toFloat() / (1024 * 1024)).toDouble()).toInt()
} }
return totalRam.toString() + ""
}
val totalRom: String
get() {
val dataDir = Environment.getDataDirectory()
val stat = StatFs(dataDir.path)
val blockSize = stat.blockSizeLong
val totalBlocks = stat.blockCountLong
val size = totalBlocks * blockSize
val GB = (1024 * 1024 * 1024).toLong()
val deviceRomMemoryMap =
longArrayOf(2 * GB, 4 * GB, 8 * GB, 16 * GB, 32 * GB, 64 * GB, 128 * GB, 256 * GB, 512 * GB, 1024 * GB, 2048 * GB)
val displayRomSize =
arrayOf("2GB", "4GB", "8GB", "16GB", "32GB", "64GB", "128GB", "256GB", "512GB", "1024GB", "2048GB")
var i: Int
i = 0
while (i < deviceRomMemoryMap.size) {
if (size <= deviceRomMemoryMap[i]) {
break
}
if (i == deviceRomMemoryMap.size) {
i--
}
i++
}
return displayRomSize[i].replace("GB", "")
} }
return displayRomSize[i].replace("GB", "");
}
/** /**
* sha256加密 * sha256加密
@ -182,39 +171,36 @@ public class MyUtils {
* @param str 要加密的字符串 * @param str 要加密的字符串
* @return 加密后的字符串 * @return 加密后的字符串
*/ */
public static String getSha256Str(String str) { fun getSha256Str(str: String): String {
MessageDigest messageDigest; val messageDigest: MessageDigest
String encodeStr = ""; var encodeStr = ""
try { try {
messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest = MessageDigest.getInstance("SHA-256")
messageDigest.update(str.getBytes(StandardCharsets.UTF_8)); messageDigest.update(str.toByteArray(StandardCharsets.UTF_8))
encodeStr = byte2Hex(messageDigest.digest()); encodeStr = byte2Hex(messageDigest.digest())
} catch (NoSuchAlgorithmException e) { } catch (e: NoSuchAlgorithmException) {
e.printStackTrace(); e.printStackTrace()
} }
return encodeStr; return encodeStr
} }
/** /**
* sha256加密 将byte转为16进制 * sha256加密 将byte转为16进制
* *
* @param bytes 字节码 * @param bytes 字节码
* @return 加密后的字符串 * @return 加密后的字符串
*/ */
private static String byte2Hex(byte[] bytes) { private fun byte2Hex(bytes: ByteArray): String {
StringBuilder stringBuilder = new StringBuilder(); val stringBuilder = StringBuilder()
String temp; var temp: String
for (byte aByte : bytes) { for (aByte in bytes) {
temp = Integer.toHexString(aByte & 0xFF); temp = Integer.toHexString(aByte.toInt() and 0xFF)
if (temp.length() == 1) { if (temp.length == 1) {
//1得到一位的进行补0操作 //1得到一位的进行补0操作
stringBuilder.append("0"); stringBuilder.append("0")
} }
stringBuilder.append(temp); stringBuilder.append(temp)
} }
return stringBuilder.toString(); return stringBuilder.toString()
} }
} }

View File

@ -1,24 +1,20 @@
package com.cmx.wanhui.utils; package com.cmx.wanhui.utils
import android.app.Activity; import android.content.Context
import android.content.Context;
import android.content.SharedPreferences;
import android.view.WindowManager;
public class SpUtils { object SpUtils {
private static final String SP_NAME = "SP_USER_DATA"; private const val SP_NAME = "SP_USER_DATA"
@JvmStatic
fun putString(context: Context, key: String?, `val`: String?) {
public static void putString(Context context, String key, String val) { val sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE)
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE); val editor = sp.edit()
SharedPreferences.Editor editor = sp.edit(); editor.putString(key, `val`)
editor.putString(key, val); editor.commit()
editor.commit();
} }
public static String getString(Context context, String key) { @JvmStatic
SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE); fun getString(context: Context, key: String?): String? {
return sp.getString(key, ""); val sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE)
return sp.getString(key, "")
} }
} }

View File

@ -1,8 +1,8 @@
package com.cmx.wanhui.utils; package com.cmx.wanhui.utils
public class StaticFinalData { object StaticFinalData {
public static final String LOGOUT = "LOGOUT"; const val LOGOUT = "LOGOUT"
public static final String UPLOAD_FACE = "UPLOAD_FACE"; const val UPLOAD_FACE = "UPLOAD_FACE"
public static final String UPLOAD_FACE_OVER = "UPLOAD_FACE_OVER"; const val UPLOAD_FACE_OVER = "UPLOAD_FACE_OVER"
public static final String CHANGE_TAB = "CHANGE_TAB"; const val CHANGE_TAB = "CHANGE_TAB"
} }

View File

@ -51,5 +51,7 @@ If you have any questions or suggestions about our Terms and Conditions, do not
This Terms and Conditions page was generated by App Privacy Policy Generator This Terms and Conditions page was generated by App Privacy Policy Generator
</string> </string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
</resources> </resources>