diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ee49eb7a0b..a5c0d1abba 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -150,6 +150,9 @@ + params = new HashMap<>(); + String android_id = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); + if (!TextUtils.isEmpty(android_id)) { + params.put("ANDROID_ID", android_id); + } + String imei = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); + if (!TextUtils.isEmpty(imei)) { + params.put("IMEI", imei); + } + WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + String mac = wm.getConnectionInfo().getMacAddress(); + if (!TextUtils.isEmpty(mac)) { + params.put("MAC", mac); + } + String mid = StatConfig.getMid(context); + if (!TextUtils.isEmpty(mid) || !"0".equals(mid)) { + params.put("MTA_ID", mid); + } + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(Request.Method.POST, + "http://user.ghzhushou.com/v1d0/device/register", new JSONObject(params).toString(), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + Utils.log("onResponse = " + response); + try { + // 保存device_id + saveDeviceId(context, response.getString("device_id")); + } catch (JSONException e) { + e.printStackTrace(); + } + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Utils.log("onErrorResponse = " + error); + } + }); + AppController.addToRequestQueue(request, TokenUtils.class); + } + + // 保存用户设备id + public static synchronized void saveDeviceId(Context context, String device_id) { + + } + + // 获取用户设备id + public static synchronized String getDeviceId(Context context) { + return "57ddf9348a3200304f441112"; + } + // 获取用户token public static synchronized String getToken(Context context) { SharedPreferences sp = context.getSharedPreferences(Config.PREFERENCE, @@ -30,40 +92,18 @@ public class TokenUtils { long time = System.currentTimeMillis(); // 判断token是否过期 if (time < expire) { + // token未过期 return token; } } -// Map params = DeviceUtils.getDeviceParams(context); - Map params = new HashMap(); - String url = Config.HOST + "v1d45/token/visit"; - - //判断是否已登录 - if (sp.getBoolean("isLogin", false)) { - // 已登录,获取用户名和密码自动登录 - String username = sp.getString("username", null); - String password = sp.getString("password", null); - if (username == null || password == null) { - url = Config.HOST + "v2/token/user?time=" + System.currentTimeMillis(); - params.put("username", username); - try { - String s = RSEUtils.encryptByPublic(password + username + System.currentTimeMillis() / 1000); - Utils.log("加密 = " + s); - params.put("password", s); - } catch (Exception e) { - e.printStackTrace(); - } - } else { - url = Config.HOST + "v2/token/mobile?time=" + System.currentTimeMillis(); - String mobile = sp.getString("mobile", null); - params.put("mobile_number", mobile); - } - } - + // 重新获取token + String url = "http://user.ghzhushou.com/v1d0/login"; + Map params = new HashMap<>(); + params.put("device_id", getDeviceId(context)); try { JSONObject body = new JSONObject(params); - HttpURLConnection connection = (HttpURLConnection) new URL(url) - .openConnection(); + HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setConnectTimeout(5000); @@ -90,12 +130,15 @@ public class TokenUtils { } reader.close(); try { - JSONObject jsonObject = new JSONObject(builder.toString()); Editor editor = sp.edit(); - editor.putString("token", jsonObject.getString("token")); + JSONObject jsonObject = new JSONObject(builder.toString()); + editor.putString("user_name", jsonObject.getString("name")); + editor.putString("user_icon", jsonObject.getString("icon")); + jsonObject = jsonObject.getJSONObject("token"); + editor.putString("token", jsonObject.getString("value")); editor.putLong("token_expire", jsonObject.getLong("expire")); editor.apply(); - return jsonObject.getString("token"); + return jsonObject.getString("value"); } catch (JSONException e) { e.printStackTrace(); } @@ -103,7 +146,6 @@ public class TokenUtils { } catch (IOException e) { e.printStackTrace(); } - return null; } diff --git a/app/src/main/java/com/gh/gamecenter/CropImageActivity.java b/app/src/main/java/com/gh/gamecenter/CropImageActivity.java new file mode 100644 index 0000000000..f9e80da93c --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/CropImageActivity.java @@ -0,0 +1,97 @@ +package com.gh.gamecenter; + +import android.app.Dialog; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.TypedValue; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gh.base.BaseActivity; +import com.gh.common.util.DialogUtils; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.FileUtils; +import com.gh.common.util.ImageUtils; +import com.gh.common.util.TokenUtils; +import com.gh.common.view.CropImageCustom; + +import java.io.File; + +public class CropImageActivity extends BaseActivity { + + private CropImageCustom cropimage_custom; + + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + if (msg.what == 0) { + toast("上传成功"); + } else if (msg.what == 1) { + toast("上传失败"); + } + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + View contentView = View.inflate(this, R.layout.activity_cropimage, null); + + init(contentView, "图片裁剪"); + + RelativeLayout reuse_actionbar = (RelativeLayout) findViewById(R.id.reuse_actionbar); + + TextView confirm = new TextView(this); + confirm.setText("确定"); + confirm.setTextColor(0xffffffff); + confirm.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + int padding = DisplayUtils.dip2px(getApplicationContext(), 10); + confirm.setPadding(padding, padding, padding, padding); + confirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + final Dialog dialog = DialogUtils.showWaitDialog( + CropImageActivity.this, "上传中..."); + new Thread(new Runnable() { + @Override + public void run() { + String path = getCacheDir() + File.separator + + System.currentTimeMillis() + ".jpg"; + cropimage_custom.savePicture(path); + // 上传图片 + String url = FileUtils.uploadFile("http://user.ghzhushou.com/v1d0/icon", + path, TokenUtils.getToken(CropImageActivity.this)); + dialog.dismiss(); + if (url != null) { + Intent data = new Intent(); + data.putExtra("url", url); + setResult(RESULT_OK, data); + finish(); + handler.sendEmptyMessage(0); + } else { + handler.sendEmptyMessage(1); + } + } + }).start(); + } + }); + RelativeLayout.LayoutParams rparams = new RelativeLayout.LayoutParams( + LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + rparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + rparams.addRule(RelativeLayout.CENTER_VERTICAL); + confirm.setLayoutParams(rparams); + reuse_actionbar.addView(confirm); + + String path = getIntent().getStringExtra("path"); + + ImageUtils.getInstance(getApplicationContext()).displayFile( + "file://" + path, cropimage_custom.getCropImageZoomView()); + + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index 461743182e..de35aceb5e 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -1358,10 +1358,12 @@ public class MainActivity extends BaseFragmentActivity implements OnClickListene new Response.Listener() { @Override public void onResponse(JSONObject response) { - Gson gson = new Gson(); - GameDigestEntity gameDigestEntity = gson.fromJson( - response.toString(), GameDigestEntity.class); - concernGame(gameDigestEntity.getId()); + if (response.length() != 0) { + Gson gson = new Gson(); + GameDigestEntity gameDigestEntity = gson.fromJson( + response.toString(), GameDigestEntity.class); + concernGame(gameDigestEntity.getId()); + } } }, null); AppController.addToRequestQueue(request, MainActivity.class); diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index 2132c41f0e..e2d18c0650 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -1,30 +1,56 @@ package com.gh.gamecenter.personal; import android.app.Dialog; -import android.content.DialogInterface; +import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; +import android.database.Cursor; +import android.net.Uri; import android.os.Bundle; +import android.provider.MediaStore; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; +import android.text.TextUtils; import android.util.DisplayMetrics; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; import com.gh.base.AppController; +import com.gh.common.constant.Config; +import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; +import com.gh.common.util.ImageUtils; +import com.gh.common.util.TokenUtils; +import com.gh.common.util.Utils; +import com.gh.gamecenter.CropImageActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.SettingActivity; import com.gh.gamecenter.eventbus.EBMoveTop; import com.gh.gamecenter.eventbus.EBSlide; +import com.gh.gamecenter.volley.extended.JsonObjectExtendedRequest; +import com.gh.gamecenter.volley.extended.StringExtendedRequest; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; import de.greenrobot.event.EventBus; @@ -36,6 +62,8 @@ import de.greenrobot.event.EventBus; */ public class PersonalFragment extends Fragment implements View.OnClickListener, ViewPager.OnPageChangeListener { + private static final int SUCCESS = 0x123; + private static final int FAILURE = 0x124; private View view; private ViewPager me_vp_show; @@ -61,6 +89,7 @@ public class PersonalFragment extends Fragment implements View.OnClickListener, private int dis; private int previous; + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -150,6 +179,8 @@ public class PersonalFragment extends Fragment implements View.OnClickListener, previous = 0; EventBus.getDefault().register(this); + + login(); } @Override @@ -252,18 +283,72 @@ public class PersonalFragment extends Fragment implements View.OnClickListener, || v.getId() == R.id.me_tv_topbar_concern) { me_vp_show.setCurrentItem(1); } else if (id == R.id.me_tv_top_name) { -// showModifyNickNameDialog(); + showModifyNicknameDialog(); + } else if (id == R.id.me_iv_top_icon) { + Intent intent = new Intent(Intent.ACTION_PICK, + MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + startActivityForResult(intent, 0x123); } } - private void showModifyNickNameDialog() { + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 0x123 && data != null) { + Uri selectedImage = data.getData(); + String[] filePathColumn = { MediaStore.Images.Media.DATA }; + + Cursor cursor = getActivity().getContentResolver().query(selectedImage, + filePathColumn, null, null, null); + if (cursor == null) { + return; + } + cursor.moveToFirst(); + + int columnIndex = cursor.getColumnIndex(filePathColumn[0]); + String picturePath = cursor.getString(columnIndex); + cursor.close(); + + Utils.log("picturePath = " + picturePath); + // 上传头像 + Intent intent = new Intent(getActivity(), CropImageActivity.class); + intent.putExtra("path", picturePath); + startActivityForResult(intent, 0x124); + } else if (requestCode == 0x124 && data != null) { + String url = data.getExtras().getString("url"); + ImageUtils.getInstance(getActivity()).display(url, me_iv_top_icon, R.drawable.user_default_icon); + } + } + + private void showModifyNicknameDialog() { final Dialog dialog = new Dialog(getActivity()); View view = View.inflate(getActivity(), R.layout.dialog_modify_nickname, null); + final EditText input = (EditText) view.findViewById(R.id.dialog_nickname_input); + + input.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE) { + String nickname = input.getText().toString().trim(); + if (TextUtils.isEmpty(nickname)) { + Toast.makeText(getActivity(), "请输入昵称", Toast.LENGTH_SHORT).show(); + return true; + } + InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(v.getWindowToken(), 0); + modifyNickname(nickname); + dialog.dismiss(); + return true; + } + return false; + } + }); + // 取消按钮 - TextView alertdialog_cannel = (TextView) view.findViewById(R.id.alertdialog_cannel); - alertdialog_cannel.setOnClickListener(new View.OnClickListener() { + TextView cancel = (TextView) view.findViewById(R.id.dialog_nickname_cannel); + cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); @@ -271,10 +356,18 @@ public class PersonalFragment extends Fragment implements View.OnClickListener, }); // 确定按钮 - TextView alertdialog_confirm = (TextView) view.findViewById(R.id.alertdialog_confirm); - alertdialog_confirm.setOnClickListener(new View.OnClickListener() { + TextView confirm = (TextView) view.findViewById(R.id.dialog_nickname_confirm); + confirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + String nickname = input.getText().toString().trim(); + if (TextUtils.isEmpty(nickname)) { + Toast.makeText(getActivity(), "请输入昵称", Toast.LENGTH_SHORT).show(); + return; + } + InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(v.getWindowToken(), 0); + modifyNickname(nickname); dialog.dismiss(); } }); @@ -284,6 +377,72 @@ public class PersonalFragment extends Fragment implements View.OnClickListener, dialog.show(); } + private void modifyNickname(final String nickname) { + final Dialog waitDialog = DialogUtils.showWaitDialog(getActivity(), "修改中..."); + new Thread(){ + @Override + public void run() { + HashMap params = new HashMap<>(); + params.put("name", nickname); + StringExtendedRequest request = new StringExtendedRequest(Request.Method.POST, + "http://user.ghzhushou.com/v1d0/name", new JSONObject(params).toString(), + new Response.Listener() { + @Override + public void onResponse(String response) { + Utils.log("onResponse = " + response); + waitDialog.dismiss(); + Toast.makeText(getActivity(), "修改成功", Toast.LENGTH_SHORT).show(); + me_tv_top_name.setText(nickname); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Utils.log("onErrorResponse = " + error); + waitDialog.dismiss(); + Toast.makeText(getActivity(), "修改失败", Toast.LENGTH_SHORT).show(); + } + }); + request.addHeader("TOKEN", TokenUtils.getToken(getActivity())); + AppController.addToRequestQueue(request, PersonalFragment.class); + } + }.start(); + } + + private void login() { + HashMap params = new HashMap<>(); + params.put("device_id", TokenUtils.getDeviceId(getActivity())); + JsonObjectExtendedRequest request = new JsonObjectExtendedRequest(Request.Method.POST, + "http://user.ghzhushou.com/v1d0/login", new JSONObject(params).toString(), + new Response.Listener() { + @Override + public void onResponse(JSONObject response) { + try { + me_tv_top_name.setText(response.getString("name")); + String icon = response.getString("icon"); + if (!TextUtils.isEmpty(icon)) { + ImageUtils.getInstance(getActivity()).display(icon, me_iv_top_icon, R.drawable.user_default_icon); + } + JSONObject token = response.getJSONObject("token"); + SharedPreferences sp = getActivity().getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.putString("user_name", response.getString("name")); + editor.putString("user_icon", response.getString("icon")); + editor.putString("token", token.getString("value")); + editor.putLong("token_expire", token.getLong("expire")); + editor.apply(); + } catch (JSONException e) { + e.printStackTrace(); + } + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Utils.log("onErrorResponse = " + error); + } + }); + AppController.addToRequestQueue(request, PersonalFragment.class); + } + @Override public void onDestroy() { super.onDestroy(); diff --git a/app/src/main/res/drawable/dialog_edit_bg.xml b/app/src/main/res/drawable/dialog_edit_bg.xml new file mode 100644 index 0000000000..8dac581d35 --- /dev/null +++ b/app/src/main/res/drawable/dialog_edit_bg.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_cropimage.xml b/app/src/main/res/layout/activity_cropimage.xml new file mode 100644 index 0000000000..6c6eb7e42f --- /dev/null +++ b/app/src/main/res/layout/activity_cropimage.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_modify_nickname.xml b/app/src/main/res/layout/dialog_modify_nickname.xml index ba9d3495b0..7b445c2ff4 100644 --- a/app/src/main/res/layout/dialog_modify_nickname.xml +++ b/app/src/main/res/layout/dialog_modify_nickname.xml @@ -20,12 +20,22 @@ android:background="#E5E5E5"/> + android:background="@drawable/dialog_edit_bg" + android:textColorHint="#9a9a9a" + android:maxLength="12" + android:padding="8dp" + android:singleLine="true" + android:imeOptions="actionDone" + android:layout_marginTop="8dp" + android:layout_marginBottom="8dp" + android:layout_marginLeft="15dp" + android:layout_marginRight="15dp"/> diff --git a/app/src/main/res/layout/home3_fragment.xml b/app/src/main/res/layout/home3_fragment.xml index d383870b97..6760c16618 100644 --- a/app/src/main/res/layout/home3_fragment.xml +++ b/app/src/main/res/layout/home3_fragment.xml @@ -25,7 +25,6 @@ android:id="@+id/me_iv_top_icon" android:layout_width="100dp" android:layout_height="100dp" - android:scaleType="centerCrop" android:layout_centerHorizontal="true" android:src="@drawable/user_default_icon" android:layout_marginTop="55dp"/>