Commit 33ec5d6a authored by feihuaduo's avatar feihuaduo

mc用户登录优化

parent e620a94c
......@@ -2,6 +2,9 @@ package cn.garymb.ygomobile.ui.mycard;
import static junit.framework.Assert.assertEquals;
import static cn.garymb.ygomobile.Constants.ARG_DECK;
import static cn.garymb.ygomobile.Constants.QUERY_YGO_TYPE;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
......@@ -13,6 +16,8 @@ import android.util.Base64;
import android.util.Log;
import android.webkit.JavascriptInterface;
import com.app.hubert.guide.util.LogUtil;
import com.google.gson.Gson;
import com.tencent.smtt.sdk.WebView;
import org.json.JSONArray;
......@@ -23,6 +28,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
......@@ -30,9 +36,12 @@ import java.util.List;
import cn.garymb.ygodata.YGOGameOptions;
import cn.garymb.ygomobile.App;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.YGOStarter;
import cn.garymb.ygomobile.bean.events.DeckFile;
import cn.garymb.ygomobile.lite.BuildConfig;
import cn.garymb.ygomobile.ui.mycard.bean.McUser;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.UserManagement;
import cn.garymb.ygomobile.ui.plus.DefWebViewClient;
import cn.garymb.ygomobile.utils.DeckUtil;
import cn.garymb.ygomobile.utils.JsonUtil;
......@@ -95,8 +104,35 @@ public class MyCard {
public static final String ARG_PORT = "port";
public static final String PACKAGE_NAME_EZ = "com.ourygo.ez";
private static final Charset UTF_8 = Charset.forName("UTF-8");
private final DefWebViewClient mDefWebViewClient;
public final User mUser = new User();
private final DefWebViewClient mDefWebViewClient = new DefWebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// if (url.startsWith(return_sso_url)) {
//
//
// String sso = Uri.parse(url).getQueryParameter("sso");
// String data = new String(Base64.decode(Uri.parse(url).getQueryParameter("sso"), Base64.NO_WRAP), UTF_8);
// Uri info = new Uri.Builder().encodedQuery(data).build();
// mUser.external_id = Integer.parseInt(info.getQueryParameter("external_id"));
// mUser.username = info.getQueryParameter("username");
// mUser.name = info.getQueryParameter("name");
// mUser.email = info.getQueryParameter("email");
// mUser.avatar_url = info.getQueryParameter("avatar_url");
// mUser.admin = info.getBooleanQueryParameter("admin", false);
// mUser.moderator = info.getBooleanQueryParameter("moderator", false);
// lastModified.edit().putString("user_external_id", mUser.external_id + "").apply();
// lastModified.edit().putString("user_name", mUser.username).apply();
// //UserManagement.setUserName(mUser.username);
// //UserManagement.setUserPassword(mUser.external_id+"");
// mUser.login = true;
// if (getMyCardListener() != null) {
// getMyCardListener().onLogin(mUser.name, mUser.avatar_url, null);
// }
// return false;
// }
return super.shouldOverrideUrlLoading(view, url);
}
};
private final SharedPreferences lastModified;
private MyCardListener mMyCardListener;
private Activity mContext;
......@@ -104,33 +140,15 @@ public class MyCard {
public MyCard(Activity context) {
mContext = context;
lastModified = context.getSharedPreferences("lastModified", Context.MODE_PRIVATE);
mDefWebViewClient = new DefWebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith(return_sso_url)) {
String sso = Uri.parse(url).getQueryParameter("sso");
String data = new String(Base64.decode(Uri.parse(url).getQueryParameter("sso"), Base64.NO_WRAP), UTF_8);
Uri info = new Uri.Builder().encodedQuery(data).build();
mUser.external_id = Integer.parseInt(info.getQueryParameter("external_id"));
mUser.username = info.getQueryParameter("username");
mUser.name = info.getQueryParameter("name");
mUser.email = info.getQueryParameter("email");
mUser.avatar_url = info.getQueryParameter("avatar_url");
mUser.admin = info.getBooleanQueryParameter("admin", false);
mUser.moderator = info.getBooleanQueryParameter("moderator", false);
lastModified.edit().putString("user_external_id", mUser.external_id + "").apply();
lastModified.edit().putString("user_name", mUser.username).apply();
//UserManagement.setUserName(mUser.username);
//UserManagement.setUserPassword(mUser.external_id+"");
mUser.login = true;
if (getMyCardListener() != null) {
getMyCardListener().onLogin(mUser.name, mUser.avatar_url, null);
}
return false;
}
return super.shouldOverrideUrlLoading(view, url);
}
};
public static String getMCLogoutUrl(){
String home="return_sso_url="+Uri.encode(mHomeUrl);
String base64=Base64.encodeToString(home.getBytes(), Base64.NO_WRAP);
Uri.Builder uri = Uri.parse(URL_MC_LOGOUT)
.buildUpon();
uri.appendQueryParameter("sso",base64);
return uri.build().toString();
}
//获取mc新闻列表
......@@ -201,17 +219,12 @@ public class MyCard {
mMyCardListener = myCardListener;
webView.setWebViewClient(getWebViewClient());
webView.addJavascriptInterface(new MyCard.Ygopro(mContext, myCardListener), "ygopro");
String name = lastModified.getString("user_name", null);
String headurl = lastModified.getString("user_avatar_url", null);
if (mMyCardListener != null) {
if (!TextUtils.isEmpty(name)) {
mMyCardListener.onLogin(name, headurl, null);
}
}
}
public interface MyCardListener {
void onLogin(String name, String icon, String statu);
void onLogin(McUser mcUser,String exception);
void onUpdate(String name, String icon, String statu);
void backHome();
......@@ -219,33 +232,12 @@ public class MyCard {
void onHome();
}
public static class User {
int external_id;
String username;
String name;
String email;
String avatar_url;
boolean admin;
boolean moderator;
boolean login;
public User() {
}
public String getJID() {
return username + "@mycard.moe";
}
public String getPassword() {
return String.valueOf(external_id);
}
/**
*
* @param message 退出登录的提示,web端传
*/
void onLogout(String message);
public String getConference() {
return "ygopro_china_north@conference.mycard.moe";
}
}
public class Ygopro {
......@@ -375,17 +367,36 @@ public class MyCard {
return getWrappedLastModified(path, file.lastModified());
}
@JavascriptInterface
public void loginUser(String userInfo,String exception){
McUser mcUser = null;
if (TextUtils.isEmpty(exception)) {
mcUser = new Gson().fromJson(userInfo, McUser.class);
UserManagement.getDx().setMcUser(mcUser);
}
if (mListener!=null)
mListener.onLogin(mcUser,exception);
}
@JavascriptInterface
public void updateUser(String name, String headurl, String status) {
McUser mcUser=UserManagement.getDx().getMcUser();
if (mcUser==null)
mcUser=new McUser();
mcUser.setUsername(name);
mcUser.setAvatar_url(headurl);
mcUser.setEmail(status);
UserManagement.getDx().setMcUser(mcUser);
if (mListener != null) {
mUser.name = name;
mUser.avatar_url = headurl;
mUser.login = true;
lastModified.edit()
.putString("user_name", name)
.putString("user_avatar_url", headurl)
.apply();
mListener.onLogin(name, headurl, status);
mListener.onUpdate(name, headurl, status);
}
}
@JavascriptInterface
public void logoutUser(String message){
UserManagement.getDx().logout();
if (mListener!=null) {
mListener.onLogout(message);
}
}
......
......@@ -30,6 +30,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.app.hubert.guide.util.LogUtil;
import com.ourygo.assistant.util.Util;
import com.tencent.smtt.sdk.ValueCallback;
import com.tencent.smtt.sdk.WebChromeClient;
......@@ -46,6 +47,7 @@ import cn.garymb.ygomobile.lite.BuildConfig;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.home.HomeActivity;
import cn.garymb.ygomobile.ui.mycard.base.OnJoinChatListener;
import cn.garymb.ygomobile.ui.mycard.bean.McUser;
import cn.garymb.ygomobile.ui.mycard.mcchat.ChatListener;
import cn.garymb.ygomobile.ui.mycard.mcchat.ChatMessage;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.ServiceManagement;
......@@ -58,7 +60,6 @@ public class MycardFragment extends BaseFragemnt implements View.OnClickListener
private static final int TYPE_MC_LOGIN = 0;
private static final int TYPE_MC_LOGIN_FAILED = 1;
private HomeActivity homeActivity;
private SharedPreferences lastModified;
long exitLasttime = 0;
//头像昵称账号
private LinearLayout ll_head_login;
......@@ -81,12 +82,12 @@ public class MycardFragment extends BaseFragemnt implements View.OnClickListener
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == TYPE_MC_LOGIN) {
String[] ss = (String[]) msg.obj;
if (!TextUtils.isEmpty(ss[1])) {
GlideCompat.with(getActivity()).load(Uri.parse(ss[1])).into(mHeadView);//刷新头像图片
McUser mcUser= (McUser) msg.obj;
if (!TextUtils.isEmpty(mcUser.getAvatar_url())) {
GlideCompat.with(getActivity()).load(mcUser.getAvatar_url()).into(mHeadView);//刷新头像图片
}
mNameView.setText(ss[0]);//刷新用户名
mStatusView.setText(ss[2]);//刷新账号信息
mNameView.setText(mcUser.getUsername());//刷新用户名
mStatusView.setText(mcUser.getEmail());//刷新账号信息
serviceManagement.start();
}
if (msg.what == TYPE_MC_LOGIN_FAILED) {
......@@ -103,7 +104,6 @@ public class MycardFragment extends BaseFragemnt implements View.OnClickListener
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
homeActivity = (HomeActivity) getActivity();
lastModified = App.get().getSharedPreferences("lastModified", Context.MODE_PRIVATE);
View view;
view = inflater.inflate(R.layout.fragment_mycard, container, false);
initView(view);
......@@ -312,7 +312,7 @@ public class MycardFragment extends BaseFragemnt implements View.OnClickListener
case R.id.ll_head_login:
if (homeActivity.fragment_mycard_chatting_room.isVisible())
getChildFragmentManager().beginTransaction().hide(homeActivity.fragment_mycard_chatting_room).commit();
mWebViewPlus.loadUrl(mMyCard.URL_MC_LOGOUT);
mWebViewPlus.loadUrl(MyCard.getMCLogoutUrl());
break;
case R.id.tv_back_mc:
onHome();
......@@ -345,30 +345,39 @@ public class MycardFragment extends BaseFragemnt implements View.OnClickListener
}
@Override
public void onLogin(String name, String icon, String statu) {
//重登、切换用户即时更新用户和id信息
if (mWebViewPlus.getUrl() != null) {
String url = mWebViewPlus.getUrl();
Log.i("3.10.1看看",url);
if (url.startsWith(mMyCard.MC_MAIN_URL)) {
String data = new String(Base64.decode(Uri.parse(url).getQueryParameter("sso"), Base64.NO_WRAP), UTF_8);
Uri info = new Uri.Builder().encodedQuery(data).build();
mMyCard.mUser.username =info.getQueryParameter("username");
mMyCard.mUser.external_id = Integer.parseInt(info.getQueryParameter("id"));
lastModified.edit().putString("user_name", mMyCard.mUser.username).apply();
lastModified.edit().putString("user_external_id", String.valueOf(mMyCard.mUser.external_id)).apply();
serviceManagement.disSerVice();//先退出当前账号,待TYPE_MC_LOGIN处重新执行start()
public void onLogin(McUser mcUser, String exception) {
if (!TextUtils.isEmpty(exception)){
return;
}
serviceManagement.disSerVice();//先退出当前账号,待TYPE_MC_LOGIN处重新执行start()
//登录成功发送message
Message message = new Message();
message.obj = mcUser;
message.what = TYPE_MC_LOGIN;
handler.sendMessage(message);
}
@Override
public void onUpdate(String name, String icon, String statu) {
McUser mcUser=new McUser();
mcUser.setUsername(name);
mcUser.setAvatar_url(icon);
mcUser.setEmail(statu);
//登录成功发送message
Message message = new Message();
message.obj = new String[]{name, icon, statu};
message.obj = mcUser;
message.what = TYPE_MC_LOGIN;
handler.sendMessage(message);
}
@Override
public void onLogout(String message) {
if (!TextUtils.isEmpty(message))
YGOUtil.show(message);
serviceManagement.disSerVice();
}
@Override
public void backHome() {
......@@ -404,6 +413,7 @@ public class MycardFragment extends BaseFragemnt implements View.OnClickListener
else
tv_message.setText(currentMessage.getName() + ":" + currentMessage.getMessage());
} else {
Log.e("MyCardFragment","登录失败"+exception);
tv_message.setText(R.string.logining_failed);
HandlerUtil.sendMessage(handler, TYPE_MC_LOGIN_FAILED, exception);
serviceManagement.setIsListener(false);
......
package cn.garymb.ygomobile.ui.mycard.bean;
import java.io.Serializable;
/**
* Create By feihua On 2022/8/27
*/
public class McUser implements Serializable {
private int id;
private int external_id;
private String username;
//不要用
private String name;
private String email;
private String avatar_url;
private boolean admin;
private boolean moderator;
public McUser() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getJID() {
return username + "@mycard.moe";
}
public String getPassword() {
return String.valueOf(external_id);
}
public String getConference() {
return "ygopro_china_north@conference.mycard.moe";
}
public int getExternal_id() {
return external_id;
}
public void setExternal_id(int external_id) {
this.external_id = external_id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
/**
* 不要用这个,用getUserName
* @return
*/
@Deprecated
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAvatar_url() {
return avatar_url;
}
public void setAvatar_url(String avatar_url) {
this.avatar_url = avatar_url;
}
public boolean isAdmin() {
return admin;
}
public void setAdmin(boolean admin) {
this.admin = admin;
}
public boolean isModerator() {
return moderator;
}
public void setModerator(boolean moderator) {
this.moderator = moderator;
}
}
\ No newline at end of file
......@@ -94,7 +94,7 @@ public class MycardChatFragment extends BaseFragemnt implements ChatListener {
@Override
public void addChatMessage(ChatMessage message) {
boolean isSmooth = YGOUtil.isVisBottom(main_rec) || message.getName().equals(UserManagement.getUserName());
boolean isSmooth = YGOUtil.isVisBottom(main_rec) || message.getName().equals(UserManagement.getDx().getMcUser().getUsername());
cadp.sx();
//如果在底部新消息来了或者消息是自己发送才滑到最下面,最后一个item有显示才算在底部
if (isSmooth)
......
......@@ -53,7 +53,7 @@ public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
@Override
public int getItemViewType(int position) {
if (data.get(position).getName().equals(UserManagement.getUserName())) {
if (data.get(position).getName().equals(UserManagement.getDx().getMcUser().getUsername())) {
return CHAT_ME;
} else {
return CHAT;
......
......@@ -27,6 +27,7 @@ import java.util.List;
import cn.garymb.ygomobile.App;
import cn.garymb.ygomobile.lite.BuildConfig;
import cn.garymb.ygomobile.ui.mycard.base.OnJoinChatListener;
import cn.garymb.ygomobile.ui.mycard.bean.McUser;
import cn.garymb.ygomobile.ui.mycard.mcchat.ChatListener;
import cn.garymb.ygomobile.ui.mycard.mcchat.ChatMessage;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.TaxiConnectionListener;
......@@ -249,7 +250,7 @@ public class ServiceManagement {
if (!isListener) {
MultiUserChatManager multiUserChatManager = MultiUserChatManager.getInstanceFor(getCon());
muc = multiUserChatManager.getMultiUserChat(JidCreate.entityBareFrom(GROUP_ADDRESS));
muc.createOrJoin(Resourcepart.from(UserManagement.getUserName()));
muc.createOrJoin(Resourcepart.from(UserManagement.getDx().getMcUser().getUsername()));
chatMessageList.clear();
muc.addMessageListener(message -> {
......@@ -306,12 +307,9 @@ public class ServiceManagement {
return;
isStartLoading=true;
String name, password;
SharedPreferences lastModified = App.get().getSharedPreferences("lastModified", Context.MODE_PRIVATE);
UserManagement.setUserName(lastModified.getString("user_name", null));
UserManagement.setUserPassword(lastModified.getString("user_external_id", null));
name = UserManagement.getUserName();
password = UserManagement.getUserPassword();
Log.i(BuildConfig.VERSION_NAME +"看看用户和ID",name+"+"+password);
McUser mcUser=UserManagement.getDx().getMcUser();
name=mcUser.getUsername();
password=mcUser.getPassword();
if (TextUtils.isEmpty(name) || TextUtils.isEmpty(password)) {
isStartLoading=false;
han.sendEmptyMessage(CHAT_USER_NULL);
......
package cn.garymb.ygomobile.ui.mycard.mcchat.management;
import cn.garymb.ygomobile.ui.mycard.bean.McUser;
public class UserManagement {
private static UserManagement userManagement = new UserManagement();
private static String userName, userPassword;
private McUser mcUser;
private UserManagement() {
}
public static String getUserName() {
return userName;
}
public static void setUserName(String name) {
userName = name;
public McUser getMcUser() {
return mcUser;
}
public static String getUserPassword() {
return userPassword;
}
public static void setUserPassword(String password) {
userPassword = password;
public void setMcUser(McUser mcUser) {
this.mcUser = mcUser;
}
public static UserManagement getDx() {
return userManagement;
}
public void logout() {
mcUser=null;
}
}
......@@ -12,6 +12,7 @@ import org.jivesoftware.smack.XMPPConnection;
import java.util.Timer;
import java.util.TimerTask;
import cn.garymb.ygomobile.ui.mycard.bean.McUser;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.UserManagement;
......@@ -61,8 +62,11 @@ public class TaxiConnectionListener implements ConnectionListener {
class timetask extends TimerTask {
@Override
public void run() {
username = UserManagement.getUserName();
password = UserManagement.getUserPassword();
McUser mcUser=UserManagement.getDx().getMcUser();
if (mcUser==null)
return;
username = mcUser.getUsername();
password = mcUser.getPassword();
if (username != null && password != null) {
sm.setReLogin(false);
Log.e("TaxiConnectionListener", "尝试登录");
......
......@@ -135,7 +135,6 @@ public class YGOUtil {
final int offset = recyclerView.computeVerticalScrollOffset();
final int range = recyclerView.computeVerticalScrollRange() - recyclerView.computeVerticalScrollExtent();
Log.e("MycardFragment",(visibleItemCount > 0 )+" "+( lastVisibleItemPosition >= (totalItemCount - 3 ))+" "+( state == recyclerView.SCROLL_STATE_IDLE)+"高度"+(totalItemCount-3)+" "+lastVisibleItemPosition+" "+(range-offset));
if(visibleItemCount > 0 && lastVisibleItemPosition >= totalItemCount - 3 && state == recyclerView.SCROLL_STATE_IDLE){
return true;
} else {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment