Commit 0f74eae9119a7de92427dbea1edf12a6c782d760
1 parent
15f895b0
修改用户信息编辑页面和修复播放器权限问题
Showing
27 changed files
with
858 additions
and
55 deletions
app/src/main/java/com/cnlive/gundam/main/application/CNLiveApplication.java
| @@ -10,6 +10,8 @@ import com.cnlive.libs.util.Config; | @@ -10,6 +10,8 @@ import com.cnlive.libs.util.Config; | ||
| 10 | 10 | ||
| 11 | public class CNLiveApplication extends Application { | 11 | public class CNLiveApplication extends Application { |
| 12 | 12 | ||
| 13 | + public static final String secret = "c2faeb120f0ea2e2d47020d4b03cb8a93bed2585897a94"; | ||
| 14 | + | ||
| 13 | @Override | 15 | @Override |
| 14 | public void onCreate() { | 16 | public void onCreate() { |
| 15 | super.onCreate(); | 17 | super.onCreate(); |
app/src/main/java/com/cnlive/gundam/main/model/VideoListProgram.java
| @@ -18,18 +18,20 @@ public class VideoListProgram implements Serializable { | @@ -18,18 +18,20 @@ public class VideoListProgram implements Serializable { | ||
| 18 | private String rates; | 18 | private String rates; |
| 19 | private String type; | 19 | private String type; |
| 20 | private String category;//点播用 | 20 | private String category;//点播用 |
| 21 | + private int isHorizontalScreen = 1;//屏幕方向,0:垂直即竖屏 /1:水平即横屏 ,默认为1 | | ||
| 21 | 22 | ||
| 22 | public VideoListProgram() { | 23 | public VideoListProgram() { |
| 23 | } | 24 | } |
| 24 | 25 | ||
| 25 | //ugc点播使用 | 26 | //ugc点播使用 |
| 26 | - public VideoListProgram(String vId, String title, String img, String subTitle, String rates, String type) { | 27 | + public VideoListProgram(String vId, String title, String img, String subTitle, String rates, String type, int isHorizontalScreen) { |
| 27 | this.vId = vId; | 28 | this.vId = vId; |
| 28 | this.title = title; | 29 | this.title = title; |
| 29 | this.subTitle = subTitle; | 30 | this.subTitle = subTitle; |
| 30 | this.img = img; | 31 | this.img = img; |
| 31 | this.rates = rates; | 32 | this.rates = rates; |
| 32 | this.type = type; | 33 | this.type = type; |
| 34 | + this.isHorizontalScreen = isHorizontalScreen; | ||
| 33 | } | 35 | } |
| 34 | 36 | ||
| 35 | //直播使用 | 37 | //直播使用 |
| @@ -41,6 +43,16 @@ public class VideoListProgram implements Serializable { | @@ -41,6 +43,16 @@ public class VideoListProgram implements Serializable { | ||
| 41 | this.type = type; | 43 | this.type = type; |
| 42 | } | 44 | } |
| 43 | 45 | ||
| 46 | + //ugc直播使用 | ||
| 47 | + public VideoListProgram(String channelId, String title, String img, String docID, String type, int isHorizontalScreen) { | ||
| 48 | + this.channelId = channelId; | ||
| 49 | + this.title = title; | ||
| 50 | + this.img = img; | ||
| 51 | + this.docID = docID; | ||
| 52 | + this.type = type; | ||
| 53 | + this.isHorizontalScreen = isHorizontalScreen; | ||
| 54 | + } | ||
| 55 | + | ||
| 44 | public String getvId() { | 56 | public String getvId() { |
| 45 | return vId; | 57 | return vId; |
| 46 | } | 58 | } |
| @@ -104,4 +116,20 @@ public class VideoListProgram implements Serializable { | @@ -104,4 +116,20 @@ public class VideoListProgram implements Serializable { | ||
| 104 | public void setType(String type) { | 116 | public void setType(String type) { |
| 105 | this.type = type; | 117 | this.type = type; |
| 106 | } | 118 | } |
| 119 | + | ||
| 120 | + public String getCategory() { | ||
| 121 | + return category; | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + public void setCategory(String category) { | ||
| 125 | + this.category = category; | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + public int getIsHorizontalScreen() { | ||
| 129 | + return isHorizontalScreen; | ||
| 130 | + } | ||
| 131 | + | ||
| 132 | + public void setIsHorizontalScreen(int isHorizontalScreen) { | ||
| 133 | + this.isHorizontalScreen = isHorizontalScreen; | ||
| 134 | + } | ||
| 107 | } | 135 | } |
app/src/main/java/com/cnlive/gundam/main/ui/activity/BackBaseActivity.java
| @@ -22,7 +22,7 @@ public class BackBaseActivity extends AppCompatActivity { | @@ -22,7 +22,7 @@ public class BackBaseActivity extends AppCompatActivity { | ||
| 22 | TextView toolbarTitle = (TextView) findViewById(R.id.toolbarTitle); | 22 | TextView toolbarTitle = (TextView) findViewById(R.id.toolbarTitle); |
| 23 | toolbarTitle.setText(title); | 23 | toolbarTitle.setText(title); |
| 24 | toolbar.setVisibility(View.VISIBLE); | 24 | toolbar.setVisibility(View.VISIBLE); |
| 25 | - toolbar.setNavigationIcon(R.drawable.btn_cancel); | 25 | + toolbar.setNavigationIcon(R.drawable.user_page_back); |
| 26 | setSupportActionBar(toolbar); | 26 | setSupportActionBar(toolbar); |
| 27 | 27 | ||
| 28 | } | 28 | } |
app/src/main/java/com/cnlive/gundam/main/ui/fragment/ConfigFragment.java
| @@ -79,12 +79,17 @@ public class ConfigFragment extends Fragment implements View.OnClickListener { | @@ -79,12 +79,17 @@ public class ConfigFragment extends Fragment implements View.OnClickListener { | ||
| 79 | @Override | 79 | @Override |
| 80 | public void onResume() { | 80 | public void onResume() { |
| 81 | super.onResume(); | 81 | super.onResume(); |
| 82 | - if (UserService.getInstance(getActivity()).getActiveAccountInfo().getUid() != 0) notifyUI(); | 82 | + notifyUI(UserService.getInstance(getActivity()).getActiveAccountInfo().getUid() != 0); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | - private void notifyUI() { | ||
| 86 | - User activeAccountInfo = UserService.getInstance(getActivity()).getActiveAccountInfo(); | ||
| 87 | - Glide.with(getActivity()).load(activeAccountInfo.getFaceurl()).into(binding.headImg); | ||
| 88 | - binding.tvNickname.setText(activeAccountInfo.getNickname()); | 85 | + private void notifyUI(boolean isLogin) { |
| 86 | + if(isLogin){ | ||
| 87 | + User activeAccountInfo = UserService.getInstance(getActivity()).getActiveAccountInfo(); | ||
| 88 | + Glide.with(getActivity()).load(activeAccountInfo.getFaceurl()).into(binding.headImg); | ||
| 89 | + binding.tvNickname.setText(activeAccountInfo.getNickname()); | ||
| 90 | + }else{ | ||
| 91 | + Glide.with(getActivity()).load(R.drawable.cnlive_user_header).into(binding.headImg); | ||
| 92 | + binding.tvNickname.setText(getString(R.string.click_login)); | ||
| 93 | + } | ||
| 89 | } | 94 | } |
| 90 | } | 95 | } |
app/src/main/java/com/cnlive/gundam/main/ui/fragment/UGCListFragment.java
| @@ -65,9 +65,8 @@ public class UGCListFragment extends Fragment implements SwipeRefreshLayout.OnRe | @@ -65,9 +65,8 @@ public class UGCListFragment extends Fragment implements SwipeRefreshLayout.OnRe | ||
| 65 | 65 | ||
| 66 | private void loadData() { | 66 | private void loadData() { |
| 67 | Map<String, String> params = new HashMap<>(); | 67 | Map<String, String> params = new HashMap<>(); |
| 68 | - //TODO 传多个播放状态 | ||
| 69 | params.put("appId", Config.getAppId()); | 68 | params.put("appId", Config.getAppId()); |
| 70 | - params.put("activityStatus", "2"); | 69 | + params.put("activityStatus", "1,2"); |
| 71 | params.put("pageNo", "1"); | 70 | params.put("pageNo", "1"); |
| 72 | params.put("pageSize", "15"); | 71 | params.put("pageSize", "15"); |
| 73 | RetrofitUtil.getApiService().getSpActivityList(SignUtil.getSignParamM(getActivity(), params)).enqueue(this); | 72 | RetrofitUtil.getApiService().getSpActivityList(SignUtil.getSignParamM(getActivity(), params)).enqueue(this); |
app/src/main/java/com/cnlive/gundam/main/utils/ActivityJumpUtil.java
| @@ -2,7 +2,6 @@ package com.cnlive.gundam.main.utils; | @@ -2,7 +2,6 @@ package com.cnlive.gundam.main.utils; | ||
| 2 | 2 | ||
| 3 | import android.content.Context; | 3 | import android.content.Context; |
| 4 | import android.content.Intent; | 4 | import android.content.Intent; |
| 5 | -import android.util.Log; | ||
| 6 | import android.widget.Toast; | 5 | import android.widget.Toast; |
| 7 | 6 | ||
| 8 | import com.cnlive.gundam.R; | 7 | import com.cnlive.gundam.R; |
| @@ -50,7 +49,6 @@ public class ActivityJumpUtil { | @@ -50,7 +49,6 @@ public class ActivityJumpUtil { | ||
| 50 | 49 | ||
| 51 | @Override | 50 | @Override |
| 52 | public void onFailure(Call<ActivePlayInfo> call, Throwable t) { | 51 | public void onFailure(Call<ActivePlayInfo> call, Throwable t) { |
| 53 | - Log.e("11111111111111", "onFailure: "+call.request().toString() ); | ||
| 54 | Toast.makeText(context, context.getString(R.string.request_state_error), Toast.LENGTH_LONG).show(); | 52 | Toast.makeText(context, context.getString(R.string.request_state_error), Toast.LENGTH_LONG).show(); |
| 55 | } | 53 | } |
| 56 | }); | 54 | }); |
| @@ -59,9 +57,9 @@ public class ActivityJumpUtil { | @@ -59,9 +57,9 @@ public class ActivityJumpUtil { | ||
| 59 | private static void jumpByStatus(Context context, ActivePlayInfo.ActiveModel model) { | 57 | private static void jumpByStatus(Context context, ActivePlayInfo.ActiveModel model) { |
| 60 | if (model == null) return; | 58 | if (model == null) return; |
| 61 | if (model.getActivityStatus() == 1) {//直播中 | 59 | if (model.getActivityStatus() == 1) {//直播中 |
| 62 | - jumpByProgramType(context, new VideoListProgram(model.getChannelId(), model.getActivityName(), model.getCoverImgUrl(), model.getRates(), VideoView.TYPE_UGC_LIVE)); | ||
| 63 | - } else if (model.getActivityStatus() == 3) {//已结束 | ||
| 64 | - jumpByProgramType(context, new VideoListProgram(model.getActivityId(), model.getActivityName(), model.getCoverImgUrl(), model.getActivityName(), model.getRates(), VideoView.TYPE_UGC_VOD)); | 60 | + jumpByProgramType(context, new VideoListProgram(model.getChannelId(), model.getActivityName(), model.getCoverImgUrl(), model.getRates(), VideoView.TYPE_UGC_LIVE, model.getIsHorizontalScreen())); |
| 61 | + } else if (model.getActivityStatus() == 4) {//回放状态 | ||
| 62 | + jumpByProgramType(context, new VideoListProgram(model.getActivityId(), model.getActivityName(), model.getCoverImgUrl(), model.getActivityName(), model.getRates(), VideoView.TYPE_UGC_VOD, model.getIsHorizontalScreen())); | ||
| 65 | } else { | 63 | } else { |
| 66 | Toast.makeText(context, context.getString(R.string.request_state_play_error), Toast.LENGTH_LONG).show(); | 64 | Toast.makeText(context, context.getString(R.string.request_state_play_error), Toast.LENGTH_LONG).show(); |
| 67 | } | 65 | } |
app/src/main/java/com/cnlive/gundam/user/adapter/PersonalAdapter.java
| @@ -30,6 +30,11 @@ public class PersonalAdapter extends DataBindingAdapter<PersonalData>{ | @@ -30,6 +30,11 @@ public class PersonalAdapter extends DataBindingAdapter<PersonalData>{ | ||
| 30 | DataBindingViewHolder viewHolder = new DataBindingViewHolder(binding.getRoot()); | 30 | DataBindingViewHolder viewHolder = new DataBindingViewHolder(binding.getRoot()); |
| 31 | viewHolder.setBinding(binding); | 31 | viewHolder.setBinding(binding); |
| 32 | return viewHolder; | 32 | return viewHolder; |
| 33 | + }else if(viewType == PersonalData.TYPE_LOGOUT){ | ||
| 34 | + ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.layout_personal_logout_item, parent, false); | ||
| 35 | + DataBindingViewHolder viewHolder = new DataBindingViewHolder(binding.getRoot()); | ||
| 36 | + viewHolder.setBinding(binding); | ||
| 37 | + return viewHolder; | ||
| 33 | }else{ | 38 | }else{ |
| 34 | return super.onCreateViewHolder(parent, viewType); | 39 | return super.onCreateViewHolder(parent, viewType); |
| 35 | } | 40 | } |
| @@ -43,6 +48,12 @@ public class PersonalAdapter extends DataBindingAdapter<PersonalData>{ | @@ -43,6 +48,12 @@ public class PersonalAdapter extends DataBindingAdapter<PersonalData>{ | ||
| 43 | if (l != null) | 48 | if (l != null) |
| 44 | videoListViewHolder.getBinding().setVariable(BR.viewClickListner, l); | 49 | videoListViewHolder.getBinding().setVariable(BR.viewClickListner, l); |
| 45 | videoListViewHolder.getBinding().executePendingBindings(); | 50 | videoListViewHolder.getBinding().executePendingBindings(); |
| 51 | + }else if(getItem(position).getItemType() == PersonalData.TYPE_LOGOUT){ | ||
| 52 | + DataBindingViewHolder videoListViewHolder = (DataBindingViewHolder) holder; | ||
| 53 | + videoListViewHolder.getBinding().setVariable(itemBRId, getItem(position)); | ||
| 54 | + if (l != null) | ||
| 55 | + videoListViewHolder.getBinding().setVariable(BR.viewClickListner, l); | ||
| 56 | + videoListViewHolder.getBinding().executePendingBindings(); | ||
| 46 | }else{ | 57 | }else{ |
| 47 | super.onBindViewHolder(holder, position); | 58 | super.onBindViewHolder(holder, position); |
| 48 | } | 59 | } |
app/src/main/java/com/cnlive/gundam/user/fragment/UserPersonalEditFragment.java
| @@ -16,6 +16,7 @@ import com.cnlive.gundam.user.auth.UserService; | @@ -16,6 +16,7 @@ import com.cnlive.gundam.user.auth.UserService; | ||
| 16 | import com.cnlive.gundam.user.model.User; | 16 | import com.cnlive.gundam.user.model.User; |
| 17 | import com.cnlive.libs.user.IUserService; | 17 | import com.cnlive.libs.user.IUserService; |
| 18 | import com.cnlive.libs.user.UserUtil; | 18 | import com.cnlive.libs.user.UserUtil; |
| 19 | +import com.cnlive.libs.user.model.UserData; | ||
| 19 | import com.cnlive.libs.util.data.network.Callback; | 20 | import com.cnlive.libs.util.data.network.Callback; |
| 20 | 21 | ||
| 21 | /** | 22 | /** |
| @@ -88,7 +89,7 @@ public class UserPersonalEditFragment extends Fragment implements Callback, View | @@ -88,7 +89,7 @@ public class UserPersonalEditFragment extends Fragment implements Callback, View | ||
| 88 | title = "修改地址"; | 89 | title = "修改地址"; |
| 89 | break; | 90 | break; |
| 90 | } | 91 | } |
| 91 | - ((UserPersonalActivity)getActivity()).setTitle(title); | 92 | + ((UserPersonalActivity) getActivity()).setTitle(title); |
| 92 | } | 93 | } |
| 93 | 94 | ||
| 94 | @Override | 95 | @Override |
| @@ -109,7 +110,6 @@ public class UserPersonalEditFragment extends Fragment implements Callback, View | @@ -109,7 +110,6 @@ public class UserPersonalEditFragment extends Fragment implements Callback, View | ||
| 109 | break; | 110 | break; |
| 110 | } | 111 | } |
| 111 | } else if (v.getId() == R.id.get_verify) { | 112 | } else if (v.getId() == R.id.get_verify) { |
| 112 | - //TODO 获取验证码 | ||
| 113 | UserUtil.sendMessage(IUserService.REGISTER_OR_MODIFY_MOBILE, binding.includeMobileLayout.edtLoginNumber.getText().toString(), new Callback() { | 113 | UserUtil.sendMessage(IUserService.REGISTER_OR_MODIFY_MOBILE, binding.includeMobileLayout.edtLoginNumber.getText().toString(), new Callback() { |
| 114 | @Override | 114 | @Override |
| 115 | public void onState(int i, String s, Object o) { | 115 | public void onState(int i, String s, Object o) { |
| @@ -127,11 +127,23 @@ public class UserPersonalEditFragment extends Fragment implements Callback, View | @@ -127,11 +127,23 @@ public class UserPersonalEditFragment extends Fragment implements Callback, View | ||
| 127 | @Override | 127 | @Override |
| 128 | public void onState(int i, String s, Object o) { | 128 | public void onState(int i, String s, Object o) { |
| 129 | if (i == IUserService.SUCCESS) { | 129 | if (i == IUserService.SUCCESS) { |
| 130 | + updateUserInfo(); | ||
| 130 | Toast.makeText(getActivity(), "提交成功", Toast.LENGTH_LONG).show(); | 131 | Toast.makeText(getActivity(), "提交成功", Toast.LENGTH_LONG).show(); |
| 131 | } else { | 132 | } else { |
| 132 | Toast.makeText(getActivity(), "提交失败" + s, Toast.LENGTH_LONG).show(); | 133 | Toast.makeText(getActivity(), "提交失败" + s, Toast.LENGTH_LONG).show(); |
| 133 | } | 134 | } |
| 135 | + } | ||
| 134 | 136 | ||
| 135 | - //TODO 更新一下本地数据 | 137 | + private void updateUserInfo() { |
| 138 | + UserUtil.queryUserInfo(String.valueOf(user.getUid()), String.valueOf(user.getUid()), new Callback() { | ||
| 139 | + @Override | ||
| 140 | + public void onState(int i, String s, Object obj) { | ||
| 141 | + if (i == IUserService.SUCCESS) { | ||
| 142 | + UserData userData = (UserData) obj; | ||
| 143 | + UserService userService = UserService.getInstance(getActivity()); | ||
| 144 | + userService.setActiveAccountInfo(userData.getData()); | ||
| 145 | + } | ||
| 146 | + } | ||
| 147 | + }); | ||
| 136 | } | 148 | } |
| 137 | } | 149 | } |
app/src/main/java/com/cnlive/gundam/user/fragment/UserPersonalFragment.java
| 1 | package com.cnlive.gundam.user.fragment; | 1 | package com.cnlive.gundam.user.fragment; |
| 2 | 2 | ||
| 3 | +import android.Manifest; | ||
| 4 | +import android.app.Activity; | ||
| 3 | import android.content.Intent; | 5 | import android.content.Intent; |
| 6 | +import android.content.pm.PackageManager; | ||
| 4 | import android.databinding.DataBindingUtil; | 7 | import android.databinding.DataBindingUtil; |
| 8 | +import android.net.Uri; | ||
| 9 | +import android.os.Build; | ||
| 5 | import android.os.Bundle; | 10 | import android.os.Bundle; |
| 11 | +import android.provider.MediaStore; | ||
| 6 | import android.support.annotation.Nullable; | 12 | import android.support.annotation.Nullable; |
| 7 | import android.support.v4.app.Fragment; | 13 | import android.support.v4.app.Fragment; |
| 14 | +import android.support.v4.content.ContextCompat; | ||
| 8 | import android.support.v7.widget.LinearLayoutManager; | 15 | import android.support.v7.widget.LinearLayoutManager; |
| 16 | +import android.text.TextUtils; | ||
| 17 | +import android.view.Gravity; | ||
| 9 | import android.view.LayoutInflater; | 18 | import android.view.LayoutInflater; |
| 10 | import android.view.View; | 19 | import android.view.View; |
| 11 | import android.view.ViewGroup; | 20 | import android.view.ViewGroup; |
| @@ -14,13 +23,21 @@ import android.widget.Toast; | @@ -14,13 +23,21 @@ import android.widget.Toast; | ||
| 14 | import com.cnlive.gundam.BR; | 23 | import com.cnlive.gundam.BR; |
| 15 | import com.cnlive.gundam.R; | 24 | import com.cnlive.gundam.R; |
| 16 | import com.cnlive.gundam.databinding.FragmentUserPersonalBinding; | 25 | import com.cnlive.gundam.databinding.FragmentUserPersonalBinding; |
| 26 | +import com.cnlive.gundam.main.application.CNLiveApplication; | ||
| 17 | import com.cnlive.gundam.main.ui.adapter.DataBindingAdapter; | 27 | import com.cnlive.gundam.main.ui.adapter.DataBindingAdapter; |
| 18 | import com.cnlive.gundam.user.activity.UserPersonalActivity; | 28 | import com.cnlive.gundam.user.activity.UserPersonalActivity; |
| 19 | import com.cnlive.gundam.user.adapter.PersonalAdapter; | 29 | import com.cnlive.gundam.user.adapter.PersonalAdapter; |
| 20 | import com.cnlive.gundam.user.auth.UserService; | 30 | import com.cnlive.gundam.user.auth.UserService; |
| 21 | import com.cnlive.gundam.user.model.PersonalData; | 31 | import com.cnlive.gundam.user.model.PersonalData; |
| 22 | import com.cnlive.gundam.user.model.User; | 32 | import com.cnlive.gundam.user.model.User; |
| 33 | +import com.cnlive.gundam.user.util.PictureUtil; | ||
| 34 | +import com.cnlive.gundam.user.view.SelectPopupWindow; | ||
| 35 | +import com.cnlive.libs.user.IUserService; | ||
| 36 | +import com.cnlive.libs.user.UserUtil; | ||
| 37 | +import com.cnlive.libs.user.model.UserData; | ||
| 38 | +import com.cnlive.libs.util.data.network.Callback; | ||
| 23 | 39 | ||
| 40 | +import java.io.File; | ||
| 24 | import java.util.ArrayList; | 41 | import java.util.ArrayList; |
| 25 | import java.util.List; | 42 | import java.util.List; |
| 26 | 43 | ||
| @@ -30,7 +47,15 @@ import java.util.List; | @@ -30,7 +47,15 @@ import java.util.List; | ||
| 30 | * @time 2017/6/28 13:06 | 47 | * @time 2017/6/28 13:06 |
| 31 | * @desc ${TODD} | 48 | * @desc ${TODD} |
| 32 | */ | 49 | */ |
| 33 | -public class UserPersonalFragment extends Fragment implements DataBindingAdapter.OnAdapterViewClickListener<PersonalData> { | 50 | +public class UserPersonalFragment extends Fragment implements DataBindingAdapter.OnAdapterViewClickListener<PersonalData>, Callback { |
| 51 | + | ||
| 52 | + public static final int IMG_FROM_PICTURE = 0x1001; | ||
| 53 | + public static final int IMG_FROM_CAMERA = 0x1002; | ||
| 54 | + public static final int PICTURE_REQUEST_CODE = 0x1003; | ||
| 55 | + public static final int CAMERA_REQUEST_CODE = 0x1004; | ||
| 56 | + | ||
| 57 | + //从相机获取的图片地址 | ||
| 58 | + private String cameraImagePath = ""; | ||
| 34 | 59 | ||
| 35 | private FragmentUserPersonalBinding binding; | 60 | private FragmentUserPersonalBinding binding; |
| 36 | 61 | ||
| @@ -38,6 +63,11 @@ public class UserPersonalFragment extends Fragment implements DataBindingAdapter | @@ -38,6 +63,11 @@ public class UserPersonalFragment extends Fragment implements DataBindingAdapter | ||
| 38 | 63 | ||
| 39 | private List<PersonalData> personalData; | 64 | private List<PersonalData> personalData; |
| 40 | 65 | ||
| 66 | + //上传头像和修改性别的PopupWindow | ||
| 67 | + private SelectPopupWindow menuWindow; | ||
| 68 | + | ||
| 69 | + private User user; | ||
| 70 | + | ||
| 41 | public static UserPersonalFragment newInstance() { | 71 | public static UserPersonalFragment newInstance() { |
| 42 | 72 | ||
| 43 | Bundle args = new Bundle(); | 73 | Bundle args = new Bundle(); |
| @@ -57,27 +87,34 @@ public class UserPersonalFragment extends Fragment implements DataBindingAdapter | @@ -57,27 +87,34 @@ public class UserPersonalFragment extends Fragment implements DataBindingAdapter | ||
| 57 | @Override | 87 | @Override |
| 58 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { | 88 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { |
| 59 | super.onViewCreated(view, savedInstanceState); | 89 | super.onViewCreated(view, savedInstanceState); |
| 60 | - initData(); | ||
| 61 | init(); | 90 | init(); |
| 62 | } | 91 | } |
| 63 | 92 | ||
| 93 | + @Override | ||
| 94 | + public void onResume() { | ||
| 95 | + super.onResume(); | ||
| 96 | + initData(); | ||
| 97 | + } | ||
| 98 | + | ||
| 64 | private void initData() { | 99 | private void initData() { |
| 65 | UserService userService = UserService.getInstance(getActivity()); | 100 | UserService userService = UserService.getInstance(getActivity()); |
| 66 | - User user = userService.getActiveAccountInfo(); | 101 | + user = userService.getActiveAccountInfo(); |
| 102 | + String gender = user.getGender().equals("f") ? "女" : (user.getGender().equals("m") ? "男" : "未知"); | ||
| 67 | personalData = new ArrayList<>(); | 103 | personalData = new ArrayList<>(); |
| 68 | personalData.add(new PersonalData("头像", user.getFaceurl(), PersonalData.TYPE_HEADER)); | 104 | personalData.add(new PersonalData("头像", user.getFaceurl(), PersonalData.TYPE_HEADER)); |
| 69 | personalData.add(new PersonalData("昵称", user.getNickname(), PersonalData.TYPE_NICK)); | 105 | personalData.add(new PersonalData("昵称", user.getNickname(), PersonalData.TYPE_NICK)); |
| 70 | - personalData.add(new PersonalData("性别", user.getGender(), PersonalData.TYPE_GENDER)); | 106 | + personalData.add(new PersonalData("性别", gender, PersonalData.TYPE_GENDER)); |
| 71 | personalData.add(new PersonalData("手机号", user.getMobile(), PersonalData.TYPE_MOBILE)); | 107 | personalData.add(new PersonalData("手机号", user.getMobile(), PersonalData.TYPE_MOBILE)); |
| 72 | personalData.add(new PersonalData("邮箱", user.getEmail(), PersonalData.TYPE_EMAIL)); | 108 | personalData.add(new PersonalData("邮箱", user.getEmail(), PersonalData.TYPE_EMAIL)); |
| 73 | personalData.add(new PersonalData("联系地址", user.getLocation(), PersonalData.TYPE_ADDRESS)); | 109 | personalData.add(new PersonalData("联系地址", user.getLocation(), PersonalData.TYPE_ADDRESS)); |
| 110 | + personalData.add(new PersonalData("", "退出", PersonalData.TYPE_LOGOUT)); | ||
| 111 | + adapter.updateItems(personalData); | ||
| 74 | } | 112 | } |
| 75 | 113 | ||
| 76 | private void init() { | 114 | private void init() { |
| 77 | - ((UserPersonalActivity)getActivity()).setTitle("个人资料"); | 115 | + ((UserPersonalActivity) getActivity()).setTitle("个人资料"); |
| 78 | binding.setListAdapter(adapter = new PersonalAdapter(getActivity(), R.layout.layout_personal_item, BR.data)); | 116 | binding.setListAdapter(adapter = new PersonalAdapter(getActivity(), R.layout.layout_personal_item, BR.data)); |
| 79 | binding.setLayoutManager(new LinearLayoutManager(getActivity())); | 117 | binding.setLayoutManager(new LinearLayoutManager(getActivity())); |
| 80 | - adapter.updateItems(personalData); | ||
| 81 | adapter.setOnViewClickListener(this); | 118 | adapter.setOnViewClickListener(this); |
| 82 | } | 119 | } |
| 83 | 120 | ||
| @@ -87,36 +124,200 @@ public class UserPersonalFragment extends Fragment implements DataBindingAdapter | @@ -87,36 +124,200 @@ public class UserPersonalFragment extends Fragment implements DataBindingAdapter | ||
| 87 | Intent intent = null; | 124 | Intent intent = null; |
| 88 | switch (program.getItemType()) { | 125 | switch (program.getItemType()) { |
| 89 | case PersonalData.TYPE_HEADER: | 126 | case PersonalData.TYPE_HEADER: |
| 90 | - Toast.makeText(getActivity(), "头像点击", Toast.LENGTH_LONG).show(); | 127 | + showTakePhoto(); |
| 91 | break; | 128 | break; |
| 92 | case PersonalData.TYPE_NICK: | 129 | case PersonalData.TYPE_NICK: |
| 93 | intent = new Intent(getActivity(), UserPersonalActivity.class); | 130 | intent = new Intent(getActivity(), UserPersonalActivity.class); |
| 94 | - intent.putExtra("isEdit",true); | 131 | + intent.putExtra("isEdit", true); |
| 95 | intent.putExtra("type", UserPersonalEditFragment.TYPE_NICK); | 132 | intent.putExtra("type", UserPersonalEditFragment.TYPE_NICK); |
| 96 | startActivity(intent); | 133 | startActivity(intent); |
| 97 | break; | 134 | break; |
| 98 | case PersonalData.TYPE_GENDER: | 135 | case PersonalData.TYPE_GENDER: |
| 99 | - Toast.makeText(getActivity(), "性别点击", Toast.LENGTH_LONG).show(); | 136 | + showSelectGender(); |
| 100 | break; | 137 | break; |
| 101 | case PersonalData.TYPE_MOBILE: | 138 | case PersonalData.TYPE_MOBILE: |
| 102 | intent = new Intent(getActivity(), UserPersonalActivity.class); | 139 | intent = new Intent(getActivity(), UserPersonalActivity.class); |
| 103 | - intent.putExtra("isEdit",true); | 140 | + intent.putExtra("isEdit", true); |
| 104 | intent.putExtra("type", UserPersonalEditFragment.TYPE_MOBILE); | 141 | intent.putExtra("type", UserPersonalEditFragment.TYPE_MOBILE); |
| 105 | startActivity(intent); | 142 | startActivity(intent); |
| 106 | break; | 143 | break; |
| 107 | case PersonalData.TYPE_EMAIL: | 144 | case PersonalData.TYPE_EMAIL: |
| 108 | intent = new Intent(getActivity(), UserPersonalActivity.class); | 145 | intent = new Intent(getActivity(), UserPersonalActivity.class); |
| 109 | - intent.putExtra("isEdit",true); | 146 | + intent.putExtra("isEdit", true); |
| 110 | intent.putExtra("type", UserPersonalEditFragment.TYPE_EMAIL); | 147 | intent.putExtra("type", UserPersonalEditFragment.TYPE_EMAIL); |
| 111 | startActivity(intent); | 148 | startActivity(intent); |
| 112 | break; | 149 | break; |
| 113 | case PersonalData.TYPE_ADDRESS: | 150 | case PersonalData.TYPE_ADDRESS: |
| 114 | intent = new Intent(getActivity(), UserPersonalActivity.class); | 151 | intent = new Intent(getActivity(), UserPersonalActivity.class); |
| 115 | - intent.putExtra("isEdit",true); | 152 | + intent.putExtra("isEdit", true); |
| 116 | intent.putExtra("type", UserPersonalEditFragment.TYPE_ADDRESS); | 153 | intent.putExtra("type", UserPersonalEditFragment.TYPE_ADDRESS); |
| 117 | startActivity(intent); | 154 | startActivity(intent); |
| 118 | break; | 155 | break; |
| 119 | } | 156 | } |
| 157 | + } else if (v.getId() == R.id.logout) { | ||
| 158 | + UserService userService = UserService.getInstance(getActivity()); | ||
| 159 | + userService.clearUser(); | ||
| 160 | + getActivity().finish(); | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + /** | ||
| 165 | + * 底部弹出上传头像的PopupWindow | ||
| 166 | + */ | ||
| 167 | + public void showTakePhoto() { | ||
| 168 | + menuWindow = new SelectPopupWindow(getActivity(), R.layout.pop_take_photo); | ||
| 169 | + menuWindow.showAtLocation(getView().findViewById(R.id.layout), Gravity.BOTTOM, 0, 0); | ||
| 170 | + menuWindow.getContentView().findViewById(R.id.ll_pick_photo).setOnClickListener(itemsOnClick); | ||
| 171 | + menuWindow.getContentView().findViewById(R.id.ll_take_photo).setOnClickListener(itemsOnClick); | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + /** | ||
| 175 | + * 底部弹出修改性别的PopupWindow | ||
| 176 | + */ | ||
| 177 | + public void showSelectGender() { | ||
| 178 | + menuWindow = new SelectPopupWindow(getActivity(), R.layout.pop_modify_gender); | ||
| 179 | + menuWindow.showAtLocation(getView().findViewById(R.id.layout), Gravity.BOTTOM, 0, 0); | ||
| 180 | + menuWindow.getContentView().findViewById(R.id.boy).setOnClickListener(itemsOnClick); | ||
| 181 | + menuWindow.getContentView().findViewById(R.id.girl).setOnClickListener(itemsOnClick); | ||
| 182 | + } | ||
| 183 | + | ||
| 184 | + //为弹出窗口实现监听类 | ||
| 185 | + private View.OnClickListener itemsOnClick = new View.OnClickListener() { | ||
| 186 | + | ||
| 187 | + public void onClick(View v) { | ||
| 188 | + if (menuWindow != null && menuWindow.isShowing()) { | ||
| 189 | + menuWindow.dismiss(); | ||
| 190 | + } | ||
| 191 | + switch (v.getId()) { | ||
| 192 | + case R.id.ll_take_photo: | ||
| 193 | + fromCamera(); | ||
| 194 | + break; | ||
| 195 | + case R.id.ll_pick_photo: | ||
| 196 | + fromPicture(); | ||
| 197 | + break; | ||
| 198 | + case R.id.girl: | ||
| 199 | + UserUtil.modifyUserInfo(String.valueOf(user.getUid()), "gender", "f", UserPersonalFragment.this); | ||
| 200 | + break; | ||
| 201 | + case R.id.boy: | ||
| 202 | + UserUtil.modifyUserInfo(String.valueOf(user.getUid()), "gender", "m", UserPersonalFragment.this); | ||
| 203 | + break; | ||
| 204 | + default: | ||
| 205 | + break; | ||
| 206 | + } | ||
| 207 | + } | ||
| 208 | + }; | ||
| 209 | + | ||
| 210 | + public void fromPicture() { | ||
| 211 | + if (Build.VERSION.SDK_INT >= 23) { | ||
| 212 | + int checkCallPhonePermission = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE); | ||
| 213 | + if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) { | ||
| 214 | + requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PICTURE_REQUEST_CODE); | ||
| 215 | + return; | ||
| 216 | + } else { | ||
| 217 | + toIntentPicture(); | ||
| 218 | + } | ||
| 219 | + } else { | ||
| 220 | + toIntentPicture(); | ||
| 221 | + } | ||
| 222 | + } | ||
| 223 | + | ||
| 224 | + private void toIntentPicture() { | ||
| 225 | + Intent intent = new Intent(); | ||
| 226 | + intent.setType("image/*"); | ||
| 227 | + intent.setAction(Intent.ACTION_GET_CONTENT); | ||
| 228 | + startActivityForResult(intent, IMG_FROM_PICTURE); | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + public void fromCamera() { | ||
| 232 | + if (Build.VERSION.SDK_INT >= 23) { | ||
| 233 | + int checkCallPhonePermissionStorage = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA); | ||
| 234 | + if (checkCallPhonePermissionStorage != PackageManager.PERMISSION_GRANTED) { | ||
| 235 | + requestPermissions(new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE); | ||
| 236 | + } else { | ||
| 237 | + toIntentCamera(); | ||
| 238 | + } | ||
| 239 | + } else { | ||
| 240 | + toIntentCamera(); | ||
| 241 | + } | ||
| 242 | + } | ||
| 243 | + | ||
| 244 | + private void toIntentCamera() { | ||
| 245 | + cameraImagePath = PictureUtil.getImagePath(getActivity()); | ||
| 246 | + if (!TextUtils.isEmpty(cameraImagePath)) { | ||
| 247 | + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); | ||
| 248 | + File tmpFile = new File(cameraImagePath); | ||
| 249 | + intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tmpFile)); | ||
| 250 | + startActivityForResult(intent, IMG_FROM_CAMERA); | ||
| 251 | + } | ||
| 252 | + } | ||
| 253 | + | ||
| 254 | + | ||
| 255 | + @Override | ||
| 256 | + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { | ||
| 257 | + super.onRequestPermissionsResult(requestCode, permissions, grantResults); | ||
| 258 | + switch (requestCode) { | ||
| 259 | + case PICTURE_REQUEST_CODE: | ||
| 260 | + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { | ||
| 261 | + toIntentPicture(); | ||
| 262 | + } else { | ||
| 263 | + Toast.makeText(getActivity(), "权限已被禁止,请打开,再使用此功能", Toast.LENGTH_LONG).show(); | ||
| 264 | + } | ||
| 265 | + break; | ||
| 266 | + case CAMERA_REQUEST_CODE: | ||
| 267 | + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { | ||
| 268 | + toIntentCamera(); | ||
| 269 | + } else { | ||
| 270 | + Toast.makeText(getActivity(), "权限已被禁止,请打开,再使用此功能", Toast.LENGTH_LONG).show(); | ||
| 271 | + } | ||
| 272 | + break; | ||
| 273 | + } | ||
| 274 | + } | ||
| 275 | + | ||
| 276 | + @Override | ||
| 277 | + public void onState(int i, String s, Object o) { | ||
| 278 | + if (i == IUserService.SUCCESS) { | ||
| 279 | + updateUserInfo(); | ||
| 280 | + Toast.makeText(getActivity(), "提交成功", Toast.LENGTH_LONG).show(); | ||
| 281 | + } else { | ||
| 282 | + Toast.makeText(getActivity(), "提交失败" + s, Toast.LENGTH_LONG).show(); | ||
| 283 | + } | ||
| 284 | + } | ||
| 285 | + | ||
| 286 | + private void updateUserInfo() { | ||
| 287 | + UserUtil.queryUserInfo(String.valueOf(user.getUid()), String.valueOf(user.getUid()), new Callback() { | ||
| 288 | + @Override | ||
| 289 | + public void onState(int i, String s, Object obj) { | ||
| 290 | + | ||
| 291 | + if (i == IUserService.SUCCESS) { | ||
| 292 | + UserData userData = (UserData) obj; | ||
| 293 | + UserService userService = UserService.getInstance(getActivity()); | ||
| 294 | + userService.setActiveAccountInfo(userData.getData()); | ||
| 295 | + initData(); | ||
| 296 | + } else { | ||
| 297 | + Toast.makeText(getActivity(), "提交失败1111" + s, Toast.LENGTH_LONG).show(); | ||
| 298 | + } | ||
| 299 | + } | ||
| 300 | + }); | ||
| 301 | + } | ||
| 302 | + | ||
| 303 | + @Override | ||
| 304 | + public void onActivityResult(int requestCode, int resultCode, Intent data) { | ||
| 305 | + super.onActivityResult(requestCode, resultCode, data); | ||
| 306 | + if (resultCode == Activity.RESULT_OK) { | ||
| 307 | + File file = null; | ||
| 308 | + switch (requestCode) { | ||
| 309 | + case IMG_FROM_CAMERA: | ||
| 310 | + file = new File(cameraImagePath); | ||
| 311 | + UserUtil.uploadFace(String.valueOf(user.getUid()), CNLiveApplication.secret, file, this); | ||
| 312 | + break; | ||
| 313 | + case IMG_FROM_PICTURE: | ||
| 314 | + Uri uri = data.getData(); | ||
| 315 | + file = new File(PictureUtil.getPath(getActivity(), uri)); | ||
| 316 | + UserUtil.uploadFace(String.valueOf(user.getUid()), CNLiveApplication.secret, file, this); | ||
| 317 | + break; | ||
| 318 | + default: | ||
| 319 | + break; | ||
| 320 | + } | ||
| 120 | } | 321 | } |
| 121 | } | 322 | } |
| 122 | } | 323 | } |
app/src/main/java/com/cnlive/gundam/user/model/PersonalData.java
| @@ -17,6 +17,7 @@ public class PersonalData { | @@ -17,6 +17,7 @@ public class PersonalData { | ||
| 17 | public static final int TYPE_MOBILE = 0x1004; | 17 | public static final int TYPE_MOBILE = 0x1004; |
| 18 | public static final int TYPE_EMAIL = 0x1005; | 18 | public static final int TYPE_EMAIL = 0x1005; |
| 19 | public static final int TYPE_ADDRESS = 0x1006; | 19 | public static final int TYPE_ADDRESS = 0x1006; |
| 20 | + public static final int TYPE_LOGOUT = 0x1007; | ||
| 20 | 21 | ||
| 21 | public PersonalData(String itemName, String itemMessage, int itemType) { | 22 | public PersonalData(String itemName, String itemMessage, int itemType) { |
| 22 | this.itemName = itemName; | 23 | this.itemName = itemName; |
app/src/main/java/com/cnlive/gundam/user/util/PictureUtil.java
0 → 100644
| 1 | +package com.cnlive.gundam.user.util; | ||
| 2 | + | ||
| 3 | +import android.annotation.TargetApi; | ||
| 4 | +import android.content.ContentUris; | ||
| 5 | +import android.content.Context; | ||
| 6 | +import android.database.Cursor; | ||
| 7 | +import android.net.Uri; | ||
| 8 | +import android.os.Build; | ||
| 9 | +import android.os.Environment; | ||
| 10 | +import android.provider.DocumentsContract; | ||
| 11 | +import android.provider.MediaStore; | ||
| 12 | +import android.widget.Toast; | ||
| 13 | + | ||
| 14 | +import java.io.File; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * Created by gujun on 2017/6/29. | ||
| 18 | + */ | ||
| 19 | + | ||
| 20 | +public class PictureUtil { | ||
| 21 | + private static final String IMAGE_PATH = "/com.cnlive.gundam/image/"; | ||
| 22 | + | ||
| 23 | + public static String getImagePath(Context context){ | ||
| 24 | + String status = Environment.getExternalStorageState(); | ||
| 25 | + String path = ""; | ||
| 26 | + if (status.equals(Environment.MEDIA_MOUNTED)) { | ||
| 27 | + String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath() + IMAGE_PATH; | ||
| 28 | + File file = new File(rootPath); | ||
| 29 | + if(!file.exists()){ | ||
| 30 | + file.mkdirs(); | ||
| 31 | + } | ||
| 32 | + path = rootPath + System.currentTimeMillis() + ".png"; | ||
| 33 | + }else { | ||
| 34 | + Toast.makeText(context,"未插入SD卡",Toast.LENGTH_LONG).show(); | ||
| 35 | + } | ||
| 36 | + return path; | ||
| 37 | + | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + @TargetApi(Build.VERSION_CODES.KITKAT) | ||
| 41 | + public static String getPath(final Context context, final Uri uri) { | ||
| 42 | + | ||
| 43 | + final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; | ||
| 44 | + | ||
| 45 | + // DocumentProvider | ||
| 46 | + if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { | ||
| 47 | + // ExternalStorageProvider | ||
| 48 | + if (isExternalStorageDocument(uri)) { | ||
| 49 | + final String docId = DocumentsContract.getDocumentId(uri); | ||
| 50 | + final String[] split = docId.split(":"); | ||
| 51 | + final String type = split[0]; | ||
| 52 | + | ||
| 53 | + if ("primary".equalsIgnoreCase(type)) { | ||
| 54 | + return Environment.getExternalStorageDirectory() + "/" + split[1]; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + // TODO handle non-primary volumes | ||
| 58 | + } | ||
| 59 | + // DownloadsProvider | ||
| 60 | + else if (isDownloadsDocument(uri)) { | ||
| 61 | + | ||
| 62 | + final String id = DocumentsContract.getDocumentId(uri); | ||
| 63 | + final Uri contentUri = ContentUris.withAppendedId( | ||
| 64 | + Uri.parse("content://downloads/public_downloads"), Long.parseLong(id)); | ||
| 65 | + | ||
| 66 | + return getDataColumn(context, contentUri, null, null); | ||
| 67 | + } | ||
| 68 | + // MediaProvider | ||
| 69 | + else if (isMediaDocument(uri)) { | ||
| 70 | + final String docId = DocumentsContract.getDocumentId(uri); | ||
| 71 | + final String[] split = docId.split(":"); | ||
| 72 | + final String type = split[0]; | ||
| 73 | + | ||
| 74 | + Uri contentUri = null; | ||
| 75 | + if ("image".equals(type)) { | ||
| 76 | + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; | ||
| 77 | + } else if ("video".equals(type)) { | ||
| 78 | + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; | ||
| 79 | + } else if ("audio".equals(type)) { | ||
| 80 | + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + final String selection = "_id=?"; | ||
| 84 | + final String[] selectionArgs = new String[]{ | ||
| 85 | + split[1] | ||
| 86 | + }; | ||
| 87 | + | ||
| 88 | + return getDataColumn(context, contentUri, selection, selectionArgs); | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + // MediaStore (and general) | ||
| 92 | + else if ("content".equalsIgnoreCase(uri.getScheme())) { | ||
| 93 | + | ||
| 94 | + // Return the remote address | ||
| 95 | + if (isGooglePhotosUri(uri)) | ||
| 96 | + return uri.getLastPathSegment(); | ||
| 97 | + | ||
| 98 | + return getDataColumn(context, uri, null, null); | ||
| 99 | + } | ||
| 100 | + // File | ||
| 101 | + else if ("file".equalsIgnoreCase(uri.getScheme())) { | ||
| 102 | + return uri.getPath(); | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + return null; | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + /** | ||
| 109 | + * Get the value of the data column for this Uri. This is useful for | ||
| 110 | + * MediaStore Uris, and other file-based ContentProviders. | ||
| 111 | + * | ||
| 112 | + * @param context The context. | ||
| 113 | + * @param uri The Uri to query. | ||
| 114 | + * @param selection (Optional) Filter used in the query. | ||
| 115 | + * @param selectionArgs (Optional) Selection arguments used in the query. | ||
| 116 | + * @return The value of the _data column, which is typically a file path. | ||
| 117 | + */ | ||
| 118 | + public static String getDataColumn(Context context, Uri uri, String selection, | ||
| 119 | + String[] selectionArgs) { | ||
| 120 | + | ||
| 121 | + Cursor cursor = null; | ||
| 122 | + final String column = "_data"; | ||
| 123 | + final String[] projection = { | ||
| 124 | + column | ||
| 125 | + }; | ||
| 126 | + | ||
| 127 | + try { | ||
| 128 | + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, | ||
| 129 | + null); | ||
| 130 | + if (cursor != null && cursor.moveToFirst()) { | ||
| 131 | + final int index = cursor.getColumnIndexOrThrow(column); | ||
| 132 | + return cursor.getString(index); | ||
| 133 | + } | ||
| 134 | + } finally { | ||
| 135 | + if (cursor != null) | ||
| 136 | + cursor.close(); | ||
| 137 | + } | ||
| 138 | + return null; | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + /** | ||
| 142 | + * @param uri The Uri to check. | ||
| 143 | + * @return Whether the Uri authority is ExternalStorageProvider. | ||
| 144 | + */ | ||
| 145 | + public static boolean isExternalStorageDocument(Uri uri) { | ||
| 146 | + return "com.android.externalstorage.documents".equals(uri.getAuthority()); | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + /** | ||
| 150 | + * @param uri The Uri to check. | ||
| 151 | + * @return Whether the Uri authority is DownloadsProvider. | ||
| 152 | + */ | ||
| 153 | + public static boolean isDownloadsDocument(Uri uri) { | ||
| 154 | + return "com.android.providers.downloads.documents".equals(uri.getAuthority()); | ||
| 155 | + } | ||
| 156 | + | ||
| 157 | + /** | ||
| 158 | + * @param uri The Uri to check. | ||
| 159 | + * @return Whether the Uri authority is MediaProvider. | ||
| 160 | + */ | ||
| 161 | + public static boolean isMediaDocument(Uri uri) { | ||
| 162 | + return "com.android.providers.media.documents".equals(uri.getAuthority()); | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + /** | ||
| 166 | + * @param uri The Uri to check. | ||
| 167 | + * @return Whether the Uri authority is Google Photos. | ||
| 168 | + */ | ||
| 169 | + public static boolean isGooglePhotosUri(Uri uri) { | ||
| 170 | + return "com.google.android.apps.photos.content".equals(uri.getAuthority()); | ||
| 171 | + } | ||
| 172 | +} |
app/src/main/java/com/cnlive/gundam/user/view/SelectPopupWindow.java
0 → 100644
| 1 | +package com.cnlive.gundam.user.view; | ||
| 2 | + | ||
| 3 | +import android.content.Context; | ||
| 4 | +import android.graphics.drawable.ColorDrawable; | ||
| 5 | +import android.view.LayoutInflater; | ||
| 6 | +import android.view.MotionEvent; | ||
| 7 | +import android.view.View; | ||
| 8 | +import android.widget.PopupWindow; | ||
| 9 | +import android.widget.RelativeLayout; | ||
| 10 | + | ||
| 11 | +import com.cnlive.gundam.R; | ||
| 12 | + | ||
| 13 | + | ||
| 14 | +public class SelectPopupWindow extends PopupWindow { | ||
| 15 | + | ||
| 16 | + private View view; | ||
| 17 | + private View tv_cancel; | ||
| 18 | + | ||
| 19 | + public SelectPopupWindow(Context mContext, int layout) { | ||
| 20 | + | ||
| 21 | + this.view = LayoutInflater.from(mContext).inflate(layout, null); | ||
| 22 | + | ||
| 23 | + tv_cancel = view.findViewById(R.id.tv_cancel); | ||
| 24 | + | ||
| 25 | + tv_cancel.setOnClickListener(new View.OnClickListener() { | ||
| 26 | + | ||
| 27 | + public void onClick(View v) { | ||
| 28 | + dismiss(); | ||
| 29 | + } | ||
| 30 | + }); | ||
| 31 | + | ||
| 32 | + this.setOutsideTouchable(true); | ||
| 33 | + this.view.setOnTouchListener(new View.OnTouchListener() { | ||
| 34 | + | ||
| 35 | + public boolean onTouch(View v, MotionEvent event) { | ||
| 36 | + int height = view.findViewById(R.id.pop_layout).getTop(); | ||
| 37 | + int y = (int) event.getY(); | ||
| 38 | + if (event.getAction() == MotionEvent.ACTION_UP) { | ||
| 39 | + if (y < height) { | ||
| 40 | + dismiss(); | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + return true; | ||
| 44 | + } | ||
| 45 | + }); | ||
| 46 | + | ||
| 47 | + /* 设置弹出窗口特征 */ | ||
| 48 | + // 设置视图 | ||
| 49 | + this.setContentView(this.view); | ||
| 50 | + // 设置弹出窗体的宽和高 | ||
| 51 | + this.setHeight(RelativeLayout.LayoutParams.MATCH_PARENT); | ||
| 52 | + this.setWidth(RelativeLayout.LayoutParams.MATCH_PARENT); | ||
| 53 | + // 设置弹出窗体可点击 | ||
| 54 | + this.setFocusable(true); | ||
| 55 | + // 实例化一个ColorDrawable颜色为透明 | ||
| 56 | + ColorDrawable dw = new ColorDrawable(0x30000000); | ||
| 57 | + // 设置弹出窗体的背景 | ||
| 58 | + this.setBackgroundDrawable(dw); | ||
| 59 | + // 设置弹出窗体显示时的动画,从底部向上弹出 | ||
| 60 | + this.setAnimationStyle(R.style.take_photo_anim); | ||
| 61 | + } | ||
| 62 | +} |
app/src/main/java/com/cnlive/gundam/video/activity/PlayerActivity.java
| @@ -22,14 +22,11 @@ import com.cnlive.gundam.video.utils.PlayerUtils; | @@ -22,14 +22,11 @@ import com.cnlive.gundam.video.utils.PlayerUtils; | ||
| 22 | */ | 22 | */ |
| 23 | 23 | ||
| 24 | public class PlayerActivity extends AppCompatActivity { | 24 | public class PlayerActivity extends AppCompatActivity { |
| 25 | - private final String SCREEN_DIRECT_P = "0"; | ||
| 26 | - private final String SCREEN_DIRECT_L = "1"; | ||
| 27 | 25 | ||
| 28 | private Fragment fragment; | 26 | private Fragment fragment; |
| 29 | private VideoListProgram program; | 27 | private VideoListProgram program; |
| 30 | //默认横屏 | 28 | //默认横屏 |
| 31 | - private String screenDirect = SCREEN_DIRECT_L; | ||
| 32 | - private String screenDirectName = "screenDirect"; | 29 | + private int screenDirect = 1; |
| 33 | 30 | ||
| 34 | @Override | 31 | @Override |
| 35 | protected void onCreate(@Nullable Bundle savedInstanceState) { | 32 | protected void onCreate(@Nullable Bundle savedInstanceState) { |
| @@ -69,10 +66,8 @@ public class PlayerActivity extends AppCompatActivity { | @@ -69,10 +66,8 @@ public class PlayerActivity extends AppCompatActivity { | ||
| 69 | } | 66 | } |
| 70 | 67 | ||
| 71 | if (fragment instanceof PlayerUgcLiveFragment || fragment instanceof PlayerUgcVodFragment) { | 68 | if (fragment instanceof PlayerUgcLiveFragment || fragment instanceof PlayerUgcVodFragment) { |
| 72 | - if (intent.hasExtra(screenDirectName)) { | ||
| 73 | - screenDirect = intent.getStringExtra(screenDirectName); | ||
| 74 | - } | ||
| 75 | - if (SCREEN_DIRECT_P.equals(screenDirect)) { | 69 | + screenDirect = program.getIsHorizontalScreen(); |
| 70 | + if (screenDirect == 0) { | ||
| 76 | setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); | 71 | setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); |
| 77 | } else { | 72 | } else { |
| 78 | setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); | 73 | setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); |
app/src/main/java/com/cnlive/gundam/video/fragment/PlayerUgcLiveFragment.java
| 1 | package com.cnlive.gundam.video.fragment; | 1 | package com.cnlive.gundam.video.fragment; |
| 2 | 2 | ||
| 3 | +import android.Manifest; | ||
| 4 | +import android.content.pm.PackageManager; | ||
| 3 | import android.content.res.Configuration; | 5 | import android.content.res.Configuration; |
| 4 | import android.databinding.DataBindingUtil; | 6 | import android.databinding.DataBindingUtil; |
| 5 | import android.os.Bundle; | 7 | import android.os.Bundle; |
| 8 | +import android.support.annotation.NonNull; | ||
| 6 | import android.support.annotation.Nullable; | 9 | import android.support.annotation.Nullable; |
| 7 | import android.support.v4.app.Fragment; | 10 | import android.support.v4.app.Fragment; |
| 8 | import android.view.LayoutInflater; | 11 | import android.view.LayoutInflater; |
| 9 | import android.view.View; | 12 | import android.view.View; |
| 10 | import android.view.ViewGroup; | 13 | import android.view.ViewGroup; |
| 14 | +import android.widget.Toast; | ||
| 11 | 15 | ||
| 12 | import com.cnlive.gundam.R; | 16 | import com.cnlive.gundam.R; |
| 13 | -import com.cnlive.gundam.databinding.FragmentPlayerUgcVodBinding; | 17 | +import com.cnlive.gundam.databinding.FragmentPlayerUgcLiveBinding; |
| 14 | import com.cnlive.gundam.main.model.VideoListProgram; | 18 | import com.cnlive.gundam.main.model.VideoListProgram; |
| 15 | import com.cnlive.gundam.video.model.VideoModel; | 19 | import com.cnlive.gundam.video.model.VideoModel; |
| 16 | import com.cnlive.gundam.video.utils.PlayerUtils; | 20 | import com.cnlive.gundam.video.utils.PlayerUtils; |
| 21 | +import com.cnlive.gundam.video.view.BaseVideoView; | ||
| 17 | import com.cnlive.gundam.video.view.VideoView; | 22 | import com.cnlive.gundam.video.view.VideoView; |
| 18 | 23 | ||
| 19 | /** | 24 | /** |
| 20 | * Created by gujun on 2017/4/5. | 25 | * Created by gujun on 2017/4/5. |
| 21 | */ | 26 | */ |
| 22 | 27 | ||
| 23 | -public class PlayerUgcLiveFragment extends Fragment { | ||
| 24 | - private FragmentPlayerUgcVodBinding binding; | 28 | +public class PlayerUgcLiveFragment extends Fragment implements BaseVideoView.OnUgcLiveStatusPermissionListener{ |
| 29 | + private final int PERMISSION_REQUEST_CODE = 0x1001; | ||
| 30 | + private FragmentPlayerUgcLiveBinding binding; | ||
| 25 | 31 | ||
| 26 | private VideoListProgram program; | 32 | private VideoListProgram program; |
| 27 | private String title; | 33 | private String title; |
| @@ -57,6 +63,7 @@ public class PlayerUgcLiveFragment extends Fragment { | @@ -57,6 +63,7 @@ public class PlayerUgcLiveFragment extends Fragment { | ||
| 57 | @Override | 63 | @Override |
| 58 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { | 64 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { |
| 59 | super.onViewCreated(view, savedInstanceState); | 65 | super.onViewCreated(view, savedInstanceState); |
| 66 | + binding.videoView.setUgcLiveStatusPermissionListener(this);//必须在设置播放数据前调用 | ||
| 60 | binding.videoView.setVideoInfo(new VideoModel(title, id, VideoView.TYPE_UGC_LIVE, rates)); | 67 | binding.videoView.setVideoInfo(new VideoModel(title, id, VideoView.TYPE_UGC_LIVE, rates)); |
| 61 | } | 68 | } |
| 62 | 69 | ||
| @@ -85,4 +92,21 @@ public class PlayerUgcLiveFragment extends Fragment { | @@ -85,4 +92,21 @@ public class PlayerUgcLiveFragment extends Fragment { | ||
| 85 | super.onDestroyView(); | 92 | super.onDestroyView(); |
| 86 | } | 93 | } |
| 87 | 94 | ||
| 95 | + @Override | ||
| 96 | + public void onShouldRequestPermission() { | ||
| 97 | + requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, PERMISSION_REQUEST_CODE); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + @Override | ||
| 101 | + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { | ||
| 102 | + super.onRequestPermissionsResult(requestCode, permissions, grantResults); | ||
| 103 | + if(requestCode == PERMISSION_REQUEST_CODE){ | ||
| 104 | + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { | ||
| 105 | + if(binding != null && binding.videoView != null) | ||
| 106 | + binding.videoView.addUgcLiveStatus(); | ||
| 107 | + } else { | ||
| 108 | + Toast.makeText(getActivity(), "权限已被禁止,您将接收不到直播状态", Toast.LENGTH_LONG).show(); | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + } | ||
| 88 | } | 112 | } |
app/src/main/java/com/cnlive/gundam/video/view/BaseVideoView.java
| 1 | package com.cnlive.gundam.video.view; | 1 | package com.cnlive.gundam.video.view; |
| 2 | 2 | ||
| 3 | +import android.Manifest; | ||
| 3 | import android.content.Context; | 4 | import android.content.Context; |
| 5 | +import android.content.pm.PackageManager; | ||
| 4 | import android.databinding.DataBindingUtil; | 6 | import android.databinding.DataBindingUtil; |
| 7 | +import android.os.Build; | ||
| 8 | +import android.support.v4.content.ContextCompat; | ||
| 5 | import android.util.AttributeSet; | 9 | import android.util.AttributeSet; |
| 6 | import android.util.Log; | 10 | import android.util.Log; |
| 7 | import android.view.LayoutInflater; | 11 | import android.view.LayoutInflater; |
| @@ -59,8 +63,12 @@ public abstract class BaseVideoView extends RelativeLayout implements | @@ -59,8 +63,12 @@ public abstract class BaseVideoView extends RelativeLayout implements | ||
| 59 | 63 | ||
| 60 | private DataSource curDataSource; | 64 | private DataSource curDataSource; |
| 61 | 65 | ||
| 66 | + //播放器播放状态的监听 | ||
| 62 | private OnVideoViewPlayStatusListener l; | 67 | private OnVideoViewPlayStatusListener l; |
| 63 | 68 | ||
| 69 | + //ugclive需要权限监听 | ||
| 70 | + private OnUgcLiveStatusPermissionListener ugcLivePermissionListener; | ||
| 71 | + | ||
| 64 | public BaseVideoView(Context context) { | 72 | public BaseVideoView(Context context) { |
| 65 | this(context, null); | 73 | this(context, null); |
| 66 | } | 74 | } |
| @@ -99,8 +107,17 @@ public abstract class BaseVideoView extends RelativeLayout implements | @@ -99,8 +107,17 @@ public abstract class BaseVideoView extends RelativeLayout implements | ||
| 99 | public void setDataSource() { | 107 | public void setDataSource() { |
| 100 | //只有ugcLive视频才有状态监听 | 108 | //只有ugcLive视频才有状态监听 |
| 101 | if (videoModel.getType().equals(VideoView.TYPE_UGC_LIVE)) { | 109 | if (videoModel.getType().equals(VideoView.TYPE_UGC_LIVE)) { |
| 102 | - VideoStatusUtil.setOnVideoPlayStatusCallback(mOnVideoStatusCallback); | ||
| 103 | - VideoStatusUtil.init(videoModel.getId()); | 110 | + if (Build.VERSION.SDK_INT >= 23) { |
| 111 | + int checkCallPhonePermission = ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_PHONE_STATE); | ||
| 112 | + if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) { | ||
| 113 | + if(ugcLivePermissionListener != null) | ||
| 114 | + ugcLivePermissionListener.onShouldRequestPermission(); | ||
| 115 | + } else { | ||
| 116 | + addUgcLiveStatus(); | ||
| 117 | + } | ||
| 118 | + } else { | ||
| 119 | + addUgcLiveStatus(); | ||
| 120 | + } | ||
| 104 | } | 121 | } |
| 105 | 122 | ||
| 106 | if (isLive) { | 123 | if (isLive) { |
| @@ -113,7 +130,21 @@ public abstract class BaseVideoView extends RelativeLayout implements | @@ -113,7 +130,21 @@ public abstract class BaseVideoView extends RelativeLayout implements | ||
| 113 | 130 | ||
| 114 | preRate = Config.TYPE_PLAY_RATE_2; | 131 | preRate = Config.TYPE_PLAY_RATE_2; |
| 115 | 132 | ||
| 133 | + } | ||
| 116 | 134 | ||
| 135 | + /** | ||
| 136 | + * 设置UGC LIVE的直播状态监听 | ||
| 137 | + */ | ||
| 138 | + public void setUgcLiveStatusPermissionListener(OnUgcLiveStatusPermissionListener l){ | ||
| 139 | + ugcLivePermissionListener = l; | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + /** | ||
| 143 | + * 添加UGC LIVE的直播状态监听 | ||
| 144 | + */ | ||
| 145 | + public void addUgcLiveStatus(){ | ||
| 146 | + VideoStatusUtil.setOnVideoPlayStatusCallback(mOnVideoStatusCallback); | ||
| 147 | + VideoStatusUtil.init(videoModel.getId()); | ||
| 117 | } | 148 | } |
| 118 | 149 | ||
| 119 | /** | 150 | /** |
| @@ -312,4 +343,9 @@ public abstract class BaseVideoView extends RelativeLayout implements | @@ -312,4 +343,9 @@ public abstract class BaseVideoView extends RelativeLayout implements | ||
| 312 | public interface OnVideoViewPlayStatusListener { | 343 | public interface OnVideoViewPlayStatusListener { |
| 313 | void onVideoViewPlayStatus(boolean isPlay); | 344 | void onVideoViewPlayStatus(boolean isPlay); |
| 314 | } | 345 | } |
| 346 | + | ||
| 347 | + //ugc live 监听直播状态得需要android.permission.READ_PHONE_STATE | ||
| 348 | + public interface OnUgcLiveStatusPermissionListener{ | ||
| 349 | + void onShouldRequestPermission(); | ||
| 350 | + } | ||
| 315 | } | 351 | } |
app/src/main/res/drawable-xhdpi/user_list_arrows.png
0 → 100644
680 Bytes
app/src/main/res/drawable-xxhdpi/user_page_back.png
0 → 100644
1.2 KB
app/src/main/res/layout/fragment_personal_edit.xml
| @@ -13,25 +13,40 @@ | @@ -13,25 +13,40 @@ | ||
| 13 | 13 | ||
| 14 | <RelativeLayout | 14 | <RelativeLayout |
| 15 | android:layout_width="match_parent" | 15 | android:layout_width="match_parent" |
| 16 | - android:layout_height="match_parent"> | 16 | + android:layout_height="match_parent" |
| 17 | + android:background="@color/gray_bg" | ||
| 18 | + android:paddingTop="10dp"> | ||
| 17 | 19 | ||
| 18 | - <EditText | ||
| 19 | - android:id="@+id/editText" | 20 | + <LinearLayout |
| 20 | android:layout_width="match_parent" | 21 | android:layout_width="match_parent" |
| 21 | - android:layout_height="50dp" | ||
| 22 | - android:visibility="gone"/> | 22 | + android:layout_height="wrap_content" |
| 23 | + android:orientation="vertical" | ||
| 24 | + android:background="@android:color/white"> | ||
| 25 | + | ||
| 26 | + <EditText | ||
| 27 | + android:id="@+id/editText" | ||
| 28 | + style="@style/LoginContentStyle" | ||
| 29 | + android:layout_width="match_parent" | ||
| 30 | + android:layout_height="50dp" | ||
| 31 | + android:layout_marginLeft="11dp" | ||
| 32 | + android:layout_marginRight="11dp" | ||
| 33 | + android:visibility="gone" /> | ||
| 34 | + | ||
| 35 | + <include | ||
| 36 | + android:id="@+id/includeMobileLayout" | ||
| 37 | + layout="@layout/mobile_keycode_layout" /> | ||
| 23 | 38 | ||
| 24 | - <include | ||
| 25 | - android:id="@+id/includeMobileLayout" | ||
| 26 | - layout="@layout/mobile_keycode_layout"/> | 39 | + </LinearLayout> |
| 27 | 40 | ||
| 28 | <Button | 41 | <Button |
| 29 | android:id="@+id/submit" | 42 | android:id="@+id/submit" |
| 43 | + style="@style/LoginButtonStyle" | ||
| 30 | android:layout_width="match_parent" | 44 | android:layout_width="match_parent" |
| 31 | android:layout_height="50dp" | 45 | android:layout_height="50dp" |
| 32 | android:layout_alignParentBottom="true" | 46 | android:layout_alignParentBottom="true" |
| 33 | android:layout_marginBottom="200dp" | 47 | android:layout_marginBottom="200dp" |
| 34 | android:onClick="@{userPersonalEditFragment.onClick}" | 48 | android:onClick="@{userPersonalEditFragment.onClick}" |
| 49 | + android:background="@drawable/user_btn_login" | ||
| 35 | android:text="提交" /> | 50 | android:text="提交" /> |
| 36 | 51 | ||
| 37 | </RelativeLayout> | 52 | </RelativeLayout> |
app/src/main/res/layout/fragment_player_ugc_live.xml
| @@ -23,9 +23,8 @@ | @@ -23,9 +23,8 @@ | ||
| 23 | 23 | ||
| 24 | <RelativeLayout | 24 | <RelativeLayout |
| 25 | android:id="@+id/contentLayout" | 25 | android:id="@+id/contentLayout" |
| 26 | - android:background="@android:color/black" | ||
| 27 | android:layout_width="match_parent" | 26 | android:layout_width="match_parent" |
| 28 | - android:layout_height="400dp" | 27 | + android:layout_height="match_parent" |
| 29 | android:layout_alignParentBottom="true"> | 28 | android:layout_alignParentBottom="true"> |
| 30 | 29 | ||
| 31 | </RelativeLayout> | 30 | </RelativeLayout> |
app/src/main/res/layout/fragment_user_personal.xml
| @@ -17,6 +17,7 @@ | @@ -17,6 +17,7 @@ | ||
| 17 | </data> | 17 | </data> |
| 18 | 18 | ||
| 19 | <RelativeLayout | 19 | <RelativeLayout |
| 20 | + android:id="@+id/layout" | ||
| 20 | android:layout_width="match_parent" | 21 | android:layout_width="match_parent" |
| 21 | android:layout_height="match_parent"> | 22 | android:layout_height="match_parent"> |
| 22 | 23 | ||
| @@ -27,7 +28,7 @@ | @@ -27,7 +28,7 @@ | ||
| 27 | android:clipToPadding="true" | 28 | android:clipToPadding="true" |
| 28 | android:clipChildren="true" | 29 | android:clipChildren="true" |
| 29 | android:paddingTop="5dp" | 30 | android:paddingTop="5dp" |
| 30 | - android:background="@color/list_divider" | 31 | + android:background="@color/gray_bg" |
| 31 | app:adapter="@{listAdapter}" | 32 | app:adapter="@{listAdapter}" |
| 32 | app:layoutManager="@{layoutManager}"/> | 33 | app:layoutManager="@{layoutManager}"/> |
| 33 | 34 |
app/src/main/res/layout/layout_actionbar_back.xml
| @@ -8,6 +8,7 @@ | @@ -8,6 +8,7 @@ | ||
| 8 | android:layout_height="?attr/actionBarSize" | 8 | android:layout_height="?attr/actionBarSize" |
| 9 | android:theme="@style/ThemeOverlay.AppCompat.Light" | 9 | android:theme="@style/ThemeOverlay.AppCompat.Light" |
| 10 | app:contentInsetEnd="?attr/actionBarSize" | 10 | app:contentInsetEnd="?attr/actionBarSize" |
| 11 | + android:background="@android:color/white" | ||
| 11 | android:visibility="gone" | 12 | android:visibility="gone" |
| 12 | tools:visibility="visible"> | 13 | tools:visibility="visible"> |
| 13 | 14 |
app/src/main/res/layout/layout_personal_header_item.xml
| @@ -38,6 +38,7 @@ | @@ -38,6 +38,7 @@ | ||
| 38 | android:text="@{data.getItemName()}" | 38 | android:text="@{data.getItemName()}" |
| 39 | android:textColor="@color/black" | 39 | android:textColor="@color/black" |
| 40 | android:textSize="18sp" | 40 | android:textSize="18sp" |
| 41 | + android:layout_marginLeft="10dp" | ||
| 41 | tools:text="nick" /> | 42 | tools:text="nick" /> |
| 42 | 43 | ||
| 43 | <ImageView | 44 | <ImageView |
app/src/main/res/layout/layout_personal_item.xml
| @@ -37,6 +37,7 @@ | @@ -37,6 +37,7 @@ | ||
| 37 | android:text="@{data.getItemName()}" | 37 | android:text="@{data.getItemName()}" |
| 38 | android:textColor="@color/black" | 38 | android:textColor="@color/black" |
| 39 | android:textSize="18sp" | 39 | android:textSize="18sp" |
| 40 | + android:layout_marginLeft="10dp" | ||
| 40 | tools:text="nick" /> | 41 | tools:text="nick" /> |
| 41 | 42 | ||
| 42 | <TextView | 43 | <TextView |
| @@ -48,7 +49,7 @@ | @@ -48,7 +49,7 @@ | ||
| 48 | android:layout_toRightOf="@+id/itemName" | 49 | android:layout_toRightOf="@+id/itemName" |
| 49 | android:gravity="center_vertical|right" | 50 | android:gravity="center_vertical|right" |
| 50 | android:text="@{data.getItemMessage()}" | 51 | android:text="@{data.getItemMessage()}" |
| 51 | - android:textColor="@color/black" | 52 | + android:textColor="@color/gray" |
| 52 | android:textSize="18sp" | 53 | android:textSize="18sp" |
| 53 | tools:text="haha" /> | 54 | tools:text="haha" /> |
| 54 | 55 | ||
| @@ -56,7 +57,9 @@ | @@ -56,7 +57,9 @@ | ||
| 56 | android:layout_width="wrap_content" | 57 | android:layout_width="wrap_content" |
| 57 | android:layout_height="wrap_content" | 58 | android:layout_height="wrap_content" |
| 58 | android:layout_alignParentRight="true" | 59 | android:layout_alignParentRight="true" |
| 59 | - android:layout_centerVertical="true"/> | 60 | + android:layout_centerVertical="true" |
| 61 | + android:src="@drawable/user_list_arrows" | ||
| 62 | + android:layout_marginRight="10dp"/> | ||
| 60 | 63 | ||
| 61 | </RelativeLayout> | 64 | </RelativeLayout> |
| 62 | 65 |
app/src/main/res/layout/layout_personal_logout_item.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<layout xmlns:android="http://schemas.android.com/apk/res/android"> | ||
| 3 | + | ||
| 4 | + <data> | ||
| 5 | + | ||
| 6 | + <import type="com.cnlive.gundam.user.model.PersonalData" /> | ||
| 7 | + <import type="com.cnlive.gundam.main.ui.adapter.DataBindingAdapter.OnAdapterViewClickListener"/> | ||
| 8 | + | ||
| 9 | + <variable | ||
| 10 | + name="data" | ||
| 11 | + type="PersonalData"/> | ||
| 12 | + | ||
| 13 | + <variable | ||
| 14 | + name="viewClickListner" | ||
| 15 | + type="OnAdapterViewClickListener<PersonalData>"/> | ||
| 16 | + | ||
| 17 | + </data> | ||
| 18 | + | ||
| 19 | + <RelativeLayout | ||
| 20 | + android:id="@+id/itemLayout" | ||
| 21 | + android:layout_width="match_parent" | ||
| 22 | + android:layout_height="wrap_content"> | ||
| 23 | + | ||
| 24 | + <Button | ||
| 25 | + android:id="@+id/logout" | ||
| 26 | + style="@style/LoginButtonStyle" | ||
| 27 | + android:layout_width="match_parent" | ||
| 28 | + android:layout_height="50dp" | ||
| 29 | + android:background="@drawable/user_btn_login" | ||
| 30 | + android:layout_marginTop="50dp" | ||
| 31 | + android:onClick="@{(view)->viewClickListner.onViewClick(view,data)}" | ||
| 32 | + android:text="退出" /> | ||
| 33 | + | ||
| 34 | + </RelativeLayout> | ||
| 35 | + | ||
| 36 | +</layout> | ||
| 0 | \ No newline at end of file | 37 | \ No newline at end of file |
app/src/main/res/layout/pop_modify_gender.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + android:layout_width="fill_parent" | ||
| 4 | + android:layout_height="wrap_content" | ||
| 5 | + android:gravity="center_horizontal" | ||
| 6 | + android:orientation="vertical"> | ||
| 7 | + | ||
| 8 | + <RelativeLayout | ||
| 9 | + android:id="@+id/pop_layout" | ||
| 10 | + android:layout_width="fill_parent" | ||
| 11 | + android:layout_height="wrap_content"> | ||
| 12 | + | ||
| 13 | + <TextView | ||
| 14 | + android:id="@+id/tv_cancel" | ||
| 15 | + android:layout_width="match_parent" | ||
| 16 | + android:layout_height="58dp" | ||
| 17 | + android:layout_alignParentBottom="true" | ||
| 18 | + android:background="#ffffff" | ||
| 19 | + android:gravity="center" | ||
| 20 | + android:text="取消" | ||
| 21 | + android:textColor="#FF6633" | ||
| 22 | + android:textSize="16sp" /> | ||
| 23 | + | ||
| 24 | + <LinearLayout | ||
| 25 | + android:id="@+id/boy" | ||
| 26 | + android:layout_width="match_parent" | ||
| 27 | + android:layout_height="58dp" | ||
| 28 | + android:layout_above="@id/tv_cancel" | ||
| 29 | + android:background="#ffffff" | ||
| 30 | + android:orientation="vertical"> | ||
| 31 | + | ||
| 32 | + <TextView | ||
| 33 | + android:layout_width="match_parent" | ||
| 34 | + android:layout_height="50dp" | ||
| 35 | + android:layout_alignParentBottom="true" | ||
| 36 | + android:gravity="center" | ||
| 37 | + android:text="男" | ||
| 38 | + android:textColor="#333333" | ||
| 39 | + android:textSize="16sp" /> | ||
| 40 | + | ||
| 41 | + <View | ||
| 42 | + android:layout_width="match_parent" | ||
| 43 | + android:layout_height="10dp" | ||
| 44 | + android:background="#D8D8D8" /> | ||
| 45 | + </LinearLayout> | ||
| 46 | + | ||
| 47 | + | ||
| 48 | + <LinearLayout | ||
| 49 | + android:id="@+id/girl" | ||
| 50 | + android:layout_width="match_parent" | ||
| 51 | + android:layout_height="58dp" | ||
| 52 | + android:layout_above="@id/boy" | ||
| 53 | + android:background="#ffffff" | ||
| 54 | + android:orientation="vertical"> | ||
| 55 | + | ||
| 56 | + <TextView | ||
| 57 | + android:layout_width="match_parent" | ||
| 58 | + android:layout_height="50dp" | ||
| 59 | + android:layout_alignParentBottom="true" | ||
| 60 | + android:gravity="center" | ||
| 61 | + android:text="女" | ||
| 62 | + android:textColor="#333333" | ||
| 63 | + android:textSize="16sp" /> | ||
| 64 | + | ||
| 65 | + <View | ||
| 66 | + android:layout_width="match_parent" | ||
| 67 | + android:layout_height="1dp" | ||
| 68 | + android:background="#D8D8D8" /> | ||
| 69 | + </LinearLayout> | ||
| 70 | + | ||
| 71 | + | ||
| 72 | + <LinearLayout | ||
| 73 | + android:id="@+id/ll_changeHead" | ||
| 74 | + android:layout_width="match_parent" | ||
| 75 | + android:layout_height="51dp" | ||
| 76 | + android:layout_above="@id/girl" | ||
| 77 | + android:background="#ffffff" | ||
| 78 | + android:orientation="vertical"> | ||
| 79 | + | ||
| 80 | + <TextView | ||
| 81 | + android:id="@+id/changeTitleTag" | ||
| 82 | + android:layout_width="match_parent" | ||
| 83 | + android:layout_height="50dp" | ||
| 84 | + android:layout_alignParentBottom="true" | ||
| 85 | + android:gravity="center" | ||
| 86 | + android:text="性别修改" | ||
| 87 | + android:textColor="@color/black" | ||
| 88 | + android:textSize="18sp" /> | ||
| 89 | + | ||
| 90 | + <View | ||
| 91 | + android:layout_width="match_parent" | ||
| 92 | + android:layout_height="1dp" | ||
| 93 | + android:background="@color/color_list_bg" /> | ||
| 94 | + | ||
| 95 | + </LinearLayout> | ||
| 96 | + | ||
| 97 | + </RelativeLayout> | ||
| 98 | + | ||
| 99 | +</RelativeLayout> | ||
| 0 | \ No newline at end of file | 100 | \ No newline at end of file |
app/src/main/res/layout/pop_take_photo.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + android:layout_width="fill_parent" | ||
| 4 | + android:layout_height="wrap_content" | ||
| 5 | + android:gravity="center_horizontal" | ||
| 6 | + android:orientation="vertical"> | ||
| 7 | + | ||
| 8 | + <RelativeLayout | ||
| 9 | + android:id="@+id/pop_layout" | ||
| 10 | + android:layout_width="fill_parent" | ||
| 11 | + android:layout_height="wrap_content"> | ||
| 12 | + | ||
| 13 | + <TextView | ||
| 14 | + android:id="@+id/tv_cancel" | ||
| 15 | + android:layout_width="match_parent" | ||
| 16 | + android:layout_height="58dp" | ||
| 17 | + android:layout_alignParentBottom="true" | ||
| 18 | + android:background="#ffffff" | ||
| 19 | + android:gravity="center" | ||
| 20 | + android:text="取消" | ||
| 21 | + android:textColor="#FF6633" | ||
| 22 | + android:textSize="16sp" /> | ||
| 23 | + | ||
| 24 | + <LinearLayout | ||
| 25 | + android:id="@+id/ll_pick_photo" | ||
| 26 | + android:layout_width="match_parent" | ||
| 27 | + android:layout_height="58dp" | ||
| 28 | + android:layout_above="@id/tv_cancel" | ||
| 29 | + android:background="#ffffff" | ||
| 30 | + android:orientation="vertical"> | ||
| 31 | + | ||
| 32 | + <TextView | ||
| 33 | + android:layout_width="match_parent" | ||
| 34 | + android:layout_height="50dp" | ||
| 35 | + android:layout_alignParentBottom="true" | ||
| 36 | + android:gravity="center" | ||
| 37 | + android:text="从手机相册中选取" | ||
| 38 | + android:textColor="#333333" | ||
| 39 | + android:textSize="16sp" /> | ||
| 40 | + | ||
| 41 | + <View | ||
| 42 | + android:layout_width="match_parent" | ||
| 43 | + android:layout_height="10dp" | ||
| 44 | + android:background="#D8D8D8" /> | ||
| 45 | + </LinearLayout> | ||
| 46 | + | ||
| 47 | + | ||
| 48 | + <LinearLayout | ||
| 49 | + android:id="@+id/ll_take_photo" | ||
| 50 | + android:layout_width="match_parent" | ||
| 51 | + android:layout_height="58dp" | ||
| 52 | + android:layout_above="@id/ll_pick_photo" | ||
| 53 | + android:background="#ffffff" | ||
| 54 | + android:orientation="vertical"> | ||
| 55 | + | ||
| 56 | + <TextView | ||
| 57 | + android:layout_width="match_parent" | ||
| 58 | + android:layout_height="50dp" | ||
| 59 | + android:layout_alignParentBottom="true" | ||
| 60 | + android:gravity="center" | ||
| 61 | + android:text="拍照" | ||
| 62 | + android:textColor="#333333" | ||
| 63 | + android:textSize="16sp" /> | ||
| 64 | + | ||
| 65 | + <View | ||
| 66 | + android:layout_width="match_parent" | ||
| 67 | + android:layout_height="1dp" | ||
| 68 | + android:background="#D8D8D8" /> | ||
| 69 | + </LinearLayout> | ||
| 70 | + | ||
| 71 | + | ||
| 72 | + <LinearLayout | ||
| 73 | + android:id="@+id/ll_changeHead" | ||
| 74 | + android:layout_width="match_parent" | ||
| 75 | + android:layout_height="51dp" | ||
| 76 | + android:layout_above="@id/ll_take_photo" | ||
| 77 | + android:background="#ffffff" | ||
| 78 | + android:orientation="vertical"> | ||
| 79 | + | ||
| 80 | + <TextView | ||
| 81 | + android:id="@+id/changeTitleTag" | ||
| 82 | + android:layout_width="match_parent" | ||
| 83 | + android:layout_height="50dp" | ||
| 84 | + android:layout_alignParentBottom="true" | ||
| 85 | + android:gravity="center" | ||
| 86 | + android:text="头像修改" | ||
| 87 | + android:textColor="@color/black" | ||
| 88 | + android:textSize="18sp" /> | ||
| 89 | + | ||
| 90 | + <View | ||
| 91 | + android:layout_width="match_parent" | ||
| 92 | + android:layout_height="1dp" | ||
| 93 | + android:background="@color/color_list_bg" /> | ||
| 94 | + | ||
| 95 | + </LinearLayout> | ||
| 96 | + | ||
| 97 | + </RelativeLayout> | ||
| 98 | + | ||
| 99 | +</RelativeLayout> | ||
| 0 | \ No newline at end of file | 100 | \ No newline at end of file |
app/src/main/res/values/colors.xml
| @@ -8,4 +8,7 @@ | @@ -8,4 +8,7 @@ | ||
| 8 | 8 | ||
| 9 | <color name="rate_sel">#ff0000</color> | 9 | <color name="rate_sel">#ff0000</color> |
| 10 | <color name="rate_nor">#ffffff</color> | 10 | <color name="rate_nor">#ffffff</color> |
| 11 | + | ||
| 12 | + <color name="gray">#9e9e9e</color> | ||
| 13 | + <color name="gray_bg">#dedbdb</color> | ||
| 11 | </resources> | 14 | </resources> |