app/src/main/AndroidManifest.xml
@@ -5,33 +5,32 @@ <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" /> <!-- <!–Android13 照片–>--> <!-- <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />--> <!-- <!–Android13 视频–>--> <!-- <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />--> <!--Android13 音频--> <!-- <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />--> tools:ignore="ProtectedPermissions" /> <!-- <!–Android13 照片–> --> <!-- <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> --> <!-- <!–Android13 视频–> --> <!-- <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> --> <!-- Android13 音频 --> <!-- <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> --> <uses-permission android:name="android.permission.VIBRATE" /> <!-- honor 角标 --> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><!–外部存储目录访问权限 谷歌play上架不了–>--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><!–外部存储目录访问权限 谷歌play上架不了–> --> <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <!-- wifi状态权限 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.INTERNET" /> <!-- 开启网络权限 --> <!-- 位置信息 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 如果是安卓10.0,需要后台获取连接的wifi名称则添加进程获取位置信息权限 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- android 10.0使用wifi api新添加的权限 --> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- UNI相机和存储的权限 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- UNI相机和存储的权限 --> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 访问闪光灯 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- Optional. Required for location feature --> <!-- 为了提高sdk识别唯一用户的能力,保证消息推送的精准送达,建议集成以下权限(可选) --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.GET_TASKS" /> @@ -40,18 +39,13 @@ <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <!-- Optional. Required for location feature --> <!-- 为了提高sdk识别唯一用户的能力,保证消息推送的精准送达,建议集成以下权限(可选) --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 如您需要接入地理围栏业务,建议集成以下权限(可选) --> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <!-- 如您需要接入地理围栏业务,建议集成以下权限(可选) --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!– 如您需要对应设备通知相关的能力,建议集成以下权限(可选) –>--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!– 如您需要对应设备通知相关的能力,建议集成以下权限(可选) –> --> <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" /> <!-- 华为角标 --> <uses-permission android:name="com.vivo.notification.permission.BADGE_ICON" /> <!-- VIVO角标权限 --> <uses-permission android:name="com.hihonor.android.launcher.permission.CHANGE_BADGE" /> <!-- honor 角标 --> <uses-permission android:name="android.permission.VIBRATE" /> <!-- 振动器权限,JPUSH支持通知开启振动功能,小米推送必须 --> <uses-permission android:name="com.hihonor.android.launcher.permission.CHANGE_BADGE" /> <!-- 振动器权限,JPUSH支持通知开启振动功能,小米推送必须 --> <!-- 扩展备用权限(可选) --> <permission android:name="${applicationId}.permission.JOPERATE_MESSAGE" @@ -65,6 +59,10 @@ <uses-permission android:name="com.hdl.photovoltaic.permission.JPUSH_MESSAGE" /> <!-- 适配Android13,弹出通知必须权限 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <queries> <package android:name="com.hdl.photovoltaic.services" /> </queries> <application android:name=".HDLApp" android:allowBackup="true" @@ -74,6 +72,9 @@ android:requestLegacyExternalStorage="true" android:supportsRtl="true" android:theme="@style/Theme.PhotovoltaicDebug"> <activity android:name=".ui.me.UnregisterActivity" android:exported="false" /> <activity android:name=".ui.newC.PowerStationsMoveActivity" android:exported="false" /> @@ -186,10 +187,8 @@ android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" tools:replace="android:resource" /> </provider> <!-- 注册服务 --> </provider> <!-- 注册服务 --> <service android:name=".internet.HttpServer.MyNanoHttpService" /> <!-- 加它uniapp才能唤起相机 --> <provider android:name="io.dcloud.common.util.DCloud_FileProvider" android:authorities="com.hdl.photovoltaic.dc.fileprovider" @@ -226,7 +225,6 @@ <service android:name="org.eclipse.paho.android.service.MqttService" android:exported="false" /> <service android:name=".services.UniappService" android:enabled="true" @@ -246,7 +244,5 @@ android:name="ScopedStorage" android:value="true" /> </application> <queries> <package android:name="com.hdl.photovoltaic.services" /> </queries> </manifest> app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
@@ -198,7 +198,8 @@ public static final String C_POST_HOME_UPDATEDEBUGPERM = "/home-wisdom/app/home/updateDebugPerm"; //下载子账号头像 public static final String C_POST_HOME_GETHEADPÏORTRAIT = "/home-wisdom/app/child/account/getHeadPÏortrait"; //注销账号 public static final String C_POST_MEMBER_UNREGISTER = "/basis-footstone/member/unregister"; //endregion //endregion app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java
@@ -687,6 +687,36 @@ } /** * 注销账号(C端账号) * * @param pwd 账号密码 * @param cloudCallBeak - */ public void accountUnregisterC(String pwd, CloudCallBeak<Boolean> cloudCallBeak) { String requestUrl = HttpApi.C_POST_MEMBER_UNREGISTER; JsonObject json = new JsonObject(); json.addProperty("userId", UserConfigManage.getInstance().getUserId()); json.addProperty("pwd", pwd); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() { @Override public void onSuccess(String jsonStr) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 登录成功保存登录信息 */ private void saveUserData(HDLLoginBean obj) { app/src/main/java/com/hdl/photovoltaic/ui/me/AccountAndSecurityActivity.java
@@ -28,7 +28,7 @@ @Override public void onBindView(Bundle savedInstanceState) { setStatusBarTranslucent(); setStatusBarTranslucent(); getWindow().setNavigationBarColor(getColor(R.color.text_FF000000)); //初始化 initView(); @@ -70,10 +70,10 @@ } }); viewBinding.setAccountClose.setOnClickListener(new View.OnClickListener() { viewBinding.setAccountCloseIl.getRoot().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(UnregisterActivity.class); } }); @@ -88,6 +88,7 @@ //云端接口不支持 viewBinding.setAccountPhoneIl.parentCl.setVisibility(View.GONE); viewBinding.setAccountMailIl.parentCl.setVisibility(View.GONE); viewBinding.setAccountCloseIl.parentCl.setVisibility(View.GONE); } else { viewBinding.setAccountPhoneIl.parentCl.setVisibility(View.VISIBLE); viewBinding.setAccountMailIl.parentCl.setVisibility(View.VISIBLE); @@ -98,6 +99,9 @@ viewBinding.setAccountMailIl.sllLlRlNameTv.setText(R.string.set_email_address); viewBinding.setAccountMailIl.sllLlRlRightContentTv.setVisibility(View.VISIBLE); viewBinding.setAccountCloseIl.sllLlRlNameTv.setText(R.string.set_close_account); viewBinding.setAccountCloseIl.sllLlRlRightContentTv.setVisibility(View.VISIBLE); } viewBinding.setChangePswIl.sllLlRlNameTv.setText(R.string.home_login_change_password); app/src/main/java/com/hdl/photovoltaic/ui/me/UnregisterActivity.java
New file @@ -0,0 +1,125 @@ package com.hdl.photovoltaic.ui.me; import android.os.Bundle; import android.text.TextUtils; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.view.View; import androidx.appcompat.content.res.AppCompatResources; import com.hdl.linkpm.sdk.core.exception.HDLException; import com.hdl.linkpm.sdk.user.HDLLinkPMUser; import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.CustomBaseActivity; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.ActivityUnregisterBinding; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.other.HdlAccountLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.widget.ConfirmationCancelDialog; /** * 注销账号的界面 */ public class UnregisterActivity extends CustomBaseActivity { private ActivityUnregisterBinding viewBinding; @Override public Object getContentView() { viewBinding = ActivityUnregisterBinding.inflate(getLayoutInflater()); return viewBinding.getRoot(); } @Override public void onBindView(Bundle savedInstanceState) { setStatusBarTranslucent(); getWindow().setNavigationBarColor(getColor(R.color.text_FF000000)); //初始化 initView(); //初始化界面监听器 initEvent(); } private void initEvent() { viewBinding.toolbarTopRl.topBackLl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); //密码隐藏按钮 viewBinding.pswHideIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (v.isSelected()) { v.setSelected(false); viewBinding.pswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.hide)); viewBinding.pswEt.setTransformationMethod(PasswordTransformationMethod.getInstance()); } else { v.setSelected(true); viewBinding.pswHideIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.show)); viewBinding.pswEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } if (!TextUtils.isEmpty(viewBinding.pswEt.getText())) { viewBinding.pswEt.setSelection(viewBinding.pswEt.getText().length()); } } }); viewBinding.immediateCancellationTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String pswStr = viewBinding.pswEt.getText().toString(); if (TextUtils.isEmpty(pswStr)) { HdlThreadLogic.tipFlashingBox(_mActivity, false, getString(R.string.home_login_error_password_null), -1); return; } HdlAccountLogic.getInstance().accountUnregisterC(pswStr, new CloudCallBeak<Boolean>() { @Override public void onSuccess(Boolean obj) { logoutRequest(); } @Override public void onFailure(HDLException e) { HdlThreadLogic.tipFlashingBox(_mActivity, false, e.getMsg(), e.getCode()); } }); } }); } private void initView() { viewBinding.toolbarTopRl.topTitleTv.setText(R.string.immediate_cancellation); viewBinding.toolbarTopRl.topBackLl.setVisibility(View.VISIBLE); viewBinding.accEt.setText(UserConfigManage.getInstance().getAccount()); } /** * 退出登录请求的方法 */ private void logoutRequest() { // 二次确认提示框 ConfirmationCancelDialog dialog = new ConfirmationCancelDialog(this); dialog.show(); dialog.setContent(getString(R.string.confirm_account)); dialog.isHideTitle(true); dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() { @Override public void Confirm() { dialog.dismiss(); HDLLinkPMUser.getInstance().logout(0); } }); dialog.setNoOnclickListener(new ConfirmationCancelDialog.onNoOnclickListener() { @Override public void Cancel() { dialog.dismiss(); } }); } } app/src/main/java/com/hdl/photovoltaic/ui/newC/PowerStationsListEdit.java
@@ -126,11 +126,11 @@ public void onClick(View v) { // 未授权 如果应用程序没有所需的权限,则显示解释说明 // PermissionExplanationDialog.getInstance().showPortConflictPdDialog(_mActivity, getString(R.string.camera_storage_instructions), getString(R.string.camera_storage_purpose)); PermissionExplanationDialog.getInstance().showPortConflictPdDialog(_mActivity, getString(R.string.camera_storage_instructions), getString(R.string.camera_storage_purpose)); PermissionUtils.requestPermissionsResultCallback(_mActivity, Manifest.permission.CAMERA, new PermissionUtils.PermissionState() { @Override public void Success(int value) { // PermissionExplanationDialog.getInstance().dismiss(); PermissionExplanationDialog.getInstance().dismiss(); if (value == PermissionUtils.STATUS_REFUSE_PERMANENT | value == PermissionUtils.STATUS_REFUSE) { // HdlThreadLogic.toast(_mActivity, R.string.permission_open); return; app/src/main/res/layout/activity_account_and_security.xml
@@ -47,25 +47,34 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/set_account_mail_il" /> <!--暂时隐藏注销账号组件--> <TextView android:id="@+id/set_account_close" <include android:id="@+id/set_account_close_il" layout="@layout/set_line" android:layout_width="match_parent" android:layout_height="@dimen/dp_52" android:layout_marginStart="@dimen/dp_20" android:layout_marginEnd="@dimen/dp_20" android:layout_marginBottom="@dimen/dp_55" android:background="@drawable/backgruond_ff6b6b" android:gravity="center" android:text="@string/set_close_account" android:textColor="@color/text_FFFFFFFF" android:textSize="@dimen/text_18" android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" android:layout_height="@dimen/dp_57" android:layout_marginTop="@dimen/dp_10" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/set_change_psw_il" /> /> <!-- <!–暂时隐藏注销账号组件–>--> <!-- <TextView--> <!-- android:id="@+id/set_account_close"--> <!-- android:layout_width="match_parent"--> <!-- android:layout_height="@dimen/dp_52"--> <!-- android:layout_marginStart="@dimen/dp_20"--> <!-- android:layout_marginEnd="@dimen/dp_20"--> <!-- android:layout_marginBottom="@dimen/dp_55"--> <!-- android:background="@drawable/backgruond_ff6b6b"--> <!-- android:gravity="center"--> <!-- android:text="@string/set_close_account"--> <!-- android:textColor="@color/text_FFFFFFFF"--> <!-- android:textSize="@dimen/text_18"--> <!-- app:layout_constraintBottom_toBottomOf="parent"--> <!-- app:layout_constraintEnd_toEndOf="parent"--> <!-- app:layout_constraintStart_toStartOf="parent"--> <!-- />--> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/activity_unregister.xml
New file @@ -0,0 +1,159 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/text_FF000000" tools:context=".ui.me.UnregisterActivity"> <include android:id="@+id/toolbar_top_rl" layout="@layout/toolbar_top_view_44" android:layout_width="match_parent" android:layout_height="@dimen/dp_44" android:layout_marginTop="@dimen/dp_38" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/title_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_10" android:lineSpacingExtra="2dp" android:paddingStart="@dimen/dp_20" android:paddingEnd="@dimen/dp_20" android:text="@string/account_not_recoverable" android:textColor="@color/text_66FFFFFF" android:textSize="@dimen/text_14" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/toolbar_top_rl" /> <RelativeLayout android:id="@+id/acc_parent_rl" android:layout_width="match_parent" android:layout_height="78dp" android:layout_marginTop="@dimen/dp_25" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/title_tv"> <TextView android:id="@+id/acc_title_tv" android:layout_width="wrap_content" android:layout_height="@dimen/dp_20" android:layout_marginStart="@dimen/dp_20" android:text="@string/account" android:textColor="@color/text_E6FFFFFF" android:textSize="@dimen/text_14" /> <RelativeLayout android:id="@+id/bind_phone_rl" android:layout_width="match_parent" android:layout_height="@dimen/dp_50" android:layout_below="@+id/acc_title_tv" android:layout_marginStart="@dimen/dp_20" android:layout_marginTop="@dimen/dp_8" android:layout_marginEnd="@dimen/dp_20" android:background="@drawable/me_change_psw_bj"> <EditText android:id="@+id/acc_et" android:layout_width="match_parent" android:layout_height="@dimen/dp_23" android:layout_centerVertical="true" android:layout_marginStart="@dimen/dp_16" android:layout_marginEnd="@dimen/dp_60" android:background="@null" android:enabled="false" android:inputType="phone" android:lines="1" android:maxLines="1" android:textColor="@color/text_66FFFFFF" android:textSize="@dimen/text_14" /> </RelativeLayout> </RelativeLayout> <RelativeLayout android:id="@+id/psw_parent_rl" android:layout_width="match_parent" android:layout_height="78dp" android:layout_marginTop="@dimen/dp_25" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/acc_parent_rl"> <TextView android:id="@+id/psw_title_tv" android:layout_width="wrap_content" android:layout_height="@dimen/dp_20" android:layout_marginStart="@dimen/dp_20" android:text="@string/psw" android:textColor="@color/text_E6FFFFFF" android:textSize="@dimen/text_14" /> <!--输入登录密码--> <RelativeLayout android:id="@+id/psw_rl" android:layout_width="match_parent" android:layout_height="@dimen/dp_50" android:layout_below="@+id/psw_title_tv" android:layout_marginStart="@dimen/dp_20" android:layout_marginTop="@dimen/dp_8" android:layout_marginEnd="@dimen/dp_20" android:background="@drawable/me_change_psw_bj"> <EditText android:id="@+id/psw_et" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentStart="true" android:layout_marginStart="@dimen/dp_20" android:layout_marginEnd="72dp" android:background="@null" android:hint="@string/home_login_input_psw" android:inputType="textPassword" android:lines="1" android:maxLines="1" android:textColor="@color/text_E6FFFFFF" android:textColorHint="@color/text_66FFFFFF" android:textSize="@dimen/text_14" /> <ImageView android:id="@+id/psw_hide_iv" android:layout_width="@dimen/dp_20" android:layout_height="@dimen/dp_20" android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:layout_marginEnd="@dimen/dp_20" android:src="@drawable/hide" /> </RelativeLayout> </RelativeLayout> <!--立即注销--> <TextView android:id="@+id/immediate_cancellation__tv" android:layout_width="match_parent" android:layout_height="52dp" android:layout_marginStart="@dimen/dp_20" android:layout_marginTop="50dp" android:layout_marginEnd="@dimen/dp_20" android:background="@drawable/bj_ff39383d" android:gravity="center" android:text="@string/immediate_cancellation" android:textColor="@color/text_E6FFFFFF" android:textSize="14sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/psw_parent_rl" /> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/values-en/strings.xml
@@ -339,5 +339,9 @@ <string name="agree">Agree</string> <string name="user_agreement_and_privacy_agreement">User Agreement and Privacy Agreement</string> <string name="thank_you_for_using">Thank you for using Xenterra Solar. During your use, we may collect and use some of your personal information. Please read carefully, and ensure that you fully understand our rules for handling your personal information. If you agree to the 《User Agreement》 and 《Privacy Agreement》, please click "Agree" to start using Xenterra Solar.</string> <string name="confirm_account">Are you sure to cancel this account?</string> <string name="immediate_cancellation">Cancel immediately</string> <string name="account_not_recoverable">Cancelling an account is an irreversible operation. After account cancellation, all account data (including nickname, avatar, QR code photo, etc.) on your app will be deleted and cannot be retrieved.</string> <string name="account">Account</string> <string name="psw">Password</string> </resources> app/src/main/res/values-zh/strings.xml
@@ -336,6 +336,9 @@ <string name="agree">同意</string> <string name="user_agreement_and_privacy_agreement">用户协议和隐私协议</string> <string name="thank_you_for_using">感谢您使用新特锐能 App,在您使用过程中,我们可能会对您的部分个人信息进行收集、使用,请您仔细阅读《用户协议》和《隐私协议》,并确定完全了解我们对您个人信息的处理规则。如您同意用户协议和隐私协议,请点击“同意”,开始使用新特锐能 App。</string> <string name="confirm_account">确认注销改账号吗?</string> <string name="immediate_cancellation">立即注销</string> <string name="account_not_recoverable">注销账户是不可恢复的操作,注销账户之后,您APP所有账户数据(包括昵称、头像、二维码照片等)都会被删除,且无法再找回。</string> <string name="account">账号</string> <string name="psw">密码</string> </resources> app/src/main/res/values/strings.xml
@@ -336,6 +336,10 @@ <string name="agree">同意</string> <string name="user_agreement_and_privacy_agreement">用户协议和隐私协议</string> <string name="thank_you_for_using">感谢您使用新特锐能 App,在您使用过程中,我们可能会对您的部分个人信息进行收集、使用,请您仔细阅读《用户协议》和《隐私协议》,并确定完全了解我们对您个人信息的处理规则。如您同意用户协议和隐私协议,请点击“同意”,开始使用新特锐能 App。</string> <string name="confirm_account">确认注销改账号吗?</string> <string name="immediate_cancellation">立即注销</string> <string name="account_not_recoverable">注销账户是不可恢复的操作,注销账户之后,您APP所有账户数据(包括昵称、头像、二维码照片等)都会被删除,且无法再找回。</string> <string name="account">账号</string> <string name="psw">密码</string> </resources> countrypicker/src/main/java/com/sahooz/library/countrypicker/Adapter.java
@@ -5,6 +5,7 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -17,6 +18,7 @@ private final LayoutInflater inflater; private PickCountryCallback callback = null; private final Context context; public Adapter(Context ctx) { inflater = LayoutInflater.from(ctx); context = ctx; @@ -25,6 +27,7 @@ public void setSelectedCountries(ArrayList<Country> selectedCountries) { this.selectedCountries = selectedCountries; notifyDataSetChanged(); } public void setCallback(PickCountryCallback callback) { @@ -38,8 +41,9 @@ } private int itemHeight = -1; public void setItemHeight(float dp) { itemHeight = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, dp, context.getResources().getDisplayMetrics()); itemHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, dp, context.getResources().getDisplayMetrics()); } @SuppressLint("SetTextI18n") @@ -49,13 +53,13 @@ holder.ivFlag.setImageResource(country.flag); holder.tvName.setText(country.translate); holder.tvCode.setText("+" + country.code); if(itemHeight != -1) { if (itemHeight != -1) { ViewGroup.LayoutParams params = holder.itemView.getLayoutParams(); params.height = itemHeight; holder.itemView.setLayoutParams(params); } holder.itemView.setOnClickListener(v -> { if(callback != null) callback.onPick(country); if (callback != null) callback.onPick(country); }); } countrypicker/src/main/java/com/sahooz/library/countrypicker/Country.java
@@ -1,6 +1,7 @@ package com.sahooz.library.countrypicker; import android.content.Context; import androidx.annotation.NonNull; import android.text.TextUtils; @@ -50,12 +51,12 @@ '}'; } public static ArrayList<Country> getAll(){ public static ArrayList<Country> getAll() { return new ArrayList<>(countries); } public static Country fromJson(String json){ if(TextUtils.isEmpty(json)) return null; public static Country fromJson(String json) { if (TextUtils.isEmpty(json)) return null; try { JSONObject jo = new JSONObject(json); return new Country( @@ -99,25 +100,30 @@ JSONArray ja = new JSONArray(sb.toString()); for (int i = 0; i < ja.length(); i++) { JSONObject jo = ja.getJSONObject(i); if (jo.getInt("code") == 886) { //过滤掉台湾省 continue; } int flag = 0; String translate = ""; String locale = jo.getString("locale"); if(!TextUtils.isEmpty(locale)) { if (!TextUtils.isEmpty(locale)) { flag = ctx.getResources().getIdentifier("flag_" + locale.toLowerCase(), "drawable", ctx.getPackageName()); translate = ctx.getString(ctx.getResources().getIdentifier("name_" + locale.toLowerCase(), "string", ctx.getPackageName())); } String name = jo.getString("name"); Locale defaultLoc = Locale.getDefault(); boolean inChina = "zh".equalsIgnoreCase(defaultLoc.getLanguage()); countries.add( new Country( jo.getInt("code"), name, translate, inChina ? jo.getString("pinyin") : name, locale, flag ) new Country( jo.getInt("code"), name, translate, inChina ? jo.getString("pinyin") : name, locale, flag ) ); } @@ -133,7 +139,8 @@ return code; } @NonNull @Override @NonNull @Override public String getPinyin() { return pinyin; }